1 |
|
2 |
|
3 |
|
4 | 'use strict';
|
5 |
|
6 | const Base = require('./Base');
|
7 |
|
8 | module.exports = class EventManager extends Base {
|
9 |
|
10 | _eventMap = {};
|
11 |
|
12 |
|
13 |
|
14 | once (name, handler, data, prepend) {
|
15 | this.on(name, handler, data, prepend, 1);
|
16 | }
|
17 |
|
18 | on (name, handler, data, prepend, counter) {
|
19 | if (!name) {
|
20 | throw new Error('Invalid event name');
|
21 | }
|
22 | if (typeof handler !== 'function') {
|
23 | throw new Error('Invalid event handler');
|
24 | }
|
25 | if (!Array.isArray(this._eventMap[name])) {
|
26 | this._eventMap[name] = [];
|
27 | }
|
28 | handler = [handler, data, counter, this._eventMap[name]];
|
29 | prepend ? this._eventMap[name].unshift(handler)
|
30 | : this._eventMap[name].push(handler);
|
31 | }
|
32 |
|
33 | off (name, handler) {
|
34 | if (!name) {
|
35 | this._eventMap = {};
|
36 | return true;
|
37 | }
|
38 | if (!Array.isArray(this._eventMap[name])) {
|
39 | return false;
|
40 | }
|
41 | if (handler) {
|
42 | return Event.detachByHandler(handler, this._eventMap[name]);
|
43 | }
|
44 | delete this._eventMap[name];
|
45 | return true;
|
46 | }
|
47 |
|
48 | trigger (name, event) {
|
49 |
|
50 | const items = Array.isArray(this._eventMap[name]) ? this._eventMap[name].slice() : [];
|
51 | return Event.trigger(this.owner, name, event, items);
|
52 | }
|
53 | };
|
54 |
|
55 | const Event = require('./Event'); |
\ | No newline at end of file |