PageSourceSearch

https://afrika21.ru/templates/ushop/js/site.js

js afrika21.ru collected 2026-10-04 09:33:44 UTC 4,193 bytes, 89 lines download raw bytes

1document.addEventListener('DOMContentLoaded', function(){
2    var headerSticky = document.getElementById('headerSticky');
3    var scrollTopEl = document.getElementById('scroll-top');
4    var btnCatalog = document.getElementById('btnCatalog');
5    var catMenu = document.getElementById('catalogMenu');
6    var catOverlay = document.getElementById('catOverlay');
7
8    // sticky header shadow + scroll-top
9    window.addEventListener('scroll', function(){
10        var y = window.scrollY || document.documentElement.scrollTop;
11        if (headerSticky) headerSticky.classList.toggle('scrolled', y > 4);
12        if (scrollTopEl) scrollTopEl.classList.toggle('visible', y > 400);
13    });
14    if (scrollTopEl) scrollTopEl.addEventListener('click', function(){ window.scrollTo({top:0,behavior:'smooth'}); });
15
16    // catalog menu open/close
17    function openCat(){
18        if(catMenu){ catMenu.style.display='block'; catMenu.classList.add('open'); }
19        if(catOverlay){ catOverlay.style.display='block'; catOverlay.classList.add('open'); }
20        if(btnCatalog) btnCatalog.classList.add('active');
21    }
22    function closeCat(){
23        if(catMenu){ catMenu.style.display='none'; catMenu.classList.remove('open'); }
24        if(catOverlay){ catOverlay.style.display='none'; catOverlay.classList.remove('open'); }
25        if(btnCatalog) btnCatalog.classList.remove('active');
26    }
27
28    if (btnCatalog) btnCatalog.addEventListener('click', function(e){
29        e.preventDefault();
30        e.stopPropagation();
31        var isOpen = (catMenu.style.display === 'block');
32        if (isOpen) { closeCat(); } else { openCat(); }
33    });
34    if (catMenu) catMenu.addEventListener('click', function(e){ e.stopPropagation(); });
35    if (catOverlay) catOverlay.addEventListener('click', closeCat);
36    document.addEventListener('click', closeCat);
37    document.addEventListener('keydown', function(e){ if(e.key === 'Escape') closeCat(); });
38
39    // hover panels in catalog menu
40    // var cmCats = document.querySelectorAll('.catalog-menu__cat');
41    // var cmPanels = document.querySelectorAll('.catalog-menu__panel');
42    // for (var idx = 0; idx < cmCats.length; idx++) {
43    //     (function(cat){
44    //         cat.addEventListener('mouseenter', function(){
45    //             var i = cat.getAttribute('data-i');
46    //             for (var j = 0; j < cmCats.length; j++) cmCats[j].classList.remove('active');
47    //             cat.classList.add('active');
48    //             for (var k = 0; k < cmPanels.length; k++) {
49    //                 if (cmPanels[k].getAttribute('data-i') === i) cmPanels[k].classList.add('active');
50    //                 else cmPanels[k].classList.remove('active');
51    //             }
52    //         });
53    //     })(cmCats[idx]);
54    // }
55    // hover/tap panels in catalog menu
56    var cmCats = document.querySelectorAll('.catalog-menu__cat');
57    var cmPanels = document.querySelectorAll('.catalog-menu__panel');
58
59    var cmSupportsHover = window.matchMedia && window.matchMedia('(hover: hover) and (pointer: fine)').matches;
60
61    function cmActivate(cat) {
62        var i = cat.getAttribute('data-i');
63        for (var j = 0; j < cmCats.length; j++) cmCats[j].classList.remove('active');
64        cat.classList.add('active');
65        for (var k = 0; k < cmPanels.length; k++) {
66            if (cmPanels[k].getAttribute('data-i') === i) cmPanels[k].classList.add('active');
67            else cmPanels[k].classList.remove('active');
68        }
69    }
70
71    for (var idx = 0; idx < cmCats.length; idx++) {
72        (function (cat) {
73            if (cmSupportsHover) {
74                cat.addEventListener('mouseenter', function () {
75                    cmActivate(cat);
76                });
77            } else {
78                cat.addEventListener('click', function (e) {
79                    // first tap: just open the submenu, don't follow the link yet
80                    if (!cat.classList.contains('active')) {
81                        e.preventDefault();
82                        cmActivate(cat);
83                    }
84                    // second tap on an already active item: let the link navigate
85                });
86            }
87        })(cmCats[idx]);
88    }
89});

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.