@@ -39599,54 +39599,70 @@ jQuery.fn.DataTable.defaults.aLengthMenu = [[10, 20, 50, -1], [10, 20, 50, "All"
3959939599
3960039600 // Menu Functionality
3960139601 var $menu = $('#menu');
39602- var $menuSubVisible = [];
39603- $menu.find('li').each(function () {
39604- var $menuItem = $(this);
39605- var $subMenu = $menuItem.children('ul').first();
39606- if ($subMenu.length > 0) {
39607- $menuItem.mouseover(function () {
39608- menuShow($menuItem, $subMenu);
39609- }).mouseout(function () {
39610- menuHide($menuItem, $subMenu);
39611- }).addClass('hasSubmenu');
39612-
39613- // Touch-enabled browser
39614- if (Modernizr.touch) {
39615- $menuItem.on('touchstart', function (e) {
39616- // Already Open - allow 'click'
39617- for (var i = 0; i < $menuSubVisible.length; i++)
39618- if ($menuSubVisible[0] === $subMenu)
39619- return;
39620-
39621- // Show
39622- menuShow($menuItem, $subMenu);
39623- $menuSubVisible.push($subMenu);
39624- $(document).on('click', menuTouchHide)
39625- e.preventDefault();
39626- });
39627- }
39628- };
39629- });
39630- function menuTouchHide() {
39631- while ($menuSubVisible.length > 0) {
39632- var $subMenu = $menuSubVisible.pop();
39633- $subMenu.hide();
39634- }
39635- }
39636- function menuShow($menuItem, $subMenu) {
39637- var timeoutToken = $menuItem.data('menuTimeoutToken');
39638- if (timeoutToken)
39639- window.clearTimeout(timeoutToken);
39640- if (!$subMenu.is(':visible'))
39602+ var $menuItems = $menu.find('li');
39603+ var $menuItemParents = $menuItems.filter('.hasSubMenu');
39604+ var $menuSubMenus = $menuItems.filter('.subMenu');
39605+ var menuAllowTouchNavigation = null;
39606+
39607+ $menuItemParents.each(function () {
39608+ var $parent = $(this);
39609+ var $subMenu = $parent.children('ul.subMenu');
39610+ $parent.data('menuSubMenu', $subMenu);
39611+ }).mouseover(function () {
39612+ var $parent = $(this);
39613+ var $subMenu = $parent.data('menuSubMenu');
39614+ var hideToken = $parent.data('menuHideToken');
39615+ if (hideToken)
39616+ window.clearTimeout(hideToken);
39617+ if (!$subMenu.is(':visible')) {
3964139618 $subMenu.show();
39642- }
39643- function menuHide($menuItem, $subMenu) {
39644- var timeoutToken = subMenuHideToken = window.setTimeout(function () {
39619+ if (menuAllowTouchNavigation !== null)
39620+ menuTouchPreventNavigation();
39621+ }
39622+ }).mouseout(function () {
39623+ var $parent = $(this);
39624+ var $subMenu = $parent.data('menuSubMenu');
39625+ var hideToken = window.setTimeout(function () {
3964539626 $subMenu.hide();
3964639627 }, 250);
39647- $menuItem.data('menuTimeoutToken', timeoutToken);
39628+ $parent.data('menuHideToken', hideToken);
39629+ });
39630+
39631+ if (Modernizr.touch) {
39632+ menuAllowTouchNavigation = true;
39633+ $menuItemParents.children('a').on('touchstart', menuTouchStarted);
39634+ } else if (window.navigator.msPointerEnabled) {
39635+ menuAllowTouchNavigation = true;
39636+ $menuItemParents.children('a').on('MSPointerUp', menuTouchMSPointerUp);
39637+ }
39638+ function menuTouchPreventNavigation() {
39639+ // Block Touch Navigation for 350ms
39640+ allowTouchNavigation = false;
39641+ window.setTimeout(function () {
39642+ allowTouchNavigation = true;
39643+ }, 350);
3964839644 }
39645+ function menuTouchNavigationBlockClick(e) {
39646+ $(this).off('click', menuTouchNavigationBlockClick);
39647+ e.preventDefault();
39648+ }
39649+ //#region TouchEvents Implementation
39650+ function menuSubMenuVisible($element) {
39651+ return $element.closest('li').data('menuSubMenu').is(':visible');
39652+ }
39653+ function menuTouchStarted(e) {
39654+ var $this = $(this);
39655+ if (!menuSubMenuVisible($this))
39656+ $this.click(menuTouchNavigationBlockClick);
39657+ }
39658+ //#endregion
3964939659
39660+ //#region MS Pointer Implementation
39661+ function menuTouchMSPointerUp(e) {
39662+ if (!allowTouchNavigation && e.originalEvent.pointerType == e.originalEvent.MSPOINTER_TYPE_TOUCH)
39663+ $(this).click(menuTouchNavigationBlockClick);
39664+ }
39665+ //#endregion
3965039666
3965139667 });
3965239668})(jQuery, window, document, Modernizr);
0 commit comments