From 6b03b7e7a5b47b52ea5d5b6aae2efb945f4dd686 Mon Sep 17 00:00:00 2001 From: Roger Rehnelt Date: Sat, 3 Oct 2026 15:23:59 +0200 Subject: GARAN: Label per Tipp und Tastatur aufklappbar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der erste Tipp oder der Tastaturfokus zeigt das Label, ein zweiter Tipp folgt dem Link zur EU-Seite; Escape oder ein Tipp daneben schließt es. Co-Authored-By: Claude Opus 5.5 --- views/js/frontend.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'views/js') diff --git a/views/js/frontend.js b/views/js/frontend.js index d622596..6663ea5 100644 --- a/views/js/frontend.js +++ b/views/js/frontend.js @@ -309,3 +309,48 @@ if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', wpsg_garanTooltipPosition); else wpsg_garanTooltipPosition(); window.addEventListener('resize', wpsg_garanTooltipPosition); jQuery(document).ajaxComplete(wpsg_garanTooltipPosition); + + /** + * GARAN-Label per Tipp und Tastatur (K69) + * + * Der erste Tipp klappt das Label auf, der zweite folgt dem Link zur EU-Seite. Maus: Darüberfahren zeigt es, + * Klick folgt dem Link. Tastatur: Der Fokus zeigt es (CSS :focus-visible), Enter folgt dem Link. + * Escape oder ein Tipp daneben schließt es. + */ + var wpsg_garanPointer = ''; + + function wpsg_garanSet(label, open, dismissed) { + + label.classList.toggle('is-open', open); + label.classList.toggle('is-dismissed', !!dismissed); + label.setAttribute('aria-expanded', ((open)?'true':'false')); + + } // function wpsg_garanSet(label, open, dismissed) + + document.addEventListener('pointerdown', function(event) { wpsg_garanPointer = event.pointerType; }, true); + document.addEventListener('keydown', function(event) { + + wpsg_garanPointer = ''; + + if (event.key === 'Escape') document.querySelectorAll('a.wpsg_product_garan').forEach(function(label) { if (label.classList.contains('is-open') || label === document.activeElement) wpsg_garanSet(label, false, true); } ); + + }, true); + + document.addEventListener('click', function(event) { + + var label = event.target.closest('a.wpsg_product_garan'); + + document.querySelectorAll('a.wpsg_product_garan.is-open').forEach(function(open) { if (open !== label) wpsg_garanSet(open, false); } ); + + if (!label || (wpsg_garanPointer !== 'touch' && wpsg_garanPointer !== 'pen')) return; + + if (!label.classList.contains('is-open')) { + + event.preventDefault(); + wpsg_garanSet(label, true); + + } + + } ); + + document.addEventListener('focusout', function(event) { if (event.target.matches && event.target.matches('a.wpsg_product_garan')) event.target.classList.remove('is-dismissed'); } ); -- cgit v1.2.3