PageSourceSearch

https://24abs.ru/engine/public/templates/default/skin/mobile.js?v16

js 24abs.ru collected 2026-10-07 07:55:19 UTC 8,465 bytes, 196 lines download raw bytes

1async function fetchHtml(url, method) {
2    method = method || 'GET';
3    const options = {
4        method: method,
5        credentials: 'same-origin'
6    };
7    if (method === 'POST') {
8        options.headers = {'X-Requested-With': 'XMLHttpRequest'};
9    }
10    const response = await fetch(url, options);
11    if (!response.ok) {
12        throw new Error('HTTP ' + response.status + ': ' + url);
13    }
14    return response.text();
15}
16
17$(window).on('load', async function () {
18    let headerObj = $('header');
19    let headerHeight = headerObj.css('height');
20    headerHeight = Math.round(parseFloat(headerHeight.replace(/[^0-9\.]/g,"")));
21    // show top navigation
22    if (headerHeight === 50) { // костыль для того, чтобы меню не отображалось на старых сайтах
23        headerObj.empty(); // удаляем всё содержимое шапки сайта
24        // подключение стилей
25        let headerCss = document.createElement('link');
26        headerCss.type = "text/css";
27        headerCss.rel = "stylesheet";
28        headerCss.href = "/engine/public/templates/default/skin/mobile.css?v5";
29        document.head.append(headerCss);
30        // добавление вёрстки
31        try {
32            const html = await fetchHtml('/engine/skin/header/getMobile', 'POST');
33            headerObj.append(html);
34            // добавление корзины
35            const cartHtml = await fetchHtml('/shop/cart.php?ajax', 'GET');
36            $('.cartEmpty_m').remove();
37            $('.cart_m').remove();
38            $('#cart').append(cartHtml);
39            // устанавливаем максимальную высоту списка каталога и результатов поиска (для скролла)
40            const wrapperMaxHeight = $(window).height() - 50;
41            $('#mobile_nav .mobile_catalog_wrapper').css({'maxHeight': wrapperMaxHeight + 'px'});
42            $('#mobile_nav #search_hints').css({'maxHeight': wrapperMaxHeight + 'px'});
43            let domain = $('#mobile_nav + .domain');
44            if (domain.length === 1) {
45                $('main').before(domain);
46            }
47        } catch (e) {
48            console.error(e);
49        }
50
51        // подключение пользовательского меню
52        if (window.location.pathname.indexOf('/user/profile/') === 0
53            || window.location.pathname.indexOf('/shop/orders/') === 0
54            || window.location.pathname.indexOf('/shop/compare/') === 0
55            || window.location.pathname.indexOf('/shop/favorite/') === 0) {
56            // подключать только если находимся в /user/
57            headerCss = document.createElement('link');
58            headerCss.type = "text/css";
59            headerCss.rel = "stylesheet";
60            headerCss.href = "/engine/public/templates/default/users/mobile_menu/style.css";
61            document.head.append(headerCss);
62            // добавление вёрстки
63            try {
64                const menuHtml = await fetchHtml('/user/mobile_menu/index.php', 'POST');
65                $('main').prepend(menuHtml);
66            } catch (e) {
67                console.error(e);
68            }
69        }
70        // подключение пользовательского меню
71        if (window.location.pathname.indexOf('/shop/goods/') === 0) {
72            // подключать только если находимся в /user/
73            let headerScript = document.createElement('script');
74            headerScript.src = "/engine/public/templates/default/skin/mobileGallery.js?v10";
75            document.head.append(headerScript);
76        }
77    }
78});
79
80// показывает элементы для поиска
81function ShowSearchForm() {
82    HideAll();
83    $('#mobile_nav .mobile_search_wrapper').show();
84    $('#search_form_input').focus();
85    $('#mobile_nav .mobile_overlay').show();
86}
87
88// загружает и показывает основные категории
89async function ShowCatalog() {
90    $('#mobile_nav .mobile_catalog_wrapper').removeClass('hidden');
91    $('#mobile_nav .mobile_catalog_wrapper').show();
92    $('#mobile_nav li.menu').addClass('hidden');
93    $('#mobile_nav li.clse').removeClass('hidden');
94    $('#mobile_nav .mobile_overlay').show();
95    if ($('#mobile_nav .mobile_catalog_wrapper').hasClass('empty')) {
96        // добавление вёрстки
97        try {
98            const html = await fetchHtml('/shop/categories.php', 'POST');
99            $('#mobile_nav .mobile_catalog_wrapper .mobile-menu-header').after(html);
100            $('#mobile_nav .mobile_catalog_wrapper').removeClass('empty');
101        } catch (e) {
102            console.error(e);
103        }
104    }
105}
106
107// приводит меню в начальное состояние (скрывает поиск и каталог)
108function HideAll() {
109    // hide search form
110    $('#mobile_nav .mobile_search_wrapper').hide();
111    // hide catalog
112    $('#mobile_nav .mobile_catalog_wrapper').hide();
113    $('#mobile_nav li.menu').removeClass('hidden');
114    $('#mobile_nav li.clse').addClass('hidden');
115    $('#mobile_nav .mobile_overlay').hide();
116}
117
118/********************* OLD UNUSEFUL CODE ***********************************/
119
120$(window).on('load', function () {
121    // показать меню
122    $("#mobile-menu-button").bind('click', function (ev) {
123        if ($('#mobile-menu').length == 0) {
124            $('body').append('<div id="mobile-menu" onclick="mobileMenuClick(this)"></div>');
125        }
126        $('#mobile-menu').html('<ul>' + $('header nav.main ul').html() + '<div id="mobile-menu-close"></div></ul>');
127        $('#mobile-menu').show();
128        $('#mobile-menu ul').addClass('animated');
129        $('#mobile-menu ul').addClass('slideInLeft');
130        $('#mobile-menu ul').removeClass('fadeOutLeft');
131    });
132
133    // обработка скрытия/показа формы поиска
134    $('#mobile-search-button').bind('click', function () {
135        if ($('header .logo').css('display') == 'block') {
136            $('header .logo').hide();
137            // если в шапке нет формы, добавляем
138            if ($('header div.search').length == 0) {
139                $('header').append($('div.search'));
140                $('header').append($('#search_hints'));
141            }
142            $('header div.search').show();
143            $('header div.search').addClass('mobile-search-container');
144            $('header div.search').addClass('animated');
145            $('header div.search').addClass('slideInLeft');
146            $('header div.search').removeClass('fadeOutLeft');
147            $('header div.search form input[type=text]').focus();
148        } else {
149            $('header .logo').show();
150            $('header div.search').hide();
151            $('header div.search').removeClass('fadeOutLeft');
152            $('header div.search').removeClass('animated');
153            $('header div.search').removeClass('mobile-search-container');
154        }
155    });
156    // обработка скрытия/показа элементов в верхнем меню
157    $('header').on('click', 'nav > ul > li.sub > span', function () {
158        subMenuShow(this)
159    });
160    // обработка скрытия/показа элементов в подвале
161    $('footer nav > ul > li.sub > span').on('click', function () {
162        subMenuShow(this)
163    });
164});
165
166function subMenuShow(elem) {
167    let liObj = $(elem).parent('li');
168
169    show($(liObj));
170    //upd 2020.09.16 раскрытие/скрытие списка меню c классом empty
171    let next = $(liObj).next();
172    if(next.children().is('.empty')){
173        show(next);
174    }
175}
176
177
178// скрыть меню
179function mobileMenuClick(obj) {
180    if ($(obj).attr('id') == 'mobile-menu' || $(obj).attr('id') == 'mobile-menu-close') {
181        $('#mobile-menu ul').removeClass('slideInLeft');
182        $('#mobile-menu ul').addClass('fadeOutLeft');
183        $("#mobile-menu").delay(500).fadeOut();
184    }
185}
186//раскрытие/скрытие списка меню
187function show(el) {
188    if (el.hasClass("show")) {
189        el.removeClass("show");
190    } else {
191        el.addClass("show");
192    }
193}
194
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.