fluxtuate
Version:
a javascript ES7 library for handling complex data transactions
159 lines (135 loc) • 6.35 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 _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;