ember-inspector-prebuilt
Version:
A pre-built set of distributable assets from the ember.js ember-inspector project.
103 lines (79 loc) • 2.41 kB
JavaScript
const { data, version } = require("sdk/self");
const { openEmberInspector } = require("./tomster-devtool-panel");
const tabs = require("./tomster-tabs");
const { UrlbarButton } = require("./urlbarbutton");
const { Panel } = require("sdk/panel");
const TOMSTER_BUTTON_ID = "ember-inspector-toolbarbutton";
let button, panel;
exports.enable = enable;
exports.disable = disable;
function enable() {
panel = createPanel();
button = UrlbarButton({
id: TOMSTER_BUTTON_ID,
image : data.url("panes-2-7-0/assets/images/icon19.png"),
// TODO: Warning for a panel hooked to a locationbar button:
// "Passing a DOM node to Panel.show() method is an unsupported feature
// that will be soon replaced. See:
// https://bugzilla.mozilla.org/show_bug.cgi?id=878877"
panel: panel,
tooltip : 'Ember Inspector',
});
tabs.on('open', hidePanel);
['activate', 'ready', 'emberVersion'].forEach( (event) => {
tabs.on(event, refreshButton);
});
}
function disable() {
try {
// unregister anchor widget from australis customizable ui jsm
let { Cu } = require("chrome");
Cu.import("resource://app/modules/CustomizableUI.jsm");
CustomizableUI.removeWidgetFromArea(TOMSTER_BUTTON_ID);
CustomizableUI.destroyWidget(TOMSTER_BUTTON_ID);
} catch(e) {
console.error(e);
}
tabs.removeListener('open', hidePanel);
['activate', 'ready', 'emberVersion'].forEach( (event) => {
tabs.removeListener(event, refreshButton);
});
if (button) {
button.remove();
button = null;
panel.destroy();
panel = null;
}
}
function hidePanel() {
panel.hide();
}
function refreshButton(tab) {
button.setVisibility(false, tab.url);
let libs = tabs.getLibrariesByTabId(tab.id);
if (libs) {
button.setVisibility(true, libs.url);
refreshPanel(tab.url, libs);
}
}
function refreshPanel(url, libraries) {
libraries.inspectorVersion = version;
panel.port.emit("emberVersion", libraries);
}
function createPanel() {
let panel = Panel({
contentURL: data.url("toolbar-button-panel.html")
});
panel.on("show", () => {
let tab = tabs.activeTab;
refreshPanel(tab.url, tabs.getLibrariesByTabId(tab.id));
});
panel.port.on('panelResize', (width, height) => {
panel.height = height + 40;
});
panel.port.on('openEmberInspector', () => {
panel.hide();
openEmberInspector();
});
return panel;
}