| Index: ext/common.js |
| =================================================================== |
| --- a/ext/common.js |
| +++ b/ext/common.js |
| @@ -12,16 +12,76 @@ |
| * 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/>. |
| */ |
| (function(global) |
| { |
| + if (!global.ext) |
| + global.ext = {}; |
| + |
| + function Page(source) |
| + { |
| + this._source = source; |
| + } |
| + Page.prototype = |
| + { |
| + equals: function(page) |
| + { |
| + return page._source == this._source; |
| + }, |
| + |
| + sendMessage: function(message) |
| + { |
| + this._source.postMessage({ |
| + type: "message", |
| + messageId: -1, |
| + payload: message |
| + }, "*"); |
| + } |
| + } |
| + |
| + /* Message passing */ |
| + |
| + global.ext.onMessage = |
| + { |
| + addListener: function(listener) |
| + { |
| + listener.__wrapper = function(event) |
| + { |
| + if (event.data.type != "message") |
| + return; |
| + |
| + var message = event.data.payload; |
| + var messageId = event.data.messageId; |
| + var sender = { |
| + page: new Page(event.source) |
| + }; |
| + var callback = function(message) |
| + { |
| + event.source.postMessage({ |
| + type: "response", |
| + messageId: messageId, |
| + payload: message |
| + }, "*"); |
| + }; |
| + listener(message, sender, callback); |
| + }; |
| + window.addEventListener("message", listener.__wrapper, false); |
| + }, |
| + |
| + removeListener: function(listener) |
| + { |
| + if ("__wrapper" in listener) |
| + window.removeEventListener("message", listener.__wrapper, false); |
| + } |
| + }; |
| + |
| /* I18n */ |
| var getLocaleCandidates = function(selectedLocale) |
| { |
| var candidates = []; |
| var defaultLocale = "en-US"; |
| // e.g. "ja-jp-mac" -> "ja-JP", note that the part after the second |
| @@ -105,19 +165,16 @@ |
| var rawCatalog = JSON.parse(xhr.responseText); |
| for (var msgId in rawCatalog) |
| { |
| if (!(msgId in catalog)) |
| catalog[msgId] = parseMessage(rawCatalog[msgId]); |
| } |
| }; |
| - if (!global.ext) |
| - global.ext = {}; |
| - |
| global.ext.i18n = { |
| getMessage: function(msgId, substitutions) |
| { |
| while (true) |
| { |
| var message = catalog[msgId]; |
| if (message) |
| { |