From 107c45627e3c5577555ef99a60888efbee80291f Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Wed, 10 Apr 2019 12:34:57 -0700 Subject: [PATCH 1/3] Allow selection of collapsed values without triggering expansion --- src/collapsed.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/collapsed.js b/src/collapsed.js index 46e7868..7c05dd5 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; @@ -30,7 +40,8 @@ export default function inspectCollapsed(object, shallow, name) { span.appendChild(inspectName(name)); } span.appendChild(document.createTextNode(tag)); - span.addEventListener("mouseup", function(event) { + span.addEventListener("click", 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) { + span.addEventListener("click", function(event) { + if (hasSelection(span)) return; event.stopPropagation(); replace(span, inspectExpanded(object, null, name)); }, true); From bf971ab7bb3e3776d4907fcc131db1ab01e1c1b4 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Wed, 10 Apr 2019 13:01:12 -0700 Subject: [PATCH 2/3] Adjust tests --- test/inspector.test.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/test/inspector.test.js b/test/inspector.test.js index 1b42e4c..d3e74b5 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", () => { @@ -27,7 +34,7 @@ describe("Inspector", () => { test(".fulfilled(value)", () => { inspector.fulfilled([1, 2, 3]); expect(elem).toMatchSnapshot(); - elem.querySelector("a").dispatchEvent(new MouseEvent("mouseup")); + elem.querySelector("a").dispatchEvent(new MouseEvent("click")); expect(elem).toMatchSnapshot(); }); From 1d725f5768180a6679b270f3744840a45e59089f Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Wed, 10 Apr 2019 13:03:04 -0700 Subject: [PATCH 3/3] Switch back from click to mouseup --- src/collapsed.js | 4 ++-- test/inspector.test.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/collapsed.js b/src/collapsed.js index 7c05dd5..2a46002 100644 --- a/src/collapsed.js +++ b/src/collapsed.js @@ -40,7 +40,7 @@ export default function inspectCollapsed(object, shallow, name) { span.appendChild(inspectName(name)); } span.appendChild(document.createTextNode(tag)); - span.addEventListener("click", function(event) { + span.addEventListener("mouseup", function(event) { if (hasSelection(span)) return; event.stopPropagation(); replace(span, inspectCollapsed(object)); @@ -58,7 +58,7 @@ export default function inspectCollapsed(object, shallow, name) { `; a.appendChild(document.createTextNode(`${tag}${arrayish ? " [" : " {"}`)); - span.addEventListener("click", function(event) { + span.addEventListener("mouseup", function(event) { if (hasSelection(span)) return; event.stopPropagation(); replace(span, inspectExpanded(object, null, name)); diff --git a/test/inspector.test.js b/test/inspector.test.js index d3e74b5..7732eaf 100644 --- a/test/inspector.test.js +++ b/test/inspector.test.js @@ -34,7 +34,7 @@ describe("Inspector", () => { test(".fulfilled(value)", () => { inspector.fulfilled([1, 2, 3]); expect(elem).toMatchSnapshot(); - elem.querySelector("a").dispatchEvent(new MouseEvent("click")); + elem.querySelector("a").dispatchEvent(new MouseEvent("mouseup")); expect(elem).toMatchSnapshot(); });