PageSourceSearch

https://daisyknit.ru/local/templates/.default/components/bitrix/menu/dk_mobile_list/script.js?17881701993713

js daisyknit.ru collected 2026-09-24 10:36:38 UTC 3,713 bytes, 95 lines download raw bytes

1// Мобильный bottom-sheet (Часть 9, стадия 3): открытие по бургеру + слайд-уровни.
2(function () {
3    'use strict';
4
5    function init() {
6        var overlay = document.querySelector('.dkm-overlay');
7        var sheet   = document.querySelector('.dkm-sheet');
8        if (!overlay || !sheet || sheet.dataset.dkmBound === '1') { return; }
9        sheet.dataset.dkmBound = '1';
10
11        var back  = sheet.querySelector('.dkm-back');
12        var title = sheet.querySelector('.dkm-title');
13        var stack = ['dkm-level-1'];
14
15        function showLevel(id) {
16            sheet.querySelectorAll('.dkm-level-2').forEach(function (l) { l.classList.remove('dkm-active'); });
17            var isRoot = (id === 'dkm-level-1');
18            if (!isRoot) {
19                var el = sheet.querySelector('#' + id);
20                if (el) { el.classList.add('dkm-active'); }
21            }
22            if (back)  { back.style.display = isRoot ? 'none' : 'flex'; }
23            if (title) {
24                var t = isRoot ? '' : (sheet.querySelector('#' + id) ? sheet.querySelector('#' + id).getAttribute('data-title') : '');
25                title.textContent = t || '';
26            }
27        }
28
29        function setBurger(active) {
30            document.querySelectorAll('.header-menu-burger div, .header-logo-container').forEach(function (el) {
31                el.classList.toggle('open', active);
32            });
33            document.body.classList.toggle('overNone', active);
34        }
35        function open() {
36            stack = ['dkm-level-1'];
37            showLevel('dkm-level-1');
38            overlay.classList.add('dkm-show');
39            sheet.classList.add('dkm-show');
40            setBurger(true);
41            document.body.style.overflow = 'hidden';
42        }
43        function close() {
44            overlay.classList.remove('dkm-show');
45            sheet.classList.remove('dkm-show');
46            setBurger(false);
47            document.body.style.overflow = '';
48        }
49
50        // бургер открывает шторку
51        document.querySelectorAll('.header-menu-burger').forEach(function (b) {
52            b.addEventListener('click', function (e) {
53                e.preventDefault();
54                open();
55            });
56        });
57
58        overlay.addEventListener('click', close);
59        sheet.querySelectorAll('[data-dkm-close]').forEach(function (b) {
60            b.addEventListener('click', close);
61        });
62
63        // переход на уровень 2
64        sheet.querySelectorAll('[data-dkm-open]').forEach(function (row) {
65            row.addEventListener('click', function () {
66                var id = row.getAttribute('data-dkm-open');
67                stack.push(id);
68                showLevel(id);
69            });
70        });
71
72        // назад
73        if (back) {
74            back.addEventListener('click', function () {
75                stack.pop();
76                showLevel(stack[stack.length - 1] || 'dkm-level-1');
77            });
78        }
79
80        // свайп вниз для закрытия
81        var startY = 0;
82        sheet.addEventListener('touchstart', function (e) { startY = e.touches[0].clientY; }, { passive: true });
83        sheet.addEventListener('touchmove', function (e) {
84            var dy = e.touches[0].clientY - startY;
85            var active = sheet.querySelector('.dkm-level-2.dkm-active') || sheet.querySelector('.dkm-level-1');
86            if (dy > 70 && active && active.scrollTop <= 0) { close(); }
87        }, { passive: true });
88    }
89
90    if (document.readyState === 'loading') {
91        document.addEventListener('DOMContentLoaded', init);
92    } else {
93        init();
94    }
95})();

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.