3vot-model
Version:
3VOT Model based on SpineJS
205 lines (197 loc) • 6.18 kB
JavaScript
// 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);