mirror of
https://github.com/Jermolene/TiddlyWiki5.git
synced 2026-01-22 12:32:57 -08:00
* feat: added info tiddlers for viewport dimensions * feat: multi window support for dimensions info tiddlers * refactor: introduce standalone eventbus and refactor for ES2017 * docs: extended docs for InfoMechanism to cover new additions
46 lines
902 B
JavaScript
46 lines
902 B
JavaScript
/*\
|
|
title: $:/core/modules/startup/eventbus.js
|
|
type: application/javascript
|
|
module-type: startup
|
|
|
|
Event bus for cross module communication
|
|
\*/
|
|
|
|
exports.name = "eventbus";
|
|
exports.platforms = ["browser"];
|
|
exports.before = ["windows"];
|
|
exports.synchronous = true;
|
|
|
|
$tw.eventBus = {
|
|
listenersMap: new Map(),
|
|
|
|
on(event,handler) {
|
|
if(!this.listenersMap.has(event)) {
|
|
this.listenersMap.set(event,new Set());
|
|
}
|
|
const listeners = this.listenersMap.get(event);
|
|
listeners.add(handler);
|
|
},
|
|
|
|
off(event,handler) {
|
|
const listeners = this.listenersMap.get(event);
|
|
if(listeners) {
|
|
listeners.delete(handler);
|
|
}
|
|
},
|
|
|
|
once(event,handler) {
|
|
const wrapper = (...args) => {
|
|
handler(...args);
|
|
this.off(event, wrapper);
|
|
};
|
|
this.on(event, wrapper);
|
|
},
|
|
|
|
emit(event,data) {
|
|
const listeners = this.listenersMap.get(event);
|
|
if(listeners) {
|
|
listeners.forEach(fn => fn(data));
|
|
}
|
|
}
|
|
};
|