1$(function () { 2 initFiltersShowToggle(); 3 initPixelGoal(); 4 //ФÑнкÑÐ¸Ñ initReadMoreToggle() Ð´Ð»Ñ Ð¾ÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑкого вида ÑекÑÑа Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°Ð¼Ð¸ показаÑÑ/ÑкÑÑÑÑ. ÐÑполÑзÑеÑÑÑ Ð½Ð° главной ÑÑÑаниÑе в блоке ÐаÑа иÑÑоÑÐ¸Ñ Ð¸ на ÑÑÑаниÑе каÑÑоÑки ÑоваÑа в опиÑании 5 initReadMoreToggle(); 6 //ФÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð³ÑÑзки наÑиÑлÑемÑÑ Ð±Ð¾Ð½ÑÑов из ÑÑм 7 BonusElementListSite(); 8 9 initBonusTooltips(); 10 //иниÑиализаÑÐ¸Ñ Ð¼Ð°Ñок 11 initAllPhoneInputs(); 12 // ÐоÑле иниÑиализаÑии вÑÐµÑ Ð¿Ð¾Ð»ÐµÐ¹ ÑÐ¸Ð½Ñ ÑонизиÑÑем Ñо ÑÑаÑÑовÑм вÑбоÑом ÑÑÑÐ°Ð½Ñ 13 syncPhoneInputsFromCountrySelect(); 14 15 16 // ÐакÑÑÑие ÑÑлÑипов пÑи клике вне и scroll 17 document.addEventListener('click', hideAllTooltips); 18 window.addEventListener('scroll', hideAllTooltips); 19 window.addEventListener('touchstart', hideAllTooltips); 20 window.addEventListener('touchmove', hideAllTooltips); 21 22 23 initVideoReviewModalClose(); 24 initCartLinkFallback(); 25 initHeroBannerLoading(); 26 initLazyBackgroundFallback(); 27 initModalTapProbe(); 28}) 29 30/* 31 * СÑоÑож нажаÑий по окнам. 32 * 33 * ÐÐ»Ð°Ð´ÐµÐ»ÐµÑ 6 ÑенÑÑбÑÑ 2026: на айÑоне не оÑкÑÑваеÑÑÑ Ð²ÑÐ±Ð¾Ñ Ð¿ÑнкÑа вÑдаÑи и не 34 * закÑÑваеÑÑÑ Ð¾ÐºÐ½Ð¾ Ð²Ñ Ð¾Ð´Ð°, а ÑеÑез вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð²Ð°ÑÑ Ð¾Ð±Ð° ÑÑазÑ. ÐоÑпÑоизвеÑÑи не 35 * ÑдалоÑÑ â в бÑаÑзеÑе ÑазÑабоÑÑика вÑÑ Ð¸ÑпÑавно, обÑабоÑÑики на меÑÑе. 36 * 37 * ÐоÑÑÐ¾Ð¼Ñ ÑпÑаÑиваем Ñам ÑелеÑон: запиÑÑваем, бÑл ли обÑабоÑÑик гоÑов в Ð¼Ð¾Ð¼ÐµÐ½Ñ 38 * каÑÐ°Ð½Ð¸Ñ Ð¸ на какой ÑекÑнде ÑÑÑаниÑа ожила. ÐиÑного в запиÑи ниÑего неÑ. 39 * 40 * ÐÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¼ÐµÑа на вÑÐµÐ¼Ñ ÑазбиÑаÑелÑÑÑва â ÑнÑÑÑ, как ÑолÑко пÑиÑина найдена. 41 */ 42/* 43 * ÐÑкÑÑваем и закÑÑваем окна Ñами. 44 * 45 * ÐÑÑнал ÑÑоÑожа Ñ ÑелеÑона владелÑÑа, ноÑÑ Ð½Ð° 6 ÑенÑÑбÑÑ 2026, показал Ñо, 46 * Ñего Ð¼Ñ Ð½Ðµ ожидали: **каждое** нажаÑие пÑÐ¸Ñ Ð¾Ð´Ð¸Ð»Ð¾ÑÑ Ð¿Ð¾ гоÑÐ¾Ð²Ð¾Ð¼Ñ Ð¾ÐºÐ½Ñ â 47 * и на девÑÑнадÑаÑой ÑекÑнде, и на ÑÑо ÑÑеÑÑей, â а ÑÑÑаниÑа оживала за 48 * 0,7â7 ÑекÑнд. То еÑÑÑ Foundation поднÑÑ, окна иниÑиализиÑованÑ, каÑание до 49 * ÑÑÑаниÑÑ Ð´Ð¾Ñ Ð¾Ð´Ð¸Ñ. РвÑÑ Ñавно ниÑего не оÑкÑÑвалоÑÑ. 50 * 51 * ÐнаÑÐ¸Ñ Ð¼ÐµÐ¶Ð´Ñ ÐºÐ°Ñанием и обÑабоÑÑиком Foundation, навеÑеннÑм на докÑменÑ, 52 * ÑобÑÑие кÑо-Ñо пеÑÐµÑ Ð²Ð°ÑÑваеÑ. ÐÑо именно â вопÑÐ¾Ñ Ð¾ÑкÑÑÑÑй, но и не важнÑй: 53 * Ñаз окно гоÑово, его можно оÑкÑÑÑÑ Ð½Ð°Ð¿ÑÑмÑÑ, ниÑего ни Ñ ÐºÐ¾Ð³Ð¾ не ÑпÑаÑиваÑ. 54 * 55 * Ðвойного ÑÑабаÑÑÐ²Ð°Ð½Ð¸Ñ ÑÑо не ÑоздаÑÑ: замеÑено на боевом ÑайÑе â на одно 56 * нажаÑие пÑÐ¸Ñ Ð¾Ð´Ð¸Ñ Ð¾Ð´Ð½Ð¾ ÑобÑÑие оÑкÑÑÑиÑ, лиÑÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов за коÑзиной неÑ. 57 * ÐÑкÑÑÑие Ñже оÑкÑÑÑого окна и закÑÑÑие закÑÑÑого Foundation пÑопÑÑкаеÑ. 58 */ 59function оÑкÑÑÑÑÐкно(имÑ) { 60 try { 61 var окно = document.getElementById(имÑ); 62 63 if (окно && getComputedStyle(окно).display === 'none') { 64 jQuery(окно).foundation('open'); 65 } 66 } catch (e) { 67 // Ðе вÑÑло â оÑÑанеÑÑÑ Ð¿Ñежний пÑÑÑ ÑеÑез Foundation. 68 } 69} 70 71function закÑÑÑÑÐкно(имÑ) { 72 try { 73 var окно = document.getElementById(имÑ); 74 75 if (окно && getComputedStyle(окно).display !== 'none') { 76 jQuery(окно).foundation('close'); 77 } 78 } catch (e) { 79 // Ðе вÑÑло â оÑÑанеÑÑÑ Ð¿Ñежний пÑÑÑ ÑеÑез Foundation. 80 } 81} 82 83/* 84 * ÐаннеÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ пÑиезжаÑÑ Ð¿Ð¾ меÑе надобноÑÑи. 85 * 86 * Ðиден один, а гÑÑзилиÑÑ Ð²Ñе девÑÑÑ â около 550 ÐÐ, из коÑоÑÑÑ Ñеловек Ð²Ð¸Ð´Ð¸Ñ 87 * воÑÑмÑÑ ÑаÑÑÑ. Ð, ÑÑо важнее, пеÑвÑй Ð±Ð°Ð½Ð½ÐµÑ Ð´ÐµÐ»Ð¸Ð» канал Ñ Ð²Ð¾ÑемÑÑ ÑоÑедÑми, 88 * Ñ Ð¾ÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ он и еÑÑÑ ÑамÑй кÑÑпнÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿ÐµÑвого ÑкÑана: по Ð
88½ÐµÐ¼Ñ ÑÑиÑаеÑÑÑ 89 * LCP. 90 * 91 * ÐдÑеÑа вÑÐµÑ Ð±Ð°Ð½Ð½ÐµÑов, кÑоме пеÑвого, Ð»ÐµÐ¶Ð°Ñ Ð² `data-` â бÑаÑÐ·ÐµÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ 92 * загÑÑзиÑÑ Ñо, Ñего в `srcset` неÑ. ÐодÑÑавлÑем Ð¸Ñ Ñами. 93 * 94 * ÐоÑÐµÐ¼Ñ Ð½Ðµ `loading="lazy"`: пÑобовали, и ÑÑо ÑÑоило пÑÑÑого баннеÑа на живом 95 * ÑайÑе 6 ÑенÑÑбÑÑ 2026. Slick Ð´Ð²Ð¸Ð³Ð°ÐµÑ ÑÐ»Ð°Ð¹Ð´Ñ ÑеÑез `transform`, а по ÑÐ°ÐºÐ¾Ð¼Ñ 96 * пеÑемеÑÐµÐ½Ð¸Ñ Ð±ÑаÑÐ·ÐµÑ Ð·Ð°Ð³ÑÑÐ·ÐºÑ Ð½Ðµ наÑÐ¸Ð½Ð°ÐµÑ â Ñлайд ÑÑановиÑÑÑ Ð°ÐºÑивнÑм, а 97 * каÑÑинки Ñ Ð½ÐµÐ³Ð¾ неÑ. 98 * 99 * ÐоÑÑÐ¾Ð¼Ñ Ð·Ð´ÐµÑÑ Ð´Ð²Ð° незавиÑимÑÑ Ð¿ÑÑи, и вÑоÑой ÑÑÑÐ°Ñ ÑÐµÑ Ð¿ÐµÑвÑй: 100 * 101 * â показÑваем ÑоÑедей ÑекÑÑего Ñлайда пÑи каждой Ñмене; 102 * â ÑеÑез ÑÑи ÑекÑÐ½Ð´Ñ Ð¿Ð¾ÐºÐ°Ð·Ñваем вÑÑ Ð¾ÑÑавÑееÑÑ, ÑÑо Ð±Ñ Ð½Ð¸ ÑлÑÑилоÑÑ Ñ 103 * ÑобÑÑиÑми slick. 104 * 105 * ТÑи ÑекÑÐ½Ð´Ñ Ð²ÑбÑÐ°Ð½Ñ Ð½Ðµ наÑгад: авÑопÑокÑÑÑка менÑÐµÑ Ñлайд каждÑе ÑеÑÑÑе, Ñо 106 * еÑÑÑ Ðº поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð²ÑоÑого баннеÑа его каÑÑинка Ñже в пÑÑи. ÐÑÑÑого Ñлайда не 107 * Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð°Ð¶Ðµ еÑли ÑобÑÑÐ¸Ñ ÐºÐ°ÑÑÑели оÑкажÑÑ ÑовÑем. 108 */ 109function initHeroBannerLoading() { 110 var ÑÐ»Ð°Ð¹Ð´ÐµÑ = document.querySelector('.hero__slider'); 111 112 if (!ÑлайдеÑ) { 113 return; 114 } 115 116 var показаÑÑ = function (Ñлайд) { 117 if (!Ñлайд || !Ñлайд.querySelectorAll) { 118 return; 119 } 120 121 var ÑÐ·Ð»Ñ = Ñлайд.querySelectorAll('source[data-srcset], img[data-src]'); 122 123 Array.prototype.forEach.call(ÑзлÑ, function (Ñзел) { 124 var srcset = Ñзел.getAttribute('data-srcset'); 125 var src = Ñзел.getAttribute('data-src'); 126 127 if (srcset) { 128 Ñзел.setAttribute('srcset', srcset); 129 Ñзел.removeAttribute('data-srcset'); 130 } 131 132 if (src) { 133 Ñзел.setAttribute('src', src); 134 Ñзел.removeAttribute('data-src'); 135 } 136 }); 137 }; 138 139 var показаÑÑÐокÑÑг = function () { 140 var акÑивнÑй = ÑлайдеÑ.querySelector('.slick-current'); 141 142 if (!акÑивнÑй) { 143 показаÑÑÐÑе(); 144 145 return; 146 } 147 148 [акÑивнÑй, акÑивнÑй.nextElementSibling, акÑивнÑй.previousElementSibling].forEach(показаÑÑ); 149 }; 150 151 var показаÑÑÐÑе = function () { 152 Array.prototype.forEach.call(ÑлайдеÑ.querySelectorAll('.hero__slide'), показаÑÑ); 153 }; 154 155 var показаÑÑТекÑÑий = function () { 156 var ÑекÑÑий = ÑлайдеÑ.querySelector('.slick-current'); 157 158 if (!ÑекÑÑий) { 159 показаÑÑÐÑе(); 160 161 return; 162 } 163 164 показаÑÑ(ÑекÑÑий); 165 }; 166 167 /* 168 * СнаÑала â ÑолÑко ÑÐ¾Ñ Ñлайд, коÑоÑÑй Ñеловек видиÑ. СоÑедей гÑÑзим, когда 169 * ÑÑÑаниÑа оÑвободиÑÑÑ: авÑопÑокÑÑÑка менÑÐµÑ Ñлайд Ñаз в ÑеÑÑÑе ÑекÑндÑ, и 170 * до ÑÑого моменÑа ÑоÑеди не нÑÐ¶Ð½Ñ Ð½Ð¸ÐºÐ¾Ð¼Ñ. 171 * 172 * ÐамеÑено на боевой главной 6 ÑенÑÑбÑÑ 2026: ÑоÑедние баннеÑÑ Ð¿Ñиезжали 173 * на 0,82 ÑекÑнде, и вмеÑÑе Ñ ÑекÑÑим ÑÑо 326 ÐÐ â они делили канал Ñ 174 * пеÑвÑм баннеÑом, по коÑоÑÐ¾Ð¼Ñ ÑÑиÑаеÑÑÑ LCP. 175 * 176 * Ð ÑÑное лиÑÑание пÑи ÑÑом не ÑÑÑадаеÑ: `beforeChange` подпиÑан ниже и 177 * подÑÑÐ³Ð¸Ð²Ð°ÐµÑ ÑоÑедей до Ñого, как Ñлайд поедеÑ. 178 */ 179 показаÑÑТекÑÑий(); 180 181 var показаÑÑСоÑедей = function () { 182 setTimeout(показаÑÑÐокÑÑг, 300); 183 }; 184 185 if (document.readyState === 'complete') { 186 показаÑÑСоÑедей(); 187 } else { 188 window.addEventListener('load', показаÑÑСоÑедей); 189 } 190 191 try { 192 jQuery(ÑлайдеÑ).on('init reInit afterChange beforeChange', показаÑÑÐокÑÑг); 193 } catch (e) { 194 // СобÑÑий не бÑÐ´ÐµÑ â оÑÑанеÑÑÑ ÑÑÑÐ°Ñ Ð¾Ð²ÐºÐ° ниже. 195 } 196 197 /* 198 * СÑÑÐ°Ñ Ð¾Ð²ÐºÐ° на ÑлÑÑай, еÑли ÑобÑÑÐ¸Ñ ÐºÐ°ÑÑÑели не пÑидÑÑ: ÑаÑкÑÑваем ÑÐ»Ð°Ð¹Ð´Ñ 199 * Ñами â но по одномÑ, в ÑÐ°ÐºÑ Ð°Ð²ÑопÑокÑÑÑке, а не вÑе Ñазом. 200 * 201 * РанÑÑе здеÑÑ ÑÑоÑло `setTimeout(показаÑÑÐÑе, 3000)`, и на ÑеÑвÑÑÑой 202 * ÑекÑнде бÑаÑÐ·ÐµÑ Ð·Ð°Ð±Ð¸Ñал ÑеÑÑÑ Ð±Ð°Ð½Ð½ÐµÑов одним кÑÑком â 223 ÐÐ. ÐÐ°Ð¼ÐµÑ 203 * главной 8 ÑенÑÑбÑÑ 2026: 4207 мÑ, ÑеÑÑÑ Ð·Ð°Ð¿ÑоÑов подÑÑд. ÐÐµÐ¶Ð´Ñ Ñем 204 * каÑÑÑÐµÐ»Ñ Ð¼ÐµÐ½ÑÐµÑ Ñлайд Ñаз в ÑеÑÑÑе ÑекÑндÑ, Ñо еÑÑÑ ÑеÑÑой Ð±Ð°Ð½Ð½ÐµÑ Ð½Ñжен 205 * ÑÐµÐ»Ð¾Ð²ÐµÐºÑ Ð½Ð° двадÑаÑой ÑекÑнде â еÑли он вообÑе доÑмоÑÑиÑ. 206 * 207 * РаÑкÑÑваÑÑ Ð¿Ð¾ Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñно: `показаÑÑÐокÑÑг` на ÑобÑÑиÑÑ ÐºÐ°ÑÑÑели 208 * идÑÑ Ð²Ð¿ÐµÑеди ÑÑого ÑаймеÑа и ÑÑÐ¿ÐµÐ²Ð°ÐµÑ Ð¿Ð¾Ð´Ð³Ð¾ÑовиÑÑ ÑоÑедей, Ñак ÑÑо 209 * обÑÑно ÑаÑкÑÑваÑÑ Ñже неÑего. РеÑли ÑобÑÑий Ð½ÐµÑ Ð²Ð¾Ð²Ñе, ÑÐ°Ð¹Ð¼ÐµÑ Ñам 210 * добеÑÑÑÑÑ Ð´Ð¾ оÑеÑедного Ñлайда ÑанÑÑе, Ñем ÑÐ¾Ñ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑ, â Ñади 211 * ÑÑого ÑÑÑÐ°Ñ Ð¾Ð²ÐºÐ° и заводилаÑÑ 6 ÑенÑÑбÑÑ, когда Ñеловек Ñвидел пÑÑÑое 212 * белое поле во веÑÑ ÑкÑан. 213 */ 214 var ТÐÐТ_ÐÐРУСÐÐÐ_ÐС = 4000; 215 216 var ÑаÑкÑÑÑÑÐÑеÑедной = function () { 217 var ÑÐ»Ð°Ð¹Ð´Ñ = ÑлайдеÑ.querySelectorAll('.hero__slide'); 218 219 for (var i = 0; i < ÑлайдÑ.length; i++) { 220 if (!ÑлайдÑ[i].querySelector('source[data-srcset], img[data-src]')) { 221 continue; 222 } 223 224 показаÑÑ(ÑлайдÑ[i]); 225 setTimeout(ÑаÑкÑÑÑÑÐÑеÑедной, ТÐÐТ_ÐÐРУСÐÐÐ_ÐС); 226 227 return; 228 } 229 }; 230 231 setTimeout(ÑаÑкÑÑÑÑÐÑеÑедной, 3000); 232} 233 234/* 235 * СÑÑÐ°Ñ Ð¾Ð²ÐºÐ° на ÑлÑÑай, еÑли LazyLoad не поднÑлÑÑ. 236 * 237 * Ð¤Ð¾Ð½Ñ Ð¿Ð»Ð¸Ñок каÑегоÑий пеÑÐµÐ²ÐµÐ´ÐµÐ½Ñ Ð½Ð° оÑложеннÑÑ Ð·Ð°Ð³ÑÑзкÑ: адÑÐµÑ Ð»ÐµÐ¶Ð¸Ñ Ð² 238 * `data-bg`, а подÑÑавлÑÐµÑ ÐµÐ³Ð¾ LazyLoad. ÐиблиоÑека Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ пÑÐ¸ÐµÑ Ð°ÑÑ â 239 * блокиÑовÑик, обÑÑв ÑеÑи, оÑибка в ÑоÑеднем ÑкÑипÑе, â и Ñогда Ñеловек 240 * ÑÐ²Ð¸Ð´Ð¸Ñ Ð¿Ð»Ð¸Ñки без каÑÑинок. ÐÑÑÑой блок Ñ Ñже лиÑÐ½Ð¸Ñ ÐºÐ¸Ð»Ð¾Ð±Ð°Ð¹Ñ, поÑÑÐ¾Ð¼Ñ 241 * ÑеÑез две ÑекÑÐ½Ð´Ñ Ð¿ÑовеÑÑем, еÑÑÑ Ð»Ð¸ библиоÑека, и еÑли ÐµÑ Ð½ÐµÑ â 242 * пÑоÑÑавлÑем ÑÐ¾Ð½Ñ Ñами. 243 * 244 * ÐÑовеÑÑем именно налиÑие библиоÑеки, а не ÑÐ°ÐºÑ Ð·Ð°Ð³ÑÑзки каÑÑинок: еÑли 245 * LazyLoad на меÑÑе, он Ñам ÑеÑиÑ, когда гÑÑзиÑÑ, и вмеÑиваÑÑÑÑ Ð½ÐµÐ·Ð°Ñем. 246 */
247function initLazyBackgroundFallback() { 248 var подÑÑавиÑÑ = function () { 249 var ÑÐ·Ð»Ñ = document.querySelectorAll('[data-bg]'); 250 251 Array.prototype.forEach.call(ÑзлÑ, function (Ñзел) { 252 var адÑÐµÑ = Ñзел.getAttribute('data-bg'); 253 254 if (!адÑеÑ) { 255 return; 256 } 257 258 Ñзел.style.backgroundImage = 'url("' + адÑÐµÑ + '")'; 259 Ñзел.removeAttribute('data-bg'); 260 }); 261 }; 262 263 setTimeout(function () { 264 if (typeof LazyLoad === 'undefined') { 265 подÑÑавиÑÑ(); 266 } 267 }, 2000); 268} 269 270function initModalTapProbe() { 271 var ÑообÑиÑÑ = function (ÑÑо, мÑ) { 272 try { 273 if (!navigator.sendBeacon) { 274 return; 275 } 276 277 navigator.sendBeacon( 278 '/local/ajax/payment_probe.php', 279 new Blob( 280 [JSON.stringify({ order: 1, state: ÑÑо, ms: Math.round(Ð¼Ñ || 0) })], 281 { type: 'application/json' } 282 ) 283 ); 284 } catch (e) { 285 // СÑоÑож наблÑдаеÑ, а не меÑаеÑ. 286 } 287 }; 288 289 document.addEventListener('click', function (event) { 290 if (!event.target.closest) { 291 return; 292 } 293 294 var ÑейÑÐ°Ñ = window.performance && performance.now ? performance.now() : 0; 295 296 var кÑеÑÑик = event.target.closest('[data-close]'); 297 298 if (кÑеÑÑик) { 299 var окно = кÑеÑÑик.closest('.reveal'); 300 var гоÑово = !!(окно && окно.id && isModalReady(окно.id)); 301 302 ÑообÑиÑÑ(гоÑово ? 'tap-close-ready' : 'tap-close-not-ready', ÑейÑаÑ); 303 304 if (гоÑово) { 305 закÑÑÑÑÐкно(окно.id); 306 } 307 308 return; 309 } 310 311 var ÑÑÐ¸Ð³Ð³ÐµÑ = event.target.closest('[data-open]'); 312 313 if (ÑÑиггеÑ) { 314 var Ð¸Ð¼Ñ = ÑÑиггеÑ.getAttribute('data-open'); 315 var можно = !!(Ð¸Ð¼Ñ && isModalReady(имÑ)); 316 317 ÑообÑиÑÑ(можно ? 'tap-open-ready' : 'tap-open-not-ready', ÑейÑаÑ); 318 319 if (можно) { 320 оÑкÑÑÑÑÐкно(имÑ); 321 } 322 } 323 }, true); 324 325 // РоÑделÑно â когда ÑÑÑаниÑа вообÑе ожила. 326 var ÑаÑÑ = setInterval(function () { 327 var лÑбое = document.querySelector('.reveal[id]'); 328 329 if (!лÑбое || !isModalReady(лÑбое.id)) { 330 return; 331 } 332 333 clearInterval(ÑаÑÑ); 334 ÑообÑиÑÑ('ui-alive', window.performance && performance.now ? performance.now() : 0); 335 }, 100); 336 337 setTimeout(function () { 338 clearInterval(ÑаÑÑ); 339 }, 60000); 340} 341 342function initFiltersShowToggle() { 343 const limitHeight = 164; 344 345 const $block = $('.filter__swtchrs_big'); 346 const $btn = $('.filter__show'); 347 const $cloud = $('.filter__cloud'); 348 349 if (!$block.length || !$btn.length) return; 350 351 const checkHeight = () => { 352 const hasLimit = $block.hasClass('filter__swtchrs_height'); 353 354 if (hasLimit) { 355 $block.removeClass('filter__swtchrs_height'); 356 } 357 358 const realHeight = $block.outerHeight(); 359 360 if (hasLimit) { 361 $block.addClass('filter__swtchrs_height'); 362 } 363 364 const shouldHide = realHeight <= limitHeight; 365 366 $btn.toggleClass('hide', shouldHide); 367 $cloud.toggleClass('hide', shouldHide); 368 369 if (!shouldHide) { 370 const imgShow = $btn.data('defaultIcon') || $btn.find('img').detach(); 371 372 $block.addClass('filter__swtchrs_height'); 373 $btn 374 .removeClass('filter__show_open') 375 .text('ÐоказаÑÑ Ð²Ñе') 376 .append(imgShow); 377 } 378 }; 379 380 $(document).on('click', '.filter__show', function (e) { 381 e.preventDefault(); 382 383 const isCollapsed = $block.hasClass('filter__swtchrs_height'); 384 385 if (isCollapsed) { 386 $block.removeClass('filter__swtchrs_height'); 387 $cloud.addClass('hide'); 388 389 const originalImg = $btn.find('img').detach(); 390 if (!$btn.data('defaultIcon')) { 391 $btn.data('defaultIcon', originalImg); 392 } 393 394 $btn 395 .addClass('filter__show_open') 396 .text('СкÑÑÑÑ'); 397 398 } else { 399 $block.addClass('filter__swtchrs_height'); 400 $cloud.removeClass('hide'); 401 402 const imgShow = $btn.data('defaultIcon') || $btn.find('img').detach(); 403 404 $btn 405 .removeClass('filter__show_open') 406 .text('ÐоказаÑÑ Ð²Ñе') 407 .append(imgShow); 408 } 409 }); 410 411 checkHeight(); 412 413 window.addEventListener('resize', checkHeight, true); 414} 415 416function initReadMoreToggle() { 417 const $wrappers = $('.js-card-text-wrapper'); 418 if (!$wrappers.length) return; 419 420 function checkReadMore() { 421 $wrappers.each(function () { 422 const $wrapper = $(this); 423 const $text = $wrapper.find('.js-card-text'); 424 const $btn = $wrapper.find('.js-card-text-toggle'); 425 426 const lineHeight = parseFloat($text.css('line-height')); 427 const maxHeight = lineHeight * 12; 428 429 // ÐÑовеÑÑем, пÑевÑÑÐ°ÐµÑ Ð»Ð¸ ÑекÑÑ 12 лиÐ
429½Ð¸Ð¹ 430 if ($text[0].scrollHeight > maxHeight) { 431 $text.addClass('read-more__text-cut'); 432 $btn.addClass('visible'); 433 } else { 434 $text.removeClass('read-more__text-cut'); 435 $btn.removeClass('visible'); 436 $wrapper.removeClass('open'); 437 } 438 }); 439 } 440 441 // ÐниÑиализаÑÐ¸Ñ ÐºÐ»Ð¸ÐºÐ° по кнопке 442 $('.js-card-text-toggle').off('click').on('click', function () { 443 const $btn = $(this); 444 const $wrapper = $btn.closest('.js-card-text-wrapper'); 445 $wrapper.toggleClass('open'); 446 }); 447 448 // ÐеÑвиÑÐ½Ð°Ñ Ð¿ÑовеÑка 449 checkReadMore(); 450 451 // ÐеÑеÑаÑÑÑÑ Ð¿Ñи ÑеÑайзе окна 452 window.addEventListener('resize', function () { 453 checkReadMore(); 454 }, { passive: true }); 455} 456 457 458 459function BonusElementListSite(){ 460 const catalogElements = document.querySelectorAll('.product-card__info'); 461 let productsData = []; 462 catalogElements.forEach((element, index) => { 463 if(element.querySelector('.product-card__prices').getAttribute('display-bonus') != 'Y'){ 464 let price = element.querySelector('.product-card__price')?.textContent; 465 price = price.replace(/\D/g, ''); 466 productsData.push({ 467 PRODUCT_ID: parseInt(element.getAttribute('data-id')), 468 PRICE: price, 469 }) 470 } 471 }); 472 if(productsData.length != 0){ 473 productsData = [...new Map(productsData.map(item => [item.PRODUCT_ID, item])).values()]; 474 $.ajax({ 475 url: "/local/ajax/loyality_product_bonus.php", 476 type: "POST", 477 dataType: 'json', 478 cache: false, 479 data: { 480 productsData: JSON.stringify(productsData), 481 answerBonus: 'Y' 482 }, 483 success: function (result) { 484 if (result && typeof result === 'object' && result.success == true) { 485 const declOfNum = (count, titles) => { 486 const cases = [2, 0, 1, 1, 1, 2]; 487 const mod100 = count % 100; 488 if (mod100 > 4 && mod100 < 20) { 489 return titles[2]; 490 } 491 const mod10 = count % 10; 492 return titles[(mod10 < 5) ? cases[mod10] : cases[5]]; 493 }; 494 Object.keys(result.data).forEach(productId => { 495 const bonusValue = result.data[productId]; 496 const productCard = document.querySelectorAll(`.product-card__info[data-id="${productId}"]`); 497 if (productCard) { 498 productCard.forEach((element, index) => { 499 if (element.querySelector('.product-card__prices').getAttribute('display-bonus') != 'Y') { 500 const pricesElement = element.querySelector('.product-card__prices'); 501 if (pricesElement ){ 502 const bonusBadgeFull = element.querySelector('.js-bonus-badge-count'); 503 if (bonusBadgeFull) { 504 const titles = ['бонÑÑ', 'бонÑÑа', 'бонÑÑов']; 505 const bonusText = '+' + bonusValue + ' ' + '<span>' + declOfNum(bonusValue, titles) + '</span>'; 506 bonusBadgeFull.innerHTML = bonusText; 507 } 508 element.querySelector('.product-card__prices').setAttribute('display-bonus', 'Y'); 509 } 510 } 511 }); 512 } 513 }); 514 } 515 }, 516 }); 517 } 518} 519 520//ÑÑлÑÐ¸Ð¿Ñ 521function createTooltip(trigger) { 522 const text = trigger.getAttribute('data-tooltip-title'); 523 const tooltip = document.createElement('div'); 524 tooltip.className = 'tooltip-content'; 525 tooltip.textContent = text; 526 document.body.appendChild(tooltip); 527 trigger._tooltip = tooltip; 528 return tooltip; 529} 530 531function showTooltip(trigger) { 532 hideAllTooltips(); 533 534 const tooltip = trigger._tooltip || createTooltip(trigger); 535 const rect = trigger.getBoundingClientRect(); 536 const tooltipWidth = tooltip.offsetWidth; 537 const tooltipHeight = tooltip.offsetHeight; 538 const padding = 8; 539 540 let top = rect.top - tooltipHeight - padding; 541 let left = rect.left + rect.width / 2 - tooltipWidth / 2; 542 543 if (top < padding) { 544 top = rect.bottom + padding; 545 tooltip.classList.add('bottom'); 546 } else { 547 tooltip.classList.remove('bottom'); 548 } 549 550 if (left < padding) left = padding; 551 const maxLeft = window.innerWidth - tooltipWidth - padding; 552 if (left > maxLeft) left = maxLeft; 553 554 tooltip.style.top = top + 'px'; 555 tooltip.style.left = left + 'px'; 556 tooltip.classList.add('is-active'); 557 558 const iconCenter = rect.left + rect.width / 2; 559 const arrowLeft = iconCenter - left; 560 tooltip.style.setProperty('--tooltip-arrow-left', arrowLeft + 'px'); 561} 562 563function hideAllTooltips() { 564 document.querySelectorAll('.tooltip-content.is-active').forEach(el => { 565 el.classList.remove('is-active'); 566 567 if (el.parentNode) { 568 el.parentNode.removeChild(el); 569 } 570 }); 571 572 document.querySelectorAll('.js-bonus-tooltip').forEach(trigger => { 573 if (trigger._tooltip) { 574 trigger._tooltip = null; 575 } 576 }); 577} 578 579function initTooltip(trigger) { 580 if (trigger.dataset.tooltipInited === '1') return; 581 trigger.dataset.tooltipInited = '1'; 582 583 trigger.addEventListener('click', e => { 584 e.stopPropagation(); 585 showTooltip(trigger); 586 }); 587 588 if (!('ontouchstart' in window)) { 589 trigger.addEventListener('mouseenter', () => showTooltip(trigger)); 590 trigger.addEventListener('mouseleave', hideAllTooltips); 591 } 592} 593 594function initBonusTooltips() { 595 document.querySelectorAll('.js-bonus-tooltip').forEach(trigger => { 596 initTooltip(trigger); 597 }); 598} 599 600function initAllPhoneInputs() { 601 const phoneInputs = document.querySelectorAll('.js-phone-mask');
602 phoneInputs.forEach(initSinglePhoneInput); 603} 604/* 605 * Ðоле ÑелеÑона заводиÑÑÑ Ð¿Ð¾ пеÑÐ²Ð¾Ð¼Ñ ÐºÐ°ÑаниÑ, а не пÑи загÑÑзке ÑÑÑаниÑÑ. 606 * 607 * ÐаÑка и вÑÐ±Ð¾Ñ ÑÑÑÐ°Ð½Ñ Ð¶Ð¸Ð²ÑÑ Ð² двÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÐ°Ñ Ð½Ð° 173 ÐÐ. ÐÑли заводиÑÑ Ð¿Ð¾Ð»Ðµ 608 * ÑÑазÑ, они пÑиезжаÑÑ Ð½Ð° каждой ÑÑÑаниÑе ÑайÑа â а поле ÑелеÑона в подвале 609 * еÑÑÑ Ð²ÐµÐ·Ð´Ðµ, и ÑÑогаÑÑ ÐµÐ³Ð¾ единиÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð¶Ð´Ñм каÑаниÑ: кÑо ÑелеÑон не 610 * вводиÑ, за него и не плаÑиÑ. 611 * 612 * ÐÑклÑÑениÑ, когда заводим ÑÑазÑ: 613 * 614 * â в поле Ñже ÑÑÐ¾Ð¸Ñ Ð½Ð¾Ð¼ÐµÑ: его нÑжно показаÑÑ Ð² пÑавилÑном виде, и коÑнÑÑÑÑÑ 615 * Ð¿Ð¾Ð»Ñ Ñеловек Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ ÑобиÑаÑÑÑÑ; 616 * â ÑÑдом Ð»ÐµÐ¶Ð¸Ñ ÑкÑÑÑое `NORMALIZED_PHONE`: ÑÑÑаниÑа живÑÑ Ñади номеÑа 617 * (ÑегиÑÑÑаÑиÑ, Ð²Ñ Ð¾Ð´), и ÑазобÑаннÑй Ð½Ð¾Ð¼ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑ ÐµÐ¹ навеÑнÑка. 618 * 619 * Ðа оÑоÑмлении заказа библиоÑеки подклÑÑÐµÐ½Ñ Ð·Ð°Ñанее Ñамим Ñаблоном, поÑÑÐ¾Ð¼Ñ 620 * Ñам ÑÑа оÑÑÑоÑка не ÑабоÑÐ°ÐµÑ Ð²Ð¾Ð²Ñе â поле заводиÑÑÑ ÑÑазÑ, как и бÑло. 621 */ 622function initSinglePhoneInput(input) { 623 if (!input) return; 624 if (input._iti) return; 625 if (!window.PhoneInput) { 626 return; 627 } 628 629 const container = input.closest('form, .reveal, .order-form, body'); 630 const hiddenInput = container 631 ? container.querySelector('input[name="NORMALIZED_PHONE"]') 632 : null; 633 634 const завеÑÑи = () => window.PhoneInput.init(input, { 635 value: input.value || '', 636 hiddenInput: hiddenInput 637 }); 638 639 const библиоÑекиÐаÐеÑÑе = typeof window.IMask !== 'undefined' 640 && typeof window.intlTelInput !== 'undefined'; 641 642 if (библиоÑекиÐаÐеÑÑе || input.value || hiddenInput) { 643 завеÑÑи(); 644 645 return; 646 } 647 648 input.addEventListener('focus', завеÑÑи, { once: true }); 649} 650 651//ÑÑнкÑÐ¸Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑогÑеÑÑивной Ñкидки 652function updatePromoHint(promo) { 653 const $block = $('.js-promo-hint'); 654 const $sum = $('.js-promo-hint-sum'); 655 const $discount = $('.js-promo-hint-discount'); 656 if (!promo) { 657 $block.addClass('hide'); 658 return; 659 } 660 $block.removeClass('hide'); 661 $sum.text(promo.REMAINING_SUMM); 662 let discountText = promo.DISCOUNT; 663 if (promo.UNIT === 'Perc') { 664 discountText += '%'; 665 } if (promo.UNIT === 'Perc') { 666 discountText = promo.DISCOUNT + '%'; 667 } else if (promo.UNIT === 'CurEach') { 668 discountText = promo.DISCOUNT + ' ' + знакÐалÑÑÑ() + ' на каждÑй ÑоваÑ'; 669 } else if (promo.UNIT === 'CurAll') { 670 discountText = promo.DISCOUNT + ' ' + знакÐалÑÑÑ() + ' на обÑÑÑ ÑÑÐ¼Ð¼Ñ ÑоваÑов'; 671 } 672 $discount.text(discountText); 673} 674// ÐÑименÑÐµÑ ÑÑÑÐ°Ð½Ñ Ð¸Ð· <select id="inputcountry"> ко вÑем полÑм .js-phone-mask 675function syncPhoneInputsFromCountrySelect() { 676 const select = document.getElementById('inputcountry') 677 || document.querySelector('select[name="COUNTRY"]'); 678 679 if (!select) return; 680 681 const iso2 = window.PhoneInput.bitrixToIso2(select.value); 682 syncPhoneInputsCountry(iso2); 683} 684 685// ÐÑименÑÐµÑ ÑказаннÑÑ ÑÑÑÐ°Ð½Ñ ÐºÐ¾ вÑем ÑелеÑоннÑм полÑм на ÑÑÑаниÑе(кÑоме попапа авÑоÑизаÑии) 686function syncPhoneInputsCountry(iso2, options) { 687 options = options || {}; 688 const force = options.force === true; 689 690 if (!iso2 || !window.PhoneInput || !window.PhoneInput.lockCountry) return; 691 692 document.querySelectorAll('.js-phone-mask').forEach(function (input) { 693 if (input.closest('#auth')) return; 694 if (input.classList.contains('is-influence')) return; 695 if (!input._iti) return; 696 697 input._iti.promise.then(function () { 698 // Ðез force еÑли в поле валиднÑй Ð½Ð¾Ð¼ÐµÑ Ð´ÑÑгой ÑÑÑанÑ, оÑÑавлÑем его. 699 // 700 // СпÑаÑиваем ÑеÑез PhoneInput, а не Ñ intl-tel-input напÑÑмÑÑ: Ñ 701 // оÑложенной загÑÑзкой ÑÑÐ¸Ð»Ð¸Ñ ÐµÐ³Ð¾ `isValidNumber()` бÑоÑÐ°ÐµÑ Ð¸ÑклÑÑение, 702 // а не оÑвеÑÐ°ÐµÑ Â«Ð½ÐµÑ». ÐдеÑÑ ÑÑо обÑÑвало обеÑание, и ÑÑÑана на поле не 703 // ÑикÑиÑовалаÑÑ Ð²Ð¾Ð²Ñе â поймано в конÑоли ÑÑÑаниÑÑ Ð¾ÑоÑÐ¼Ð»ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ð°. 704 if (!force && window.PhoneInput.isValid(input)) { 705 const currentCountry = input._iti.getSelectedCountryData(); 706 if (currentCountry && currentCountry.iso2) { 707 window.PhoneInput.lockCountry(input, currentCountry.iso2); 708 return; 709 } 710 } 711 712 // С force или еÑли поле пÑÑÑое лоÑим на запÑоÑеннÑÑ 713 window.PhoneInput.lockCountry(input, iso2); 714 }); 715 }); 716} 717window.initAllPhoneInputs = initAllPhoneInputs; 718window.syncPhoneInputsCountry = syncPhoneInputsCountry; 719window.syncPhoneInputsFromCountrySelect = syncPhoneInputsFromCountrySelect; 720 721 722/**
723 * ÐÑпÑавка Ñели в ÑекламнÑй пикÑелÑ. 724 * 725 * ÐÑовеÑÑÑÑ ÑолÑко налиÑие обÑекÑа мало: в Ð±Ð¾Ñ `generalPixel` ÑÑÑеÑÑвÑеÑ, а 726 * `postClick` Ñ Ð½ÐµÐ³Ð¾ не ÑÑнкÑÐ¸Ñ â каждÑй клик по «РкоÑзинÑ» ÑонÑл 727 * необÑабоÑаннÑй TypeError. ÐÑовеÑка пеÑенеÑена в Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¾ÑпÑавки еÑÑ Ð¸ 728 * поÑомÑ, ÑÑо пикÑÐµÐ»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑаеÑÑÑ ÑÑоÑонним ÑкÑипÑом и к моменÑÑ Ð½Ð°Ð²ÐµÑÐ¸Ð²Ð°Ð½Ð¸Ñ 729 * обÑабоÑÑиков Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ гоÑов: ÑанÑÑе в ÑÑом ÑлÑÑае Ñели не оÑпÑавлÑлиÑÑ 730 * вовÑе. 731 */ 732function trackPixelGoal(code) { 733 if (typeof generalPixel === 'undefined' || typeof generalPixel.postClick !== 'function') { 734 return; 735 } 736 737 generalPixel.postClick(code); 738} 739 740function initPixelGoal(){ 741 // ÐÑпÑавка ÑоÑÐ¼Ñ ÐолÑÑиÑÑ ÑÐºÐ¸Ð´ÐºÑ 742 $(document).on('click',"#compile-lh-widget form[action='lh_banner'] input.widget--submit", function(e) { 743 let form = $(this).parents('form'); 744 let EmailValue = form.find('input[name="email"]').val(); 745 let agreementCheckboxValue = form.find('input[name="agreement"]').is(':checked'); 746 let errorWidgetText = form.find('.widget--error_text'); 747 if(EmailValue && EmailValue != '' && agreementCheckboxValue && errorWidgetText.length != 0 && errorWidgetText.hasClass('visibility_none')){ 748 trackPixelGoal('a1'); 749 } 750 }); 751 // Ðнопка "РкоÑзинÑ" 752 $(document).on('click','.product-card [data-action="item-card-add"]', function(e) { 753 trackPixelGoal('a2'); 754 }); 755 // Ðнопка "ÐÑпиÑÑ Ð² 1 клик" 756 $(document).on('click','.product-card .product-btn.product-btn_buy', function(e) { 757 trackPixelGoal('a3'); 758 }); 759 // Ðнопка "ÐÑойÑи ÑеÑÑ" 760 $(document).on('click','.menu-dropdown__items .test__btn', function(e) { 761 trackPixelGoal('a4'); 762 }); 763} 764 765// ÐакÑÑÑие окна видеооÑзÑва кÑеÑÑиком. ÐÑкÑÑваÑÑий код Ð»ÐµÐ¶Ð¸Ñ Ð² ÑобÑанном 766// main.js и ÑÐ¼ÐµÐµÑ Ð·Ð°ÐºÑÑваÑÑ Ð¾ÐºÐ½Ð¾ ÑолÑко кликом по подложке и по Esc: на 767// ÑелеÑоне видео Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð¾ÑÑи веÑÑ ÑкÑан, а клавиаÑÑÑÑ Ð½ÐµÑ â вÑйÑи из 768// пÑоÑмоÑÑа бÑло неÑем. 769function initVideoReviewModalClose() {
770 var $overlay = $('.js-modal-video-review'); 771 772 if ($overlay.length === 0) { 773 return; 774 } 775 776 $overlay.on('click', '.js-modal-video-close', function (e) { 777 e.preventDefault(); 778 779 var video = $overlay.find('.js-modal-video')[0]; 780 781 $overlay.removeClass('active'); 782 783 // ÐаÑза и ÑбÑÐ¾Ñ Ð¸ÑÑоÑника â поÑле анимаÑии ÑкÑÑÑиÑ, инаÑе видно, 784 // как ÐºÐ°Ð´Ñ Ð¿ÑÐ¾Ð¿Ð°Ð´Ð°ÐµÑ ÑанÑÑе Ñамого окна. 785 setTimeout(function () { 786 if (video) { 787 video.pause(); 788 video.removeAttribute('src'); 789 video.load(); 790 } 791 792 $('body').removeClass('over'); 793 }, 300); 794 }); 795} 796 797 798// Ðнопка коÑÐ·Ð¸Ð½Ñ Ð² нижнем Ð¼ÐµÐ½Ñ Ð²ÐµÐ´ÑÑ Ð½Ð° ÑÑÑаниÑÑ ÐºÐ¾ÑзинÑ, а окно повеÑÑ Ð½ÐµÑ 799// оÑкÑÑÐ²Ð°ÐµÑ Foundation. ÐеÑÐµÑ Ð¾Ð´ оÑменÑем ÑолÑко Ñогда, когда окно ÑеалÑно 800// гоÑово оÑкÑÑÑÑÑÑ: еÑли ÑÑжÑлÑй бандл Ñо ÑкÑипÑами не Ð´Ð¾ÐµÑ Ð°Ð» â а на Ð¿Ð»Ð¾Ñ Ð¾Ð¹ 801// ÑвÑзи и ÑеÑез VPN Ñак бÑваеÑ, â нажаÑие ÑÐ²Ð¾Ð´Ð¸Ñ Ð½Ð° ÑÑÑаниÑÑ, вмеÑÑо Ñого 802// ÑÑÐ¾Ð±Ñ Ð½Ðµ делаÑÑ Ð½Ð¸Ñего. У оÑÑалÑнÑÑ Ð¿ÑнкÑов Ð¼ÐµÐ½Ñ ÑÑÑлки еÑÑÑ, поÑÑÐ¾Ð¼Ñ 803// «не ÑабоÑÐ°ÐµÑ ÑолÑко коÑзина» и вÑглÑдело загадкой. 804function initCartLinkFallback() { 805 document.addEventListener('click', function (event) { 806 var link = event.target.closest ? event.target.closest('.hero-nav__link_cart') : null; 807 808 if (!link) { 809 return; 810 } 811 812 if (!isModalReady('cart')) { 813 return; 814 } 815 816 event.preventDefault(); 817 openCartModal(link.getAttribute('href') || '#cart'); 818 }); 819} 820 821/* 822 * Ðкно коÑÐ·Ð¸Ð½Ñ Ð¾ÑкÑÑваем Ñами, а не надеемÑÑ, ÑÑо Foundation Ð¿Ð¾Ð¹Ð¼Ð°ÐµÑ Ð½Ð°Ð¶Ð°Ñие. 823 * 824 * РанÑÑе Ð¼Ñ ÑолÑко оÑменÑли пеÑÐµÑ Ð¾Ð´ по ÑÑÑлке, а оÑкÑÑÑÑ Ð¾ÐºÐ½Ð¾ должен бÑл 825 * обÑабоÑÑик Foundation, навеÑеннÑй на докÑÐ¼ÐµÐ½Ñ ÑеÑез `data-open`. ÐÐµÐ¶Ð´Ñ 826 * нажаÑием и ÑÑим обÑабоÑÑиком ÑÑÐ¾Ð¸Ñ Ð²ÑÑ ÑепоÑка вÑплÑÑÐ¸Ñ ÑобÑÑиÑ, и лÑбой 827 * `stopPropagation` по доÑоге ÐµÑ Ð¾Ð±ÑÑваеÑ: пеÑÐµÑ Ð¾Ð´ Ñже оÑменÑн, а окно не 828 * оÑкÑÑлоÑÑ â на ÑкÑане не пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð½Ð¸Ñего. ÐÐ»Ð°Ð´ÐµÐ»ÐµÑ Ð½Ð°Ð±Ð»Ñдал ÑÑо на айÑоне 829 * 6 ÑенÑÑбÑÑ 2026, пÑи Ñом ÑÑо оÑÑалÑнÑе пÑнкÑÑ Ð¼ÐµÐ½Ñ ÑабоÑали: Ñ Ð½Ð¸Ñ Ð¾Ð±ÑÑнÑе 830 * ÑÑÑлки, оÑменÑÑÑ Ñам неÑего. 831 * 832 * ТепеÑÑ Ð·Ð¾Ð²Ñм оÑкÑÑÑие напÑÑмÑÑ. РпÑовеÑÑем ÑезÑлÑÑаÑ: еÑли ÑеÑез полÑекÑÐ½Ð´Ñ 833 * окна на ÑкÑане Ð½ÐµÑ â пеÑÐµÑ Ð¾Ð´Ð¸Ð¼ по ÑÑÑлке пÑнкÑа менÑ. Ðна ведÑÑ Ð½Ð° «#cart», а 834 * Ñ Ð¾ÐºÐ½Ð° ÑÑÐ¾Ð¸Ñ `data-deep-link="true"`, Ñо еÑÑÑ ÑкоÑÑ Ð¾ÑкÑÑÐ²Ð°ÐµÑ ÐµÐ³Ð¾ же, ÑолÑко 835 * дÑÑгим пÑÑÑм. УводиÑÑ Ð½Ð° /personal/cart/ нелÑзÑ: Ñа ÑÑÑаниÑа ÑвÑÑÑÑана инаÑе 836 * и показÑÐ²Ð°ÐµÑ Ð½Ðµ ÑÑ ÐºÐ¾ÑзинÑ. 837 */ 838function openCartModal(href) { 839 var окно = document.getElementById('cart'); 840 841 var видно = function () { 842 return окно && getComputedStyle(окно).display !== 'none'; 843 }; 844 845 try { 846 if (!видно()) { 847 jQuery(окно).foundation('open'); 848 } 849 } catch (e) { 850 window.location.href = href; 851 852 return; 853 } 854 855 setTimeout(function () { 856 if (!видно()) { 857 window.location.href = href; 858 } 859 }, 500); 860} 861 862/** ÐоÑово ли модалÑное окно: еÑÑÑ Ð² ÑазмеÑке и поднÑÑо Foundation. */ 863function isModalReady(id) { 864 var modal = document.getElementById(id); 865 866 if (!modal || !window.jQuery || !jQuery.fn || !jQuery.fn.foundation) { 867 return false;
868 } 869 870 return !!jQuery(modal).data('zfPlugin'); 871} 872 873/** 874 * Ðнак валÑÑÑ Ð¼Ð°Ð³Ð°Ð·Ð¸Ð½Ð°: «â½Â» на ÑоÑÑийÑком ÑайÑе, «â¸Â» на ÐºÐ°Ð·Ð°Ñ ÑÑанÑком. 875 * 876 * ÐеÑаÑÐ°ÐµÑ Ñаблон в `window.WAU_CURRENCY_SIGN`: ÑÐ°Ð¹Ð»Ñ Ñ Ð¾Ð±Ð¾Ð¸Ñ Ð¼Ð°Ð³Ð°Ð·Ð¸Ð½Ð¾Ð² обÑие, 877 * и ÑÑблÑвÑй знак на виÑÑине, ÑоÑгÑÑÑей в Ñенге, пÑоÑÑо невеÑен. 878 */ 879function знакÐалÑÑÑ() { 880 return window.WAU_CURRENCY_SIGN || 'â½'; 881}
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.