-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsite.js
More file actions
82 lines (76 loc) · 3.22 KB
/
Copy pathsite.js
File metadata and controls
82 lines (76 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
const navToggle = document.querySelector('[data-nav-toggle]');
const navLinks = document.querySelector('[data-nav-links]');
if (navToggle && navLinks) {
navToggle.addEventListener('click', () => {
const open = navLinks.classList.toggle('open');
navToggle.setAttribute('aria-expanded', String(open));
});
navLinks.querySelectorAll('a').forEach((link) => link.addEventListener('click', () => {
navLinks.classList.remove('open');
navToggle.setAttribute('aria-expanded', 'false');
}));
}
const productMenus = [...document.querySelectorAll('.nav-menu')];
productMenus.forEach((menu) => {
menu.addEventListener('toggle', () => {
if (!menu.open) return;
productMenus.forEach((other) => {
if (other !== menu) other.open = false;
});
});
});
document.addEventListener('click', (event) => {
productMenus.forEach((menu) => {
if (menu.open && !menu.contains(event.target)) menu.open = false;
});
});
document.addEventListener('keydown', (event) => {
if (event.key !== 'Escape') return;
productMenus.forEach((menu) => { menu.open = false; });
if (navLinks?.classList.contains('open')) {
navLinks.classList.remove('open');
navToggle?.setAttribute('aria-expanded', 'false');
navToggle?.focus();
}
});
const storyTabs = [...document.querySelectorAll('[data-story-tab]')];
storyTabs.forEach((tab, index) => {
const name = tab.dataset.storyTab;
const panel = document.querySelector(`[data-story-panel="${name}"]`);
tab.id = `story-tab-${name}`;
tab.setAttribute('aria-controls', `story-panel-${name}`);
tab.tabIndex = index === 0 ? 0 : -1;
if (panel) {
panel.id = `story-panel-${name}`;
panel.setAttribute('aria-labelledby', tab.id);
}
tab.addEventListener('click', () => {
storyTabs.forEach((item) => {
item.setAttribute('aria-selected', String(item === tab));
item.tabIndex = item === tab ? 0 : -1;
});
document.querySelectorAll('[data-story-panel]').forEach((storyPanel) => storyPanel.classList.toggle('active', storyPanel.dataset.storyPanel === name));
});
tab.addEventListener('keydown', (event) => {
if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;
event.preventDefault();
const nextIndex = event.key === 'Home' ? 0 : event.key === 'End' ? storyTabs.length - 1 : (index + (event.key === 'ArrowRight' ? 1 : -1) + storyTabs.length) % storyTabs.length;
storyTabs[nextIndex].focus();
storyTabs[nextIndex].click();
});
});
const capabilitySearch = document.querySelector('[data-capability-search]');
if (capabilitySearch) {
capabilitySearch.addEventListener('input', () => {
const query = capabilitySearch.value.trim().toLowerCase();
document.querySelectorAll('[data-capability-item]').forEach((item) => {
item.hidden = query.length > 0 && !item.textContent.toLowerCase().includes(query);
});
document.querySelectorAll('[data-capability-group]').forEach((group) => {
const visible = [...group.querySelectorAll('[data-capability-item]')].some((item) => !item.hidden);
group.hidden = !visible;
});
const empty = document.querySelector('[data-capability-empty]');
if (empty) empty.hidden = [...document.querySelectorAll('[data-capability-item]')].some((item) => !item.hidden);
});
}