diff --git a/src/collapsed.js b/src/collapsed.js index 46e7868..2a46002 100644 --- a/src/collapsed.js +++ b/src/collapsed.js @@ -5,6 +5,16 @@ import inspectName from "./inspectName.js"; import {inspect, replace} from "./inspect.js"; import {isown, symbolsof, tagof, valueof} from "./object.js"; +function hasSelection(elem) { + const sel = window.getSelection(); + return ( + sel.type === "Range" && + (sel.containsNode(elem, true) || + sel.anchorNode.isSelfOrDescendant(elem) || + sel.focusNode.isSelfOrDescendant(elem)) + ); +} + export default function inspectCollapsed(object, shallow, name) { const arrayish = isarray(object); let tag, fields, next; @@ -31,6 +41,7 @@ export default function inspectCollapsed(object, shallow, name) { } span.appendChild(document.createTextNode(tag)); span.addEventListener("mouseup", function(event) { + if (hasSelection(span)) return; event.stopPropagation(); replace(span, inspectCollapsed(object)); }); @@ -43,11 +54,12 @@ export default function inspectCollapsed(object, shallow, name) { span.appendChild(inspectName(name)); } const a = span.appendChild(document.createElement("a")); - a.innerHTML =` + a.innerHTML = ` `; a.appendChild(document.createTextNode(`${tag}${arrayish ? " [" : " {"}`)); span.addEventListener("mouseup", function(event) { + if (hasSelection(span)) return; event.stopPropagation(); replace(span, inspectExpanded(object, null, name)); }, true); diff --git a/test/inspector.test.js b/test/inspector.test.js index 1b42e4c..7732eaf 100644 --- a/test/inspector.test.js +++ b/test/inspector.test.js @@ -6,6 +6,13 @@ describe("Inspector", () => { beforeEach(() => { elem = document.createElement("div"); inspector = new Inspector(elem); + window.getSelection = () => { + return { + type: 'Caret', + removeAllRanges: () => {}, + containsNode: () => false + }; + }; }); test("initial state", () => {