/* 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";
const {
createFactory,
createElement,
} = require(
"resource://devtools/client/shared/vendor/react.js");
const {
Provider,
} = require(
"resource://devtools/client/shared/vendor/react-redux.js");
const FlexboxInspector = require(
"resource://devtools/client/inspector/flexbox/flexbox.js");
const GridInspector = require(
"resource://devtools/client/inspector/grids/grid-inspector.js");
const LayoutApp = createFactory(
require(
"resource://devtools/client/inspector/layout/components/LayoutApp.js")
);
const { LocalizationHelper } = require(
"resource://devtools/shared/l10n.js");
const INSPECTOR_L10N =
new LocalizationHelper(
"devtools/client/locales/inspector.properties"
);
loader.lazyRequireGetter(
this,
"SwatchColorPickerTooltip",
"resource://devtools/client/shared/widgets/tooltip/SwatchColorPickerTooltip.js"
);
class LayoutView {
constructor(inspector, window) {
this.document = window.document;
this.inspector = inspector;
this.store = inspector.store;
this.init();
}
init() {
if (!
this.inspector) {
return;
}
const { setSelectedNode } =
this.inspector.getCommonComponentProps();
const {
onShowBoxModelEditor,
onShowRulePreviewTooltip,
onToggleGeometryEditor,
} =
this.inspector.getPanel(
"boxmodel").getComponentProps();
this.flexboxInspector =
new FlexboxInspector(
this.inspector,
this.inspector.panelWin
);
const { onSetFlexboxOverlayColor } =
this.flexboxInspector.getComponentProps();
this.gridInspector =
new GridInspector(
this.inspector,
this.inspector.panelWin
);
const {
onSetGridOverlayColor,
onToggleGridHighlighter,
onToggleShowGridAreas,
onToggleShowGridLineNumbers,
onToggleShowInfiniteLines,
} =
this.gridInspector.getComponentProps();
const layoutApp = LayoutApp({
getSwatchColorPickerTooltip: () =>
this.swatchColorPickerTooltip,
onSetFlexboxOverlayColor,
onSetGridOverlayColor,
onShowBoxModelEditor,
onShowRulePreviewTooltip,
onToggleGeometryEditor,
onToggleGridHighlighter,
onToggleShowGridAreas,
onToggleShowGridLineNumbers,
onToggleShowInfiniteLines,
setSelectedNode,
/**
* Shows the box model properties under the box model if true, otherwise, hidden by
* default.
*/
showBoxModelProperties:
true,
});
const provider = createElement(
Provider,
{
id:
"layoutview",
key:
"layoutview",
store:
this.store,
title: INSPECTOR_L10N.getStr(
"inspector.sidebar.layoutViewTitle2"),
},
layoutApp
);
// Expose the provider to let inspector.js use it in setupSidebar.
this.provider = provider;
}
/**
* Destruction function called when the inspector is destroyed. Cleans up references.
*/
destroy() {
if (
this._swatchColorPickerTooltip) {
this._swatchColorPickerTooltip.destroy();
this._swatchColorPickerTooltip =
null;
}
this.flexboxInspector.destroy();
this.gridInspector.destroy();
this.document =
null;
this.inspector =
null;
this.store =
null;
}
get swatchColorPickerTooltip() {
if (!
this._swatchColorPickerTooltip) {
this._swatchColorPickerTooltip =
new SwatchColorPickerTooltip(
this.inspector.toolbox.doc,
this.inspector
);
}
return this._swatchColorPickerTooltip;
}
}
module.exports = LayoutView;