1"use strict"; 2 3function desktopMenu(){ 4 if(!isResponsive(641)){ 5 // only run at 640px+ 6 jQuery('.nav-menu-main').find('li').each(function(){ 7 if(jQuery(this).find('ul.sub-menu').length){ 8 // item has a submenu 9 jQuery(this).addClass('has-submenu'); 10 var anchor = jQuery(this).children('a')[0]; 11 if (anchor) { 12 var icon = document.createElement('span'); 13 icon.className = 'icon-submenu'; 14 15 anchor.append(icon); 16 } 17 } 18 }); 19 20 popupDesktopMenu(); 21 22 touchDesktopMenuFix(); 23 } 24} 25 26var firstDesktopMenuRelocation = isResponsive(640); 27 28function relocateMenuTools() { 29 var regularPos = jQuery('.header-container .menu-container'); 30 var relocatedPos = jQuery('.header-container .nav-menu-container'); 31 var siteToolsSelector = '.menu-tools'; 32 var $siteTools = jQuery(siteToolsSelector); 33 34 if(isResponsive(640)){ 35 if(regularPos.find('> '+siteToolsSelector).length > 0) { 36 $siteTools.prependTo(relocatedPos); 37 } 38 } else { 39 if(relocatedPos.find('> '+siteToolsSelector).length > 0) { 40 $siteTools.appendTo(regularPos); 41 } 42 43 if (firstDesktopMenuRelocation) { 44 updateBurgerMenuSpace(burgerMenuData[0]); 45 firstDesktopMenuRelocation = false; 46 } 47 } 48} 49 50function responsiveMenu(){ 51 if(isResponsive(640)){ 52 // only run at 640px- 53 jQuery('.main-nav .menu-toggle').bind('touchstart MSPointerDown', function(){ 54 if(jQuery('.main-nav .nav-menu-main').hasClass('menu-opened')){ 55 jQuery('.main-nav .nav-menu-main').hide(); 56 } else { 57 jQuery('.main-nav .nav-menu-main').show(); 58 } 59 jQuery('.main-nav .nav-menu-main').toggleClass('menu-opened'); 60 61 return false; 62 }); 63 } 64} 65 66function touchDesktopMenuFix(){ 67 if(isTouch() && (isAndroid() || isIpad() || isMobile())){ 68 jQuery('.nav-menu-main').find('li').each(function(){ 69 jQuery(this).bind('click', function(e){ 70 e.stopPropagation(); 71 if(jQuery(this).hasClass('has-submenu')){ 72 var itemID = jQuery(this).attr('id'); 73 if(jQuery(this).hasClass('clicked-once')){ 74 // the second click on target 75 } else { 76 // if there was clicked on other item reset all except current 77 jQuery('.nav-menu-main').find('li').each(function(){ 78 if(jQuery(this).attr('id') != itemID){ 79 jQuery(this).removeClass('clicked-once'); 80 } 81 }); 82 // first click on target 83 e.preventDefault(); 84 jQuery(this).addClass('clicked-once'); 85 } 86 } else { 87 // normal flow 88 } 89 }); 90 }); 91 } 92} 93 94function popupDesktopMenu(){ 95 if(jQuery('body').hasClass('sticky-menu-enabled')){ 96 var clonedMenu = jQuery('header.site-header .nav-menu-main').clone(); 97 if(typeof clonedMenu.find('ul.ait-megamenu').attr('id') != "undefined"){ 98 clonedMenu.find('ul.ait-megamenu').attr({'id':clonedMenu.find('ul.ait-megamenu').attr('id')+'-clone'}); 99 } 100 clonedMenu.find('ul.ait-megamenu').children('li').each(function(){ 101 if(typeof jQuery(this).attr('id') != "undefined"){ 102 jQuery(this).attr({'id': jQuery(this).attr('id')+"-clone"}); 103 } 104 }); 105 jQuery('div.sticky-menu .main-nav').append(clonedMenu); 106 107 var container = jQuery('#masthead'); 108 var menu = {offset: container.offset(), height: container.outerHeight(true)}; 109 var page = jQuery('body'); 110 var scroll = (menu.offset.top + menu.height); 111 if(!isResponsive(641)){ 112 var win = jQuery(window); 113 114 115 setInterval(function(){ 116 if(win.scrollTop() > scroll){ 117 page.addClass('header-scrolled'); 118 } else { 119 page.removeClass('header-scrolled'); 120 } 121 },200); 122 } 123 } 124} 125 126function menuOverlay() { 127 var menuContainer = jQuery(".site-header .menu-container"); 128 jQuery(".ait-megamenu > li.has-submenu, .ait-megamenu > li.menu-item-wrapper").hover(function() { 129 menuContainer.toggleClass("hover"); 130 }); 131} 132 133/* new burger menu logic */ 134function burgerMenus(menus){ 135 jQuery.each(menus, function(index, menu){ 136 137 jQuery(menu.selectors.join(', ')).each(function(){ 138 var $container = jQuery(this); 139 var $navContainer = $container.find('nav'); 140 var $menuContainer = $navContainer.find('.nav-menu-container').children('ul'); 141 142 var testWidth = !isMobile() ? 623 : 640; 143 144 // update avalaible space 145 var widthNav = $navContainer.width(); 146 147 $navContainer.attr('data-avalaibleSpace', widthNav); 148 // this is stupid xD 149 var widthAvalaible = widthNav - parseInt($navContainer.attr('data-reservedSpace')); 150 var avalaibleSpace = widthAvalaible; 151 152 if(!isResponsive(testWidth)){ 153 154 if(parseInt($menuContainer.attr('data-liWidth')) > avalaibleSpace){ 155 // the menu is bigger than the space 156 var fittingWidth = avalaibleSpace; 157 //var lastFittableLi = null; 158 $menuContainer.children('li:not(.menu-item-wrapper)').each(function(){ 159 // for every li, get his width and try to fit it
160 var liWidth = parseInt(jQuery(this).attr('data-width')) == 0 ? jQuery(this).outerWidth(true) : parseInt(jQuery(this).attr('data-width')); 161 fittingWidth = parseInt(fittingWidth - liWidth); 162 var liID = jQuery(this).attr('id'); 163 if(fittingWidth > 0){ 164 // no problem .. li fits 165 // hide this in the wrapmenu 166 jQuery(this).show(); 167 jQuery('#'+liID+'-wrapclone').hide(); 168 } else { 169 // problem .. li doesnt fit 170 // show this in the wrapmenu 171 jQuery(this).hide(); 172 jQuery('#'+liID+'-wrapclone').show(); 173 } 174 }); 175 176 $menuContainer.find('.menu-item-wrapper').css({'display': 'inline-block'}); 177 } else { 178 var fittingWidth = avalaibleSpace; 179 $menuContainer.children('li:not(.menu-item-wrapper)').each(function(){ 180 var liWidth = parseInt(jQuery(this).attr('data-width')) == 0 ? jQuery(this).width() : parseInt(jQuery(this).attr('data-width')); 181 fittingWidth = parseInt(fittingWidth - liWidth); 182 var liID = jQuery(this).attr('id'); 183 if(fittingWidth > 0){ 184 // no problem .. li fits 185 // hide this in the wrapmenu 186 jQuery(this).show(); 187 jQuery('#'+liID+'-wrapclone').hide(); 188 } 189 }); 190 // hide wrapping menu 191 $menuContainer.find('.menu-item-wrapper').css({'display': 'none'}); 192 } 193 194 } else { 195 $menuContainer.children('li:not(.menu-item-wrapper)').css({'display': 'inline-block'}); 196 $menuContainer.find('.menu-item-wrapper').css({'display': 'none'}); 197 } 198 }); 199 }); 200} 201 202function prepareBurgerMenus(menus, cb){ 203 jQuery.each(menus, function(index, menu){ 204 205 jQuery(menu.selectors.join(', ')).each(function(){ 206 207 var $container = jQuery(this); 208 var $navContainer = $container.find('nav'); 209 210 // before computing, display hidden menus .. no need this is default 211 //$navContainer.css({'display':'block', 'visibility':'hidden'}); 212 213 // menu items widths 214 var $menuContainer = $navContainer.find('.nav-menu-container').children('ul'); 215 var widthLiAll = 0; 216 $menuContainer.children('li').each(function(){ 217 var widthLi = jQuery(this).outerWidth(true); 218 jQuery(this).attr('data-width', widthLi); 219 widthLiAll = widthLiAll + widthLi; 220 }); 221 $menuContainer.attr('data-liWidth', widthLiAll); 222 223 // append burger li .. burger is always created 224 $menuContainer.append('<li class="menu-item-wrapper sub-menu-right-position"><a>≡<i class="icon-burger"><span></span></i></a><ul class="menu-items-wrap"></ul></li>'); 225 var $burgerMenuWrapper = $menuContainer.find('li.menu-item-wrapper'); 226 var $burgerMenuContainer = $burgerMenuWrapper.find('.menu-items-wrap'); 227 228 // fill up burger menu with data 229 var $menuContainerChildren = $menuContainer.children('li:not(.menu-item-wrapper)').clone(true); 230 $menuContainerChildren.appendTo($burgerMenuContainer); 231 232 $burgerMenuWrapper.find('li').each(function(){ 233 // update id 234 var oldId = jQuery(this).attr('id'); 235 if(typeof oldId !== "undefined"){ 236 jQuery(this).attr('id', jQuery(this).attr('id')+'-wrapclone'); 237 } 238 // update class 239 if(jQuery(this).hasClass('menu-item-has-columns')){ 240 jQuery(this).removeAttr('class'); 241 jQuery(this).addClass('menu-item-wrapped menu-item-has-columns'); 242 } else { 243 jQuery(this).removeAttr('class'); 244 jQuery(this).addClass('menu-item-wrapped'); 245 } 246 }); 247 248 // clear up all megamenu classes 249 if($burgerMenuContainer.find('li.menu-item-has-columns').length > 0){ 250 $burgerMenuContainer.find('li.menu-item-has-columns ul li').each(function(){ 251 if(jQuery(this).children('a').length > 0){ 252 jQuery(this).addClass('leave-me-alone'); 253 } 254 }); 255 256 $burgerMenuContainer.find('li.menu-item-has-columns').each(function(){ 257 var $lis = jQuery(this).find('li.leave-me-alone').clone(true); 258 var $con = jQuery(this).find('ul'); 259 $con.children().remove(); 260 $con.append($lis); 261 }); 262 $burgerMenuContainer.find('li.leave-me-alone').removeClass('leave-me-alone'); 263 } 264 265 // add new classes 266 $burgerMenuContainer.find('li').each(function(){ 267 if(jQuery(this).children('ul').length > 0){ 268 jQuery(this).addClass('menu-item-has-children'); 269 } 270 }); 271 272 // compute and store widths 273 var widthContainer = $container.width(); 274 var widthNav = $navContainer.width(); 275 276 var widthAvalaible = widthNav; 277 $navContainer.attr('data-avalaibleSpace', widthAvalaible); 278 279 // compute reserverd space from defined selectors 280 var reservedSize = 0; 281 jQuery(menu.reservedSelectors.join(', ')).each(function(){ 282 reservedSize = reservedSize + jQuery(this).outerWidth(true); 283 }); 284 $navContainer.attr('data-reservedSpace', reservedSize); 285 286 widthAvalaible = widthAvalaible - reservedSize; 287 288 // will the burger be shown by default 289 if(widthAvalaible < widthLiAll){ 290 $burgerMenuWrapper.css({'display': 'inline-block'}); 291 } else { 292 $burgerMenuWrapper.css({'display': 'none'}); 293 } 294 295 // reset all styles added by script 296 //$navContainer.css({'display':'block', 'visibility':''}); 297 $navContainer.removeClass('menu-hidden'); 298 }); 299 300 }); 301 302 cb && cb(); 303} 304 305function updateBurgerMenuSpace(menu) { 306 jQuery(menu.selectors.join(', ')).each(function(){ 307 var $navContainer = jQuery(this).find('nav'); 308 var $menuContainer = $navContainer.find('.nav-menu-container').children('ul'); 309 310 $navContainer.addClass('menu-hidden'); 311 312 // menu items widths 313 var $menuContainer = $navContainer.find('.nav-menu-container').children('ul'); 314 var widthLiAll = 0; 315 $menuContainer.children('li').each(function(){
316 var widthLi = jQuery(this).outerWidth(true); 317 jQuery(this).attr('data-width', widthLi); 318 widthLiAll = widthLiAll + widthLi; 319 }); 320 $menuContainer.attr('data-liWidth', widthLiAll); 321 322 // compute reserverd space from defined selectors 323 var reservedSize = 0; 324 jQuery(menu.reservedSelectors.join(', ')).each(function(){ 325 reservedSize = reservedSize + jQuery(this).outerWidth(true); 326 }); 327 $navContainer.attr('data-reservedSpace', reservedSize); 328 329 $navContainer.removeClass('menu-hidden'); 330 }); 331 332 burgerMenus([menu]); 333}
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.