tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

FlexItemSelector.js (2172B)


      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  getSelectorFromGrip,
     14  translateNodeFrontToGrip,
     15 } = require("resource://devtools/client/inspector/shared/utils.js");
     16 
     17 loader.lazyRequireGetter(
     18  this,
     19  "getNodeRep",
     20  "resource://devtools/client/inspector/shared/node-reps.js"
     21 );
     22 
     23 const Types = require("resource://devtools/client/inspector/flexbox/types.js");
     24 
     25 loader.lazyRequireGetter(
     26  this,
     27  "showMenu",
     28  "resource://devtools/client/shared/components/menu/utils.js",
     29  true
     30 );
     31 
     32 class FlexItemSelector extends PureComponent {
     33  static get propTypes() {
     34    return {
     35      flexItem: PropTypes.shape(Types.flexItem).isRequired,
     36      flexItems: PropTypes.arrayOf(PropTypes.shape(Types.flexItem)).isRequired,
     37      setSelectedNode: PropTypes.func.isRequired,
     38    };
     39  }
     40 
     41  constructor(props) {
     42    super(props);
     43    this.onShowFlexItemMenu = this.onShowFlexItemMenu.bind(this);
     44  }
     45 
     46  onShowFlexItemMenu(event) {
     47    event.stopPropagation();
     48 
     49    const { flexItem, flexItems, setSelectedNode } = this.props;
     50    const menuItems = [];
     51 
     52    for (const item of flexItems) {
     53      const grip = translateNodeFrontToGrip(item.nodeFront);
     54      menuItems.push({
     55        label: getSelectorFromGrip(grip),
     56        type: "checkbox",
     57        checked: item === flexItem,
     58        click: () => setSelectedNode(item.nodeFront),
     59      });
     60    }
     61 
     62    showMenu(menuItems, {
     63      button: event.target,
     64    });
     65  }
     66 
     67  render() {
     68    const { flexItem } = this.props;
     69 
     70    return dom.button(
     71      {
     72        id: "flex-item-selector",
     73        className: "devtools-button devtools-dropdown-button",
     74        onClick: this.onShowFlexItemMenu,
     75      },
     76      getNodeRep(flexItem.nodeFront)
     77    );
     78  }
     79 }
     80 
     81 module.exports = FlexItemSelector;