1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/devtools/app-manager/content/utils.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,70 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +/** 1.9 + * 1.10 + * Some helpers for common operations in the App Manager: 1.11 + * 1.12 + * . mergeStores: merge several store into one. 1.13 + * . l10n: resolves strings from app-manager.properties. 1.14 + * 1.15 + */ 1.16 + 1.17 +let Utils = (function() { 1.18 + const Cu = Components.utils; 1.19 + const {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); 1.20 + const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}); 1.21 + const {require} = devtools; 1.22 + const EventEmitter = require("devtools/toolkit/event-emitter"); 1.23 + 1.24 + 1.25 + function _createSetEventForwarder(key, finalStore) { 1.26 + return function(event, path, value) { 1.27 + finalStore.emit("set", [key].concat(path), value); 1.28 + }; 1.29 + } 1.30 + 1.31 + function mergeStores(stores) { 1.32 + let finalStore = {object:{}}; 1.33 + 1.34 + EventEmitter.decorate(finalStore); 1.35 + 1.36 + let setEventForwarders = {}; 1.37 + 1.38 + for (let key in stores) { 1.39 + let store = stores[key]; 1.40 + finalStore.object[key] = store.object; 1.41 + setEventForwarders[key] = _createSetEventForwarder(key, finalStore); 1.42 + store.on("set", setEventForwarders[key]); 1.43 + } 1.44 + 1.45 + finalStore.destroy = () => { 1.46 + for (let key in stores) { 1.47 + let store = stores[key]; 1.48 + store.off("set", setEventForwarders[key]); 1.49 + if (store.destroy) { 1.50 + store.destroy(); 1.51 + } 1.52 + } 1.53 + }; 1.54 + 1.55 + return finalStore; 1.56 + } 1.57 + 1.58 + 1.59 + let strings = Services.strings.createBundle("chrome://browser/locale/devtools/app-manager.properties"); 1.60 + 1.61 + function l10n (property, args = []) { 1.62 + if (args && args.length > 0) { 1.63 + return strings.formatStringFromName(property, args, args.length); 1.64 + } else { 1.65 + return strings.GetStringFromName(property); 1.66 + } 1.67 + } 1.68 + 1.69 + return { 1.70 + mergeStores: mergeStores, 1.71 + l10n: l10n 1.72 + } 1.73 +})();