83 lines
946 B
Plaintext
83 lines
946 B
Plaintext
|
|
/**
|
|
* Store
|
|
*/
|
|
|
|
var evt = {};
|
|
|
|
/**
|
|
* Expose
|
|
*/
|
|
|
|
module.exports = {
|
|
|
|
/**
|
|
* On
|
|
*
|
|
* @param {String} key
|
|
* @param {Function} fn
|
|
* @api public
|
|
*/
|
|
|
|
on: function(key, fn) {
|
|
evt[key] || (evt[key] = []);
|
|
evt[key].push(fn);
|
|
},
|
|
|
|
/**
|
|
* Off
|
|
*
|
|
* @param {String} key
|
|
* @param {Function} fn
|
|
* @api public
|
|
*/
|
|
|
|
off: function(key, fn) {
|
|
var val = evt[key];
|
|
|
|
if(!val) return;
|
|
|
|
var i = val.indexOf(fn);
|
|
|
|
if(-1 == i) return;
|
|
|
|
val.splice(i, 1);
|
|
},
|
|
|
|
/**
|
|
* One
|
|
*
|
|
* @param {String} key
|
|
* @param {Mixed} val
|
|
* @api public
|
|
*/
|
|
|
|
one: function(key, val) {
|
|
var ref = evt[key];
|
|
|
|
if(!ref || !ref.length) return;
|
|
|
|
ref[0](val);
|
|
},
|
|
|
|
/**
|
|
* Emit
|
|
*
|
|
* @param {String} key
|
|
* @param {Mixed} val
|
|
* @api public
|
|
*/
|
|
|
|
emit: function(key, val) {
|
|
if(!evt[key]) return;
|
|
|
|
evt[key].forEach(emit);
|
|
|
|
function emit(fn) {
|
|
fn(val);
|
|
}
|
|
}
|
|
|
|
};
|
|
|