Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | 1x 1x | export default class EventEmitter {
constructor(listeners = []) {
this._listeners = new Map(listeners);
this._middlewares = new Map();
}
listenerCount(eventName) {
if (!this._listeners.has(eventName)) {
return 0;
}
const eventListeners = this._listeners.get(eventName);
return eventListeners.length;
}
removeListeners(eventName = null, middleware = false) {
if (eventName !== null) {
if (Array.isArray(eventName)) {
name.forEach(e => this.removeListeners(e, middleware));
} else {
this._listeners.delete(eventName);
if (middleware) {
this.removeMiddleware(eventName);
}
}
} else {
this._listeners = new Map();
}
}
middleware(eventName, fn) {
if (Array.isArray(eventName)) {
name.forEach(e => this.middleware(e, fn));
} else {
if (!Array.isArray(this._middlewares.get(eventName))) {
this._middlewares.set(eventName, []);
}
(this._middlewares.get(eventName)).push(fn);
}
}
removeMiddleware(eventName = null) {
if (eventName !== null) {
if (Array.isArray(eventName)) {
name.forEach(e => this.removeMiddleware(e));
} else {
this._middlewares.delete(eventName);
}
} else {
this._middlewares = new Map();
}
}
on(name, callback, once = false) {
if (Array.isArray(name)) {
name.forEach(e => this.on(e, callback));
} else {
name = name.toString();
const split = name.split(/,|, | /);
if (split.length > 1) {
split.forEach(e => this.on(e, callback));
} else {
if (!Array.isArray(this._listeners.get(name))) {
this._listeners.set(name, []);
}
(this._listeners.get(name)).push({once: once, callback: callback});
}
}
}
once(name, callback) {
this.on(name, callback, true);
}
emit(name, data, silent = false) {
name = name.toString();
let listeners = this._listeners.get(name);
let middlewares = null;
let doneCount = 0;
let execute = silent;
if (Array.isArray(listeners)) {
listeners.forEach((listener, index) => {
// Start Middleware checks unless we're doing a silent emit
if (!silent) {
middlewares = this._middlewares.get(name);
// Check and execute Middleware
if (Array.isArray(middlewares)) {
middlewares.forEach(middleware => {
middleware(data, (newData = null) => {
if (newData !== null) {
data = newData;
}
doneCount++;
}, name);
});
if (doneCount >= middlewares.length) {
execute = true;
}
} else {
execute = true;
}
}
// If Middleware checks have been passed, execute
if (execute) {
if (listener.once) {
listeners[index] = null;
}
listener.callback(data);
}
});
// Dirty way of removing used Events
while (listeners.indexOf(null) !== -1) {
listeners.splice(listeners.indexOf(null), 1);
}
}
}
}
|