UNPKG

@robotlegsjs/core

Version:

An architecture-based IoC framework for JavaScript/TypeScript

239 lines 9.6 kB
"use strict"; // ------------------------------------------------------------------------------ // Copyright (c) 2017-present, RobotlegsJS. All Rights Reserved. // // NOTICE: You are permitted to use, modify, and distribute this file // in accordance with the terms of the license agreement accompanying it. // ------------------------------------------------------------------------------ Object.defineProperty(exports, "__esModule", { value: true }); exports.EventMap = void 0; var tslib_1 = require("tslib"); var inversify_1 = require("inversify"); var Event_1 = require("../../../events/impl/Event"); var isInstanceOfType_1 = require("../../../extensions/matching/isInstanceOfType"); var DomEventMapConfig_1 = require("./DomEventMapConfig"); var EventMapConfig_1 = require("./EventMapConfig"); /** * @private */ var EventMap = /** @class */ (function () { function EventMap() { /*============================================================================*/ /* Protected Properties */ /*============================================================================*/ this._listeners = []; this._suspendedListeners = []; this._domListeners = []; this._suspendedDomListeners = []; this._suspended = false; } /*============================================================================*/ /* Public Functions */ /*============================================================================*/ /** * @inheritDoc */ EventMap.prototype.mapListener = function (dispatcher, eventString, listener, thisObject, eventClass, useCapture, // Not used in browser environment priority) { var _this = this; if (useCapture === void 0) { useCapture = false; } if (priority === void 0) { priority = 0; } eventClass = eventClass === undefined ? Event_1.Event : eventClass; var currentListeners = this._suspended ? this._suspendedListeners : this._listeners; var config; var i = currentListeners.length; while (i--) { config = currentListeners[i]; if (config.equalTo(dispatcher, eventString, listener, thisObject, eventClass, useCapture)) { return; } } var callback = eventClass === Event_1.Event ? listener : function (event) { _this.routeEventToListener(event, listener, eventClass); }; config = new EventMapConfig_1.EventMapConfig(dispatcher, eventString, listener, thisObject, eventClass, callback, useCapture, priority); currentListeners.push(config); if (!this._suspended) { dispatcher.addEventListener(eventString, callback, thisObject, useCapture, priority); } }; /** * @inheritDoc */ EventMap.prototype.unmapListener = function (dispatcher, eventString, listener, thisObject, eventClass, useCapture) { if (useCapture === void 0) { useCapture = false; } eventClass = eventClass !== undefined ? eventClass : Event_1.Event; var currentListeners = this._suspended ? this._suspendedListeners : this._listeners; var i = currentListeners.length; while (i--) { var config = currentListeners[i]; if (config.equalTo(dispatcher, eventString, listener, thisObject, eventClass, useCapture)) { if (!this._suspended) { dispatcher.removeEventListener(eventString, config.callback, thisObject, useCapture); } currentListeners.splice(i, 1); return; } } }; /** * @inheritDoc */ EventMap.prototype.unmapListeners = function () { var currentListeners = this._suspended ? this._suspendedListeners : this._listeners; var eventConfig; var dispatcher; while (currentListeners.length) { eventConfig = currentListeners.pop(); if (!this._suspended) { dispatcher = eventConfig.dispatcher; dispatcher.removeEventListener(eventConfig.eventString, eventConfig.callback, eventConfig.thisObject, eventConfig.useCapture); } } }; /** * @inheritDoc */ EventMap.prototype.mapDomListener = function (dispatcher, eventString, listener, options) { var currentDomListeners = this._suspended ? this._suspendedDomListeners : this._domListeners; var domConfig; var i = currentDomListeners.length; while (i--) { domConfig = currentDomListeners[i]; if (domConfig.equalTo(dispatcher, eventString, listener, options)) { return; } } domConfig = new DomEventMapConfig_1.DomEventMapConfig(dispatcher, eventString, listener, options); currentDomListeners.push(domConfig); if (!this._suspended) { dispatcher.addEventListener(eventString, listener, options); } }; /** * @inheritDoc */ EventMap.prototype.unmapDomListener = function (dispatcher, eventString, listener, options) { var currentDomListeners = this._suspended ? this._suspendedDomListeners : this._domListeners; var i = currentDomListeners.length; while (i--) { var config = currentDomListeners[i]; if (config.equalTo(dispatcher, eventString, listener, options)) { if (!this._suspended) { dispatcher.removeEventListener(eventString, listener, options); } currentDomListeners.splice(i, 1); return; } } }; /** * @inheritDoc */ EventMap.prototype.unmapDomListeners = function () { var currentDomListeners = this._suspended ? this._suspendedDomListeners : this._domListeners; var domEventConfig; var dispatcher; while (currentDomListeners.length) { domEventConfig = currentDomListeners.pop(); if (!this._suspended) { dispatcher = domEventConfig.dispatcher; dispatcher.removeEventListener(domEventConfig.eventString, domEventConfig.listener, domEventConfig.options); } } }; /** * @inheritDoc */ EventMap.prototype.unmapAllListeners = function () { this.unmapListeners(); this.unmapDomListeners(); }; /** * @inheritDoc */ EventMap.prototype.suspend = function () { var _this = this; if (this._suspended) { return; } this._suspended = true; // Handle EventDispatcher's var dispatcher; this._listeners.forEach(function (eventConfig) { dispatcher = eventConfig.dispatcher; dispatcher.removeEventListener(eventConfig.eventString, eventConfig.callback, eventConfig.thisObject, eventConfig.useCapture); _this._suspendedListeners.push(eventConfig); }); this._listeners = []; // Handle EventTarget's (DOM) var domDispatcher; this._domListeners.forEach(function (domEventConfig) { domDispatcher = domEventConfig.dispatcher; domDispatcher.removeEventListener(domEventConfig.eventString, domEventConfig.listener, domEventConfig.options); _this._suspendedDomListeners.push(domEventConfig); }); this._domListeners = []; }; /** * @inheritDoc */ EventMap.prototype.resume = function () { var _this = this; if (!this._suspended) { return; } this._suspended = false; // Handle EventDispatcher's var dispatcher; this._suspendedListeners.forEach(function (eventConfig) { dispatcher = eventConfig.dispatcher; dispatcher.addEventListener(eventConfig.eventString, eventConfig.callback, eventConfig.thisObject, eventConfig.useCapture, eventConfig.priority); _this._listeners.push(eventConfig); }); this._suspendedListeners = []; // Handle EventTarget's (DOM) var domDispatcher; this._suspendedDomListeners.forEach(function (domEventConfig) { domDispatcher = domEventConfig.dispatcher; domDispatcher.addEventListener(domEventConfig.eventString, domEventConfig.listener, domEventConfig.options); _this._domListeners.push(domEventConfig); }); this._suspendedDomListeners = []; }; /*============================================================================*/ /* Protected Functions */ /*============================================================================*/ /** * Event Handler * * @param event The <code>Event</code> * @param listener * @param originalEventClass */ EventMap.prototype.routeEventToListener = function (event, listener, originalEventClass) { if (isInstanceOfType_1.isInstanceOfType(event, originalEventClass)) { listener(event); } }; EventMap = tslib_1.__decorate([ inversify_1.injectable() ], EventMap); return EventMap; }()); exports.EventMap = EventMap; //# sourceMappingURL=EventMap.js.map