114 lines
3.4 KiB
JavaScript
114 lines
3.4 KiB
JavaScript
define([
|
|
'jquery'
|
|
], function ($) {
|
|
'use strict';
|
|
|
|
return function (config, element) {
|
|
var $navigation = $(element),
|
|
mobileQuery = window.matchMedia(config.mediaBreakpoint || '(max-width: 992px)'),
|
|
triggerSelector = '.esun-megamenu-trigger > .level-top';
|
|
|
|
function resetMenus() {
|
|
$navigation
|
|
.find('.esun-megamenu-trigger')
|
|
.removeClass('is-open')
|
|
.find('> .esun-megamenu-wrapper')
|
|
.css('display', '')
|
|
.end()
|
|
.find('> .level-top')
|
|
.removeClass('ui-state-active')
|
|
.attr('aria-expanded', 'false')
|
|
.end()
|
|
.find('> .esun-megamenu-toggle')
|
|
.attr('aria-expanded', 'false');
|
|
}
|
|
|
|
function handleNavigationClick(event) {
|
|
var $target = $(event.target),
|
|
$item = $target.closest('.esun-megamenu-trigger'),
|
|
$contentLink = $target.closest('a.esun-product-link, a.esun-view-all'),
|
|
$trigger,
|
|
$linkedToggle,
|
|
willOpen;
|
|
|
|
if (mobileQuery.matches && $contentLink.length) {
|
|
event.preventDefault();
|
|
event.stopImmediatePropagation();
|
|
window.location.assign($contentLink.get(0).href);
|
|
|
|
return;
|
|
}
|
|
|
|
if (!mobileQuery.matches || !$item.length ||
|
|
$target.closest('.esun-megamenu-wrapper').length) {
|
|
return;
|
|
}
|
|
|
|
$linkedToggle = $target.closest('.esun-megamenu-toggle');
|
|
|
|
if ($item.hasClass('esun-linked-megamenu-trigger') && !$linkedToggle.length) {
|
|
return;
|
|
}
|
|
|
|
$trigger = $linkedToggle.length
|
|
? $linkedToggle
|
|
: $item.find('> .level-top');
|
|
|
|
if (!$trigger.length) {
|
|
return;
|
|
}
|
|
|
|
event.preventDefault();
|
|
event.stopImmediatePropagation();
|
|
|
|
willOpen = !$item.hasClass('is-open');
|
|
resetMenus();
|
|
|
|
if (willOpen) {
|
|
$item.addClass('is-open');
|
|
$trigger.attr('aria-expanded', 'true');
|
|
}
|
|
}
|
|
|
|
$navigation
|
|
.find(triggerSelector)
|
|
.attr({
|
|
'aria-expanded': 'false'
|
|
});
|
|
|
|
$navigation
|
|
.find('.esun-megamenu-toggle')
|
|
.attr({
|
|
'aria-expanded': 'false'
|
|
});
|
|
|
|
$navigation
|
|
.find('.esun-megamenu-wrapper')
|
|
.on('click.esunMobileMegaMenu', function (event) {
|
|
if (mobileQuery.matches) {
|
|
event.stopPropagation();
|
|
}
|
|
});
|
|
|
|
$(document)
|
|
.off('click.esunMobileMegaMenuReset', '[data-action="toggle-nav"]')
|
|
.on('click.esunMobileMegaMenuReset', '[data-action="toggle-nav"]', resetMenus);
|
|
|
|
if (typeof mobileQuery.addEventListener === 'function') {
|
|
mobileQuery.addEventListener('change', function (event) {
|
|
if (!event.matches) {
|
|
resetMenus();
|
|
}
|
|
});
|
|
} else {
|
|
mobileQuery.addListener(function (event) {
|
|
if (!event.matches) {
|
|
resetMenus();
|
|
}
|
|
});
|
|
}
|
|
|
|
element.addEventListener('click', handleNavigationClick, true);
|
|
};
|
|
});
|