@zoranwong/acc-engine.js
Version:
A javascript framework to accelerate your applicatin developement
144 lines (112 loc) • 4.09 kB
JavaScript
;
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;