|
@ -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); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|