0.0.0 • Published 10 years ago

mako-event-emitter v0.0.0

Weekly downloads
1
License
MIT
Repository
-
Last release
10 years ago

##API

###EventEmitter.prototype.on(type, fn)

  • type string - message type
  • fn function - handler to add

Add a handler for a message type

EventEmitter.prototype.on = function (type, fn, ctx) {
	var wrapped;

	ctx = ctx || this;	
	wrapped = function () {
		fn.apply(ctx, Array.prototype.slice.call(arguments, 0));
	};

	fn.wrapped = wrapped;

	if(!this.listeners[type]) {
		this.listeners[type] = [wrapped];
	}
	else {
		this.listeners[type].push(wrapped);
	}
};

###EventEmitter.prototype.once(type, fn)

  • type string - message type
  • fn function - handler to add

Add a handler for a message type which removes itself after a single execution

EventEmitter.prototype.once = function (type, fn, ctx) {
	var wrapped;

	ctx = ctx || this;

	wrapped = function () {
		ctx.off(type, fn);
		fn.apply(ctx, Array.prototype.slice(arguments, 0));
	};

	fn.wrapped = wrapped;

	if(!this.listeners[type]) {
		this.listeners[type] = [wrapped];
	}
	else {
		this.listeners[type].push(wrapped);
	}	
};

###EventEmitter.prototype.off(type, fn)

  • type string - message type
  • fn function - handler to remove

Remove a handler for a message type

EventEmitter.prototype.off = function (type, fn) {
	var index, index2;

	if(this.listeners[type]) {
		index = this.listeners[type].indexOf(fn);
		index2 = this.listeners[type].indexOf(fn.wrapped);
		if(index > -1) {
			this.listeners[type].splice(index, 1);
			return true;
		}
		else if(index2 > -1) {
			this.listeners[type].splice(index2, 1);
			return true;
		}
		else {
			return false;
		}
	}
	else {
		return false;
	}
};

###EventEmitter.prototype.emit(type, payload)

  • type string - the type of event to emit
  • payload ...(object,number,string) - Any additional arguments will be sent to the handlers for this event

Triggers an event of a specific type, with any additional payload passed.

EventEmitter.prototype.emit = function (type) {
	var payload = Array.prototype.slice.call(arguments, 1),
		fns = this.listeners[type] || [],
		i;

	for(i=0; i<fns.length; i++) {
		fns[i](payload);
	}
};

module.exports = EventEmitter;
},{}]},{},[1])