UNPKG

fluxtuate

Version:

a javascript ES7 library for handling complex data transactions

159 lines (135 loc) 6.35 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 _internals = require("./_internals"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var innerDispatcher = Symbol("fluxtuateEventDispatcher_innerDispatcher"); var context = Symbol("fluxtuateEventDispatcher_context"); var listeners = Symbol("fluxtuateEventDispatcher_listeners"); var eventDispatcherFunction = ["addChild", "removeChild"]; var eventDispatcherProps = ["children", "parent"]; var EventDispatcherWrapper = function () { function EventDispatcherWrapper(eventDispatcher, holderContext) { var _this = this; _classCallCheck(this, EventDispatcherWrapper); this[listeners] = []; this[innerDispatcher] = eventDispatcher; this[context] = holderContext; eventDispatcherFunction.forEach(function (funcName) { Object.defineProperty(_this, funcName, { get: function get() { return function () { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _this[innerDispatcher][funcName].apply(_this, args); }; } }); }); eventDispatcherProps.forEach(function (propName) { if (Object.hasOwnProperty.apply(_this[innerDispatcher], [propName])) { Object.defineProperty(_this, propName, { get: function get() { return function () { return _this[innerDispatcher][propName]; }; } }); } }); } _createClass(EventDispatcherWrapper, [{ key: "dispatch", value: function dispatch(eventName, payload) { var eventMetaData = { shouldPropagate: true, shouldImmediatelyPropagate: true }; var event = { eventName: eventName, stopPropagation: function stopPropagation() { eventMetaData.shouldPropagate = false; }, stopImmediatePropagation: function stopImmediatePropagation() { eventMetaData.shouldImmediatelyPropagate = false; }, currentTarget: this[innerDispatcher], target: this }; this[innerDispatcher][_internals.propagateToParent](event, payload, eventMetaData, this[innerDispatcher]); this[innerDispatcher][_internals.sendEvent](event, payload, eventMetaData); eventMetaData = { shouldPropagate: true, shouldImmediatelyPropagate: true }; event = { eventName: eventName, capture: true, stopPropagation: function stopPropagation() { eventMetaData.shouldPropagate = false; }, stopImmediatePropagation: function stopImmediatePropagation() { eventMetaData.shouldImmediatelyPropagate = false; }, currentTarget: this[innerDispatcher], target: this }; this[innerDispatcher][_internals.sendEvent](event, payload, eventMetaData); this[innerDispatcher][_internals.propagateToChildren](event, payload, eventMetaData, this[innerDispatcher]); } }, { key: "addListener", value: function addListener(eventName, callbackFunction) { var _this2 = this; var priority = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var oneShot = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var result = this[innerDispatcher].addListener(eventName, callbackFunction, priority, oneShot); var originalRemove = result.remove; result.remove = function () { var index = _this2[listeners].indexOf(result); if (index !== -1) { _this2[listeners].splice(index, 1); } return originalRemove(); }; this[listeners].push(result); return result; } }, { key: "capture", value: function capture(eventName, callbackFunction) { var _this3 = this; var priority = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var oneShot = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var result = this[innerDispatcher].capture(eventName, callbackFunction, priority, oneShot); var originalRemove = result.remove; result.remove = function () { var index = _this3[listeners].indexOf(result); if (index !== -1) { _this3[listeners].splice(index, 1); } return originalRemove(); }; this[listeners].push(result); return result; } }, { key: "destroy", value: function destroy() { while (this[listeners].length > 0) { this[listeners].pop().remove(); } } }, { key: "context", get: function get() { return this[context]; } }]); return EventDispatcherWrapper; }(); exports.default = EventDispatcherWrapper;