mufa
Version:
Event driven programming . Useful to separate layers (View, logic,...etc)
103 lines (84 loc) • 3.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
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 _Registry = require('./Registry');
var _Registry2 = _interopRequireDefault(_Registry);
var _babelAutobind = require('babel-autobind');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Mufawwad = function () {
function Mufawwad() {
_classCallCheck(this, Mufawwad);
this.registry = new _Registry2.default();
}
_createClass(Mufawwad, [{
key: 'sub',
value: function sub(event, callback) {
var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
return this.registry.insert('subscriber', {
event: event,
callback: callback,
once: once
});
}
}, {
key: 'pub',
value: function pub(event) {
var _this = this;
for (var _len = arguments.length, data = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
data[_key - 1] = arguments[_key];
}
var subsToRemove = [];
this.registry.find('subscriber', function (record) {
return record.event === event;
}).forEach(function (record) {
if (typeof record.callback === 'function') record.callback.apply(record, data);
if (record.once) subsToRemove.push(record.id);
});
if (subsToRemove.length) subsToRemove.forEach(function (id) {
return _this.registry.remove('subscriber', function (record) {
return record.id === id;
});
});
}
}, {
key: 'unsub',
value: function unsub() {
var _this2 = this;
for (var _len2 = arguments.length, subscriptions = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
subscriptions[_key2] = arguments[_key2];
}
subscriptions.forEach(function (_ref) {
var id = _ref.id;
_this2.registry.remove('subscriber', function (record) {
return record.id === id;
});
});
return subscriptions;
}
}, {
key: 'on',
value: function on() {
return this.sub.apply(this, arguments);
}
}, {
key: 'one',
value: function one() {
return this.sub.apply(this, Array.prototype.slice.call(arguments).concat([true]));
}
}, {
key: 'fire',
value: function fire() {
return this.pub.apply(this, arguments);
}
}, {
key: 'off',
value: function off() {
return this.unsub.apply(this, arguments);
}
}]);
return Mufawwad;
}();
exports.default = (0, _babelAutobind.Autobind)(Mufawwad);