1BX.ready(function(){ 2 BX.addCustomEvent('onCounterGoals', function(eventdata){ 3 if(typeof eventdata != 'object') 4 eventdata = {goal: ''}; 5 6 if(typeof eventdata.goal != 'string') 7 eventdata.goal = ''; 8 9 if(eventdata.goal) 10 { 11 window.dataLayer = window.dataLayer || []; 12 if(BX.arMobecanOptions['YA_GOALS'] == 'Y' && BX.arMobecanOptions['YA_COUNTER_ID']) 13 { 14 var idCounter = BX.arMobecanOptions['YA_COUNTER_ID'], obCounter; 15 idCounter = parseInt(idCounter); 16 17 if(idCounter){ 18 try{ 19 obCounter = window['yaCounter'+idCounter]; 20 if(obCounter){ 21 if(typeof ym != 'undefined'){ 22 ym(idCounter,'reachGoal', eventdata.goal);//new 23 }else{ 24 obCounter.reachGoal(eventdata.goal);//old 25 } 26 } 27 }catch(e){ 28 console.error(e) 29 } 30 } 31 else 32 { 33 console.info('Bad counter id!', idCounter); 34 } 35 } 36 window.dataLayer.push({'event': eventdata.goal}); 37 } 38 else 39 { 40 console.info('Bad even goal!', 'undefined'); 41 } 42 }); 43 BX.addCustomEvent('onInitSlideSwiper', function(eventdata){ 44 if(typeof eventdata != 'object') 45 eventdata = {obname: ''}; 46 if(typeof eventdata.obname != 'string') 47 eventdata.obname = ''; 48 if(eventdata.obname){ 49 window.initSlideSwiper(eventdata.obname); 50 } 51 }); 52}); 53 54//ajax 55$.fn.ajaxForm = function(settings){ 56 settings = $.extend({ 57 requiredInputs: '.req', 58 statusEmptyText: 'ÐаполниÑе обÑзаÑелÑнÑе полÑ', 59 disableButtonAfterSend: true, 60 showstatus: true, 61 start: function(holder,form,data){}, 62 success: function(holder,form,data){}, 63 complete: function(holder,form,data){} 64 }, settings); 65 66 $(this).each(function(index, el) { 67 var holder = $(this); 68 var form = $("form", holder); 69 var status = $('.status', holder).length ? $('.status', holder).hide() : $('<div>').addClass('status').prependTo(form).hide(); 70 var button = $('button[type=submit]', form); 71 var reqInputs = $(settings.requiredInputs, form); 72 var file = $('input[type=file]', form); 73 $('input[name=e-mail]', form).val(''); 74 75 form.on('submit', function(event) { 76 event.preventDefault(); 77 var inputError = false; 78 79 reqInputs.each(function(){ 80 var ths = $(this); 81 if(ths.attr('disabled') == 'disabled'){ 82 return; 83 } 84 if(!ths.val() || ths.val() == '' || (ths.is(':checkbox') && !ths.is(':checked'))){ 85 inputError = true; 86 ths.parent().parent().addClass('is-invalid'); 87 ths.addClass('is-error'); 88 if(settings.statusEmptyText) {
89 status.fadeIn().html(settings.statusEmptyText).addClass('error'); 90 } 91 ths.off('focus.req').on('focus.req', function(event) { 92 status.fadeOut(); 93 ths.parent().parent().removeClass('is-invalid').addClass('is-valid'); 94 ths.removeClass('is-error'); 95 }); 96 } 97 }); 98 99 if(!inputError){ 100 button.attr('disabled', 'disabled').addClass('disabled'); 101 settings.start(holder, form); 102 if(file.length){ 103 if(form){ 104 $.ajax({ 105 url: form.attr('action'), 106 type: 'POST', 107 data: new FormData(form.get(0)), 108 async: false, 109 cache: false, 110 contentType: false, 111 processData: false, 112 success: function(data){ 113 button.removeAttr('disabled').removeClass('disabled'); 114 if(data.status == "success"){ 115 status.removeClass('error').addClass('success'); 116 settings.success(holder,form,data); 117 if(settings.disableButtonAfterSend){ 118 button.addClass('disabled').attr('disabled', 'disabled'); 119 } 120 }else{ 121 status.removeClass('success').addClass('error'); 122 } 123 if(settings.showstatus){ 124 status.fadeIn().html(data.message); 125 } 126 settings.complete(holder,form,data); 127 setTimeout(function () { 128 status.fadeOut(); 129 }, 2000); 130 window.initReCaptchaToken(); 131 }, 132 error: function(){ 133 window.initReCaptchaToken(); 134 status.fadeIn().html('ÐÑибка ÑеÑвеÑа. ÐовÑоÑиÑе позже.'); 135 button.removeAttr('disabled').removeClass('disabled'); 136 }, 137 }); 138 } 139 }else{ 140 $.ajax({
141 url: form.attr('action'), 142 type: form.attr('method'), 143 dataType: 'JSON', 144 data: form.serialize(), 145 }) 146 .done(function(data) { 147 button.removeAttr('disabled').removeClass('disabled'); 148 if(data.status == "success"){ 149 status.removeClass('error').addClass('success'); 150 settings.success(holder,form,data); 151 if(settings.disableButtonAfterSend){ 152 button.addClass('disabled').attr('disabled', 'disabled'); 153 } 154 }else{ 155 status.removeClass('success').addClass('error'); 156 } 157 if(settings.showstatus){ 158 status.fadeIn().html(data.message); 159 } 160 settings.complete(holder,form,data); 161 setTimeout(function () { 162 status.fadeOut(); 163 }, 2000); 164 window.initReCaptchaToken(); 165 }) 166 .fail(function(data) { 167 window.initReCaptchaToken(); 168 status.fadeIn().html('ÐÑибка ÑеÑвеÑа. ÐовÑоÑиÑе позже.'); 169 button.removeAttr('disabled').removeClass('disabled'); 170 }); 171 } 172 } 173 }); 174 }); 175}; 176window.initReCaptchaToken = () => { 177 if(typeof grecaptcha === 'object' && BX.arMobecanOptions.G_SITE_KEY && $('[data-recaptcha-token]').length){ 178 grecaptcha.ready(function() { 179 grecaptcha.execute(BX.arMobecanOptions.G_SITE_KEY, {action: 'contacts_feedback'}).then(function(token){ 180 $('[data-recaptcha-token]').each(function(index, el){ 181 $(el).val(token); 182 }); 183 }); 184 }); 185 } 186} 187window.getMore = function(params) { 188 //window.preloader.add(); 189 $.ajax({
190 url: params.url, 191 type: 'GET', 192 dataType: 'JSON', 193 data: params.params 194 }) 195 .done(function (data) { 196 if (data.status == 'success') { 197 params.el.remove(); 198 if (data.target) { 199 $(data.target).append(data.html); 200 if (data.paginationNum) { 201 $('[data-pagination-num="' + data.paginationNum + '"]').html(data.pagination); 202 } 203 if (data.url) { 204 BX.ajax.history.put(null, data.url); 205 } 206 if(data.obname){ 207 BX.onCustomEvent('onInitSlideSwiper', [{'obname': data.obname}]); 208 } 209 } 210 } 211 //window.preloader.remove(); 212 }) 213 .fail(function () { 214 //window.preloader.remove(); 215 console.log("ÐÑоизоÑла оÑибка ÑеÑвеÑа!"); 216 }); 217} 218window.initSlideSwiper = function(obname) { 219 if(obname){ 220 setTimeout(function () { 221 new Swiper('.' + obname + '-swiper-slider .swiper', { 222 loop: true, 223 slidesPerView: 1, 224 pagination: { 225 el: '.' + obname + '-swiper-slider .swiper-pagination', 226 }, 227 navigation: { 228 nextEl: '.' + obname + '-swiper-slider .swiper-button-next', 229 prevEl: '.' + obname + '-swiper-slider .swiper-button-prev', 230 } 231 }); 232 }, 500); 233 } 234} 235$(function(){ 236 window.initReCaptchaToken(); 237 $('.ajax-form').ajaxForm({ 238 disableButtonAfterSend: false, 239 complete: function(holder, form, data){ 240 holder.addClass('sended'); 241 if(data.status == "success"){ 242 form.trigger('reset'); 243 } 244 if(data && typeof data.eventdata == 'object'){ 245 if ($('[data-sid="PHONE"]', form)) { 246 data.eventdata.phone = $('[data-sid="PHONE"]', form).val(); 247 } 248 if ($('[data-sid="CLIENT_NAME"]', form)) { 249 data.eventdata.name = $('[data-sid="CLIENT_NAME"]', form).val(); 250 } 251 BX.onCustomEvent('onCounterGoals', [data.eventdata]); 252 } 253 if(data.redirect) { 254 setTimeout(function () { 255 location.href = data.redirect; 256 }, 1000); 257 return; 258 } 259 } 260 }); 261}); 262 263console.log('custom.js here'); 264 265document.addEventListener('DOMContentLoaded', () => { 266 const popup = document.querySelector( 267 '.popup-wrapper[data-popup-name="areas"]' 268 ); 269 270 if (!popup) { 271 return; 272 } 273 274 const optionsContainer = popup.querySelector('.popup__options'); 275 const footer = popup.querySelector('.popup__footer'); 276 277 if (!optionsContainer || !footer) { 278 return; 279 } 280 281 const removeParkingElements = () => { 282 const extraOption = popup.querySelector('.parking-extra-option'); 283 const extraButton = popup.querySelector('.parking-extra-button'); 284 const mobileOptions = popup.querySelector('.parking-mobile-options'); 285 286 if (extraOption) { 287 extraOption.remove(); 288 } 289 290 if (extraButton) { 291 extraButton.remove(); 292 } 293 294 if (mobileOptions) { 295 mobileOptions.remove(); 296 } 297 298 optionsContainer.classList.remove('parking-desktop-options'); 299 footer.classList.remove('parking-popup-footer'); 300 }; 301 302 const addParkingOption = () => { 303 const option = document.createElement('div'); 304 305 option.className = 'white-card parking-extra-option'; 306 307 option.innerHTML = ` 308 <div class="white-card__ico white-card__ico--small"> 309 <img src="/upload/iblock/175/agigum44ls29kpmybr7m3b90cp1ydapo.svg"> 310 </div> 311 312 <div class="white-card__text white-card__text--small"> 313 ÐаÑковка в дни маÑÑей 314 </div> 315 `; 316 317 optionsContainer.appendChild(option); 318 }; 319 320 const addParkingButton = () => { 321 const button = document.createElement('a'); 322 323 button.href = 'https://www.fclm.ru/tickets/'; 324 button.target = '_blank'; 325 button.rel = 'noopener noreferrer'; 326 button.className = 'btn w-full parking-extra-button'; 327 button.textContent = 'ÐаÑковка в дни маÑÑей'; 328 329 footer.appendChild(button); 330 }; 331 332 const addMobileLayout = () => { 333 const firstOption = optionsContainer.querySelector( 334 '.white-card:not(.parking-extra-option)' 335 ); 336 337 const secondOption = optionsContainer.querySelector( 338 '.parking-extra-option' 339 ); 340 341 const firstButton = footer.querySelector(
342 '[data-popup-init][data-popup="areasForm"]' 343 ); 344 345 const secondButton = footer.querySelector( 346 '.parking-extra-button' 347 ); 348 349 if ( 350 !firstOption || 351 !secondOption || 352 !firstButton || 353 !secondButton 354 ) { 355 return; 356 } 357 358 const mobileOptions = document.createElement('div'); 359 const firstGroup = document.createElement('div'); 360 const secondGroup = document.createElement('div'); 361 362 mobileOptions.className = 'parking-mobile-options'; 363 firstGroup.className = 'parking-mobile-option'; 364 secondGroup.className = 'parking-mobile-option'; 365 366 firstGroup.appendChild(firstOption.cloneNode(true)); 367 firstGroup.appendChild(firstButton.cloneNode(true)); 368 369 secondGroup.appendChild(secondOption.cloneNode(true)); 370 secondGroup.appendChild(secondButton.cloneNode(true)); 371 372 mobileOptions.appendChild(firstGroup); 373 mobileOptions.appendChild(secondGroup); 374 375 optionsContainer.classList.add('parking-desktop-options'); 376 footer.classList.add('parking-popup-footer'); 377 378 optionsContainer.parentElement.appendChild(mobileOptions); 379 }; 380 381 const activateParkingElements = () => { 382 removeParkingElements(); 383 384 addParkingOption(); 385 addParkingButton(); 386 387 footer.classList.add('parking-popup-footer'); 388 389 addMobileLayout(); 390 }; 391 392 document.addEventListener('click', (event) => { 393 const button = event.target.closest( 394 '[data-popup-init][data-popup="areas"]' 395 ); 396 397 if (!button) { 398 return; 399 } 400 401 removeParkingElements(); 402 403 if (button.dataset.id !== '129') { 404 return; 405 } 406 407 activateParkingElements(); 408 }); 409});
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.