1 2 3 4 5/** 6 * Toolkit JavaScript 7 */ 8 9 10'use strict'; 11 12/* Grid breakpoints */ 13const SM_BP = 576; 14const MD_BP = 768; 15const LG_BP = 1180; 16const XL_BP = 1912; 17 18/* Container max-widths */ 19const SM_MW = 544; 20const MD_MW = 608; 21const LG_MW = 1120; 22const XL_MW = 1696; 23 24 25const is_iOS = ['iPad', 'iPhone', 'iPod', 'iPad Simulator', 'iPhone Simulator', 'iPod Simulator'].includes(navigator.platform) 26|| (navigator.userAgent.includes("Mac") && "ontouchend" in document); 27 28const IOS_POSITION_ERROR_THRESHOLD = is_iOS ? 100 : 0; 29const IOS_SCROLL_THROTTLER_TIME = is_iOS ? 100 : 0; 30let throttlers = {}; 31 32const throttleIfIOS = (key, callback) => { 33 if ( ! is_iOS) { 34 // if not ios, bypass throttle system entirely 35 callback() 36 } 37 else { 38 // initialize if not initialized 39 if (throttlers[key] == null) { 40 throttlers[key] = {shouldThrottle: false, timer: null, debug: false}; 41 } 42 // dont run the function if we're still throttling 43 if (throttlers[key].shouldThrottle) { 44 return; 45 } 46 else { 47 // run the function once in a while unless... 48 throttlers[key].timer = window.setTimeout(() => { 49 throttlers[key].shouldThrottle = false; 50 callback(); 51 if (throttlers[key].debug) 52 {console.debug(`${key} callback called, disabling throtting`) 53 } 54 }, IOS_SCROLL_THROTTLER_TIME); 55 throttlers[key].shouldThrottle = true; 56 if (throttlers[key].debug) { 57 console.debug(`${key} throttling enabled, awaiting timeout`); 58 } 59 } 60 } 61} 62// ...unless we throttle it 63const cancelThrottle = (key) => { 64 if (throttlers[key] == null) {return;} 65 window.clearTimeout(throttlers[key].timer); 66 if (throttlers[key].debug) {console.debug(`Clearing ${key} throttler`)}; 67} 68 69 70//********************** Clamp */ 71$(document).ready(function() { 72 try { 73 if (typeof $('.clamp') !== "undefined") { 74 $('.clamp').each(function(index, element) { 75 $clamp(element, { clamp: 4 }); 76 }); 77 78 } 79 } catch (error) { 80 console.log(error); 81 82 } 83 $(window).resize(function() { 84 try { 85 if (typeof $('.clamp') !== "undefined") { 86 $('.clamp').each(function(index, element) { 87 $clamp(element, { clamp: 'auto' }); 88 }); 89 90 $('.clamp').each(function(index, element) { 91 $clamp(element, { clamp: 4 }); 92 }); 93 94 } 95 } catch (error) { 96 console.log(error); 97 98 } 99 }) 100}) 101 102//********************** Secondary Menu 103 104var secondaryMenuJS = { 105 mainMenuCollapseStructure: function(secondaryMenu, test) { 106 var $secondaryMenu = $(secondaryMenu); 107 // console.log(secondaryMenu); 108 109 $secondaryMenu.each(function(i, e) { 110 var $menuList = $(e).find('.main-menu__list'), 111 $origen = $(e).find('.main-menu__wrapper'), 112 $direction = $(e).find('.nav-dropdown__wrapper'); 113 if (!$($menuList).hasClass('js-menu-filters')) { 114 var $menuListDetached = $($menuList).detach(); 115 } else { 116 var $menuListDetached = 'undefined'; 117 } 118 119 120 if (test && $menuListDetached != 'undefined') { 121 $direction.append($menuListDetached); 122 secondaryMenuJS.mainMenuCollapse(secondaryMenu, test) 123 } else if ($menuListDetached != 'undefined') { 124 $origen.append($menuListDetached); 125 secondaryMenuJS.mainMenuCollapse(secondaryMenu, test) 126 } 127 128 129 }) 130 131 }, 132 mainMenuCollapse: function(secondaryMenu, test) { 133 $(secondaryMenu).each(function(i, e) { 134 var $collapseTrigger = $(e).find('.right-menu__link'), 135 $collapsable = $(e).find('.nav-dropdown'); 136 if (test) { 137 $($collapsable).removeClass('expand'); 138 $($collapseTrigger).removeClass('up'); 139 $($collapseTrigger).click(function() { 140 $($collapseTrigger).toggleClass('up'); 141 $($collapsable).toggleClass('expand'); 142 if (!$($collapsable).hasClass('expand')) { 143 $($collapsable).find('.collapse').collapse('hide'); 144 } else { 145 $($collapsable).find('.collapse').collapse('show'); 146 } 147 }) 148 149 } else { 150 $($collapsable).removeClass('expand'); 151 $($collapseTrigger).removeClass('up'); 152 $($collapsable).find('.collapse').collapse('hide'); 153 if (!$($collapsable).hasClass('expand')) { 154 $($collapsable).addClass('expand'); 155 } 156 } 157 158 }); 159 160 }, 161 collapseSD: function(collapseSD, test) { 162 $(collapseSD).each(function(i, e) { 163 var $anchor = $(e).closestDescendant('a'), 164 $menuCollapse = $(e).closestDescendant('.js-menu-collapse'), 165 menuCollapseID = $($menuCollapse).attr('id'), 166 menuCollapseParent = $(e).parent().attr('class').split(' ')[0], 167 $icon = $(e).closestDescendant('.arrow'); 168 169 if (test) { 170 if ($icon.length > 0) { 171 $($icon).attr('data-toggle', 'collapse') 172 .addClass('collapsed') 173 .attr('data-target', "#" + menuCollapseID) 174 .attr('data-parent', "." + menuCollapseParent) 175 .attr('aria-expanded', false); 176 } else { 177
178 $($anchor).attr('data-toggle', 'collapse') 179 .addClass('collapsed') 180 .attr('data-target', "#" + menuCollapseID) 181 .attr('data-parent', "." + menuCollapseParent) 182 .attr('aria-expanded', false); 183 } 184 $($menuCollapse).addClass('collapse'); 185 $($menuCollapse).removeClass('dropdown-menu'); 186 } else { 187 $($icon).attr('data-toggle', '') 188 .removeClass('collapsed') 189 .attr('data-target', "") 190 .attr('data-parent', "") 191 .attr('aria-expanded', ""); 192 $($menuCollapse).removeClass('collapse'); 193 $($menuCollapse).addClass('dropdown-menu'); 194 } 195 }) 196 }, 197 menuPosition: function(menu) { 198 var $menuPosition = $(menu).find('.submenu-position'), 199 $listLinks = $(menu).find('.main-menu__list').find('a'), 200 text = ''; 201 $($listLinks).each(function(i, e) { 202 if ($(e).hasClass('active')) { 203 text = $(e).html(); 204 } 205 }) 206 if (!text == '') { 207 // console.log(text); 208 209 $($menuPosition).css('display', 'inline-block').html(text); 210 } 211 }, 212 subMenuScrollFix: function (jsSubmenu, i) { 213 // console.log(jsSubmenu.length); 214 215 let subMenuWrapper = $(jsSubmenu); 216 let subMenuWrapperPosition = $(subMenuWrapper).offset(); 217 let scroll = $(window).scrollTop(); 218 let promoHeight = $(".promoSubmenu").length > 0 ? $(".promoSubmenu").height() : 0; 219 let adjustedThreshold = IOS_POSITION_ERROR_THRESHOLD + promoHeight; 220 if ( 221 subMenuWrapperPosition != undefined && 222 subMenuWrapperPosition.top < (scroll + adjustedThreshold) 223 ) { 224 cancelThrottle("secondaryMenuJS") 225 if (!$(subMenuWrapper).hasClass("menu-fixed")) { 226 $(subMenuWrapper).addClass("menu-fixed"); 227 } else if (i == 1 && !$(subMenuWrapper).hasClass("second-submenu")) { 228 var offsetTop = $(".js-submenu").eq(0).children().first().height(); 229 $(subMenuWrapper).addClass("second-submenu"); 230 $(subMenuWrapper).children().first().css("top", offsetTop); 231 } 232 } else { 233 throttleIfIOS("secondaryMenuJS", () => { 234 $(subMenuWrapper).removeClass("menu-fixed"); 235 $(subMenuWrapper).removeClass("second-submenu"); 236 $(subMenuWrapper).children().first().css("top", ""); 237 }) 238 } 239 } 240 241} 242 243 244$(document).ready(function() { 245 var windowWidth = $(window).outerWidth(); 246 var $secondaryMenu = $("section.menus-secundarios"); 247 var $jsSubmenu = $(".js-submenu"); 248 var $collapseSD = $($secondaryMenu).find('.js-collapse-sd'); 249 var mobileLook = false; 250 251 secondaryMenuJS.menuPosition($secondaryMenu); 252 if (windowWidth < 1180) { 253 mobileLook = true; 254 secondaryMenuJS.mainMenuCollapseStructure($secondaryMenu, mobileLook); 255 secondaryMenuJS.collapseSD($collapseSD, mobileLook); 256 } else { 257 secondaryMenuJS.mainMenuCollapseStructure($secondaryMenu, mobileLook); 258 secondaryMenuJS.collapseSD($collapseSD, mobileLook); 259 } 260 261 try { 262 $(window).scroll(function() { 263 if (typeof $jsSubmenu !== 'undefined') { 264 $($jsSubmenu).each(function(i, e) { 265 secondaryMenuJS.subMenuScrollFix(e, i); 266 }) 267 } 268 }) 269 } catch (error) { 270 console.log(error); 271 } 272}); 273 274 275 276var menuAnclas = { 277 setActiveAndScroll: function(menuAnclas, height) { 278 var $listLinks = $(menuAnclas).find('.main-menu-anclas__link'); 279 var $html = $(menuAnclas).closest('html'); 280 var $body = $(menuAnclas).closest('body'); 281 var removeActive = function(list) { 282 $(list).each(function(i, e) { 283 $(e).removeClass('active'); 284 }) 285 } 286 var animateScroll = function(url, height) { 287 if ($(url).offset() !== undefined) { 288 $($html, $body).animate({ scrollTop: ($(url).offset().top) - 100 }, 800); 289 } 290 } 291 $listLinks.each(function(i, e) { 292 var url = $(e).attr('href'); 293 $(e).click(function() { 294 var anclaHeight = $(e).closest('.js-header').height(); 295 removeActive($listLinks); 296 $(e).addClass('active'); 297 animateScroll(url, anclaHeight); 298 299 // return false; 300 }) 301 }) 302 }, 303 anclaNiceScroll: function(menu) { 304 $(menu).find('.row-flex').niceScroll({ 305 cursorcolor: "#d0d3d5" 306 }).resize(); 307 $(menu).find('.row-flex').dragscrollable({ dragSelector: '.main-menu-anclas__wrapper', acceptPropagatedEvent: true }); 308 } 309} 310 311$(document).ready(function() { 312 var $menuAncla = $('.menu-anclas'); 313 314 try { 315 $($menuAncla).each(function(i, e) { 316 menuAnclas.anclaNiceScroll(e); 317 }) 318 } catch (error) { 319 console.log(error); 320 321 } 322 323 try { 324 $($menuAncla).each(function(i, e) { 325 menuAnclas.setActiveAndScroll(e); 326 }) 327 } catch (error) { 328 console.log("try to setActiveAndScroll " + error); 329 } 330 331 try { 332 $(window).scroll(function() { 333 secondaryMenuJS.subMenuScrollFix($menuAncla); 334 335 }) 336 } catch (error) { 337 console.log(error); 338 } 339 340 if ($menuAncla.length > 0) { 341 $('.nicescroll-rails.nicescroll-rails-vr').remove(); 342 } 343 344}) 345 346 347 348var userMenuMobile = { 349 menuPosition: function(userMM) { 350 var $menuPosition = $(userMM).find('.submenu-position'), 351 $listLinks = $(userMM).find('.js-menu-collapse').find('ul li a'), 352 text = ''; 353 $($listLinks).each(function(i, e) { 354 if ($(e).hasClass('active')) { 355 text = $(e).html(); 356 } 357 }) 358 if (!text == '') { 359 $($menuPosition).css('display', 'inline-block').html(text); 360 } 361 } 362} 363 364$(document).ready(function() { 365 var $userMenuMobile = $('.user-menu-mobile'); 366 $userMenuMobile.each(function(i, e) { 367 try { 368 userMenuMobile.menuPosition(e); 369 } catch (error) { 370 console.log('Try get set menuPosition of active submenu ' + error); 371 } 372 }) 373}) 374 375 376 377//************************* Menu Pestañas*/ 378 379 380var pestanaMenuJS = { 381 pestanaSelectInit: function(pestanaWrapper, pestanaMenu, test) { 382 $(pestanaWrapper).each(function(i, e) { 383 var $collapseTrigger = $(e).find('.right-menu__link'), 384 $collapsable = $(e).find('.nav-dropdown'); 385 $(e).find('.tab-content').hide(); 386 $(e).find('.tab-content:first').show(); 387 $(e).find('.main-menu-pestanas__item:first').find('.main-menu-pestanas__link').addClass('active'); 388 pestanaMenuJS.menuPosition(e); 389 $(e).find('.main-menu-pestanas__item').click(function(event) { 390 event.preventDefault(); 391 $(e).find('.main-menu-pestanas__item').find('a').removeClass('active'); 392 $(this).find('a').addClass('active'); 393 $(e).find('.tab-content').hide(); 394 395 var selectTab = $(this).find('a').attr("href"); 396 397 $(selectTab).fadeIn(); 398 pestanaMenuJS.menuPosition(e); 399 // close menu collapse 400 if (test) { 401 402 $($collapseTrigger).toggleClass('up'); 403 $($collapsable).toggleClass('expand'); 404 if (!$($collapsable).hasClass('expand')) { 405 $($collapsable).find('.collapse').collapse('hide'); 406 } 407 } 408 409 }); 410 411 }) 412 }, 413 pestanaSelect: function(pestanaWrapper, pestanaMenu, test) { 414 $(pestanaWrapper).each(function(i, e) { 415 var $collapseTrigger = $(e).find('.right-menu__link'), 416 $collapsable = $(e).find('.nav-dropdown'); 417 $(e).find('.tab-content').hide(); 418 $(e).find('.main-menu-pestanas__item').click(function(event) { 419 event.preventDefault(); 420 $(e).find('.main-menu-pestanas__item').find('a').removeClass('active'); 421 $(this).find('a').addClass('active'); 422 $(e).find('.tab-content').hide(); 423 424 var selectTab = $(this).find('a').attr("href"); 425 426 $(selectTab).fadeIn(); 427 428 // close menu collapse 429 if (test) { 430 431 $($collapseTrigger).toggleClass('up'); 432 $($collapsable).toggleClass('expand'); 433 if (!$($collapsable).hasClass('expand')) { 434 $($collapsable).find('.collapse').collapse('hide'); 435 } 436 } 437 438 }); 439 440 }) 441 }, 442 mainMenuCollapseStructure: function(pestanaMenu, test) { 443 var $pestanaMenu = $(pestanaMenu); 444 // console.log(pestanaMenu); 445 446 $pestanaMenu.each(function(i, e) { 447 var $menuList = $(e).find('.main-menu-pestanas__list'), 448 $origen = $(e).find('.main-menu-pestanas__wrapper'), 449 $direction = $(e).find('.nav-dropdown__wrapper'), 450 $menuListDetached = $($menuList).detach(); 451 452 453 if (test) { 454 $direction.append($menuListDetached); 455 pestanaMenuJS.mainMenuCollapse(pestanaMenu, test) 456 } else { 457 $origen.append($menuListDetached); 458 pestanaMenuJS.mainMenuCollapse(pestanaMenu, test) 459 } 460 461 462 }) 463 464 }, 465 mainMenuCollapse: function(pestanaMenu, test) { 466 $(pestanaMenu).each(function(i, e) { 467 var $collapseTrigger = $(e).find('.right-menu__link'), 468 $collapsable = $(e).find('.nav-dropdown'); 469 if (test) { 470 $($collapseTrigger).removeClass('up'); 471 $($collapsable).removeClass('expand'); 472 $($collapseTrigger).click(function() { 473 $($collapseTrigger).toggleClass('up'); 474 $($collapsable).toggleClass('expand'); 475 if (!$($collapsable).hasClass('expand')) { 476 $($collapsable).find('.collapse').collapse('hide'); 477 } else { 478 $($collapsable).find('.collapse').collapse('show'); 479 } 480 }) 481 482 } else { 483 $($collapsable).removeClass('expand'); 484 $($collapseTrigger).removeClass('up'); 485 $($collapsable).find('.collapse').collapse('hide'); 486 if (!$($collapsable).hasClass('expand')) { 487 $($collapsable).addClass('expand'); 488 } 489 } 490 491 }); 492 493 }, 494 collapseSD: function(collapseSD, test) { 495 $(collapseSD).each(function(i, e) { 496 var $anchor = $(e).closestDescendant('a'), 497 $menuCollapse = $(e).closestDescendant('.js-menu-collapse'), 498 menuCollapseID = $($menuCollapse).attr('id'), 499 menuCollapseParent = $(e).parent().attr('class').split(' ')[0], 500 $icon = $(e).closestDescendant('.arrow'); 501 502 if (test) { 503 if ($icon.length > 0) { 504 $($icon).attr('data-toggle', 'collapse') 505 .addClass('collapsed') 506 .attr('data-target', "#" + menuCollapseID) 507 .attr('data-parent', "." + menuCollapseParent) 508 .attr('aria-expanded', false); 509 } else { 510
511 $($anchor).attr('data-toggle', 'collapse') 512 .addClass('collapsed') 513 .attr('data-target', "#" + menuCollapseID) 514 .attr('data-parent', "." + menuCollapseParent) 515 .attr('aria-expanded', false); 516 } 517 $($menuCollapse).addClass('collapse'); 518 $($menuCollapse).removeClass('dropdown-menu'); 519 } else { 520 $($icon).attr('data-toggle', '') 521 .removeClass('collapsed') 522 .attr('data-target', "") 523 .attr('data-parent', "") 524 .attr('aria-expanded', ""); 525 $($menuCollapse).removeClass('collapse'); 526 $($menuCollapse).addClass('dropdown-menu'); 527 } 528 }) 529 }, 530 menuPosition: function(menu) { 531 var $menuPosition = $(menu).find('.submenu-position'), 532 $listLinks = $(menu).find('.main-menu-pestanas__link'), 533 text = ''; 534 535 $($listLinks).each(function(i, e) { 536 if ($(e).hasClass('active')) { 537 text = $(e).html(); 538 } 539 }) 540 if (!text == '') { 541 // console.log(text); 542 543 $($menuPosition).css('display', 'inline-block').html(text); 544 } 545 }, 546 subMenuScrollFix: function(jsSubmenu, i) { 547 // console.log(jsSubmenu.length); 548 549 let subMenuWrapper = $(jsSubmenu); 550 let subMenuWrapperPosition = $(subMenuWrapper).offset(); 551 let scroll = $(window).scrollTop(); 552 let promoHeight = $(".promoSubmenu").length > 0 ? $(".promoSubmenu").height() : 0; 553 let adjustedThreshold = IOS_POSITION_ERROR_THRESHOLD + promoHeight; 554 if ( 555 subMenuWrapperPosition != undefined && 556 subMenuWrapperPosition.top < (scroll + adjustedThreshold) 557 ) { 558 cancelThrottle("pestanaMenu") 559 if (!$(subMenuWrapper).hasClass("menu-fixed")) { 560 $(subMenuWrapper).addClass("menu-fixed"); 561 } else if (i == 1 && !$(subMenuWrapper).hasClass("second-submenu")) { 562 $(subMenuWrapper).addClass("second-submenu"); 563 } 564 } else { 565 throttleIfIOS("pestanaMenu", () => { 566 $(subMenuWrapper).removeClass("menu-fixed"); 567 $(subMenuWrapper).removeClass("second-submenu"); 568 }) 569 } 570 }, 571 572} 573 574$(document).ready(function() { 575 $('[data-lazy-image]').each(function() { 576 var lazy = $(this).data('lazy-image'), 577 value = $(this).attr('src'); 578 if ((!value) && (lazy)) { $(this).attr('src', lazy); } 579 }); 580 $('[data-lazybck-image]').each(function() { 581 var lazy = $(this).data('lazybck-image'), 582 value = $(this).css('background-image'); 583 if ((!value) && (lazy)) { $(this).css('background-image', 'url(' + lazy + ')'); } 584 }) 585 $('[data-lazy-css]').each(function() { 586 var lazy = $(this).data('lazy-css'); 587 if ((lazy) && (!$(this).hasClass(lazy))) { $(this).addClass(lazy); } 588 }) 589}); 590 591$(document).ready(function() { 592 var windowWidth = $(window).outerWidth(); 593 var $pestanaWrapper = $(".menu-pestanas-wrapper"); 594 var $pestanaMenu = $("section.menu-pestanas"); 595 var $jsSubmenu = $(".js-submenu"); 596 var $collapseSD = $($pestanaMenu).find('.js-collapse-sd'); 597 var mobileLook = false; 598 599 if (windowWidth < 992) { 600 mobileLook = true; 601 pestanaMenuJS.pestanaSelectInit($pestanaWrapper, $pestanaMenu, mobileLook); 602 pestanaMenuJS.mainMenuCollapseStructure($pestanaMenu, mobileLook); 603 pestanaMenuJS.collapseSD($collapseSD, mobileLook); 604 } else { 605 pestanaMenuJS.pestanaSelectInit($pestanaWrapper, $pestanaMenu, mobileLook); 606 pestanaMenuJS.mainMenuCollapseStructure($pestanaMenu, mobileLook); 607 pestanaMenuJS.collapseSD($collapseSD, mobileLook); 608 } 609 610 try { 611 $(window).scroll(function() { 612 $($jsSubmenu).each(function(i, e) { 613 if (e.length > 0) { 614 pestanaMenuJS.subMenuScrollFix(e, i); 615 } 616 }) 617 }) 618 } catch (error) { 619 console.log(error); 620 } 621 622 623 624 var initWidth = $(window).outerWidth(); 625 $(window).resize(function() { 626 if ($(this).width() != initWidth) { 627 var windowWidth = $(window).outerWidth(); 628 var $pestanaWrapper = $(".menu-pestanas-wrapper"); 629 var $pestanaMenu = $("section.menu-pestanas"); 630 var $collapseSD = $($pestanaMenu).find('.js-collapse-sd'); 631 var mobileLook = false; 632 633 if (windowWidth < 992) { 634 mobileLook = true; 635 pestanaMenuJS.pestanaSelect($pestanaWrapper, $pestanaMenu, mobileLook); 636 pestanaMenuJS.mainMenuCollapseStructure($pestanaMenu, mobileLook); 637 pestanaMenuJS.collapseSD($collapseSD, mobileLook); 638 } else { 639 pestanaMenuJS.pestanaSelect($pestanaWrapper, $pestanaMenu, mobileLook); 640 pestanaMenuJS.mainMenuCollapseStructure($pestanaMenu, mobileLook); 641 pestanaMenuJS.collapseSD($collapseSD, mobileLook); 642 } 643 644 } 645 }) 646 647}); 648 649//********************** Cabecera destacada 650 651var cabDestacada = { 652 setHeight: function($destacada) { 653 var headerHeight = $($destacada).closest('body').find('header').height(); 654 655 $($destacada).each(function() { 656 if (!$(this).hasClass('autoHeight')) { 657 $(this).find('.jumbotron').css('height', "calc(100vh - " + headerHeight + "px)"); 658 } 659 }) 660 }, 661 clear: function($cabDestacada) { 662 if ($($cabDestacada).find('.slick-prev').length > 0) { 663 $($cabDestacada).find('.slick-prev').html(''); 664 } 665 666 if ($($cabDestacada).find('.slick-next').length > 0) { 667 $($cabDestacada).find('.slick-next').html(''); 668 } 669 670 if ($($cabDestacada).find('.slider-counter').length > 0) { 671 $($cabDestacada).find('.slider-counter').each(function(i, e) { $(e).remove() }); 672 } 673 }, 674 encapsulateDots: function($cabDestacada) { 675 $($cabDestacada).each(function(i, e) { 676 let $dots = $(e).find('.slick-dots'); 677 678 let $prevArrow = $(e).find('.slick-prev').detach(); 679 let $nextArrow = $(e).find('.slick-next').detach(); 680 681 $dots.before("<div class='dots-wrapper'></div>"); 682 let detached = $dots.detach(); 683 684 $(detached).appendTo($(e).find('.dots-wrapper')); 685 686 $prevArrow.prependTo($(e).find('.dots-wrapper')); 687 $nextArrow.appendTo($(e).find('.dots-wrapper')); 688 689 if ($($dots).find('li').length < 2) { 690 $(e).find('.dots-wrapper').hide(); 691 } 692 }); 693 }, 694 slideCounter: function($cabDestacada, actual, total) { 695 actual = actual + 1; 696 var $dots = $($cabDestacada).find('.slick-dots'); 697 698 if (actual < 10) { $dots.before("<span class='actual slider-counter'>0" + actual + "</span>") } else { $dots.before("<span class='actual slider-counter'>" + actual + "</span>") } 699 700 if (total < 10) { $dots.after("<span class='total slider-counter'>0" + total + "</span>") } else { $dots.after("<span class='total slider-counter'>" + total + "</span>") } 701 }, 702 noVideoMobile: function($cabDestacada) { 703 var video = $($cabDestacada).find('.video-wrapper-loop').find('video'); 704 var iframe = $($cabDestacada).find('.video-wrapper-loop').find('iframe'); 705 $(video).find('source').each(function(i, e) { 706 $(e).attr('src', ''); 707 }) 708 $(iframe).attr('src', ''); 709 }, 710 init: function($cabDestacada, actual, total, isMovil) { 711 cabDestacada.clear($cabDestacada); 712 cabDestacada.encapsulateDots($cabDestacada); 713 cabDestacada.slideCounter($cabDestacada, actual, total); 714 $(".slider-cabecera .slick-slide").css({ display: "block" }); 715 }, 716 render: function($cabDestacada, actual, total) { 717 cabDestacada.clear($cabDestacada); 718 cabDestacada.slideCounter($cabDestacada, actual, total); 719 } 720} 721 722// vertical number lines functions 723document.addEventListener("DOMContentLoaded", () => { 724 // check if number line child exist 725 const checkNumberLineChild = () => { 726 727 // highlighted slider celite 728 const highlightedSliderCelite = document.querySelectorAll(".cabecera-destacada-celite"); 729 730 if (highlightedSliderCelite) { 731 highlightedSliderCelite.forEach((slider) => { 732 // check number line top top number 733 function checkTopNumber() { 734 if ( 735 slider.firstElementChild.classList.contains("number-line") && 736 slider.firstElementChild.classList.contains("top-top") 737 ) { 738 slider.classList.add("has-top-number"); 739 } else { 740 slider.classList.remove("has-top-number"); 741 } 742 } 743 744 //check number line bottom bottom number 745 function checkBottomNumber() { 746 if ( 747 slider.lastElementChild.classList.contains("number-line") && 748 slider.lastElementChild.classList.contains("bottom-bottom") 749 ) { 750 slider.classList.add("has-bottom-number"); 751 } else { 752 slider.classList.remove("has-bottom-number"); 753 } 754 } 755 756 // call functions 757 checkTopNumber(); 758 checkBottomNumber(); 759 }); 760 } 761 762 763 // highlighted slider 764 const highlightedSlider = document.querySelectorAll(".cabecera-destacada"); 765 766 if (highlightedSlider) { 767 highlightedSlider.forEach((slider) => { 768 // check number line top top number 769 function checkTopNumber() { 770 if ( 771 slider.firstElementChild.classList.contains("number-line") && 772 slider.firstElementChild.classList.contains("top-top") 773 ) { 774 slider.classList.add("has-top-number"); 775 } else { 776 slider.classList.remove("has-top-number"); 777 } 778 } 779 780 //check number line bottom bottom number 781 function checkBottomNumber() { 782 if ( 783 slider.lastElementChild.classList.contains("number-line") && 784 slider.lastElementChild.classList.contains("bottom-bottom") 785 ) { 786 slider.classList.add("has-bottom-number"); 787 } else { 788 slider.classList.remove("has-bottom-number"); 789 } 790 } 791 792 // call functions 793 checkTopNumber(); 794 checkBottomNumber(); 795 }); 796 } 797 798 // product distributor 799 const productDistributor = document.querySelectorAll(".producto-distribuidor"); 800 801 if (productDistributor) { 802 productDistributor.forEach((slider) => { 803 // check number line top top number 804 function checkTopNumber() { 805 if ( 806 slider.firstElementChild.classList.contains("number-line") && 807 slider.firstElementChild.classList.contains("top-top") 808 ) { 809 slider.classList.add("has-top-number"); 810 } else { 811 slider.classList.remove("has-top-number"); 812 } 813 } 814 815 // check number line bottom bottom number 816 function checkBottomNumber() { 817 if ( 818 slider.lastElementChild.classList.contains("number-line") && 819 slider.lastElementChild.classList.contains("bottom-bottom") 820 ) { 821 slider.classList.add("has-bottom-number"); 822 } else { 823 slider.classList.remove("has-bottom-number"); 824 } 825 } 826 827 // call functions 828 checkTopNumber(); 829 checkBottomNumber(); 830 }); 831 } 832 }; 833 834 // hide vertical number line if number doesn't exist 835 function hideNumberLines() { 836 const numbersLine = document.querySelectorAll(".number-line"); 837 const numberLine = numbersLine.forEach((number) => { 838 if (number.textContent === "") { 839 number.style.setProperty("--display", "none"); 840 } 841 }); 842 } 843 844 // call functions 845 checkNumberLineChild(); 846 hideNumberLines(); 847}); 848 849 850$(document).ready(function() { 851 852 var direction; 853 var useRtl = false;
854 (document.dir != undefined) ? direction = document.dir: direction = document.getElementsByTagName("html")[0].getAttribute("dir"); 855 856 if (direction == 'rtl') { useRtl = true; } 857 858 try { 859 var hasThumbnailSlider = function(el) { 860 var itHas = $(el).closest('.cabecera-destacada').find('.js-slider-thumbnails').length > 0; 861 862 return itHas; 863 } 864 } catch (error) { 865 console.log(error); 866 867 } 868 869 try { 870 var $cabeceraDest = $('.cabecera-destacada').eq(0); 871 cabDestacada.setHeight($cabeceraDest); 872 } catch (error) { 873 console.log("setting cabecera destacada height, got this error " + error); 874 } 875 876 877 try { 878 $('.js-slider-cabecera').each(function(i, e) { 879 var total = 0; 880 var current = 0; 881 882 $(e).on('init', function(event, slick, currentSlide, nextSlide) { 883 total = slick.slideCount; 884 current = 0; 885 }); 886 887 if (hasThumbnailSlider(e)) { 888 $(e).not('.slick-initialized').slick({ dots: true, speed: 300, rtl: useRtl, asNavFor: '.js-slider-thumbnails' }); 889 $(e).closest('.cabecera-destacada').find('.js-slider-thumbnails').not('.slick-initialized').slick({ 890 slidesToShow: 7, 891 swipeToSlide: true, 892 arrows: false, 893 dots: false, 894 rtl: useRtl, 895 centerMode: true, 896 asNavFor: '.js-slider-cabecera', 897 focusOnSelect: true, 898 responsive: [{ 899 breakpoint: LG_BP, 900 settings: 'unslick' 901 }] 902 }) 903 } else { 904 let autoTime = $(e).data("auto-time"); 905 let autoPlay = false 906 907 if (autoTime && autoTime !== undefined && autoTime > 0) { 908 autoPlay = true; 909 } else { 910 autoTime = 0; 911 } 912 913 $(e).not('.slick-initialized').slick({ 914 dots: true, 915 rtl: useRtl, 916 speed: 300, 917 autoplay: autoPlay, 918 autoplaySpeed: autoTime 919 }); 920 } 921 var isMovil = 'undefined'; 922 if ($(window).outerWidth() > 991 && $(window).outerWidth() < 1199) { 923 isMovil = 'isTablet' 924 } else if ($(window).outerWidth() < 991) { 925 isMovil = 'isMovil' 926 } 927 cabDestacada.init(e, current, total, isMovil); 928 }) 929 } catch (error) { 930 console.log("init slider cabecera destacada " + error); 931 932 } 933 934 try { 935 $('.js-slider-cabecera').each(function(i, e) { 936 $(e).on('afterChange', function(event, slick, currentSlide, nextSlide) { 937 var total = slick.slideCount; 938 939 cabDestacada.render(e, currentSlide, total); 940 var scrollElement = $('.js-center-scroll'); 941 commons.centerScroll(scrollElement); 942 943 }); 944 }) 945 } catch (error) { 946 console.log("on change slider cabecera destacada " + error); 947 } 948 949 // Video 950 try { 951 var $cabeceraDest = $('.cabecera-destacada'); 952 if ($(window).outerWidth() < LG_BP) { 953 cabDestacada.noVideoMobile($cabeceraDest); 954 } 955 } catch (error) { 956 console.log("video bg mobile " + error); 957 } 958 959}); 960 961$(document).ready(function () { 962 $('[data-lazy-image]').each(function () { 963 var lazy = $(this).data('lazy-image'), value = $(this).attr('src'); 964 if ((!value) && (lazy)) { $(this).attr('src', lazy); } 965 }); 966 967 $('[data-lazybck-image]').each(function () { 968 var lazy = $(this).data('lazybck-image'), value = $(this).css('background-image'); 969 if ((!value) && (lazy)) { $(this).css('background-image', 'url(' + lazy + ')'); } 970 }) 971 972 $('[data-lazy-css]').each(function () { 973 var lazy = $(this).data('lazy-css'); 974 if ((lazy) && (!$(this).hasClass(lazy))) { $(this).addClass(lazy); } 975 }) 976 977}); 978 979$(window).resize(function() { 980 try { 981 var $cabeceraDest = $('.cabecera-destacada'); 982 $($cabeceraDest).each(function() { 983 cabDestacada.setHeight(this); 984 }) 985 } catch (error) { 986 console.log("setting cabecera destacada height, got this error " + error); 987 } 988}); 989 990// cambio posicion slick-dots 991 992$(document).ready(function() { 993 $('.product-detail-manual .slick-dots').appendTo('.product-detail-manual .move-slick-dots'); 994}); 995$(document).ready(function() { 996 $('.product-detail-full-width .slick-dots').appendTo('.product-detail-full-width .move-slick-dots'); 997}); 998 999// cambio posicion anclas 1000$(document).ready(function() { 1001 function moveAnclas() { 1002 if ($(window).outerWidth() <= 768) { 1003 if ($('.menu-anclas.transparent-theme').length > 0) { 1004 $('.menu-anclas.transparent-theme').appendTo('.product-detail-manual .move-anclas'); 1005 } 1006 if ($('.menu-anclas.white-theme').length > 0) { 1007 $('.menu-anclas.white-theme').appendTo('.product-detail .move-anclas-normal-mobile'); 1008 } 1009 if ($('.list-actions').length > 0) { 1010 $('.list-actions').appendTo('.move-list-action-mobile'); 1011 } 1012 } else { 1013 if ($('.menu-anclas.transparent-theme').length > 0) { 1014 $('.menu-anclas.transparent-theme').appendTo('.menudesktop'); 1015 } 1016 1017 if ($('.menu-anclas.white-theme').length > 0) { 1018 var $submenu = $(); 1019 $('.js-submenu').each(function() { 1020 if ($(this).closest('.js-header').length < 1) { 1021 $submenu = $(this); 1022 } 1023 }) 1024 $('.menu-anclas.white-theme').appendTo($submenu); 1025 } 1026 1027 if ($('.list-actions').length > 0) { 1028 $('.list-actions').appendTo('.menu-anclas .right-menu__wrapper'); 1029 } 1030 } 1031 } 1032 moveAnclas(); 1033 $(window).resize(moveAnclas); 1034}); 1035 1036// cambio posicion breadcrumb para mobile 1037$(document).ready(function() { 1038 function moveBreadcrumbFull() { 1039 var contenedor = "<div class='container container-helper'></div>"; 1040 if ($(window).outerWidth() < 992) { 1041 if ($('.move-breadcrumb-mobile').length > 0 && $('.breadcrumb.full-width').length > 0) { 1042 $(' .breadcrumb.full-width').appendTo('.move-breadcrumb-mobile'); 1043 } else { 1044 if ($('.breadcrumb.full-width').length > 0 && $('.container-helper .breadcrumb.full-width').length < 1) { 1045 $('.container-helper').remove(); 1046 $('header').after(contenedor); 1047 $('.breadcrumb.full-width').appendTo('.container-helper'); 1048 } 1049 } 1050 } else { 1051 if ($('.breadcrumb.full-width').length > 0) { 1052 $(' .breadcrumb.full-width').appendTo('.breadcrumb-desktop'); 1053 $('.container-helper').remove(); 1054 } 1055 } 1056 } 1057 moveBreadcrumbFull(); 1058 $(window).resize(moveBreadcrumbFull); 1059}); 1060 1061 1062$(document).ready(function() { 1063 function moveBreadcrumb() { 1064 var contenedor = "<div class='container container-helper'></div>"; 1065 if ($(window).outerWidth() < 992) { 1066 if ($('.move-breadcrumb-mobile').length > 0 && $(' .breadcrumb.normal').length > 0) { 1067 $('.breadcrumb.normal').appendTo('.move-breadcrumb-mobile'); 1068 } else { 1069 if ($(' .breadcrumb.normal').length > 0 && $('.container-helper .breadcrumb.normal').length < 1) { 1070 // $('.container-helper').remove(); 1071 $('header').after(contenedor); 1072 $(' .breadcrumb.normal').appendTo('.container-helper'); 1073 } 1074 } 1075 } else { 1076 if ($(' .breadcrumb.normal').length > 0) { 1077 $('.breadcrumb.normal').prependTo('.product-card.options'); 1078 $('.container-helper').remove(); 1079 } 1080 } 1081 } 1082 moveBreadcrumb(); 1083 $(window).resize(moveBreadcrumb); 1084}); 1085 1086// cambio posicion anclas para mobile en full with 1087$(document).ready(function() { 1088 function moveDiv() { 1089 if ($(window).outerWidth() < 992) { 1090 $('.menu-anclas.white-theme').prependTo(' .move-anclas-full-width-mobile'); 1091 } 1092 } 1093 moveDiv(); 1094 $(window).resize(moveDiv); 1095}); 1096 1097 1098// cambio posicion product navigation para mobile en full with 1099$(document).ready(function() { 1100 function moveDiv() { 1101 if ($(window).outerWidth() < 992) { 1102 if ($('.move-product-navigation-full-width-mobile').length > 0 && $('.product_navigation').length > 0) { 1103 $('.product_navigation').appendTo(' .move-product-navigation-full-width-mobile'); 1104 } 1105 } 1106 } 1107 moveDiv(); 1108 $(window).resize(moveDiv); 1109}); 1110 1111 1112//********************** Hotspots 1113// Hotspots 1114 1115var hotspots = { 1116 clear: function($hotspots) { 1117 var $slide = $($hotspots).find('.hotspots-slide'); 1118 var $pointLink = $($hotspots).find('.hotspots-points').find('.point'); 1119 $slide.each(function(i, e) { 1120 $(e).removeClass('show'); 1121 }) 1122 $pointLink.each(function(i, e) { 1123 $(e).parent().removeClass('active'); 1124 }) 1125 1126 }, 1127 showSlide: function($hotspots, dataShow) { 1128 var $slide = $($hotspots).find('.hotspots-slide'); 1129 $slide.each(function(i, e) { 1130 var slideId = "#" + $(e).attr('id'); 1131 if (slideId == dataShow) { 1132 $(e).addClass('show'); 1133 hotspots.dataSlideSetter($hotspots, i); 1134 } 1135 }) 1136 }, 1137 initSlide: function($hotspots) { 1138 var $slide = $($hotspots).find('.hotspots-slide'); 1139 // var $slide = $($hotspots).find('.hotspots-slide'); 1140 var $pointList = $($hotspots).find('.hotspots-points').find('a'); 1141 var dataShow = $pointList.first().attr('data-show'); 1142 1143 $pointList.each(function(i, e) { 1144 if (i == 0) { 1145 hotspots.showSlide($hotspots, dataShow); 1146 $(e).addClass('active'); 1147 } 1148 1149 }) 1150 $slide.each(function(i, e) { 1151 $(e).find('.js-close').click(function() { 1152 hotspots.clear($hotspots); 1153 hotspots.dataSlideSetter($hotspots, 0); 1154 }) 1155 }) 1156 }, 1157 setup: function($hotspots) { 1158 var $image = $($hotspots).find('.hotspot-overflow').closestDescendant('img'); 1159 var $list = $($hotspots).find('.hotspots-points'); 1160 1161 var width = $image.width(); 1162 $list.width(width); 1163 }, 1164 activate: function($hotspots) { 1165 // var $slide = $($hotspots).find('.hotspots-slide'); 1166 var $pointLink = $($hotspots).find('.hotspots-points').find('.point'); 1167 var dataShow = ""; 1168 1169 $pointLink.each(function(i, e) { 1170 $(e).click(function(i, el) { 1171 var $el = $(this); 1172 dataShow = $($el).parent().attr('data-show'); 1173 // console.log(dataShow); 1174 1175 if ($($el).parent().hasClass('active')) { 1176 1177 try { 1178 hotspots.clear($hotspots); 1179 } catch (error) { 1180 console.log("clear hotspots got this " + error); 1181 } 1182 1183 } else { 1184 try { 1185 hotspots.clear($hotspots); 1186 } catch (error) { 1187 console.log("clear hotspots got this " + error); 1188 } 1189 1190 try { 1191 $($el).parent().addClass('active'); 1192 hotspots.showSlide($hotspots, dataShow); 1193 } catch (error) { 1194 console.log("show slide hotspots got this " + error); 1195 } 1196 } 1197 1198 }) 1199 }) 1200 }, 1201 dataSlideSetter: function($hotspots, index) { 1202 // console.log($($hotspots).find('.hotspots-sliders-arrows')); 1203 1204 $($hotspots).find('.hotspots-sliders-arrows').attr('data-sli
1204de', index); 1205 }, 1206 arrows: function($hotspots) { 1207 var $arrowLeft = $($hotspots).find('.arrow-left'); 1208 var $arrowRight = $($hotspots).find('.arrow-right'); 1209 var actualSlide = $($hotspots).find('.hotspots-sliders-arrows').data('slide'); 1210 var $pointList = $($hotspots).find('.hotspots-points').find('a') 1211 var slidesLength = $($hotspots).find('.hotspots-points').find('a').length; 1212 1213 var displaySlide = function(i) { 1214 // var dataShow = $pointList.get(i).attr('data-show'); 1215 var $elem = $pointList.get(i); 1216 var dataShow = $($elem).data('show'); 1217 // console.log('dataShow', dataShow); 1218 1219 hotspots.clear($hotspots); 1220 $($elem).addClass('active'); 1221 hotspots.showSlide($hotspots, dataShow); 1222 1223 }; 1224 1225 1226 $arrowLeft.click(function() { 1227 actualSlide--; 1228 if (actualSlide < 0) { 1229 actualSlide = slidesLength - 1; 1230 } 1231 displaySlide(actualSlide); 1232 }) 1233 $arrowRight.click(function() { 1234 actualSlide++; 1235 if (actualSlide > slidesLength - 1) { 1236 actualSlide = 0; 1237 } 1238 displaySlide(actualSlide); 1239 }) 1240 1241 }, 1242 init: function($hotspots) { 1243 1244 hotspots.setup($hotspots); 1245 hotspots.initSlide($hotspots); 1246 hotspots.activate($hotspots); 1247 hotspots.arrows($hotspots); 1248 }, 1249 render: function($hotspots) { 1250 1251 hotspots.clear($hotspots); 1252 hotspots.setup($hotspots); 1253 }, 1254 renderResize: function($hotspots) { 1255 1256 hotspots.setup($hotspots); 1257 } 1258} 1259 1260$.fn.isInViewport = function() { 1261 var elementTop = $(this).offset().top; 1262 var elementBottom = elementTop + $(this).outerHeight(); 1263 1264 var viewportTop = $(window).scrollTop(); 1265 var viewportBottom = viewportTop + 100; 1266 1267 return elementBottom > viewportTop && elementTop < viewportBottom; 1268}; 1269 1270$(window).on('resize scroll', function() { 1271 $('.hotspots').each(function() { 1272 if ($(this).isInViewport()) { 1273 $(this).removeClass('anime-shake'); 1274 $(this).addClass('anime-shake'); 1275 } else { 1276 $(this).removeClass('anime-shake'); 1277 } 1278 }); 1279}); 1280 1281$(document).ready(function() { 1282 1283 var $hotspots = $('.hotspots'); 1284 1285 $hotspots.each(function(i, e) { 1286 try { 1287 hotspots.init(e) 1288 } catch (error) { 1289 console.log('init hotspots got this error ' + error); 1290 1291 } 1292 }) 1293}) 1294 1295$(window).resize(function() { 1296 1297 var $hotspots = $('.hotspots'); 1298 1299 $hotspots.each(function(i, e) { 1300 try { 1301 hotspots.renderResize(e) 1302 } catch (error) { 1303 console.log('init hotspots got this error ' + error); 1304 1305 } 1306 }) 1307}) 1308 1309 1310// find puntos 1311// $('#pointer_div').click(function(e){ 1312// var imgWidth = $(this).find('img').width(); 1313// var imgHeight = $(this).find('img').height(); 1314// var pos_x = Math.round((e.offsetX/imgWidth) * 100); 1315// var pos_y = Math.round((e.offsetY/imgHeight) * 100); 1316// $('input[name=form_x]').val(pos_x); 1317// $('input[name=form_y]').val(pos_y); 1318// }) 1319 1320 1321 1322 1323 1324 1325//********************** Blog 1326 1327$(document).ready(function() { 1328 try { 1329 1330 var direction; 1331 var useRtl = false; 1332 (document.dir != undefined) ? direction = document.dir: direction = document.getElementsByTagName("html")[0].getAttribute("dir"); 1333 1334 if (direction == 'rtl') { useRtl = true; } 1335 1336 if ($('.js-slider-blog').length > 0) { 1337 $('.js-slider-blog').each(function(i, slider) { 1338 var blogSlidercols = $(slider).data('col'); 1339 $(slider).not('.slick-initialized').slick({ 1340 dots: true, 1341 arrow: false, 1342 swipeToSlide: true, 1343 rtl: useRtl, 1344 infinite: false, 1345 speed: 300, 1346 slidesToShow: blogSlidercols, 1347 responsive: [{ 1348 breakpoint: 991, 1349 settings: { 1350 dots: false, 1351 rtl: useRtl 1352 } 1353 }, 1354 { 1355 breakpoint: 767, 1356 settings: { 1357 dots: false, 1358 slidesToShow: 1, 1359 rtl: useRtl 1360 } 1361 } 1362 ] 1363 }); 1364 }) 1365 1366 }; 1367 1368 } catch (error) { 1369 console.log('Try set slider blog got ' + error); 1370 } 1371}) 1372 1373//********************** Coleccion slider 1374 1375var colectionSlider = { 1376 clear: function($colectionSlider) { 1377 1378 if ($($colectionSlider).closest('.slider-blog').find('.counter-sit').length > 0) { 1379 1380 $($colectionSlider).closest('.slider-blog').find('.slider-counter').each(function(i, e) { $(e).remove() }); 1381 } 1382 }, 1383 slideCounter: function($colectionSlider, actual, total) { 1384 actual = actual + 1; 1385 1386 var $counter = $($colectionSlider).closest('.slider-blog').find('.counter-sit'); 1387 if (total > 1) { 1388 if (actual < 10) { $counter.append("<span class='actual slider-counter'>0" + actual + "</span>") } else { $counter.append("<span class='actual slider-counter'>" + actual + "</span>") } 1389 1390 if (total < 10) { $counter.append("<span class='total slider-counter'>0" + total + "</span>") } else { $counter.append("<span class='total slider-counter'>" + total + "</span>") } 1391 //$counter.append("<span class='actual slider-counter'>0"+ actual +"</span>" + "<span class='total slider-counter'>0"+ total +"</span>") 1392 } 1393 }, 1394 init: function($colectionSlider, actual, total) { 1395 colectionSlider.clear($colectionSlider); 1396 colectionSlider.slideCounter($colectionSlider, actual, total); 1397 }, 1398 render: function($colectionSlider, actual, total) { 1399 colectionSlider.clear($colectionSlider); 1400 colectionSlider.slideCounter($colectionSlider, actual, total); 1401 } 1402 1403} 1404 1405// Collection Lightbox Slider 1406var collectionSlider = { 1407 clear: function($collectionSlider) { 1408 if ( 1409 $($collectionSlider).closest(".slider-blog").find(".counter-sit") 1410 .length > 0 1411 ) { 1412 $($collectionSlider) 1413 .closest(".slider-blog") 1414 .find(".slider-counter") 1415 .each(function(i, e) { 1416 $(e).remove(); 1417 }); 1418 } 1419 }, 1420 slideCounter: function($collectionSlider, actual, total) { 1421 actual = actual + 1; 1422 1423 var $counter = $($collectionSlider) 1424 .closest(".slider-blog") 1425 .find(".counter-sit"); 1426 if (total > 1) { 1427 if (actual < 10) { 1428 $counter.append( 1429 "<span class='actual slider-counter'>0" + actual + "</span>" 1430 ); 1431 } else { 1432 $counter.append( 1433 "<span class='actual slider-counter'>" + actual + "</span>" 1434 ); 1435 } 1436 1437 if (total < 10) { 1438 $counter.append( 1439 "<span class='total slider-counter'>0" + total + "</span>" 1440 ); 1441 } else { 1442 $counter.append( 1443 "<span class='total slider-counter'>" + total + "</span>" 1444 ); 1445 } 1446 //$counter.append("<span class='actual slider-counter'>0"+ actual +"</span>" + "<span class='total slider-counter'>0"+ total +"</span>") 1447 } 1448 }, 1449 init: function($collectionSlider, actual, total) { 1450 colectionSlider.clear($collectionSlider); 1451 colectionSlider.slideCounter($collectionSlider, actual, total); 1452 }, 1453 render: function($collectionSlider, actual, total) { 1454 colectionSlider.clear($collectionSlider); 1455 colectionSlider.slideCounter($collectionSlider, actual, total); 1456 }, 1457}; 1458 1459 1460 1461$(document).ready(function() { 1462 1463 var direction; 1464 var useRtl = false;
1465 (document.dir != undefined) ? direction = document.dir: direction = document.getElementsByTagName("html")[0].getAttribute("dir"); 1466 1467 if (direction == 'rtl') { useRtl = true; } 1468 1469 try { 1470 $('.js-slider-coleccion').each(function(i, e) { 1471 var total = 0; 1472 var current = 0; 1473 $(e).on('init', function(event, slick, currentSlide, nextSlide) { 1474 total = slick.slideCount; 1475 current = 0; 1476 1477 }); 1478 $(e).not('.slick-initialized').slick({ 1479 dots: true, 1480 arrow: false, 1481 infinite: false, 1482 rtl: useRtl, 1483 speed: 300, 1484 slidesToShow: 1, 1485 swipeToSlide: true, 1486 touchThreshold: 10, 1487 responsive: [{ 1488 breakpoint: 991, 1489 settings: { 1490 dots: false, 1491 rtl: useRtl 1492 } 1493 }, 1494 { 1495 breakpoint: 767, 1496 settings: { 1497 dots: false, 1498 slidesToShow: 1, 1499 rtl: useRtl 1500 } 1501 } 1502 ] 1503 }); 1504 1505 colectionSlider.init(e, current, total); 1506 }) 1507 } catch (error) { 1508 console.log("init slider colection " + error); 1509 1510 } 1511 try { 1512 $('.js-slider-coleccion').each(function(i, e) { 1513 $(e).on('afterChange', function(event, slick, currentSlide, nextSlide) { 1514 var total = slick.slideCount; 1515 colectionSlider.render(e, currentSlide, total); 1516 }); 1517 }) 1518 } catch (error) { 1519 console.log("on change slider colection " + error); 1520 } 1521 1522 1523}) 1524 1525//********************** Coleccion slider version 2 1526 1527$(document).ready(function() { 1528 1529 try { 1530 $('.js-slider-coleccion2').each(function(i, e) { 1531 var total = 0; 1532 var current = 0; 1533 $(e).on('init', function(event, slick, currentSlide, nextSlide) { 1534 total = slick.slideCount; 1535 current = 0; 1536 1537 }); 1538 $(e).not('.slick-initialized').slick({ 1539 dots: true, 1540 arrow: false, 1541 infinite: false, 1542 speed: 300, 1543 touchThreshold: 10, 1544 slidesToShow: 1, 1545 responsive: [{ 1546 breakpoint: 991, 1547 settings: { 1548 dots: false 1549 } 1550 }, 1551 { 1552 breakpoint: 767, 1553 settings: { 1554 dots: false, 1555 slidesToShow: 1, 1556 } 1557 } 1558 ] 1559 }); 1560 1561 colectionSlider.init(e, current, total); 1562 }) 1563 } catch (error) { 1564 console.log("init slider colection " + error); 1565 1566 } 1567 try { 1568 $('.js-slider-coleccion2').each(function(i, e) { 1569 $(e).on('afterChange', function(event, slick, currentSlide, nextSlide) { 1570 var total = slick.slideCount; 1571 colectionSlider.render(e, currentSlide, total); 1572 }); 1573 }) 1574 } catch (error) { 1575 console.log("on change slider colection " + error); 1576 } 1577 1578 try { 1579 $(".js-slider-collection").each(function(i, e) { 1580 var total = 0; 1581 var current = 0; 1582 var sliderCols = $(e).data("col"); 1583 $(e).on("init", function(event, slick, currentSlide, nextSlide) { 1584 total = slick.slideCount; 1585 current = 0; 1586 1587 const currentSlideTitle = $('.js-slider-collection .slick-current.slick-active').find('.image-blog').data('title'); 1588 const collectionSliderTitle = document.querySelector('.title-link'); 1589 1590 collectionSliderTitle.textContent = currentSlideTitle; 1591 1592 const currentSlideText = $('.js-slider-collection .slick-current.slick-active').find('.image-blog').data('text'); 1593 const collectionSliderText = document.querySelector('.text-link'); 1594 collectionSliderText.innerHTML = currentSlideText; 1595 1596 }); 1597 $(e).slick({ 1598 dots: true, 1599 arrow: false, 1600 infinite: true, 1601 speed: 300, 1602 touchThreshold: 10, 1603 slidesToScroll: 1, 1604 slidesToShow: sliderCols, 1605 responsive: [{ 1606 breakpoint: 991, 1607 settings: { 1608 dots: false, 1609 }, 1610 }, 1611 { 1612 breakpoint: 767, 1613 settings: { 1614 dots: false, 1615 slidesToShow: 1, 1616 }, 1617 }, 1618 ], 1619 }); 1620 1621 colectionSlider.init(e, current, total); 1622 }); 1623 } catch (error) { 1624 console.log("on change slider colection " + error); 1625 } 1626 1627 try { 1628 $(".js-slider-collection").each(function(i, e) { 1629 1630 $(e).on("afterChange", function(event, slick, currentSlide, nextSlide) { 1631 var total = slick.slideCount; 1632 colectionSlider.render(e, currentSlide, total); 1633 }); 1634 1635 $(e).on("afterChange", function(event, slick, currentSlide, nextSlide) { 1636 1637 const currentSlideTitle = $('.js-slider-collection .slick-current.slick-active').find('.image-blog').data('title'); 1638 const collectionSliderTitle = document.querySelector('.title-link'); 1639 collectionSliderTitle.textContent = currentSlideTitle; 1640 1641 const currentSlideText = $('.js-slider-collection .slick-current.slick-active').find('.image-blog').data('text'); 1642 const collectionSliderText = document.querySelector('.text-link'); 1643 collectionSliderText.innerHTML = currentSlideText; 1644 }); 1645 1646 }); 1647 1648 } catch (error) { 1649 console.log("on change slider colection " + error); 1650 } 1651 1652 try { 1653 // collection slider lightbox
1654 $('#modal-image-lightbox').on('show.bs.modal', function(event) { 1655 var button = $(event.relatedTarget) // Button that triggered the modal 1656 1657 // Extract info from data-* attributes 1658 var image = button.data('image'); 1659 var btnText = button.data('btntext'); 1660 var btnLink = button.data('btnlink'); 1661 1662 var modal = $(this); 1663 modal.find('.modal-image-lightbox').attr('src', image); 1664 modal.find('.lightbox-download').attr('href', image + ((image.indexOf('?') !== -1) ? '&' : '?') + 'download=true'); 1665 if (btnText && btnLink) { 1666 modal.find('.btn-slide').show(); 1667 modal.find('.btn-slide a').attr('href', btnLink); 1668 modal.find('.btn-slide a').html(btnText); 1669 } else { 1670 modal.find('.btn-slide').hide(); 1671 } 1672 }); 1673 1674 } catch (error) { 1675 console.log("on change slider colection " + error); 1676 } 1677 1678}) 1679 1680 1681 1682 1683//********************** Producto Distribuidor 1684 1685var product = { 1686 selectColor: function(productEl, device) { 1687 1688 $(productEl).each(function(i, e) { 1689 var hasColor = $(e).find('.colors'); 1690 if (hasColor.length > 0) { 1691 $(e).find('.colors').find('button').each(function(index, el) { 1692 if (index == 0) { 1693 $(el).addClass('selected'); 1694 var elPvp = $(el).attr('data-pvp'); 1695 if (elPvp) { 1696 $(el).closest('.wrapper-producto').find('.price').html(elPvp); 1697 } 1698 product.selectImg(e, this, device); 1699 } 1700 $(el).click(function() { 1701 $(this).addClass('selected').siblings().removeClass('selected'); 1702 var elPvp = $(el).attr('data-pvp'); 1703 if (elPvp) { 1704 $(this).closest('.wrapper-producto').find('.price').html(elPvp); 1705 } 1706 var novelty = $(el).attr('data-novelty'); 1707 if (novelty === 'true') { $(this).closest('.wrapper-producto').find('.promo li.black').show(); } else { $(this).closest('.wrapper-producto').find('.promo li.black').hide(); } 1708 var discontinued = $(el).attr('data-discontinued'); 1709 if (discontinued === 'true') { $(this).closest('.wrapper-producto').parent().find('.sold-out').show(); } else { $(this).closest('.wrapper-producto').parent().find('.sold-out').hide(); } 1710 product.selectImg(e, this, device); 1711 }); 1712 }) 1713 } else { 1714 return false; 1715 } 1716 }) 1717 }, 1718 selectImg: function(productEl, colorSelected, device, indexSelected) { 1719 1720 var imageName = $(colorSelected).data('image'); 1721 var isLiferay = $(productEl).closest(".js-isLiferay"); 1722 1723 if (imageName && imageName.length > 0) { 1724 1725 switch (device) { 1726 case 'mobile': 1727 imageName = $(colorSelected).data('sm-image'); 1728 break; 1729 default: 1730 imageName = $(colorSelected).data('image'); 1731 } 1732 1733 if (isLiferay.length > 0) { 1734 // empieza 1735 var imgeUrl = $(productEl).find('.wrapper-img').css('background-image'); 1736 var imgeUrlSplited = imgeUrl.substring(0, imgeUrl.lastIndexOf("(")); 1737 var imgeFinalUrl = imgeUrlSplited + '("' + imageName + '")'; 1738 // acaba 1739 } else { 1740 // Maqueta 1741 // empieza 1742 var imgeUrl = $(productEl).find('.wrapper-img').css('background-image'); 1743 var imgeUrlSplited = imgeUrl.substring(0, imgeUrl.lastIndexOf("/")); 1744 var imgeFinalUrl = imgeUrlSplited + "/" + imageName + '")'; 1745 // acaba 1746 } 1747 1748 1749 1750 $(productEl).find('.wrapper-img').css('background-image', imgeFinalUrl); 1751 1752 } else { 1753 return false; 1754 } 1755 1756 1757 }, 1758 applyMatchHeight: function(productEl) { 1759 var text = $(productEl).find('.title-producto'); 1760 var finish = $(productEl).find('.colors'); 1761 var dades = $(productEl).find('.dades'); 1762 var prices = $(productEl).find('.prices'); 1763 var collection = $(productEl).find('.coleccion'); 1764 1765 $(text).matchHeight(); 1766 $(finish).matchHeight(); 1767 $(dades).matchHeight(); 1768 $(prices).matchHeight(); 1769 $(collection).matchHeight(); 1770 }, 1771 clear: function(productEl) { 1772 $(productEl).each(function(i, e) { 1773 var hasColor = $(e).find('.colors'); 1774 if (hasColor.length > 0) { 1775 $(e).find('.colors').find('button').each(function(index, el) { 1776 $(this).removeClass('selected'); 1777 if (index == 0) { 1778 $(this).addClass('selected'); 1779 product.selectImg(e, this); 1780 } 1781 }) 1782 } 1783 }) 1784 } 1785} 1786 1787 1788$(document).ready(function() { 1789 var $product = $('.wrapper-producto'); 1790 var windowWidth = $(window).outerWidth(); 1791 var device = 'desktop'; 1792 if (windowWidth < 768) { 1793 device = 'mobile'; 1794 } 1795 1796 try { 1797 $product.each(function(i, e) { 1798 product.selectColor(e, device); 1799 }) 1800 1801 } catch (error) { 1802 console.log(error); 1803 1804 } 1805 1806 try { 1807 if ($('.js-slider-producto').length > 0) { 1808 $('.js-slider-producto').each(function(i, slider) { 1809 var sliderProductCols = $(slider).data('col'); 1810 1811 $(slider).on('init', function(event, slick) { 1812 product.applyMatchHeight($product); 1813 // product.selectColor($product, device); 1814 }); 1815 $(slider).on('reInit', function(event, slick) { 1816 product.applyMatchHeight($product); 1817 // product.selectColor($product, device); 1818 }); 1819 1820 $(slider).not('.slick-initialized').slick({ 1821 dots: true,
1822 arrow: false, 1823 slidesToShow: sliderProductCols, 1824 infinite: false, 1825 speed: 300, 1826 touchThreshold: 10, 1827 centerMode: false, 1828 slidesToScroll: 2, 1829 responsive: [{ 1830 breakpoint: 1199, 1831 settings: { 1832 dots: true, 1833 slidesToShow: 3 1834 } 1835 }, 1836 { 1837 breakpoint: 991, 1838 settings: { 1839 dots: false, 1840 slidesToShow: 2, 1841 slidesToScroll: 1 1842 } 1843 }, 1844 { 1845 breakpoint: 767, 1846 settings: { 1847 dots: false, 1848 slidesToShow: 1, 1849 slidesToScroll: 1 1850 } 1851 } 1852 ] 1853 }).on('setPosition', function(event, slick) { 1854 slick.$slides.css('height', slick.$slideTrack.height() + 'px'); 1855 }); 1856 }) 1857 }; 1858 1859 } catch (error) { 1860 console.log('Try set slider product got ' + error); 1861 } 1862 1863 //slider with controls section 1864 try { 1865 if ($('.js-slider-producto-controls').length > 0) { 1866 $('.js-slider-producto-controls').each(function(i, slider) { 1867 var sliderProductCols = $(slider).data('col'); 1868 1869 $(slider).on('init', function(event, slick) { 1870 product.applyMatchHeight($product); 1871 }); 1872 1873 var carousel = $(slider).not('.slick-initialized').slick({ 1874 dots: true, 1875 arrow: true, 1876 slidesToShow: sliderProductCols, 1877 infinite: false, 1878 speed: 300, 1879 touchThreshold: 10, 1880 centerMode: false, 1881 appendDots: $(slider).parent().find(".slider-producto-controls .slide-m-dots"), 1882 prevArrow: $(slider).parent().find(".slider-producto-controls .slide-m-prev"), 1883 nextArrow: $(slider).parent().find(".slider-producto-controls .slide-m-next"), 1884 responsive: [{ 1885 breakpoint: 1912, 1886 settings: { 1887 slidesToShow: 3 1888 } 1889 }, 1890 { 1891 breakpoint: 1180, 1892 settings: { 1893 slidesToShow: 2 1894 } 1895 }, 1896 { 1897 breakpoint: 767, 1898 settings: { 1899 slidesToShow: 1 1900 } 1901 } 1902 ] 1903 }); 1904 1905 actionDotScroll(carousel, 5, (16 + 8)); 1906 }) 1907 1908 1909 }; 1910 1911 1912 1913 } catch (error) { 1914 console.log('Try set slider product got ' + error); 1915 } 1916 1917 // slider product with vertical image left 1918 try { 1919 if ($(".js-slider-producto-vertical").length > 0) { 1920 $(".js-slider-producto-vertical").each(function(i, slider) { 1921 var sliderProductCols = $(slider).data("col"); 1922 1923 $(slider).on("init", function(event, slick) { 1924 product.applyMatchHeight($product); 1925 // product.selectColor($product, device); 1926 }); 1927 $(slider).on("reInit", function(event, slick) { 1928 product.applyMatchHeight($product); 1929 // product.selectColor($product, device); 1930 }); 1931 1932 $(slider) 1933 .slick({ 1934 dots: true, 1935 arrow: false, 1936 infinite: false, 1937 speed: 300, 1938 touchThreshold: 10, 1939 centerMode: false, 1940 slidesToShow: sliderProductCols, 1941 slidesToScroll: 2, 1942 responsive: [{ 1943 breakpoint: 1200, 1944 settings: { 1945 dots: true, 1946 slidesToShow: 2, 1947 }, 1948 }, 1949 { 1950 breakpoint: 992, 1951 settings: { 1952 dots: true, 1953 slidesToShow: 2, 1954 slidesToScroll: 1, 1955 }, 1956 }, 1957 { 1958 breakpoint: 767, 1959 settings: { 1960 dots: true, 1961 slidesToShow: 2, 1962 slidesToScroll: 1, 1963 }, 1964 }, 1965 ], 1966 }) 1967 .on("setPosition", function(event, slick) { 1968 slick.$slides.css( 1969 "height", 1970 slick.$slideTrack.height() + "px" 1971 ); 1972 }); 1973 }); 1974 } 1975 } catch (error) { 1976 console.log("Try set slider product got " + error); 1977 } 1978 1979 // $('.wrapper-producto').each(function(i, e){
1980 // // $(e).find('.colors').find('input:radio').addClass('input_hidden'); 1981 // $(e).find('.colors').find('label').each(function(index, el){ 1982 1983 // $(el).on('click', function(){ 1984 // console.log(index); 1985 1986 // $(this).addClass('selected').siblings().removeClass('selected'); 1987 // }); 1988 // }) 1989 // }) 1990 1991}); 1992function HasSelfClassOrParent(element, classname) { 1993 if (element.classList && element.classList.contains(classname)) 1994 return true; 1995 1996 return element.parentNode && HasSelfClassOrParent(element.parentNode, classname); 1997} 1998 1999//********************** Product Card 2000 2001var productCard = { 2002 activateCard: function($productCard) { 2003 $($productCard).find('.js-activate').click(function() { 2004 $(this).closest('.product-card').toggleClass('active'); 2005 }) 2006 2007 $($productCard).find('.product-card__wrapper').mouseover(function () { 2008 var carousel = $($productCard).find('.js-slider-image-product').not('.slick-initialized').slick({ 2009 dots: true, 2010 arrows: true, 2011 infinite: false, 2012 appendDots: $($productCard).find(".slide-m-dots"), 2013 prevArrow: $($productCard).find(".slide-m-prev"), 2014 nextArrow: $($productCard).find(".slide-m-next"), 2015 lazyLoad: 'ondemand' 2016 }); 2017 actionDotScroll(carousel, 5, (16 + 8)); 2018 2019 $($productCard).find('.product-card__wrapper .images-slider .slick-list').matchHeight({ 2020 target: $($productCard).find('.product-card__wrapper .wrapper-img') 2021 }); 2022 $($productCard).find('.wrapper-text').css({ 2023 'cursor': 'pointer', 2024 }); 2025 $($productCard).find('.wrapper-text').click(function(event){ 2026 let element = event.target; 2027 if(!HasSelfClassOrParent(event.target, "colors") && !HasSelfClassOrParent(event.target, "options-links") 2028 && !HasSelfClassOrParent(event.target, "coleccion-url") && !HasSelfClassOrParent(event.target, "modal-medidas")){ 2029 top.window.location = $(this).find(".title-producto a").attr("href"); 2030 return false; 2031 } 2032 }); 2033 }); 2034 }, 2035 layerClose: function($productCard) { 2036 $($productCard).find('.js-close').click(function() { 2037 $(this).closest('.product-card').removeClass('fav-in'); 2038 $(this).closest('.product-card').removeClass('cart-in'); 2039 $(this).closest('.product-card').removeClass('compare-in'); 2040 $(this).closest('.product-card').removeClass('threeR-in'); 2041 }) 2042 $($productCard).mouseleave(function() { 2043 $(this).removeClass('fav-in'); 2044 $(this).removeClass('cart-in'); 2045 $(this).removeClass('compare-in'); 2046 $(this).removeClass('threeR-in'); 2047 }) 2048 }, 2049 fav: function($fav) { 2050 $($fav).click(function() { 2051 $(this).closest('.product-card').addClass('fav-in'); 2052 }); 2053 }, 2054 cart: function($cart) { 2055 $($cart).click(function() { 2056 $(this).closest('.product-card').addClass('cart-in'); 2057 }); 2058 }, 2059 compare: function($compare) { 2060 $($compare).click(function() { 2061 $(this).closest('.product-card').addClass('compare-in'); 2062 }); 2063 }, 2064 threeR: function($threeR) { 2065 $($threeR).click(function() { 2066 $(this).closest('.product-card').addClass('threeR-in'); 2067 }); 2068 } 2069} 2070 2071function loadEvents() { 2072 var $productCard = $('.product-card'), 2073 $fav = $('.js-fav'), 2074 $cart = $('.js-cart'), 2075 $compare = $('.js-compare'), 2076 $threeR = $('.js-threeR'); 2077 2078 2079 try { 2080 $($productCard).each(function (i, e) { 2081 productCard.layerClose(e); 2082 }) 2083 } catch (error) { 2084 console.log(error); 2085 console.log("Error asignando funcion layerClose"); 2086 } 2087 2088 try { 2089 $($fav).each(function (i, e) { 2090 productCard.fav(e); 2091 }) 2092 } catch (error) { 2093 console.log(error); 2094 console.log("Error asignando funcion fav"); 2095 } 2096 try { 2097 $($cart).each(function (i, e) { 2098 productCard.cart(e); 2099 }) 2100 } catch (error) { 2101 console.log(error); 2102 console.log("Error asignando funcion cart"); 2103 } 2104 try { 2105 $($compare).each(function (i, e) { 2106 productCard.compare(e); 2107 }) 2108 } catch (error) { 2109 console.log(error); 2110 console.log("Error asignando funcion compare"); 2111 } 2112 try { 2113 $($threeR).each(function (i, e) { 2114 productCard.threeR(e); 2115 }) 2116 } catch (error) { 2117 console.log(error); 2118 console.log("Error asignando funcion threeR"); 2119 } 2120 2121 try { 2122 $($productCard).each(function (i, e) { 2123 productCard.activateCard(e); 2124 }) 2125 } catch (error) { 2126 console.log(error); 2127 console.log("Error asignando funcion activateCard"); 2128 } 2129 2130} 2131 2132$(document).ready(function() { 2133 loadEvents(); 2134}) 2135 2136 2137//********************** Product Filter 2138 2139var productFilter = { 2140 moveFiltersMobile: function($productFilter) { 2141 var $menuList = $($productFilter).find('.js-menu-filters'); 2142 var $selectedList = $($productFilter).find('.selected-filter-list'); 2143 2144 var $dest = $($productFilter).find('.js-filters-mobile'); 2145 var $destSelected = $($productFilter).find('.js-selected-filters-mobile'); 2146 2147 var $items = $($menuList).detach(); 2148 var $selectedItems = $($selectedList).detach(); 2149 $($dest).append($items); 2150 $($destSelected).append($selectedItems); 2151 2152 2153 }, 2154 moveFiltersDesktop: function($productFilter) { 2155 var $menuList = $($productFilter).find('.js-menu-filters'); 2156 var $selectedList = $($productFilter).find('.selected-filter-list'); 2157 2158 var $dest = $($productFilter).find('.js-filters-desktop'); 2159 var $destSelected = $($productFilter).find('.js-selected-filters-desktop'); 2160 2161 var $items = $($menuList).detach(); 2162 var $selectedItems = $($selectedList).detach(); 2163 2164 $($dest).append($items); 2165 $($destSelected).append($selectedItems); 2166 2167 }, 2168 changeColMobile: function($productFilter, $cardList) { 2169 var $colButton = $($productFilter).find('.js-change-cols-mobile'); 2170 if($colButton.length == 0){ 2171 var $colButton = $($cardList).find('.js-change-cols-mobile'); 2172 } 2173 2174 if($colButton.length > 0){ 2175 $($colButton).find('span').click(function() { 2176 const $this = $(this); 2177 const dataTarget = $this.data('target'); 2178 2179 if (dataTarget) { 2180 const targetCols = $this.data('cols'); 2181 2182 if (productListMobileCols) { 2183 productListMobileCols = targetCols; 2184 } 2185 2186 if (targetCols === 1) { 2187 $("#" + dataTarget).find(".sm-cols-item").removeClass("col-6").addClass("col-12"); 2188 $this.parent().find(".selector-1-column").removeClass("disabled"); 2189 $this.parent().find(".selector-2-column").addClass("disabled"); 2190 } else if (targetCols === 2) { 2191 $("#" + dataTarget).find(".sm-cols-item").removeClass("col-12").addClass("col-6"); 2192 $this.parent().find(".selector-1-column").addClass("disabled"); 2193 $this.parent().find(".selector-2-column").removeClass("disabled"); 2194 } 2195 2196 checkProductListFinishedsToShow($("#" + dataTarget)); 2197 2198 productList.cardHeight('#' + dataTarget); 2199 } else { 2200 $this.toggleClass('active'); 2201 2202 if($this.find('span').length > 1){ 2203 $this.find('span').toggleClass('disabled'); 2204 } 2205 2206 $this.closest('body').toggleClass('col-2-active'); 2207 2208 var $card = $($cardList).find('.product-card'); 2209 $($card).css('height', 'auto'); 2210 $($cardList).find('.product-card .title-producto').matchHeight(); 2211 $($cardList).find('.product-card .colors').matchHeight(); 2212 $($cardList).find('.product-card .dades').matchHeight(); 2213 $($cardList).find('.product-card .prices').matchHeight(); 2214 2215 $($card).matchHeight(); 2216 } 2217 }) 2218 } 2219 }, 2220 applySlider: function($jsSlider) { 2221 $($jsSlider).not('.slick-initialized').slick({ 2222 slidesToShow: 9, 2223 swipeToSlide: true, 2224 infinite: false, 2225 speed: 300, 2226 dots: false, 2227 arrows: true, 2228 prevArrow: '<button type="button" class="slick-prev icon-chevron-left"></button>', 2229 nextArrow: '<button type="button" class="slick-next icon-chevron-right"></button>', 2230 responsive: [{ 2231 breakpoint: 1912, 2232 settings: { 2233 slidesToShow: 6 2234 } 2235 }, { 2236 breakpoint: 1180, 2237 settings: { 2238 slidesToShow: 5 2239 } 2240 }, { 2241 breakpoint: 1025, 2242 settings: { 2243 slidesToShow: 4 2244 } 2245 }, { 2246 breakpoint: 868, 2247 settings: { 2248 slidesToShow: 3.75 2249 } 2250 }, { 2251 breakpoint: 576, 2252 settings: { 2253 slidesToShow: 3 2254 } 2255 2256 }, { 2257 }, { 2258 breakpoint: 460, 2259 settings: { 2260 slidesToShow: 2.5 2261 } 2262 2263 }, { 2264 breakpoint: 415, 2265 settings: { 2266 slidesToShow: 2 2267 } 2268 }, { 2269 breakpoint: 345, 2270 settings: { 2271 slidesToShow: 1.75 2272 } 2273 }] 2274 }); 2275 } 2276} 2277 2278$(document).ready(function() { 2279 2280 var $productFilter = $('.product-filter'), 2281 cardList = $('.product-list'), 2282 $jsSlider = $('.category-filters').find('.js-slider'), 2283 windowWidth = $(window).outerWidth(); 2284 2285 2286 try { 2287 $($jsSlider).each(function(i, e) { 2288 productFilter.applySlider(e); 2289 }) 2290 } catch (error) { 2291 console.log(error); 2292 } 2293 2294 try { 2295 $($productFilter).each(function(i, e) { 2296 if (windowWidth < LG_BP) { 2297 productFilter.moveFiltersMobile(e); 2298 } else { 2299 productFilter.moveFiltersDesktop(e); 2300 } 2301 }) 2302 } catch (error) { 2303 console.log(error); 2304 } 2305 2306 try { 2307 $($productFilter).each(function(i, e) { 2308 if (windowWidth < LG_BP) { 2309 productFilter.changeColMobile(e, cardList); 2310 } 2311 }) 2312 } catch (error) { 2313 console.log(error); 2314 } 2315 2316}) 2317$(window).resize(function() { 2318 2319 var $productFilter = $('.product-filter'), 2320 cardList = $('.product-list'), 2321 windowWidth = $(window).outerWidth(); 2322 2323 2324 try { 2325 $($productFilter).each(function(i, e) { 2326 if (windowWidth < LG_BP) { 2327 productFilter.moveFiltersMobile(e); 2328 } else { 2329 productFilter.moveFiltersDesktop(e); 2330 } 2331 }) 2332 } catch (error) { 2333 console.log(error); 2334 2335 } 2336 2337 try { 2338 $($productFilter).each(function(i, e) { 2339 if (windowWidth < LG_BP) { 2340 productFilter.changeColMobile(e, cardList); 2341 } 2342 }) 2343 } catch (error) { 2344 console.log(error); 2345 } 2346 2347}) 2348 2349 2350//********************** Product List 2351 2352var productList = { 2353 cardHeight: function($cardList) { 2354 var $card = $($cardList).find('.product-card'); 2355 $($cardList).find('.product-card__wrapper .title-producto').matchHeight(); 2356 $($cardList).find('.product-card__wrapper .colors').matchHeight(); 2357 $($cardList).find('.product-card__wrapper .collection-options').matchHeight(); 2358 $($cardList).find('.product-card__wrapper .dades').matchHeight(); 2359 $($cardList).find('.product-card__wrapper .prices').matchHeight(); 2360 $($cardList).find('.product-card__wrapper .images-slider .slick-list').matchHeight({ 2361 target: $($cardList).find('.product-card__wrapper .wrapper-img') 2362 }); 2363 }, 2364 orderMoveMobile: function(jsOrderMobile) { 2365 var orderDetached = $('.order-selector__wrapper').detach(); 2366 var $dest = $(jsOrderMobile); 2367 $(orderDetached).appendTo($dest); 2368 }, 2369 orderMoveDesktop: function(jsOrderDesktop) { 2370 var orderDetached = $('.order-selector__wrapper').detach(); 2371 var base = $(jsOrderDesktop); 2372 $(orderDetached).appendTo(base); 2373 } 2374} 2375 2376$(document).ready(function() { 2377 var cardList = $('.product-list'), 2378 jsOrderDesktop = $('.js-order-desktop'), 2379 jsOrderMobile = $('.js-order-mobile'), 2380 2381 windowWidth = $(window).outerWidth(); 2382 2383 if (windowWidth < LG_BP) { 2384 try { 2385 productList.orderMoveMobile(jsOrderMobile); 2386 } catch (error) { 2387 console.log(error); 2388 } 2389 } else { 2390 try { 2391 productList.orderMoveDesktop(jsOrderDesktop); 2392 } catch (error) { 2393 console.log(error); 2394 } 2395 } 2396 2397 2398 try { 2399 if (windowWidth >= MD_BP) { 2400 $(cardList).each(function(ind, el) { 2401 productList.cardHeight(el); 2402 }) 2403 } 2404 } catch (error) { 2405 console.log(error); 2406 } 2407}) 2408$(window).resize(function() { 2409 var cardList = $('.product-list'), 2410 jsOrderDesktop = $('.js-order-desktop'), 2411 jsOrderMobile = $('.js-order-mobile'), 2412 2413 windowWidth = $(window).outerWidth(); 2414 2415 if (windowWidth < LG_BP) { 2416 try { 2417 productList.orderMoveMobile(jsOrderMobile); 2418 } catch (error) { 2419 console.log(error); 2420 } 2421 } else { 2422 try { 2423 productList.orderMoveDesktop(jsOrderDesktop); 2424 } catch (error) { 2425 console.log(error); 2426 } 2427 } 2428 2429 try { 2430 if (windowWidth >= MD_BP) { 2431 $(cardList).each(function(ind, el) { 2432 productList.cardHeight(el); 2433 }) 2434 } 2435 } catch (error) { 2436 console.log(error); 2437 } 2438}) 2439 2440 2441//********************** Lightbox 2442 2443var lightbox = { 2444 modalBasic: function(lightbox, lightboxModal) { 2445 var $lightbox = $(lightbox); 2446 2447 var $trigger = $($lightbox).closest('.has-modal').find('[data-toggle="modal"]'); 2448 2449 2450 // trigger menu collapse 2451 $trigger.click(function() { 2452 commons.closeRModals('.r-modal'); 2453 2454 var theModal = $(this).data("target"); 2455 2456 $(theModal).detach().appendTo('body'); 2457 $(theModal).on('shown.bs.modal', function(e) { 2458 // console.log(theModal); 2459 2460 }) 2461 $(theModal).on('hidden.bs.modal', function(e) {
2462 $(theModal).detach().appendTo(lightbox); 2463 }) 2464 $(theModal).find('.js-close').click(function() { 2465 $(this).closest('.modal').modal("hide"); 2466 2467 }); 2468 }); 2469 2470 }, 2471 modalVideo: function(lightbox, lightboxModal) { 2472 var $lightbox = $(lightbox); 2473 2474 var $trigger = $($lightbox).closest('.has-modal').find('[data-toggle="modal"]'); 2475 2476 2477 // trigger menu collapse 2478 $trigger.click(function() { 2479 commons.closeRModals('.r-modal'); 2480 2481 var theModal = $(this).data("target"), 2482 videoSRC = $(this).attr("data-theVideo"), 2483 videoSRCauto = videoSRC + "?rel=0&autoplay=1"; 2484 2485 if (!typeof videoSRC === "undefined") { 2486 $(theModal + ' iframe').attr('src', videoSRCauto).attr('allow', 'autoplay'); 2487 } 2488 $(theModal).detach().appendTo('body'); 2489 2490 2491 2492 2493 $(theModal).on('hidden.bs.modal', function(e) { 2494 // console.log('theModal1',theModal); 2495 $(theModal + ' iframe').attr('src', videoSRC); 2496 $(theModal).detach().appendTo(lightbox); 2497 }) 2498 $(theModal).find('.js-close').click(function() { 2499 2500 $(this).closest('.modal').modal("hide"); 2501 2502 2503 }); 2504 }); 2505 2506 2507 }, 2508 modalNewVideo: function (lightbox, lightboxModal) { 2509 2510 $(".js-slider-cabecera .new-modal-video").click(function(){ 2511 $('.slider-cabecera').slick('slickPause'); 2512 commons.closeRModals('.r-modal'); 2513 var theModal = $(this).data("target"), 2514 videoSRC = $(this).attr("data-theVideo"), 2515 videoSRCauto = videoSRC + "?rel=0&autoplay=1"; 2516 $(theModal + ' iframe').attr('src', videoSRCauto).attr('allow', 'autoplay'); 2517 2518 2519 $(theModal).on('hidden.bs.modal', function (e) { 2520 console.log("click a"); 2521 $(theModal + ' iframe').removeAttr('src'); 2522 $(theModal).find('.js-close').click(); 2523 $('.slider-cabecera').slick('slickPlay'); 2524 $('.slider-cabecera').blur(); 2525 }); 2526 $(theModal).find('.js-close').click(function () { 2527 $(this).closest('.modal').modal("hide"); 2528 }); 2529 2530 }); 2531 2532 2533 2534 }, 2535 modalSlider: function(lightbox, lightboxModal) { 2536 var $lightbox = $(lightbox); 2537 2538 var $trigger = $($lightbox).closest('.has-modal').find('[data-toggle="modal"]'); 2539 2540 // trigger menu collapse 2541 $trigger.click(function() { 2542 2543 2544 commons.closeRModals('.r-modal'); 2545 var theModal = $(this).data("target"), 2546 videoSRC = $(this).attr("data-theVideo"), 2547 videoSRCauto = videoSRC + "?rel=0&autoplay=1"; 2548 $(theModal + ' iframe').attr('src', videoSRCauto).attr('allow', 'autoplay'); 2549 $(lightboxModal).detach().appendTo('body'); 2550 2551 2552 $(theModal).on('hidden.bs.modal', function(e) { 2553 $(theModal + ' iframe').attr('src', videoSRC); 2554 $(lightboxModal).detach().appendTo(lightbox); 2555 }) 2556 $(lightboxModal).find('.js-close').click(function() { 2557 $(this).closest('.modal').modal("hide"); 2558 2559 }); 2560 }); 2561 2562 2563 }, 2564 modalSlick: function(lightbox, lightboxModal) { 2565 var $lightbox = $(lightbox); 2566 2567 var $trigger = $($lightbox).closest('.has-modal').find('[data-toggle="modal"]'); 2568 2569 2570 // trigger menu collapse 2571 $trigger.click(function() { 2572 commons.closeRModals('.r-modal'); 2573 2574 var theModal = $(this).data("target"); 2575 2576 $(theModal).detach().appendTo('body'); 2577 $(theModal).on('shown.bs.modal', function(e) { 2578 $(theModal).find('.slider')[0].slick.refresh(); 2579 // console.log(theModal); 2580 2581 }) 2582 $(theModal).on('hidden.bs.modal', function(e) { 2583 $(theModal).detach().appendTo(lightbox); 2584 }) 2585 $(theModal).find('.js-close').click(function() { 2586 $(this).closest('.modal').modal("hide"); 2587 2588 }); 2589 }); 2590 2591 }, 2592 modalFilter: function(lightbox, lightboxModal) { 2593 var $lightbox = $(lightbox); 2594 2595 var $trigger = $($lightbox).closest('.has-modal').find('[data-toggle="modal"]'); 2596 2597 2598 // trigger menu collapse 2599 $trigger.click(function() { 2600 commons.closeRModals('.r-modal'); 2601 2602 var theModal = $(this).data("target"); 2603 2604 $(theModal).detach().appendTo('body'); 2605 $(theModal).on('shown.bs.modal', function(e) { 2606 // console.log(theModal); 2607 2608 }) 2609 $(theModal).on('hidden.bs.modal', function(e) {
2610 $(theModal).detach().appendTo(lightbox); 2611 }) 2612 $(theModal).find('.js-close').click(function() { 2613 var $modal = $(this).closest('.modal'); 2614 $($modal).modal("hide"); 2615 2616 }); 2617 }); 2618 2619 } 2620} 2621 2622$(document).ready(function() { 2623 var $lightboxBasic = $('.lightbox-basic-wrapper'); 2624 var $lightboxSlider = $('.slick-slider').find('.lightbox-wrapper'); 2625 var $lightbox = $('.lightbox-wrapper'); 2626 var $lightboxSlicker = $('.lightbox-slick-wrapper'); 2627 var $lightboxFilter = $('.lightbox-filter-wrapper'); 2628 var $lightboxNewVideo = $('.lightbox-wrapper-video'); 2629 2630 if ($lightboxBasic.length > 0) { 2631 try { 2632 $lightboxBasic.each(function(i, e) { 2633 var $lightboxModal = $(e).find('.modal'); 2634 lightbox.modalBasic(e, $lightboxModal); 2635 }) 2636 } catch (error) { 2637 console.log('Try to set home lightbox got ' + error); 2638 } 2639 } 2640 if ($lightboxSlider.length > 0) { 2641 try { 2642 $lightboxSlider.each(function(i, e) { 2643 var $lightboxModal = $(e).find('.modal'); 2644 lightbox.modalSlider(e, $lightboxModal); 2645 }) 2646 } catch (error) { 2647 console.log('Try to set home lightbox got ' + error); 2648 } 2649 } 2650 2651 try { 2652 $lightbox.each(function(i, e) { 2653 var $lightboxModal = $(e).find('.modal'); 2654 lightbox.modalVideo(e, $lightboxModal); 2655 }) 2656 } catch (error) { 2657 console.log('Try to set home lightbox got ' + error); 2658 } 2659 2660 2661 try { 2662 $lightboxNewVideo.each(function (i, e) { 2663 var $lightboxModal = $(e).find('.modal'); 2664 lightbox.modalNewVideo(e, $lightboxModal); 2665 }); 2666 } catch (error) { 2667 console.log('Try to set home lightbox new video got ' + error); 2668 } 2669 2670 try { 2671 $lightboxSlicker.each(function(i, e) { 2672 var $lightboxModal = $(e).find('.modal'); 2673 lightbox.modalSlick(e, $lightboxModal); 2674 }) 2675 } catch (error) { 2676 console.log('Try to set slick modal got ' + error); 2677 } 2678 try { 2679 $lightboxFilter.each(function(i, e) { 2680 var $lightboxModal = $(e).find('.modal'); 2681 lightbox.modalFilter(e, $lightboxModal); 2682 }) 2683 } catch (error) { 2684 console.log('Try to set slick modal got ' + error); 2685 } 2686 2687}) 2688 2689 2690 2691 2692 2693//********************** Filters 2694 2695var filters = { 2696 sliderRangeInit: function($slider) { 2697 var data = filters.sliderRangeData($slider); 2698 2699 $($slider).find('.slider').slider({ 2700 range: true, 2701 min: 0, 2702 max: data.array.length - 1, 2703 values: data.array, 2704 step: 1, 2705 animate: true, 2706 orientation: "horizontal", 2707 slide: function(event, ui) { 2708 $($slider).find('.min-input').val(ui.values[0]); 2709 $($slider).find('.max-input').val(ui.values[1]); 2710 $($slider).find('.min-range-d').html(data.array[ui.values[0]]); 2711 $($slider).find('.max-range-d').html(data.array[ui.values[1]]); 2712 } 2713 2714 }); 2715 2716 $($slider).find('.min-range-d').html(data.values[0]); 2717 $($slider).find('.max-range-d').html(data.values[1]); 2718 $($slider).find('.min-range-text').html(data.min); 2719 $($slider).find('.max-range-text').html(data.max); 2720 $($slider).find('.slider').slider("option", "values", [data.array.indexOf(data.values[0]), data.array.indexOf(data.values[1])]); 2721 2722 2723 }, 2724 sliderRangeData: function($slider) { 2725 var sliderData = {}; 2726 sliderData.min = $($slider).find('.slider').data('min'); 2727 sliderData.max = $($slider).find('.slider').data('max'); 2728 sliderData.values = $($slider).find('.slider').data('values'); 2729 sliderData.array = $($slider).find('.slider').data('array'); 2730 $($slider).find('.slider').slider(); 2731 return sliderData; 2732 }, 2733 imageCheck: function($imageCheck) { 2734 2735 if ($($imageCheck).find('.custom-control-input').is(':checked')) { 2736 $($imageCheck).addClass('active'); 2737 } else { 2738 $($imageCheck).removeClass('active'); 2739 } 2740 2741 $($imageCheck).find('.custom-control-input').change(function() { 2742 if ($(this).is(':checked')) { 2743 $($imageCheck).addClass('active'); 2744 } else { 2745 $($imageCheck).removeClass('active'); 2746 } 2747 }) 2748 2749 }, 2750 numberCheck: function($numberCheck) { 2751 2752 if ($($numberCheck).find('.custom-control-input').is(':checked')) { 2753 $($numberCheck).addClass('active'); 2754 } else { 2755 $($numberCheck).removeClass('active'); 2756 } 2757 2758 $($numberCheck).find('.custom-control-input').change(function() { 2759 if ($(this).is(':checked')) { 2760 $($numberCheck).addClass('active'); 2761 } else { 2762 $($numberCheck).removeClass('active'); 2763 } 2764 }) 2765 2766 }, 2767 categoryCheck: function($categoryCheck) { 2768 2769 if ($($categoryCheck).find('.custom-control-input').is(':checked')) { 2770 $($categoryCheck).addClass('active'); 2771 } else { 2772 $($categoryCheck).removeClass('active'); 2773 } 2774 2775 $($categoryCheck).find('.custom-control-input').change(function() { 2776 if ($(this).is(':checked')) { 2777 $($categoryCheck).addClass('active'); 2778 } else { 2779 $($categoryCheck).removeClass('active'); 2780 } 2781 }) 2782 2783 }, 2784 2785} 2786 2787$(document).ready(function() { 2788 var $slider = $('.slider-range'), 2789 $categoryCheck = $('.category-check'),
2790 $numberCheck = $('.number-check'); 2791 2792 try { 2793 if (typeof $slider !== "undefined") { 2794 $($slider).each(function() { 2795 filters.sliderRangeInit(this); 2796 }); 2797 } 2798 2799 } catch (error) { 2800 console.log('Try to set SLider range got ' + error); 2801 } 2802 2803 2804 2805 try { 2806 if ($categoryCheck.length > 0) { 2807 $($categoryCheck).each(function() { 2808 filters.categoryCheck(this); 2809 }); 2810 } 2811 2812 } catch (error) { 2813 console.log('Try to set category-check and got ' + error); 2814 } 2815 2816 try { 2817 if ($numberCheck.length > 0) { 2818 $($numberCheck).each(function() { 2819 filters.numberCheck(this); 2820 }); 2821 } 2822 2823 } catch (error) { 2824 console.log('Try to set number-check and got ' + error); 2825 } 2826 2827 2828}) 2829 2830// caracteristicas producto texto - abrir y cerrar caja en responsive 2831 2832$("#mostrar-texto").on("click", function() { 2833 $('#target-texto').show(); 2834 $('#mostrar-texto').hide(); 2835}); 2836$("#ocultar-texto").on("click", function() { 2837 $('#target-texto').hide(); 2838 $('#mostrar-texto').show(); 2839}); 2840 2841// caracteristicas icono producto - abrir y cerrar caja en responsive 2842 2843 2844$("#mostrar").on("click", function() { 2845 $('#target').show(); 2846 $('#mostrar').hide(); 2847}); 2848$("#ocultar").on("click", function() { 2849 $('#target').hide(); 2850 $('#mostrar').show(); 2851}); 2852 2853// load more del img distributor 2854 2855$(function() { 2856 $("#imgdist-show-more").on('click', function(e) { 2857 e.preventDefault(); 2858 $(".image-wrapper:hidden").slice(0, 11).fadeIn(); 2859 if ($(".image-wrapper:hidden").length == 0) { 2860 $("#imgdist-show-more").fadeOut('slow'); 2861 } 2862 }); 2863}); 2864 2865// popover 2866$(document).ready(function() { 2867 $('[data-toggle="popover"]').popover(); 2868}); 2869$(document).ready(function() { 2870 $('body').on('click', function(e) { 2871 $('[data-toggle=popover]').each(function() { 2872 // hide any open popovers when the anywhere else in the body is clicked 2873 if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) { 2874 $(this).popover('hide'); 2875 } 2876 }); 2877 }); 2878}); 2879 2880$(document).ready(function() { 2881 $('.manualinputlabel').click(function(e) { 2882 e.preventDefault(); 2883 $(this).popover(); 2884 }); 2885 2886 $(document).click(function(e) { 2887 if (e.target.id == "popovercloseid") { 2888 $('.manualinputlabel').popover('hide'); 2889 } 2890 2891 }); 2892}); 2893 2894//********************** dropdown product navigation 2895 2896$(document).ready(function() { 2897 $('.dropdown-toggle').dropdown(); 2898}); 2899 2900 2901/*Produc Detail ceramics calculadora*/ 2902$(document).ready(function() { 2903 2904 /* Cambiar comportamiento de bootstrap collapse card-title */ 2905 $('.accordion').on('shown.bs.collapse', function (e) { 2906 var $panel = $(e.target); 2907 var $heading = $panel.prev('.card-header'); 2908 2909 if ($heading.length > 0) { 2910 2911 setTimeout(function() { 2912 var offsetTop = 0; 2913 2914 var $header = $('.js-header'); 2915 if ($header.length && $header.is(':visible')) { 2916 offsetTop += $header.outerHeight(); 2917 } 2918 2919 var $promo = $('.promoSubmenu'); 2920 if ($promo.length && $promo.is(':visible')) { 2921 offsetTop += $promo.outerHeight(); 2922 } 2923 2924 var $menuAnclas = $('.menu-anclas'); 2925 if ($menuAnclas.length && $menuAnclas.is(':visible')) { 2926 offsetTop += $menuAnclas.outerHeight(); 2927 } 2928 2929 offsetTop += 20; 2930 2931 $('html, body').animate({ 2932 scrollTop: $heading.offset().top - offsetTop 2933 }, 400); 2934 2935 }, 200); 2936 } 2937 }); 2938 2939 var $product = $('.wrapper-producto'); 2940 var windowWidth = $(window).outerWidth(); 2941 var device = 'desktop'; 2942 if (windowWidth < 768) { 2943 device = 'mobile'; 2944 } 2945 // var value = $(".js-calculadora input").val(); 2946 function resultado(cajas) { 2947 var precioCajas = parseFloat($(".js-precio-value span").text().split(",")[0] + "." + $(".js-precio-value span").text().split(",")[1]); 2948 var precio = cajas * precioCajas; 2949 var valor = precio.toString().split("."); 2950 var precioEntero = valor[0]; 2951 var precioDecimal = valor[1].substr(0, 2); 2952 $(".js-resultado .price").html(precioEntero + "<sub>," + precioDecimal + " " + document.currencySymbol + "</sub"); 2953 } 2954 2955 function numCajas(superficie) {
2956 var superficieCajas = parseFloat($(".js-superficie-value span").text().split(",")[0] + "." + $(".js-superficie-value span").text().split(",")[1]); 2957 var cajas = Math.ceil(superficie / superficieCajas); 2958 $(".js-calculadora input").val(cajas); 2959 resultado(cajas); 2960 } 2961 2962 function superficie(cajas) { 2963 var superficieCajas = parseFloat($(".js-superficie-value span").text().split(",")[0] + "." + $(".js-superficie-value span").text().split(",")[1]); 2964 var metros = parseInt(cajas * superficieCajas); 2965 $(".js-superficie input").val(metros); 2966 2967 } 2968 //Introduzco valor en input numero cajas 2969 $(".js-calculadora input").keyup(function() { 2970 this.value = (this.value + '').replace(/[^0-9]/g, ''); 2971 resultado(this.value); 2972 superficie(this.value); 2973 }); 2974 //Resto cajas 2975 $(".js-calculadora .less a").click(function(e) { 2976 e.preventDefault(); 2977 var value = $(".js-calculadora input").val(); 2978 $(".js-calculadora input").val(parseInt(value) - 1); 2979 resultado(parseInt(value) - 1); 2980 superficie(parseInt(value) - 1); 2981 }); 2982 //Sumo cajas 2983 $(".js-calculadora .more a").click(function(e) { 2984 e.preventDefault(); 2985 var value = $(".js-calculadora input").val(); 2986 $(".js-calculadora input").val(parseInt(value) + 1); 2987 resultado(parseInt(value) + 1); 2988 superficie(parseInt(value) + 1); 2989 }); 2990 //Introduzco valor en input superficie 2991 $(".js-superficie input").keyup(function() { 2992 this.value = (this.value + '').replace(/[^0-9]/g, ''); 2993 numCajas(this.value); 2994 }); 2995 if ($('.capa-completa').length > 0) { 2996 $('.capa-scroll').niceScroll({ 2997 cursorcolor: "#9a9a9a", 2998 cursorwidth: "3px", 2999 cursorborder: "none", 3000 background: "#d5d5d5", 3001 cursorborderradius: 0, 3002 autohidemode: false, 3003 cursorminheight: 60 3004 }); 3005 } 3006 if ($('.accordion').length > 0) { 3007 $('.accordion li li a').click(function() { 3008 if (!$(this).hasClass("active")) { 3009 $('.accordion li li a.active').removeClass("active"); 3010 } 3011 $('.no-collapse').removeClass("active"); 3012 $(this).closest('.subcategory').siblings('a').addClass("collapsed"); 3013 $(this).toggleClass("active"); 3014 }); 3015 $('.accordion > li > a').click(function() { 3016 $('.no-collapse').removeClass("active"); 3017 $(this).closest('.subcategory').siblings('a').addClass("collapsed"); 3018 $('.accordion li li a.active').removeClass("active"); 3019 }); 3020 $('.no-collapse li a').click(function() { 3021 3022 $(this).closest('.no-collapse').siblings('a').addClass("active"); 3023 }); 3024 $(".js-collapse-mobile-open").click(function() { 3025 3026 $(".js-collapse-mobile").toggleClass("active"); 3027 $("body").toggleClass("noScroll"); 3028 }); 3029 $(".js-collapse-mobile-close").click(function() { 3030 $(".js-collapse-mobile").toggleClass("active"); 3031 $("body").toggleClass("noScroll"); 3032 3033 }); 3034 3035 } 3036 3037 // FAQ Accordion 3038 $(document).ready(function() { 3039 var windowWidth = $(window).outerWidth(); 3040 var faqItemTrigger = $('.faq-item__trigger'); 3041 var faqItem = $('.faq-item'); 3042 var faqList = $('.faq-list'); 3043 3044 // Check if FAQ Accordion exist 3045 if (faqList.length > 0) { 3046 // check if window is less than 992px 3047 if (windowWidth < 992) { 3048 // on FAQ trigger click 3049 faqItemTrigger.on('click', function() { 3050 3051 if ($(this).parent().hasClass('is-visible')) { 3052 $(this).parent().removeClass('is-visible'); 3053 } else { 3054 $('.faq-item').removeClass('is-visible'); 3055 $(this).parent().addClass('is-visible'); 3056 } 3057 }); 3058 } 3059 } 3060 3061 }); 3062 3063 3064 $(window).resize(function() { 3065 $('.capa-scroll').getNiceScroll().resize(); 3066 }); 3067 try { 3068 if ($('.js-slider-producto-5').length > 0) { 3069 3070 $('.js-slider-producto-5').on('init', function(event, slick) { 3071 product.applyMatchHeight($product); 3072 product.selectColor($product, device); 3073 }); 3074 $('.js-slider-producto-5').on('reInit', function(event, slick) { 3075 product.applyMatchHeight($product); 3076 product.selectColor($product, device); 3077 }); 3078 3079 $('.js-slider-producto-5').not('.slick-initialized').slick({ 3080 dots: true,
3081 arrow: false, 3082 slidesToShow: 5, 3083 infinite: false, 3084 speed: 300, 3085 responsive: [{ 3086 breakpoint: 1919, 3087 settings: { 3088 dots: true, 3089 slidesToShow: 5 3090 } 3091 }, 3092 { 3093 breakpoint: 991, 3094 settings: { 3095 dots: false, 3096 slidesToShow: 2 3097 } 3098 }, 3099 { 3100 breakpoint: 767, 3101 settings: { 3102 dots: false, 3103 slidesToShow: 2 3104 } 3105 } 3106 ] 3107 }); 3108 3109 }; 3110 3111 3112 3113 } catch (error) { 3114 console.log('Try set slider product got ' + error); 3115 } 3116}); 3117 3118 3119///product filter fav message disappear 3120// $(document).ready(function() { 3121// var timeoutOverProduct = setTimeout(function() { 3122// $(".over-product").fadeOut(1500); 3123// }, 3000) 3124// $('.btnReset').each(function(){ 3125// $(this).click(function() { 3126// $(".over-product").stop().fadeOut(); 3127// $(".over-product").fadeIn(300); 3128// timeoutOverProduct = clearTimeout(timeoutOverProduct); 3129// timeoutOverProduct = setTimeout(function() { 3130// $(".over-product").fadeOut(1500); 3131// }, 3000) 3132// }); 3133 3134// }) 3135// }); 3136 3137/* Nice scroll para columna en puntos de venta */ 3138$(document).ready(function() { 3139 3140 /* FUNCIÃN QUE PERMITE IDENTIFICAR QUE HA CAMBIADO EL ALTO DE UN ELEMENTO, lo utilizamos para reiniciar el NiceScroll cuando cambia el alto */ 3141 function onElementHeightChange(elm, callback) { 3142 var lastHeight = elm.clientHeight, 3143 newHeight; 3144 (function run() { 3145 newHeight = elm.clientHeight; 3146 if (lastHeight != newHeight) 3147 callback(); 3148 lastHeight = newHeight; 3149 3150 if (elm.onElementHeightChangeTimer) 3151 clearTimeout(elm.onElementHeightChangeTimer); 3152 3153 elm.onElementHeightChangeTimer = setTimeout(run, 200); 3154 })(); 3155 } 3156 3157 if ($('.sales-filters').length > 0) { 3158 if ($(window).outerWidth() > 991) { 3159 $('.column-height').niceScroll({ 3160 cursorcolor: "#9a9a9a", 3161 cursorwidth: "5px", 3162 cursorborder: "none", 3163 background: "#f7f7f7", 3164 railpadding: { top: 0, left: 6, bottom: 0, right: 3 }, 3165 cursorborderradius: 0, 3166 autohidemode: false 3167 }); 3168 $('.filters-acordeon').on('shown.bs.collapse hidden.bs.collapse', function(e) { 3169 $(this).parent().parent().getNiceScroll().resize(); 3170 }); 3171 } 3172 3173 $(window).resize(function() { 3174 if ($(window).outerWidth() > 991) { 3175 $('.column-height').niceScroll({ 3176 cursorcolor: "#9a9a9a", 3177 cursorwidth: "5px", 3178 cursorborder: "none", 3179 background: "#f7f7f7", 3180 railpadding: { top: 0, left: 6, bottom: 0, right: 3 }, 3181 cursorborderradius: 0, 3182 autohidemode: false 3183 }); 3184 $('.filters-acordeon').on('shown.bs.collapse hidden.bs.collapse', function(e) { 3185 $(this).parent().parent().niceScroll().resize(); 3186 }); 3187 } else { 3188 3189 $('.column-height').niceScroll().remove(); 3190 } 3191 }) 3192 3193 } 3194 3195 onElementHeightChange(document.body, function() { 3196 if ($(window).outerWidth() > 991) { 3197 $('.filters-acordeon').parent().parent().niceScroll().resize(); 3198 } 3199 }); 3200 3201}); 3202 3203// Sales filter / Puntos de venta Mobile 3204$(window).on('load',function(){ 3205 var windowWidth = $(window).outerWidth(); 3206 3207 if ($('.sales-filters').length > 0) { 3208 function searchMobile() { 3209 if ($('.sales-filters__map-search').find('button').length > 0) { 3210 $('.sales-filters__map-search').find('button').appendTo('.sales-filters__search'); 3211 } 3212 if ($('.sales-filters__map-search').find('label').length > 0) { 3213 $('.sales-filters__map-search').find('label').appendTo('.sales-filters__search'); 3214 } 3215 } 3216 3217 function searchDesktop() { 3218 if ($('.sales-filters__search').find('button').length > 0) { 3219 $('.sales-filters__search').find('label').appendTo('.sales-filters__map-search'); 3220 } 3221 if ($('.sales-filters__search').find('button').length > 0) { 3222 $('.sales-filters__search').find('button').appendTo('.sales-filters__map-search'); 3223 } 3224 } 3225 3226 function mapMobile() { 3227 if ($('.sales-filters__map').find('.loader').length > 0) { 3228 $('.sales-filters__map').find('.loader').appendTo('.sales-filters-list__map'); 3229 } 3230 if ($('.sales-filters__map').find('#map').length > 0) { 3231 $('.sales-filters__map').find('#map').appendTo('.sales-filters-list__map'); 3232 } 3233 } 3234 3235 function mapDesktop() { 3236 if ($('.sales-filters-list__map').find('.loader').length > 0) { 3237 $('.sales-filters-list__map').find('.loader').appendTo('.sales-filters__map'); 3238 } 3239 if ($('.sales-filters-list__map').find('#map').length > 0) { 3240 $('.sales-filters-list__map').find('#map').appendTo('.sales-filters__map'); 3241 } 3242 } 3243 3244 3245 if ($('.sales-filters__search').length == 0) { 3246 $('.sales-filters__text').after('<div class="sales-filters__search d-block d-lg-none"></div>'); 3247 } 3248 if ($('.sales-filters-list__map').length == 0) { 3249 $('.sales-filters__nosearch').after('<div class="sales-filters-list__map d-block d-lg-none"></div>'); 3250 } 3251 if (windowWidth < 992) { 3252 searchMobile(); 3253 mapMobile(); 3254 } 3255 3256 $(window).resize(function() { 3257 var windowWidth = $(window).outerWidth(); 3258 if (windowWidth < 992) { 3259 searchMobile(); 3260 mapMobile(); 3261 } else { 3262 mapDesktop(); 3263 searchDesktop(); 3264 } 3265 }) 3266 } 3267 3268 3269}) 3270 3271 3272 3273//************************ User Area */ 3274 3275var userNav = { 3276 setHeight: function($document, header, userAreaNav) { 3277 var height = ($($document).height() - $(header).height()); 3278 $(userAreaNav).find('.user-area-nav__wrapper').height(height); 3279 var footer = $(userAreaNav).closest('body').find('footer') 3280 if (!$(footer).hasClass('isUserNav')) { 3281 $(footer).addClass('isUserNav') 3282 } 3283 } 3284} 3285 3286$(document).ready(function() { 3287 3288 var $document = $(document), 3289 header = $('header'), 3290 userAreaNav = $('.user-area-nav'); 3291 try { 3292 $(userAreaNav).each(function(i, e) { 3293 var isEditable = $(e).closest('.portlet-content-editable').length 3294 if (isEditable == 0) { 3295 userNav.setHeight($document, header, e); 3296 } 3297 }) 3298 } catch (error) { 3299 console.log(error); 3300 3301 } 3302 3303 $(window).resize(function() { 3304 try { 3305 $(userAreaNav).each(function(i, e) { 3306 var isEditable = $(e).closest('.portlet-content-editable').length 3307 if (isEditable == 0) { 3308 userNav.setHeight($document, header, e); 3309 } 3310 }) 3311 } catch (error) { 3312 console.log(error); 3313 3314 } 3315 }) 3316 3317}) 3318 3319 3320// Comparador 3321var comparador = { 3322 scroll: function($comparador, scrollPosition) { 3323 var scrollAnchor = $($comparador).find('.scroll-slider').offset().top; 3324 3325 if (scrollAnchor < scrollPosition) { 3326 $($comparador).find('.scroll-slider').addClass('active'); 3327 } else { 3328 $($comparador).find('.scroll-slider').removeClass('active'); 3329 3330 } 3331 3332 }, 3333 filterSlideInit: function(filter, slideComparador, slideResume) { 3334 var cat = $(filter).find('.nav-link.active').attr('data-category'); 3335 3336 if (cat !== 'all') { 3337 $(slideComparador).slick('slickUnfilter'); 3338 $(slideResume).slick('slickUnfilter'); 3339 3340 $(slideComparador).find('.col').each(function() { 3341 $(this).removeClass('slide-shown'); 3342 }); 3343 $(slideResume).find('.col').each(function() { 3344 $(this).removeClass('slide-shown'); 3345 }); 3346 3347 // Attribute value must be quoted: category codes can start with a digit 3348 // or contain hyphens (e.g. "003-02"), which is not a valid unquoted 3349 // CSS identifier and silently matches nothing. 3350 $(slideComparador).find('.col[data-match="' + cat + '"]').addClass('slide-shown'); 3351 $(slideResume).find('.col[data-match="' + cat + '"]').addClass('slide-shown'); 3352 3353 $(slideComparador).slick('slickFilter', '.slide-shown'); 3354 $(slideResume).slick('slickFilter', '.slide-shown'); 3355 } 3356 }, 3357 filterSlide: function(filter, slideComparador, slideResume) { 3358 //------- Click to filter slides according to user's choice 3359 3360 $(filter).find('.nav-link').click(function() { 3361 3362 var cat = $(this).attr('data-category'); 3363 3364 3365 if (cat !== 'all') { 3366 $(slideComparador).slick('slickUnfilter'); 3367 $(slideResume).slick('slickUnfilter'); 3368 3369 $(slideComparador).find('.col').each(function() { 3370 $(this).removeClass('slide-shown'); 3371 }); 3372 $(slideResume).find('.col').each(function() { 3373 $(this).removeClass('slide-shown'); 3374 }); 3375 3376 // Attribute value must be quoted (see comment in filterSlideInit). 3377 $(slideComparador).find('.col[data-match="' + cat + '"]').addClass('slide-shown'); 3378 $(slideResume).find('.col[data-match="' + cat + '"]').addClass('slide-shown'); 3379 3380 3381 $(slideComparador).slick('slickFilter', '.slide-shown'); 3382 $(slideResume).slick('slickFilter', '.slide-shown'); 3383 } else { 3384 $(slideComparador).find('.col').each(function() { 3385 $(this).addClass('slide-shown'); 3386 }); 3387 $(slideComparador).slick('slickUnfilter'); 3388 3389 $(slideResume).find('.col').each(function() { 3390 $(this).addClass('slide-shown'); 3391 }); 3392 $(slideResume).slick('slickUnfilter'); 3393 } 3394 }) 3395 3396 3397 } 3398} 3399 3400$(document).ready(function() { 3401 var $resume = $('.resume-product'); 3402 var $product = $('.wrapper-producto'); 3403 3404 var $tabsAgrupador = $('#tabs-agrupador'); 3405 3406 var $sliderComparador = $('.js-slider-producto-comparador'); 3407 var $sliderResume = $('.js-slider-resume-comparador'); 3408 $(window).scroll(function() { 3409 var scrollP = $(window).scrollTop() 3410 try { 3411 $('.comparador').each(function(i, e) { 3412 comparador.scroll(e, scrollP); 3413 }) 3414 } catch (error) { 3415 console.log(error); 3416 } 3417 3418 }) 3419 3420 try { 3421 if ($('.js-slider-resume-comparador').length > 0) { 3422 3423 var sliderProductCols = $('.js-slider-resume-comparador').data('col'); 3424 if ($(window).outerWidth() < 992 && $(window).outerWidth() > 767) { 3425 sliderProductCols = 2; 3426 } else if ($(window).outerWidth() < 768) { 3427 sliderProductCols = 1; 3428 } 3429 $('.js-slider-resume-comparador').on('init', function(event, slick) { 3430 product.applyMatchHeight($resume); 3431 // product.selectColor($product, device); 3432 }); 3433 $('.js-slider-resume-comparador').on('reInit', function(event, slick) { 3434 product.applyMatchHeight($resume); 3435 // product.selectColor($product, device); 3436 }); 3437 $('.js-slider-resume-comparador').on('init reInit afterChange', function(event, slick, currentSlide, nextSlide) { 3438 //currentSlide is undefined on init -- set it to 0 in this case (currentSlide is 0 based) 3439 $('.slider-resume').find('.hidden-items-counter').text('+' + (slick.slideCount - sliderProductCols)); 3440 if ((slick.slideCount - sliderProductCols) <= 0) { 3441 $('.slider-resume').find('.hidden-items-counter').hide(); 3442 } else { 3443 $('.slider-resume').find('.hidden-items-counter').show(); 3444 } 3445 }); 3446 3447 3448 $('.js-slider-resume-comparador').not('.slick-initialized').slick({ 3449 dots: false, 3450 arrow: true, 3451 speed: 300, 3452 slidesToShow: sliderProductCols,
3453 asNavFor: '.js-slider-producto-comparador', 3454 infinite: false, 3455 prevArrow: $('.prev-resume'), 3456 nextArrow: $('.next-resume'), 3457 responsive: [{ 3458 breakpoint: 1199, 3459 settings: { 3460 dots: false, 3461 slidesToShow: 3 3462 } 3463 }, 3464 { 3465 breakpoint: 991, 3466 settings: { 3467 dots: false, 3468 slidesToShow: 2 3469 } 3470 }, 3471 { 3472 breakpoint: 767, 3473 settings: { 3474 dots: false, 3475 slidesToShow: 1 3476 } 3477 } 3478 ] 3479 }).on('setPosition', function(event, slick) { 3480 slick.$slides.css('height', slick.$slideTrack.height() + 'px'); 3481 }); 3482 3483 }; 3484 3485 } catch (error) { 3486 console.log('Try set slider resume got ' + error); 3487 } 3488 3489 try { 3490 if ($('.js-slider-producto-comparador').length > 0) { 3491 var sliderProductCols = $('.js-slider-producto-comparador').data('col'); 3492 if ($(window).outerWidth() < 992 && $(window).outerWidth() > 767) { 3493 sliderProductCols = 2; 3494 } else if ($(window).outerWidth() < 768) { 3495 sliderProductCols = 1; 3496 } 3497 3498 $('.js-slider-producto-comparador').on('init', function(event, slick) { 3499 product.applyMatchHeight($product); 3500 // product.selectColor($product, device); 3501 }); 3502 $('.js-slider-producto-comparador').on('reInit', function(event, slick) { 3503 product.applyMatchHeight($product); 3504 // product.selectColor($product, device); 3505 }); 3506 $('.js-slider-producto-comparador').on('init reInit afterChange', function(event, slick, currentSlide, nextSlide) { 3507 //currentSlide is undefined on init -- set it to 0 in this case (currentSlide is 0 based) 3508 $('.slider-producto').find('.hidden-items-counter').text('+' + (slick.slideCount - sliderProductCols)); 3509 if ((slick.slideCount - sliderProductCols) <= 0) { 3510 $('.slider-producto').find('.hidden-items-counter').hide(); 3511 } else { 3512 $('.slider-producto').find('.hidden-items-counter').show(); 3513 } 3514 }); 3515 3516 $('.js-slider-producto-comparador').not('.slick-initialized').slick({ 3517 dots: false, 3518 arrow: true, 3519 slidesToShow: sliderProductCols, 3520 speed: 300, 3521 asNavFor: '.js-slider-resume-comparador', 3522 infinite: false, 3523 prevArrow: $('.prev-product'), 3524 nextArrow: $('.next-product'), 3525 responsive: [{ 3526 breakpoint: 1199, 3527 settings: { 3528 dots: false, 3529 slidesToShow: 3 3530 } 3531 }, 3532 { 3533 breakpoint: 991, 3534 settings: { 3535 dots: false, 3536 slidesToShow: 2 3537 } 3538 }, 3539 { 3540 breakpoint: 767, 3541 settings: { 3542 dots: false, 3543 slidesToShow: 1 3544 } 3545 } 3546 ] 3547 }).on('setPosition', function(event, slick) { 3548 slick.$slides.css('height', slick.$slideTrack.height() + 'px'); 3549 }); 3550 3551 }; 3552 3553 } catch (error) { 3554 console.log('Try set slider product got ' + error); 3555 } 3556 3557 // Filter comparador init 3558 try { 3559 if ($($tabsAgrupador).length > 0) { 3560 comparador.filterSlideInit($tabsAgrupador, $sliderComparador, $sliderResume) 3561 } 3562 } catch (error) { 3563 console.log(error); 3564 3565 } 3566 // Filter comparador 3567 try { 3568 if ($($tabsAgrupador).length > 0) { 3569 comparador.filterSlide($tabsAgrupador, $sliderComparador, $sliderResume) 3570 } 3571 } catch (error) { 3572 console.log(error); 3573 3574 } 3575 3576 3577 3578}) 3579 3580//************************ User Area */ 3581 3582 3583// Product Favorite/Comparator added 3584 3585// fuera del click 3586var timeoutOverProduct = setTimeout(function() { 3587 $(".over-product").fadeOut(1500); 3588}, 4000); 3589 3590function displayNotification(imageUrl, notificationContent, notificationType, linkUrl, linkText) { 3591 3592 //If the notification is already present, we reset its contents 3593 if ($(".over-product").length) { 3594 3595 $('#notif-img').empty(); 3596 if (imageUrl) { 3597 var imageEl = '<div class="img-wrapper"><img alt="" src="' + imageUrl + '"></div>'; 3598 $('#notif-img').append(imageEl); 3599 } 3600 3601 $('#notif-content').empty(); 3602 if (notificationContent) { 3603 $('#notif-content').append(notificationContent); 3604 } 3605 3606 $('#notif-type').empty(); 3607 if (notificationType) { 3608 $('#notif-type').append(notificationType); 3609 } 3610 3611 $('#notif-url').empty(); 3612 if (linkText) { 3613 if (linkUrl) { 3614 var url = '<a class="btn btn-tertiary" href="' + linkUrl + '">' + linkText + '</a>'; 3615 $('#notif-url').append(url); 3616 } else { 3617 $('#notif-url').append(linkText); 3618 } 3619 } 3620 3621 //other wise, we build and show it 3622 } else { 3623 3624 var notification = '<section class="over-product" id="hidethis">' + 3625 '<div class="jumbotron"><div class="over-product__wrapper">' + 3626 '<div class="row"><div class="col-12 col-lg-6">' + 3627 '<div class="row"><div class="col-4"><div class="image" id="notif-img"></div></div>' + 3628 '<div class="col-8"><div class="wrapper-text" id="notif-content"></div></div></div></div>' + 3629 '<div class="col-12 col-lg-6">' + 3630 '<div class="row h-100 align-items-center">' + 3631 '<p class="btnReset addfav col-8 col-lg-6" id="notif-type"></p>' + 3632 '<p class="verfav col-4 col-lg-6" id="notif-url"></p>' + 3633 '</div></div></div></div></div></section>'; 3634 3635 $('body').append(notification); 3636 3637 if (imageUrl) { 3638 var notificationImage = '<div class="img-wrapper"><img alt="" src="' + imageUrl + '"></div>'; 3639 $('#notif-img').append(notificationImage); 3640 } 3641 3642 if (notificationContent) { 3643 $('#notif-content').append(notificationContent); 3644 } 3645 3646 if (notificationType) { 3647 $('#notif-type').append(notificationType); 3648 } 3649 3650 if (linkText) { 3651 if (linkUrl) { 3652 var notificationUrl = '<a class="btn btn-tertiary" href="' + linkUrl + '">' + linkText + '</a>'; 3653 $('#notif-url').append(notificationUrl); 3654 } else { 3655 $('#notif-url').append(linkText); 3656 } 3657 } 3658 } 3659 3660 $(".over-product").stop().fadeOut(); 3661 $(".over-product").fadeIn(300); 3662 timeoutOverProduct = clearTimeout(timeoutOverProduct); 3663 timeoutOverProduct = setTimeout(function() { 3664 $(".over-product").fadeOut(1500); 3665 }, 4000); 3666} 3667 3668//*********** HTML Base functions 3669 3670$(document).ready(function() { 3671 var $html = $('.html-base'); 3672 var $htmlTable = $('.html-base').find('table'); 3673 if (typeof $htmlTable !== "undefined") { 3674 $('.html-base').find('table').each(function() { 3675 var htmlClone = $(this).clone() 3676 $(this).wrap("<div class='table-responsive'></div>"); 3677 }) 3678 } 3679}) 3680 3681//*********** Cookie functions 3682 3683 3684function setCookie(cname, cvalue, exdays) { 3685 var date = new Date(); 3686 if (exdays > 0) { 3687 date.setTime(date.getTime() + (exdays * 24 * 60 * 60 * 1000)); 3688 } else { 3689 date.setFullYear(date.getFullYear() + 1); 3690 } 3691 document.cookie = cname + "=" + cvalue + ";expires=" + date.toUTCString() + ";path=/"; 3692} 3693 3694function getCookie(cname) { 3695 var name = cname + "="; 3696 var decodedCookie = decodeURIComponent(document.cookie); 3697 var ca = decodedCookie.split(';'); 3698 for (var i = 0; i < ca.length; i++) { 3699 var c = ca[i]; 3700 while (c.charAt(0) === ' ') { 3701 c = c.substring(1); 3702 } 3703 if (c.indexOf(name) === 0) { 3704 return c.substring(name.length, c.length); 3705 } 3706 } 3707 return ""; 3708} 3709 3710$("document").ready(function() { 3711 3712 if (getCookie('cpolicy').length == 0) { 3713 $('.cookie-warn').toggleClass('active'); 3714 } 3715 3716 $('.close-cookie').on('click', function(e) { 3717 e.preventDefault(); 3718 $('.cookie-warn').hide();
3719 setCookie('cpolicy', 'true', 0); 3720 }); 3721 3722 if (getCookie('apptop').length == 0) { 3723 if (/Android/i.test(navigator.userAgent)) { 3724 $('#phone-popup').toggleClass('active'); 3725 $('#dl-app-url').attr('href', 'https://play.google.com/store/apps/details?id=net.roca.rocacatalog'); 3726 } else if (/iPhone|iPad/i.test(navigator.userAgent)) { 3727 $('#phone-popup').toggleClass('active'); 3728 $('#dl-app-url').attr('href', 'https://apps.apple.com/es/app/roca-product-catalogue/id579584692'); 3729 } 3730 } 3731 3732 $('.popup-app').find('.js-close').click(function() { 3733 $(this).closest('.popup-app').removeClass('active'); 3734 setCookie('apptop', 'true', 0); 3735 }); 3736 3737 try { 3738 var promoHeight = $(".promoSubmenu").height(); 3739 var userMenu = $(".user-menu-mobile").height(); 3740 var subMenuBar = $(".menus-secundarios").height(); 3741 var pestanas = $('.menu-pestanas').height(); 3742 3743 $(window).scroll(function() { 3744 var scroll = $(window).scrollTop(); 3745 3746 var limit = scroll + IOS_POSITION_ERROR_THRESHOLD; 3747 3748 if (promoHeight) { 3749 limit += promoHeight; 3750 } else { 3751 promoHeight = 0; 3752 } 3753 if (userMenu) { 3754 limit += userMenu; 3755 } else { 3756 userMenu = 0; 3757 } 3758 if (subMenuBar) { 3759 limit += subMenuBar; 3760 } else { 3761 subMenuBar = 0; 3762 } 3763 if (pestanas) { 3764 limit += pestanas; 3765 } else { 3766 pestanas = 0; 3767 } 3768 3769 if ($(".menu-anclas").length > 0) { 3770 3771 let $menuAnclas = $(".menu-anclas"); 3772 let menuAnclasOffsetTop = $menuAnclas.offset().top; 3773 let menuAnclasDataOffsetTop = $menuAnclas.data("offsetTop") 3774 3775 if (menuAnclasDataOffsetTop === undefined){ 3776 $menuAnclas.data("offsetTop", $menuAnclas.parent().offset().top); 3777 } 3778 3779 if (menuAnclasOffsetTop <= limit) { 3780 if (($menuAnclas.parent().hasClass("menu-fixed") || $menuAnclas.parent().hasClass("move-anclas-normal-mobile")) && limit >= menuAnclasDataOffsetTop) { 3781 cancelThrottle("menu-anclas"); 3782 $menuAnclas.css("position", "fixed"); 3783 3784 $menuAnclas.css("top", 3785 (userMenu && userMenu > 0) ? (promoHeight + userMenu) : promoHeight 3786 ); 3787 3788 if ($menuAnclas.hasClass("product-menu-anclas")) { 3789 $menuAnclas.css("display", "block"); 3790 } 3791 } else { 3792 $menuAnclas.css("position", "relative"); 3793 $menuAnclas.css("top", 0); 3794 3795 if ($menuAnclas.hasClass("product-menu-anclas")) { 3796 $menuAnclas.css("display", "none"); 3797 } 3798 } 3799 } else { 3800 throttleIfIOS("menu-anclas", () => { 3801 $menuAnclas.css("position", "relative"); 3802 $menuAnclas.css("top", 0); 3803 3804 if ($menuAnclas.hasClass("product-menu-anclas")) { 3805 $menuAnclas.css("display", "none"); 3806 } 3807 }); 3808 } 3809 3810 var $menuWrapper = $("nav.main-menu-anclas__wrapper"); 3811 updateScrollFade($menuWrapper); 3812 } 3813 3814 if ($(".menus-secundarios").length > 0) { 3815 if ( 3816 $(".menus-secundarios").offset().top < limit && 3817 $(".menus-secundarios").closest(".js-submenu").hasClass("menu-fixed") 3818 ) { 3819 cancelThrottle("menus-secundarios position"); 3820 $(".menus-secundarios").css("position", "fixed"); 3821 $(".menus-secundarios").css("top", promoHeight + userMenu); 3822 } else { 3823 throttleIfIOS("menus-secundarios position", () => { 3824 $(".menus-secundarios").css("position", "relative") 3825 }); 3826 } 3827 } 3828 3829 // Sticky mobile filter menu 3830 if ($(".product-filter").length > 0 && $(window).outerWidth() < 993) { 3831 if ($(".product-filter").offset().top < limit && 3832 $(".product-filter").closest(".row").hasClass("mobile-fixed")) 3833 { 3834 cancelThrottle("product-filter"); 3835 $(".product-filter").css("position", "fixed") 3836 $(".product-filter").css("left", "0"); 3837 $(".product-filter").css("z-index", "99"); 3838 if ($("body").hasClass('has-control-menu')) { 3839 $(".product-filter").css("top", "56px"); 3840 } else { 3841 $(".product-filter").css("top", "0"); 3842 } 3843 } else { 3844 throttleIfIOS("product-filter", () => { 3845 $(".product-filter").css("position", "relative"); 3846 $(".product-filter").css("top", "0"); 3847 $(".product-filter").css("left", "0"); 3848 }); 3849 } 3850 } 3851 3852 if ($(".menu-pestanas").length > 0) { 3853 if ($(".menu-pestanas").offset().top < limit &&
3854 $(".menu-pestanas").closest(".js-submenu").hasClass("menu-fixed") 3855 ) { 3856 cancelThrottle("menu-pestanas"); 3857 $(".menu-pestanas").css("position", "fixed"); 3858 $(".menu-pestanas").css( 3859 "top", promoHeight + userMenu 3860 ); 3861 } else { 3862 throttleIfIOS("menus-pestanas", () => { 3863 $(".menu-pestanas").css("position", "relative") 3864 }); 3865 } 3866 } 3867 3868 //check for the user navigation bar 3869 }); 3870 3871 } catch (error) { 3872 console.log(error); 3873 } 3874 3875}); 3876 3877 3878 3879 3880/* FIN COOKIES */ 3881 3882 3883 3884// ****************************** BEGIN SKU_DISTRIBUTOR 3885$(document).ready(function() { 3886 try { 3887 if ($(".js-slider-sku").length > 0) { 3888 $(".js-slider-sku").each(function(i, slider) { 3889 let sliderSkuCols = $(slider).data("col"); 3890 if ($(window).outerWidth() > 767) { 3891 sliderSkuCols = 3; 3892 } else if ($(window).outerWidth() < 768) { 3893 sliderSkuCols = 1; 3894 } 3895 3896 $(slider) 3897 .slick({ 3898 dots: true, 3899 arrow: false, 3900 slidesToShow: sliderSkuCols, 3901 infinite: false, 3902 speed: 300, 3903 touchThreshold: 10, 3904 centerMode: false, 3905 slidesToScroll: 2, 3906 responsive: [{ 3907 breakpoint: 1199, 3908 settings: { 3909 dots: true, 3910 slidesToShow: 3, 3911 }, 3912 }, 3913 { 3914 breakpoint: 991, 3915 settings: { 3916 dots: true, 3917 slidesToShow: 2, 3918 slidesToScroll: 1, 3919 }, 3920 }, 3921 { 3922 breakpoint: 767, 3923 settings: "unslick", 3924 }, 3925 ], 3926 }) 3927 .on("setPosition", function(event, slick) { 3928 slick.$slides.css( 3929 "height", 3930 slick.$slideTrack.height() + "px" 3931 ); 3932 }); 3933 }); 3934 } 3935 } catch (error) { 3936 console.log("Sku product: " + error); 3937 } 3938}); 3939 3940//****************************** END SKU_DISTRIBUTOR 3941 3942 3943 3944// ****************************** DISTRIBUIDOR-BASICO IMÃGENES 3945$(document).ready(function () { 3946 $('#blog-detail .distribuidor-basico-img').each(function () { 3947 const $container = $(this); 3948 const bgImage = $container.css('background-image'); 3949 const urlMatch = bgImage.match(/url\(["']?(.*?)["']?\)/); 3950 3951 if (!urlMatch) return; 3952 3953 const img = new Image(); 3954 img.src = urlMatch[1]; 3955 3956 img.onload = function () { 3957 const imgWidth = img.width; 3958 const imgHeight = img.height; 3959 3960 // Opcional: establecer el mismo aspect-ratio 3961 const aspectRatio = imgWidth / imgHeight; 3962 $container.css('aspect-ratio', aspectRatio); 3963 // Establecer el ancho de la imagen real (en pÃxeles) 3964 3965 if(100/aspectRatio < 100){ 3966 $container.css('padding-bottom', 100/aspectRatio +'%'); 3967 }else{ 3968 $container.css('padding-bottom', 100 +'%'); 3969 } 3970 }; 3971 }); 3972}); 3973// ****************************** END DISTRIBUIDOR-BASICO IMÃGENES 3974 3975 3976//Comportamiento del Home Layout para desplegar el segundo contenedor 3977 3978if ($(".loader-wrapperUp").length) { 3979 let isWrapperDownVisible = false; 3980 $(window).scroll(function () { 3981 let viewportBottom = $(window).scrollTop() + $(window).height() ; 3982 let wrapperUpBottom = $(".loader-wrapperUp").offset().top + $(".loader-wrapperUp").outerHeight() ; 3983 3984 if ((viewportBottom > wrapperUpBottom) && (!isWrapperDownVisible)) { 3985 $(".portlet-layout-loader").addClass("active") 3986 setTimeout(() => { 3987 $(".loader-wrapperDown").removeClass("loader-hide"); 3988 $(".portlet-layout-loader").removeClass("active") 3989 $(".loader-wrapperDown .slick-slider").slick("resize") 3990 }, 1000) 3991 isWrapperDownVisible = true; 3992 } 3993 }); 3994} 3995// ****************************** BEGIN HOME_MODAL 3996/* $(document).ready(function () { 3997 if ($(".modal-form.open").length) { 3998 $('body').addClass("modal-form-body-no-scroll"); 3999 }else { 4000 $('body').removeClass("modal-form-body-no-scroll"); 4001 } 4002 4003 if ($('body').hasClass("has-control-menu").length && $(".modal-form.open").length) { 4004 $(".modal-form.open").removeClass("open"); 4005 } 4006 4007 $(".close-button").on("click", function(){ 4008 $('body').removeClass("modal-form-body-no-scroll"); 4009 $(".modal-form.open").removeClass("open"); 4010 }) 4011}); */ 4012// ****************************** END HOME_MODAL 4013 4014// ****************************** BEGIN DROPDOWN PRODUCT DETAILS 4015$(document).ready(function () { 4016 if ($(".dropdown-click2").length && $(".dropdown-area").length) { 4017 $(".dropdown-click2").on("click", function () { 4018 $(".dropdown-click2 .dropdown-arrow").toggleClass("close-drop"); 4019 $(this).next(".dropdown-area").toggleClass("active"); 4020 }); 4021 } 4022 if ($(".dropdown-click1").length && $(".dropdown-area").length) { 4023 $(".dropdown-click1").on("click", function () { 4024 $(".dropdown-click1 .dropdown-arrow").toggleClass("close-drop"); 4025 $(this).next(".dropdown-area").toggleClass("active"); 4026 }); 4027 } 4028}); 4029// ****************************** END DROPDOWN PRODUCT DETAILS 4030 4031 4032// ****************************** BEGIN CONTACT FORM SMART SELECT 4033$(document).ready(function () { 4034 if ($(".contact.contact-form-smart").length) { 4035 $(".select-selected").on("click", function () { 4036 $(this).toggleClass("select-arrow-active"); 4037 $(this).next(".select-items").toggleClass("select-hide"); 4038 $(".select-items div").each(function (index, element) { 4039 if ($(element).text() == $(".select-selected").text()) { 4040 $(element).addClass("same-as-selected") 4041 } else { 4042 $(element).removeClass("same-as-selected") 4043 } 4044 }) 4045 }) 4046 $(".select-items>div").on("click", function () { 4047 $(this).closest(".select-items").siblings(".select-selected").text($(this).text()); 4048 $(this).closest(".select-items").addClass("select-hide"); 4049 $(this).closest(".select-items").siblings(".select-selected").removeClass("select-arrow-active"); 4050 4051 }) 4052 } 4053}); 4054// ****************************** END CONTACT FORM SMART SELECT 4055 4056// ****************************** BTN-LINK UNDERLINE 4057/** 4058 * Enhances all anchor elements with class 'btn-link' by wrapping their text content 4059 * in a <span> with class 'link-text', while preserving any <i> icon elements. 4060 * This improves styling flexibility and accessibility. 4061 */ 4062$(document).ready(function () { 4063 $('a.btn-link').each(function () { 4064 const $link = $(this); 4065 const html = $link.html(); 4066 4067 const linkSpan = $link.find("span"); 4068 4069 if (linkSpan.length === 0) { 4070 // Encuentra el icono <i> y lo separa del texto 4071 const icon = $link.find('i'); 4072 const iconHtml = icon.length ? icon.prop('outerHTML') : ''; 4073 4074 // Extrae solo el texto (sin el icono) 4075 const textOnly = $link.clone().children().remove().end().text().trim(); 4076 4077 // Reconstruye el HTML con el texto envuelto en un span 4078 $link.html('<span class="link-text">' + textOnly + '</span>' + iconHtml); 4079 } 4080 }); 4081}); 4082// ****************************** END BTN-LINK UNDERLINE 4083 4084 4085// ****************************** SLICKCONTROLS 4086/** 4087 * Script to restructure Slick carousel controls. 4088 * Groups arrows, dots, and counters in a row below the slider. 4089 * Displays current dot number and total, updating dynamically. 4090 * Only renders if visible dots exist in the carousel. 4091 */ 4092 4093 // Se mantiene la navegación de roca frente al diseño de figma 4094 4095/*
4096function renderSlickControls($slider) { 4097 const $parent = $slider.parent(); 4098 4099 // Remove existing controls wrapper if present 4100 $parent.find('.slick-controls-wrapper').remove(); 4101 4102 // Get real slides (excluding cloned ones) 4103 const $realSlides = $slider.find('.slick-slide').not('.slick-cloned'); 4104 const totalSlides = $realSlides.length; 4105 if (totalSlides <= 1) return; 4106 4107 // Check for dots and arrows 4108 const $dots = $slider.find('.slick-dots'); 4109 const hasDots = $dots.length && $dots.find('li').length; 4110 const $prevArrow = $slider.find('.slick-prev'); 4111 const $nextArrow = $slider.find('.slick-next'); 4112 const hasArrows = $prevArrow.length && $nextArrow.length; 4113 4114 // Exit if no controls are present 4115 if (!hasDots && !hasArrows) return; 4116 4117 // Format total count 4118 const totalUnits = hasDots ? $dots.find('li').length : totalSlides; 4119 const formattedTotal = totalUnits < 10 ? '0' + totalUnits : totalUnits; 4120 4121 // Create control elements 4122 const $controlsWrapper = $('<div class="slick-controls-wrapper"></div>'); 4123 const $currentCounter = $('<div class="slick-counter-current">01</div>'); 4124 const $totalCounter = $('<div class="slick-counter-total">' + formattedTotal + '</div>'); 4125 const $dotsContainer = hasDots ? $('<div class="slick-dots-container"></div>').append($dots) : null; 4126 4127 // Append controls 4128 if (hasArrows) $controlsWrapper.append($prevArrow); 4129 if (hasArrows || hasDots) $controlsWrapper.append($currentCounter); 4130 if ($dotsContainer) $controlsWrapper.append($dotsContainer); 4131 if (hasArrows || hasDots) $controlsWrapper.append($totalCounter); 4132 if (hasArrows) $controlsWrapper.append($nextArrow); 4133 4134 // Insert controls after slider 4135 $slider.after($controlsWrapper); 4136 4137 // Update current counter on slide change 4138 $slider.off('afterChange._controls').on('afterChange._controls', function (event, slick, currentSlide) { 4139 let currentFormatted; 4140 4141 if (slick.$dots && slick.$dots.find('li.slick-active').length) { 4142 const currentDotIndex = slick.$dots.find('li.slick-active').index(); 4143 currentFormatted = (currentDotIndex + 1) < 10 ? '0' + (currentDotIndex + 1) : (currentDotIndex + 1); 4144 } else { 4145 currentFormatted = (currentSlide + 1) < 10 ? '0' + (currentSlide + 1) : (currentSlide + 1); 4146 } 4147 4148 $controlsWrapper.find('.slick-counter-current').text(currentFormatted); 4149 }); 4150} 4151 4152function initSlickControls() { 4153 $('.slick-initialized').each(function () { 4154 const $slider = $(this); 4155 renderSlickControls($slider); 4156 }); 4157} 4158 4159// Re-render controls on slick events 4160$(document).on('init reInit breakpoint', '.slick-initialized', function () { 4161 renderSlickControls($(this)); 4162}); 4163 4164// Initial setup 4165$(document).ready(initSlickControls); 4166*/ 4167 4168// ****************************** END SLICKCONTROLS 4169 4170 4171 4172 4173 4174$(document).ready(function () { 4175 $('.cta-black, .cta-white').each(function () { 4176 const $link = $(this); 4177 const textOnly = $link.text().trim(); 4178 4179 // Reconstruye el HTML con el texto envuelto en un span 4180 $link.html('<span class="link-text">' + textOnly + '</span>'); 4181 }); 4182}); 4183// ****************************** END BTN-LINK UNDERLINE 4184 4185 4186 4187 4188// ****************************** SLICKCONTROLS 4189/** 4190 * Script to restructure Slick carousel controls. 4191 * Groups arrows, dots, and counters in a row below the slider. 4192 * Displays current dot number and total, updating dynamically. 4193 * Only renders if visible dots exist in the carousel. 4194 */ 4195 4196 // Se mantiene la navegación de roca frente al diseño de figma 4197 4198/*
4199function renderSlickControls($slider) { 4200 const $parent = $slider.parent(); 4201 4202 // Remove existing controls wrapper if present 4203 $parent.find('.slick-controls-wrapper').remove(); 4204 4205 // Get real slides (excluding cloned ones) 4206 const $realSlides = $slider.find('.slick-slide').not('.slick-cloned'); 4207 const totalSlides = $realSlides.length; 4208 if (totalSlides <= 1) return; 4209 4210 // Check for dots and arrows 4211 const $dots = $slider.find('.slick-dots'); 4212 const hasDots = $dots.length && $dots.find('li').length; 4213 const $prevArrow = $slider.find('.slick-prev'); 4214 const $nextArrow = $slider.find('.slick-next'); 4215 const hasArrows = $prevArrow.length && $nextArrow.length; 4216 4217 // Exit if no controls are present 4218 if (!hasDots && !hasArrows) return; 4219 4220 // Format total count 4221 const totalUnits = hasDots ? $dots.find('li').length : totalSlides; 4222 const formattedTotal = totalUnits < 10 ? '0' + totalUnits : totalUnits; 4223 4224 // Create control elements 4225 const $controlsWrapper = $('<div class="slick-controls-wrapper"></div>'); 4226 const $currentCounter = $('<div class="slick-counter-current">01</div>'); 4227 const $totalCounter = $('<div class="slick-counter-total">' + formattedTotal + '</div>'); 4228 const $dotsContainer = hasDots ? $('<div class="slick-dots-container"></div>').append($dots) : null; 4229 4230 // Append controls 4231 if (hasArrows) $controlsWrapper.append($prevArrow); 4232 if (hasArrows || hasDots) $controlsWrapper.append($currentCounter); 4233 if ($dotsContainer) $controlsWrapper.append($dotsContainer); 4234 if (hasArrows || hasDots) $controlsWrapper.append($totalCounter); 4235 if (hasArrows) $controlsWrapper.append($nextArrow); 4236 4237 // Insert controls after slider 4238 $slider.after($controlsWrapper); 4239 4240 // Update current counter on slide change 4241 $slider.off('afterChange._controls').on('afterChange._controls', function (event, slick, currentSlide) { 4242 let currentFormatted; 4243 4244 if (slick.$dots && slick.$dots.find('li.slick-active').length) { 4245 const currentDotIndex = slick.$dots.find('li.slick-active').index(); 4246 currentFormatted = (currentDotIndex + 1) < 10 ? '0' + (currentDotIndex + 1) : (currentDotIndex + 1); 4247 } else { 4248 currentFormatted = (currentSlide + 1) < 10 ? '0' + (currentSlide + 1) : (currentSlide + 1); 4249 } 4250 4251 $controlsWrapper.find('.slick-counter-current').text(currentFormatted); 4252 }); 4253} 4254 4255function initSlickControls() { 4256 $('.slick-initialized').each(function () { 4257 const $slider = $(this); 4258 renderSlickControls($slider); 4259 }); 4260} 4261 4262// Re-render controls on slick events 4263$(document).on('init reInit breakpoint', '.slick-initialized', function () { 4264 renderSlickControls($(this)); 4265}); 4266 4267// Initial setup 4268$(document).ready(initSlickControls); 4269*/ 4270 4271// ****************************** END SLICKCONTROLS 4272 4273 4274 4275 4276//Yari 10/06/2023 populate header's user area by service 4277//Yari 20/09/2023 functionality moved to header.ftl to try to solve language cookie error with Akamai 4278//$(document).ready(function() { 4279// var li = document.getElementById('userMenuLi'); 4280// if (li) { 4281// var parent = li.parentNode, groupId = li.dataset.group, marketCode = li.dataset.market, languageId = li.dataset.language, 4282// debug = (li.dataset.debug === 'true'); 4283// if ((groupId)&&(marketCode)&&(languageId)) { 4284// var url = '/o/marginals/get-header-data?groupId=' + groupId + '&marketCode=' + marketCode + '&languageId=' + languageId; 4285// if (debug) {console.log('Calling getUserData service: ' + url);} 4286// $.ajax({ 4287// type : 'POST', 4288// url : url, 4289// success : function(result) { 4290// if (debug) {console.log(result);} 4291// if (result.success) { 4292// li.remove(); 4293// var html = result.userHTML; 4294// if (html) { 4295// parent.innerHTML += result.userHTML; 4296// if (debug) {console.log('Header user HTML menu succesfully updated');} 4297// } 4298// var mdiv = document.getElementById('mobileUserAreaDiv'); 4299// if ((mdiv)&&(result.mobileUserHTML)) { 4300// mdiv.innerHTML = result.mobileUserHTML; 4301// mdiv.style.display = ''; 4302// if (debug) {console.log('Header mobile user HTML menu succesfully updated');} 4303// } 4304// } else { 4305// li.innerHTML = 'ERROR!'; 4306// li.style.color = 'red'; 4307// if (debug) { 4308// var error = (result.error) ? result.error : 'Unspecified error'; 4309// console.log('ERROR: ' + error); 4310// } 4311// } 4312// }, 4313// error : function(jqXHR, textStatus, errorThrown) { 4314// li.innerHTML = 'ERROR!'; 4315// li.style.color = 'red'; 4316// if (debug) {console.log('ERROR: ' + textStatus + ' (' + errorThrown + ')');} 4317// } 4318// }); 4319// } 4320// } 4321//}); 4322 4323//Yari 10/07/2023 header's images lazy loading 4324$(document).ready(function() { 4325 $('div.main-header__wrapper').find('img[data-lazy]').each(function() { 4326 var lazy = $(this).data('lazy'); 4327 if (lazy) { 4328 this.src = lazy; 4329 //console.log('Image ' + this + ' src attribute changed to : ' + lazy); 4330 } 4331 }); 4332 $('div.main-header__wrapper').find('span[data-lazybkg]').each(function() { 4333 var lazybkg = $(this).data('lazybkg'); 4334 if (lazybkg) { 4335 this.style.backgroundImage = 'url("' + lazybkg + '")'; 4336 //console.log('Span ' + this + ' backgroundImage style changed to : ' + lazybkg); 4337 } 4338 }); 4339}); 4340 4341function changeColsMobile(elIdentifier, isTwoCol) { 4342 var el = document.querySelector(elIdentifier); 4343 4344 if(isTwoCol) { 4345 el.classList.remove("one"); 4346 el.classList.add("two"); 4347 } else { 4348 el.classList.remove("two"); 4349 el.classList.add("one"); 4350 } 4351} 4352 4353 4354// SCROLL AND TABS 4355$(document).ready(function() { 4356 initAllTabs(); 4357 centerAllActiveTabs(); 4358}); 4359 4360 4361$(window).resize(function() { 4362 initAllTabs(); 4363 centerAllActiveTabs(); 4364}); 4365 4366function initAllTabs() { 4367 $('.roca-restyle .tabs').each(function() { 4368 4369 var tabsClass = '.nav.nav-tabs'; 4370 var tabs = $(this).find(tabsClass).first(); 4371 4372 if(tabs[0].scrollWidth > tabs[0].clientWidth) { 4373 tabs.css('padding-right', '32px'); 4374 } else { 4375 tabs.css('padding-right', '0'); 4376 } 4377 4378 initScroll('#' + $(this).attr('id') + ' ' + tabsClass); 4379 }); 4380} 4381 4382function initScroll(section) { 4383 const arrowsEl = $(section).first().parent().find('.rs-scroll-arrows').first(); 4384 const arrowLeftEl = $(arrowsEl).find('.rs-scroll-left').first(); 4385 const arrowRightEl = $(arrowsEl).find('.rs-scroll-right').first(); 4386 4387 const scrollWidth = $(section).first().get(0).scrollWidth; 4388 const visibleWidth = $(section).first().innerWidth(); 4389 4390 if(scrollWidth > $(section).first()[0].clientWidth) { 4391 arrowsEl.show(); 4392 } else { 4393 arrowsEl.hide(); 4394 } 4395 4396 if ($(section).first().scrollLeft() === 0) { 4397 arrowLeftEl.hide(); 4398 } else { 4399 arrowLeftEl.show(); 4400 } 4401 4402 if (Math.round($(section).first().scrollLeft() + visibleWidth) >= scrollWidth) { 4403 arrowRightEl.hide(); 4404 } else { 4405 arrowRightEl.show(); 4406 } 4407} 4408 4409function actionArrowScroll(section, pxScroll) { 4410 $(section).first().animate({ scrollLeft: $(section).first().scrollLeft() + pxScroll }, 300, function() { initScroll(section); }); 4411} 4412 4413function actionDotScroll(carousel, maxDotsVisible, dotWidth) { 4414 carousel.on('afterChange', function(event, slick, currentSlide) { 4415 4416 var firstVisibleDot = currentSlide - Math.floor(maxDotsVisible / 2); 4417 if(slick.slideCount > maxDotsVisible) { firstVisibleDot = Math.max(0, Math.min(firstVisibleDot, slick.slideCount - maxDotsVisible)); } 4418 4419 $(event.target).parent().find('.slick-dots').animate({ 4420 scrollLeft: firstVisibleDot * dotWidth 4421 }, 300); 4422 }); 4423} 4424 4425function updateScrollFade($this) { 4426 const scrollWidth = $this.get(0).scrollWidth; 4427 const visibleWidth = $this.innerWidth(); 4428 4429 if (scrollWidth - visibleWidth > 1) { 4430 if ($this.scrollLeft() + visibleWidth >= scrollWidth) { 4431 $this.removeClass("anclas-wrapper-fade"); 4432 } else if (!$this.hasClass("anclas-wrapper-fade")) { 4433 $this.addClass("anclas-wrapper-fade"); 4434 } 4435 } else { 4436 $this.removeClass("anclas-wrapper-fade"); 4437 } 4438} 4439 4440function centerAllActiveTabs() { 4441 var tabs = document.querySelectorAll('.roca-restyle .tabs .nav.nav-tabs'); 4442
4443 tabs.forEach(tab => { 4444 var activeTab = tab.querySelector('.nav-item.active'); 4445 if (activeTab) { 4446 var tabRect = tab.getBoundingClientRect(); 4447 var activeRect = activeTab.getBoundingClientRect(); 4448 4449 var offset = activeRect.left - tabRect.left - (tab.clientWidth / 2) + (activeTab.clientWidth / 2); 4450 tab.scrollLeft += offset; 4451 } 4452 }); 4453} 4454 4455// DISCARD THEME 4456$(document).ready(function () { 4457 const urlParams = new URLSearchParams(window.location.search); 4458 const discardTheme = urlParams.get('discardTheme'); 4459 4460 if (discardTheme !== null) { 4461 const appendDiscardTheme = (url) => { 4462 try { 4463 const parsedUrl = new URL(url, window.location.origin); 4464 parsedUrl.searchParams.set('discardTheme', discardTheme); 4465 return parsedUrl.toString(); 4466 } catch (e) { 4467 return url; 4468 } 4469 }; 4470 4471 // Modificar todos los enlaces existentes (excepto anclas) 4472 $('a[href]').each(function () { 4473 const href = $(this).attr('href'); 4474 if (href && !href.startsWith('#') && !href.includes('discardTheme') && !href.startsWith('javascript:')) { 4475 $(this).attr('href', appendDiscardTheme(href)); 4476 } 4477 }); 4478 4479 // Interceptar clics en enlaces válidos (no anclas) 4480 $(document).on('click', 'a[href]', function (e) { 4481 const href = $(this).attr('href'); 4482 if (href && !href.startsWith('#') && !href.includes('discardTheme') && !href.startsWith('javascript:')) { 4483 e.preventDefault(); 4484 window.location.href = appendDiscardTheme(href); 4485 } 4486 }); 4487 4488 // Interceptar cambios de estado del historial 4489 const originalPushState = history.pushState; 4490 history.pushState = function (state, title, url) { 4491 if (url) { 4492 url = appendDiscardTheme(url); 4493 } 4494 return originalPushState.call(history, state, title, url); 4495 }; 4496 4497 const originalReplaceState = history.replaceState; 4498 history.replaceState = function (state, title, url) { 4499 if (url) { 4500 url = appendDiscardTheme(url); 4501 } 4502 return originalReplaceState.call(history, state, title, url); 4503 }; 4504 } 4505}); 4506 4507// Range slider filters functionality 4508function findClosestIndex(array, target) { 4509 return array.reduce((bestIdx, val, idx) => 4510 Math.abs(val - target) < Math.abs(array[bestIdx] - target) ? idx : bestIdx 4511 , 0); 4512}
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.