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 one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -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
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -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))
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
shared/static/wasm/sx_browser.bc.wasm.assets/sx-afdcb8e8.wasm
Normal file
BIN
shared/static/wasm/sx_browser.bc.wasm.assets/sx-afdcb8e8.wasm
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1792,7 +1792,7 @@
|
||||
blake2_js_for_wasm_create: blake2_js_for_wasm_create};
|
||||
}
|
||||
(globalThis))
|
||||
({"link":[["runtime-0db9b496",0],["prelude-d7e4b000",0],["stdlib-23ce0836",[]],["sx-80621fb4",[2]],["jsoo_runtime-f96b44a8",[2]],["js_of_ocaml-651f6707",[2,4]],["dune__exe__Sx_browser-8ae21d0a",[2,3,5]],["std_exit-10fb8830",[2]],["start-80fdb768",0]],"generated":(b=>{var
|
||||
({"link":[["runtime-0db9b496",0],["prelude-d7e4b000",0],["stdlib-23ce0836",[]],["sx-afdcb8e8",[2]],["jsoo_runtime-f96b44a8",[2]],["js_of_ocaml-651f6707",[2,4]],["dune__exe__Sx_browser-8ae21d0a",[2,3,5]],["std_exit-10fb8830",[2]],["start-80fdb768",0]],"generated":(b=>{var
|
||||
c=b,a=b?.module?.export||b;return{"env":{"caml_ba_kind_of_typed_array":()=>{throw new
|
||||
Error("caml_ba_kind_of_typed_array not implemented")},"caml_exn_with_js_backtrace":()=>{throw new
|
||||
Error("caml_exn_with_js_backtrace not implemented")},"caml_int64_create_lo_mi_hi":()=>{throw new
|
||||
|
||||
Reference in New Issue
Block a user