From 96dce21d9538a894ced9ddb4da7e88854a36c2f1 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Sat, 18 Oct 2025 17:11:55 +0200 Subject: [PATCH 1/4] fix: Allow closing the search via the search button --- assets/js/search.js | 50 +++++++++++++++++++++-------- i18n/de.yaml | 4 ++- i18n/en.yaml | 4 ++- i18n/fr.yaml | 4 ++- layouts/partials/search-button.html | 6 ++-- 5 files changed, 50 insertions(+), 18 deletions(-) diff --git a/assets/js/search.js b/assets/js/search.js index 82331109..5767cee2 100644 --- a/assets/js/search.js +++ b/assets/js/search.js @@ -38,10 +38,28 @@ const initSearch = () => { const searchElement = search.querySelector("input"); + const updateSearchButtonLabels = (isOpen) => { + searchButtons.forEach((button) => { + const openLabel = button.dataset.labelOpen; + const closeLabel = button.dataset.labelClose; + const label = isOpen ? closeLabel : openLabel; + button.setAttribute("aria-label", label); + button.setAttribute("title", label); + }); + }; + const closeSearch = () => { search.querySelector(".pagefind-ui__search-clear").click(); overlay.classList.remove("overlay--show", "overlay--show-lv5"); search.classList.remove("o-search--show"); + updateSearchButtonLabels(false); + }; + + const openSearch = () => { + overlay.classList.add("overlay--show", "overlay--show-lv5"); + searchElement.focus(); + search.scrollIntoView({ behavior: "smooth", block: "start" }); + updateSearchButtonLabels(true); }; // Scroll to search on click @@ -52,35 +70,41 @@ const initSearch = () => { }); } - function showSearchOnContentPage() { + function toggleSearchOnContentPage() { + if (search.classList.contains("o-search--show")) { + closeSearch(); + return; + } + search.classList.add("o-search--show"); - overlay.classList.add("overlay--show", "overlay--show-lv5"); - searchElement.focus(); - search.scrollIntoView({ behavior: "smooth", block: "start" }); + openSearch(); } - function showSearchOnStartPage() { - overlay.classList.add("overlay--show", "overlay--show-lv5"); - searchElement.focus(); - search.scrollIntoView({ behavior: "smooth", block: "start" }); + function toggleSearchOnStartPage() { + if (overlay.classList.contains("overlay--show")) { + closeSearch(); + return; + } + + openSearch(); } searchButtons.forEach((button) => { if (isHome) { - button.addEventListener("click", showSearchOnStartPage); + button.addEventListener("click", toggleSearchOnStartPage); } else { - button.addEventListener("click", showSearchOnContentPage); + button.addEventListener("click", toggleSearchOnContentPage); } }); - // Open search on Ctrl + K or Cmd + K + // Toggle search on Ctrl + K or Cmd + K document.addEventListener("keydown", (e) => { if ((e.ctrlKey || e.metaKey) && e.key === "k") { e.preventDefault(); if (isHome) { - showSearchOnStartPage(); + toggleSearchOnStartPage(); } else { - showSearchOnContentPage(); + toggleSearchOnContentPage(); } } }); diff --git a/i18n/de.yaml b/i18n/de.yaml index b8d97ce8..ea8efe6c 100644 --- a/i18n/de.yaml +++ b/i18n/de.yaml @@ -68,7 +68,9 @@ menu: dropdown-label: Verfügbare Betreiber label: Betreiber title: Betreiber-Dropdown öffnen - search: Suche öffnen + search: + close: Suche schließen + open: Suche öffnen theme: switch-to-auto: Zu automatischem Modus wechseln switch-to-dark: Zu dunklem Modus wechseln diff --git a/i18n/en.yaml b/i18n/en.yaml index 9f6f1caf..c55f8f6e 100644 --- a/i18n/en.yaml +++ b/i18n/en.yaml @@ -67,7 +67,9 @@ menu: dropdown-label: Available operators label: Operators title: Open Operator-Dropdown - search: Open search + search: + close: Close search + open: Open search theme: switch-to-auto: Switch to auto mode switch-to-dark: Switch to dark mode diff --git a/i18n/fr.yaml b/i18n/fr.yaml index 73e25e2d..aa3fd665 100644 --- a/i18n/fr.yaml +++ b/i18n/fr.yaml @@ -67,7 +67,9 @@ menu: dropdown-label: Opérateurs disponibles label: Opérateurs title: Ouvrir la liste déroulante de l'opérateur - search: Ouvrir la recherche + search: + close: Fermer la recherche + open: Ouvrir la recherche theme: switch-to-auto: Passer en mode automatique switch-to-dark: Passer en mode sombre diff --git a/layouts/partials/search-button.html b/layouts/partials/search-button.html index b3b5aa09..ed7038af 100644 --- a/layouts/partials/search-button.html +++ b/layouts/partials/search-button.html @@ -1,7 +1,9 @@