ComputedProperty.js (3250B)
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 { LocalizationHelper } = require("resource://devtools/shared/l10n.js"); 13 14 loader.lazyRequireGetter( 15 this, 16 "getNodeRep", 17 "resource://devtools/client/inspector/shared/node-reps.js" 18 ); 19 20 const { 21 highlightNode, 22 unhighlightNode, 23 } = require("resource://devtools/client/inspector/boxmodel/actions/box-model-highlighter.js"); 24 25 const BOXMODEL_STRINGS_URI = "devtools/client/locales/boxmodel.properties"; 26 const BOXMODEL_L10N = new LocalizationHelper(BOXMODEL_STRINGS_URI); 27 28 class ComputedProperty extends PureComponent { 29 static get propTypes() { 30 return { 31 dispatch: PropTypes.func.isRequired, 32 name: PropTypes.string.isRequired, 33 referenceElement: PropTypes.object, 34 referenceElementType: PropTypes.string, 35 setSelectedNode: PropTypes.func, 36 value: PropTypes.string, 37 }; 38 } 39 40 constructor(props) { 41 super(props); 42 43 this.renderReferenceElementPreview = 44 this.renderReferenceElementPreview.bind(this); 45 } 46 47 renderReferenceElementPreview() { 48 const { 49 dispatch, 50 referenceElement, 51 referenceElementType, 52 setSelectedNode, 53 } = this.props; 54 55 if (!referenceElement) { 56 return null; 57 } 58 59 return dom.div( 60 { className: "reference-element" }, 61 dom.span( 62 { 63 className: "reference-element-type", 64 role: "button", 65 title: BOXMODEL_L10N.getStr("boxmodel.offsetParent.title"), 66 }, 67 referenceElementType 68 ), 69 getNodeRep(referenceElement, { 70 onInspectIconClick: () => 71 setSelectedNode(referenceElement, { reason: "box-model" }), 72 onDOMNodeMouseOver: () => dispatch(highlightNode(referenceElement)), 73 onDOMNodeMouseOut: () => dispatch(unhighlightNode()), 74 }) 75 ); 76 } 77 78 render() { 79 const { name, value } = this.props; 80 81 return dom.div( 82 { 83 className: "computed-property-view", 84 role: "row", 85 "data-property-name": name, 86 ref: container => { 87 this.container = container; 88 }, 89 }, 90 dom.div( 91 { 92 className: "computed-property-name-container", 93 role: "presentation", 94 }, 95 dom.div( 96 { 97 className: "computed-property-name theme-fg-color3", 98 role: "cell", 99 title: name, 100 }, 101 name 102 ) 103 ), 104 dom.div( 105 { 106 className: "computed-property-value-container", 107 role: "presentation", 108 }, 109 dom.div( 110 { 111 className: "computed-property-value theme-fg-color1", 112 dir: "ltr", 113 role: "cell", 114 }, 115 value 116 ), 117 this.renderReferenceElementPreview() 118 ) 119 ); 120 } 121 } 122 123 module.exports = ComputedProperty;