module.exports = CollectingHandler; function CollectingHandler(cbs){ this._cbs = cbs || {}; this.events = []; } var EVENTS = require("./").EVENTS; Object.keys(EVENTS).forEach(function(name){ if(EVENTS[name] === 0){ name = "on" + name; CollectingHandler.prototype[name] = function(){ this.events.push([name]); if(this._cbs[name]) this._cbs[name](); }; } else if(EVENTS[name] === 1){ name = "on" + name; CollectingHandler.prototype[name] = function(a){ this.events.push([name, a]); if(this._cbs[name]) this._cbs[name](a); }; } else if(EVENTS[name] === 2){ name = "on" + name; CollectingHandler.prototype[name] = function(a, b){ this.events.push([name, a, b]); if(this._cbs[name]) this._cbs[name](a, b); }; } else { throw Error("wrong number of arguments"); } }); CollectingHandler.prototype.onreset = function(){ this.events = []; if(this._cbs.onreset) this._cbs.onreset(); }; CollectingHandler.prototype.restart = function(){ if(this._cbs.onreset) this._cbs.onreset(); for(var i = 0, len = this.events.length; i < len; i++){ if(this._cbs[this.events[i][0]]){ var num = this.events[i].length; if(num === 1){ this._cbs[this.events[i][0]](); } else if(num === 2){ this._cbs[this.events[i][0]](this.events[i][1]); } else { this._cbs[this.events[i][0]](this.events[i][1], this.events[i][2]); } } } };