UNPKG

mufa

Version:

Event driven programming . Useful to separate layers (View, logic,...etc)

103 lines (84 loc) 3.29 kB
'use strict'; 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);