let uiSpinner = '
'; let uiSpinnerBtn = ''; let eShopCartAffix = null; /* PWA * if ("serviceWorker" in navigator) { window.addEventListener("load", function() { navigator.serviceWorker .register("/eshop.js") .then(res => console.log("service worker registered")) .catch(err => console.log("service worker not registered", err)) }) } let eShopOfflineWindow = document.getElementById("eShopOfflineWindow"); if (eShopOfflineWindow) { window.addEventListener("load", () => { if (navigator.onLine) { eShopOfflineWindow.classList.remove("opened"); } else { if (confirm('No cuentas con conexión a Internet, tu experiencia podría no ser la deseada en nuestra aplicación. ¿Deseas permanecer aquí?')) { eShopOfflineWindow.classList.add("opened"); } else { window.close(); } } }); window.addEventListener('online', () => { eShopOfflineWindow.classList.remove("opened"); }); window.addEventListener('offline', () => { eShopOfflineWindow.classList.add("opened"); }); } /* eShopOfflineWindow end */ /* PWA */ $(function() { /* WOW */ var wow = new WOW({ boxClass: 'wow', // animated element css class (default is wow) animateClass: 'animated', // animation css class (default is animated) offset: 0, // distance to the element when triggering the animation (default is 0) mobile: true, // trigger animations on mobile devices (default is true) live: true, // act on asynchronously loaded content (default is true) callback: function(box) { // the callback is fired every time an animation is started // the argument that is passed in is the DOM node being animated }, scrollContainer: null // optional scroll container selector, otherwise use window }); wow.init(); /* WOW */ /* Scroll To */ $('a:not([role=button]):not([data-toggle=modal])').on('click', function() { if (this.hash != "") { if (this.hash == "#form") { $("#floatingForm").addClass("animated shake"); $("#inFName").focus(); setTimeout(function() { $("#floatingForm").removeClass("animated shake"); }, 1000); } $('html, body').animate({scrollTop: $(this.hash).offset().top - 80}, 1000); return false; } }); /* Scroll To */ $(document).on("scroll", function(){ if ($(document).scrollTop() > 86){ //$('nav .logo').css('width', '65px'); $('header nav').addClass('shadow-sm'); $('nav .nav-item:first-child').removeClass('active'); } else { //$('nav .logo').css('width', '90px'); $('header nav').removeClass('shadow-sm'); $('nav .nav-item:first-child').addClass('active'); } }); /* SCROLL SPY */ let sections = document.querySelectorAll('.section-spy'); let links = document.querySelectorAll('.menu-spy a'); let path = window.location.pathname; links.forEach( link => { let href = link.attributes.href.nodeValue; link.parentElement.classList.remove('active'); //console.log(href); if(href === path) { link.parentElement.classList.add('active'); } }); const observer = new IntersectionObserver( (entrances, watcher) => { entrances.forEach( entrance => { if(entrance.isIntersecting || entrance.isVisible) { let id = '#' + entrance.target.id; //history.pushState({}, entrance.target.innerText, id); This adds the hash to URL console.log('ID: ', id); links.forEach( link => { link.parentElement.classList.remove('active'); let hash = link.hash; //console.log(hash); if(hash === id) { link.parentElement.classList.add('active'); } }); } }); }, { root: null, threshold: 0.2, rootMargin: '-80px 0px -180px 0px' }); sections.forEach( section => { observer.observe(section); }); /* SCROLL SPY ENDS*/ /* SELECT2 */ $(".select2").select2({ allowClear: true }); /* MASKS */ $(".mask-amount").mask("#,##0", {reverse: true}); $(".mask-amount-cm").mask("#,##0 cm", {reverse: true}); $(".mask-amount-kg").mask("#,##0 kg", {reverse: true}); $(".mask-money").mask("#,##0.00", {reverse: true}); $(".mask-rfc").mask("SSSA00000AAAA"); $(".mask-moneyws").mask("$#,##0.00", {reverse: true}); $(".mask-date").mask("00/00/0000"); $(".mask-card").mask("0000 0000 0000 0000"); $(".mask-card-expiry").mask("00 / 00"); /*$(".mask-phone").mask("(00) 0000 0000", { onKeyPress: function(cep, e, field, options) { var phone = cep.replace(/\D/g,''); if (phone[0] != 5) { field.mask("(000) 000 0000", options); } } });*/ $(".mask-phone").mask("Z(00) 0000 0000", { translation: { 'Z': { pattern: /[\+]/, optional: true } }, onKeyPress: function(cep, e, field, options) { var phone = cep.replace(/[^0-9\+]+/g,''); if (phone[0] == "+") { if (phone.length == 1) { field.mask("Z00 (000) 000 0000", options); } else if (phone.length >= 2) { if (phone[1] == 1) { field.mask("Z0 (000) 000 0000", options); } else if (phone[1] + "" + phone[2] == 52){ if (phone.length >= 4) { if (phone[3] == 5) { field.mask("Z00 (00) 0000 0000", options); } else { field.mask("Z00 (000) 000 0000", options); } } else { field.mask("Z00 (000) 000 0000", options); } } } } else if (phone.length == 0) { field.mask("Z(00) 0000 0000", options); } else { if (phone[0] == 5) { field.mask("(00) 0000 0000", options); } else { field.mask("(000) 000 0000", options); } } } }); /* AJAX FORMS */ formFunctions(); $("body").on("input", "input[type=range]", function() { let value = $(this).val(); let text = value + "" + $(this).data("text"); console.log(text); $(this).parents(".form-group").find(".range-value").text(text); }); /* Inputs */ $("body").on("input", ".input-autogrow", function() { let input = this; input.style.height = "1.6rem"; input.style.height = input.scrollHeight + "px"; }); /* Inputs */ /* AJAX FORMS */ /* CART SIDEBAR */ cartLoad(); $("#cart-sidebar > .cart-container").click(function(e) { e.stopPropagation(); }); /* Close */ $("#cart-sidebar .btnClose").click(cartCloseClick); $("#cart-sidebar").click(cartCloseClick); /* Open */ $(".btnCartOpen").click(cartOpenClick); /* Update cart */ $("#cart-sidebar .cart-content, #cart-view .cart-content").on("click", ".btnCartUpdateItem", function(e) { e.preventDefault(); var btn = $(this); var btnTxt = btn.html(); var action = btn.data("action"); var productRow = btn.closest(".item"); var qInput = productRow.find(".inQuantity"); var q = qInput.val(); var id = productRow.data("id"); switch (action) { case "sub": q--; break; case "add": q++; break; case "del": q = 0; break; } /* Switch action */ btn.prop('disabled', true).html(uiSpinnerBtn); /*$("#cart-sidebar .cart-loader").addClass("show");*/ $.post("/action/cart", "a=updateitem&id=" + id + "&q=" + q, function(r) { console.log(r); btn.prop('disabled', false).html(btnTxt); if (r.status) { cartLoad(); } else { $.toast({ heading: "Upsss...", text: "No se pudo procesar tu solicitud.", position: 'top-right', loaderBg: '#ff6849', icon: 'error', hideAfter: 3500 }); $("#cart-sidebar .cart-loader").removeClass("show"); } }); return false; }); $("#cart-sidebar .cart-content, #cart-view .cart-content").on("click", ".btnCartRemoveItem", function(e) { e.preventDefault(); var btn = $(this); var btnTxt = btn.html(); var productRow = btn.parent().parent(); var q = 0; var id = productRow.data("id"); btn.prop('disabled', true).html(uiSpinnerBtn); $.post("/action/cart", "a=updateitem&id=" + id + "&q=" + q, function(r) { console.log(r); btn.prop('disabled', false).html(btnTxt); if (r.status) { cartLoad(); } else { $.toast({ heading: "Upsss...", text: "No se pudo procesar tu solicitud.", position: 'top-right', loaderBg: '#ff6849', icon: 'error', hideAfter: 3500 }); } }); return false; }); /* CART SIDEBAR */ /* Affix Resume */ cartResumeAffix(); $(window).resize(cartResumeAffix); /* Gestures */ /* var hammertime = new Hammer(document.body); hammertime.on('swiperight', function(ev) { $(".untochable-menu").addClass("bg-untochable"); $("#mySidenav").addClass("opened"); }); hammertime.on('swipeleft', cartOpen); */ /* ZIPS */ $("input[name=zip]").focusout(eShopZipCode); /* ZIPS */ /* META-DATAS */ $("body").on("change", ".product .metas", function() { let select = $(this), idMeta = select.data("id"), container = select.closest(".product"), btnAddToCart = container.find(".btnToAddCart"); // Update prices var basePrice = btnAddToCart.data("baseprice"); if (basePrice != null) { basePrice = parseFloat(basePrice); $(".metas:checked, .metas option:selected").each(function(i) { let metaInput = $(this); let price = metaInput.data("price"); if (price != null) { price = parseFloat(price); basePrice += price; } }); container.find(".price").text("$" + numberAddCommas(basePrice.toFixed(2))); } btnAddToCart.attr('data-meta-' + idMeta, idMeta + '.::.' + select.val() ); }); $(".product .metas").trigger("change"); /* META-DATAS */ /* Scroll */ winScrolling(); $(window).scroll(winScrolling); /* Scroll */ /* Moduluis */ loadModulus(); /* Moduluis */ /* Products */ $("body").on("click", ".btnProductLike", function(e) { e.preventDefault(); var btn = $(this), liked = btn.data("liked"), iconLiked = btn.data("icon-liked"), iconNotLiked = btn.data("icon-notliked"), id = btn.data("id"); $.post("/act/customer/wishlist", "idProduct=" + id + "&liked=" + liked, function(r) { console.log(r); if (r.status) { $.toast({ heading: r.msg, position: 'top-right', loaderBg: '#ff6849', icon: 'success', hideAfter: 3500 }); } else { $.toast({ heading: "Upsss...", text: r.msg, position: 'top-right', loaderBg: '#ff6849', icon: 'error', hideAfter: 3500 }); } }); if (liked || liked == "1") { btn.data("liked", 0); btn.removeClass("liked"); btn.find("i").removeClass(iconLiked).addClass(iconNotLiked); } else { btn.data("liked", 1); btn.addClass("liked"); btn.find("i").removeClass(iconLiked).addClass(iconLiked); } return false; }); /* Products */ /* BTN DELETE */ $("body").on("click", ".btnDelete", function(e) { e.preventDefault(); var btn = $(this); var btnTxt = btn.html(); var idObj = btn.data("id"); var action = btn.data("action"); var alertTitle = btn.data("at"); var alertMsg = btn.data("am"); var alertBtnOk = btn.data("aok"); var alertBtnNo = btn.data("ano"); Swal.fire({ icon: "warning", title: alertTitle, text: alertMsg, type: "warning", showCancelButton: true, //confirmButtonColor: "#DD6B55", confirmButtonText: alertBtnOk, cancelButtonText: alertBtnNo, closeOnConfirm: true }).then((result) => { if (result.isConfirmed) { btn.prop('disabled', true).html(uiSpinnerBtn); $.post("/act/" + action, "id=" + idObj, function(r) { console.log(r); btn.prop('disabled', false).html(btnTxt); if (r.status) { $.toast({ heading: r.msg, position: 'top-right', loaderBg: '#ff6849', icon: 'success', hideAfter: 3500 }); if (r.js !== undefined) { eval(r.js); } } else { $.toast({ heading: r.msg, position: 'top-right', loaderBg: '#ff6849', icon: 'error', hideAfter: 3500 }); } }).fail(function(r) { $.toast({ heading: "Upsss...", text: "Something happened, please try again later.", position: 'top-right', loaderBg: '#ff6849', icon: 'error', hideAfter: 3500 }); console.log(r); btn.prop('disabled', false).html(btnTxt); }); } }); return false; }); /* BTN DELETE */ /* SHIPMENTS */ $("body").on("change", "[name=shippingAddress]", function(e) { e.preventDefault(); $(".btnCheckoutOrder").prop("disabled", true); let input = $("[name=shippingAddress]:checked"); let vShipmentOpts = $(".shipment-options"), vShipmentOptsList = vShipmentOpts.find(".options"); vShipmentOptsLoader = vShipmentOpts.find(".loader"); vShipmentOptsMsg = vShipmentOpts.find(".text-danger"); if (vShipmentOpts.length > 0) { vShipmentOptsLoader.removeClass("d-none"); vShipmentOptsLoader.find("span").html(uiSpinnerBtn); vShipmentOptsMsg.empty().addClass("d-none"); vShipmentOptsList.empty().addClass("d-none"); let params = "p=" + "/shipping/" + idCart + "/quote" + "&idUser=" + idUser + "&destinationId=" + input.val(); $.post("/action/post", params, function(r) { vShipmentOptsList.empty(); vShipmentOptsLoader.addClass("d-none"); if (r.status) { $(".btnCheckoutOrder").prop("disabled", false); vShipmentOptsList.removeClass("d-none"); let counter = 0; r.shipments.forEach(item => { counter++; let html = '