56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
/**
|
|
* MicroEvent - to make any js object an event emitter (server or browser)
|
|
*
|
|
* - pure javascript - server compatible, browser compatible
|
|
* - dont rely on the browser doms
|
|
* - super simple - you get it immediatly, no mistery, no magic involved
|
|
*
|
|
* - create a MicroEventDebug with goodies to debug
|
|
* - make it safer to use
|
|
*/
|
|
|
|
var MicroEvent = function(){};
|
|
MicroEvent.prototype = {
|
|
bind : function(event, fct){
|
|
this._events = this._events || {};
|
|
this._events[event] = this._events[event] || [];
|
|
this._events[event].push(fct);
|
|
},
|
|
unbind : function(event, fct){
|
|
this._events = this._events || {};
|
|
if( event in this._events === false ) return;
|
|
this._events[event].splice(this._events[event].indexOf(fct), 1);
|
|
},
|
|
trigger : function(event /* , args... */){
|
|
this._events = this._events || {};
|
|
if( event in this._events === false ) return;
|
|
for(var i = 0; i < this._events[event].length; i++){
|
|
this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1));
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* mixin will delegate all MicroEvent.js function in the destination object
|
|
*
|
|
* - require('MicroEvent').mixin(Foobar) will make Foobar able to use MicroEvent
|
|
*
|
|
* @param {Object} the object which will support MicroEvent
|
|
*/
|
|
MicroEvent.mixin = function(destObject){
|
|
var props = ['bind', 'unbind', 'trigger'];
|
|
for(var i = 0; i < props.length; i ++){
|
|
if( typeof destObject === 'function' ){
|
|
destObject.prototype[props[i]] = MicroEvent.prototype[props[i]];
|
|
}else{
|
|
destObject[props[i]] = MicroEvent.prototype[props[i]];
|
|
}
|
|
}
|
|
return destObject;
|
|
}
|
|
|
|
// export in common js
|
|
if( typeof module !== "undefined" && ('exports' in module)){
|
|
module.exports = MicroEvent;
|
|
}
|