Class for generic event handling.
Params
[opts.events]
Object.<string, function|Array.<function>>
Event callbacks to fire each time the event is triggered.
[opts.singles]
Object.<string, function|Array.<function>>
Event callbacks to fire only once the next time the event is triggered.
Returns
EventHandler
|
module.exports = function (opts) {
var events = {},
singles = {},
name,
|
triggerCache = {};
|
|
Load in the initial callbacks. |
opts = opts || {};
for (name in opts.events) {
events[name] = opts.events[name];
}
for (name in opts.singles) {
singles[name] = opts.singles[name];
}
return {
|
on: function (name, cb, lazy) {
if (!lazy && name in triggerCache) {
cb(triggerCache[name]);
}
events[name] = events[name] || [];
events[name].push(cb);
},
|
|
one: function (name, cb, lazy) {
if (!lazy && name in triggerCache) {
cb(triggerCache[name]);
} else {
singles[name] = singles[name] || [];
singles[name].push(cb);
}
},
|
|
off: function (name) {
if (name) {
events[name] = [];
singles[name] = [];
} else {
events = {};
singles = {};
triggerCache = {};
}
},
|
|
trigger: function (name, data) {
if (name in events) {
events[name].forEach(function (cb) {
cb(data);
});
}
if (name in singles) {
singles[name].forEach(function (cb) {
cb(data);
});
singles[name] = [];
}
|
|
Cache that this event has fired. |
triggerCache[name] = data;
}
};
};
|