jsketch/sketchable.utils.js

74 lines
1.7 KiB
JavaScript

/**
* Data binding lib.
*/
(function(){
var cache = [0],
expando = 'data' + +(new Date);
function data(elem) {
var cacheIndex = elem[expando],
nextCacheIndex = cache.length;
if (!cacheIndex) {
cacheIndex = elem[expando] = nextCacheIndex;
cache[cacheIndex] = {};
}
return cache[cacheIndex];
};
window.dataBind = data;
})();
/**
* Event manager.
*/
var Event = {
add: function(elem, type, fn) {
if (!elem) return false;
if (elem.addEventListener) { // W3C standard
elem.addEventListener(type, fn, false);
} else if (elem.attachEvent) { // IE versions
elem.attachEvent("on"+type, fn);
} else { // Really old browser
elem[type+fn] = function(){ fn(window.event); };
}
},
remove: function(elem, type, fn) {
if (!elem) return false;
if (elem.removeEventListener) { // W3C standard
elem.removeEventListener(type, fn, false);
} else if (elem.detachEvent) { // IE versions
elem.detachEvent("on"+type, fn);
} else { // Really old browser
elem[type+fn] = null;
}
},
isRightClick: function(ev) {
if (!ev) ev = window.event;
if (ev.which) return ev.which === 3;
else if (ev.button) return e.button === 2;
return false;
}
};
/**
* A handy method to (deep) extend an object.
*/
var deepExtend = function(myObj) {
myObj = myObj || {};
for (var i = 1; i < arguments.length; i++) {
var obj = arguments[i];
if (!obj) continue;
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'object')
deepExtend(myObj[key], obj[key]);
else
myObj[key] = obj[key];
}
}
}
return myObj;
};