Files
Disco/Disco.Web/ClientSource/Scripts/Core/disco.uicore.js
T
2013-07-26 00:04:31 +10:00

83 lines
3.0 KiB
JavaScript

(function ($, window, document, Modernizr) {
// Document Ready
$(function () {
// Search Functionality
$('#term').watermark('Search').keypress(function (e) {
if (e.keyCode == 13) {
$(this).closest('form').submit();
}
}).focus(function () {
$(this).select();
});
// Menu Functionality
var $menu = $('#menu');
var $menuItems = $menu.find('li');
var $menuItemParents = $menuItems.filter('.hasSubMenu');
var $menuSubMenus = $menuItems.filter('.subMenu');
var menuAllowTouchNavigation = null;
$menuItemParents.each(function () {
var $parent = $(this);
var $subMenu = $parent.children('ul.subMenu');
$parent.data('menuSubMenu', $subMenu);
}).mouseover(function () {
var $parent = $(this);
var $subMenu = $parent.data('menuSubMenu');
var hideToken = $parent.data('menuHideToken');
if (hideToken)
window.clearTimeout(hideToken);
if (!$subMenu.is(':visible')) {
$subMenu.show();
if (menuAllowTouchNavigation !== null)
menuTouchPreventNavigation();
}
}).mouseout(function () {
var $parent = $(this);
var $subMenu = $parent.data('menuSubMenu');
var hideToken = window.setTimeout(function () {
$subMenu.hide();
}, 250);
$parent.data('menuHideToken', hideToken);
});
if (Modernizr.touch) {
menuAllowTouchNavigation = true;
$menuItemParents.children('a').on('touchstart', menuTouchStarted);
} else if (window.navigator.msPointerEnabled) {
menuAllowTouchNavigation = true;
$menuItemParents.children('a').on('MSPointerUp', menuTouchMSPointerUp);
}
function menuTouchPreventNavigation() {
// Block Touch Navigation for 350ms
allowTouchNavigation = false;
window.setTimeout(function () {
allowTouchNavigation = true;
}, 350);
}
function menuTouchNavigationBlockClick(e) {
$(this).off('click', menuTouchNavigationBlockClick);
e.preventDefault();
}
//#region TouchEvents Implementation
function menuSubMenuVisible($element) {
return $element.closest('li').data('menuSubMenu').is(':visible');
}
function menuTouchStarted(e) {
var $this = $(this);
if (!menuSubMenuVisible($this))
$this.click(menuTouchNavigationBlockClick);
}
//#endregion
//#region MS Pointer Implementation
function menuTouchMSPointerUp(e) {
if (!allowTouchNavigation && e.originalEvent.pointerType == e.originalEvent.MSPOINTER_TYPE_TOUCH)
$(this).click(menuTouchNavigationBlockClick);
}
//#endregion
});
})(jQuery, window, document, Modernizr);