|
@@ -17,21 +17,51 @@
|
|
|
/>
|
|
/>
|
|
|
<script>
|
|
<script>
|
|
|
(function () {
|
|
(function () {
|
|
|
|
|
+ function isEmbedMode() {
|
|
|
|
|
+ return (
|
|
|
|
|
+ (window.location.hash || "").indexOf("#embed") !== -1
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
function syncEmbedClassFromHash() {
|
|
function syncEmbedClassFromHash() {
|
|
|
- const isEmbed =
|
|
|
|
|
- (window.location.hash || "").indexOf("#embed") !== -1;
|
|
|
|
|
|
|
+ document.body.classList.toggle("embed", isEmbedMode());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function wireEmbedPreservingHomeSearchSubmit() {
|
|
|
|
|
+ const form = document.querySelector(
|
|
|
|
|
+ "form.home-search-form",
|
|
|
|
|
+ );
|
|
|
|
|
+ if (!form) return;
|
|
|
|
|
+
|
|
|
|
|
+ form.addEventListener("submit", function (ev) {
|
|
|
|
|
+ if (!isEmbedMode()) return;
|
|
|
|
|
|
|
|
- // Toggle a class on <body>. CSS handles the layout changes.
|
|
|
|
|
- document.body.classList.toggle("embed", isEmbed);
|
|
|
|
|
|
|
+ // Default GET form submission omits the fragment.
|
|
|
|
|
+ // In embed mode, submit by navigating to action + querystring + #embed.
|
|
|
|
|
+ ev.preventDefault();
|
|
|
|
|
+
|
|
|
|
|
+ const actionAttr =
|
|
|
|
|
+ form.getAttribute("action") || "/search";
|
|
|
|
|
+ const actionUrl = new URL(
|
|
|
|
|
+ actionAttr,
|
|
|
|
|
+ window.location.origin,
|
|
|
|
|
+ );
|
|
|
|
|
+ const params = new URLSearchParams(new FormData(form));
|
|
|
|
|
+ actionUrl.search = params.toString();
|
|
|
|
|
+
|
|
|
|
|
+ window.location.assign(actionUrl.toString() + "#embed");
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function init() {
|
|
|
|
|
+ syncEmbedClassFromHash();
|
|
|
|
|
+ wireEmbedPreservingHomeSearchSubmit();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (document.readyState === "loading") {
|
|
if (document.readyState === "loading") {
|
|
|
- document.addEventListener(
|
|
|
|
|
- "DOMContentLoaded",
|
|
|
|
|
- syncEmbedClassFromHash,
|
|
|
|
|
- );
|
|
|
|
|
|
|
+ document.addEventListener("DOMContentLoaded", init);
|
|
|
} else {
|
|
} else {
|
|
|
- syncEmbedClassFromHash();
|
|
|
|
|
|
|
+ init();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
window.addEventListener("hashchange", syncEmbedClassFromHash);
|
|
window.addEventListener("hashchange", syncEmbedClassFromHash);
|