![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/cartforge.co/pub/static/frontend/Magento/luma/en_US/js/ |
/** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ /** * @deprecated * @see lib/web/mage/menu.js */ define([ 'jquery', 'matchMedia', 'mage/template', 'mage/dropdowns', 'mage/terms' ], function ($, mediaCheck, mageTemplate) { 'use strict'; $.widget('mage.navigationMenu', { options: { itemsContainer: '> ul', topLevel: 'li.level0', topLevelSubmenu: '> .submenu', topLevelHoverClass: 'hover', expandedTopLevel: '.more', hoverInTimeout: 300, hoverOutTimeout: 500, submenuAnimationSpeed: 200, collapsable: true, collapsableDropdownTemplate: '<script type="text/x-magento-template">' + '<li class="level0 level-top more parent">' + '<div class="submenu">' + '<ul><%= elems %></ul>' + '</div>' + '</li>' + '</script>' }, /** @inheritdoc */ _create: function () { this.itemsContainer = $(this.options.itemsContainer, this.element); this.topLevel = $(this.options.topLevel, this.element); this.topLevelSubmenu = $(this.options.topLevelSubmenu, this.topLevel); this._bind(); }, /** * @private */ _init: function () { if (this.options.collapsable) { setTimeout($.proxy(function () { this._checkToCollapseOrExpand(); }, this), 100); } }, /** * @private */ _bind: function () { this._on({ /** * @param {jQuery.Event} e */ 'mouseenter > ul > li.level0': function (e) { if (!this.entered) { // fix IE bug with 'mouseenter' event this.timeoutId && clearTimeout(this.timeoutId); this.timeoutId = setTimeout($.proxy(function () { this._openSubmenu(e); }, this), this.options.hoverInTimeout); this.entered = true; } }, /** * @param {jQuery.Event} e */ 'mouseleave > ul > li.level0': function (e) { this.entered = null; this.timeoutId && clearTimeout(this.timeoutId); this.timeoutId = setTimeout($.proxy(function () { this._closeSubmenu(e.currentTarget); }, this), this.options.hoverOutTimeout); }, /** * @param {jQuert.Event} e */ 'click': function (e) { e.stopPropagation(); } }); $(document) .on('click.hideMenu', $.proxy(function () { var isOpened = this.topLevel.filter(function () { return $(this).data('opened'); }); if (isOpened) { this._closeSubmenu(null, false); } }, this)); $(window) .on('resize', $.proxy(function () { this.timeoutOnResize && clearTimeout(this.timeoutOnResize); this.timeoutOnResize = setTimeout($.proxy(function () { if (this.options.collapsable) { if ($(this.options.expandedTopLevel, this.element).length) { this._expandMenu(); } this._checkToCollapseOrExpand(); } }, this), 300); }, this)); }, /** * @param {jQuery.Event} e * @private */ _openSubmenu: function (e) { var menuItem = e.currentTarget; if (!$(menuItem).data('opened')) { this._closeSubmenu(menuItem, true, true); $(this.options.topLevelSubmenu, menuItem) .slideDown(this.options.submenuAnimationSpeed, $.proxy(function () { $(menuItem).addClass(this.options.topLevelHoverClass); $(menuItem).data('opened', true); }, this)); } else if ($(e.target).closest(this.options.topLevel)) { $(e.target) .addClass(this.options.topLevelHoverClass) .siblings(this.options.topLevel) .removeClass(this.options.topLevelHoverClass); } }, /** * @param {*} menuItem * @param {*} excludeCurrent * @param {*} fast * @private */ _closeSubmenu: function (menuItem, excludeCurrent, fast) { var topLevel = $(this.options.topLevel, this.element), activeSubmenu = $(this.options.topLevelSubmenu, menuItem || null); $(this.options.topLevelSubmenu, topLevel) .filter(function () { return excludeCurrent ? $(this).not(activeSubmenu) : true; }) .slideUp(fast ? 0 : this.options.submenuAnimationSpeed); topLevel .removeClass(this.options.topLevelHoverClass) .data('opened', false); }, /** * @private */ _checkToCollapseOrExpand: function () { var navWidth, totalWidth, startCollapseIndex; if ($('html').hasClass('lt-640') || $('html').hasClass('w-640')) { return; } navWidth = this.itemsContainer.width(); totalWidth = 0; startCollapseIndex = 0; $.each($(this.options.topLevel, this.element), function (index, item) { totalWidth += $(item).outerWidth(true); if (totalWidth > navWidth && !startCollapseIndex) { startCollapseIndex = index - 2; } }); this[startCollapseIndex ? '_collapseMenu' : '_expandMenu'](startCollapseIndex); }, /** * @param {*} startCollapseIndex * @private */ _collapseMenu: function (startCollapseIndex) { this.elemsToCollapse = this.topLevel.filter(function (index) { return index > startCollapseIndex; }); this.elemsToCollapseClone = $('<div></div>').append(this.elemsToCollapse.clone()).html(); this.collapsableDropdown = $( mageTemplate( this.options.collapsableDropdownTemplate, { elems: this.elemsToCollapseClone } ) ); this.itemsContainer.append(this.collapsableDropdown); this.elemsToCollapse.detach(); }, /** * @private */ _expandMenu: function () { this.elemsToCollapse && this.elemsToCollapse.appendTo(this.itemsContainer); this.collapsableDropdown && this.collapsableDropdown.remove(); }, /** * @private */ _destroy: function () { this._expandMenu(); } }); /* * Provides "Continium" effect for submenu * */ $.widget('mage.navigationMenu', $.mage.navigationMenu, { options: { parentLevel: '> ul > li.level0', submenuAnimationSpeed: 150, submenuContiniumEffect: false }, /** * @private */ _init: function () { this._super(); this._applySubmenuStyles(); }, /** * @private */ _applySubmenuStyles: function () { $(this.options.topLevelSubmenu, $(this.options.topLevel, this.element)) .removeAttr('style'); $(this.options.topLevelSubmenu, $(this.options.parentLevel, this.element)) .css({ display: 'block', height: 0, overflow: 'hidden' }); }, /** * @param {jQuery.Event} e * @private */ _openSubmenu: function (e) { var menuItem = e.currentTarget, submenu = $(this.options.topLevelSubmenu, menuItem), openedItems = $(this.options.topLevel, this.element).filter(function () { return $(this).data('opened'); }); if (submenu.length) { this.heightToAnimate = $(this.options.itemsContainer, submenu).outerHeight(true); if (openedItems.length) { this._closeSubmenu(menuItem, true, this.heightToAnimate, $.proxy(function () { submenu.css({ height: 'auto' }); $(menuItem) .addClass(this.options.topLevelHoverClass); }, this), e); } else { submenu.animate({ height: this.heightToAnimate }, this.options.submenuAnimationSpeed, $.proxy(function () { $(menuItem) .addClass(this.options.topLevelHoverClass); }, this)); } $(menuItem) .data('opened', true); } else { this._closeSubmenu(menuItem); } }, /** * @param {*} menuItem * @param {*} excludeCurrent * @param {*} heightToAnimate * @param {Function} callback * @private */ _closeSubmenu: function (menuItem, excludeCurrent, heightToAnimate, callback) { var topLevel = $(this.options.topLevel, this.itemsContainer), prevOpenedItem, prevOpenedSubmenu; if (!excludeCurrent) { $(this.options.topLevelSubmenu, $(this.options.parentLevel, this.element)) .animate({ height: 0 }); topLevel .data('opened', false) .removeClass(this.options.topLevelHoverClass); } else { prevOpenedItem = topLevel.filter(function () { return $(this).data('opened'); }); prevOpenedSubmenu = $(this.options.topLevelSubmenu, prevOpenedItem); prevOpenedSubmenu.animate({ height: heightToAnimate }, this.options.submenuAnimationSpeed, 'linear', function () { $(this).css({ height: 0 }); callback && callback(); }); prevOpenedItem .data('opened', false) .removeClass(this.options.topLevelHoverClass); } }, /** * @private */ _collapseMenu: function () { this._superApply(arguments); this._applySubmenuStyles(); } }); // Responsive menu $.widget('mage.navigationMenu', $.mage.navigationMenu, { options: { responsive: false, origNavPlaceholder: '.page-header', mainContainer: 'body', pageWrapper: '.page-wrapper', openedMenuClass: 'opened', toggleActionPlaceholder: '.block-search', itemWithSubmenu: 'li.parent', titleWithSubmenu: 'li.parent > a', submenu: 'li.parent > .submenu', toggleActionTemplate: '<script type="text/x-magento-template">' + '<span data-action="toggle-nav" class="action toggle nav">Toggle Nav</span>' + '</script>', submenuActionsTemplate: '<script type="text/x-magento-template">' + '<li class="action all">' + '<a href="<%= categoryURL %>"><span>All <%= category %></span></a>' + '</li>' + '</script>', navigationSectionsWrapperTemplate: '<script type="text/x-magento-template">' + '<dl class="navigation-tabs" data-sections="tabs">' + '</dl>' + '</script>', navigationItemWrapperTemplate: '<script type="text/x-magento-template">' + '<dt class="item title <% if (active) { %>active<% } %>" data-section="title">' + '<a class="switch" data-toggle="switch" href="#TODO"><%= title %></a>' + '</dt>' + '<dd class="item content <% if (active) { %>active<%}%>" data-section="content">' + '</dd>' + '</script>' }, /** * @private */ _init: function () { this._super(); this.mainContainer = $(this.options.mainContainer); this.pageWrapper = $(this.options.pageWrapper); this.toggleAction = $(mageTemplate(this.options.toggleActionTemplate, {})); if (this.options.responsive) { mediaCheck({ media: '(min-width: 768px)', entry: $.proxy(function () { this._toggleDesktopMode(); }, this), exit: $.proxy(function () { this._toggleMobileMode(); }, this) }); } }, /** * @private */ _bind: function () { this._super(); this._bindDocumentEvents(); }, /** * @private */ _bindDocumentEvents: function () { if (!this.eventsBound) { $(document) .on('click.toggleMenu', '.action.toggle.nav', $.proxy(function (e) { if ($(this.element).data('opened')) { this._hideMenu(); } else { this._showMenu(); } e.stopPropagation(); this.mobileNav.scrollTop(0); this._fixedBackLink(); }, this)) .on('click.hideMenu', this.options.pageWrapper, $.proxy(function () { if ($(this.element).data('opened')) { this._hideMenu(); this.mobileNav.scrollTop(0); this._fixedBackLink(); } }, this)) .on('click.showSubmenu', this.options.titleWithSubmenu, $.proxy(function (e) { this._showSubmenu(e); e.preventDefault(); this.mobileNav.scrollTop(0); this._fixedBackLink(); }, this)) .on('click.hideSubmenu', '.action.back', $.proxy(function (e) { this._hideSubmenu(e); this.mobileNav.scrollTop(0); this._fixedBackLink(); }, this)); this.eventsBound = true; } }, /** * @private */ _showMenu: function () { $(this.element).data('opened', true); this.mainContainer.add('html').addClass(this.options.openedMenuClass); }, /** * @private */ _hideMenu: function () { $(this.element).data('opened', false); this.mainContainer.add('html').removeClass(this.options.openedMenuClass); }, /** * @param {jQuery.Event} e * @private */ _showSubmenu: function (e) { var submenu; $(e.currentTarget).addClass('action back'); submenu = $(e.currentTarget).siblings('.submenu'); submenu.addClass('opened'); }, /** * @param {jQuery.Event} e * @private */ _hideSubmenu: function (e) { var submenuSelector = '.submenu', submenu = $(e.currentTarget).next(submenuSelector); $(e.currentTarget).removeClass('action back'); submenu.removeClass('opened'); }, /** * @private */ _renderSubmenuActions: function () { $.each( $(this.options.itemWithSubmenu), $.proxy(function (index, item) { var actions = $(mageTemplate( this.options.submenuActionsTemplate, { category: $('> a > span', item).text(), categoryURL: $('> a', item).attr('href') } )), submenu = $('> .submenu', item), items = $('> ul', submenu); items.prepend(actions); }, this) ); }, /** * @private */ _toggleMobileMode: function () { this._expandMenu(); $(this.options.topLevelSubmenu, $(this.options.topLevel, this.element)) .removeAttr('style'); this.toggleAction.insertBefore(this.options.toggleActionPlaceholder); this.mobileNav = $(this.element).detach().clone(); this.mainContainer.prepend(this.mobileNav); this.mobileNav.find('> ul').addClass('nav'); this._insertExtraItems(); this._wrapItemsInSections(); this.mobileNav.scroll($.proxy(function () { this._fixedBackLink(); }, this)); this._renderSubmenuActions(); this._bindDocumentEvents(); }, /** * @private */ _toggleDesktopMode: function () { this.mobileNav && this.mobileNav.remove(); this.toggleAction.detach(); $(this.element).insertAfter(this.options.origNavPlaceholder); $(document) .off('click.toggleMenu', '.action.toggle.nav') .off('click.hideMenu', this.options.pageWrapper) .off('click.showSubmenu', this.options.titleWithSubmenu) .off('click.hideSubmenu', '.action.back'); this.eventsBound = false; this._applySubmenuStyles(); }, /** * @private */ _insertExtraItems: function () { var settings, footerSettings, account; if ($('.header.panel .switcher').length) { settings = $('.header.panel .switcher') .clone() .addClass('settings'); this.mobileNav.prepend(settings); } if ($('.footer .switcher').length) { footerSettings = $('.footer .switcher') .clone() .addClass('settings'); this.mobileNav.prepend(footerSettings); } if ($('.header.panel .header.links li').length) { account = $('.header.panel > .header.links') .clone() .addClass('account'); this.mobileNav.prepend(account); } }, /** * @private */ _wrapItemsInSections: function () { var account = $('> .account', this.mobileNav), settings = $('> .settings', this.mobileNav), nav = $('> .nav', this.mobileNav), navigationSectionsWrapper = $(mageTemplate(this.options.navigationSectionsWrapperTemplate, {})), navigationItemWrapper; this.mobileNav.append(navigationSectionsWrapper); if (nav.length) { navigationItemWrapper = $(mageTemplate(this.options.navigationItemWrapperTemplate, { title: 'Menu' })); navigationSectionsWrapper.append(navigationItemWrapper); navigationItemWrapper.eq(1).append(nav); } if (account.length) { navigationItemWrapper = $(mageTemplate(this.options.navigationItemWrapperTemplate, { title: 'Account' })); navigationSectionsWrapper.append(navigationItemWrapper); navigationItemWrapper.eq(1).append(account); } if (settings.length) { navigationItemWrapper = $( mageTemplate(this.options.navigationItemWrapperTemplate, { title: 'Settings' }) ); navigationSectionsWrapper.append(navigationItemWrapper); navigationItemWrapper.eq(1).append(settings); } navigationSectionsWrapper.addClass( 'navigation-tabs-' + navigationSectionsWrapper.find('[data-section="title"]').length ); navigationSectionsWrapper.terms(); }, /** * @private */ _fixedBackLink: function () { var linksBack = this.mobileNav.find('.submenu .action.back'), linkBack = this.mobileNav.find('.submenu.opened > ul > .action.back').last(), subMenu, navOffset, linkBackHeight; linksBack.removeClass('fixed'); if (linkBack.length) { subMenu = linkBack.parent(); navOffset = this.mobileNav.find('.nav').position().top; linkBackHeight = linkBack.height(); if (navOffset <= 0) { linkBack.addClass('fixed'); subMenu.css({ paddingTop: linkBackHeight }); } else { linkBack.removeClass('fixed'); subMenu.css({ paddingTop: 0 }); } } } }); return $.mage.navigationMenu; });