]> BookStack Code Mirror - bookstack/blobdiff - resources/js/wysiwyg/nodes/custom-list.ts
Search: Added exact/filter/tag term negation support
[bookstack] / resources / js / wysiwyg / nodes / custom-list.ts
index a6c4739990552d58fda1155bd2fd4ddf5626a328..4b05fa62e255860e3e2d644f0262b6c3c38fe45e 100644 (file)
@@ -1,12 +1,12 @@
 import {
     DOMConversionFn,
-    DOMConversionMap,
+    DOMConversionMap, EditorConfig,
     LexicalNode,
     Spread
 } from "lexical";
-import {EditorConfig} from "lexical/LexicalEditor";
 import {$isListItemNode, ListItemNode, ListNode, ListType, SerializedListNode} from "@lexical/list";
 import {$createCustomListItemNode} from "./custom-list-item";
+import {extractDirectionFromElement} from "./_common";
 
 
 export type SerializedCustomListNode = Spread<{
@@ -33,6 +33,7 @@ export class CustomListNode extends ListNode {
     static clone(node: CustomListNode) {
         const newNode = new CustomListNode(node.__listType, node.__start, node.__key);
         newNode.__id = node.__id;
+        newNode.__dir = node.__dir;
         return newNode;
     }
 
@@ -42,9 +43,18 @@ export class CustomListNode extends ListNode {
             dom.setAttribute('id', this.__id);
         }
 
+        if (this.__dir) {
+            dom.setAttribute('dir', this.__dir);
+        }
+
         return dom;
     }
 
+    updateDOM(prevNode: ListNode, dom: HTMLElement, config: EditorConfig): boolean {
+        return super.updateDOM(prevNode, dom, config) ||
+            prevNode.__dir !== this.__dir;
+    }
+
     exportJSON(): SerializedCustomListNode {
         return {
             ...super.exportJSON(),
@@ -57,6 +67,7 @@ export class CustomListNode extends ListNode {
     static importJSON(serializedNode: SerializedCustomListNode): CustomListNode {
         const node = $createCustomListNode(serializedNode.listType);
         node.setId(serializedNode.id);
+        node.setDirection(serializedNode.direction);
         return node;
     }
 
@@ -69,6 +80,10 @@ export class CustomListNode extends ListNode {
                 (baseResult.node as CustomListNode).setId(element.id);
             }
 
+            if (element.dir && baseResult?.node) {
+                (baseResult.node as CustomListNode).setDirection(extractDirectionFromElement(element));
+            }
+
             if (baseResult) {
                 baseResult.after = $normalizeChildren;
             }