SPA navigation, page component refactors, WASM rebuild
Refactor page components (docs, examples, specs, reference, layouts) and adapters (adapter-sx, boot-helpers, orchestration) across sx/ and web/ directories. Add Playwright SPA navigation tests. Rebuild WASM kernel with updated bytecode. Add OCaml primitives for request handling. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -508,18 +508,17 @@
|
||||
boost-el
|
||||
(let
|
||||
((attr (dom-get-attr boost-el "sx-boost")))
|
||||
(if (and attr (not (= attr "true"))) attr "#main-panel"))
|
||||
"#main-panel")))
|
||||
(if (and attr (not (= attr "true"))) attr "#sx-content"))
|
||||
"#sx-content")))
|
||||
(if
|
||||
(try-client-route (url-pathname href) target-sel)
|
||||
(do (browser-push-state nil "" href) (browser-scroll-to 0 0))
|
||||
(do
|
||||
(when
|
||||
(not (dom-has-attr? link "sx-get"))
|
||||
(dom-set-attr link "sx-get" href))
|
||||
(when
|
||||
(not (dom-has-attr? link "sx-push-url"))
|
||||
(dom-set-attr link "sx-push-url" "true"))
|
||||
(log-info (str "sx:route server fetch " href))
|
||||
(dom-set-attr link "sx-get" href)
|
||||
(dom-set-attr link "sx-target" target-sel)
|
||||
(dom-set-attr link "sx-select" target-sel)
|
||||
(dom-set-attr link "sx-push-url" "true")
|
||||
(execute-request link nil nil)))))))))
|
||||
|
||||
(define sw-post-message (fn (msg) nil))
|
||||
@@ -604,7 +603,7 @@
|
||||
(fn
|
||||
(expr)
|
||||
(let
|
||||
((result (render-to-dom expr (get-render-env nil) nil)))
|
||||
((result (try-catch (fn () (render-to-dom expr (get-render-env nil) nil)) (fn (err) (log-error (str "sx-render: " err)) (let ((el (dom-create-element "div" nil))) (dom-set-attr el "class" "sx-render-error") (dom-set-attr el "style" "color:red;font-size:0.875rem;padding:0.5rem;border:1px solid red;border-radius:4px;margin:0.25rem 0;") (dom-set-text-content el (str "Render error: " err)) el)))))
|
||||
(when result (dom-append frag result))))
|
||||
exprs)
|
||||
(scope-pop! "sx-render-markers")
|
||||
@@ -630,7 +629,15 @@
|
||||
(and text (> (len text) 0))
|
||||
(let
|
||||
((exprs (sx-parse text)))
|
||||
(for-each (fn (expr) (cek-eval expr)) exprs))))))
|
||||
(for-each
|
||||
(fn
|
||||
(expr)
|
||||
(try-catch
|
||||
(fn () (cek-eval expr))
|
||||
(fn
|
||||
(err)
|
||||
(log-error (str "sx-process-scripts: " err)))))
|
||||
exprs))))))
|
||||
scripts))))
|
||||
|
||||
(define
|
||||
@@ -641,7 +648,10 @@
|
||||
selector
|
||||
(let
|
||||
((selected (dom-query container selector)))
|
||||
(if selected selected (children-to-fragment container)))
|
||||
(if
|
||||
selected
|
||||
(children-to-fragment selected)
|
||||
(children-to-fragment container)))
|
||||
(children-to-fragment container))))
|
||||
|
||||
(define
|
||||
|
||||
@@ -282,9 +282,11 @@
|
||||
(fn
|
||||
(t oob (s :as string))
|
||||
(dispose-islands-in t)
|
||||
(swap-dom-nodes t oob s)
|
||||
(sx-hydrate t)
|
||||
(process-elements t)))
|
||||
(swap-dom-nodes
|
||||
t
|
||||
(if (= s "innerHTML") (children-to-fragment oob) oob)
|
||||
s)
|
||||
(post-swap t)))
|
||||
(let
|
||||
((select-sel (dom-get-attr el "sx-select"))
|
||||
(content
|
||||
@@ -324,20 +326,31 @@
|
||||
(if
|
||||
select-sel
|
||||
(let
|
||||
((html (select-html-from-doc doc select-sel)))
|
||||
(with-transition
|
||||
use-transition
|
||||
((container (dom-create-element "div" nil)))
|
||||
(dom-set-inner-html container (dom-body-inner-html doc))
|
||||
(process-oob-swaps
|
||||
container
|
||||
(fn
|
||||
()
|
||||
(let
|
||||
((swap-root (swap-html-string target html swap-style)))
|
||||
(log-info
|
||||
(str
|
||||
"swap-root: "
|
||||
(if swap-root (dom-tag-name swap-root) "nil")
|
||||
" target: "
|
||||
(dom-tag-name target)))
|
||||
(post-swap (or swap-root target))))))
|
||||
(t oob (s :as string))
|
||||
(dispose-islands-in t)
|
||||
(swap-dom-nodes t oob s)
|
||||
(post-swap t)))
|
||||
(hoist-head-elements container)
|
||||
(let
|
||||
((html (select-from-container container select-sel)))
|
||||
(with-transition
|
||||
use-transition
|
||||
(fn
|
||||
()
|
||||
(let
|
||||
((swap-root (swap-dom-nodes target html swap-style)))
|
||||
(log-info
|
||||
(str
|
||||
"swap-root: "
|
||||
(if swap-root (dom-tag-name swap-root) "nil")
|
||||
" target: "
|
||||
(dom-tag-name target)))
|
||||
(post-swap (or swap-root target)))))))
|
||||
(let
|
||||
((container (dom-create-element "div" nil)))
|
||||
(dom-set-inner-html container (dom-body-inner-html doc))
|
||||
|
||||
Reference in New Issue
Block a user