1var obBonus = {}; 2 3var obDetailFilter = { 4 5 ajaxInstance: false, 6 data: false, 7 allProperties: false, 8 productID: false, 9 ym: false, 10 11 processFilter: function (bUpdateSKU) { 12 //console.log(bUpdateSKU); 13 if (this.data) { 14 var $parent = $("[data-filter-properties]"); 15 var $rows = $parent.find("[data-code]"); 16 var selected = {}; 17 $parent.find("[data-value].active").each(function () { 18 var $this = $(this); 19 selected[$this.data("item-code")] = $this.data("value"); 20 }); 21 22 var index = 0; 23 $rows.each(function () { 24 var $row = $(this); 25 if (!index) { 26 index++; 27 return; 28 } 29 var $items = $row.find("[data-value]"); 30 31 $items.removeClass("disabled"); 32 33 var code = $row.data("code"); 34 var available = []; 35 for (key in obDetailFilter.allProperties[code]["ITEMS"]) { 36 available.push(key); 37 } 38 39 var newAvailable = []; 40 for (var selectedCode in selected) { 41 if (selectedCode == code) continue; 42 var value = selected[selectedCode].toString(); 43 //newAvailable = []; 44 if (typeof obDetailFilter.data[selectedCode][value] != "undefined") { 45 var tempAvailable = array_values(obDetailFilter.data[selectedCode][value][code]); 46 47 for (var key in available) { 48 if (tempAvailable.indexOf(available[key]) >= 0) { 49 //available.splice(key, 1); 50 newAvailable.push(available[key]); 51 } 52 } 53 } else { 54 newAvailable = []; 55 } 56 available = newAvailable; 57 } 58 // console.log(code,available); 59 60 $items.each(function () { 61 var $item = $(this); 62 var value = $item.data("value").toString(); 63 if (available.indexOf(value) < 0) { 64 $item.addClass("disabled"); 65 } 66 }); 67 }); 68 $parent.find("[data-value].active.disabled").removeClass("active"); 69 if (bUpdateSKU) { 70 this.ajax(); 71 } 72 } 73 }, 74 75 ajax: function () { 76 var $parent = $("[data-filter-properties]"); 77 var $rows = $parent.find("[data-code]"); 78 var selected = {}; 79 var bCanAjax = true; 80 $rows.each(function () { 81 var $this = $(this); 82 var $active = $this.find(".active"); 83 if ($active.length) { 84 selected["FILTER[PROPERTY_" + $active.data("item-code") + "]"] = $active.data("value"); 85 } else { 86 if ($this.find("[data-value]:not(.disabled)").length) bCanAjax = false; 87 } 88 89 }); 90 if (!bCanAjax) return true; 91 92 if (this.ajaxInstance) { 93 this.ajaxInstance.abort(); 94 } 95 96 selected["FILTER[PROPERTY_CML2_LINK]"] = this.productID; 97 selected.property_sku = this.property_sku; 98 selected.ym = this.ym; 99 selected["ECOMMERS"] = this.gtm 100 101// console.log(selected) 102 if (temlatedetail == "oboi") { 103 url = "/local/components/art-fresh/catalog.detail.sku/ajax.php?BRAND_ID=" + brandID + "&template=" + ".default_oboi"; 104 } else { 105 url = "/local/components/art-fresh/catalog.detail.sku/ajax.php?BRAND_ID=" + brandID; 106 } 107 108 109 $.ajax({ 110 type: "get", 111 url: url, 112 data: selected, 113 beforeSend: function () { 114 $parent.addClass("ajaxing"); 115 }, 116 success: function (data) { 117 var selector = "[data-sku-info]"; 118 $parent.removeClass("ajaxing"); 119 $parent.find(selector).replaceWith($(data).find(selector)); 120 121 $.ajax({ 122 type: "post", 123 url: "/local/php_interface/ajax/sku-associated.php", 124 data: {"SKU_ID": $(data).find(".sku-info [data-product-id]").data("product-id")}, 125 beforeSend: function () { 126 //$parent.addClass("ajaxing"); 127 }, 128 success: function (data_sku_associated) { 129 var selector = "#sku-associated"; 130 131 $(selector).replaceWith($(data_sku_associated)); 132 var count = $(selector).children().data("items-count"); 133 var $arrowsParent = $(selector).find("[data-arrows-parent]"); 134 var $slider = $(selector).find("[data-sli
134der]"); 135 $slider.slick({ 136 /*dots: true,*/ 137 arrows: true, 138 autoplay: true, 139 infinite: true, 140 slidesToShow: count, 141 slidesToScroll: count, 142 appendArrows: $arrowsParent, 143 responsive: [ 144 { 145 breakpoint: 5000, 146 settings: { 147 slidesToShow: count || 5, 148 slidesToScroll: count || 5 149 } 150 151 }, 152 { 153 breakpoint: 1200, 154 settings: { 155 slidesToShow: 3, 156 slidesToScroll: 3 157 } 158 159 }, 160 { 161 breakpoint: 769, 162 settings: { 163 slidesToShow: 1, 164 slidesToScroll: 1, 165 dots: true 166 } 167 168 } 169 ] 170 }); 171 }, 172 error: function () { 173 174 } 175 }) 176 }, 177 error: function () { 178 $parent.removeClass("ajaxing"); 179 } 180 }); 181 }, 182 183 select: function (self) { 184 // console.log(self); 185 var $self = $(self); 186 if ($self.hasClass("active")) return; 187 if ($self.hasClass("disabled")) return; 188 189 $self.siblings().removeClass("active"); 190 $self.addClass("active"); 191 this.processFilter(true); 192 this.selectFirst(); 193 }, 194 195 selectFirst: function () { 196 197 if (this.data) { 198 199 var $parent = $("[data-filter-properties]"); 200 $parent.find("[data-code]").each(function () { 201 if ($(this).find("[data-value].active").length) return; 202 $(this).find("[data-value]:not(.disabled):first").addClass("active"); 203 obDetailFilter.processFilter(); 204 }); 205 this.ajax(); 206 207 } 208 209 }, 210 selectFirstMount: function () { 211 212 if (this.data) { 213 if (this.firstSkuFilter && this.firstSkuFilter.PROPERTY_UPAKOVKA) { 214 if ($(this).find("[data-value].active").length) return; 215 $(`[data-value="` + this.firstSkuFilter.PROPERTY_UPAKOVKA + `"]`).addClass("active"); 216 obDetailFilter.processFilter(); 217 this.ajax(); 218 } else { 219 var $parent = $("[data-filter-properties]"); 220 $parent.find("[data-code]").each(function () { 221 if ($(this).find("[data-value].active").length) return; 222 $(this).find("[data-value]:not(.disabled):first").addClass("active"); 223 obDetailFilter.processFilter(); 224 }); 225 this.ajax(); 226 } 227 228 } 229 230 }, 231 bind: function () { 232 var ym = $("#ym").val(); 233 //this.data = obDetailFilterdata; 234 //this.allProperties = obDetailFilterallProperties; 235 if (ym) { 236 237 } else { 238 this.selectFirstMount(); 239 } 240 }, 241 242 init: (function () { 243 $(function () { 244 obDetailFilter.bind(); 245 }); 246 })() 247}; 248 249const obLazyDivsVue = { 250 loadBufferFrame: function (id, extData = false) { 251 let data = { 252 [id]: '', 253 filterCrossex: extData?.filterProduct, 254 vue: 'Y', 255 isShowOnly: typeof isShowOnly !== 'undefined' ? isShowOnly : false, 256 }; 257 // if (extData) { 258 // data = { 259 // [id]: '', 260 // filterCrossex: extData.filterProduct, 261 // } 262 // } 263 264// console.log(data, 'test') 265 $.ajax({ 266 url: "/local/php_interface/ajax/ajax.handler.php", 267 type: "POST", 268 dataType: "html", 269 data: data, 270 success: function (data) { 271 let $list = $('#' + id); 272 273 $list.html(data); 274 if (id == "formsCapcha") { 275 obLogin.bind() 276 obCallback.bind(); 277 } 278 279 280 281 $list.each(function () { 282 var $parent = $(this); 283 var count = $parent.children().data("items-count"); 284 var $arrowsParent = $parent.find("[data-arrows-parent]");
285 var $slider = $parent.find("[data-slider=1]"); 286 $slider.slick({ 287 /*dots: true,*/ 288 arrows: true, 289 autoplay: false, 290 infinite: true, 291 slidesToShow: count, 292 slidesToScroll: count, 293 appendArrows: $arrowsParent, 294 responsive: [ 295 { 296 breakpoint: 5000, 297 settings: { 298 slidesToShow: count || 5, 299 slidesToScroll: count || 5 300 } 301 302 }, 303 { 304 breakpoint: 1200, 305 settings: { 306 slidesToShow: 3, 307 slidesToScroll: 3 308 } 309 310 }, 311 { 312 breakpoint: 769, 313 settings: { 314 slidesToShow: 2, 315 slidesToScroll: 2, 316 } 317 } 318 ] 319 }); 320 321 initSliders(); 322 }); 323 } 324 }); 325 326 }, 327 328 elInit: function (el) { 329 const result = {}; 330 result.winH = $(window).height(); 331 result.elH = el.height(); 332 result.elOffset = el.offset(); 333 result.elViewFrom = result.elOffset.top - result.winH; 334 result.elViewTo = result.elOffset.top + result.winH - result.elH; 335 return result; 336 }, 337 338 elStatus: function (el, elPos) { 339 // пÑовеÑÑем ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð²Ð¸Ð´ÐµÐ½ на ÑкÑане 340 if ($(window).scrollTop() > elPos.elViewFrom && $(window).scrollTop() < elPos.elViewTo) { 341 if ($(el).attr("view") != "open") { 342 $(el).attr("view", "open"); 343 // console.log($(el).attr("id")); 344 obLazyDivsVue.loadBufferFrame($(el).attr("id")); 345 } 346 } 347 }, 348 bindFormLogin: function () { 349 var $elements = $('.content').find('[data-js-lazy-div]'); 350 $elements.each(function () { 351 var id = $(this).attr('id'); 352 if (id == 'formsCapcha') { 353 // console.log("formsCapcha") 354 obLazyDivsVue.loadBufferFrame(id); 355 } 356 }); 357 }, 358 bind: function () { 359 var $elements = $('.content').find('[data-js-lazy-div]'); 360 $elements.each(function () { 361 var id = $(this).attr('id'); 362 363 if (id == 'watchedProducts') { 364 $('#' + id).attr('view', 'open'); 365 obLazyDivsVue.loadBufferFrame(id); 366 } else if (id === 'crossProducts') { 367 obLazyDivsVue.loadBufferFrame(id, { 368 filterProduct: JSON.parse($(this).attr('data-filter')) 369 }); 370 } else if (id == 'formsCapcha') { 371 // console.log("formsCapcha") 372 obLazyDivsVue.loadBufferFrame(id); 373 } else { 374 var element = $("#" + id); 375 var elPos = obLazyDivsVue.elInit(element); 376 $(window).scroll(function () { 377 obLazyDivsVue.elStatus(element, elPos); 378 }); 379 } 380 }); 381 } 382} 383 384$(document).ready(function () { 385 obLazyDivsVue.bind(); 386// ФоÑо инÑеÑÑеÑов 387 388 389 $(".interior-slider-wrapper").slick({ 390 infinite: true, 391 slidesToShow: 3, 392 slidesToScroll: 1, 393 arrows: true, 394 prevArrow: '<span class="prev-arrow"></span>', 395 nextArrow: '<span class="next-arrow"></span>', 396 responsive: [ 397 398 { 399 breakpoint: 1024, 400 settings: { 401 slidesToShow: 2, 402 } 403 }, 404 { 405 breakpoint: 768, 406 settings: { 407 slidesToShow: 1, 408 } 409 }, 410 { 411 breakpoint: 480, 412 settings: { 413 slidesToShow: 1, 414 } 415 } 416 ] 417 }); 418 419 420 $(".interior-slide a[data-fancybox=interiors]").fancybox(); 421 422 $('.colorate-button').bind('onPropertyChange', function () { 423 // console.log('FOO!'); 424 }); 425//cÑкÑоллим и подÑвеÑиваем SKU из поиÑка 426 // var element_id = $('#scroll_to_sku').val(); 427 428 // if (element_id !== undefined) { 429 // obDetailProduct.toggleItems(); 430 // var search_el = $('.sub_item[data-sku-id=' + element_id + ']'); 431 // $(search_el).css({'background-color' : 'rgba(0,0,0,0.05)', 'border' : '2px solid #303ba5'}); 432 433 // $([document.documentElement, document.body]).animate({ 434 // scrollTop: $(search_el).offset().top-400 435 // }, 1000); 436 437}); 438 439 440const calcVueItem = { 441 inputTimer: null, 442 paintRate: 0, 443 items: [], 444 basketID: 0, 445 langs: {}, 446 oboi: false, 447 448 init: function (block) { 449 // console.log('block',block) 450 this.oboi = block.data('js-oboi') === "Y"; 451 this.typeRashet = ''; 452 453 this.langFiles(); 454 this.setProps(block); 455 this.render(block); 456 }, 457 458 langFiles: function () { 459 this.langs.title = "ÐÑÑоÑа и ÑиÑина повеÑÑ Ð½Ð¾ÑÑи "; 460 this.langs.helperText = "ÐобавÑÑе каждÑÑ Ð¾ÐºÑаÑиваемÑÑ Ð¿Ð¾Ð²ÐµÑÑ Ð½Ð¾ÑÑÑ, напÑÐ¸Ð¼ÐµÑ ÑÑÐµÐ½Ñ Ð¸Ð»Ð¸ поÑолок."; 461 this.langs.length = 'Ðлина'; 462 this.langs.width = 'ШиÑина'; 463 this.langs.height = 'ÐÑÑоÑа'; 464 this.langs.addNew = 'ÐобавиÑÑ Ð¿Ð¾Ð²ÐµÑÑ Ð½Ð¾ÑÑÑ'; 465 this.langs.recommender = 'РекомендÑемое колиÑеÑÑво кÑаÑки '; 466 this.langs.helper_calc = 'ÐалÑкÑлÑÑÐ¾Ñ Ð¿Ð¾Ð´ÑкажеÑ, ÑколÑко кÑаÑки вам понадобиÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¾Ñделка вÑглÑдела макÑималÑно пÑоÑеÑÑионалÑно. ÐÑедназнаÑено ÑолÑко Ð´Ð»Ñ Ð¾Ñенки! РеалÑнÑй ÑаÑÑ Ð¾Ð´ Ð¼Ð¾Ð¶ÐµÑ Ð²Ð°ÑÑиÑоваÑÑÑÑ Ð² завиÑимоÑÑи Ð¾Ñ ÑÐ°ÐºÐ¸Ñ ÑакÑоÑов, как ÑекÑÑÑÑа ÑÑенÑ, вÑÐ±Ð¾Ñ ÑвеÑа или ÑоÑÑоÑние повеÑÑ Ð½Ð¾ÑÑи.'; 467 this.langs.placeholder = "0 м"; 468 this.langs.layerFirst = "1 Ñлой "; 469 this.langs.layerSecond = "2 ÑÐ»Ð¾Ñ "; 470 this.langs.layerMetric = " л"; 471 this.langs.tinsOptimal = "ÐпÑималÑное колиÑеÑÑво банок:"; 472 this.langs.oboiOptimal = "ÐпÑималÑное колиÑеÑÑво Ð Ñлонов:"; 473 this.langs.tinsSum = "СÑмма"; 474 this.langs.tinsPrice = "0 â½";
475 this.langs.tinsAdd = "РкоÑзинÑ"; 476 this.langs.oboiTitle = "РаÑÑÑиÑаÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво"; 477 this.langs.oboiFirst = "ÐомнаÑа"; 478 this.langs.oboiSecond = "СÑена"; 479 this.langs.oboiRoomTitle = "Ðлинна, вÑÑоÑа, ÑиÑина комнаÑÑ "; 480 this.langs.oboiWallTitle = "ÐÑÑоÑа и ÑиÑина ÑÑÐµÐ½Ñ "; 481 this.langs.oboiDescription = "ÐоÑÑиÑайÑе плоÑÐ°Ð´Ñ Ð¾ÐºÐ»ÐµÐµÐ²Ð°ÐµÐ¼Ð¾Ð¹ повеÑÑ Ð½Ð¾ÑÑи"; 482 this.langs.oboiAddWall = "ÐобавиÑÑ ÑÑенÑ"; 483 }, 484 485 createContentBlock: function () { 486 let cb; 487 488 cb = $(`<div class="calc-comp__content"></div>`); 489 490 if (this.oboi) { 491 cb.append(this.createTitleBlock(this.langs.oboiTitle)); 492 cb.append(this.createResultColor()); 493 494 cb.append(this.createOboiBlock('calc-comp__square-wall active', true, 2, 'wall')); 495 cb.append(this.createOboiBlock('calc-comp__square-room', false, 3, 'room')); 496 } else { 497 cb.append(this.createSubTitleBlock(this.langs.title, this.langs.helperText)); 498 cb.append(this.createSquareBlock()); 499 cb.append(this.createAddSquareBlock(this.langs.addNew)); 500 } 501 502 return cb; 503 }, 504 505 createTitleBlock: function (title) { 506 return $(`<h3 class="calc-comp__title">${title}</h3>`); 507 }, 508 509 createSubTitleBlock: function (title, description) { 510 cbTitle = $(`<div class="calc-comp__sub-title" data-js="show_help">${title}</div>`); 511 cbTitleButtons = $(`<button type="button" class="calc-comp__helper"></button>`); 512 513 cbTitleButtonsSpan = $(`<span class="calc-comp__help-popover">${description}</span>`); 514 cbTitleButtons.append(cbTitleButtonsSpan); 515 cbTitle.append(cbTitleButtons); 516 517 return cbTitle; 518 }, 519 520 createAddSquareBlock: function (textButton) { 521 cbSquareAdd = $(`<button class="calc-comp__add-square" data-js="add_square" type="button">${textButton}</button>`); 522 523 return cbSquareAdd; 524 }, 525 526 createSquareBlock: function (ar = 2) { 527 let type = [ 528 'width', 529 'length', 530 'height' 531 ]; 532 533 cbSquare = $(`<div class="calc-comp__square"></div>`); 534 cbSquareRow = $(`<div class="calc-comp__square-row"></div>`) 535 536 for (let i = 0; i < ar; i++) { 537 let name, 538 className; 539 540 switch (type[i]) { 541 case "width": 542 name = this.langs.width; 543 className = 'calc-comp__square-input_width'; 544 break; 545 case "length": 546 name = this.langs.length; 547 className = 'calc-comp__square-input_length'; 548 break; 549 case "height": 550 name = this.langs.height; 551 className = 'calc-comp__square-input_height'; 552 break; 553 } 554 555 cbSquareRowLabel = $(`<label class="calc-comp__square-control"></label>`); 556 cbSquareRowLabelInput = $(`<input name="calc-width-metric" class="not-pl calc-comp__square-input ${className}" placeholder="${this.langs.placeholder}">`); 557 cbSquareRowLabelSpan = $(`<span class="calc-comp__square-metric">${name}</span>`); 558 559 cbSquareRowLabel.append(cbSquareRowLabelInput); 560 cbSquareRowLabel.append(cbSquareRowLabelSpan); 561 562 cbSquareRow.append(cbSquareRowLabel); 563 } 564 565 cbSquare.append(cbSquareRow); 566 567 return cbSquare; 568 }, 569 570 createOboiBlock: function (className, add, ar, type) { 571 let title = this.langs.oboiWallTitle, 572 description = this.langs.oboiDescription, 573 textButton = this.langs.oboiAddWall; 574 575 if (type === "room") { 576 title = this.langs.oboiRoomTitle; 577 } 578 579 block = $(`<div class="${className}" data-block-square="${type}"></div>`); 580 block.append(this.createSubTitleBlock(title, description)); 581 block.append(this.createSquareBlock(ar)); 582 583 if (add) { 584 block.append(this.createAddSquareBlock(textButton)); 585 } 586 587 588 return block; 589 }, 590 591 createResultColor: function () { 592 let type = [ 593 'first', 594 'second' 595 ], 596 fbResultColor, 597 fbResultColorButtons, 598 fbResultColorButtonsSpans; 599 600 fbResultColor = $(`<div class="calc-comp__result-color"></div>`); 601 602 for (j in type) { 603 let name, 604 className; 605 switch (type[j]) { 606 case "first": 607 name = this.oboi ? this.langs.oboiFirst : this.langs.layerFirst; 608 className = 'calc-comp__layer-btn_one'; 609 classNameSpan = 'calc-comp__layer-value_one'; 610 val = 1; 611 break; 612 case "second": 613 name = this.oboi ? this.langs.oboiSecond : this.langs.layerSecond; 614 className = 'calc-comp__layer-btn_two active'; 615 classNameSpan = 'calc-comp__layer-value_two'; 616 val = 2; 617 break; 618 } 619 620 fbResultColorButtons = $(`<button data-js="calc_layer" data-val="${val}" class="calc-comp__layer-btn ${className}" type="button">${name}</button>`); 621 622 if (!this.oboi) { 623 fbResultColorButtonsSpans = $(`<span class="calc-comp__layer-value ${classNameSpan}">0</span><span class="calc-comp__layer-metric">${this.langs.layerMetric}</span>`); 624 fbResultColorButtons.append(fbResultColorButtonsSpans); 625 } 626 627 fbResultColor.append(fbResultColorButtons); 628 } 629 630 return fbResultColor; 631 }, 632 633 createFooterBlock: function () { 634 let fb /*footerBlock*/, 635 fbTitle, 636 fbTitleButtons, 637 fbTitleSpan, 638 fbResultColor; 639 640 fb = $(`<div class="calc-comp__footer"></div>`); 641 642 if (!this.oboi) { 643 fbTitle = $(`<div class="calc-comp__sub-title" data-js="show_help">${this.langs.recommender}</div>`); 644 fbTitleButtons = $(`<button type="button" class="calc-comp__helper calc-comp__helper_top"></button>`); 645 fbTitleSpan = $(`<span class="calc-comp__help-popover calc-comp__help-popover_top">${this.langs.helper_calc}</span>`); 646 647 fbTitleButtons.append(fbTitleSpan); 648 fbTitle.append(fbTitleButtons); 649 } 650 651 652 let text = this.langs.tinsOptimal; 653 if (this.oboi) { 654 text = this.langs.oboiOptimal; 655 } 656 657 fbResultTins = $(`<div class="calc-comp__result-tins active">${text}</div>`); 658 fbResultTinsUl = $(`<ul class="calc-comp__tins-list"></ul>`); 659 fbResultTinsText = $(`<p class="calc-comp__tins-sum"><span class="calc-comp__tins-sum-title">${this.langs.tinsSum}</span><span class="calc-comp__tins-sum-value">${this.langs.tinsPrice}</span></p>`); 660 fbButtonsAccept = $(`<button class="calc-comp__accept" data-js="calc_add_to_basket" type="button">${this.langs.tinsAdd}</button>`); 661 662 fbResultTins.append(fbResultTinsUl); 663 fbResultTins.append(fbResultTinsText); 664 665 fb.append(fbTitle); 666 667 if (!this.oboi) { 668 fbResultColor = this.createResultColor(); 669 fb.append(fbResultColor); 670 } 671 672 673 fb.append(fbResultTins); 674 fb.append(fbButtonsAccept); 675 676 return fb; 677 }, 678 679 render: function (block) { 680 let mainBlock, closeBlock, cb, fb; 681 682 mainBlock = $(`<div class="calc-comp"></div>`); 683 closeBlock = $(`<div class="calc-comp-close" data-js="calc_close"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
683<path d="M13 12l5-5-1-1-5 5-5-5-1 1 5 5-5 5 1 1 5-5 5 5 1-1z"></path></svg></div>`); 684 685 cb = this.createContentBlock(); 686 fb = this.createFooterBlock(); 687 688 mainBlock.append(closeBlock); 689 mainBlock.append(cb); 690 mainBlock.append(fb); 691 692 693 block.append(mainBlock); 694 }, 695 696 createSquareRow: function (_this) { 697 let block, 698 firstRow; 699 if (this.oboi) { 700 block = _this.closest('[data-block="calc_volume"]').find(".calc-comp__square-wall .calc-comp__square"); 701 702 firstRow = block.find('.calc-comp__square-row:first'); 703 // console.log(firstRow) 704 } else { 705 block = _this.closest('[data-block="calc_volume"]').find(".calc-comp__square"); 706 firstRow = block.find('.calc-comp__square-row:first'); 707 } 708 // console.log(block) 709 let cloneRow = firstRow.clone(), 710 btnRemoveRow = $('<a href="javascript:void(0)" data-js="remove_row"></a>'); 711 712 713 btnRemoveRow.addClass('calc-comp__square-remove'); 714 cloneRow.find('input').val(''); 715 cloneRow.append(btnRemoveRow); 716 block.append(cloneRow) 717 }, 718 719 removeSquareRow: function (_this) { 720 let block = _this.closest(".calc-comp__square-row"); 721 722 block.remove(); 723 }, 724 725 getCalculatedItems: function (volume) { 726 recommendedProducts = this.items; 727 // ÑоÑÑиÑÑем по ÑбÑÐ²Ð°Ð½Ð¸Ñ Ð¾Ð±Ñема 728 recommendedProducts.sort((a, b) => (parseFloat(a.VOLUME) < parseFloat(b.VOLUME)) ? 1 : ((parseFloat(b.VOLUME) < parseFloat(a.VOLUME)) ? -1 : 0)); 729 var currentVolume = Math.round(volume * 10) / 10; 730 // ÑаÑпÑеделÑем обÑем по ÑаÑовкам 731 for (var i = 0; i < recommendedProducts.length; i++) { 732 733 productVOLUME = parseFloat(recommendedProducts[i].VOLUME); 734 recommendedProducts[i].itemsUsed = 0; 735 736 if (currentVolume >= productVOLUME) { 737 recommendedProducts[i].itemsUsed = Math.floor(currentVolume / productVOLUME); 738 currentVolume = Math.round((currentVolume - (recommendedProducts[i].itemsUsed * productVOLUME)) * 10) / 10; 739 } 740 741 if (currentVolume <= 0) { 742 break; 743 } 744 745 if (i === (recommendedProducts.length - 1) && currentVolume > 0) { 746 recommendedProducts[i].itemsUsed += Math.ceil(currentVolume / productVOLUME); 747 } 748 } 749 750 return recommendedProducts; 751 }, 752 753 showResultTins: function (_this) { 754 if (this.oboi) { 755 this.getResultOboi(_this); 756 } else { 757 this.getResult(_this); 758 } 759 760 }, 761 762 getResultOboi: function (_this) { 763 764 765 let $this = $(_this), 766 $wall = $(`.calc-comp__square-wall`), 767 $room = $(`.calc-comp__square-room`); 768 769 $(`.calc-comp__result-tins`).innerHTML = ''; 770 $this.closest('.calc-comp__result-color').find('button').removeClass('active'); 771 $this.addClass('active'); 772 773 let square; 774 switch ($(_this).data('val')) { 775 case 1: 776 this.typeRashet = "room"; 777 $wall.removeClass('active'); 778 $room.addClass('active'); 779 square = this.calcSquareRoom(); 780 countRulon = Math.ceil(square / this.items[0].SQURE_RULON); 781 this.itemsResult = this.items; 782 this.itemsResult[0].itemsUsed = countRulon; 783 784 // console.log(square) 785 this.showResultOboi(_this); 786 787 break; 788 case 2: 789 this.typeRashet = "wall"; 790 $room.removeClass('active'); 791 $wall.addClass('active'); 792 793 794 square = this.calcSquare(); 795 countRulon = Math.ceil(square / this.items[0].SQURE_RULON); 796 this.itemsResult = this.items; 797 this.itemsResult[0].itemsUsed = countRulon; 798 this.showResultOboi(_this); 799 break; 800 } 801 802 }, 803 804 getResult: function (_this) {
805 let $this = $(_this), 806 elValue = $this.find('.calc-comp__layer-value '); 807 808 $this.closest('.calc-comp__result-color').find('button').removeClass('active'); 809 $this.addClass('active'); 810 811 if (elValue) { 812 let value = Math.round(elValue.text() * 10) / 10; 813 if (value) { 814 let priceTotal = 0, 815 items = this.getCalculatedItems(value), 816 tinsRowValue = _this.closest('.calc-comp').querySelector('.calc-comp__tins-sum-value'), 817 tinsRowList = _this.closest('.calc-comp').querySelector('.calc-comp__tins-list'); 818 819 tinsRowList.innerHTML = ''; 820 821 items.forEach(item => { 822 823 if (item.itemsUsed) { 824 // ÐобавлÑем ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² ÑазмеÑÐºÑ 825 let listItem = document.createElement('li'); 826 827 listItem.classList.add('calc-comp__tins-list-item'); 828 listItem.innerHTML = `${item.itemsUsed} Ñ ${item.VOLUME} <span class="calc-comp__primer-metric">л</span>`; 829 tinsRowList.appendChild(listItem); 830 831 priceTotal += item.PRICE.VALUE * item.itemsUsed; 832 } 833 obChangeNumberAnimation.outNum(priceTotal, tinsRowValue) 834 }); 835 } 836 } 837 }, 838 839 initValidateSquareInputs: function (_this) { 840 if (this.inputTimer) { 841 clearTimeout(this.inputTimer); 842 } 843 844 this.inputTimer = setTimeout( () => { 845 let currentValue = Math.abs(parseFloat(_this.val().replace(/,/, '.'))); 846 847 if (typeof currentValue === 'number' && isFinite(currentValue)) { 848 if (currentValue <= 0) { 849 _this.val(''); 850 } 851 if (currentValue > 0) { 852 _this.val(currentValue + ' м'); 853 } 854 if (currentValue > 999) { 855 _this.val(999 + ' м'); 856 } 857 } else { 858 _this.val(''); 859 } 860 861 this.showCalcResult(); 862 $('[data-js="calc_layer"].active').trigger('click') 863 864 }, 1000); 865 }, 866 867 calcSquare: function () { 868 869 let calcModal = $('.calc-comp'), 870 squareTotal = 0, 871 squaresRows = calcModal.find('.calc-comp__square-row'); 872 873 if (this.oboi) { 874 squaresRows = calcModal.find(`[data-block-square=${this.typeRashet}] .calc-comp__square-row`) 875 } 876 877 878 squaresRows.each(function (i, el) { 879 let inputLengthValue = $(el).find('.calc-comp__square-input_length').val(), 880 inputWidthValue = $(el).find('.calc-comp__square-input_width').val(), 881 length = parseFloat(inputLengthValue ? inputLengthValue : 0), 882 width = parseFloat(inputWidthValue ? inputWidthValue : 0); 883 884 squareTotal += length * width; 885 }); 886 887 return squareTotal; 888 }, 889 890 showCalcResult: function () { 891 892 if (!this.oboi) { 893 let square = this.calcSquare(), 894 paintNeed = parseInt(square / this.paintRate * 100) / 100; 895 896 $('[data-js="calc_layer"]').each(function (i, e) { 897 let val = $(e).data('val'); 898 $(e).find('.calc-comp__layer-value').text(paintNeed * val) 899 }); 900 } 901 }, 902 903 904 calcSquareRoom: function () { 905 let calcModal = $('.calc-comp'), 906 squareTotal = 0, 907 squaresRows = calcModal.find(`[data-block-square=${this.typeRashet}] .calc-comp__square-row`) 908 909 // console.log(squaresRows) 910 squaresRows.each(function (i, el) { 911 let inputLengthValue = $(el).find('.calc-comp__square-input_length').val(), 912 inputWidthValue = $(el).find('.calc-comp__square-input_width').val(), 913 inputHeightValue = $(el).find('.calc-comp__square-input_height').val(), 914 length = parseFloat(inputLengthValue ? inputLengthValue : 0),
915 width = parseFloat(inputWidthValue ? inputWidthValue : 0), 916 height = parseFloat(inputHeightValue ? inputHeightValue : 0); 917 918 squareTotal += 2 * (length * height) + 2 * (height * width); 919 }); 920 921 return squareTotal; 922 }, 923 924 showResultOboi: function (_this) { 925 let priceTotal = 0, 926 tinsRowValue = _this.closest('.calc-comp').querySelector('.calc-comp__tins-sum-value'), 927 tinsRowList = _this.closest('.calc-comp').querySelector('.calc-comp__tins-list'); 928 929 tinsRowList.innerHTML = ''; 930 931 this.itemsResult.forEach(item => { 932 933 if (item.itemsUsed) { 934 // ÐобавлÑем ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² ÑазмеÑÐºÑ 935 let listItem = document.createElement('li'); 936 listItem.classList.add('calc-comp__tins-list-item'); 937 listItem.innerHTML = `${item.itemsUsed}`; 938 tinsRowList.appendChild(listItem); 939 940 priceTotal += item.PRICE.VALUE * item.itemsUsed; 941 } 942 obChangeNumberAnimation.outNum(priceTotal, tinsRowValue) 943 }); 944 }, 945 946 setProps: function (block) { 947 this.items = block.data('js-items'); 948 this.paintRate = block.data('js-max-volume'); 949 this.basketID = block.closest('[data-basket-item]').data('basket-item'); 950 this.colorateParams = block.closest('[data-basket-item]').find('[data-params-calc-colorate]'); 951 }, 952 953 addToBasketByCalc: function (_this) { 954 if (typeof (this.items) != "undefined") { 955 let newBasketItems = this.items.filter(function (e) { 956 return e.itemsUsed > 0; 957 }); 958 let $this = $(_this), 959 mainBlock = $this.closest('.calc-comp'), 960 skuID = this.items.map(item => item.PRODUCT_ID); 961 962 963 let colorate = (this.colorateParams.length > 0) ? this.colorateParams.data('params-calc-colorate') : ''; 964 965 $.ajax({ 966 type: "POST", 967 url: "/local/components/art-fresh/sale.basket/ajax.php", 968 data: { 969 items: newBasketItems, 970 colorate: colorate, 971 oldBasketID: this.basketID, 972 action: 'calc_basket_add', 973 BIG_BASKET: 1, 974 basket_new: 'Y', 975 sku: skuID, 976 }, 977 timeout: 15000, 978 beforeSend: function () { 979 mainBlock.remove(); 980 }, 981 success: function (data) { 982 obBasket.changeBasket(data); 983 }, 984 }); 985 return false; 986 } 987 }, 988 989 bind: function () { 990 $(document).on('click', '[data-js="calc_close"]', function () { 991 let _this = $(this); 992 993 _this.closest('.calc-comp').remove(); 994 }); 995 996 $(document).on('click', '[data-js="add_square"]', function () { 997 calcVueItem.createSquareRow($(this)); 998 }); 999 1000 $(document).on('click', '[data-js="remove_row"]', function () { 1001 calcVueItem.removeSquareRow($(this)); 1002 }); 1003 1004 $(document).on('click', '[data-js="calc_layer"]', function () { 1005 calcVueItem.showResultTins(this); 1006 }); 1007 1008 $(document).on('click', '[data-js="show_calc"]', function () { 1009 $(document).find('.calc-comp').remove(); 1010 1011 let _this = $(this), 1012 block = _this.closest('[data-block="calc"]').find('[data-block="calc_volume"]'); 1013 1014 calcVueItem.init(block); 1015 }); 1016 1017 $(document).on('input', '[data-block="calc_volume"] input', function () { 1018 calcVueItem.initValidateSquareInputs($(this)); 1019 }); 1020 1021 $(document).on('click', '[data-js="calc_add_to_basket"]', function () { 1022 calcVueItem.addToBasketByCalc(this); 1023 }); 1024 1025 }, 1026}; 1027 1028 1029$(() => { 1030 // $(document).on('click', '.lhDiscountSubscribeButton', function () { 1031 // var ee = setInterval(function () { 1032 // if (typeof window.ym != 'undefined') { 1033 // ym(7500958, 'reachGoal', 'click_price_drop_subscription'); 1034 // clearInterval(ee); 1035 // } else { 1036 // console.log('ÐеÑÑика не иниÑиализиÑована'); 1037 // } 1038 // }, 500); 1039 // }); 1040 $(document).on('click', '.dolymi-btn', function () { 1041 var ee = setInterval(function () { 1042 if (typeof window.ym != 'undefined') { 1043 ym(7500958, 'reachGoal', 'click_payment_method_instalment'); 1044 console.log('click_payment_method_instalment'); 1045 clearInterval(ee); 1046 } else { 1047 console.log('ÐеÑÑика не иниÑиализиÑована'); 1048 } 1049 }, 500); 1050 }); 1051 1052 $(document).on('submit', '.subscribe__form', function (e) { 1053 e.preventDefault(); // ÐÑÑанавливаем ÑÑандаÑÑнÑÑ Ð¾ÑпÑÐ°Ð²ÐºÑ ÑоÑÐ¼Ñ 1054 1055 // ÐÑовеÑÑем валидноÑÑÑ email (Ð±Ð°Ð·Ð¾Ð²Ð°Ñ Ð¿ÑовеÑка) 1056 var email = $(this).find('.subscribe__email').val(); 1057 var emailPattern = /^[^\s@]+@([^\s@.,]+\.)+[^\s@.,]{2,}$/; 1058 1059 if (!emailPattern.test(email)) { 1060 return false;
1061 } 1062 1063 // var ee = setInterval(function () { 1064 // if (typeof window.ym != 'undefined') { 1065 // ym(7500958, 'reachGoal', 'price_drop_subscription_sendform'); 1066 // console.log('price_drop_subscription_sendform'); 1067 // clearInterval(ee); 1068 // } else { 1069 // console.log('ÐеÑÑика не иниÑиализиÑована'); 1070 // } 1071 // }, 500); 1072 1073 }); 1074 /*calcVueItem.bind();*/ 1075 1076}); 1077 1078 1079 1080$(document).ready(function() { 1081 // Ðнопка «ÐапиÑаÑÑ Ð¾ÑзÑв» живÑÑ Ð²Ð½ÑÑÑи Ñаба оÑзÑвов, коÑоÑÑй ÑендеÑиÑÑÑ 1082 // ÑеÑез v-if и поÑвлÑеÑÑÑ Ð² DOM ÑолÑко пÑи оÑкÑÑÑии Ñаба â Ñо еÑÑÑ Ñже 1083 // поÑле ready. ÐоÑÑÐ¾Ð¼Ñ Ð²ÐµÑаем обÑабоÑÑик делегиÑованием на document. 1084 $(document).on('click', '.flex .btn_blue.no_select', function() { 1085 $('.add-rev').slideToggle(); 1086 $('.rev-form').show(); 1087 $(this).hide(); 1088 }); 1089 1090}); 1091$('[data-fancybox="gallery"]').fancybox({ 1092 // Options will go here 1093}); 1094 1095$(document).ready(function () { 1096 const $mount = $('[data-admin-roller-kit-mount]').first(); 1097 if (!$mount.length) return; 1098 let loadedSkuId = 0; 1099 1100 const updatePackagingTitle = function () { 1101 const $title = $('.property-filter-title.UPAKOVKA').first(); 1102 if (!$title.length) return; 1103 1104 const hasDimension = $title.closest('.property-filter-box') 1105 .find('.property-filter-values.UPAKOVKA .property-filter-value') 1106 .toArray() 1107 .some(function (item) { 1108 return /(?:мм|Ñм)/iu.test($(item).text()); 1109 }); 1110 const label = hasDimension ? 'РазмеÑ:' : 'Упаковка:'; 1111 const textNode = $title.contents().filter(function () { 1112 return this.nodeType === 3; 1113 }).first()[0]; 1114 1115 if (textNode && textNode.nodeValue.trim() !== label) { 1116 textNode.nodeValue = label + ' '; 1117 } 1118 }; 1119 1120 const placeMount = function () { 1121 updatePackagingTitle(); 1122 const $target = $('.property-filter-title.UPAKOVKA').first().closest('.property-filter-box'); 1123 if ($target.length) { 1124 $mount.insertAfter($target); 1125 } else { 1126 $('.product-filter-box').first().prepend($mount); 1127 } 1128 }; 1129 1130 const loadKit = function (skuId) { 1131 skuId = Number(skuId); 1132 updatePackagingTitle(); 1133 if (!skuId || skuId === loadedSkuId) return; 1134 1135 loadedSkuId = skuId; 1136 placeMount(); 1137 $mount.attr('data-sku-id', skuId).data('sku-id', skuId); 1138 1139 $.get('/local/ajax/admin_roller_kit.php', {sku_id: skuId}).done(function (html) { 1140 if (Number($mount.data('sku-id')) !== skuId) return; 1141 if (!String(html).trim()) { 1142 $mount.empty().prop('hidden', true); 1143 return; 1144 } 1145 if (!$('link[href*="admin-roller-kit.css"]').length) { 1146 $('<link>', {rel: 'stylesheet', href: '/local/css/admin-roller-kit.css?v=202609071701'}).appendTo('head'); 1147 } 1148 placeMount(); 1149 $mount.html(html).prop('hidden', false); 1150 if (!$('script[src*="admin-roller-kit.js"]').length) { 1151 $.getScript('/local/js/admin-roller-kit.js?v=202609071628'); 1152 } 1153 }); 1154 }; 1155 1156 loadKit($mount.data('sku-id')); 1157 1158 $(document).on('click', '.property-filter-value', function () { 1159 const match = String($(this).attr('href') || '').match(/\/sku_(\d+)\//); 1160 if (match) window.setTimeout(function () { loadKit(match[1]); }, 80); 1161 }); 1162 1163 $(window).on('popstate.adminRollerKit', function () { 1164 const match = window.location.pathname.match(/\/sku_(\d+)\//); 1165 if (match) loadKit(match[1]); 1166 }); 1167 1168 window.setInterval(function () { 1169 updatePackagingTitle(); 1170 const match = window.location.pathname.match(/\/sku_(\d+)\//); 1171 if (match) loadKit(match[1]); 1172 }, 300); 1173});
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.