source: gs3-extensions/web-audio/trunk/js-mad/sink.js-master/src/event-emitter.js@ 28388

Last change on this file since 28388 was 28388, checked in by davidb, 11 years ago

Set of JS, CSS, PNG etc web resources to support a mixture of audio player/document display capabilities

File size: 1.7 KB
Line 
1void function (Sink) {
2
3/**
4 * A light event emitter.
5 *
6 * @class
7 * @static Sink
8*/
9function 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
19EventEmitter.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
79Sink.EventEmitter = EventEmitter;
80
81EventEmitter.call(Sink);
82
83}(this.Sink);
Note: See TracBrowser for help on using the repository browser.