1//global vars 2var menuTimeouts = {main: false, section: false, firstOpen: false}; 3 4//check ready 5$(document).on("ready", function(event){ 6 7 //jquery vars 8 var $mainMenu = $("#mainMenu"); 9 var $sectionMenu = $("#menuCatalogSection"); 10 var $mainMenuItems = $mainMenu.children(".eChild"); 11 var $sectionMenuItems = $sectionMenu.children(".menuSection"); 12 13 //other 14 var viewport = 0; 15 16 //functions container 17 var events = { 18 click: {}, 19 mouseleave: {}, 20 mouseenter: {} 21 } 22 23 var tools = {}; 24 25 //get browser viewport 26 tools.getViewport = function(){ 27 28 //(mozilla/netscape/opera/IE7) 29 if(typeof window.innerWidth != "undefined"){ 30 viewport = window.innerWidth; 31 } 32 33 //IE6 34 else if(typeof document.documentElement != "undefined" && typeof document.documentElement.clientWidth != "undefined" && document.documentElement.clientWidth != 0){ 35 viewport = document.documentElement.clientWidth; 36 } 37 38 //older versions of IE 39 else{ 40 viewport = document.getElementsByTagName("body")[0].clientWidth; 41 } 42 43 return viewport; 44 45 } 46 47 // slice menu func 48 tools.sliceMainMenu = function(resize = true){ 49 50 //check window resize 51 if(resize == true){ 52 53 //clear removed items 54 $mainMenu.find(".removed").each(function(i, nextElement){ 55 56 //jquery vars 57 var $nextElement = $(nextElement); 58 59 //move item 60 $mainMenu.append($nextElement.removeClass("removed")); 61 62 }); 63 64 $mainMenu.find(".removedItemsLink").remove(); 65 66 } 67 68 //other 69 var visibleMenuWidth = $mainMenu.width() - 100; 70 var totalSumMenuWidth = 0; 71 72 //check desktop 73 if(viewport > 1024){ 74 75 $mainMenuItems.each(function(i, nextElement){ 76 77 //jquery vars 78 var $nextElement = $(nextElement); 79 80 //other 81 totalSumMenuWidth += $nextElement.outerWidth(true); 82 83 //hide not fit items 84 if(totalSumMenuWidth > visibleMenuWidth){ 85 $nextElement.addClass("removed"); 86 } 87 88 }); 89 90 //get hidden items 91 var $removedItems = $mainMenu.find(".removed"); 92 93 //if exist hidden items 94 if($removedItems.length > 0){ 95 96 //jquery vars 97 var $removedItemsList = $("<ul/>").addClass("removedItemsList"); 98 var $removedItemsLink = $("<li/>").addClass("removedItemsLink").append($("<a/>")); 99 100 //move hidden items to drop menu container 101 $removedItems.each(function(i, nextElement){ 102 $removedItemsList.append($(nextElement)); 103 }); 104 105 //join drop link to main menu 106 $mainMenu.append($removedItemsLink.append($removedItemsList)); 107 108 //set drop menu position 109 $removedItemsList.css({ 110 left: $removedItemsLink.offset().left + "px" 111 }); 112 113 } 114 115 } 116 117 } 118 119 tools.clearAttributes = function(){ 120 121 //check mobile 122 if(viewport <= 1024){ 123 124 //clear styles 125 $mainMenu.find(".drop").removeAttr("style"); 126 127 } 128 129 } 130 131 //events functions 132 events.click.openNested = function(event){ 133 134 //check viewport 135 if(tools.getViewport() <= 1024){ 136 137 //jquery vars 138 var $this = $(this); 139 140 //other 141 var state = $this.data("state"); 142 143 //check state 144 if(typeof state == "undefined" || state === false){ 145 146 //open & set state 147 $this.data("state", true).addClass("opened"); 148 149 //block actions 150 return event.preventDefault(); 151 152 } 153 154 } 155 156 } 157 158 events.click.closeNested = function(event){ 159 160 //check viewport 161 if(tools.getViewport() <= 1024){ 162 163 //jquery vars 164 var $this = $(this); 165 var $container = $this.parents(".opened"); 166 167 //set state 168 $container.data("state", false).removeClass("opened"); 169 170 //close & close by tree 171 $container.find(".opened").removeClass("opened").data("state", false); 172 173 //block actions 174 event.preventDefault(); 175 event.stopimmediatepropagation(); 176 177 } 178 179 } 180 181 events.click.toggleMenu = function(event){ 182 183 //show / hide menu 184 $mainMenu.slideToggle(); 185 186 //block actions 187 return event.preventDefault(); 188 189 }; 190 191 events.mouseenter.mainMenuItems = function(event){ 192 193 //check viewport 194 if(viewport > 1024){ 195 196 //jquery vars 197 var $this = $(this); 198 199 //check for hidden items 200 if(!$this.hasClass("removed")){ 201 202 //open menu 203 menuTimeouts.firstOpen = setTimeout(function(){ 204 205 //check hover 206 if($this.is(":hover")){ 207 208 //kill last events 209 clearTimeout(menuTimeouts.firstOpen); 210 211 //hide last opened items 212 $sectionMenuItems.removeClass("activeDrop").find(".drop").hide(); 213 $mainMenuItems.removeClass("activeDrop").find(".drop").hide(); 214 215 //show current drop menu 216 $this.addClass("activeDrop").find(".drop").css("display", "table"); 217 218 //clear events 219 return clearTimeout(menuTimeouts.main); 220 221 } 222 223 }, 300); 224 225 226 } 227 228 } 229 230 } 231 232 events.mouseleave.mainMenuItems = function(event){ 233 234 //check viewport 235 if(viewport > 1024){ 236 237 //jquery vars 238 var $this = $(this); 239 240 //hide 241 menuTimeouts.main = setTimeout(function(){ 242 if(!$this.is(":hover")){ 243 $this.removeClass("activeDrop").find(".drop").hide(); 244 } 245 }, 500); 246 247 } 248 249 } 250 251 events.mouseenter.button = function(event){ 252 253 //check viewport 254 if(viewport > 1024){ 255 256 //jquery vars 257 var $this = $(this); 258 259 //open menu 260 menuTimeouts.firstOpen = setTimeout(function(){ 261 262 //check hover 263 if($sectionMenu.is(":hover")){ 264 265 //kill last events 266 clearTimeout(menuTimeouts.firstOpen); 267 268 //hide last opened items 269 $sectionMenuItems.removeClass("activeDrop").find(".drop").hide(); 270 $mainMenuItems.removeClass("activeDrop").find(".drop").hide(); 271 272 //show current drop menu 273 $this.addClass("activeDrop").find(".drop").css("display", "table"); 274 275 //clear events 276 return clearTimeout(menuTimeouts.section); 277 } 278 279 }, 300); 280 281 } 282 283 } 284 285 events.mouseleave.button = function(event){ 286 287 //check viewport 288 if(viewport > 1024){ 289 290 //jquery vars 291 var $this = $(this); 292 293 //hide menu 294 menuTimeouts.section = setTimeout(function(){ 295 $this.removeClass("activeDrop").find(".drop").hide(); 296 }, 500); 297 298 } 299 300 } 301 302 events.resize = function(event){ 303 tools.getViewport(); 304 tools.sliceMainMenu(); 305 tools.clearAttributes(); 306 } 307 308 //set start viewport 309 tools.getViewport(); 310 311 //collapse 312 tools.sliceMainMenu(false); 313 314 //clear styles & attribures 315 tools.clearAttributes(); 316 317 //binds 318 $(document).on("click", "#catalogSlideButton", events.click.toggleMenu); 319 $(document).on("click", "#mainMenu .allow-dropdown", events.click.openNested); 320 $(document).on("click", "#mainMenu .allow-dropdown .back", events.click.closeNested); 321 322 //catalog button menu 323 $(document).on("mouseenter", "#menuCatalogSection", events.mouseenter.button); 324 $(document).on("mouseleave", "#menuCatalogSection", events.mouseleave.button); 325 326 //main menu 327 $(document).on("mouseenter", "#mainMenu .eChild", events.mouseenter.mainMenuItems); 328 $(document).on("mouseleave", "#mainMenu .eChild", events.mouseleave.mainMenuItems); 329 330 //resize control 331 $(window).on("resize", events.resize); 332 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.