browser/devtools/app-manager/content/utils.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:12e3fce0cd8b
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 /**
6 *
7 * Some helpers for common operations in the App Manager:
8 *
9 * . mergeStores: merge several store into one.
10 * . l10n: resolves strings from app-manager.properties.
11 *
12 */
13
14 let Utils = (function() {
15 const Cu = Components.utils;
16 const {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
17 const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
18 const {require} = devtools;
19 const EventEmitter = require("devtools/toolkit/event-emitter");
20
21
22 function _createSetEventForwarder(key, finalStore) {
23 return function(event, path, value) {
24 finalStore.emit("set", [key].concat(path), value);
25 };
26 }
27
28 function mergeStores(stores) {
29 let finalStore = {object:{}};
30
31 EventEmitter.decorate(finalStore);
32
33 let setEventForwarders = {};
34
35 for (let key in stores) {
36 let store = stores[key];
37 finalStore.object[key] = store.object;
38 setEventForwarders[key] = _createSetEventForwarder(key, finalStore);
39 store.on("set", setEventForwarders[key]);
40 }
41
42 finalStore.destroy = () => {
43 for (let key in stores) {
44 let store = stores[key];
45 store.off("set", setEventForwarders[key]);
46 if (store.destroy) {
47 store.destroy();
48 }
49 }
50 };
51
52 return finalStore;
53 }
54
55
56 let strings = Services.strings.createBundle("chrome://browser/locale/devtools/app-manager.properties");
57
58 function l10n (property, args = []) {
59 if (args && args.length > 0) {
60 return strings.formatStringFromName(property, args, args.length);
61 } else {
62 return strings.GetStringFromName(property);
63 }
64 }
65
66 return {
67 mergeStores: mergeStores,
68 l10n: l10n
69 }
70 })();

mercurial