PageSourceSearch

https://www.fuji.co.th/wp-content/themes/fuji-2021/js/navigation.js?ver=1790944557

js fuji.co.th collected 2026-10-02 12:36:22 UTC 4,538 bytes, 138 lines download raw bytes

1/**
2 * File navigation.js.
3 *
4 * Handles toggling the navigation menu for small screens and enables TAB key
5 * navigation support for dropdown menus.
6 */
7(function() {
8    const siteNavigation = document.getElementById('site-navigation');
9
10    // Return early if the navigation don't exist.
11    if (!siteNavigation) {
12        return;
13    }
14
15    const button = siteNavigation.getElementsByTagName('button')[0];
16
17    // Return early if the button don't exist.
18    if ('undefined' === typeof button) {
19        return;
20    }
21
22    const menu = siteNavigation.getElementsByTagName('ul')[0];
23
24    // Hide menu toggle button if menu is empty and return early.
25    if ('undefined' === typeof menu) {
26        button.style.display = 'none';
27        return;
28    }
29
30    if (!menu.classList.contains('nav-menu')) {
31        menu.classList.add('nav-menu');
32    }
33
34    // Toggle the .toggled class and the aria-expanded value each time the button is clicked.
35    button.addEventListener('click', function() {
36        siteNavigation.classList.toggle('toggled');
37
38        if (button.getAttribute('aria-expanded') === 'true') {
39            button.setAttribute('aria-expanded', 'false');
40        } else {
41            button.setAttribute('aria-expanded', 'true');
42        }
43    });
44
45    // Remove the .toggled class and set aria-expanded to false when the user clicks outside the navigation.
46    document.addEventListener('click', function(event) {
47        const isClickInside = siteNavigation.contains(event.target);
48
49        if (!isClickInside) {
50            siteNavigation.classList.remove('toggled');
51            button.setAttribute('aria-expanded', 'false');
52        }
53    });
54
55    // Get all the link elements within the menu.
56    const links = menu.getElementsByTagName('a');
57
58    // Get all the link elements with children within the menu.
59    const linksWithChildren = menu.querySelectorAll('.menu-item-has-children > a, .page_item_has_children > a');
60
61    // Toggle focus each time a menu link is focused or blurred.
62    for (const link of links) {
63        link.addEventListener('focus', toggleFocus, true);
64        link.addEventListener('blur', toggleFocus, true);
65    }
66
67    // Toggle focus each time a menu link with children receive a touch event.
68    for (const link of linksWithChildren) {
69        link.addEventListener('touchstart', toggleFocus, false);
70    }
71
72    /**
73     * Sets or removes .focus class on an element.
74     */
75    function toggleFocus() {
76        if (event.type === 'focus' || event.type === 'blur') {
77            let self = this;
78            // Move up through the ancestors of the current link until we hit .nav-menu.
79            while (!self.classList.contains('nav-menu')) {
80                // On li elements toggle the class .focus.
81                if ('li' === self.tagName.toLowerCase()) {
82                    self.classList.toggle('focus');
83                }
84                self = self.parentNode;
85            }
86        }
87
88        if (event.type === 'touchstart') {
89            const menuItem = this.parentNode;
90            event.preventDefault();
91            for (const link of menuItem.parentNode.children) {
92                if (menuItem !== link) {
93                    link.classList.remove('focus');
94                }
95            }
96            menuItem.classList.toggle('focus');
97        }
98    }
99}());
100
101
102
103window.addEventListener("load", (event) => {
104    // event.preventDefault();
105    var scrollBehaviorSupported =
106        "scroll-behavior" in document.documentElement.style;
107    console.log("scroll-behavior supported:", scrollBehaviorSupported);
108
109    var linkmenu = document.querySelectorAll(".menu-item a");
110    // console.log(linkmenu);
111    linkmenu.forEach((element) => {
112        element.onclick = function changeContent() {
113            document.getElementById("toggle_menu").checked = false;
114            var href = this.getAttribute("href");
115            var current = window.location.href;
116            var hash = window.location.hash;
117            var curentNoHash = current.replace(hash, "");
118
119            if (href == curentNoHash) {
120                window.scrollTo(0, 0);
121                return false;
122            }
123
124            var res = element.hash;
125
126            if (res.length > 0) {
127                var target = document.getElementById(res.replace("#", ""));
128                target.scrollIntoView({
129                    behavior: "smooth",
130                    block: "start",
131                    inline: "center",
132                });
133
134                return false;
135            }
136        };
137    });
138});

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.