UNPKG

@zoranwong/acc-engine.js

Version:

A javascript framework to accelerate your applicatin developement

144 lines (112 loc) 4.09 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _newArrowCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/newArrowCheck")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _classPrivateFieldLooseBase2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldLooseBase")); var _classPrivateFieldLooseKey2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldLooseKey")); var _Listener = _interopRequireDefault(require("./Listener")); var _Application = _interopRequireDefault(require("../foundation/Application")); var _EventInterface = _interopRequireDefault(require("./EventInterface")); var _listeners = (0, _classPrivateFieldLooseKey2["default"])("listeners"); var _app = (0, _classPrivateFieldLooseKey2["default"])("app"); var Dispatcher = /*#__PURE__*/function () { /** * @property {Application} #app * */ function Dispatcher(app) { (0, _classCallCheck2["default"])(this, Dispatcher); Object.defineProperty(this, _listeners, { writable: true, value: new WeakMap() }); Object.defineProperty(this, _app, { writable: true, value: null }); (0, _classPrivateFieldLooseBase2["default"])(this, _app)[_app] = app; } /** * @param {EventInterface} event * @param {Listener} listener * */ (0, _createClass2["default"])(Dispatcher, [{ key: "on", value: function on(event, listener) { var listeners = (0, _classPrivateFieldLooseBase2["default"])(this, _listeners)[_listeners].get(event); if (!(0, _classPrivateFieldLooseBase2["default"])(this, _listeners)[_listeners].has(event)) { listeners = []; (0, _classPrivateFieldLooseBase2["default"])(this, _listeners)[_listeners].set(event, listeners); } if (!(listeners.indexOf(listener) > -1)) { listeners.push({ listener: listener, once: false }); } } /** * @param {EventInterface} event * @param {Listener} listener * */ }, { key: "once", value: function once(event, listener) { var listeners = (0, _classPrivateFieldLooseBase2["default"])(this, _listeners)[_listeners].get(event); if (!(0, _classPrivateFieldLooseBase2["default"])(this, _listeners)[_listeners].has(event)) { listeners = []; (0, _classPrivateFieldLooseBase2["default"])(this, _listeners)[_listeners].set(event, listeners); } if (!(listeners.indexOf(listener) > -1)) { listeners.push({ listener: listener, once: true }); } } /** * @param {EventInterface} event * */ }, { key: "emitter", value: function emitter(event) { var _this = this; var _constructor = event.constructor; var listeners = (0, _classPrivateFieldLooseBase2["default"])(this, _listeners)[_listeners].get(_constructor); if (listeners) { listeners.map(function (item, index) { var _this2 = this; (0, _newArrowCheck2["default"])(this, _this); var listener = item.listener, once = item.once; if (once) { listeners.splice(index, 1); } setTimeout(function () { (0, _newArrowCheck2["default"])(this, _this2); if (this.app.isClass(listener)) { var handler = new listener(); handler.handle(event); } else { listener(event); } }.bind(this), 100); }.bind(this)); } } /** * @return {Application} * */ }, { key: "app", get: function get() { return (0, _classPrivateFieldLooseBase2["default"])(this, _app)[_app]; } }]); return Dispatcher; }(); exports["default"] = Dispatcher;