diff options
author | Ruben Rodriguez <ruben@gnu.org> | 2017-09-01 16:35:50 -0400 |
---|---|---|
committer | Ruben Rodriguez <ruben@gnu.org> | 2017-09-01 16:35:50 -0400 |
commit | e8730f68798f173bd4d1c2f9b7ce02985e3fd771 (patch) | |
tree | 711132ed84ef8ae9e0621de5436a6818a5fa1e12 /data/extensions/spyblock@gnu.org/lib/events.js | |
parent | edde38bbb0e0afb9b8a78c002996c758fb6023b6 (diff) |
SpyBlock updated to 2.9.1
Diffstat (limited to 'data/extensions/spyblock@gnu.org/lib/events.js')
-rw-r--r-- | data/extensions/spyblock@gnu.org/lib/events.js | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/data/extensions/spyblock@gnu.org/lib/events.js b/data/extensions/spyblock@gnu.org/lib/events.js new file mode 100644 index 0000000..8d11f7c --- /dev/null +++ b/data/extensions/spyblock@gnu.org/lib/events.js @@ -0,0 +1,106 @@ +/* + * This file is part of Adblock Plus <https://adblockplus.org/>, + * Copyright (C) 2006-2017 eyeo GmbH + * + * Adblock Plus is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Adblock Plus is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. + */ + +"use strict"; + +/** + * Registers and emits named events. + * + * @constructor + */ +exports.EventEmitter = function() +{ + this._listeners = Object.create(null); +}; + +exports.EventEmitter.prototype = { + /** + * Adds a listener for the specified event name. + * + * @param {string} name + * @param {function} listener + */ + on(name, listener) + { + if (name in this._listeners) + this._listeners[name].push(listener); + else + this._listeners[name] = [listener]; + }, + + /** + * Removes a listener for the specified event name. + * + * @param {string} name + * @param {function} listener + */ + off(name, listener) + { + let listeners = this._listeners[name]; + if (listeners) + { + let idx = listeners.indexOf(listener); + if (idx != -1) + listeners.splice(idx, 1); + } + }, + + /** + * Adds a one time listener and returns a promise that + * is resolved the next time the specified event is emitted. + * @param {string} name + * @return {Promise} + */ + once(name) + { + return new Promise(resolve => + { + let listener = () => + { + this.off(name, listener); + resolve(); + }; + + this.on(name, listener); + }); + }, + + /** + * Returns a copy of the array of listeners for the specified event. + * + * @param {string} name + * @return {function[]} + */ + listeners(name) + { + let listeners = this._listeners[name]; + return listeners ? listeners.slice() : []; + }, + + /** + * Calls all previously added listeners for the given event name. + * + * @param {string} name + * @param {...*} [arg] + */ + emit(name, ...args) + { + let listeners = this.listeners(name); + for (let listener of listeners) + listener(...args); + } +}; |