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);
|