98 lines
2.4 KiB
JavaScript
Executable File
98 lines
2.4 KiB
JavaScript
Executable File
/**
|
|
*
|
|
* @category Core
|
|
* @subcategory Libraries
|
|
*/
|
|
class Events {
|
|
|
|
// collection of registered app events
|
|
static _registered = [];
|
|
|
|
constructor() {
|
|
this.channel = document.body;
|
|
}
|
|
/**
|
|
* Candidate for deprecation: registering callbacks sounds like shit load of issues
|
|
*
|
|
* @param {string} type
|
|
* @param {*} callback
|
|
* @param {string} scope
|
|
*/
|
|
addEvent(type, callback, scope) {
|
|
let available = Events._registered.find(o => o.type == type && o.scope == scope);
|
|
|
|
if(!available) {
|
|
switch(type) {
|
|
case 'resize':
|
|
window.addEventListener(type, callback);
|
|
break;
|
|
default:
|
|
this.channel.addEventListener(type, callback);
|
|
}
|
|
|
|
Events._registered.push({scope: scope, type: type, callback: callback})
|
|
}
|
|
}
|
|
|
|
removeEvent(type, callback, scope) {
|
|
let index = Events._registered.findIndex(o => o.type == type && o.scope == scope);
|
|
|
|
if(index != -1) {
|
|
switch(type) {
|
|
case 'resize':
|
|
window.removeEventListener(type, callback);
|
|
break;
|
|
default:
|
|
this.channel.removeEventListener(type, callback);
|
|
}
|
|
|
|
Events._registered.splice(index,1);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* @param {string} type
|
|
* @param {*} data
|
|
*/
|
|
trigger(type, data) {
|
|
|
|
let event = new CustomEvent(type, {detail: data});
|
|
|
|
switch(type) {
|
|
case 'resize':
|
|
window.dispatchEvent(event);
|
|
break;
|
|
default:
|
|
this.channel.dispatchEvent(event);
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {string} scope
|
|
*/
|
|
clear(scope) {
|
|
let i = 0;
|
|
while(i < Events._registered.length) {
|
|
let event = Events._registered[i];
|
|
|
|
if(event.scope == scope) {
|
|
switch(event.type) {
|
|
case 'resize':
|
|
window.removeEventListener(event.type, event.callback);
|
|
break;
|
|
default:
|
|
document.body.removeEventListener(event.type, event.callback);
|
|
}
|
|
Events._registered.splice(i, 1);
|
|
} else {
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
app.registerClass('Events', Events); |