In a following patch, all DevTools moz.build files will use DevToolsModules to install JS modules at a path that corresponds directly to their source tree location. Here we rewrite all require and import calls to match the new location that these files are installed to.
107 lines
3.2 KiB
JavaScript
107 lines
3.2 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
module.metadata = {
|
|
"stability": "experimental"
|
|
};
|
|
|
|
const { Cu, Cc, Ci } = require("chrome");
|
|
const { Class } = require("../sdk/core/heritage");
|
|
const { Disposable, setup } = require("../sdk/core/disposable");
|
|
const { contract, validate } = require("../sdk/util/contract");
|
|
const { each, pairs, values } = require("../sdk/util/sequence");
|
|
const { onEnable, onDisable } = require("../dev/theme/hooks");
|
|
|
|
const { gDevTools } = Cu.import("resource:///modules/devtools/client/framework/gDevTools.jsm", {});
|
|
|
|
// This is temporary workaround to allow loading of the developer tools client - volcan
|
|
// into a toolbox panel, this hack won't be necessary as soon as devtools patch will be
|
|
// shipped in nightly, after which it can be removed. Bug 1038517
|
|
const registerSDKURI = () => {
|
|
const ioService = Cc['@mozilla.org/network/io-service;1']
|
|
.getService(Ci.nsIIOService);
|
|
const resourceHandler = ioService.getProtocolHandler("resource")
|
|
.QueryInterface(Ci.nsIResProtocolHandler);
|
|
|
|
const uri = module.uri.replace("dev/toolbox.js", "");
|
|
resourceHandler.setSubstitution("sdk", ioService.newURI(uri, null, null));
|
|
};
|
|
|
|
registerSDKURI();
|
|
|
|
const Tool = Class({
|
|
extends: Disposable,
|
|
setup: function(params={}) {
|
|
const { panels } = validate(this, params);
|
|
const { themes } = validate(this, params);
|
|
|
|
this.panels = panels;
|
|
this.themes = themes;
|
|
|
|
each(([key, Panel]) => {
|
|
const { url, label, tooltip, icon,
|
|
invertIconForLightTheme } = validate(Panel.prototype);
|
|
const { id } = Panel.prototype;
|
|
|
|
gDevTools.registerTool({
|
|
id: id,
|
|
url: "about:blank",
|
|
label: label,
|
|
tooltip: tooltip,
|
|
icon: icon,
|
|
invertIconForLightTheme: invertIconForLightTheme,
|
|
isTargetSupported: target => target.isLocalTab,
|
|
build: (window, toolbox) => {
|
|
const panel = new Panel();
|
|
setup(panel, { window: window,
|
|
toolbox: toolbox,
|
|
url: url });
|
|
|
|
return panel.ready();
|
|
}
|
|
});
|
|
}, pairs(panels));
|
|
|
|
each(([key, theme]) => {
|
|
validate(theme);
|
|
setup(theme);
|
|
|
|
gDevTools.registerTheme({
|
|
id: theme.id,
|
|
label: theme.label,
|
|
stylesheets: theme.getStyles(),
|
|
classList: theme.getClassList(),
|
|
onApply: (window, oldTheme) => {
|
|
onEnable(theme, { window: window,
|
|
oldTheme: oldTheme });
|
|
},
|
|
onUnapply: (window, newTheme) => {
|
|
onDisable(theme, { window: window,
|
|
newTheme: newTheme });
|
|
}
|
|
});
|
|
}, pairs(themes));
|
|
},
|
|
dispose: function() {
|
|
each(Panel => gDevTools.unregisterTool(Panel.prototype.id),
|
|
values(this.panels));
|
|
|
|
each(Theme => gDevTools.unregisterTheme(Theme.prototype.id),
|
|
values(this.themes));
|
|
}
|
|
});
|
|
|
|
validate.define(Tool, contract({
|
|
panels: {
|
|
is: ["object", "undefined"]
|
|
},
|
|
themes: {
|
|
is: ["object", "undefined"]
|
|
}
|
|
}));
|
|
|
|
exports.Tool = Tool;
|