1document.addEventListener('DOMContentLoaded', function (event) { 2 // header modal contact 3 4 /* 5 const buttonModalContact = document.getElementById('button-modal-contact') 6 const modalContact = document.getElementById('modal-contact') 7 8 buttonModalContact.addEventListener('click', () => { 9 buttonModalContact.classList.toggle('header-top__item_show') 10 modalContact.classList.toggle('modal-contact_show') 11 }) 12 */ 13 14 /* 15 const appBackCall = document.getElementById('app-back-call') 16 const buttonBackCall = document.getElementById('back-call-btn') 17 const buttonBackCallMobile = document.getElementById('button-back-call-mobile') 18 buttonBackCall.addEventListener('click', function () { 19 modalContact.classList.remove('modal-contact_show') 20 appBackCall.style.display = 'block' 21 }) 22 buttonBackCallMobile.addEventListener('click', function () { 23 modalContact.classList.remove('modal-contact_show') 24 appBackCall.style.display = 'block' 25 }) 26 27 // close header modal contect (click outside) 28 29 document.addEventListener('click', outsideEvtListenerModalContactHeader) 30 //document.addEventListener('click', outsideBackCall) 31 32 function outsideBackCall(event){ 33 const modal = appBackCall.querySelector('.v-modal__modal') 34 if ( 35 modal.contains(event.target) || 36 modal === event.target || 37 buttonBackCallMobile === event.target || 38 buttonBackCallMobile.contains(event.target) || 39 buttonBackCall === event.target || 40 buttonBackCall.contains(event.target) 41 ) { 42 console.log('ÐÑо ÑоÑма') 43 console.log(event) 44 return false 45 } 46 console.log('ÑкÑÑÑÑ') 47 appBackCall.style.display = 'none'; 48 } 49 50 function outsideEvtListenerModalContactHeader(event) { 51 if ( 52 modalContact.contains(event.target) || 53 modalContact === event.target || 54 buttonModalContact === event.target || 55 buttonModalContact.contains(event.target) 56 ) { 57 return false 58 } 59 60 buttonModalContact.classList.remove('header-top__item_show') 61 modalContact.classList.remove('modal-contact_show') 62 } 63 */ 64 // menu header 65 const menuItems = document.querySelectorAll('.menu__item') 66 const menuAdditional = document.querySelectorAll('.menu-additional') 67 const overlay = document.getElementById('custom-overlay') 68 menuItems.forEach((element, index) => { 69 element.addEventListener('click', (event) => { 70 const currentElement = element 71 const activeElement = document.querySelector('.menu__item_open') 72 73 if (activeElement === currentElement) { 74 activeElement.classList.remove('menu__item_open') 75 overlay.classList.remove('opened') 76 menuAdditional.forEach((elem, ind) => { 77 if (index !== ind) elem.classList.remove('menu-additional_show') 78 }) 79 menuAdditional[index]?.classList.toggle('menu-additional_show') 80 } else { 81 if (activeElement) { 82 activeElement.classList.remove('menu__item_open') 83 } 84 currentElement.classList.add('menu__item_open') 85 86 overlay.classList.add('opened') 87 88 menuAdditional.forEach((elem, ind) => { 89 if (index !== ind) 90 elem.classList.remove('menu-additional_show') 91 }) 92 menuAdditional[index].classList.toggle('menu-additional_show') 93 } 94 }) 95 }) 96 97 98 // ÐакÑÑÑие Ð¼ÐµÐ½Ñ Ð¿Ð¾ ÐºÐ»Ð¸ÐºÑ Ð²Ð½Ðµ Ð¼ÐµÐ½Ñ 99 document.addEventListener('click', outsideEvtListener) 100 101 function outsideEvtListener(evt) { 102 const menuAdditional = document.querySelector('.menu-additional_show') 103 const activeElement = document.querySelector('.menu__item_open') 104 if (menuAdditional) { 105 const menu = document.querySelector('.menu-new') 106 if ( 107 evt.target === menu || 108 menu?.contains(evt.target) || 109 evt.target === menuAdditional || 110 menuAdditional?.contains(evt.target) 111 ) { 112 // клик внÑÑÑи 113 return 114 } 115 116 activeElement.classList.remove('menu__item_open') 117 menuAdditional.classList.remove('menu-additional_show') 118 overlay.classList.toggle('opened') 119 } 120 } 121 122 overlay.addEventListener('click', function () { 123 menuAdditional.classList.remove('menu-additional_show') 124 overlay.classList.remove('opened') 125 }) 126 127 // dropdown mobile footer 128 const dropdownButton = document.querySelectorAll('.dropdown__button') 129 const dropdownList = document.querySelectorAll('.dropdown__list') 130 131 for (let i = 0; i < dropdownButton.length; i++) { 132 dropdownButton[i].addEventListener('click', function () { 133 dropdownList[i].classList.toggle('dropdown__list_show') 134 }) 135 } 136 137 // footer-menu dropdown mobile 138 139 const menuDropdownButton = document.querySelectorAll( 140 '.footer-menu-dropdown__button' 141 ) 142 const dropdownListMenu = document.querySelectorAll( 143 '.footer-menu-dropdown__list' 144 ) 145 146 for (let i = 0; i < menuDropdownButton.length; i++) { 147 menuDropdownButton[i].addEventListener('click', function () { 148 dropdownListMenu[i].classList.toggle('footer-menu-dropdown__list_show') 149 }) 150 } 151 152 // header burger 153 154 const headerBurger = document.getElementById('header-burger') 155 const headerLogoWrapper = document.getElementById('header-logo-mobile') 156 const headerMenuMobile = document.getElementById('header-menu-mobile') 157 headerBurger.addEventListener('click', () => { 158 headerBurger.classList.toggle('header-burger_show') 159 headerMenuMobile.classList.toggle('header-menu-mobile_show') 160 headerLogoWrapper.classList.toggle('header-logo-mobile_show') 161 document.body.classList.toggle('no-scroll') 162 }) 163 164 165 // header-menu dropdown mobile 166 167 const menuDropdownButtonHeader = document.querySelectorAll( 168 '.header-menu-dropdown__button' 169 ) 170 const dropdownListMenuHeader = document.querySelectorAll( 171 '.header-menu-dropdown__list' 172 ) 173 174 for (let i = 0; i < menuDropdownButtonHeader.length; i++) { 175 menuDropdownButtonHeader[i].addEventListener('click', function () { 176 dropdownListMenuHeader[i].classList.toggle('header-menu-dropdown__list_show') 177 }) 178 } 179 // currency dropdown 180 181 function outsideEvtListenerDropdownCurrency(event) { 182 const dropdownsWrapper = document.querySelectorAll( 183 '.mp-rates-dropdown-wrap' 184 ) 185 186 if (dropdownsWrapper.length) { 187 dropdownsWrapper.forEach(function (dropdown) { 188 const button = dropdown.querySelector('.mp-rates-wrapper') 189 const list = dropdown.querySelector('.mp-rates__dropdown') 190 191 if (dropdown.contains(event.target)) { 192 return 193 } 194 195 button.classList.remove('mp-rates-wrapper_click') 196 list.classList.remove('mp-rates__dropdown_show') 197 }) 198 } 199 } 200 201 document.addEventListener('click', outsideEvtListenerDropdownCurrency) 202 203 const changeCurrenctEvent = () => { 204 // ÐмиÑаÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ð±Ð¼ÐµÐ½Ð° валÑÑ 205 const event = new Event('keyup'); 206 const elem = document 207 .querySelector('.custom-tabs-content.opened') 208 .querySelector('.get-money'); 209 if (elem) 210 elem.dispatchEvent(event); 211 } 212 213 const onChangeCurrency = (currencyBlock) => { 214 const currencyItems = currencyBlock.querySelectorAll( 215 '.mp-rates__dropdown__item' 216 ) 217 218 const dropDown = currencyBlock.querySelector('.mp-rates__dropdown') 219 220 const activeRates = currencyBlock.querySelector('.mp-rates-wrapper') 221 const flagIcon = currencyBlock.querySelector('.mp-rates__flag img') 222 const activeReateCurrencyText = activeRates.querySelector( 223 '.mp-rates__currency' 224 ) 225
226 currencyItems.forEach((item) => { 227 item.addEventListener('click', function (event) { 228 currencyBlock 229 .querySelector('.mp-rates__dropdown__item_hide') 230 .classList.remove('mp-rates__dropdown__item_hide') 231 item.classList.add('mp-rates__dropdown__item_hide') 232 flagIcon.src = `/local/templates/itachMain/assets/images/flag/${this.dataset.value}.svg` 233 activeRates.dataset.selected = this.dataset.value 234 activeReateCurrencyText.textContent = this.dataset.value.toUpperCase() 235 236 dropDown.classList.remove('mp-rates__dropdown_show') 237 activeRates.classList.remove('mp-rates-wrapper_click') 238 changeCurrenctEvent() 239 }) 240 }) 241 } 242 243 // Revers currency 244 245 const reverseCurrency = (tab, currencyGive, currencyGet) => { 246 const buttonReverce = tab.querySelector('.btn-calc') 247 248 buttonReverce.addEventListener('click', () => { 249 const buttonCurrencySelectGive = 250 currencyGive.querySelector('.mp-rates-wrapper') 251 const buttonCurrencySelectGet = 252 currencyGet.querySelector('.mp-rates-wrapper') 253 const currencyValueGive = buttonCurrencySelectGive.dataset.selected 254 const currencyValueGet = buttonCurrencySelectGet.dataset.selected 255 const currentTextGive = currencyGive.querySelector( 256 '.mp-rates__currency' 257 ).textContent 258 const currentTextGet = currencyGet.querySelector( 259 '.mp-rates__currency' 260 ).textContent 261 262 const iconGive = (currencyGive.querySelector( 263 '.mp-rates__flag img' 264 ).src = `/local/templates/itachMain/assets/images/flag/${currencyValueGet}.svg`) 265 const iconGet = (currencyGet.querySelector( 266 '.mp-rates__flag img' 267 ).src = `/local/templates/itachMain/assets/images/flag/${currencyValueGive}.svg`) 268 269 buttonCurrencySelectGive.dataset.selected = currencyValueGet 270 buttonCurrencySelectGet.dataset.selected = currencyValueGive 271 currencyGive.querySelector('.mp-rates__currency').textContent = 272 currentTextGet 273 currencyGet.querySelector('.mp-rates__currency').textContent = 274 currentTextGive 275 changeCurrenctEvent() 276 }) 277 } 278 279 const sectionExchangeRates = document.getElementById('exchange_rates') 280 if (sectionExchangeRates){ 281 const exchangeTabs = sectionExchangeRates.querySelectorAll( 282 '.custom-tabs-content' 283 ) 284 if (exchangeTabs.length > 0){ 285 for (let i = 0; i < exchangeTabs.length; i++) { 286 const currencyGive = exchangeTabs[i].querySelector('.currency-calc-give') 287 const currencyGet = exchangeTabs[i].querySelector('.currency-calc-get') 288 // ÐеÑаем меÑÐ¾Ð´Ñ Ð½Ð° ÑабоÑÑ Ñо ÑпиÑком валÑÑ 289 onChangeCurrency(currencyGive) 290 onChangeCurrency(currencyGet) 291 reverseCurrency(exchangeTabs[i], currencyGive, currencyGet) 292 } 293 } 294 } 295 296 297 // Ðелим ÑиÑло на ÑазÑÑÐ´Ñ 298 function digits_float(target){ 299 val = $(target).val().replace(/[^0-9.]/g, ''); 300 if (val.indexOf(".") != '-1') { 301 val = val.substring(0, val.indexOf(".") + 3); 302 } 303 val = val.replace(/^0+/, ''); // Удаление нÑлей внаÑале ÑÑÑоки 304 val = val.replace(/\B(?=(\d{3})+(?!\d))/g, ' '); 305 $(target).val(val); 306 } 307 308 309 // ÐÑÐ»Ð¾Ð¶ÐµÐ½Ð½Ð°Ñ Ð·Ð°Ð³ÑÑзка, debounce 310 function debounce(func, ms) { 311 let timeout; 312 return function() { 313 clearTimeout(timeout); 314 timeout = setTimeout(() => func.apply(this, arguments), ms); 315 }; 316 } 317 318 // ÐеÑод подÑÑеÑа кÑÑÑа 319 320 let inputGetMoney = document.querySelectorAll('.get-money') 321 if (inputGetMoney) { 322 inputGetMoney.forEach((element) => { 323 element.addEventListener('keyup', debounce((e) => getNewMoney(e), 300)) 324 }) 325 } 326 let inputGetMoneySecond = document.querySelectorAll('.new-money') 327 if (inputGetMoneySecond) { 328 inputGetMoneySecond.forEach((element) => { 329 element.addEventListener('keyup', debounce((e) => getNewMoney(e), 300)) 330 }) 331 } 332 333 334 function getNewMoney(e) { 335 let requestURL = '/local/templates/itachMain/includes/ajax/getNewMoney.php' 336 let currentCurrency = ''; 337 let inputNewMoney = ''; 338 digits_float(e.target); 339 if(e.target.classList.contains('get-money')){ 340 currentCurrency = document 341 .querySelector('.custom-tabs-content.opened').querySelector('.mp-rates-wrapper.sale').getAttribute('data-selected') 342 inputNewMoney = document 343 .querySelector('.custom-tabs-content.opened') 344 .querySelector('.new-money') 345 } 346 if(e.target.classList.contains('new-money')){ 347 currentCurrency = document 348 .querySelector('.custom-tabs-content.opened').querySelector('.mp-rates-wrapper.buy').getAttribute('data-selected') 349 inputNewMoney = document 350 .querySelector('.custom-tabs-content.opened') 351 .querySelector('.get-money') 352 } 353 let currentValue = e?.target?.value || document 354 .querySelector('.custom-tabs-content.opened') 355 .querySelector('.get-money').value 356 let saleCurrencyCode = document 357 .querySelector('.custom-tabs-content.opened') 358 .querySelector('.mp-rates-wrapper.sale') 359 .querySelector('.mp-rates__currency').innerText 360 let buyCurrencyCode = document 361 .querySelector('.custom-tabs-content.opened') 362 .querySelector('.mp-rates-wrapper.buy') 363 .querySelector('.mp-rates__currency').innerText 364 let getMoney = true 365 /*if (e && e.target.classList.contains('new-money')) { 366 getMoney = false 367 currentValue = document 368 .querySelector('.custom-tabs-content.opened') 369 .querySelector('.new-money').value 370 inputNewMoney = document 371 .querySelector('.custom-tabs-content.opened') 372 .querySelector('.get-money') 373 saleCurrencyCode = document 374 .querySelector('.custom-tabs-content.opened') 375 .querySelector('.mp-rates-wrapper.buy') 376 .querySelector('.mp-rates__currency').innerText 377 buyCurrencyCode = document 378 .querySelector('.custom-tabs-content.opened') 379 .querySelector('.mp-rates-wrapper.sale') 380 .querySelector('.mp-rates__currency').innerText 381 }*/ 382 383 let textInfo = document 384 .querySelector('.custom-tabs-content.opened') 385 .querySelector('.rates-info p') 386 let textPlusInfo = document 387 .querySelector('.custom-tabs-content.opened') 388 .querySelector('.rates-info .rates-second-info') 389 let bestCurr = document 390 .querySelector('.custom-tabs-content.opened') 391 .querySelector('.rates-mark__content_value') 392 let showCurr = document 393 .querySelector('.custom-tabs-content.opened') 394 .querySelector('.rates-mark__content_text') 395 //let saleCurrencyCode = document.querySelector('.custom-tabs-content.opened').querySelector('.mp-rates-wrapper.sale').getAttribute('data-selected').toUpperCase() 396 //let buyCurrencyCode = document.querySelector('.custom-tabs-content.opened').querySelector('.mp-rates-wrapper.buy').getAttribute('data-selected').toUpperCase() 397 let currentType = document 398 .querySelector('.basic-tab.custom-tab.active') 399 .getAttribute('data-type') 400 let formData = new FormData() 401 formData.append('currentValue', currentValue) 402 formData.append('currentCurrency', currentCurrency) 403 formData.append('saleCurrencyCode', saleCurrencyCode) 404 formData.append('buyCurrencyCode', buyCurrencyCode) 405 formData.append('currentType', currentType) 406 const xhr = new XMLHttpRequest() 407 xhr.open('POST', requestURL) 408 xhr.responseType = 'json' 409 xhr.onload = function () { 410 if (xhr.status !== 200) { 411 return 412 } 413 let response = xhr.response 414 inputNewMoney.value = response.price 415 textInfo.innerText = response.textInfo 416 bestCurr.innerText = response.bestCurr 417 showCurr.innerText = response.showCurr 418 if (response.currentType !== 6) { 419 textPlusInfo.innerHTML = response.textPlusInfo 420 } 421 } 422 xhr.send(formData) 423 } 424 425 426 427 if (document.querySelector('.custom-tabs-content.opened')) 428 changeCurrenctEvent() 429 let customTabs = document.querySelectorAll('.custom-tab') 430 if (customTabs.length > 0) 431 {
432 customTabs.forEach((element) => { 433 element.addEventListener('click', function() { 434 setTimeout(changeCurrenctEvent, 500) 435 }) 436 }) 437 } 438 439 //ÐбÑезаем ÑекÑÑ Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑобÑÑÐ¸Ñ 440 441 const cutText = (element) => { 442 const maxLength = 80 443 console.log(element.innerText.trim().length) 444 if (element.innerText.trim().length>maxLength){ 445 const result = element.innerText.trim().substring(0, maxLength) + '...' 446 element.textContent = result} 447 } 448 449 const eventContainer = document.querySelector('.events-info-slider') 450 if (eventContainer){ 451 const eventList = eventContainer.querySelectorAll('.mp-events__item') 452 453 eventList.forEach((element) => { 454 let description = element.querySelector('.mp-events__item_description') 455 cutText(description) 456 }) 457 } 458})
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.