PageSourceSearch

https://komekaigi.dev/js/teaser.js

js komekaigi.dev collected 2026-09-26 04:37:28 UTC 1,397 bytes, 47 lines download raw bytes

1(function () {
2    'use strict';
3
4    const toggle = document.getElementById('menu-toggle');
5    const menu = document.getElementById('site-menu');
6
7    if (!toggle || !menu) {
8        return;
9    }
10
11    const setOpen = (open) => {
12        toggle.setAttribute('aria-expanded', String(open));
13        toggle.setAttribute('aria-label', open ? 'メニューを閉じる' : 'メニューを開く');
14        menu.setAttribute('aria-hidden', String(!open));
15        document.body.style.overflow = open ? 'hidden' : '';
16    };
17
18    const isOpen = () => toggle.getAttribute('aria-expanded') === 'true';
19
20    toggle.addEventListener('click', () => {
21        setOpen(!isOpen());
22    });
23
24    // Close on outside click
25    document.addEventListener('click', (event) => {
26        if (!isOpen()) return;
27        const target = event.target;
28        if (target instanceof Node && !menu.contains(target) && !toggle.contains(target)) {
29            setOpen(false);
30        }
31    });
32
33    // Close on Escape
34    document.addEventListener('keydown', (event) => {
35        if (event.key === 'Escape' && isOpen()) {
36            setOpen(false);
37        }
38    });
39
40    // Close when a menu link is clicked (navigation)
41    menu.addEventListener('click', (event) => {
42        const target = event.target;
43        if (target instanceof Element && target.closest('a')) {
44            setOpen(false);
45        }
46    });
47})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.