/* 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 . */ import React, { Component } from "react"; import PropTypes from "prop-types"; import Reps from "devtools/client/shared/components/reps/index"; const { REPS: { Rep }, MODE, } = Reps; import { translateNodeFrontToGrip } from "inspector-shared-utils"; import { deleteDOMMutationBreakpoint, toggleDOMMutationBreakpointState, } from "framework-actions"; import actions from "../../actions"; import { connect } from "../../utils/connect"; import { CloseButton } from "../shared/Button"; import "./DOMMutationBreakpoints.css"; const localizationTerms = { subtree: L10N.getStr("domMutationTypes.subtree"), attribute: L10N.getStr("domMutationTypes.attribute"), removal: L10N.getStr("domMutationTypes.removal"), }; class DOMMutationBreakpointsContents extends Component { static get propTypes() { return { breakpoints: PropTypes.array.isRequired, deleteBreakpoint: PropTypes.func.isRequired, highlightDomElement: PropTypes.func.isRequired, openElementInInspector: PropTypes.func.isRequired, openInspector: PropTypes.func.isRequired, setSkipPausing: PropTypes.func.isRequired, toggleBreakpoint: PropTypes.func.isRequired, unHighlightDomElement: PropTypes.func.isRequired, }; } handleBreakpoint(breakpointId, shouldEnable) { const { toggleBreakpoint, setSkipPausing } = this.props; // The user has enabled a mutation breakpoint so we should no // longer skip pausing if (shouldEnable) { setSkipPausing(false); } toggleBreakpoint(breakpointId, shouldEnable); } renderItem(breakpoint) { const { openElementInInspector, highlightDomElement, unHighlightDomElement, deleteBreakpoint, } = this.props; const { enabled, id: breakpointId, nodeFront, mutationType } = breakpoint; return (
  • this.handleBreakpoint(breakpointId, !enabled)} />
    {Rep({ object: translateNodeFrontToGrip(nodeFront), mode: MODE.TINY, onDOMNodeClick: () => openElementInInspector(nodeFront), onInspectIconClick: () => openElementInInspector(nodeFront), onDOMNodeMouseOver: () => highlightDomElement(nodeFront), onDOMNodeMouseOut: () => unHighlightDomElement(), })}
    {localizationTerms[mutationType] || mutationType}
    deleteBreakpoint(nodeFront, mutationType)} />
  • ); } /* eslint-disable react/no-danger */ renderEmpty() { const { openInspector } = this.props; const text = L10N.getFormatStr( "noDomMutationBreakpoints", `${L10N.getStr("inspectorTool")}` ); return (
    openInspector()} dangerouslySetInnerHTML={{ __html: text }} />
    ); } render() { const { breakpoints } = this.props; if (breakpoints.length === 0) { return this.renderEmpty(); } return ( ); } } const mapStateToProps = state => ({ breakpoints: state.domMutationBreakpoints.breakpoints, }); const DOMMutationBreakpointsPanel = connect( mapStateToProps, { deleteBreakpoint: deleteDOMMutationBreakpoint, toggleBreakpoint: toggleDOMMutationBreakpointState, }, undefined, { storeKey: "toolbox-store" } )(DOMMutationBreakpointsContents); class DomMutationBreakpoints extends Component { static get propTypes() { return { highlightDomElement: PropTypes.func.isRequired, openElementInInspector: PropTypes.func.isRequired, openInspector: PropTypes.func.isRequired, setSkipPausing: PropTypes.func.isRequired, unHighlightDomElement: PropTypes.func.isRequired, }; } render() { return ( ); } } export default connect(undefined, { // the debugger-specific action bound to the debugger store // since there is no `storeKey` openElementInInspector: actions.openElementInInspectorCommand, highlightDomElement: actions.highlightDomElement, unHighlightDomElement: actions.unHighlightDomElement, setSkipPausing: actions.setSkipPausing, openInspector: actions.openInspector, })(DomMutationBreakpoints);