4 * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
8 (function (exports
, io
) {
14 exports
.EventEmitter
= EventEmitter
;
17 * Event emitter constructor.
22 function EventEmitter () {};
30 EventEmitter
.prototype.on = function (name
, fn
) {
35 if (!this.$events
[name
]) {
36 this.$events
[name
] = fn
;
37 } else if (io
.util
.isArray(this.$events
[name
])) {
38 this.$events
[name
].push(fn
);
40 this.$events
[name
] = [this.$events
[name
], fn
];
46 EventEmitter
.prototype.addListener
= EventEmitter
.prototype.on
;
49 * Adds a volatile listener.
54 EventEmitter
.prototype.once = function (name
, fn
) {
58 self
.removeListener(name
, on
);
59 fn
.apply(this, arguments
);
74 EventEmitter
.prototype.removeListener = function (name
, fn
) {
75 if (this.$events
&& this.$events
[name
]) {
76 var list
= this.$events
[name
];
78 if (io
.util
.isArray(list
)) {
81 for (var i
= 0, l
= list
.length
; i
< l
; i
++) {
82 if (list
[i
] === fn
|| (list
[i
].listener
&& list
[i
].listener
=== fn
)) {
95 delete this.$events
[name
];
97 } else if (list
=== fn
|| (list
.listener
&& list
.listener
=== fn
)) {
98 delete this.$events
[name
];
106 * Removes all listeners for an event.
111 EventEmitter
.prototype.removeAllListeners = function (name
) {
112 // TODO: enable this when node 0.5 is stable
113 //if (name === undefined) {
118 if (this.$events
&& this.$events
[name
]) {
119 this.$events
[name
] = null;
126 * Gets all listeners for a certain event.
131 EventEmitter
.prototype.listeners = function (name
) {
136 if (!this.$events
[name
]) {
137 this.$events
[name
] = [];
140 if (!io
.util
.isArray(this.$events
[name
])) {
141 this.$events
[name
] = [this.$events
[name
]];
144 return this.$events
[name
];
153 EventEmitter
.prototype.emit = function (name
) {
158 var handler
= this.$events
[name
];
164 var args
= Array
.prototype.slice
.call(arguments
, 1);
166 if ('function' == typeof handler
) {
167 handler
.apply(this, args
);
168 } else if (io
.util
.isArray(handler
)) {
169 var listeners
= handler
.slice();
171 for (var i
= 0, l
= listeners
.length
; i
< l
; i
++) {
172 listeners
[i
].apply(this, args
);
182 'undefined' != typeof io
? io
: module
.exports
183 , 'undefined' != typeof io
? io
: module
.parent
.exports