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

changeset 0
6474c204b198
     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 +})();

mercurial