Repository navigation
Expand file tree
/
Copy pathscript.js
More file actions
63 lines (53 loc) · 1.81 KB
/
Copy pathscript.js
File metadata and controls
63 lines (53 loc) · 1.81 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
// ngblock.de — kleines Basis-Script.
// Bewusst schlank gehalten, damit hier später Blog-/Projekt-Logik andocken kann.
document.addEventListener('DOMContentLoaded', () => {
const year = new Date().getFullYear();
document.querySelectorAll('[data-year]').forEach((el) => {
el.textContent = year;
});
const menuToggle = document.getElementById('menuToggle');
const menuPanel = document.getElementById('menuPanel');
const prefersReducedMotion = window.matchMedia(
'(prefers-reduced-motion: reduce)'
).matches;
if (!menuToggle || !menuPanel) return;
const openMenu = () => {
menuPanel.classList.add('is-open');
menuToggle.setAttribute('aria-expanded', 'true');
};
const closeMenu = () => {
menuPanel.classList.remove('is-open');
menuToggle.setAttribute('aria-expanded', 'false');
};
menuToggle.addEventListener('click', (event) => {
event.stopPropagation();
const isOpen = menuPanel.classList.contains('is-open');
isOpen ? closeMenu() : openMenu();
});
document.addEventListener('click', (event) => {
if (!menuPanel.contains(event.target) && event.target !== menuToggle) {
closeMenu();
}
});
document.addEventListener('keydown', (event) => {
if (event.key === 'Escape') closeMenu();
});
menuPanel.querySelectorAll('a[data-target]').forEach((link) => {
link.addEventListener('click', (event) => {
event.preventDefault();
const target = document.getElementById(link.dataset.target);
closeMenu();
if (target) {
target.scrollIntoView({
behavior: prefersReducedMotion ? 'auto' : 'smooth',
block: 'start',
});
}
});
});
});
console.log(
'%c ngblock ',
'background:#ffb020;color:#0d1b2e;font-weight:600;padding:2px 6px;border-radius:2px;',
'— im Entwurf. Mehr folgt bald.'
);