1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
(function(root, mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
return mod(exports);
if (typeof define == "function" && define.amd) // AMD
return define(["exports"], mod);
mod((root.tern || (root.tern = {})).signal = {}); // Plain browser env
})(this, function(exports) {
function on(type, f) {
var handlers = this._handlers || (this._handlers = Object.create(null));
(handlers[type] || (handlers[type] = [])).push(f);
}
function off(type, f) {
var arr = this._handlers && this._handlers[type];
if (arr) for (var i = 0; i < arr.length; ++i)
if (arr[i] == f) { arr.splice(i, 1); break; }
}
var noHandlers = []
function getHandlers(emitter, type) {
var arr = emitter._handlers && emitter._handlers[type];
return arr && arr.length ? arr.slice() : noHandlers
}
function signal(type, a1, a2, a3, a4) {
var arr = getHandlers(this, type)
for (var i = 0; i < arr.length; ++i) arr[i].call(this, a1, a2, a3, a4)
}
function signalReturnFirst(type, a1, a2, a3, a4) {
var arr = getHandlers(this, type)
for (var i = 0; i < arr.length; ++i) {
var result = arr[i].call(this, a1, a2, a3, a4)
if (result) return result
}
}
function hasHandler(type) {
var arr = this._handlers && this._handlers[type]
return arr && arr.length > 0 && arr
}
exports.mixin = function(obj) {
obj.on = on; obj.off = off;
obj.signal = signal;
obj.signalReturnFirst = signalReturnFirst;
obj.hasHandler = hasHandler;
return obj;
};
});
|