latte_lib
Version:
188 lines (172 loc) • 4.32 kB
JavaScript
var events;
var latte_lib = require("./lib.js");
if( latte_lib.isWindow) {
/**
@class events
@namespace latte_lib
@module basic
*/
var events = function() {
this._events = this._events || {};
};
(events.interface = function() {
/**
@method on
@public
@param {String} event
@param {Function} fn
@return {events} this
@example
var Events = require("latte_lib").events;
var events = new Events();
events.on("hello", function() {
log("latte");
});
events.emit("hello");
*/
this.on = this.addEventListener = function(event , fn) {
this._events = this._events || {};
(this._events[event] = this._events[event] || [])
.push(fn);
return this;
};
/**
@method once
@public
@param {String} event
@param {Function} fn
@return {EventEmitter} this
@example
var Events = require("latte_lib").events;
var events = new Events();
events.once("hello", function() {
log("latte");
});
events.emit("hello");
events.emit("hello");
*/
this.once = function(event, fn) {
var self = this;
this._events = this._events || {};
function on() {
self.off(event, on);
fn.apply(this, arguments);
}
on.fn = fn;
this.on(event, on);
return this;
};
/**
@method off
@public
@param {String} event
@param {Function} fn
@return {EventEmitter} this
@example
var Events = require("latte_lib").events;
var events = new Events();
var fun = function() {
log("latte");
};
events.once("hello", fun);
events.emit("hello", fun);
*/
this.off =
this.removeListener =
this.removeAllListeners =
this.removeEventListener = function(event, fn){
this._events = this._events || {};
// all
if (0 == arguments.length) {
this._events = {};
return this;
}
// specific event
var callbacks = this._events[event];
if (!callbacks) return this;
// remove all handlers
if (1 == arguments.length) {
delete this._events[event];
return this;
}
// remove specific handler
var cb;
for (var i = 0; i < callbacks.length; i++) {
cb = callbacks[i];
if (cb === fn || cb.fn === fn) {
callbacks.splice(i, 1);
break;
}
}
return this;
};
/**
@method emit
@public
@param {String} event
@return {EventEmitter} this
@example
var Events = require("latte_lib").events;
var events = new Events();
var fun = function() {
log("latte");
};
events.on("hello", fun);
event.emit("hello")
*/
this.emit = function(event){
this._events = this._events || {};
var args = [].slice.call(arguments, 1)
, callbacks = this._events[event];
if (callbacks) {
callbacks = callbacks.slice(0);
for (var i = 0, len = callbacks.length; i < len; ++i) {
callbacks[i].apply(this, args);
}
}
return this;
};
/**
@method listeners
@public
@param {String} event
@return {Function[]}
@example
var Events = require("latte_lib").events;
var events = new Events();
var fun = function() {
log("latte");
};
log(events.listeners("hello"));
*/
this.listeners = function(event){
this._events = this._events || {};
return this._events[event] || [];
};
/**
@method hasListeners
@public
@param {String} event
@return {Bool}
@example
var Events = require("latte_lib").events;
var events = new Events();
var fun = function() {
log("latte");
};
log(events.hasListeners("hello"));
*/
this.hasEvent = function(event, func) {
return this.listeners(event).indexOf(func) != -1;
}
}).call(events.prototype);
}else{
events = require("events").EventEmitter;
events.prototype.off = events.prototype.removeListener;
}
(function() {
this.hasListeners = function(event){
return !! this.listeners(event).length;
};
}).call(events.prototype);
module.exports = events;