consumerportal
Version:
mydna Custimised for you
102 lines (83 loc) • 2.26 kB
JavaScript
/**
* Singleton for initialisation
*
* @class main
*/
var main = (function () {
var toggleMenu = function(hideMenu) {
if ($("body").hasClass('showmenu') || hideMenu) {
$("body").removeClass('showmenu');
} else {
$("body").addClass('showmenu');
}
}
/* Nav */
var initNav = function() {
$("nav .hamburger").on("click",
function(e){
toggleMenu();
e.preventDefault();
}
).on("keydown",
function(e){
if (e.keyCode == 13) {
toggleMenu();
e.preventDefault();
}
}
)
/* Close Menu on ESC */
$(document).keyup(function(e) {
if (e.keyCode == 27) toggleMenu(true);
});
/* Close Menu on Document Click */
$(document).click(function(event) {
if(($(event.target).closest('nav').length>0) && (event.target.className!='hamburger')) {
if($("body").hasClass('showmenu')) {
toggleMenu(true)
}
}else{
if (!($(event.target).closest('nav').length)) {
if($("body").hasClass('showmenu')) {
toggleMenu(true)
}
}
}
})
/* Prevent Touch Device Triggering Subnav Item on Touch of Dropdown */
var hasTouch = ("ontouchstart" in window);
var iOS5 = /iPad|iPod|iPhone/.test(navigator.platform) && "matchMedia" in window;
if (hasTouch && document.querySelectorAll && !iOS5) {
var i, len, element,
dropdowns = document.querySelectorAll("#main-menu li.dropdown > span");
function menuTouch(event) {
var i, len, noclick = !(this.dataNoclick);
for (i = 0, len = dropdowns.length; i < len; ++i) {
dropdowns[i].dataNoclick = false;
}
this.dataNoclick = noclick;
this.focus();event.stopPropagation();
}
function menuClick(event) {
if (this.dataNoclick) {
event.preventDefault();
}
}
for (i = 0, len = dropdowns.length; i < len; ++i) {
element = dropdowns[i];
element.dataNoclick = false;
element.addEventListener("touchstart", menuTouch, false);
element.addEventListener("click", menuClick, false);
}
}
};
return {
onReady: function () {
initNav();
}
};
}());
/* Execute on Ready State */
$(function () {
main.onReady();
});