1/** 2 * ЦиÑÑа Ñ ÐºÐ¾ÑÐ·Ð¸Ð½Ñ Ð¿Ð¾Ñле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑоваÑа. 3 * 4 * ШÑаÑÐ½Ð°Ñ ÑепоÑка ÑÐµÐ¼Ñ ÑÑого не делала: поÑле ÑÑпеÑного `ajax/item.php` кнопка 5 * пеÑеклÑÑалаÑÑ Ð½Ð° «РкоÑзине», а `getActualBasket()` и `reloadTopBasket()` â 6 * Ñе, ÑÑо обновлÑÑÑ `arBasketPrices` и пиÑÑÑ ÑиÑло в ÑÐ°Ð¿ÐºÑ Ð¸ нижнее менÑ, â не 7 * вÑзÑвалиÑÑ (пÑовеÑено на боевом ÑайÑе 19 авгÑÑÑа 2026: поÑле нажаÑÐ¸Ñ ÑÑ Ð¾Ð´Ð¸Ñ 8 * Ñовно один запÑоÑ, `item.php`, и болÑÑе ниÑего). ÐбÑабоÑÑиков `.to-cart` Ñ 9 * ÑÐµÐ¼Ñ Ð½ÐµÑколÑко, веÑвлений внÑÑÑи еÑÑ Ð±Ð¾Ð»ÑÑе, и какой именно оÑÑабоÑаеÑ, 10 * завиÑÐ¸Ñ Ð¾Ñ Ð²Ð¸Ð´Ð° каÑÑоÑки â ÑиниÑÑ Ð¸Ñ Ð¿Ð¾ Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑмÑÑла неÑ. 11 * 12 * ÐоÑÑÐ¾Ð¼Ñ ÑпÑаÑиваем иÑог Ñами. `ajax/show_basket_actual.php` оÑдаÑÑ ÑкÑÐ¸Ð¿Ñ Ñ 13 * `arBasketPrices`, оÑÑÑда и беÑÑм BASKET_COUNT. РазмеÑÐºÑ ÑÑÑÑÑика не вÑдÑмÑваем: 14 * пиÑем в Ñе же ÑзлÑ, ÑÑо и Ñема (.basket-link.basket .count Ñ ÐºÐ»Ð°ÑÑами 15 * empted / basket-count), â они еÑÑÑ Ð¸ в Ñапке, и в нижней панели. 16 * 17 * СпÑаÑиваем не один Ñаз: добавление на боевом Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ ÑекÑндÑ-полÑоÑÑ, и 18 * пеÑвÑй же запÑÐ¾Ñ ÑÑÐ¿ÐµÐ²Ð°ÐµÑ ÑанÑÑе Ñамого Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ â ÑеÑÐ²ÐµÑ Ð¾ÑдаÑÑ Ð¿Ñежнее 19 * ÑиÑло. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð¿ÑаÑиваем Ñ Ð½Ð°ÑаÑÑаÑÑей паÑзой и оÑÑанавливаемÑÑ, как ÑолÑко 20 * ÑиÑло изменилоÑÑ (или поÑле поÑледней попÑÑки). 21 */ 22(function () { 23 'use strict'; 24 25 if (window.__ndBasketCount) return; 26 window.__ndBasketCount = true; 27 28 var DELAYS = [700, 1500, 2500, 4000, 6000]; 29 var timers = []; 30 var startCount = null; 31 32 function siteDir() { 33 var o = window.arNextOptions; 34 return (o && o.SITE_DIR) ? o.SITE_DIR : '/'; 35 } 36 37 /* ЧÑо ÑейÑÐ°Ñ Ð½Ð°ÑиÑовано Ñ ÐºÐ¾ÑÐ·Ð¸Ð½Ñ â Ñ ÑÑим и ÑÑавниваем оÑвеÑÑ ÑеÑвеÑа. */ 38 function shownCount() { 39 var box = document.querySelector('.basket-link.basket .count'); 40 if (!box) return null; 41 var n = parseInt((box.textContent || '').trim(), 10); 42 return isNaN(n) ? 0 : n; 43 } 44 45 function apply(count) { 46 var n = parseInt(count, 10); 47 if (isNaN(n)) return; 48 49 [].forEach.call(document.querySelectorAll('.basket-link.basket'), function (link) { 50 link.classList.toggle('basket-count', n > 0); 51 52 var box = link.querySelector('.count'); 53 if (!box) return; 54 55 box.classList.toggle('empted', n <= 0); 56 if (box.textContent.trim() !== String(n)) box.textContent = n; 57 }); 58 } 59 60 function refresh() { 61 var xhr = new XMLHttpRequest(); 62 xhr.open('POST', siteDir() + 'ajax/show_basket_actual.php', true); 63 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 64 xhr.onload = function () { 65 /* ÐÑÐ²ÐµÑ â кÑÑок html Ñо ÑкÑипÑом, ÑазбиÑаÑÑ ÐµÐ³Ð¾ Ñеликом незаÑем: 66 нÑжно одно ÑиÑло. */ 67 var m = /'BASKET_COUNT'\s*:\s*'(\d+)'/.exec(xhr.responseText || ''); 68 if (!m) return; 69 70 apply(m[1]); 71 72 /* ÐождалиÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ â оÑÑалÑнÑе попÑÑки оÑменÑем. */ 73 if (startCount !== null && parseInt(m[1], 10) !== startCount) { 74 timers.forEach(clearTimeout); 75 timers = []; 76 } 77 }; 78 try { xhr.send('ACTION=add'); } catch (e) { } 79 } 80 81 function schedule() { 82 timers.forEach(clearTimeout); 83 startCount = shownCount(); 84 timers = DELAYS.map(function (ms) { return setTimeout(refresh, ms); }); 85 } 86 87 /* Фаза пеÑÐµÑ Ð²Ð°Ñа: Ñема на некоÑоÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ°Ñ Ð¾ÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð²ÑплÑÑие. */ 88 document.addEventListener('click', function (e) { 89 var t = e.target; 90 if (!t || !t.closest) return; 91 if (t.closest('.to-cart')) schedule(); 92 }, true); 93})();
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.