UNPKG

fluxtuate

Version:

a javascript ES7 library for handling complex data transactions

83 lines (64 loc) 3.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _lang = require("lodash/lang"); var _internals = require("./_internals"); function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var delegates = Symbol("fluxtuateDelegator_delegates"); var Delegator = function () { function Delegator() { _classCallCheck(this, Delegator); this[delegates] = []; this[_internals.dispatchToDelegate] = function (functionName, params, delegate) { var args = [functionName].concat(_toConsumableArray(params)); if (delegate instanceof Delegator) { delegate.dispatch.apply(delegate, args); } else { if ((0, _lang.isFunction)(delegate[functionName])) { delegate[functionName].apply(delegate, params); } } }; } _createClass(Delegator, [{ key: "dispatch", value: function dispatch(functionName) { var dels = this[delegates].slice(); for (var _len = arguments.length, params = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { params[_key - 1] = arguments[_key]; } dels.forEach(this[_internals.dispatchToDelegate].bind(this, functionName, params)); } }, { key: "attachDelegate", value: function attachDelegate(delegate) { if (!(0, _lang.isObject)(delegate)) { throw new Error("Delegates must be javascript objects with methods!"); } if (this[delegates].indexOf(delegate) !== -1) { return; } this[delegates].unshift(delegate); } }, { key: "detachDelegate", value: function detachDelegate(delegate) { var index = this[delegates].indexOf(delegate); if (index === -1) { return; } this[delegates].splice(index, 1); } }, { key: "destroy", value: function destroy() { this[delegates] = []; } }]); return Delegator; }(); exports.default = Delegator;