summaryrefslogtreecommitdiff
path: root/web-timeplot/src/core/event-bus.js
diff options
context:
space:
mode:
authorThomas Grothe <grothe.tr@gmail.com>2026-04-30 00:53:13 -0400
committerThomas Grothe <grothe.tr@gmail.com>2026-04-30 00:53:13 -0400
commit73d75835e18a33c7f6c1b09bbcef93b16a7a9bfa (patch)
treee079c6c45416333e29cf900831c07619a87d5c39 /web-timeplot/src/core/event-bus.js
parenta1c95e72bea26f554eb05916d6fc584927367159 (diff)
redo timeplot web
Diffstat (limited to 'web-timeplot/src/core/event-bus.js')
-rw-r--r--web-timeplot/src/core/event-bus.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/web-timeplot/src/core/event-bus.js b/web-timeplot/src/core/event-bus.js
new file mode 100644
index 0000000..192eb6d
--- /dev/null
+++ b/web-timeplot/src/core/event-bus.js
@@ -0,0 +1,32 @@
+export class EventBus {
+ constructor() {
+ this.listeners = new Map();
+ }
+
+ on(eventName, listener) {
+ if (!this.listeners.has(eventName)) {
+ this.listeners.set(eventName, new Set());
+ }
+
+ const listeners = this.listeners.get(eventName);
+ listeners.add(listener);
+
+ return () => {
+ listeners.delete(listener);
+ if (listeners.size === 0) {
+ this.listeners.delete(eventName);
+ }
+ };
+ }
+
+ emit(eventName, payload) {
+ const listeners = this.listeners.get(eventName);
+ if (!listeners) {
+ return;
+ }
+
+ for (const listener of listeners) {
+ listener(payload);
+ }
+ }
+}