From 79eb5189ae8567351ab7dbf8ff615d4191124e81 Mon Sep 17 00:00:00 2001 From: Neil Dewhurst Date: Tue, 27 Feb 2024 21:31:44 +0000 Subject: [PATCH 1/2] switch tabs when id and hash is used --- preview-src/drivers-tabs.adoc | 3 +++ src/js/08-tabs-block.js | 19 +++++++++++++++++++ src/js/12-fragment-jumper.js | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/preview-src/drivers-tabs.adoc b/preview-src/drivers-tabs.adoc index 6fcf18eb..fde7e09b 100644 --- a/preview-src/drivers-tabs.adoc +++ b/preview-src/drivers-tabs.adoc @@ -8,10 +8,12 @@ GDS also uses tabs, but they have a different list of tab separators. Rather tha [.tabbed-example] ==== [.include-with-macos] +[[mac-os-bit]] ====== Tab for macOS ====== [.include-with-linux] +[[linux-bit]] ====== Tab for Linux ====== @@ -105,6 +107,7 @@ Note that this requires that Go modules are enabled. ====== [.include-with-java] +[[java-bit]] ====== To use the Java driver, it is recommended employing a dependency manager, such as Maven or Gradle. diff --git a/src/js/08-tabs-block.js b/src/js/08-tabs-block.js index 5cbf5d34..252167e6 100644 --- a/src/js/08-tabs-block.js +++ b/src/js/08-tabs-block.js @@ -205,4 +205,23 @@ document.addEventListener('DOMContentLoaded', function () { parent.removeChild(originalTab) }) + + // + // Make active tab based on url hash + // + function decodeFragment (hash) { + return hash && (~hash.indexOf('%') ? decodeURIComponent(hash) : hash).slice(1) + } + + var fragment, target, scrollTo + if ((fragment = decodeFragment(window.location.hash)) && (target = document.getElementById(fragment))) { + const langSelection = target.getAttribute('data-lang') + const tabbed = target.closest('.tabbed') + scrollTo = tabbed.querySelector(`[data-lang=${langSelection}]`) + if (scrollTo) { + switchTab({ + target: scrollTo, + }) + } + } }) diff --git a/src/js/12-fragment-jumper.js b/src/js/12-fragment-jumper.js index b2021ca8..68e2573b 100644 --- a/src/js/12-fragment-jumper.js +++ b/src/js/12-fragment-jumper.js @@ -37,7 +37,7 @@ window.addEventListener('load', function jumpOnLoad (e) { var fragment, target - if ((fragment = decodeFragment(window.location.hash)) && (target = document.getElementById(fragment))) { + if ((fragment = decodeFragment(window.location.hash)) && (target = document.getElementById(fragment)) && (!target.closest('.tabbed-container'))) { jumpToAnchor.bind(target)() setTimeout(jumpToAnchor.bind(target), 0) } From 4302486c934c9a3f61d1b69c4b25a9fc4aebb4fe Mon Sep 17 00:00:00 2001 From: Neil Dewhurst Date: Tue, 27 Feb 2024 22:01:10 +0000 Subject: [PATCH 2/2] better scrollTo --- src/js/12-fragment-jumper.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/js/12-fragment-jumper.js b/src/js/12-fragment-jumper.js index 68e2573b..b11a1e2d 100644 --- a/src/js/12-fragment-jumper.js +++ b/src/js/12-fragment-jumper.js @@ -24,20 +24,24 @@ e.preventDefault() } var topOffset = toolbar ? toolbar.getBoundingClientRect().bottom : headerNavigationBar.getBoundingClientRect().bottom - + var target = this + var tabs + if ((tabs = target.closest('.tabbed'))) { + target = tabs + } if (cheatSheet) { var scrollTarget = this.closest('div') var selectorsTop = document.querySelector('.nav-container .selectors').querySelector('div').getBoundingClientRect().top if (this.tagName === 'H3') topOffset = selectorsTop window.scrollTo(0, computePosition(scrollTarget, 0) - topOffset) } else { - window.scrollTo(0, computePosition(this, 0) - topOffset) + window.scrollTo(0, computePosition(target, 0) - topOffset) } } window.addEventListener('load', function jumpOnLoad (e) { var fragment, target - if ((fragment = decodeFragment(window.location.hash)) && (target = document.getElementById(fragment)) && (!target.closest('.tabbed-container'))) { + if ((fragment = decodeFragment(window.location.hash)) && (target = document.getElementById(fragment))) { jumpToAnchor.bind(target)() setTimeout(jumpToAnchor.bind(target), 0) }