3 * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
7 (function (exports, io) {
13 exports.EventEmitter = EventEmitter;
16 * Event emitter constructor.
21 function EventEmitter () {};
29 EventEmitter.prototype.on = function (name, fn) {
34 if (!this.$events[name]) {
35 this.$events[name] = fn;
36 } else if (io.util.isArray(this.$events[name])) {
37 this.$events[name].push(fn);
39 this.$events[name] = [this.$events[name], fn];
45 EventEmitter.prototype.addListener = EventEmitter.prototype.on;
48 * Adds a volatile listener.
53 EventEmitter.prototype.once = function (name, fn) {
57 self.removeListener(name, on);
58 fn.apply(this, arguments);
73 EventEmitter.prototype.removeListener = function (name, fn) {
74 if (this.$events && this.$events[name]) {
75 var list = this.$events[name];
77 if (io.util.isArray(list)) {
80 for (var i = 0, l = list.length; i < l; i++) {
81 if (list[i] === fn || (list[i].listener && list[i].listener === fn)) {
94 delete this.$events[name];
96 } else if (list === fn || (list.listener && list.listener === fn)) {
97 delete this.$events[name];
105 * Removes all listeners for an event.
110 EventEmitter.prototype.removeAllListeners = function (name) {
111 if (name === undefined) {
116 if (this.$events && this.$events[name]) {
117 this.$events[name] = null;
124 * Gets all listeners for a certain event.
129 EventEmitter.prototype.listeners = function (name) {
134 if (!this.$events[name]) {
135 this.$events[name] = [];
138 if (!io.util.isArray(this.$events[name])) {
139 this.$events[name] = [this.$events[name]];
142 return this.$events[name];
151 EventEmitter.prototype.emit = function (name) {
156 var handler = this.$events[name];
162 var args = Array.prototype.slice.call(arguments, 1);
164 if ('function' == typeof handler) {
165 handler.apply(this, args);
166 } else if (io.util.isArray(handler)) {
167 var listeners = handler.slice();
169 for (var i = 0, l = listeners.length; i < l; i++) {
170 listeners[i].apply(this, args);
180 'undefined' != typeof io ? io : module.exports
181 , 'undefined' != typeof io ? io : module.parent.exports