UNPKG

tastypie

Version:

Tastypie is a webservice API framework for Node.js based on Django's Tastypie Framework. It provides a convenient, yet powerful and highly customizable, abstraction for creating REST-style interfaces

70 lines (52 loc) 1.72 kB
/* Emitter */"use strict" var indexOf = require("mout/array/indexOf"), forEach = require("mout/array/forEach") var prime = require("./index"), defer = require("./defer") var slice = Array.prototype.slice; var Emitter = prime({ constructor: function(stoppable){ this._stoppable = stoppable }, on: function(event, fn){ var listeners = this._listeners || (this._listeners = {}), events = listeners[event] || (listeners[event] = []) if (indexOf(events, fn) === -1) events.push(fn) return this }, off: function(event, fn){ var listeners = this._listeners, events if (listeners && (events = listeners[event])){ var io = indexOf(events, fn) if (io > -1) events.splice(io, 1) if (!events.length) delete listeners[event]; for (var l in listeners) return this delete this._listeners } return this }, emit: function(event){ var self = this, args = slice.call(arguments, 1) var emit = function(){ var listeners = self._listeners, events if (listeners && (events = listeners[event])){ forEach(events.slice(0), function(event){ var result = event.apply(self, args) if (self._stoppable) return result }) } } if (args[args.length - 1] === Emitter.EMIT_SYNC){ args.pop() emit() } else { defer(emit) } return this } }) Emitter.EMIT_SYNC = {} module.exports = Emitter