1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | const on = function (name, callback, one) {
|
14 | var self = this, origCb = callback;
|
15 | if(Object.prototype.toString.call(name) == '[object Array]') {
|
16 |
|
17 | for(var i in name) {
|
18 | this.on(name[i], callback);
|
19 | }
|
20 | return this;
|
21 | } else if(typeof name == 'object'){
|
22 |
|
23 | for(var key in name) {
|
24 | this.on(key, name[key]);
|
25 | }
|
26 | return this;
|
27 | }
|
28 | if(one) {
|
29 | callback = function() {
|
30 | self.off(name, callback);
|
31 | origCb.apply(this, arguments);
|
32 | }
|
33 | }
|
34 | name = name.toLowerCase();
|
35 | this._events || (this._events = {});
|
36 | var events = this._events[name] || (this._events[name] = []);
|
37 | events.push({
|
38 | callback: callback
|
39 | })
|
40 | return this;
|
41 | }
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 | const off = function (name, callback) {
|
48 | if(Object.prototype.toString.call(name) == '[object Array]') {
|
49 |
|
50 | for(var i in name) {
|
51 | this.off(name[i], callback);
|
52 | }
|
53 | return this;
|
54 | } else if(typeof name == 'object'){
|
55 |
|
56 | for(var key in name) {
|
57 | this.off(key, name[key]);
|
58 | }
|
59 | return this;
|
60 | }
|
61 | var cbs = this._events[name];
|
62 | if(!cbs) return this;
|
63 | if(!callback) {
|
64 |
|
65 | cbs = null;
|
66 | } else {
|
67 | for(var i = cbs.length - 1;i >= 0; i--) {
|
68 | if(cbs[i] == callback) {
|
69 | cbs.splice(i, 1);
|
70 | }
|
71 | }
|
72 | }
|
73 | return this;
|
74 | }
|
75 |
|
76 |
|
77 |
|
78 |
|
79 | const one = function (name, callback) {
|
80 | this.on(name, callback, 1);
|
81 | }
|
82 |
|
83 |
|
84 |
|
85 |
|
86 | const trigger = function (name) {
|
87 | name = name.toLowerCase()
|
88 | if (!this._events || !this._events[name]) return this;
|
89 | var args = Array.prototype.slice.call(arguments, 1);
|
90 | var events = this._events[name];
|
91 | for (var i = 0, count = events.length; i < count; i++) {
|
92 | events[i].callback.apply(this, args);
|
93 | }
|
94 | return this;
|
95 | }
|
96 |
|
97 | const triggerReturn = function(name){
|
98 | name = name.toLowerCase()
|
99 | if (!this._events || !this._events[name]) return this;
|
100 | var args = Array.prototype.slice.call(arguments, 1);
|
101 | var events = this._events[name];
|
102 | var flag = true;
|
103 | for (var i = 0, count = events.length; i < count; i++) {
|
104 | flag = flag && events[i].callback.apply(this, args);
|
105 | }
|
106 | return flag;
|
107 | }
|
108 |
|
109 |
|
110 | const getEvent = function (name) {
|
111 | name = name.toLowerCase()
|
112 | this._events || (this._events = {})
|
113 | return this._events[name]
|
114 | }
|
115 |
|
116 | export {
|
117 | on,
|
118 | off,
|
119 | one,
|
120 | trigger,
|
121 | triggerReturn,
|
122 | getEvent
|
123 | } |
\ | No newline at end of file |