From 4e1139021b788760e42ab8b02bce4117360d812d Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Thu, 14 Jan 2021 18:59:07 +0100 Subject: [PATCH] Consider list edge case for line breaks * Enter makes a new bullet point * Shift+Enter makes a line break in current bullet point --- qt/aqt/data/web/js/editor.ts | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/qt/aqt/data/web/js/editor.ts b/qt/aqt/data/web/js/editor.ts index e6b4cc21a..bf3ea9dd7 100644 --- a/qt/aqt/data/web/js/editor.ts +++ b/qt/aqt/data/web/js/editor.ts @@ -56,7 +56,8 @@ function onKey(evt: KeyboardEvent) { } // prefer
instead of
- if (evt.which === 13) { + if (evt.which === 13 && !inListItem()) { + console.log("Enter"); evt.preventDefault(); document.execCommand("insertLineBreak"); return; @@ -87,6 +88,25 @@ function onKey(evt: KeyboardEvent) { triggerKeyTimer(); } +function nodeIsElement(node: Node): node is Element { + return node.nodeType == Node.ELEMENT_NODE; +} + +function inListItem(): boolean { + const anchor = window.getSelection().anchorNode; + + let n = nodeIsElement(anchor) ? anchor : anchor.parentElement; + + let inList = false; + + while (n) { + inList = inList || window.getComputedStyle(n).display == "list-item"; + n = n.parentElement; + } + + return inList; +} + function insertNewline() { if (!inPreEnvironment()) { setFormat("insertText", "\n"); @@ -113,11 +133,10 @@ function insertNewline() { } // is the cursor in an environment that respects whitespace? -function inPreEnvironment() { - let n = window.getSelection().anchorNode as Element; - if (n.nodeType === 3) { - n = n.parentNode as Element; - } +function inPreEnvironment(): boolean { + const anchor = window.getSelection().anchorNode; + const n = nodeIsElement(anchor) ? anchor : anchor.parentElement; + return window.getComputedStyle(n).whiteSpace.startsWith("pre"); }