| @ -1,116 +0,0 @@ | |||
| /** | |||
| * Event listener (singleton) | |||
| */ | |||
| // TODO: replace usage of the event listener for the EventBus | |||
| var events = { | |||
| 'listeners': [], | |||
| /** | |||
| * Find a single listener by its object | |||
| * @param {Object} object | |||
| * @return {Number} index -1 when not found | |||
| */ | |||
| 'indexOf': function (object) { | |||
| var listeners = this.listeners; | |||
| for (var i = 0, iMax = this.listeners.length; i < iMax; i++) { | |||
| var listener = listeners[i]; | |||
| if (listener && listener.object == object) { | |||
| return i; | |||
| } | |||
| } | |||
| return -1; | |||
| }, | |||
| /** | |||
| * Add an event listener | |||
| * @param {Object} object | |||
| * @param {String} event The name of an event, for example 'select' | |||
| * @param {function} callback The callback method, called when the | |||
| * event takes place | |||
| */ | |||
| 'addListener': function (object, event, callback) { | |||
| var index = this.indexOf(object); | |||
| var listener = this.listeners[index]; | |||
| if (!listener) { | |||
| listener = { | |||
| 'object': object, | |||
| 'events': {} | |||
| }; | |||
| this.listeners.push(listener); | |||
| } | |||
| var callbacks = listener.events[event]; | |||
| if (!callbacks) { | |||
| callbacks = []; | |||
| listener.events[event] = callbacks; | |||
| } | |||
| // add the callback if it does not yet exist | |||
| if (callbacks.indexOf(callback) == -1) { | |||
| callbacks.push(callback); | |||
| } | |||
| }, | |||
| /** | |||
| * Remove an event listener | |||
| * @param {Object} object | |||
| * @param {String} event The name of an event, for example 'select' | |||
| * @param {function} callback The registered callback method | |||
| */ | |||
| 'removeListener': function (object, event, callback) { | |||
| var index = this.indexOf(object); | |||
| var listener = this.listeners[index]; | |||
| if (listener) { | |||
| var callbacks = listener.events[event]; | |||
| if (callbacks) { | |||
| index = callbacks.indexOf(callback); | |||
| if (index != -1) { | |||
| callbacks.splice(index, 1); | |||
| } | |||
| // remove the array when empty | |||
| if (callbacks.length == 0) { | |||
| delete listener.events[event]; | |||
| } | |||
| } | |||
| // count the number of registered events. remove listener when empty | |||
| var count = 0; | |||
| var events = listener.events; | |||
| for (var e in events) { | |||
| if (events.hasOwnProperty(e)) { | |||
| count++; | |||
| } | |||
| } | |||
| if (count == 0) { | |||
| delete this.listeners[index]; | |||
| } | |||
| } | |||
| }, | |||
| /** | |||
| * Remove all registered event listeners | |||
| */ | |||
| 'removeAllListeners': function () { | |||
| this.listeners = []; | |||
| }, | |||
| /** | |||
| * Trigger an event. All registered event handlers will be called | |||
| * @param {Object} object | |||
| * @param {String} event | |||
| * @param {Object} properties (optional) | |||
| */ | |||
| 'trigger': function (object, event, properties) { | |||
| var index = this.indexOf(object); | |||
| var listener = this.listeners[index]; | |||
| if (listener) { | |||
| var callbacks = listener.events[event]; | |||
| if (callbacks) { | |||
| for (var i = 0, iMax = callbacks.length; i < iMax; i++) { | |||
| callbacks[i](properties); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| }; | |||