//Library isn't full function DOMEvent(){ this.listeners = []; } DOMEvent.prototype.register = function(name, lnr, callslimit){ if(this.hasNamedListener(name)){ return false; } var ev = { name: name, func: lnr, calls: 0, callslimit: callslimit ? callslimit : -1 }; this.listeners.push(ev); } DOMEvent.prototype.remove = function(name){ this.listeners.each( function(lnr, index){ if(lnr.name == name){ this.listeners.remove(index); throw $break; } }.bind(this) ); } DOMEvent.prototype.fire = function(){ var args = arguments; this.listeners.each( function(lnr){ var obj = lnr.func.bound ? lnr.func.bound[0] : this.defaultThis || lnr; lnr.func.apply(obj, args); lnr.calls++; if(lnr.calls == lnr.callslimit){ this.remove(lnr.name) } }.bind(this) ) } DOMEvent.prototype.length = function(){ return this.listeners.length; } DOMEvent.prototype.hasNamedListener = function(name, no_bool){ var ret = false; this.listeners.each( function(lnr){ if(lnr.name == name){ ret = lnr; throw $break; } } ); return !no_bool ? !!(ret) : ret; } DOMEvent.prototype.get = function(name){ return this.hasNamedListener(name, true); }; DOMEvent.prototype.toString = function(){ var str = "object DOMEvent\n"; str += "\n"; str += "Listeners: "; this.listeners.each(function(lnr){ str += lnr.name + ", "; }); var reg = new RegExp(", $"); str = str.replace(reg, ""); str += "\nListeners length: " + this.listeners.length; return str; } DOMEvent.cloneEvent = function(d_event, obj){ var ret = obj ? false : true; obj = obj ? obj : {}; obj.register = function(name, lnr, callslimit){ d_event.register(name, lnr, callslimit); } obj.remove = function(name){ d_event.remove(name) } obj.length = function(){ return d_event.length(); } obj.hasNamedListener = function(name){ return d_event.hasNamedListener(name); } obj.get = function(name){ return d_event.get(name); } obj.eachLnr = function(iterator){ d_event.eachLnr(iterator); } obj.toString = function(){ return d_event.toString(); } if(ret){ return obj; } }