Index: background.js |
=================================================================== |
--- a/background.js |
+++ b/background.js |
@@ -17,32 +17,57 @@ |
(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); |
+ 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 +116,7 @@ |
} |
}; |
- modules.prefs = { |
- Prefs: { |
- onChanged: new Notifier() |
- } |
- }; |
+ modules.prefs = {Prefs: new EventEmitter()}; |
var prefs = { |
notifications_ignoredcategories: (params.showNotificationUI) ? ["*"] : [], |
notifications_showui: params.showNotificationUI, |
@@ -114,8 +135,11 @@ |
set: function(value) |
{ |
prefs[key] = value; |
- modules.prefs.Prefs.onChanged.triggerListeners(key); |
- return prefs[key]; |
+ |
+ var listeners = modules.prefs.Prefs._listeners[key]; |
+ if (listeners) |
+ for (var i = 0; i < listeners.length; i++) |
+ listeners[i](); |
} |
}); |
}); |