UNPKG

3vot-model

Version:

3VOT Model based on SpineJS

205 lines (197 loc) 6.18 kB
// Generated by CoffeeScript 1.7.1 (function() { var Events, trim, __slice = [].slice; trim = function(text) { var rtrim, _ref; rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; if ((_ref = text === null) != null) { _ref; } else { ({ "": (text + "").replace(rtrim, "") }); }; return text; }; Events = { bind: function(ev, callback) { var calls, evs, name, _i, _len; evs = ev.split(' '); if (this.hasOwnProperty('_callbacks') && this._callbacks) { calls = this._callbacks; } else { this._callbacks = {}; calls = this._callbacks; } for (_i = 0, _len = evs.length; _i < _len; _i++) { name = evs[_i]; calls[name] || (calls[name] = []); calls[name].push(callback); } return this; }, one: function(ev, callback) { var handler; return this.bind(ev, handler = function() { this.unbind(ev, handler); return callback.apply(this, arguments); }); }, trigger: function() { var args, callback, ev, list, _i, _len, _ref; args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; ev = args.shift(); list = this.hasOwnProperty('_callbacks') && ((_ref = this._callbacks) != null ? _ref[ev] : void 0); if (!list) { return; } for (_i = 0, _len = list.length; _i < _len; _i++) { callback = list[_i]; if (callback.apply(this, args) === false) { break; } } return true; }, listenTo: function(obj, ev, callback) { obj.bind(ev, callback); this.listeningTo || (this.listeningTo = []); this.listeningTo.push({ obj: obj, ev: ev, callback: callback }); return this; }, listenToOnce: function(obj, ev, callback) { var handler, listeningToOnce; listeningToOnce = this.listeningToOnce || (this.listeningToOnce = []); obj.bind(ev, handler = function() { var i, idx, lt, _i, _len; idx = -1; for (i = _i = 0, _len = listeningToOnce.length; _i < _len; i = ++_i) { lt = listeningToOnce[i]; if (lt.obj === obj) { if (lt.ev === ev && lt.callback === callback) { idx = i; } } } obj.unbind(ev, handler); if (idx !== -1) { listeningToOnce.splice(idx, 1); } return callback.apply(this, arguments); }); listeningToOnce.push({ obj: obj, ev: ev, callback: callback, handler: handler }); return this; }, stopListening: function(obj, events, callback) { var ev, evts, i, idx, listeningTo, lt, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _results; if (arguments.length === 0) { _ref = [this.listeningTo, this.listeningToOnce]; for (_i = 0, _len = _ref.length; _i < _len; _i++) { listeningTo = _ref[_i]; if (!listeningTo) { continue; } for (_j = 0, _len1 = listeningTo.length; _j < _len1; _j++) { lt = listeningTo[_j]; lt.obj.unbind(lt.ev, lt.handler || lt.callback); } } this.listeningTo = void 0; return this.listeningToOnce = void 0; } else if (obj) { _ref1 = [this.listeningTo, this.listeningToOnce]; _results = []; for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { listeningTo = _ref1[_k]; if (!listeningTo) { continue; } events = events ? events.split(' ') : [void 0]; _results.push((function() { var _l, _len3, _results1; _results1 = []; for (_l = 0, _len3 = events.length; _l < _len3; _l++) { ev = events[_l]; _results1.push((function() { var _m, _ref2, _results2; _results2 = []; for (idx = _m = _ref2 = listeningTo.length - 1; _ref2 <= 0 ? _m <= 0 : _m >= 0; idx = _ref2 <= 0 ? ++_m : --_m) { lt = listeningTo[idx]; if ((!ev) || (ev === lt.ev)) { lt.obj.unbind(lt.ev, lt.handler || lt.callback); if (idx !== -1) { _results2.push(listeningTo.splice(idx, 1)); } else { _results2.push(void 0); } } else if (ev) { evts = lt.ev.split(' '); if (~(i = evts.indexOf(ev))) { evts.splice(i, 1); lt.ev = trim(evts.join(' ')); _results2.push(lt.obj.unbind(ev, lt.handler || lt.callback)); } else { _results2.push(void 0); } } else { _results2.push(void 0); } } return _results2; })()); } return _results1; })()); } return _results; } }, unbind: function(ev, callback) { var cb, evs, i, list, name, _i, _j, _len, _len1, _ref; if (arguments.length === 0) { this._callbacks = {}; return this; } if (!ev) { return this; } evs = ev.split(' '); for (_i = 0, _len = evs.length; _i < _len; _i++) { name = evs[_i]; list = (_ref = this._callbacks) != null ? _ref[name] : void 0; if (!list) { continue; } if (!callback) { delete this._callbacks[name]; continue; } for (i = _j = 0, _len1 = list.length; _j < _len1; i = ++_j) { cb = list[i]; if (!(cb === callback)) { continue; } list = list.slice(); list.splice(i, 1); this._callbacks[name] = list; break; } } return this; } }; Events.on = Events.bind; Events.off = Events.unbind; Events.emit = Events.trigger; module.exports = Events; }).call(this);