| Index: background.js |
| =================================================================== |
| --- a/background.js |
| +++ b/background.js |
| @@ -17,32 +17,59 @@ |
| (function(global) |
| { |
| + function EventEmitter() |
| + { |
| + this._listeners = Object.create(null); |
| + } |
| + EventEmitter.prototype = { |
| + on: function(name, listener) |
| + { |
| + if (name in this._listeners) |
| + this._listeners[name].push(listener); |
| + else |
| + this._listeners[name] = [listener]; |
| + }, |
| + off: function(name, listener) |
| + { |
| + var listeners = this._listeners[name]; |
| + if (listeners) |
| + { |
| + var idx = listeners.indexOf(listener); |
| + if (idx != -1) |
| + listeners.splice(idx, 1); |
| + } |
| + }, |
| + emit: function(name) |
| + { |
| + var listeners = this._listeners[name]; |
| + if (listeners) |
| + { |
| + for (var i = 0; i < listeners.length; i++) |
| + listeners[i].apply(null, Array.prototype.slice.call(arguments, 1)); |
| + } |
| + } |
| + }; |
| + |
| function Notifier() |
| { |
| - this._listeners = []; |
| + this._eventEmitter = new EventEmitter(); |
| } |
| Notifier.prototype = { |
| - _listeners: null, |
| - |
| addListener: function(listener) |
| { |
| - if (this._listeners.indexOf(listener) < 0) |
| - this._listeners.push(listener); |
| + var listeners = this._eventEmitter._listeners[""]; |
| + if (!listeners || listener.indexOf(listener) == -1) |
| + this._eventEmitter.on("", listener); |
| }, |
| - |
| removeListener: function(listener) |
| { |
| - var index = this._listeners.indexOf(listener); |
| - if (index >= 0) |
| - this._listeners.splice(index, 1); |
| + this._eventEmitter.off("", listener); |
| }, |
| - |
| triggerListeners: function() |
| { |
| var args = Array.prototype.slice.apply(arguments); |
| - var listeners = this._listeners.slice(); |
| - for (var i = 0; i < listeners.length; i++) |
| - listeners[i].apply(null, args); |
| + args.unshift(""); |
| + this._eventEmitter.emit.apply(this._eventEmitter, args); |
| } |
| }; |
| @@ -91,11 +118,7 @@ |
| } |
| }; |
| - modules.prefs = { |
| - Prefs: { |
| - onChanged: new Notifier() |
| - } |
| - }; |
| + modules.prefs = {Prefs: new EventEmitter()}; |
| var prefs = { |
| notifications_ignoredcategories: (params.showNotificationUI) ? ["*"] : [], |
| notifications_showui: params.showNotificationUI, |
| @@ -114,8 +137,7 @@ |
| set: function(value) |
| { |
| prefs[key] = value; |
| - modules.prefs.Prefs.onChanged.triggerListeners(key); |
| - return prefs[key]; |
| + modules.prefs.Prefs.emit(key); |
| } |
| }); |
| }); |