fluxtuate
Version:
a javascript ES7 library for handling complex data transactions
83 lines (64 loc) • 3.08 kB
JavaScript
;
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;