1( function($) { 2 3 $.prototype.aiosMobileHeaderNavigation = function(settings) { 4 5 var defaults = { 6 trigger:'.aios-mobile-pack-navigation-trigger', 7 attachment:'.aios-mobile-pack-header-buttons', 8 position:'bottom' 9 } 10 11 settings = $.extend(defaults,settings); 12 13 this.each( function(i,v) { 14 15 Navigation($(v),settings); 16 17 }); 18 19 } 20 21 function Navigation(object,settings) { 22 23 var nav = object; 24 var trigger = $(settings.trigger); 25 var attachment = $(settings.attachment); 26 var overlay = $("<div class='aiosMobileHeaderOverlay'></div>"); 27 28 function _construct() { 29 30 prepareComponents(); 31 initEvents(); 32 33 } 34 35 function prepareComponents() { 36 37 /* Prepare overlay */ 38 39 overlay.css({ 40 'left':0, 41 'top':0, 42 'width':'100%', 43 'height':'100%', 44 'position':'fixed', 45 'z-index':'999', 46 'background':'#000', 47 'display':'none', 48 'opacity':0.5 49 }); 50 51 /* Prepare nav */ 52 switch (settings.position) { 53 54 case 'left': 55 56 nav.css({ 57 'left':'-100%', 58 'display':'block', 59 'z-index':'1000', 60 'top':0, 61 'height':'100%', 62 'position':'fixed', 63 'width':240 64 }); 65 66 nav.addClass("aios-mobile-pack-navigation-left"); 67 nav.after(overlay); 68 69 break; 70 71 case 'right': 72 73 nav.css({ 74 'right':'-240px', 75 'display':'block', 76 'z-index':'1000', 77 'top':0, 78 'height':'100%', 79 'position':'fixed', 80 'width':240 81 }); 82 83 nav.addClass("aios-mobile-pack-navigation-right"); 84 nav.after(overlay); 85 86 break; 87 88 default: 89 90 nav.addClass("aios-mobile-pack-navigation-bottom"); 91 92 break; 93 94 } 95 96 } 97 98 function initEvents() { 99 100 initTriggerEvent(); 101 initAnchorEvent(); 102 initTabEvent(); 103 104 if ( isTouchDevice() ) { 105 overlay[0].addEventListener("touchstart", function(){ 106 if ( overlay.is(":visible") ) { 107 animateNav('close'); 108 } 109 }, false); 110 overlay[0].addEventListener("click", function(){ 111 if ( overlay.is(":visible") ) { 112 animateNav('close'); 113 } 114 }, false); 115 } 116 else { 117 overlay[0].addEventListener("click", function(){ animateNav('close'); }, false); 118 } 119 120 if ( settings.position == 'bottom' ) { 121 $(window).on("load",resizeNav); 122 $(window).on("resize",resizeNav); 123 window.addEventListener("orientationchange", resizeNav); 124 } 125 126 } 127 128 function isTouchDevice() { 129 return 'ontouchstart' in window || navigator.msMaxTouchPoints; 130 } 131 132 function initTabEvent() { 133 134 nav.find("li").click( function(e) { 135 var li = $(e.currentTarget); 136 137 li.siblings().removeClass("open"); 138 li.siblings().find("li").removeClass("open"); 139 li.siblings().find(".sub-menu").hide(); 140 141 if ( !li.hasClass("open") ) { 142 li.toggleClass("open"); 143 li.children(".sub-menu").show(); 144 } 145 }); 146 147 } 148 149 function initAnchorEvent() { 150 151 nav.find("a").click( function(e) { 152 e.preventDefault(); 153 154 var a = $(e.currentTarget); 155 var parent = a.parent(); 156 var subCount = parent.find(".sub-menu").length; 157 158 if ( parent.hasClass("open") || !subCount ) { 159 var url = a.attr("href"); 160 var target = typeof a.attr("target") == 'undefined' ? '_self' : a.attr("target") ; 161 window.open(url,target); 162 } 163 164 if ( settings.position == 'bottom' ) { 165 setTimeout(resizeNav,500); 166 } 167 168 }); 169 170 } 171 172 function initTriggerEvent() { 173 174 trigger.click(animateNav); 175 176 } 177 178 function animateNav(status) { 179 180 switch (settings.position) { 181 182 case 'left': 183 if ( nav.hasClass('aios-mobile-pack-navigation-visible') || status == 'close' ){ 184 //Hide nav 185 nav.stop(true).animate({left:'-100%'},750); 186 overlay.stop(true).animate({opacity:0}
186,750,'swing',function() { 187 overlay.css({display:'none'}); 188 }); 189 190 //Remove classes 191 nav.removeClass('aios-mobile-pack-navigation-visible'); 192 trigger.removeClass('aios-mobile-pack-navigation-trigger-active'); 193 } 194 else { 195 //Show nav 196 nav.stop(true).animate({left:0},750); 197 overlay.css({display:'block'}); 198 overlay.stop(true).animate({opacity:0.5},750); 199 200 //Add classes 201 nav.addClass('aios-mobile-pack-navigation-visible'); 202 trigger.addClass('aios-mobile-pack-navigation-trigger-active'); 203 } 204 break; 205 206 case 'right': 207 if ( nav.hasClass('aios-mobile-pack-navigation-visible' ) || status == 'close' ) { 208 //Hide nav 209 nav.stop(true).animate({right:'-240px'},750); 210 overlay.stop(true).animate({opacity:0},750,'swing',function() { 211 overlay.css({display:'none'}); 212 }); 213 214 //Remove classes 215 nav.removeClass('aios-mobile-pack-navigation-visible'); 216 trigger.removeClass('aios-mobile-pack-navigation-trigger-active'); 217 } 218 else { 219 //Show nav 220 nav.stop(true).animate({right:0},750); 221 overlay.css({display:'block'}); 222 overlay.stop(true).animate({opacity:0.5},750); 223 224 //Add classes 225 nav.addClass('aios-mobile-pack-navigation-visible'); 226 trigger.addClass('aios-mobile-pack-navigation-trigger-active'); 227 } 228 break; 229 230 default: 231 232 //Show or hide nav 233 nav.slideToggle(400,function() { 234 resizeNav(); 235 }); 236 237 //Add or remove classes 238 nav.toggleClass('aios-mobile-pack-navigation-visible'); 239 trigger.toggleClass('aios-mobile-pack-navigation-trigger-active'); 240 241 break; 242 243 } 244 245 246 } 247 248 function resizeNav() { 249 250 var winHeight = window.innerHeight || $(window).height(); 251 var navHeight = winHeight - attachment.height(); 252 var css; 253 254 nav.css({height:'auto',paddingBottom:0}); 255 var originalNavHeight = nav.height() + $('.amh-header-buttons').height() ; 256 257 258 259 if ( originalNavHeight < navHeight ) { 260 261 css = { 262 height:'auto', 263 paddingBottom:0 264 }; 265 266 nav.css(css); 267 268 } 269 else { 270 271 css = { 272 height:navHeight 273 }; 274 275 if ( settings.position == 'bottom' ) { 276 css.paddingBottom = 100; 277 } 278 279 nav.css(css); 280 } 281 282 } 283 284 _construct(); 285 286 } 287 288})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.