mirror of https://github.com/friendica/friendica
72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var EventElement = function (element) {
|
||
|
this.element = element;
|
||
|
this.events = {};
|
||
|
};
|
||
|
|
||
|
EventElement.prototype.bind = function (eventName, handler) {
|
||
|
if (typeof this.events[eventName] === 'undefined') {
|
||
|
this.events[eventName] = [];
|
||
|
}
|
||
|
this.events[eventName].push(handler);
|
||
|
this.element.addEventListener(eventName, handler, false);
|
||
|
};
|
||
|
|
||
|
EventElement.prototype.unbind = function (eventName, handler) {
|
||
|
var isHandlerProvided = (typeof handler !== 'undefined');
|
||
|
this.events[eventName] = this.events[eventName].filter(function (hdlr) {
|
||
|
if (isHandlerProvided && hdlr !== handler) {
|
||
|
return true;
|
||
|
}
|
||
|
this.element.removeEventListener(eventName, hdlr, false);
|
||
|
return false;
|
||
|
}, this);
|
||
|
};
|
||
|
|
||
|
EventElement.prototype.unbindAll = function () {
|
||
|
for (var name in this.events) {
|
||
|
this.unbind(name);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var EventManager = function () {
|
||
|
this.eventElements = [];
|
||
|
};
|
||
|
|
||
|
EventManager.prototype.eventElement = function (element) {
|
||
|
var ee = this.eventElements.filter(function (eventElement) {
|
||
|
return eventElement.element === element;
|
||
|
})[0];
|
||
|
if (typeof ee === 'undefined') {
|
||
|
ee = new EventElement(element);
|
||
|
this.eventElements.push(ee);
|
||
|
}
|
||
|
return ee;
|
||
|
};
|
||
|
|
||
|
EventManager.prototype.bind = function (element, eventName, handler) {
|
||
|
this.eventElement(element).bind(eventName, handler);
|
||
|
};
|
||
|
|
||
|
EventManager.prototype.unbind = function (element, eventName, handler) {
|
||
|
this.eventElement(element).unbind(eventName, handler);
|
||
|
};
|
||
|
|
||
|
EventManager.prototype.unbindAll = function () {
|
||
|
for (var i = 0; i < this.eventElements.length; i++) {
|
||
|
this.eventElements[i].unbindAll();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
EventManager.prototype.once = function (element, eventName, handler) {
|
||
|
var ee = this.eventElement(element);
|
||
|
var onceHandler = function (e) {
|
||
|
ee.unbind(eventName, onceHandler);
|
||
|
handler(e);
|
||
|
};
|
||
|
ee.bind(eventName, onceHandler);
|
||
|
};
|
||
|
|
||
|
module.exports = EventManager;
|