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.