53 lines
1.4 KiB
JavaScript
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');
|
|
});
|
|
})();
|