1(function() { 2 3 'use strict'; 4 var inBrowser = typeof window !== 'undefined' && Object.prototype.toString.call(window) !== '[object Object]', 5 isIE = inBrowser && (navigator.userAgent.indexOf("MSIE") > -1); 6 var win = inBrowser ? window : global; 7 var LIB = {}; 8 9 LIB.mmPlugin = function(menu, opts) { 10 11 var noop = function() {}; 12 var menuContainer = menu, 13 activeMenuitem = null, 14 mousePosition = [], 15 lastDelayPosition = null, 16 timeoutId = null, 17 options = Object.assign({}, { 18 menuItem: ".theme-menu > ul > li", 19 megamenuItem: "data-megamenu", 20 megamenuContent: "[data-megamenu-content] .zpmm-inner", 21 megamenuDirection: "below", 22 megamenuEvent: "hover", 23 onMouseEnterMenuItem: noop, 24 onMouseLeaveMenuItem: noop, 25 activateMenuItem: noop, 26 deactivateMenuItem: noop, 27 exitMenuContainer: noop 28 }, 29 opts); 30 31 var previousMousePosition = 3, 32 mousePositionDelay = 400; 33 34 var mousemoveDocument = function(e) { 35 mousePosition.push({ 36 x: e.pageX, 37 y: e.pageY 38 }); 39 if (mousePosition.length > previousMousePosition) { 40 mousePosition.shift(); 41 } 42 }; 43 44 var mouseleaveMenu = function() { 45 if (timeoutId) { 46 clearTimeout(timeoutId); 47 } 48 49 if (options.exitMenuContainer(this)) { 50 if (activeMenuitem) { 51 options.deactivateMenuItem(activeMenuitem); 52 } 53 54 activeMenuitem = null; 55 } 56 return this; 57 }; 58 59 var mouseenterMenuContent = function() { 60 if (timeoutId) { 61 clearTimeout(timeoutId); 62 } 63 } 64 65 var mouseenterMenuitem = function() { 66 if (timeoutId) { 67 clearTimeout(timeoutId); 68 } 69 70 options.onMouseEnterMenuItem(this); 71 possiblyActivate(this); 72 return this; 73 }, 74 mouseleaveMenuitem = function() { 75 options.onMouseLeaveMenuItem(this); 76 return this; 77 }; 78 var clickMenuitem = function(e) { 79 e.preventDefault(); 80 activate(this); 81 }; 82 var activate = function(megamenuItem) { 83 if (megamenuItem == activeMenuitem && options.megamenuEvent == 'hover') { 84 return; 85 } else if (megamenuItem == activeMenuitem && options.megamenuEvent == 'click') { 86 options.deactivateMenuItem(activeMenuitem); 87 activeMenuitem = null; 88 return; 89 } 90 91 if (activeMenuitem) { 92 options.deactivateMenuItem(activeMenuitem); 93 } 94 95 options.activateMenuItem(megamenuItem); 96 activeMenuitem = megamenuItem; 97 }; 98 99 var possiblyActivate = function(megamenuItem) { 100 if (!megamenuItem.hasAttribute(options.megamenuItem)) { 101 if (activeMenuitem) { 102 options.deactivateMenuItem(activeMenuitem); 103 activeMenuitem = null; 104 } 105 return; 106 } 107 108 var delay = activationDelay(); 109 110 if (delay) { 111 timeoutId = setTimeout(function() { 112 possiblyActivate(megamenuItem); 113 }, delay); 114 } else { 115 activate(megamenuItem); 116 } 117 }; 118 119 var activationDelay = function() { 120 function getOffset(element) { 121 if (!element.getClientRects().length) { 122 return { 123 top: 0, 124 left: 0 125 }; 126 } 127 128 let rect = element.getBoundingClientRect(); 129 let win = element.ownerDocument.defaultView; 130 return ({ 131 top: rect.top + win.pageYOffset, 132 left: rect.left + win.pageXOffset 133 }); 134 } 135 if (!activeMenuitem || !activeMenuitem.hasAttribute(options.megamenuItem)) { 136 137 return 0; 138 } 139 140 var activeMegamenuContentId = activeMenuitem.getAttribute('data-megamenu'); 141 var activemegamenuContent = document.querySelector("[data-megamenu-content='" + activeMegamenuContentId + "']"); 142 143 var offsetEl = getOffset(activemegamenuContent); 144 var offsetLeft = offsetEl.left; 145 var offsetTop = offsetEl.top, 146 upperLeft = { 147 x: offsetLeft, 148 y: offsetTop 149 }, 150 upperRight = { 151 x: offsetLeft + activemegamenuContent.offsetWidth, 152 y: upperLeft.y 153 }, 154 lowerLeft = { 155 x: offsetLeft, 156 y: offsetTop + activemegamenuContent.offsetHeight 157 }, 158 lowerRight = { 159 x: offsetLeft + activemegamenuContent.offsetWidth, 160 y: lowerLeft.y 161 },
162 curLoc = mousePosition[mousePosition.length - 1], 163 prevLoc = mousePosition[0]; 164 165 if (!curLoc) { 166 return 0; 167 } 168 169 if (!prevLoc) { 170 prevLoc = curLoc; 171 } 172 173 if (lastDelayPosition && 174 curLoc.x == lastDelayPosition.x && curLoc.y == lastDelayPosition.y) { 175 return 0; 176 } 177 var isPointInsideTriangle = isInsideTriangle(curLoc.x, curLoc.y, prevLoc.x, prevLoc.y, upperLeft.x, upperLeft.y, upperRight.x, upperRight.y); 178 if (options.megamenuDirection == "right") { 179 var isPointInsideTriangle = isInsideTriangle(curLoc.x, curLoc.y, prevLoc.x, prevLoc.y, upperLeft.x, upperLeft.y, lowerLeft.x, lowerLeft.y); 180 } 181 function isInsideTriangle(px, py, ax, ay, bx, by, cx, cy) { 182 var v0 = [cx - ax, cy - ay]; 183 var v1 = [bx - ax, by - ay]; 184 var v2 = [px - ax, py - ay]; 185 186 var dot00 = (v0[0] * v0[0]) + (v0[1] * v0[1]); 187 var dot01 = (v0[0] * v1[0]) + (v0[1] * v1[1]); 188 var dot02 = (v0[0] * v2[0]) + (v0[1] * v2[1]); 189 var dot11 = (v1[0] * v1[0]) + (v1[1] * v1[1]); 190 var dot12 = (v1[0] * v2[0]) + (v1[1] * v2[1]); 191 192 var invDenom = 1 / (dot00 * dot11 - dot01 * dot01); 193 194 var u = (dot11 * dot02 - dot01 * dot12) * invDenom; 195 var v = (dot00 * dot12 - dot01 * dot02) * invDenom; 196 197 return ((u >= 0) && (v >= 0) && (u + v < 1)); 198 } 199 200 if (isPointInsideTriangle) { 201 lastDelayPosition = curLoc; 202 return mousePositionDelay; 203 } 204 205 lastDelayPosition = null; 206 return 0; 207 }; 208 209 if (options.megamenuEvent == 'hover') { 210 var megamenuContent = document.querySelectorAll(options.megamenuContent); 211 for (var i = 0; i < megamenuContent.length; i++) { 212 megamenuContent[i].addEventListener('mouseenter', mouseenterMenuContent); 213 } 214 var megamenuBackdrop = document.querySelector(".zpmm-backdrop"); 215 megamenuBackdrop.addEventListener('mouseenter', mouseleaveMenu); 216 var menuItem = menuContainer.querySelectorAll(options.menuItem); 217 for (var i = 0; i < menuItem.length; i++) { 218 menuItem[i].addEventListener('mouseenter', mouseenterMenuitem); 219 menuItem[i].addEventListener('mouseleave', mouseleaveMenuitem); 220 } 221 document.addEventListener("mousemove", mousemoveDocument); 222 } else if (options.megamenuEvent == 'click') { 223 var menuItem = menuContainer.querySelectorAll(options.menuItem); 224 for (var i = 0; i < menuItem.length; i++) { 225 menuItem[i].addEventListener('click', clickMenuitem); 226 } 227 } 228 } 229 230 win.$mm = LIB.mmPlugin; 231 232})(); 233 234 235function initMegamenu() { 236 var megamenuContent = $D.getAll('[data-megamenu-content]'); 237 var megamenuContentContainer = $D.get('[data-megamenu-content-container]'); 238 if(megamenuContent && megamenuContent.length>0 && megamenuContentContainer){ 239 if (window.innerWidth >= 992) { 240 var megamenuBackdrop = document.querySelector(".zpmm-backdrop"); 241 var megamenuDirection = document.querySelector("[data-megamenu-direction]").getAttribute('data-megamenu-direction'); 242 if ((typeof(megamenuContent) != 'undefined' && megamenuContent != null) && (typeof(megamenuContentContainer) != 'undefined' && megamenuContentContainer != null)) { 243 moveMegamenuContent(megamenuContentContainer, megamenuContent); 244 } 245 246 var menu = document.querySelector("[data-megamenu-content-container] .theme-menu > ul"); 247 $mm(menu, { 248 megamenuDirection: megamenuDirection, 249 activateMenuItem: activateMegamenu, 250 deactivateMenuItem: deactivateMegamenu, 251 exitMenuContainer: exitMegamenu 252 }); 253 254 function activateMegamenu(megamenuItem) { 255 var megamenuContentId = megamenuItem.getAttribute('data-megamenu'), 256 megamenuContent = document.querySelector("[data-megamenu-content='" + megamenuContentId + "']"), 257 megamenuDirection = document.querySelector("[data-megamenu-direction]").getAttribute('data-megamenu-direction'), 258 sidebarnav = document.querySelector('.theme-veritical-nav-with-sidebar'); 259 if (typeof(sidebarnav) == 'undefined' || sidebarnav == null) { 260 document.body.classList.add("theme-body-overflowhidden"); 261 } 262 megamenuContent.classList.add("mmactive"); 263 if (megamenuDirection == 'right') { 264 var megamenuContentContainer = $D.get('[data-megamenu-content-container]'); 265 var megamenuItemBounding = megamenuItem.getBoundingClientRect(); 266 var firstMegamenuItemBounding = megamenuItem.parentNode.firstChild.getBoundingClientRect(); 267 var firstVisibleMegamenuItem, lastVisibleMegamenuItem, elPos; 268 var megamenuItems = megamenuItem.parentNode.querySelectorAll("[data-megamenu]"); 269 for (var i = 0; i < megamenuItems.length; i++) { 270 var isElemOutOfViewport = isOutOfViewport(megamenuItems[i]); 271 if ((firstVisibleMegamenuItem == 'undefined' || firstVisibleMegamenuItem == null) && isElemOutOfViewport.top == false) { 272 firstVisibleMegamenuItem = megamenuItems[i] 273 } 274 if ((firstVisibleMegamenuItem != 'undefined' || firstVisibleMegamenuItem != null) && (lastVisibleMegamenuItem == 'undefined' || lastVisibleMegamenuItem == null) && isElemOutOfViewport.bottom == true) { 275 lastVisibleMegamenuItem = megamenuItems[i - 1] 276 } else if (i == megamenuItems.length - 1) { 277 lastVisibleMegamenuItem = megamenuItems[i] 278 } 279 } 280 elPos = getPosition(firstVisibleMegamenuItem); 281 megamenuContent.style.top = elPos.top - 30 + "px"; 282 if ((lastVisibleMegamenuItem.getBoundingClientRect().top - firstVisibleMegamenuItem.getBoundingClientRect().top) < 450) { 283 megamenuContent.style.height = 500 + "px"; 284 } else { 285 megamenuContent.style.height = lastVisibleMegamenuItem.getBoundingClientRect().top + lastVisibleMegamenuItem.getBoundingClientRect().height - firstVisibleMegamenuItem.getBoundingClientRect().top + 60 + "px"; 286 } 287 megamenuContent.style.left = megamenuContentContainer.clientWidth + "px"; 288 megamenuContent.style.width = (window.innerWidth || document.documentElement.clientWidth) - megamenuContentContainer.clientWidth + "px"; 289 290 291 if (typeof(sidebarnav) == 'undefined' || sidebarnav == null) { 292 megamenuContent.style.top = firstMegamenuItemBounding.top - 30 + "px"; 293 } 294 295 296 } 297 megamenuItem.classList.add("theme-menu-selected"); 298 megamenuBackdrop.style.display = "block"; 299 } 300 301 function deactivateMegamenu(megamenuItem) { 302 var megamenuContentId = megamenuItem.getAttribute('data-megamenu'), 303 megamenuContent = document.querySelector("[data-megamenu-content='" + megamenuContentId + "']"), 304 megamenuDirection = document.querySelector("[data-megamenu-direction]").getAttribute('data-megamenu-direction'), 305 sidebarnav = document.querySelector('.theme-veritical-nav-with-sidebar'); 306 if (typeof(sidebarnav) == 'undefined' || sidebarnav == null) { 307 document.body.classList.remove("theme-body-overflowhidden"); 308 } 309 megamenuContent.classList.remove("mmactive"); 310 megamenuItem.classList.remove("theme-menu-selected"); 311 if (megamenuDirection == 'right') { 312 megamenuContent.style.top = ""; 313 megamenuContent.style.bottom = ""; 314 megamenuContent.style.left = ""; 315 megamenuContent.style.width = ""; 316 megamenuContent.style.maxHeight = ""; 317 } 318 megamenuBackdrop.style.display = "none"; 319 lastVisibleMegamenuItem = firstVisibleMegamenuItem = undefined; 320 } 321 322 function exitMegamenu(backdrop) { 323 return true; 324 } 325 } else { 326 moveMegamenuContentResponsive(megamenuContent); 327 } 328 } 329} 330 331function moveMegamenuContent(container, content) { 332 for (var i = 0; i < content.length; i++) { 333 $D.append(container, content[i]); 334 } 335} 336 337function moveMegamenuContentResponsive(content) { 338 var contentId, container; 339 for (var i = 0; i < content.length; i++) { 340 contentId = content[i].getAttribute('data-megamenu-content'); 341 container = document.querySelector("[data-megamenu='" + contentId + "'] > ul"); 342 $D.append(container, content[i]); 343 } 344} 345 346var isOutOfViewport = function(elem) { 347 var bounding = elem.getBoundingClientRect(); 348 var out = {}; 349 out.bounding = bounding; 350 out.top = bounding.top < 0; 351 out.left = bounding.left < 0; 352 out.bottom = bounding.bottom > (window.innerHeight || document.documentElement.clientHeight); 353 out.right = bounding.right > (window.innerWidth || document.documentElement.clientWidth); 354 out.any = out.top || out.left || out.bottom || out.right; 355 out.all = out.top && out.left && out.bottom && out.right; 356 out.elh = bounding.height; 357 out.vw = (window.innerWidth || document.documentElement.clientWidth); 358 out.vh = (window.innerHeight || document.documentElement.clientHeight); 359 return out; 360}; 361 362function getPosition(elem) { 363 var bounding = elem.getBoundingClientRect(); 364 var elPos = {}; 365 var body = document.body; 366 var docEl = document.documentElement; 367 var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop; 368 var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft; 369 var clientTop = docEl.clientTop || body.clientTop || 0; 370 var clientLeft = docEl.clientLeft || body.clientLeft || 0; 371 elPos.top = Math.round(bounding.top + scrollTop - clientTop); 372 elPos.left = Math.round(bounding.left + scrollLeft - clientLeft); 373 return elPos; 374} 375 376$E.callOnLoad(initMegamenu); 377 378window.addEventListener('resize', function(event) { 379 initMegamenu(); 380});
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.