UNPKG

ascii-ui

Version:

Graphic terminal emulator for HTML canvas elements

54 lines 1.66 kB
export class EventManager { constructor(terminal) { this.listeners = new Map(); this.terminal = terminal; } addListener(type, listener, widget) { const target = widget || this.terminal; let targets = this.listeners.get(type); if (!targets) { targets = new Map(); this.listeners.set(type, targets); } let listeners = targets.get(target); if (!listeners) { listeners = []; targets.set(target, listeners); } listeners.push(listener); } removeListener(type, listener, widget) { const target = widget || this.terminal; const targets = this.listeners.get(type); if (!targets) { return; } const listeners = targets.get(target); if (!listeners) { return; } const index = listeners.indexOf(listener); if (index !== -1) { listeners.splice(index, 1); } } trigger(event, widget) { const path = widget ? [...this.terminal.getWidgetPath(widget), this.terminal] : [this.terminal]; const targets = this.listeners.get(event.type); if (!targets) { return; } for (const target of path) { const listeners = targets.get(target); if (listeners) { for (const listener of listeners) { listener(event, target); if (event.isCancelled()) { return; } } } } } } //# sourceMappingURL=EventManager.js.map