UNPKG

ti

Version:

A simple MVC framework for node web server.

103 lines (76 loc) 1.56 kB
var __Events__ = {}, _slice = Array.prototype.slice; function Event(name){ this.NAMESPACE = name; } var _EP_ = Event.prototype; _EP_.listen = _EP_.addEventListener = function (name,fn) { if(!fn) return; var id = this.NAMESPACE, space = __Events__[id].evs; space[name] ? space[name].push(fn):space[name] = [fn]; return this; } _EP_.fire = function (name) { var args = _slice.call(arguments,1), id = this.NAMESPACE, fns = __Events__[id].evs[name], i=0,l,j=0,k, fns2 = __Events__[id].once[name]; if(fns && fns.length){ l= fns.length; for(;i<l;i++){ fns[i].apply(fns[i],args); } } if(fns2 && fns2.length){ k=fns2.length; for(;j<k;j++){ fns2[j].apply(fns2[j],args); } try{ delete __Events__[id].once[name]; }catch(e){ __Events__[id].once[name] = null; } } return this; } _EP_.once = function(name,fn){ if(!fn) return; var id = this.NAMESPACE, space = __Events__[id].once; space[name] ? space[name].push(fn):space[name] = [fn]; return this; } _EP_.remove = function(name,fn){ var E = __Events__[name]; if(!E) return; var space = E.evs, i = 0, l, fnStr = fn.toString(); if(space && space.length){ l = space.length; for(;i<l;i++){ if(fnStr == space[i].toString()){ space.splice(i,1); } } } } var ret = function(name) { var E = __Events__[name]; if(!E){ E = __Events__[name] = { cons:new Event(name), evs:{}, once:{} } } return E['cons']; } module.exports = ret;