UNPKG

1.56 kBJavaScriptView Raw
1/**
2 * @copyright Copyright (c) 2019 Maxim Khorin <maksimovichu@gmail.com>
3 */
4'use strict';
5
6const Base = require('./Base');
7
8module.exports = class EventManager extends Base {
9
10 _eventMap = {};
11
12 // INSTANCE LEVEL EVENTS
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 // prevent runtime handler list changes
50 const items = Array.isArray(this._eventMap[name]) ? this._eventMap[name].slice() : [];
51 return Event.trigger(this.owner, name, event, items);
52 }
53};
54
55const Event = require('./Event');
\No newline at end of file