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/. */
10 } = require("devtools/client/shared/vendor/react");
11 const dom = require("devtools/client/shared/vendor/react-dom-factories");
12 const PropTypes = require("devtools/client/shared/vendor/react-prop-types");
13 const { connect } = require("devtools/client/shared/vendor/react-redux");
14 const { COLOR_SCHEMES } = require("devtools/client/inspector/rules/constants");
16 const SearchBox = createFactory(require("./SearchBox"));
18 loader.lazyGetter(this, "ClassListPanel", function() {
19 return createFactory(require("./ClassListPanel"));
21 loader.lazyGetter(this, "PseudoClassPanel", function() {
22 return createFactory(require("./PseudoClassPanel"));
25 const { getStr } = require("../utils/l10n");
27 class Toolbar extends PureComponent {
28 static get propTypes() {
30 isAddRuleEnabled: PropTypes.bool.isRequired,
31 isClassPanelExpanded: PropTypes.bool.isRequired,
32 isColorSchemeSimulationHidden: PropTypes.bool.isRequired,
33 isPrintSimulationHidden: PropTypes.bool.isRequired,
34 onAddClass: PropTypes.func.isRequired,
35 onAddRule: PropTypes.func.isRequired,
36 onSetClassState: PropTypes.func.isRequired,
37 onToggleClassPanelExpanded: PropTypes.func.isRequired,
38 onToggleColorSchemeSimulation: PropTypes.func.isRequired,
39 onTogglePrintSimulation: PropTypes.func.isRequired,
40 onTogglePseudoClass: PropTypes.func.isRequired,
48 // Which of the color schemes is simulated, if any.
49 currentColorScheme: 0,
50 // Whether or not the print simulation button is enabled.
51 isPrintSimulationEnabled: false,
52 // Whether or not the pseudo class panel is expanded.
53 isPseudoClassPanelExpanded: false,
56 this.onAddRuleClick = this.onAddRuleClick.bind(this);
57 this.onClassPanelToggle = this.onClassPanelToggle.bind(this);
58 this.onColorSchemeSimulationClick = this.onColorSchemeSimulationClick.bind(
61 this.onPrintSimulationToggle = this.onPrintSimulationToggle.bind(this);
62 this.onPseudoClassPanelToggle = this.onPseudoClassPanelToggle.bind(this);
65 onAddRuleClick(event) {
66 event.stopPropagation();
67 this.props.onAddRule();
70 onClassPanelToggle(event) {
71 event.stopPropagation();
73 const isClassPanelExpanded = !this.props.isClassPanelExpanded;
74 this.props.onToggleClassPanelExpanded(isClassPanelExpanded);
75 this.setState(prevState => {
77 isPseudoClassPanelExpanded: isClassPanelExpanded
79 : prevState.isPseudoClassPanelExpanded,
84 onColorSchemeSimulationClick(event) {
85 event.stopPropagation();
87 this.props.onToggleColorSchemeSimulation();
88 this.setState(prevState => ({
90 (prevState.currentColorScheme + 1) % COLOR_SCHEMES.length,
94 onPrintSimulationToggle(event) {
95 event.stopPropagation();
96 this.props.onTogglePrintSimulation();
97 this.setState(prevState => ({
98 isPrintSimulationEnabled: !prevState.isPrintSimulationEnabled,
102 onPseudoClassPanelToggle(event) {
103 event.stopPropagation();
105 const isPseudoClassPanelExpanded = !this.state.isPseudoClassPanelExpanded;
107 if (isPseudoClassPanelExpanded) {
108 this.props.onToggleClassPanelExpanded(false);
111 this.setState({ isPseudoClassPanelExpanded });
117 isClassPanelExpanded,
118 isColorSchemeSimulationHidden,
119 isPrintSimulationHidden,
121 const { isPrintSimulationEnabled, isPseudoClassPanelExpanded } = this.state;
125 id: "ruleview-toolbar-container",
129 id: "ruleview-toolbar",
130 className: "devtools-toolbar devtools-input-toolbar",
133 dom.div({ className: "devtools-separator" }),
135 { id: "ruleview-command-toolbar" },
137 id: "pseudo-class-panel-toggle",
140 (isPseudoClassPanelExpanded ? " checked" : ""),
141 onClick: this.onPseudoClassPanelToggle,
142 title: getStr("rule.togglePseudo.tooltip"),
145 id: "class-panel-toggle",
147 "devtools-button" + (isClassPanelExpanded ? " checked" : ""),
148 onClick: this.onClassPanelToggle,
149 title: getStr("rule.classPanel.toggleClass.tooltip"),
152 id: "ruleview-add-rule-button",
153 className: "devtools-button",
154 disabled: !isAddRuleEnabled,
155 onClick: this.onAddRuleClick,
156 title: getStr("rule.addRule.tooltip"),
158 isColorSchemeSimulationHidden
160 id: "color-scheme-simulation-toggle",
161 className: "devtools-button",
162 onClick: this.onColorSchemeSimulationClick,
163 state: COLOR_SCHEMES[this.state.currentColorScheme],
164 title: getStr("rule.colorSchemeSimulation.tooltip"),
167 !isPrintSimulationHidden
169 id: "print-simulation-toggle",
172 (isPrintSimulationEnabled ? " checked" : ""),
173 onClick: this.onPrintSimulationToggle,
174 title: getStr("rule.printSimulation.tooltip"),
181 onAddClass: this.props.onAddClass,
182 onSetClassState: this.props.onSetClassState,
185 isPseudoClassPanelExpanded
187 onTogglePseudoClass: this.props.onTogglePseudoClass,
194 const mapStateToProps = state => {
196 isAddRuleEnabled: state.rules.isAddRuleEnabled,
197 isClassPanelExpanded: state.classList.isClassPanelExpanded,
198 isColorSchemeSimulationHidden: state.rules.isColorSchemeSimulationHidden,
199 isPrintSimulationHidden: state.rules.isPrintSimulationHidden,
203 module.exports = connect(mapStateToProps)(Toolbar);