From 4351bb10fb16122bb75a43a339af513fa7732812 Mon Sep 17 00:00:00 2001 From: ZhenShuo Leo <98386542+ZhenShuo2021@users.noreply.github.com> Date: Tue, 22 Jul 2025 01:47:17 +0800 Subject: [PATCH] refactor: remove onclick in a11y --- assets/js/a11y.js | 44 ++++++++++++++++++------------ layouts/partials/header/basic.html | 3 +- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/assets/js/a11y.js b/assets/js/a11y.js index 15c64892..f49c78fe 100644 --- a/assets/js/a11y.js +++ b/assets/js/a11y.js @@ -68,7 +68,7 @@ const updateA11ySetting = (key, value) => { applyA11ySettings(); }; -window.toggleA11yPanel = function (prefix = "") { +const toggleA11yPanel = (prefix = "") => { const panel = document.getElementById(`${prefix}a11y-panel`); const overlay = document.getElementById(`${prefix}a11y-overlay`); const button = document.getElementById(`${prefix}a11y-toggle`); @@ -86,24 +86,47 @@ window.toggleA11yPanel = function (prefix = "") { } }; -window.initA11yPanel = function (prefix = "") { +const initA11yPanel = (prefix = "") => { const settings = getA11ySettings(); const checkboxBlur = document.getElementById(`${prefix}disable-blur`); const checkboxImages = document.getElementById(`${prefix}disable-images`); const checkboxUnderline = document.getElementById(`${prefix}underline-links`); const fontSizeSelect = document.getElementById(`${prefix}font-size-select`); - if (!checkboxBlur || !checkboxImages || !checkboxUnderline || !fontSizeSelect) { + const toggleButton = document.getElementById(`${prefix}a11y-toggle`); + const closeButton = document.getElementById(`${prefix}a11y-close`); + const overlay = document.getElementById(`${prefix}a11y-overlay`); + + if ( + !checkboxBlur || + !checkboxImages || + !checkboxUnderline || + !fontSizeSelect || + !toggleButton || + !closeButton || + !overlay + ) { console.warn(`One or more a11y elements not found for prefix: ${prefix}`); return; } + checkboxBlur.checked = settings.disableBlur; checkboxImages.checked = settings.disableImages; fontSizeSelect.value = settings.fontSize; checkboxUnderline.checked = settings.underlineLinks; + checkboxBlur.addEventListener("change", (e) => updateA11ySetting("disableBlur", e.target.checked)); checkboxImages.addEventListener("change", (e) => updateA11ySetting("disableImages", e.target.checked)); fontSizeSelect.addEventListener("change", (e) => updateA11ySetting("fontSize", e.target.value)); checkboxUnderline.addEventListener("change", (e) => updateA11ySetting("underlineLinks", e.target.checked)); + + toggleButton.addEventListener("click", () => toggleA11yPanel(prefix)); + closeButton.addEventListener("click", () => toggleA11yPanel(prefix)); + overlay.addEventListener("click", (e) => { + if (e.target === overlay) { + toggleA11yPanel(prefix); + } + }); + document.querySelectorAll(`.ios-toggle${prefix ? `[id^="${prefix}"]` : ""}`).forEach((toggle) => { const checkbox = toggle.querySelector('input[type="checkbox"]'); if (!checkbox) return; @@ -117,19 +140,6 @@ window.initA11yPanel = function (prefix = "") { } }); }); - const overlay = document.getElementById(`${prefix}a11y-overlay`); - const button = document.getElementById(`${prefix}a11y-toggle`); - if (overlay && button) { - document.addEventListener("click", (e) => { - if (e.target === overlay) { - overlay.classList.add("hidden"); - const panel = document.getElementById(`${prefix}a11y-panel`); - if (panel) panel.classList.add("hidden"); - button.setAttribute("aria-pressed", "false"); - button.setAttribute("aria-expanded", "false"); - } - }); - } }; document.querySelectorAll("script[data-target-id]").forEach((script) => { @@ -144,6 +154,6 @@ document.addEventListener("DOMContentLoaded", () => { const allPanels = document.querySelectorAll('[id$="a11y-panel"]'); allPanels.forEach((panel) => { const prefix = panel.id.replace("a11y-panel", ""); - window.initA11yPanel(prefix); + initA11yPanel(prefix); }); }); diff --git a/layouts/partials/header/basic.html b/layouts/partials/header/basic.html index 942a6b41..4b1f037c 100644 --- a/layouts/partials/header/basic.html +++ b/layouts/partials/header/basic.html @@ -168,7 +168,6 @@ aria-expanded="false" type="button" class="text-base hover:text-primary-600 dark:hover:text-primary-400" - onclick="toggleA11yPanel('{{ $prefix }}')" role="button" aria-pressed="false"> {{ partial "icon.html" "a11y" }} @@ -189,7 +188,7 @@ Accessibility settings