;; Extension — deep tree editing (update/delete/insert into nested sections). (st-bootstrap-classes!) (content/bootstrap!) (content-bootstrap-section!) ;; doc: top / sec[ a, inner[ b ] ] (define d (doc-append (doc-append (doc-empty "d") (mk-text "top" "T")) (mk-section "sec" (list (mk-text "a" "A") (mk-section "inner" (list (mk-text "b" "B"))))))) ;; ── deep-update a nested block ── (define d1 (doc-deep-update d "b" "text" "Edited")) (content-test "deep-update nested" (str (blk-send (doc-deep-find d1 "b") "text")) "Edited") (content-test "deep-update immutable" (str (blk-send (doc-deep-find d "b") "text")) "B") (content-test "deep-update top-level" (str (blk-send (doc-deep-find (doc-deep-update d "top" "text" "X") "top") "text")) "X") (content-test "deep-update mid-section" (str (blk-send (doc-deep-find (doc-deep-update d "a" "text" "AA") "a") "text")) "AA") (content-test "deep-update preserves tree" (doc-tree-ids d1) (doc-tree-ids d)) ;; ── deep-replace ── (define d2 (doc-deep-replace d "b" (mk-heading "b" 3 "H"))) (content-test "deep-replace type" (blk-type (doc-deep-find d2 "b")) "heading") (content-test "deep-replace render" (asHTML d2) "
T
A
T
A
B
C