1 |
|
2 | export default {
|
3 | on(events, handler, priority) {
|
4 | const self = this;
|
5 | if (typeof handler !== 'function') return self;
|
6 | const method = priority ? 'unshift' : 'push';
|
7 | events.split(' ').forEach(event => {
|
8 | if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
|
9 | self.eventsListeners[event][method](handler);
|
10 | });
|
11 | return self;
|
12 | },
|
13 |
|
14 | once(events, handler, priority) {
|
15 | const self = this;
|
16 | if (typeof handler !== 'function') return self;
|
17 |
|
18 | function onceHandler(...args) {
|
19 | self.off(events, onceHandler);
|
20 |
|
21 | if (onceHandler.__emitterProxy) {
|
22 | delete onceHandler.__emitterProxy;
|
23 | }
|
24 |
|
25 | handler.apply(self, args);
|
26 | }
|
27 |
|
28 | onceHandler.__emitterProxy = handler;
|
29 | return self.on(events, onceHandler, priority);
|
30 | },
|
31 |
|
32 | onAny(handler, priority) {
|
33 | const self = this;
|
34 | if (typeof handler !== 'function') return self;
|
35 | const method = priority ? 'unshift' : 'push';
|
36 |
|
37 | if (self.eventsAnyListeners.indexOf(handler) < 0) {
|
38 | self.eventsAnyListeners[method](handler);
|
39 | }
|
40 |
|
41 | return self;
|
42 | },
|
43 |
|
44 | offAny(handler) {
|
45 | const self = this;
|
46 | if (!self.eventsAnyListeners) return self;
|
47 | const index = self.eventsAnyListeners.indexOf(handler);
|
48 |
|
49 | if (index >= 0) {
|
50 | self.eventsAnyListeners.splice(index, 1);
|
51 | }
|
52 |
|
53 | return self;
|
54 | },
|
55 |
|
56 | off(events, handler) {
|
57 | const self = this;
|
58 | if (!self.eventsListeners) return self;
|
59 | events.split(' ').forEach(event => {
|
60 | if (typeof handler === 'undefined') {
|
61 | self.eventsListeners[event] = [];
|
62 | } else if (self.eventsListeners[event]) {
|
63 | self.eventsListeners[event].forEach((eventHandler, index) => {
|
64 | if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {
|
65 | self.eventsListeners[event].splice(index, 1);
|
66 | }
|
67 | });
|
68 | }
|
69 | });
|
70 | return self;
|
71 | },
|
72 |
|
73 | emit(...args) {
|
74 | const self = this;
|
75 | if (!self.eventsListeners) return self;
|
76 | let events;
|
77 | let data;
|
78 | let context;
|
79 |
|
80 | if (typeof args[0] === 'string' || Array.isArray(args[0])) {
|
81 | events = args[0];
|
82 | data = args.slice(1, args.length);
|
83 | context = self;
|
84 | } else {
|
85 | events = args[0].events;
|
86 | data = args[0].data;
|
87 | context = args[0].context || self;
|
88 | }
|
89 |
|
90 | data.unshift(context);
|
91 | const eventsArray = Array.isArray(events) ? events : events.split(' ');
|
92 | eventsArray.forEach(event => {
|
93 | if (self.eventsAnyListeners && self.eventsAnyListeners.length) {
|
94 | self.eventsAnyListeners.forEach(eventHandler => {
|
95 | eventHandler.apply(context, [event, ...data]);
|
96 | });
|
97 | }
|
98 |
|
99 | if (self.eventsListeners && self.eventsListeners[event]) {
|
100 | self.eventsListeners[event].forEach(eventHandler => {
|
101 | eventHandler.apply(context, data);
|
102 | });
|
103 | }
|
104 | });
|
105 | return self;
|
106 | }
|
107 |
|
108 | }; |
\ | No newline at end of file |