banjado Schlüsselkasten

banjado Schlüsselkasten

(function () { "use strict"; function getRoot(el) { // Wir suchen den nächstliegenden äußeren Block, der sowohl Controls als auch Filter enthält return el.closest(".list-controls-inner") || document; } function findFilterToggle(root) { return root.querySelector('a.filter-toggle[href^="#filter-collapse_"]'); } function findFilterCollapse(root, toggle) { if (!toggle) return null; var href = toggle.getAttribute("href"); if (!href) return null; try { return root.querySelector(href); } catch (e) { return null; } } function ensurePlaceholder(root) { var ph = root.querySelector(".zl-controls-placeholder"); if (!ph) { ph = document.createElement("div"); ph.className = "zl-controls-placeholder"; // Placeholder direkt vor dem Filter Toggle, damit die Reihenfolge erhalten bleibt var toggle = findFilterToggle(root); if (toggle && toggle.parentNode) { toggle.parentNode.insertBefore(ph, toggle); } else { root.appendChild(ph); } } return ph; } function ensureMobileWrap(collapse) { var wrap = collapse.querySelector(".zl-mobile-controls"); if (!wrap) { wrap = document.createElement("div"); wrap.className = "zl-mobile-controls"; // Ganz oben in den Collapse Inhalt collapse.insertBefore(wrap, collapse.firstChild); } return wrap; } function moveToMobile(root) { var itemsWidget = root.querySelector(".widget-items-per-page"); var sortingWidget = root.querySelector(".widget-item-sorting"); var toggle = findFilterToggle(root); var collapse = findFilterCollapse(root, toggle); if (!itemsWidget || !sortingWidget || !collapse) return; var placeholder = ensurePlaceholder(root); var wrap = ensureMobileWrap(collapse); // Nur umhängen, wenn nicht bereits dort if (itemsWidget.parentNode !== wrap) wrap.appendChild(itemsWidget); if (sortingWidget.parentNode !== wrap) wrap.appendChild(sortingWidget); // Placeholder merken, damit wir später exakt zurück können itemsWidget.dataset.zlReturn = "1"; sortingWidget.dataset.zlReturn = "1"; placeholder.dataset.zlHasWidgets = "1"; } function moveBackDesktop(root) { var placeholder = root.querySelector(".zl-controls-placeholder"); if (!placeholder) return; var moved = root.querySelectorAll('.widget-items-per-page[data-zl-return="1"], .widget-item-sorting[data-zl-return="1"]'); if (!moved.length) return; // Zurück an den Placeholder moved.forEach(function (node) { placeholder.parentNode.insertBefore(node, placeholder); delete node.dataset.zlReturn; }); } function apply() { var any = document.querySelector(".list-controls-inner"); if (!any) return; // Es kann mehrere Listen geben, wir behandeln alle document.querySelectorAll(".list-controls-inner").forEach(function (inner) { var root = getRoot(inner); if (window.matchMedia("(max-width: 767.98px)").matches) { moveToMobile(root); } else { moveBackDesktop(root); } }); } // initial if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", apply); } else { apply(); } // on resize window.addEventListener("resize", function () { // leicht entprellen clearTimeout(window.__zlResizeTimer); window.__zlResizeTimer = setTimeout(apply, 120); }); // falls Plenty dynamisch nachrendert var mo = new MutationObserver(function () { apply(); }); mo.observe(document.documentElement, { childList: true, subtree: true }); })();
document.addEventListener("DOMContentLoaded", function () { if (new URLSearchParams(window.location.search).has("page")) { document.body.classList.add("has-page-param"); } });