mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2026-02-21 01:19:53 +00:00
* fix: apply automatic eslint fixes * lint: allow hashbang comment for tiddlywiki.js * lint: first back of manual lint fixes for unused vars * lint: added more fixes for unused vars * lint: missed files * lint: updated eslint config with selected rules from #9669
47 lines
904 B
JavaScript
47 lines
904 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));
|
|
}
|
|
}
|
|
};
|