diff options
Diffstat (limited to 'devtools/client/inspector/markup/views/read-only-editor.js')
-rw-r--r-- | devtools/client/inspector/markup/views/read-only-editor.js | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/devtools/client/inspector/markup/views/read-only-editor.js b/devtools/client/inspector/markup/views/read-only-editor.js new file mode 100644 index 0000000000..009abd5af0 --- /dev/null +++ b/devtools/client/inspector/markup/views/read-only-editor.js @@ -0,0 +1,82 @@ +/* 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 http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +const nodeConstants = require("resource://devtools/shared/dom-node-constants.js"); + +/** + * Creates an editor for non-editable nodes. + */ +function ReadOnlyEditor(container, node) { + this.container = container; + this.markup = this.container.markup; + this.buildMarkup(); + + if (node.isPseudoElement) { + this.tag.classList.add("theme-fg-color3"); + if (node.isMarkerPseudoElement) { + this.tag.textContent = "::marker"; + } else if (node.isBeforePseudoElement) { + this.tag.textContent = "::before"; + } else if (node.isAfterPseudoElement) { + this.tag.textContent = "::after"; + } + } else if (node.nodeType == nodeConstants.DOCUMENT_TYPE_NODE) { + this.elt.classList.add("comment", "doctype"); + this.tag.textContent = node.doctypeString; + } else if (node.isShadowRoot) { + this.tag.textContent = `#shadow-root (${node.shadowRootMode})`; + } else { + this.tag.textContent = node.nodeName; + } + + // Make the "tag" part of this editor focusable. + this.tag.setAttribute("tabindex", "-1"); +} + +ReadOnlyEditor.prototype = { + buildMarkup() { + const doc = this.markup.doc; + + this.elt = doc.createElement("span"); + this.elt.classList.add("editor"); + + this.tag = doc.createElement("span"); + this.tag.classList.add("tag"); + this.elt.appendChild(this.tag); + }, + + destroy() { + // We might be already destroyed. + if (!this.elt) { + return; + } + + this.elt.remove(); + this.elt = null; + this.tag = null; + }, + + /** + * Show overflow highlight if showOverflowHighlight is true, otherwise hide it. + * + * @param {Boolean} showOverflowHighlight + */ + setOverflowHighlight(showOverflowHighlight) { + this.container.tagState.classList.toggle( + "overflow-causing-highlighted", + showOverflowHighlight + ); + }, + + /** + * Stub method for consistency with ElementEditor. + */ + getInfoAtNode() { + return null; + }, +}; + +module.exports = ReadOnlyEditor; |