1 | void function (Sink) {
|
---|
2 |
|
---|
3 | /**
|
---|
4 | * A light event emitter.
|
---|
5 | *
|
---|
6 | * @class
|
---|
7 | * @static Sink
|
---|
8 | */
|
---|
9 | function EventEmitter () {
|
---|
10 | var k;
|
---|
11 | for (k in EventEmitter.prototype) {
|
---|
12 | if (EventEmitter.prototype.hasOwnProperty(k)) {
|
---|
13 | this[k] = EventEmitter.prototype[k];
|
---|
14 | }
|
---|
15 | }
|
---|
16 | this._listeners = {};
|
---|
17 | }
|
---|
18 |
|
---|
19 | EventEmitter.prototype = {
|
---|
20 | _listeners: null,
|
---|
21 | /**
|
---|
22 | * Emits an event.
|
---|
23 | *
|
---|
24 | * @method EventEmitter
|
---|
25 | *
|
---|
26 | * @arg {String} name The name of the event to emit.
|
---|
27 | * @arg {Array} args The arguments to pass to the event handlers.
|
---|
28 | */
|
---|
29 | emit: function (name, args) {
|
---|
30 | if (this._listeners[name]) {
|
---|
31 | for (var i=0; i<this._listeners[name].length; i++) {
|
---|
32 | this._listeners[name][i].apply(this, args);
|
---|
33 | }
|
---|
34 | }
|
---|
35 | return this;
|
---|
36 | },
|
---|
37 | /**
|
---|
38 | * Adds an event listener to an event.
|
---|
39 | *
|
---|
40 | * @method EventEmitter
|
---|
41 | *
|
---|
42 | * @arg {String} name The name of the event.
|
---|
43 | * @arg {Function} listener The event listener to attach to the event.
|
---|
44 | */
|
---|
45 | on: function (name, listener) {
|
---|
46 | this._listeners[name] = this._listeners[name] || [];
|
---|
47 | this._listeners[name].push(listener);
|
---|
48 | return this;
|
---|
49 | },
|
---|
50 | /**
|
---|
51 | * Adds an event listener to an event.
|
---|
52 | *
|
---|
53 | * @method EventEmitter
|
---|
54 | *
|
---|
55 | * @arg {String} name The name of the event.
|
---|
56 | * @arg {Function} !listener The event listener to remove from the event. If not specified, will delete all.
|
---|
57 | */
|
---|
58 | off: function (name, listener) {
|
---|
59 | if (this._listeners[name]) {
|
---|
60 | if (!listener) {
|
---|
61 | delete this._listeners[name];
|
---|
62 | return this;
|
---|
63 | }
|
---|
64 |
|
---|
65 | for (var i=0; i<this._listeners[name].length; i++) {
|
---|
66 | if (this._listeners[name][i] === listener) {
|
---|
67 | this._listeners[name].splice(i--, 1);
|
---|
68 | }
|
---|
69 | }
|
---|
70 |
|
---|
71 | if (!this._listeners[name].length) {
|
---|
72 | delete this._listeners[name];
|
---|
73 | }
|
---|
74 | }
|
---|
75 | return this;
|
---|
76 | }
|
---|
77 | };
|
---|
78 |
|
---|
79 | Sink.EventEmitter = EventEmitter;
|
---|
80 |
|
---|
81 | EventEmitter.call(Sink);
|
---|
82 |
|
---|
83 | }(this.Sink);
|
---|