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