"use strict"; ; (function ($) { "use strict"; $.fn.CalypsoMenu = function (params) { // Default options var options = $.extend({ accountBtn: '.my-account-btn', accountBox: '.my-account-container', menuNav: '.menu-nav', menuAllNav: '.menu-nav-all', menuCategories: '.menu-categories-container', menuDesk: '.menu-desk-container', categoryAllBtn: '.menu-item.all-categories', handleBtnCategories: '.btn-handle-categories', tabletSize: 770 }, params); // Plugin variables var $self = this; var toggleMenu = false; var activeItem = null; var loadedCategories = false; var toggleAccountMenu = false; // Put your DOM elements here var elements = { $accountBtn: $(options.accountBtn), $accountBox: $(options.accountBox), $boxNavMenu: $(options.menuNav), $boxNavMenuAll: $(options.menuAllNav), $all_category_container: $(options.menuCategories), $menu_desk: $(options.menuDesk), $all_category_btn: $(options.categoryAllBtn), $btn_handle_categories: $(options.handleBtnCategories), $all_categories: [{ id: 1, name: 'Tapicería', url: '/tapiceria', slug: 'tapiceria', subcategories: [].filter(subcategory => subcategory.id !== 3), icon: 'ca-icon-Tapiceria' }, { id: 23, name: 'Pisos, alfombras y gramas ', slug: 'pisos', url: '/pisos-alfombras-y-gramas', subcategories: [], icon: 'ca-icon-Pisos' }, { id: 50, name: 'Empaque, agro y construcción', slug: 'empaque', url: '/empaque-agro-y-construccion', subcategories: [], icon: 'ca-icon-Empaque' }, { id: 95, name: 'Lonas y sintéticos', slug: 'lonas', url: '/lonas-y-sinteticos', subcategories: [], icon: 'ca-icon-Lonas' }, { id: 11, name: 'Insumos, calzado y marroquinería', slug: 'calzado', url: '/insumos-calzado-y-marroquineria', subcategories: [], icon: 'ca-icon-Calzado' }, { id: 12, name: 'Hogar', slug: 'hogar', url: '/busca/?fq=H:165', subcategories: [], icon: 'ca-icon-Hogar' }, { id: 13, name: 'Transporte', slug: 'transporte', url: '/busca/?fq=H:199', subcategories: [], icon: 'ca-icon-Transporte' }, { id: 14, name: 'Trajes de dotación', slug: 'trajes', url: '/busca/?fq=H:200', subcategories: [], icon: 'ca-icon-Dotacion' }, { id: 15, name: 'Insumos emprendedores', slug: 'insumos', url: '/busca/?fq=H:201', subcategories: [], icon: 'ca-icon-Emprendedores' }, /**{ id: 2001, name: 'BLACK DAYS', slug: 'blackdays', url: '/ofertas/black', subcategories: [], icon: 'ca-icon-blackdays' },**/ { id: 1001, name: 'Liquidación', slug: 'liquidacion', url: '/busca/?fq=H:399', subcategories: [], icon: 'ca-icon-liquidation' }, { id: 1002, name: 'Iniciar sesión', slug: 'login', url: '/login', subcategories: [], icon: 'ca-icon-login' }, { id: 1003, name: 'Mis pedidos', slug: 'pedidos', url: '/account#/orders', subcategories: [], icon: 'ca-icon-pedidos' }, { id: 1004, name: 'Mis favoritos', slug: 'fav', url: '/wishlist', subcategories: [], icon: 'ca-icon-fav' }, { id: 1005, name: 'Mi carrito', slug: 'cart', url: '/checkout#/cart', subcategories: [], icon: 'ca-icon-cart' }, { id: 1006, name: 'Paga tu factura', slug: 'factura', url: 'https://checkout.wompi.co/l/ImI0Dh', subcategories: [], icon: 'ca-icon-factura' }, { id: 1007, name: 'Trabaja con nosotros', slug: 'trabaja', url: 'https://jobs.tiendascalypso.com/', subcategories: [], icon: 'ca-icon-trabaja' } , { id: 1000, name: 'Blog', slug: 'blog', url: 'https://blog.tiendascalypso.com/', subcategories: [], icon: 'ca-icon-blog' }] }; var $grid = $('.category-menu').isotope({ // main isotope options itemSelector: '.category-content', transitionDuration: 0, masonry: { columnWidth: 100, horizontalOrder: true } }); var methods = { init: function init() { $(document).on('click', '.view-all-button .close-menu-desktop', function () { $('.ca-icon-header-menu-close').click(); $('.menu-desk-container').css('display', 'none') }) events.resizeWindow(); events.clickBtnAllCategory(); events.closeMobileSubcategories(); methods.setCategoryMenuDeskSize(); if (window.innerWidth > options.tabletSize) { events.mouseUp(); events.mouseEnterMenu(); events.mouseLeaveMenu(); } else { events.closeMobileMenuEvent(); events.showMyAccountMobile(elements.$accountBtn); events.hideMyAccountMobile('.overlay-mobile-account'); } if (!loadedCategories) { methods.addAllCategories(); methods.appendCustomItems(); } }, appendCustomItems: function () { if ($('.menu-nav-all .proyectos-especiales').length === 0) { const htmlProyectos = `
  • Proyectos especiales
  • `; $('.menu-nav-all').append(htmlProyectos); } } , setCategoryMenuDeskSize: function setCategoryMenuDeskSize() { if (window.innerWidth > options.tabletSize) { $(elements.$all_category_container).css({ "top": elements.$all_category_btn.innerHeight() + 2, "left": 0 }); $(elements.$menu_desk).css({ "top": elements.$all_category_btn.innerHeight() + 2, "left": '50%', "transform": 'translateX(-50%)' }); } else { $(elements.$all_category_container).css({ "top": '', "width": '' }); $(elements.$menu_desk).css({ "top": '', "left": '' }); } }, setCategories: function setCategories(key) { if (key != null) { HeaderViewModel.departamentImage(departaments[key].image); HeaderViewModel.departamentUrl(departaments[key].url); departaments[key].categories.forEach(function (c) { HeaderViewModel.addCategory(new Category(c.id, c.name, c.url, c.subcategories, c.icono, c.icon)); }); } }, // add random category and subcategory addAllCategories: function addAllCategories() { elements.$all_categories.forEach(function (category) { HeaderViewModel.addAllCategory(new Category(category.id, category.name, category.url, category.subcategories, category.icon, category.slug)); }); loadedCategories = true; events.showCategories(); }, setMenuCategories: function setMenuCategories(e, isMobile, elementse) { HeaderViewModel.resetCategories(); var menuTab = !isMobile ? e.target : e.parentElement; var slug = elementse ? elementse.find('.item-menu-control').attr('category-slug') : menuTab.getAttribute('category-slug'); if (slug == null) { console.log("$(menuTab).parents('.hovered-menu-item').length", $(menuTab).parents('.hovered-menu-item').length); if ($(menuTab).parents('.hovered-menu-item').length > 0) { menuTab = $(menuTab).parent()[0]; } slug = menuTab.getAttribute('category-slug'); } // Comprobar si el slug es igual a "liquidacion" y añadir la clase al
  • console.log('slugslugslugslug', slug) if (slug === "liquidacion") { $(menuTab).closest('li').addClass(slug); // Añadimos la clase 'liquidacion' al
  • } if (slug === "blackdays") { $(menuTab).closest('li').addClass(slug); } methods.setCategories(slug); if (!isMobile) { activeItem = menuTab; $('.item-menu-control').removeClass('active'); $(activeItem).addClass('active'); elements.$menu_desk.show(); if ($(menuTab).parent().hasClass("all-menu-item")) { elements.$menu_desk.css({ "left": elements.$all_category_container.innerWidth(), "transform": "none" }); } else { elements.$menu_desk.css({ "left": '50%', "transform": 'translateX(-50%)' }); } $grid.isotope('reloadItems').isotope({ layoutMode: 'masonry' }); $('.category-title-mobile').html(departaments[slug].name); } else { $('.category-title-mobile').html(departaments[slug].name); $(".subcategory-content").collapse({ open: function open() { this.slideDown(100); setTimeout(function () { window.psMobile.element.scrollTop += 1; }, 100); window.psMobile.update(); }, close: function close() { this.slideUp(100); window.psMobile.update(); } }); } }, showMenu: function showMenu(item, isMobile) { $('.item-menu-control[category-slug="liquidacion"]').parent().addClass('liquidacion') $('.item-menu-control[category-slug="blackdays"]').parent().addClass('blackdays') if (!isMobile) { $(item).on('mouseover', '.hovered-menu-item', function (e) { console.log('event', e); methods.setMenuCategories(e, undefined, $(this)); }); } else { $(item).click(function (e) { e.preventDefault() methods.setMenuCategories(e.currentTarget, isMobile); gsap.to('.menu-mobile-container-subcategories', { duration: .3, x: '0%' }); $('.subcategory-content .container-icon-text-category .link-category').each(function () { let href = $(this).attr('href') let titulo = $(this).html() $(this).parents('.subcategory-content').find('.list-subcategory').append('Ver todo ' + titulo + '') }) }); } }, showMyAccout: function showMyAccout(item) { $('.my-account-container').appendTo($('.my-account-btn')).css({ transform: '' }); $(item).on('mouseenter', function (e) { if (HeaderViewModel.order().loggedIn) { $(e.target).addClass('active'); elements.$accountBox.show(); } }); }, closeMobileMenu: function closeMobileMenu() { if (window.innerWidth <= options.tabletSize) { gsap.to($('.note-top-header'), { duration: .3, y: '0%' }); gsap.to($('.overflow-menu-mobile'), { duration: .3, opacity: 0 }); gsap.to(elements.$all_category_container, { duration: .3, x: '-100%' }); setTimeout(function () { $('.overflow-menu-mobile').css({ zIndex: -1, pointerEvents: 'none' }); }, 400); $(document.body).css({ overflow: "" }); } }, openMobileMenu: function openMobileMenu() { if (window.innerWidth <= options.tabletSize) { $('.overflow-menu-mobile').css({ zIndex: 21, pointerEvents: 'all' }); gsap.to($('.note-top-header'), { duration: .3, y: '-100%' }); gsap.to($('.overflow-menu-mobile'), { duration: .3, opacity: 1 }); $(document.body).css({ overflow: "hidden" }); } } }; // Plugin events var events = { resizeWindow: function resizeWindow() { window.onresize = function () { methods.init(); }; }, closeMobileSubcategories: function closeMobileSubcategories() { $('.close-mobile-subcategories').click(function (e) { gsap.to('.menu-mobile-container-subcategories', { duration: .3, x: '-100%' }); }); }, mouseUp: function mouseUp() { window.onmouseup = function (e) { if (!elements.$all_category_container.is(e.target) && elements.$all_category_container.has(e.target).length === 0) { if (toggleMenu && !elements.$menu_desk.is(e.target) && elements.$menu_desk.has(e.target).length === 0) { gsap.to(elements.$all_category_container, { duration: .3, x: '-100%' }); toggleMenu = false; } } }; }, clickBtnAllCategory: function clickBtnAllCategory() { $(elements.$btn_handle_categories).click(function () { var style = window.getComputedStyle(elements.$all_category_container[0]); var matrix = new WebKitCSSMatrix(style.webkitTransform); if (matrix.m41 !== 0) { methods.openMobileMenu(); gsap.to(elements.$all_category_container, { duration: .3, x: '0%' }); toggleMenu = true; $(this).find(".menu-icon").removeClass("ca-icon-header-menu"); $(this).find(".menu-icon").addClass("ca-icon-header-menu-close"); } else { methods.closeMobileMenu(); gsap.to(elements.$all_category_container, { duration: .3, x: '-100%' }); toggleMenu = false; $(this).find(".menu-icon").removeClass("ca-icon-header-menu-close"); $(this).find(".menu-icon").addClass("ca-icon-header-menu"); } }); }, mouseEnterMenu: function mouseEnterMenu() { methods.showMenu(elements.$boxNavMenu); methods.showMenu(elements.$boxNavMenuAll); methods.showMyAccout(elements.$accountBtn); }, showMyAccountMobile: function showMyAccountMobile(item) { $('.my-account-container').appendTo(document.body); $(item).on('click', function (e) { if (HeaderViewModel.order().loggedIn && !toggleAccountMenu) { gsap.to('.my-account-container', { duration: .3, y: '-60px' }); $('.overlay-mobile-account').css({ zIndex: 21 }); gsap.to($('.overlay-mobile-account'), { duration: .3, opacity: 1 }); toggleAccountMenu = true; } }); }, hideMyAccountMobile: function hideMyAccountMobile(item) { $(item).on('click', function (e) { if (HeaderViewModel.order().loggedIn) { gsap.to('.my-account-container', { duration: .3, y: '100%' }); gsap.to($('.overlay-mobile-account'), { duration: .3, opacity: 0 }); setTimeout(function () { $('.overlay-mobile-account').css({ zIndex: -1 }); }, 400); toggleAccountMenu = false; } }); }, showCategories: function showCategories() { methods.showMenu($('.show-more'), true); }, mouseLeaveMenu: function mouseLeaveMenu() { $(elements.$boxNavMenu).on('mouseleave', '.hovered-menu-item', function (e) { if (e.relatedTarget !== elements.$menu_desk[0]) { $(e.target).removeClass('active'); //elements.$menu_desk.hide(); } }); $(elements.$boxNavMenu).on('mouseenter', '.ca-icon-header-menu-close', function (e) { elements.$menu_desk.hide(); }); $(elements.$boxNavMenu).on('mouseleave', function (e) { elements.$menu_desk.hide(); }); elements.$menu_desk.on('mouseleave', function () { $(activeItem).removeClass('active'); elements.$menu_desk.hide(); }); elements.$accountBox.on('mouseleave', function (e) { elements.$accountBtn.removeClass('active'); elements.$accountBox.hide(); }); }, closeMobileMenuEvent: function closeMobileMenuEvent() { $('.close-menu-mobile').click(function () { methods.closeMobileMenu(); }); } }; methods.init(); }; })(jQuery);