PageSourceSearch

https://www.gerritys.com/wp-content/themes/shoptocook-responsive/js/navigation.js?ver=1662644849

js gerritys.com collected 2026-10-07 23:22:47 UTC 7,367 bytes, 196 lines download raw bytes

1/**
2 * responsive.js
3 *
4 * Handles toggling the navigation menu for small screens.
5 */
6
7
8/*
9 * Enable 'More' menu item behaviour on primary menus
10 */
11jQuery(document).ready(function ($) {
12    (function () {
13        var container, button, menu;
14
15        container = document.getElementById('site-navigation');
16        if (!container)
17            return;
18
19        button = document.getElementsByClassName('menu-toggle')[0];
20        if ('undefined' === typeof button)
21            return;
22
23        menu = container.getElementsByTagName('ul')[0];
24
25        // Hide menu toggle button if menu is empty and return early.
26        if ('undefined' === typeof menu) {
27            button.style.display = 'none';
28            return;
29        }
30
31        if (-1 === menu.className.indexOf('nav-menu'))
32            menu.className += ' nav-menu';
33        
34        $jbutton = jQuery(button);
35        
36        if($jbutton.prop("tagName") === 'A') {
37            jQuery(button).attr("href", "javascript:menuClick();");
38        } else {
39            jQuery(button).click(function(){ menuClick(); return false; });
40        }
41    })();
42
43    var $primaryMenu = $('.nav-primary:first');    // Retrieve primary menu
44    if ($primaryMenu.length === 0) {
45        return;
46    }   // Verify that menu exists
47
48    if ($primaryMenu.hasClass('disable-more')) {
49        return;
50    } // option to disable resize
51
52    var $menuItems = $primaryMenu.children('li');   // Retrieve menu items
53    if ($menuItems < 2) {
54        cleanUp();
55        return;
56    }   // Verify at least 2 menu items exists [Home][Item1]
57
58    var $home = $menuItems.first();                                         // Retrieve home menu item
59    // COMMENTED OUT BECAUSE OF MULTILINGUAL
60    //if ($home.find('a:first').text() !== 'Home') { cleanUp(); return; };    // Verify that the first link says 'Home'
61
62    // Create and append 'More' item to navigator
63    var $more = $('<li/>', {'class': 'menu-item menu-item-more menu-item-has-children'});
64    $('<a/>', {href: 'javascript:void(0);', text: 'More', 'aria-label': 'More Expanded Menu'}).appendTo($more);
65    var $moreSub = $('<ul/>', {'class': 'sub-menu'});
66    $more.append($moreSub);
67    $menuItems.last().after($more); // CHROME BUG: using appendTo caused last LI (before more) to register as width 0
68
69    var $middleItems = $menuItems.not($home);    // Get items between home and more button
70    var registered = false;                      // Whether the menu has item widths have been registered. This wont happen if the menu is in toggle mode.
71    var DATA_WIDTH = 'oWidth';
71                   // Width data place-holder
72
73    rectifyMenu();
74    $(window).resize(rectifyMenu);
75    navigationFocus($('.navigation-main a'));
76
77    function rectifyMenu() {
78        var viewWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
79
80        if (!registered && viewWidth > 600) {
81            // Register menu widths
82            $menuItems.add($more).each(function () {
83                $me = $(this);
84                $me.data(DATA_WIDTH, $me.outerWidth());
85                $me.addClass('measured');
86            });
87            registered = true;
88        } else if (viewWidth <= 600) {
89            // Toggle mode is enabled so show everything except the more button
90            $middleItems.show();
91            $more.hide();
92            return;
93        }
94
95        var maxReached = false;                    // Whether the max number of items have been displayed
96        var $hiddenLIs = $();                       // List items that were hidden
97        var maxWidth = $primaryMenu.width();     // Get the max space the navigation bar has
98        if ($('html').is('.old-ie')) {
99            maxWidth = 960;
100        } // If we are an old version of IE (7-), set the width cause it calculates improperly
101        var filled = $home.data(DATA_WIDTH);   // How much space on the bar is filled (initially set to the width of the always showing home link)
102        var moreWidth = $more.data(DATA_WIDTH);   // The more button width
103
104        $middleItems.each(function (index) {
105            var $me = $(this);
106            var meWidth = $me.outerWidth();
107            var firstWidth = $me.data(DATA_WIDTH);
108
109            if (meWidth > firstWidth) {           // FireFox Fix
110                $me.data(DATA_WIDTH, meWidth);
111                firstWidth = meWidth;
112            } else {
113                meWidth = firstWidth;
114            }
115
116            if (!maxReached &&
117                    ((filled + meWidth + moreWidth) < maxWidth || // [filled][item][more]
118                            (index == $middleItems.length - 1 && ((filled + meWidth) < maxWidth)))) {// [filled][last item]
119                filled += meWidth;
120                $me.show();
121            } else {
122                if (!maxReached) {
123                    $more.show();
124                }
125                maxReached = true;
126                $me.hide();
127
128                $hiddenLIs = $hiddenLIs.add($me);
129            }
130        });
131
132        // Remove all more menu items
133        $moreSub.empty();
134
135        if (!maxReached) {
136            $more.hide();
137        } else {
138            $hiddenLIs.each(function () {
139                var $me = $(this);
140                var $links = $me.find('a').not('[href="javascript:void(0);"]');
141                $links.each(function () {
142                    $link = $(this);
143                    $('<li/>', {'class': $link.parent().attr('class'), html: $link.clone()}).appendTo($moreSub);
144                });
145            });
146        }
147        navigationFocus($('.navigation-main .menu-item-more a'));
148    }
149
150    function cleanUp() {
151        $menuItems.css('visibility', 'visible');
152    }
153
154});
155
156function navigationFocus(elements) {
157    elements.focus(
158            function () {
159                var menuClass = 'menu-item-focused';
160                var $parentMenu = jQuery(this).parents('.menu-item-has-children');
161                var $subMenu = jQuery(this).parent('li').parent('.sub-menu');
162                if ($parentMenu.length !== 0) {
163                    if ($parentMenu.hasClass(menuClass) !== true) {
164                        jQuery('.' + menuClass).removeClass(menuClass);
165                        $parentMenu.addClass(menuClass);
166                    }
167                } else {
168                    if ($subMenu.length === 0) {
169                        jQuery('.' + menuClass).removeClass(menuClass);
170                    }
171                }
172            }).blur(
173            function () {
174                var menuClass = 'menu-item-focused';
175                var $blurredMenu = jQuery(this).parents('.nav-primary-container');
176                setTimeout(function () {
177                    var $focusedMenu = jQuery(document.activeElement).parents('.nav-primary-container');
178                    if ($blurredMenu.length !== 0 && $focusedMenu.length === 0) {
179                        jQuery('.' + menuClass).removeClass(menuClass);
180                    }
181                }, 1);
182            });
183}
184
185function menuClick() {
186    container = document.getElementById('site-navigation');
187    button = jQuery('.menu-toggle').first();
188
189    if (-1 !== container.className.indexOf('toggled')) {
190        container.className = container.className.replace(' toggled', '');
191        button.trigger("untoggled");
192    } else {
193        container.className += ' toggled';
194        button.trigger("toggled");
195    }
196}

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.