From 552dff8ac0c042d7f3fcdda4c3e21c613d029509 Mon Sep 17 00:00:00 2001 From: immortal71 Date: Wed, 19 Nov 2025 22:10:47 -0800 Subject: [PATCH 1/6] DOC: fix mobile menu --- docs/source/_static/css/mobile-menu-fix.css | 17 ++++++++++++ docs/source/_static/js/mobile-menu-fix.js | 30 +++++++++++++++++++++ docs/source/conf.py | 11 +++++++- 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 docs/source/_static/css/mobile-menu-fix.css create mode 100644 docs/source/_static/js/mobile-menu-fix.js diff --git a/docs/source/_static/css/mobile-menu-fix.css b/docs/source/_static/css/mobile-menu-fix.css new file mode 100644 index 0000000000..a2b71bb3d7 --- /dev/null +++ b/docs/source/_static/css/mobile-menu-fix.css @@ -0,0 +1,17 @@ +/* Mobile menu fix: ensure overlay is clickable on iOS */ + +/* Raise the stacked navigation elements above possible overlays */ +.primary-toggle, +.secondary-toggle, +.navbar, +.navbar-collapse, +#pst-primary-sidebar-modal, +#pst-secondary-sidebar-modal { + z-index: 10000 !important; + pointer-events: auto !important; +} + +/* Ensure the modal overlay allows pointer events to reach menu links */ +.pst-modal-backdrop { + pointer-events: auto !important; +} diff --git a/docs/source/_static/js/mobile-menu-fix.js b/docs/source/_static/js/mobile-menu-fix.js new file mode 100644 index 0000000000..6e75d9e74b --- /dev/null +++ b/docs/source/_static/js/mobile-menu-fix.js @@ -0,0 +1,30 @@ +// Mobile menu fix: make touch interactions on mobile (iOS/Safari) reliably trigger +// the mobile navigation toggle. Minimal, defensive enhancement. +document.addEventListener('DOMContentLoaded', function () { + try { + const selectors = [ + '.primary-toggle', + '.secondary-toggle', + '[data-toggle="collapse"]', + '[aria-controls][aria-expanded]' + ].join(','); + const controls = Array.from(document.querySelectorAll(selectors)); + controls.forEach(el => { + if (el.__pymc_touchbound) return; + el.__pymc_touchbound = true; + el.addEventListener('touchstart', function (e) { + // iOS sometimes doesn't synthesize click events for transformed + // elements or elements in certain stacking contexts. Best-effort + // bridge: prevent default then dispatch a MouseEvent click. + try { + e.preventDefault(); + this.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true })); + } catch (err) { + // ignore errors + } + }, { passive: false }); + }); + } catch (err) { + // swallow errors to avoid breaking docs + } +}); diff --git a/docs/source/conf.py b/docs/source/conf.py index 5b1ec74400..bf7c5b8e6e 100755 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -390,7 +390,16 @@ def setup(app): # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["../logos"] +html_static_path = [ + "../logos", + "_static", +] +html_css_files = [ + "css/mobile-menu-fix.css", +] +html_js_files = [ + "js/mobile-menu-fix.js", +] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied From 94e45d72efb0c7fc470b2b6f136e5892c50d31f3 Mon Sep 17 00:00:00 2001 From: Aashish kharel Date: Wed, 19 Nov 2025 23:14:06 -0800 Subject: [PATCH 2/6] Update docs/source/_static/js/mobile-menu-fix.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/source/_static/js/mobile-menu-fix.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/_static/js/mobile-menu-fix.js b/docs/source/_static/js/mobile-menu-fix.js index 6e75d9e74b..5f67db1a11 100644 --- a/docs/source/_static/js/mobile-menu-fix.js +++ b/docs/source/_static/js/mobile-menu-fix.js @@ -17,7 +17,7 @@ document.addEventListener('DOMContentLoaded', function () { // elements or elements in certain stacking contexts. Best-effort // bridge: prevent default then dispatch a MouseEvent click. try { - e.preventDefault(); + // e.preventDefault(); // Removed to allow scrolling on touch devices this.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true })); } catch (err) { // ignore errors From d19dd974ed9edd8672e1f860072bbb7392ca11e5 Mon Sep 17 00:00:00 2001 From: Aashish kharel Date: Wed, 19 Nov 2025 23:14:20 -0800 Subject: [PATCH 3/6] Update docs/source/_static/js/mobile-menu-fix.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/source/_static/js/mobile-menu-fix.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/_static/js/mobile-menu-fix.js b/docs/source/_static/js/mobile-menu-fix.js index 5f67db1a11..a879e58556 100644 --- a/docs/source/_static/js/mobile-menu-fix.js +++ b/docs/source/_static/js/mobile-menu-fix.js @@ -6,7 +6,7 @@ document.addEventListener('DOMContentLoaded', function () { '.primary-toggle', '.secondary-toggle', '[data-toggle="collapse"]', - '[aria-controls][aria-expanded]' + '.navbar [aria-controls][aria-expanded]' ].join(','); const controls = Array.from(document.querySelectorAll(selectors)); controls.forEach(el => { From 99cd2e3014df32109a4fccb439fffc3b81f039bd Mon Sep 17 00:00:00 2001 From: Aashish kharel Date: Wed, 19 Nov 2025 23:14:39 -0800 Subject: [PATCH 4/6] Update docs/source/_static/css/mobile-menu-fix.css Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/source/_static/css/mobile-menu-fix.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/_static/css/mobile-menu-fix.css b/docs/source/_static/css/mobile-menu-fix.css index a2b71bb3d7..2145b265b3 100644 --- a/docs/source/_static/css/mobile-menu-fix.css +++ b/docs/source/_static/css/mobile-menu-fix.css @@ -3,8 +3,8 @@ /* Raise the stacked navigation elements above possible overlays */ .primary-toggle, .secondary-toggle, -.navbar, -.navbar-collapse, +.mobile-menu-container .navbar, +.mobile-menu-container .navbar-collapse, #pst-primary-sidebar-modal, #pst-secondary-sidebar-modal { z-index: 10000 !important; From 19d07b4bfa77bf3c6910ea0013671b3b961d205c Mon Sep 17 00:00:00 2001 From: Aashish kharel Date: Wed, 19 Nov 2025 23:14:58 -0800 Subject: [PATCH 5/6] Update docs/source/_static/css/mobile-menu-fix.css Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/source/_static/css/mobile-menu-fix.css | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/source/_static/css/mobile-menu-fix.css b/docs/source/_static/css/mobile-menu-fix.css index 2145b265b3..1c4947736a 100644 --- a/docs/source/_static/css/mobile-menu-fix.css +++ b/docs/source/_static/css/mobile-menu-fix.css @@ -11,7 +11,15 @@ pointer-events: auto !important; } -/* Ensure the modal overlay allows pointer events to reach menu links */ +/* + * Ensure the modal overlay allows pointer events to reach menu links. + * Both `pointer-events: auto` and a high `z-index` are necessary because: + * - Some themes/modal implementations use overlays that block pointer events or stack above menu links, + * making them unclickable (especially on iOS). + * - This rule ensures that the backdrop does not block interaction with menu links, + * and that the stacking order is correct so links remain accessible. + * If the theme/modal implementation changes, review whether this workaround is still needed. + */ .pst-modal-backdrop { pointer-events: auto !important; } From 8e42bd3bc41011dd486b2c1c82b6094d70d6b077 Mon Sep 17 00:00:00 2001 From: Aashish kharel Date: Wed, 19 Nov 2025 23:15:20 -0800 Subject: [PATCH 6/6] Update docs/source/_static/css/mobile-menu-fix.css Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/source/_static/css/mobile-menu-fix.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/_static/css/mobile-menu-fix.css b/docs/source/_static/css/mobile-menu-fix.css index 1c4947736a..92a78ddcb3 100644 --- a/docs/source/_static/css/mobile-menu-fix.css +++ b/docs/source/_static/css/mobile-menu-fix.css @@ -7,7 +7,7 @@ .mobile-menu-container .navbar-collapse, #pst-primary-sidebar-modal, #pst-secondary-sidebar-modal { - z-index: 10000 !important; + z-index: 1500; pointer-events: auto !important; }