fix(js): reload stale popstate partials

When back/forward navigation receives an incompatible or unusable partial response, reload the current URL instead of leaving the previous UI stale.

req: page_swap/005

req: page_swap/006

req: runtime/004
This commit is contained in:
slhx agent
2026-06-01 20:08:17 +02:00
parent 8d1bdaec08
commit 28d1856dd7
2 changed files with 13 additions and 3 deletions
+3 -2
View File
@@ -180,8 +180,9 @@
headers: { "X-SLHX-Partial": "1", "Accept": "text/html" },
credentials: "same-origin",
});
if (!await applyResponse(response, root) && mode !== "none") {
location.href = href;
if (!await applyResponse(response, root)) {
if (mode === "none") location.reload();
else location.href = href;
return;
}
if (mode === "push") history.pushState({ slhx: true }, "", href);
+10 -1
View File
@@ -145,7 +145,16 @@ fn runtime_exposes_page_swap_hooks() {
assert!(source.contains("x-slhx-title"));
assert!(source.contains("x-slhx-fingerprint"));
assert!(source.contains("slhx:missing-content-slot"));
assert!(source.contains("location.href = href"));
assert!(source.contains("else location.href = href"));
}
#[test]
fn runtime_popstate_failed_partials_reload_instead_of_stale_ui() {
// req: page_swap/005 req: page_swap/006 req: runtime/004
let source = slhx_js::RUNTIME_JS;
assert!(source.contains("if (mode === \"none\") location.reload();"));
assert!(source.contains("if (root) navigateUrl(location.href, root, \"none\")"));
}
#[test]