mirror of
https://github.com/frappe/books.git
synced 2024-09-20 11:29:00 +00:00
36 lines
963 B
JavaScript
36 lines
963 B
JavaScript
module.exports = class Observable {
|
|
on(event, handler) {
|
|
this._addHandler('_handlers', event, handler);
|
|
}
|
|
|
|
once(event, handler) {
|
|
this._addHandler('_onceHandlers', event, handler);
|
|
}
|
|
|
|
async trigger(event, params) {
|
|
await this._triggerHandler('_handlers', event, params);
|
|
await this._triggerHandler('_onceHandlers', event, params);
|
|
if (this._onceHandlers && this._onceHandlers[event]) {
|
|
delete this._onceHandlers[event];
|
|
}
|
|
}
|
|
|
|
_addHandler(name, event, handler) {
|
|
if (!this[name]) {
|
|
this[name] = {};
|
|
}
|
|
if (!this[name][event]) {
|
|
this[name][event] = [];
|
|
}
|
|
this[name][event].push(handler);
|
|
}
|
|
|
|
async _triggerHandler(name, event, params) {
|
|
if (this[name] && this[name][event]) {
|
|
for (let handler of this[name][event]) {
|
|
await handler(params);
|
|
}
|
|
}
|
|
}
|
|
}
|