@robotlegsjs/core
Version:
An architecture-based IoC framework for JavaScript/TypeScript
239 lines • 9.6 kB
JavaScript
"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