UNPKG

6.11 kBJavaScriptView Raw
1(function() {
2 var Events, trim,
3 __slice = [].slice;
4
5 trim = function(text) {
6 var rtrim, _ref;
7 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
8 if ((_ref = text === null) != null) {
9 _ref;
10 } else {
11 ({
12 "": (text + "").replace(rtrim, "")
13 });
14 };
15 return text;
16 };
17
18 Events = {
19 bind: function(ev, callback) {
20 var calls, evs, name, _i, _len;
21 evs = ev.split(' ');
22 if (this.hasOwnProperty('_callbacks') && this._callbacks) {
23 calls = this._callbacks;
24 } else {
25 this._callbacks = {};
26 calls = this._callbacks;
27 }
28 for (_i = 0, _len = evs.length; _i < _len; _i++) {
29 name = evs[_i];
30 calls[name] || (calls[name] = []);
31 calls[name].push(callback);
32 }
33 return this;
34 },
35 one: function(ev, callback) {
36 var handler;
37 return this.bind(ev, handler = function() {
38 this.unbind(ev, handler);
39 return callback.apply(this, arguments);
40 });
41 },
42 trigger: function() {
43 var args, callback, ev, list, _i, _len, _ref;
44 args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
45 ev = args.shift();
46 list = this.hasOwnProperty('_callbacks') && ((_ref = this._callbacks) != null ? _ref[ev] : void 0);
47 if (!list) {
48 return;
49 }
50 for (_i = 0, _len = list.length; _i < _len; _i++) {
51 callback = list[_i];
52 if (callback.apply(this, args) === false) {
53 break;
54 }
55 }
56 return true;
57 },
58 listenTo: function(obj, ev, callback) {
59 obj.bind(ev, callback);
60 this.listeningTo || (this.listeningTo = []);
61 this.listeningTo.push({
62 obj: obj,
63 ev: ev,
64 callback: callback
65 });
66 return this;
67 },
68 listenToOnce: function(obj, ev, callback) {
69 var handler, listeningToOnce;
70 listeningToOnce = this.listeningToOnce || (this.listeningToOnce = []);
71 obj.bind(ev, handler = function() {
72 var i, idx, lt, _i, _len;
73 idx = -1;
74 for (i = _i = 0, _len = listeningToOnce.length; _i < _len; i = ++_i) {
75 lt = listeningToOnce[i];
76 if (lt.obj === obj) {
77 if (lt.ev === ev && lt.callback === callback) {
78 idx = i;
79 }
80 }
81 }
82 obj.unbind(ev, handler);
83 if (idx !== -1) {
84 listeningToOnce.splice(idx, 1);
85 }
86 return callback.apply(this, arguments);
87 });
88 listeningToOnce.push({
89 obj: obj,
90 ev: ev,
91 callback: callback,
92 handler: handler
93 });
94 return this;
95 },
96 stopListening: function(obj, events, callback) {
97 var ev, evts, i, idx, listeningTo, lt, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _results;
98 if (arguments.length === 0) {
99 _ref = [this.listeningTo, this.listeningToOnce];
100 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
101 listeningTo = _ref[_i];
102 if (!listeningTo) {
103 continue;
104 }
105 for (_j = 0, _len1 = listeningTo.length; _j < _len1; _j++) {
106 lt = listeningTo[_j];
107 lt.obj.unbind(lt.ev, lt.handler || lt.callback);
108 }
109 }
110 this.listeningTo = void 0;
111 return this.listeningToOnce = void 0;
112 } else if (obj) {
113 _ref1 = [this.listeningTo, this.listeningToOnce];
114 _results = [];
115 for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) {
116 listeningTo = _ref1[_k];
117 if (!listeningTo) {
118 continue;
119 }
120 events = events ? events.split(' ') : [void 0];
121 _results.push((function() {
122 var _l, _len3, _results1;
123 _results1 = [];
124 for (_l = 0, _len3 = events.length; _l < _len3; _l++) {
125 ev = events[_l];
126 _results1.push((function() {
127 var _m, _ref2, _results2;
128 _results2 = [];
129 for (idx = _m = _ref2 = listeningTo.length - 1; _ref2 <= 0 ? _m <= 0 : _m >= 0; idx = _ref2 <= 0 ? ++_m : --_m) {
130 lt = listeningTo[idx];
131 if ((!ev) || (ev === lt.ev)) {
132 lt.obj.unbind(lt.ev, lt.handler || lt.callback);
133 if (idx !== -1) {
134 _results2.push(listeningTo.splice(idx, 1));
135 } else {
136 _results2.push(void 0);
137 }
138 } else if (ev) {
139 evts = lt.ev.split(' ');
140 if (~(i = evts.indexOf(ev))) {
141 evts.splice(i, 1);
142 lt.ev = trim(evts.join(' '));
143 _results2.push(lt.obj.unbind(ev, lt.handler || lt.callback));
144 } else {
145 _results2.push(void 0);
146 }
147 } else {
148 _results2.push(void 0);
149 }
150 }
151 return _results2;
152 })());
153 }
154 return _results1;
155 })());
156 }
157 return _results;
158 }
159 },
160 unbind: function(ev, callback) {
161 var cb, evs, i, list, name, _i, _j, _len, _len1, _ref;
162 if (arguments.length === 0) {
163 this._callbacks = {};
164 return this;
165 }
166 if (!ev) {
167 return this;
168 }
169 evs = ev.split(' ');
170 for (_i = 0, _len = evs.length; _i < _len; _i++) {
171 name = evs[_i];
172 list = (_ref = this._callbacks) != null ? _ref[name] : void 0;
173 if (!list) {
174 continue;
175 }
176 if (!callback) {
177 delete this._callbacks[name];
178 continue;
179 }
180 for (i = _j = 0, _len1 = list.length; _j < _len1; i = ++_j) {
181 cb = list[i];
182 if (!(cb === callback)) {
183 continue;
184 }
185 list = list.slice();
186 list.splice(i, 1);
187 this._callbacks[name] = list;
188 break;
189 }
190 }
191 return this;
192 }
193 };
194
195 Events.on = Events.bind;
196
197 Events.off = Events.unbind;
198
199 module.exports = Events;
200
201}).call(this);