unclean SPARC
This commit is contained in:
Executable
+98
@@ -0,0 +1,98 @@
|
||||
/**
|
||||
*
|
||||
* @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);
|
||||
Reference in New Issue
Block a user