SettingsMenu.js (3370B)
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/. */ 4 5 "use strict"; 6 7 const { 8 PureComponent, 9 } = require("resource://devtools/client/shared/vendor/react.mjs"); 10 const dom = require("resource://devtools/client/shared/vendor/react-dom-factories.js"); 11 const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.mjs"); 12 const { 13 connect, 14 } = require("resource://devtools/client/shared/vendor/react-redux.js"); 15 16 const { 17 getStr, 18 } = require("resource://devtools/client/responsive/utils/l10n.js"); 19 20 loader.lazyRequireGetter( 21 this, 22 "showMenu", 23 "resource://devtools/client/shared/components/menu/utils.js", 24 true 25 ); 26 27 class SettingsMenu extends PureComponent { 28 static get propTypes() { 29 return { 30 leftAlignmentEnabled: PropTypes.bool.isRequired, 31 onToggleLeftAlignment: PropTypes.func.isRequired, 32 onToggleReloadOnTouchSimulation: PropTypes.func.isRequired, 33 onToggleReloadOnUserAgent: PropTypes.func.isRequired, 34 onToggleUserAgentInput: PropTypes.func.isRequired, 35 reloadOnTouchSimulation: PropTypes.bool.isRequired, 36 reloadOnUserAgent: PropTypes.bool.isRequired, 37 showUserAgentInput: PropTypes.bool.isRequired, 38 }; 39 } 40 41 constructor(props) { 42 super(props); 43 this.onToggleSettingMenu = this.onToggleSettingMenu.bind(this); 44 } 45 46 onToggleSettingMenu(event) { 47 const { 48 leftAlignmentEnabled, 49 onToggleLeftAlignment, 50 onToggleReloadOnTouchSimulation, 51 onToggleReloadOnUserAgent, 52 onToggleUserAgentInput, 53 reloadOnTouchSimulation, 54 reloadOnUserAgent, 55 showUserAgentInput, 56 } = this.props; 57 58 const menuItems = [ 59 { 60 id: "toggleLeftAlignment", 61 checked: leftAlignmentEnabled, 62 label: getStr("responsive.leftAlignViewport"), 63 type: "checkbox", 64 click: () => { 65 onToggleLeftAlignment(); 66 }, 67 }, 68 "-", 69 { 70 id: "toggleUserAgentInput", 71 checked: showUserAgentInput, 72 label: getStr("responsive.showUserAgentInput"), 73 type: "checkbox", 74 click: () => { 75 onToggleUserAgentInput(); 76 }, 77 }, 78 "-", 79 { 80 id: "touchSimulation", 81 checked: reloadOnTouchSimulation, 82 label: getStr("responsive.reloadConditions.touchSimulation"), 83 type: "checkbox", 84 click: () => { 85 onToggleReloadOnTouchSimulation(); 86 }, 87 }, 88 { 89 id: "userAgent", 90 checked: reloadOnUserAgent, 91 label: getStr("responsive.reloadConditions.userAgent"), 92 type: "checkbox", 93 click: () => { 94 onToggleReloadOnUserAgent(); 95 }, 96 }, 97 ]; 98 99 showMenu(menuItems, { 100 button: event.target, 101 }); 102 } 103 104 render() { 105 return dom.button({ 106 id: "settings-button", 107 className: "devtools-button", 108 onClick: this.onToggleSettingMenu, 109 }); 110 } 111 } 112 113 const mapStateToProps = state => { 114 return { 115 leftAlignmentEnabled: state.ui.leftAlignmentEnabled, 116 reloadOnTouchSimulation: state.ui.reloadOnTouchSimulation, 117 reloadOnUserAgent: state.ui.reloadOnUserAgent, 118 showUserAgentInput: state.ui.showUserAgentInput, 119 }; 120 }; 121 122 module.exports = connect(mapStateToProps)(SettingsMenu);