1 |
|
2 | !function(exports) {
|
3 | var empty = []
|
4 | , Event = exports.Event || exports
|
5 |
|
6 | Event.Emitter = EventEmitter
|
7 | Event.asEmitter = asEmitter
|
8 |
|
9 | function EventEmitter() {}
|
10 |
|
11 | function asEmitter(obj) {
|
12 | obj.on = on
|
13 | obj.off = off
|
14 | obj.one = one
|
15 | obj.emit = emit
|
16 | obj.listen = listen
|
17 | obj.unlisten = unlisten
|
18 | }
|
19 | asEmitter(EventEmitter.prototype)
|
20 |
|
21 | function on(type, fn, scope, _origin) {
|
22 | var emitter = this === exports ? empty : this
|
23 | , events = emitter._e || (emitter._e = Object.create(null))
|
24 | if (type && fn) {
|
25 | if (typeof fn === "string") fn = emit.bind(emitter, fn)
|
26 | emit.call(emitter, "newListener", type, fn, scope, _origin)
|
27 | ;(events[type] || (events[type] = [])).unshift(scope, _origin, fn)
|
28 | }
|
29 | return this
|
30 | }
|
31 |
|
32 | function off(type, fn, scope) {
|
33 | var i, args
|
34 | , emitter = this === exports ? empty : this
|
35 | , events = emitter._e && emitter._e[type]
|
36 | if (events) {
|
37 | for (i = events.length - 2; i > 0; i -= 3) {
|
38 | if ((events[i + 1] === fn || events[i] === fn) && events[i - 1] == scope) {
|
39 | args = events.splice(i - 1, 3)
|
40 | emit.call(emitter, "removeListener", type, args[2], args[0], args[1])
|
41 | if (fn) break
|
42 | }
|
43 | }
|
44 | }
|
45 | return this
|
46 | }
|
47 |
|
48 | function one(type, fn, scope) {
|
49 | var emitter = this === exports ? empty : this
|
50 | function remove() {
|
51 | off.call(emitter, type, fn, scope)
|
52 | off.call(emitter, type, remove, scope)
|
53 | }
|
54 | on.call(emitter, type, remove, scope)
|
55 | on.call(emitter, type, fn, scope)
|
56 | return this
|
57 | }
|
58 |
|
59 |
|
60 |
|
61 |
|
62 | function emit(type) {
|
63 | var args, i
|
64 | , emitter = this === exports ? empty : this
|
65 | , _e = emitter._e
|
66 | , arr = _e ? (_e[type] || empty).concat(_e["*"] || empty) : empty
|
67 | if ((_e = arr.length)) {
|
68 | for (i = _e - 1, args = arr.slice.call(arguments, 1); i > 1; i -= 3) {
|
69 | arr[i] && arr[i].apply(arr[i - 2] || emitter, args)
|
70 | }
|
71 | }
|
72 | return _e / 3
|
73 | }
|
74 |
|
75 | function listen(emitter, ev, fn, scope, _origin) {
|
76 | if (emitter) {
|
77 | on.call(emitter, ev, fn, scope)
|
78 | ;(this._l || (this._l = [])).push([emitter, ev, fn, scope, _origin])
|
79 | }
|
80 | return this
|
81 | }
|
82 |
|
83 | function unlisten(key) {
|
84 | var a, i
|
85 | , listening = this._l
|
86 | if (listening) for (i = listening.length; i--; ) {
|
87 | a = listening[i]
|
88 | if (key === "*" || a.indexOf(key) > -1) {
|
89 | listening.splice(i, 1)
|
90 | off.call(a[0], a[1], a[2], a[3])
|
91 | }
|
92 | }
|
93 | return this
|
94 | }
|
95 |
|
96 |
|
97 | }(this)
|
98 |
|