]> BookStack Code Mirror - bookstack/commitdiff
WYSIWYG: Fixed list indenting selection & display bugs
authorDan Brown <redacted>
Fri, 4 Oct 2024 14:11:09 +0000 (15:11 +0100)
committerDan Brown <redacted>
Fri, 4 Oct 2024 14:11:09 +0000 (15:11 +0100)
- Fixed selection breaking on multiple indent changes
- Fixed multi-indent showing numbers on empty child list until the nodes
  are fully re-rendered.

resources/js/wysiwyg/nodes/custom-list-item.ts
resources/js/wysiwyg/todo.md
resources/js/wysiwyg/utils/lists.ts

index 659a55a157a6fd9d129cc03992f6003b7662dcfa..11887b4364d2e9082c7e488a9dd3bb93516521df 100644 (file)
@@ -55,6 +55,8 @@ export class CustomListItemNode extends ListItemNode {
         if ($isListNode(parent) && parent.getListType() === 'check') {
             updateListItemChecked(dom, this);
         }
+
+        dom.style.listStyle = $hasNestedListWithoutLabel(this) ? 'none' : '';
         // @ts-expect-error - this is always HTMLListItemElement
         dom.value = this.__value;
 
index d2213f7623954c1263706cd13536788da79a3787..a49cccd26dcbf775be02def3cf574bf25fa05f17 100644 (file)
@@ -20,4 +20,4 @@
 
 ## Bugs
 
-- List selection can get lost on nesting/unnesting
\ No newline at end of file
+//
\ No newline at end of file
index edde994e5a059435eb9ce5c05c2857df13ca6d19..30a97cbc1f985aa806420d9965fbdfbb856c12de 100644 (file)
@@ -1,14 +1,14 @@
 import {$createCustomListItemNode, $isCustomListItemNode, CustomListItemNode} from "../nodes/custom-list-item";
 import {$createCustomListNode, $isCustomListNode} from "../nodes/custom-list";
-import {BaseSelection, LexicalEditor} from "lexical";
-import {$getBlockElementNodesInSelection, $selectNodes, $toggleSelection, getLastSelection} from "./selection";
+import {$getSelection, BaseSelection, LexicalEditor} from "lexical";
+import {$getBlockElementNodesInSelection, $selectNodes, $toggleSelection} from "./selection";
 import {nodeHasInset} from "./nodes";
 
 
-export function $nestListItem(node: CustomListItemNode) {
+export function $nestListItem(node: CustomListItemNode): CustomListItemNode {
     const list = node.getParent();
     if (!$isCustomListNode(list)) {
-        return;
+        return node;
     }
 
     const listItems = list.getChildren() as CustomListItemNode[];
@@ -27,14 +27,16 @@ export function $nestListItem(node: CustomListItemNode) {
         prevListItem.append(newList);
         node.remove();
     }
+
+    return newListItem;
 }
 
-export function $unnestListItem(node: CustomListItemNode) {
+export function $unnestListItem(node: CustomListItemNode): CustomListItemNode {
     const list = node.getParent();
     const parentListItem = list?.getParent();
     const outerList = parentListItem?.getParent();
     if (!$isCustomListNode(list) || !$isCustomListNode(outerList) || !$isCustomListItemNode(parentListItem)) {
-        return;
+        return node;
     }
 
     parentListItem.insertAfter(node);
@@ -45,6 +47,8 @@ export function $unnestListItem(node: CustomListItemNode) {
     if (parentListItem.getChildren().length === 0) {
         parentListItem.remove();
     }
+
+    return node;
 }
 
 function getListItemsForSelection(selection: BaseSelection|null): (CustomListItemNode|null)[] {
@@ -89,24 +93,25 @@ function $reduceDedupeListItems(listItems: (CustomListItemNode|null)[]): CustomL
 }
 
 export function $setInsetForSelection(editor: LexicalEditor, change: number): void {
-    const selection = getLastSelection(editor);
-
+    const selection = $getSelection();
     const listItemsInSelection = getListItemsForSelection(selection);
     const isListSelection = listItemsInSelection.length > 0 && !listItemsInSelection.includes(null);
 
     if (isListSelection) {
+        const alteredListItems = [];
         const listItems = $reduceDedupeListItems(listItemsInSelection);
         if (change > 0) {
             for (const listItem of listItems) {
-                $nestListItem(listItem);
+                alteredListItems.push($nestListItem(listItem));
             }
         } else if (change < 0) {
             for (const listItem of [...listItems].reverse()) {
-                $unnestListItem(listItem);
+                alteredListItems.push($unnestListItem(listItem));
             }
+            alteredListItems.reverse();
         }
 
-        $selectNodes(listItems);
+        $selectNodes(alteredListItems);
         return;
     }