forked from cadence/breezewiki
Merge PR #15
This commit is contained in:
commit
47d92d3a37
3 changed files with 79 additions and 4 deletions
|
@ -200,10 +200,11 @@
|
|||
`(script (@ (type "module") (src ,(get-static-url "search-suggestions.js"))))
|
||||
"")
|
||||
(script (@ (type "module") (src ,(get-static-url "countdown.js"))))
|
||||
(script (@ (defer) (src ,(get-static-url "tabs.js"))))
|
||||
(link (@ (rel "icon") (href ,(u (λ (v) (config-true? 'strict_proxy))
|
||||
(λ (v) (u-proxy-url v))
|
||||
(head-data^-icon-url head-data))))))
|
||||
(body (@ (class ,(head-data^-body-class head-data)))
|
||||
(body (@ (class ,(head-data^-body-class head-data) " bw-tabs-nojs"))
|
||||
,(let ([extension-eligible?
|
||||
(cond/var
|
||||
[(not req) #f]
|
||||
|
|
|
@ -202,11 +202,11 @@ figcaption, .lightbox-caption, .thumbcaption {
|
|||
padding: 0;
|
||||
}
|
||||
|
||||
/* show tabs always */
|
||||
.wds-tabs__wrapper {
|
||||
/* show tabs if tabs.js isn't loaded */
|
||||
.bw-tabs-nojs .wds-tabs__wrapper {
|
||||
display: none;
|
||||
}
|
||||
.wds-tab__content {
|
||||
.bw-tabs-nojs .wds-tab__content {
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
|
74
static/tabs.js
Normal file
74
static/tabs.js
Normal file
|
@ -0,0 +1,74 @@
|
|||
"use strict";
|
||||
|
||||
let tabToFind = location.hash.length > 1 ? location.hash.substring(1) : null;
|
||||
for (let tabber of document.body.querySelectorAll(".wds-tabber")) {
|
||||
let [tabs, contents] = getTabs(tabber);
|
||||
|
||||
for (let i in tabs) {
|
||||
let tab = tabs[i];
|
||||
let content = contents[i];
|
||||
|
||||
tab.addEventListener("click", function(e) {
|
||||
setCurrentTab(tabber, tab, content);
|
||||
e.preventDefault();
|
||||
});
|
||||
if (tab.dataset.hash === tabToFind) {
|
||||
setCurrentTab(tabber, tab, content);
|
||||
}
|
||||
}
|
||||
}
|
||||
document.body.classList.remove("bw-tabs-nojs");
|
||||
|
||||
|
||||
|
||||
function getTabs(tabber) {
|
||||
let tabs = [];
|
||||
let contents = [];
|
||||
|
||||
for (let i of tabber.querySelector(".wds-tabs__wrapper").querySelectorAll(".wds-tabs__tab")) {
|
||||
tabs.push(i);
|
||||
}
|
||||
for (let i of tabber.children) {
|
||||
if (!i.matches(".wds-tab__content")) {
|
||||
continue;
|
||||
}
|
||||
contents.push(i);
|
||||
}
|
||||
|
||||
return [tabs, contents];
|
||||
}
|
||||
|
||||
function getCurrentTab(tabber) {
|
||||
let tab = null;
|
||||
let content = null;
|
||||
|
||||
tab = tabber.querySelector(".wds-tabs__wrapper").querySelector(".wds-tabs__tab.wds-is-current");
|
||||
for (let i of tabber.children) {
|
||||
if (!i.matches(".wds-tab__content.wds-is-current")) {
|
||||
continue;
|
||||
}
|
||||
content = i;
|
||||
break;
|
||||
}
|
||||
|
||||
return [tab, content];
|
||||
}
|
||||
|
||||
function setCurrentTab(tabber, tab, content) {
|
||||
let [currentTab, currentContent] = getCurrentTab(tabber);
|
||||
if (currentTab) {
|
||||
currentTab.classList.remove("wds-is-current");
|
||||
}
|
||||
if (currentContent) {
|
||||
currentContent.classList.remove("wds-is-current");
|
||||
}
|
||||
|
||||
tab.classList.add("wds-is-current");
|
||||
content.classList.add("wds-is-current");
|
||||
if (tab.dataset.hash) {
|
||||
let fragment = "#" + tab.dataset.hash;
|
||||
if (location.hash !== fragment) {
|
||||
history.pushState(null, "", fragment);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue