StaticApps/src/app/Core/EventHandler.js

53 lines
1.4 KiB
JavaScript

(() => {
class EventHandler {
constructor() {
this.events = {};
document.body.addDelegatedEventListener('click', '[data-event]', this.handleClickEvent.bind(this))
}
handleClickEvent(ev, el) {
this.send(el.dataset.event, el);
}
addEvent(events, cb) {
let names = events.split(",");
for (let name of names) {
this.events[name.trim()] = cb;
}
}
addEvents(obj) {
let keys = Object.keys(obj);
for (let key of keys) {
this.addEvent(key, obj[key]);
}
}
handleEvent(event) {
let data = event.data;
if (!data.cmd) {
return false;
}
return this.send(data.cmd, data.data, data.status);
}
// will send the request to internal events
send(name, data, status = 'success') {
if (this.events[name]) {
try {
this.events[name](data, status);
} catch (e) {
PrettyConsole.error(EventHandler, e.message);
}
return true;
}
return false;
}
}
moduleLoader.registerInit(i => {
window.eventHandler = new EventHandler();
moduleLoader.finishModule('EventHandler');
});
})();