UNPKG

@react-slate/core

Version:

Write interactive CLI apps with React

88 lines 3.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var EventTypes; (function (EventTypes) { EventTypes["MOUSE_LEFT_BUTTON_PRESSED"] = "MOUSE_LEFT_BUTTON_PRESSED"; EventTypes["MOUSE_WHEEL"] = "MOUSE_WHEEL"; EventTypes["MOUSE_MOTION"] = "MOUSE_MOTION"; })(EventTypes = exports.EventTypes || (exports.EventTypes = {})); class EventManager { constructor() { this.propagate = (name, eventData, rootListener) => { if (rootListener.listenerCount <= 0) { return false; } const handled = rootListener.children.some(child => this.propagate(name, eventData, child)); if (handled) { return true; } const handler = rootListener.listeners[name]; const validator = rootListener.validator; if (typeof handler === 'function' && (!validator || validator(name, eventData))) { return Boolean(handler(eventData)); } return false; }; } propagateEvent(name, eventData, rootListener) { return this.propagate(name, eventData, rootListener); } } exports.EventManager = EventManager; class EventListener { constructor() { this.children = []; this.listeners = {}; this.listenerCount = 0; } updateListenerCount(value) { this.listenerCount += value; if (this.parent) { this.parent.updateListenerCount(value); } } addChild(child) { child.parent = this; this.children.push(child); this.updateListenerCount(child.listenerCount); } findChild(child) { return this.children.indexOf(child); } removeChild(child) { child.parent = undefined; const index = this.findChild(child); this.children.splice(index, 1); this.updateListenerCount(-child.listenerCount); } setListener(eventName, listener) { // If both values are undefined or the same, do nothing. if (this.listeners[eventName] === listener) { return; } // If both values are not undefined, swap for new listener without changing the count. if (this.listeners[eventName] && listener) { this.listeners[eventName] = listener; } else { // If initial listener is added or listener is removed, update the count. this.updateListenerCount(listener ? 1 : -1); this.listeners[eventName] = listener; } } setOnClickListener(listener) { this.setListener(EventTypes.MOUSE_LEFT_BUTTON_PRESSED, listener); } setValidator(validator) { this.validator = validator; } setOnWheelListener(listener) { this.setListener(EventTypes.MOUSE_WHEEL, listener); } setOnMouseMoveListener(listener) { this.setListener(EventTypes.MOUSE_MOTION, listener); } } exports.EventListener = EventListener; //# sourceMappingURL=events.js.map