1function supportsTransitions() { 2 return getSupportedTransition() != ''; 3} 4 5function getSupportedTransition() { 6 var b = document.body || document.documentElement, 7 s = b.style, 8 p = 'transition'; 9 10 if (typeof s[p] == 'string') { return p; } 11 12 // Tests for vendor specific prop 13 var v = ['Moz', 'webkit', 'Webkit', 'Khtml', 'O', 'ms']; 14 p = p.charAt(0).toUpperCase() + p.substr(1); 15 16 for (var i=0; i<v.length; i++) { 17 if (typeof s[v[i] + p] == 'string') { return true; } 18 } 19 20 return ''; 21} 22window.supportedTransition = getSupportedTransition(); 23window.supportsTransitions = supportsTransitions(); 24 25function supportsAnimations() { 26 return getSupportedAnimation() != ''; 27} 28 29function getSupportedAnimation() { 30 var t, 31 el = document.createElement("fakeelement"); 32 33 var animations = { 34 "animation" : "animationend", 35 "OAnimation" : "oAnimationEnd", 36 "MozAnimation" : "animationend", 37 "WebkitAnimation": "webkitAnimationEnd", 38 'msAnimation' : 'MSAnimationEnd' 39 }; 40 41 for (t in animations){ 42 if (el.style[t] !== undefined) { 43 return t; 44 } 45 } 46 return ''; 47} 48window.supportedAnimation = getSupportedAnimation(); 49window.supportsAnimations = supportsAnimations(); 50 51function getMobileMenuType() { 52 if(!document.getElementById('site-header')) return 'default'; 53 var m = document.getElementById('site-header').className.match(/mobile-menu-layout-([a-zA-Z0-9]+)/); 54 window.gemMobileMenuType = m ? m[1] : 'default'; 55 return window.gemMobileMenuType; 56} 57getMobileMenuType(); 58 59(function() { 60 var logoFixTimeout = false; 61 window.thegemDesktopMenuLogoFixed = false; 62 window.thegemWasDesktop = false; 63 window.megaMenuWithSettingsFixed = false; 64 65 function getElementPosition(elem) { 66 var w = elem.offsetWidth, 67 h = elem.offsetHeight, 68 l = 0, 69 t = 0; 70 71 while (elem) { 72 l += elem.offsetLeft; 73 t += elem.offsetTop; 74 elem = elem.offsetParent; 75 } 76 return {"left":l, "top":t, "width": w, "height":h}; 77 } 78 79 function fixMenuLogoPosition() { 80 if (logoFixTimeout) { 81 clearTimeout(logoFixTimeout); 82 } 83 84 var headerMain = document.querySelector('#site-header .header-main'); 85 if (headerMain == null) { 86 return false; 87 } 88 89 var headerMainClass = headerMain.className; 90 if (headerMainClass.indexOf('logo-position-menu_center') == -1 || headerMainClass.indexOf('header-layout-fullwidth_hamburger') != -1 || headerMainClass.indexOf('header-layout-vertical') != -1) { 91 return false; 92 } 93 94 logoFixTimeout = setTimeout(function() { 95 var page = document.getElementById('page'), 96 primaryMenu = document.getElementById('primary-menu'), 97 primaryNavigation = document.getElementById('primary-navigation'), 98 windowWidth = page.offsetWidth, 99 pageComputedStyles = window.getComputedStyle(page, null), 100 pageMargin = parseFloat(pageComputedStyles['marginLeft']); 101 102 if (isNaN(pageMargin)) { 103 pageMargin = 0; 104 } 105 106 if (headerMainClass.indexOf('header-layout-fullwidth') != -1) { 107 var logoItem = primaryMenu.querySelector('.menu-item-logo'), 108 items = primaryNavigation.querySelectorAll('#primary-menu > li'), 109 lastItem = null; 110 111 for (var i = items.length - 1; i >=0; i--) { 112 if (items[i].className.indexOf('mobile-only') == -1) { 113 lastItem = items[i]; 114 break; 115 } 116 } 117 118 primaryMenu.style.display = ''; 119 logoItem.style.marginLeft = ''; 120 logoItem.style.marginRight = ''; 121 122 if (windowWidth < 1212 || lastItem === null) { 123 primaryMenu.classList.remove("menu_center-preload"); 124 return; 125 } 126 127 window.thegemDesktopMenuLogoFixed = true; 128 129 primaryMenu.style.display = 'block'; 130 131 var pageCenter = windowWidth / 2 + pageMargin, 132 logoOffset = getElementPosition(logoItem), 133 offset = pageCenter - logoOffset.left - logoItem.offsetWidth / 2; 134 135 logoItem.style.marginLeft = offset + 'px'; 136 137 var primaryMenuOffsetWidth = primaryMenu.offsetWidth, 138 primaryMenuOffsetLeft = getElementPosition(primaryMenu).left, 139 lastItemOffsetWidth = lastItem.offsetWidth, 140 lastItemOffsetLeft = getElementPosition(lastItem).left, 141 rightItemsOffset = primaryMenuOffsetWidth - lastItemOffsetLeft - lastItemOffsetWidth + primaryMenuOffsetLeft; 142 143 logoItem.style.marginRight = rightItemsOffset + 'px'; 144 } else { 145 if (windowWidth < 1212) { 146 primaryNavigation.style.textAlign = ''; 147 primaryMenu.style.position = ''; 148 primaryMenu.style.left = ''; 149 primaryMenu.classList.remove("menu_center-preload"); 150 return; 151 } 152 153 window.thegemDesktopMenuLogoFixed = true; 154 155 primaryNavigation.style.textAlign = 'left'; 156 primaryMenu.style.left = 0 + 'px'; 157 158 var pageCenter = windowWidth / 2, 159 primaryMenuOffsetLeft = getElementPosition(primaryMenu).left, 160 logoOffset = getElementPosition(document.querySelector('#site-header .header-main #primary-navigation .menu-item-logo')), 161 pageOffset = getElementPosition(page), 162 offset = pageCenter - (logoOffset.left - pageOffset.left) - document.querySelector('#site-header .header-main #primary-navigation .menu-item-logo').offsetWidth / 2; 163
164 if (primaryMenuOffsetLeft + offset >= 0) { 165 primaryMenu.style.position = 'relative'; 166 primaryMenu.style.left = offset + 'px'; 167 } else { 168 primaryMenu.style.position = ''; 169 primaryMenu.style.left = ''; 170 } 171 } 172 primaryMenu.classList.remove("menu_center-preload"); 173 //primaryMenu.style.opacity = '1'; 174 }, 50); 175 } 176 177 window.fixMenuLogoPosition = fixMenuLogoPosition; 178 179 if (window.gemOptions.clientWidth > 1212) { 180 window.addEventListener('load', function(event) { 181 window.fixMenuLogoPosition(); 182 }, false); 183 } 184})(); 185 186 187(function($) { 188 /* PRIMARY MENU */ 189 190 var isVerticalMenu = $('.header-main').hasClass('header-layout-vertical'), 191 isHamburgerMenu = $('.header-main').hasClass('header-layout-fullwidth_hamburger'), 192 isPerspectiveMenu = $('#thegem-perspective').length > 0; 193 194 $(window).on('resize', function() { 195 window.updateGemClientSize(false); 196 window.updateGemInnerSize(); 197 }); 198 199 window.menuResizeTimeoutHandler = false; 200 201 var megaMenuSettings = {}; 202 203 function getOffset(elem) { 204 if (elem.getBoundingClientRect && window.gemBrowser.platform.name != 'ios'){ 205 var bound = elem.getBoundingClientRect(), 206 html = elem.ownerDocument.documentElement, 207 htmlScroll = getScroll(html), 208 elemScrolls = getScrolls(elem), 209 isFixed = (styleString(elem, 'position') == 'fixed'); 210 return { 211 x: bound.left + elemScrolls.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft, 212 y: bound.top + elemScrolls.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop 213 }; 214 } 215 216 var element = elem, position = {x: 0, y: 0}; 217 if (isBody(elem)) return position; 218 219 while (element && !isBody(element)){ 220 position.x += element.offsetLeft; 221 position.y += element.offsetTop; 222 223 if (window.gemBrowser.name == 'firefox'){ 224 if (!borderBox(element)){ 225 position.x += leftBorder(element); 226 position.y += topBorder(element); 227 } 228 var parent = element.parentNode; 229 if (parent && styleString(parent, 'overflow') != 'visible'){ 230 position.x += leftBorder(parent); 231 position.y += topBorder(parent); 232 } 233 } else if (element != elem && window.gemBrowser.name == 'safari'){ 234 position.x += leftBorder(element); 235 position.y += topBorder(element); 236 } 237 238 element = element.offsetParent; 239 } 240 if (window.gemBrowser.name == 'firefox' && !borderBox(elem)){ 241 position.x -= leftBorder(elem); 242 position.y -= topBorder(elem); 243 } 244 return position; 245 }; 246 247 function getScroll(elem){ 248 return {x: window.pageXOffset || document.documentElement.scrollLeft, y: window.pageYOffset || document.documentElement.scrollTop}; 249 }; 250 251 function getScrolls(elem){ 252 var element = elem.parentNode, position = {x: 0, y: 0}; 253 while (element && !isBody(element)){ 254 position.x += element.scrollLeft; 255 position.y += element.scrollTop; 256 element = element.parentNode; 257 } 258 return position; 259 }; 260 261 function styleString(element, style) { 262 return $(element).css(style); 263 }; 264 265 function styleNumber(element, style){ 266 return parseInt(styleString(element, style)) || 0; 267 }; 268 269 function borderBox(element){ 270 return styleString(element, '-moz-box-sizing') == 'border-box'; 271 }; 272
273 function topBorder(element){ 274 return styleNumber(element, 'border-top-width'); 275 }; 276 277 function leftBorder(element){ 278 return styleNumber(element, 'border-left-width'); 279 }; 280 281 function isBody(element){ 282 return (/^(?:body|html)$/i).test(element.tagName); 283 }; 284 285 286 function checkMegaMenuSettings() { 287 if (window.customMegaMenuSettings == undefined || window.customMegaMenuSettings == null) { 288 return false; 289 } 290 291 var uri = window.location.pathname; 292 293 window.customMegaMenuSettings.forEach(function(item) { 294 for (var i = 0; i < item.urls.length; i++) { 295 if (uri.match(item.urls[i])) { 296 megaMenuSettings[item.menuItem] = item.data; 297 } 298 } 299 }); 300 } 301 302 function fixMegaMenuWithSettings() { 303 if (isResponsiveMenuVisible() && !window.thegemWasDesktop) { 304 return false; 305 } 306 307 window.megaMenuWithSettingsFixed = true; 308 309 checkMegaMenuSettings(); 310 311 $('#primary-menu > li.megamenu-enable').each(function() { 312 var m = this.className.match(/(menu-item-(\d+))/); 313 if (!m) { 314 return; 315 } 316 317 var itemId = parseInt(m[2]); 318 if (megaMenuSettings[itemId] == undefined || megaMenuSettings[itemId] == null) { 319 return; 320 } 321 322 var $item = $('> ul', this); 323 324 if (megaMenuSettings[itemId].masonry != undefined) { 325 if (megaMenuSettings[itemId].masonry) { 326 $item.addClass('megamenu-masonry'); 327 } else { 328 $item.removeClass('megamenu-masonry'); 329 } 330 } 331 332 if (megaMenuSettings[itemId].style != undefined) { 333 $(this).removeClass('megamenu-style-default megamenu-style-grid').addClass('megamenu-style-' + megaMenuSettings[itemId].style); 334 } 335 336 var css = {}; 337 338 if (megaMenuSettings[itemId].backgroundImage != undefined) { 339 css.backgroundImage = megaMenuSettings[itemId].backgroundImage; 340 } 341 342 if (megaMenuSettings[itemId].backgroundPosition != undefined) { 343 css.backgroundPosition = megaMenuSettings[itemId].backgroundPosition; 344 } 345 346 if (megaMenuSettings[itemId].padding != undefined) { 347 css.padding = megaMenuSettings[itemId].padding; 348 } 349 350 if (megaMenuSettings[itemId].borderRight != undefined) { 351 css.borderRight = megaMenuSettings[itemId].borderRight; 352 } 353 354 $item.css(css); 355 }); 356 } 357 358 function isResponsiveMenuVisible() { 359 // var menuToggleDisplay = $('.menu-toggle').css('display'); 360 // return menuToggleDisplay == 'block' || menuToggleDisplay == 'inline-block'; 361 return $('.primary-navigation .menu-toggle').is(':visible'); 362 } 363 window.isResponsiveMenuVisible = isResponsiveMenuVisible; 364 365 function isTopAreaVisible() { 366 return window.gemSettings.topAreaMobileDisable ? window.gemOptions.clientWidth >= 768 : true; 367 } 368 window.isTopAreaVisible = isTopAreaVisible; 369 370 function isVerticalToggleVisible() { 371 return window.gemOptions.clientWidth > 1600; 372 } 373 374 $('#primary-menu > li.megamenu-enable').on('mouseenter', function() { 375 fix_megamenu_position(this); 376 }); 377 378 $('#primary-menu > li.megamenu-enable:hover').each(function() { 379 fix_megamenu_position(this); 380 }); 381 382 $('#primary-menu > li.megamenu-enable').each(function() { 383 var $item = $('> ul', this); 384 if($item.length == 0) return; 385 $item.addClass('megamenu-item-inited'); 386 }); 387 388 function fix_megamenu_position(elem, containerWidthCallback) { 389 if (!$('.megamenu-inited', elem).length && isResponsiveMenuVisible()) { 390 return false; 391 } 392 393 var $item = $('> ul', elem); 394 if($item.length == 0) return; 395 var self = $item.get(0); 396 397 $item.addClass('megamenu-item-inited'); 398 399 var default_item_css = { 400 width: 'auto', 401 height: 'auto' 402 }; 403 404 if (!isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu) { 405 default_item_css.left = 0; 406 } 407 408 $item 409 .removeClass('megamenu-masonry-inited megamenu-fullwidth') 410 .css(default_item_css); 411 412 $(' > li', $item).css({ 413 left: 0, 414 top: 0 415 }).each(function() { 416 var old_width = $(this).data('old-width') || -1; 417 if (old_width != -1) { 418 $(this).width(old_width).data('old-width', -1); 419 } 420 }); 421 422 if (isResponsiveMenuVisible()) { 423 return; 424 } 425 426 if (containerWidthCallback !== undefined) { 427 var container_width = containerWidthCallback(); 428 } else if (isVerticalMenu) { 429 var container_width = window.gemOptions.clientWidth - $('#site-header-wrapper').outerWidth(); 430 } else if (isPerspectiveMenu) { 431 var container_width = window.gemOptions.clientWidth - $('#primary-navigation').outerWidth(); 432 } else if (isHamburgerMenu) { 433 var container_width = window.gemOptions.clientWidth - $('#primary-menu').outerWidth(); 434 } else { 435 var $container = $item.closest('.header-main'),
436 container_width = $container.width(), 437 container_padding_left = parseInt($container.css('padding-left')), 438 container_padding_right = parseInt($container.css('padding-right')), 439 parent_width = $item.parent().outerWidth(); 440 } 441 442 var megamenu_width = $item.outerWidth(); 443 444 if (megamenu_width > container_width) { 445 megamenu_width = container_width; 446 var new_megamenu_width = container_width - parseInt($item.css('padding-left')) - parseInt($item.css('padding-right')); 447 var columns = $item.data('megamenu-columns') || 4; 448 var margin = 0; 449 $(' > li.menu-item', $item).each(function (index) { 450 if (index < columns) { 451 margin += parseInt($(this).css('margin-left')); 452 } 453 }); 454 var column_width = parseFloat(new_megamenu_width - margin) / columns; 455 var column_width_int = parseInt(column_width); 456 $(' > li', $item).each(function() { 457 $(this).data('old-width', $(this).width()).css('width', column_width_int); 458 }); 459 $item.addClass('megamenu-fullwidth').width(new_megamenu_width - (column_width - column_width_int) * columns); 460 } 461 462 if (!isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu && containerWidthCallback === undefined) { 463 if (megamenu_width > parent_width) { 464 var left = -(megamenu_width - parent_width) / 2; 465 } else { 466 var left = 0; 467 } 468 469 var container_offset = getOffset($container[0]); 470 var megamenu_offset = getOffset(self); 471 472 if ((megamenu_offset.x - container_offset.x - container_padding_left + left) < 0) { 473 left = -(megamenu_offset.x - container_offset.x - container_padding_left); 474 } 475 476 if ((megamenu_offset.x + megamenu_width + left) > (container_offset.x + $container.outerWidth() - container_padding_right)) { 477 left -= (megamenu_offset.x + megamenu_width + left) - (container_offset.x + $container.outerWidth() - container_padding_right); 478 } 479 480 $item.css('left', left).css('left'); 481 } 482 483 if ($item.hasClass('megamenu-masonry')) { 484 var positions = {}, 485 max_bottom = 0; 486 487 $item.width($item.width() - 1); 488 var new_row_height = $('.megamenu-new-row', $item).outerHeight() + parseInt($('.megamenu-new-row', $item).css('margin-bottom')); 489 490 $('> li.menu-item', $item).each(function() { 491 var pos = $(this).position(); 492 if (positions[pos.left] != null && positions[pos.left] != undefined) { 493 var top_position = positions[pos.left]; 494 } else { 495 var top_position = pos.top; 496 } 497 positions[pos.left] = top_position + $(this).outerHeight() + new_row_height + parseInt($(this).css('margin-bottom')); 498 if (positions[pos.left] > max_bottom) 499 max_bottom = positions[pos.left]; 500 $(this).css({ 501 left: pos.left, 502 top: top_position 503 }) 504 }); 505 506 $item.height(max_bottom - new_row_height - parseInt($item.css('padding-top')) - 1); 507 $item.addClass('megamenu-masonry-inited'); 508 } 509 510 if ($item.hasClass('megamenu-empty-right')) { 511 var mega_width = $item.width(); 512 var max_rights = { 513 columns: [], 514 position: -1 515 }; 516 517 $('> li.menu-item', $item).removeClass('megamenu-no-right-border').each(function() { 518 var pos = $(this).position(); 519 var column_right_position = pos.left + $(this).width(); 520 521 if (column_right_position > max_rights.position) { 522 max_rights.position = column_right_position; 523 max_rights.columns = []; 524 } 525 526 if (column_right_position == max_rights.position) { 527 max_rights.columns.push($(this)); 528 } 529 }); 530 531 if (max_rights.columns.length && max_rights.position >= (mega_width - 7)) { 532 max_rights.columns.forEach(function($li) { 533 $li.addClass('megamenu-no-right-border'); 534 }); 535 } 536 } 537 538 if (isVerticalMenu || isHamburgerMenu || isPerspectiveMenu) { 539 var clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight, 540 itemOffset = $item.offset(), 541 itemHeight = $item.outerHeight(), 542 scrollTop = $(window).scrollTop(); 543 544 if (itemOffset.top - scrollTop + itemHeight > clientHeight) { 545 $item.css({ 546 top: clientHeight - itemOffset.top + scrollTop - itemHeight - 20 547 }); 548 } 549 } 550 551 $item.addClass('megamenu-inited'); 552 } 553 554 window.fix_megamenu_position = fix_megamenu_position; 555 556 $('#primary-menu > li.megamenu-template-enable').each(function() { 557 558 if ($(this).parents('.thegem-te-menu > nav').hasClass("thegem-te-menu__overlay")) { 559 $(this).removeClass('megamenu-template-enable'); 560 $(this).find('.megamenu-template').remove(); 561 return; 562 } 563 564 let $item = $('.megamenu-template', this); 565 if ($item.length == 0) return; 566 fix_megamenu_template_position(this); 567 568 if ($item.data('template')) { 569 let templateID = $item.data('template'); 570 $.ajax({ 571 url: thegem_dlmenu_settings.ajax_url, 572 data: { 573 'action': 'get_megamenu_template', 574 'id': templateID 575 }, 576 dataType: 'json', 577 method: 'POST', 578 success: function (response) { 579 if (response.status === 'success') { 580 $item.html(response.data); 581 } 582 }, 583 error: function () { 584 console.log('loading megamenu template ajax error'); 585 } 586 }); 587 } 588 $item.addClass('megamenu-template-item-inited'); 589 590 $(this).on('mouseenter', function() { 591 fix_megamenu_template_position(this); 592 }); 593 }); 594 595 function fix_megamenu_template_position(elem, containerWidthCallback) { 596 if (!$('.megamenu-template-inited', elem).length && isResponsiveMenuVisible()) { 597 return false;
598 } 599 600 let $item = $('.megamenu-template', elem); 601 if ($item.length == 0) return; 602 let self = $item.get(0); 603 604 $item.addClass('megamenu-template-item-inited'); 605 let isWidth100 = $item.hasClass("template-width-fullwidth"); 606 607 let default_item_css = { 608 // width: 'auto', 609 // height: 'auto' 610 }; 611 612 if (!isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu) { 613 default_item_css.left = 0; 614 } 615 616 $item.css(default_item_css); 617 618 if (isResponsiveMenuVisible()) { 619 return; 620 } 621 622 let $container = $item.closest('.header-main'), 623 container_width, 624 container_padding_left, 625 container_padding_right, 626 parent_width; 627 if (containerWidthCallback !== undefined) { 628 container_width = containerWidthCallback(); 629 } else if (isVerticalMenu) { 630 container_width = window.gemOptions.clientWidth - $('#site-header-wrapper').outerWidth(); 631 } else if (isPerspectiveMenu) { 632 container_width = window.gemOptions.clientWidth - $('#primary-navigation').outerWidth(); 633 } else if (isHamburgerMenu) { 634 container_width = window.gemOptions.clientWidth - $('#primary-menu').outerWidth(); 635 } else { 636 container_width = $container.width(); 637 container_padding_left = parseFloat($container.css('padding-left')); 638 container_padding_right = parseFloat($container.css('padding-right')); 639 parent_width = $item.parent().outerWidth(); 640 } 641 642 let megamenu_width = $item.outerWidth(); 643 644 if (isWidth100 || megamenu_width > document.body.clientWidth) { 645 $item.css('width', document.body.clientWidth); 646 } else if ($item.hasClass("template-width-boxed") && !isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu) { 647 $item.css('width', container_width); 648 } 649 megamenu_width = $item.outerWidth(); 650 651 if (!isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu && containerWidthCallback === undefined) { 652 let left = 0; 653 654 let container_offset = getOffset($container[0]); 655 let megamenu_offset = getOffset(self); 656 657 if (isWidth100) { 658 left = -megamenu_offset.x; 659 } else { 660 if (megamenu_width > container_width) { 661 left = container_offset.x - megamenu_offset.x - (megamenu_width - container_width)/2; 662 } else if (megamenu_width === container_width) { 663 left = container_offset.x - megamenu_offset.x + container_padding_left; 664 } else { 665 666 if (megamenu_width > parent_width) { 667 left = -(megamenu_width - parent_width) / 2; 668 } 669 670 if ((megamenu_offset.x - container_offset.x - container_padding_left + left) < 0) { 671 left = -(megamenu_offset.x - container_offset.x - container_padding_left); 672 } 673 674 if ((megamenu_offset.x + megamenu_width + left) > (container_offset.x + $container.outerWidth() - container_padding_right)) { 675 left -= (megamenu_offset.x + megamenu_width + left) - (container_offset.x + $container.outerWidth() - container_padding_right); 676 } 677 } 678 } 679 680 $item.css('left', left).css('left'); 681 } 682 683 if (isVerticalMenu || isHamburgerMenu || isPerspectiveMenu) { 684 if (megamenu_width > container_width) { 685 $item.css('width', container_width); 686 } 687 let clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight, 688 itemOffset = $item.offset(), 689 itemHeight = $item.outerHeight(), 690 scrollTop = $(window).scrollTop(); 691 692 if (itemOffset.top - scrollTop + itemHeight > clientHeight) { 693 $item.css({ 694 top: clientHeight - itemOffset.top + scrollTop - itemHeight - 20 695 }); 696 } 697 } 698 699 $item.addClass('megamenu-template-inited'); 700 } 701 702 function primary_menu_reinit() { 703 if(isResponsiveMenuVisible()) { 704 if (window.gemMobileMenuType == 'default') { 705 var $submenuDisabled = $('#primary-navigation .dl-submenu-disabled'); 706 if ($submenuDisabled.length) { 707 $submenuDisabled.addClass('dl-submenu').removeClass('dl-submenu-disabled'); 708 } 709 } 710 if ($('#primary-menu').hasClass('no-responsive')) { 711 $('#primary-menu').removeClass('no-responsive'); 712 } 713 if (!$('#primary-navigation').hasClass('responsive')) { 714 $('#primary-navigation').addClass('responsive'); 715 } 716 $('.menu-overlay').addClass('mobile'); 717 if (window.thegemDesktopMenuLogoFixed) { 718 window.fixMenuLogoPosition(); 719 } 720 721 if($('body').hasClass('mobile-cart-position-top')) { 722 $('.mobile-cart > .minicart-menu-link.temp').remove(); 723 $('#primary-navigation .menu-item-cart > *').not('.thegem-template-menu-global-section .menu-item-cart > *').appendTo('.mobile-cart'); 724 } 725 } else { 726 window.thegemWasDesktop = true; 727 728 if (window.gemMobileMenuType == 'overlay' && !$('.header-layout-overlay').length && $('.menu-overlay').hasClass('active')) { 729 $('.mobile-menu-layout-overlay .menu-toggle').trigger('click'); 730 } 731 732 if (window.gemMobileMenuType == 'slide' && $('#site-header').hasClass('menu-slide-opened')) { 733 $('.mobile-menu-slide-wrapper').removeClass('opened'); 734 $('#site-header').removeClass('menu-slide-opened'); 735 } 736 737 $('#primary-navigation').addClass('without-transition'); 738 739 if (window.gemMobileMenuType == 'default') { 740 $('#primary-navigation .dl-submenu').addClass('dl-submenu-disabled').removeClass('dl-submenu'); 741 } 742 $('#primary-menu').addClass('no-responsive'); 743 $('#primary-navigation').removeClass('responsive'); 744 $('.menu-overlay').removeClass('mobile'); 745 746 window.fixMenuLogoPosition(); 747 748 if (!window.megaMenuWithSettingsFixed) { 749 fixMegaMenuWithSettings(); 750 } 751 752 $('#primary-navigation').removeClass('without-transition'); 753 754 if($('body').hasClass('mobile-cart-position-top')) { 755 $('.mobile-cart > .minicart-menu-link.temp').remove(); 756 $('.mobile-cart > *').appendTo('#primary-navigation .menu-item-cart'); 757 } 758 } 759 } 760 761 $(function() { 762 function getScrollY(elem){ 763 return window.pageYOffset || document.documentElement.scrollTop; 764 } 765 $(document).on('click touchend', '.mobile-cart > a', function(e) { 766 e.preventDefault(); 767 $('.mobile-cart .minicart').addClass('minicart-show'); 768 $('body').data('scroll-position', getScrollY()) 769 $('body').addClass('mobile-minicart-opened'); 770 }); 771 $(document).on('click', '.mobile-cart-header-close, .mobile-minicart-overlay', function(e) { 772 e.preventDefault(); 773 $('.mobile-cart .minicart').removeClass('minicart-show'); 774 $('body').removeClass('mobile-minicart-opened'); 775 if($('body').data('scroll-position')) { 776 window.scrollTo(0, $('body').data('scroll-position')) 777 } 778 }); 779 780 if (isResponsiveMenuVisible() && typeof window.gemResponsiveCartClicked !== 'undefined' && window.gemResponsiveCartClicked) { 781 $('.mobile-cart-position-top .mobile-cart > a').trigger('click'); 782 window.gemResponsiveCartClicked = null; 783 } 784 785 }); 786 787 if (window.gemMobileMenuType == 'default') { 788 $('#primary-navigation .submenu-languages').addClass('dl-submenu'); 789 } 790 $('#primary-navigation ul#primary-menu > li.menu-item-language, #primary-navigation ul#primary-menu > li.menu-item-type-wpml_ls_menu_item').addClass('menu-item-parent'); 791 $('#primary-navigation ul#primary-menu > li.menu-item-language > a, #primary-navigation ul#primary-menu > li.menu-item-type-wpml_ls_menu_item > a').after('<span class="menu-item-parent-toggle" tabindex="0"></span>'); 792 793 fixMegaMenuWithSettings(); 794 795 if (window.gemMobileMenuType == 'default') { 796 var updateMobileMenuPosition = function() { 797 var siteHeaderHeight = $('#site-header').outerHeight(), 798 windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; 799 800 if ($('#thegem-perspective #primary-menu').length) { 801 $('#thegem-perspective > .mobile-menu-layout-default').css({ 802 top: siteHeaderHeight 803 }); 804 } 805 806 $('#primary-menu').css({ 807 maxHeight: windowHeight - siteHeaderHeight 808 }); 809 }; 810 811 $(window).on('resize', function() { 812 if (isResponsiveMenuVisible() && $('#primary-menu').hasClass('dl-menuopen')) { 813 setTimeout(updateMobileMenuPosition, 50); 814 } else { 815 $('#primary-menu').css({ 816 maxHeight: '' 817 }); 818 } 819 }); 820 821 $('#site-header .dl-trigger').on('click', function() { 822 updateMobileMenuPosition(); 823 }); 824 825 if (typeof $.fn.dlmenu === 'function') { 826 $('#primary-navigation').dlmenu({ 827 animationClasses: { 828 classin : 'dl-animate-in', 829 classout : 'dl-animate-out' 830 }, 831 onLevelClick: function (el, name) { 832 //$('html, body').animate({ scrollTop : 0 }); 833 }, 834 backLabel: thegem_dlmenu_settings.backLabel, 835 showCurrentLabel: thegem_dlmenu_settings.showCurrentLabel 836 }); 837 } 838 } 839 primary_menu_reinit(); 840 841 $('#primary-menu > li:not(.menu-item-type-template)').on( 'mouseenter focusin', function() { 842 var $items = $('ul:not(.minicart ul):not(.woocommerce-mini-cart), .minicart, .minisearch, .hidden-sidebar', this); 843 $items.removeClass('invert vertical-invert'); 844 845 if (!$(this).hasClass('megamenu-enable') && !$(this).hasClass('megamenu-template-enable')) { 846 $items.css({top: ''}); 847 } 848 849 if ($(this).hasClass('megamenu-enable') || $(this).hasClass('megamenu-template-enable') || 850 $(this).closest('.header-layout-overlay').length || 851 $(this).closest('.mobile-menu-layout-overlay').length && isResponsiveMenuVisible()) { 852 return; 853 } 854 855 var topItemTranslate = 0; 856 if ($('>ul', this).css('transform')) { 857 topItemTranslate = parseInt($('>ul', this).css('transform').split(',')[5]); 858 } 859 if (isNaN(topItemTranslate)) { 860 topItemTranslate = 0; 861 } 862 var windowScroll = $(window).scrollTop(), 863 siteHeaderOffset = $('#site-header').offset(), 864 siteHeaderOffsetTop = siteHeaderOffset.top - windowScroll, 865 siteHeaderHeight = $('#site-header').outerHeight(), 866 pageOffset = $('#page').offset(), 867 pageWidth = $('#page').width(); 868 869 $items.each(function() { 870 var $item = $(this), 871 self = this, 872 $parentList = $item.parent().closest('ul'); 873 874 var itemOffset = $item.offset(), 875 itemOffsetTop = itemOffset.top - windowScroll, 876 itemOffsetLeft = itemOffset.left; 877 878 879 var leftItemTranslate = 0; 880 if ($item.css('transform')) { 881 leftItemTranslate = parseInt(getComputedStyle(this).transform.split(',')[4]); 882 var levelUL = getLevelULByPrimaryMenu(self); 883 if (levelUL > 0) { 884 leftItemTranslate = leftItemTranslate*levelUL; 885 } 886 } 887 if (isNaN(leftItemTranslate)) { 888 leftItemTranslate = 0; 889 } 890 891 if ($parentList.hasClass('invert')) { 892 if ($parentList.offset().left - $item.outerWidth() > pageOffset.left) { 893 $item.addClass('invert'); 894 } 895 } else { 896 if (itemOffsetLeft - leftItemTranslate - pageOffset.left + $item.outerWidth() > pageWidth) { 897 $item.addClass('invert'); 898 } 899 } 900 901 if (isVerticalMenu || isPerspectiveMenu || isHamburgerMenu) { 902 if (itemOffsetTop - topItemTranslate + $item.outerHeight() > $(window).height()) { 903 $item.addClass('vertical-invert'); 904 var itemOffsetFix = itemOffsetTop - topItemTranslate + $item.outerHeight() - $(window).height(); 905 if (itemOffsetTop - topItemTranslate - itemOffsetFix < 0) { 906 itemOffsetFix = 0; 907 } 908 $item.css({ top: -itemOffsetFix + 'px' }); 909 } 910 } else { 911 if (itemOffsetTop - topItemTranslate + $item.outerHeight() > $(window).height()) { 912 $item.addClass('vertical-invert'); 913 var itemOffsetFix = itemOffsetTop - topItemTranslate + $item.outerHeight() - $(window).height(); 914 if (itemOffsetTop - topItemTranslate - itemOffsetFix < siteHeaderOffsetTop + siteHeaderHeight) { 915 itemOffsetFix -= siteHeaderOffsetTop + siteHeaderHeight - (itemOffsetTop - topItemTranslate - itemOffsetFix); 916 if (itemOffsetFix < 0) { 917 itemOffsetFix = 0; 918 } 919 } 920 if(itemOffsetFix > 0) { 921 $item.css({ top: -itemOffsetFix + 'px' }); 922 } 923 } 924 } 925 }); 926 }); 927 928 function getLevelULByPrimaryMenu(item) { 929 var parentUL = $(item).parent('li').parent('ul'); 930 var level = 0; 931 932 while (!parentUL.is('#primary-menu')) { 933 parentUL = parentUL.parent('li').parent('ul'); 934 level++; 935 } 936 937 return level; 938 } 939 940 $('.hamburger-toggle').on('click', function(e) { 941 e.preventDefault(); 942 $(this).closest('#primary-navigation').toggleClass('hamburger-active'); 943 $('.hamburger-overlay').toggleClass('active'); 944 }); 945 946 $('.overlay-toggle, .mobile-menu-layout-overlay .menu-toggle').on('click', function(e) { 947 var $element = $(this); 948 e.preventDefault(); 949 if($('.menu-overlay').hasClass('active')) { 950 $('.menu-overlay').removeClass('active'); 951 $('.primary-navigation').addClass('close'); 952 $('.primary-navigation').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(e) { 953 $('.primary-navigation').removeClass('overlay-active close'); 954 $('.overlay-menu-wrapper').removeClass('active'); 955 }); 956 $(document).off('keydown.overlay-close'); 957 $('#primary-menu').off('click.overlay-close'); 958 } else { 959 $('.overlay-menu-wrapper').addClass('active'); 960 $('.primary-navigation').off('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend'); 961 $('.primary-navigation').addClass('overlay-active').removeClass('close'); 962 if (isResponsiveMenuVisible()) { 963 $('#site-header').removeClass('hidden'); 964 $('.menu-overlay').addClass('mobile'); 965 } else { 966 $('.menu-overlay').removeClass('mobile'); 967 } 968 $('.menu-overlay').addClass('active'); 969 $(document).on('keydown.overlay-close', function(event) { 970 if (event.keyCode == 27) { 971 $element.trigger('click'); 972 } 973 }); 974 $('#primary-menu').on('click.overlay-close', 'li:not(.menu-item-search):not(.mobile-collapsible)', function() { 975 $element.trigger('click'); 976 }); 977 } 978 }); 979 980 $('.mobile-menu-layout-slide-horizontal .primary-navigation #primary-menu li.menu-item-current, .mobile-menu-layout-slide-vertical .primary-navigation #primary-menu li.menu-item-current').each(function() { 981 if (!isResponsiveMenuVisible()) { 982 return; 983 } 984 985 $(this).addClass('opened'); 986 $('> ul', this).show(); 987 }); 988 989 function getScrollY(elem){ 990 return window.pageYOffset || document.documentElement.scrollTop; 991 } 992 993 $('.mobile-menu-layout-slide-horizontal .menu-toggle, .mobile-menu-layout-slide-vertical .menu-toggle, .mobile-menu-slide-wrapper .mobile-menu-slide-close').on('click', function(e) { 994 if (!isResponsiveMenuVisible()) { 995 return; 996 } 997 998 e.preventDefault(); 999 $('#site-header').removeClass('hidden'); 1000 $('.mobile-menu-slide-wrapper').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(e) { 1001 $(this).removeClass('animation'); 1002 }); 1003 $('.mobile-menu-slide-wrapper').addClass('animation').toggleClass('opened'); 1004 $('#site-header').toggleClass('menu-slide-opened'); 1005 if($('.mobile-menu-slide-wrapper').hasClass('opened')) { 1006 $('body').data('scroll-position', getScrollY()) 1007 $('body').addClass('menu-scroll-locked'); 1008 } else { 1009 $('body').removeClass('menu-scroll-locked'); 1010 if($('body').data('scroll-position')) { 1011 window.scrollTo(0, $('body').data('scroll-position')) 1012 } 1013 } 1014 setTimeout(function() { 1015 $(document).on('click.mobile-menu-out-click', function(e) { 1016 if($('.mobile-menu-slide-wrapper').hasClass('opened')) { 1017 if(!$(e.target).is('#site-header *') && !$(e.target).is('#thegem-perspective *')) { 1018 e.preventDefault(); 1019 $('.mobile-menu-slide-wrapper .mobile-menu-slide-close').trigger('click'); 1020 $(document).off('click.mobile-menu-out-click'); 1021 } 1022 } 1023 }); 1024 }, 500); 1025 }); 1026 1027 if (isResponsiveMenuVisible() && typeof window.gemResponsiveMenuClicked !== 'undefined' && window.gemResponsiveMenuClicked) { 1028 $('.primary-navigation .menu-toggle').trigger('click'); 1029 window.gemResponsiveMenuClicked = null; 1030 } 1031
1032 $(document).on('click', '.mobile-menu-layout-slide-horizontal .primary-navigation #primary-menu .menu-item-parent-toggle, .mobile-menu-layout-slide-vertical .primary-navigation #primary-menu .menu-item-parent-toggle', function(e) { 1033 if (!isResponsiveMenuVisible()) { 1034 return; 1035 } 1036 1037 e.preventDefault(); 1038 var self = this; 1039 $(this).closest('li').toggleClass('opened'); 1040 $(this).siblings('ul').slideToggle(200, function() { 1041 if (!$(self).closest('li').hasClass('opened')) { 1042 $(self).siblings('ul').find('li').removeClass('opened'); 1043 $(self).siblings('ul').css('display', ''); 1044 $(self).siblings('ul').find('ul').css('display', ''); 1045 } 1046 }); 1047 }); 1048 1049 $(document).on('click', '.menu-item.mobile-collapsible > a', function(e) { 1050 if (!isResponsiveMenuVisible()) { 1051 return; 1052 } 1053 1054 if($(this).next('.menu-item-parent-toggle').length) { 1055 e.preventDefault(); 1056 $(this).next('.menu-item-parent-toggle').trigger('click'); 1057 } 1058 }); 1059 1060 $('.header-layout-overlay #primary-menu .menu-item-parent-toggle, .mobile-menu-layout-overlay .primary-navigation #primary-menu .menu-item-parent-toggle').on('click', function(e) { 1061 //if(!$('#primary-menu').hasClass('no-responsive')) return ; 1062 1063 e.preventDefault(); 1064 e.stopPropagation(); 1065 1066 if (!$('#primary-menu').hasClass('no-responsive') && !$(this).hasClass('menu-item-parent-toggle')) { 1067 return; 1068 } 1069 1070 var $itemLink = $(this); 1071 var $item = $itemLink.closest('li'); 1072 if($item.hasClass('menu-item-parent') && ($item.closest('ul').hasClass('nav-menu') || $item.parent().closest('li').hasClass('menu-overlay-item-open'))) { 1073 e.preventDefault(); 1074 if($item.hasClass('menu-overlay-item-open')) { 1075 $(' > ul, .menu-overlay-item-open > ul', $item).each(function() { 1076 $(this).css({height: $(this).outerHeight()+'px'}); 1077 }); 1078 setTimeout(function() { 1079 $(' > ul, .menu-overlay-item-open > ul', $item).css({height: ''}); 1080 $('.menu-overlay-item-open', $item).add($item).removeClass('menu-overlay-item-open'); 1081 }, 50); 1082 } else { 1083 var $oldActive = $('.primary-navigation .menu-overlay-item-open').not($item.parents()); 1084 $('> ul', $oldActive).not($item.parents()).each(function() { 1085 $(this).css({height: $(this).outerHeight()+'px'}); 1086 }); 1087 setTimeout(function() { 1088 $('> ul', $oldActive).not($item.parents()).css({height: ''}); 1089 $oldActive.removeClass('menu-overlay-item-open'); 1090 }, 50); 1091 $('> ul', $item).css({height: 'auto'}); 1092 var itemHeight = $('> ul', $item).outerHeight(); 1093 $('> ul', $item).css({height: ''}); 1094 setTimeout(function() { 1095 $('> ul', $item).css({height: itemHeight+'px'}); 1096 $item.addClass('menu-overlay-item-open'); 1097 $('> ul', $item).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function() { 1098 $('> ul', $item).css({height: 'auto'}); 1099 }); 1100 }, 50); 1101 } 1102 } 1103 }); 1104 1105 $(document).on('keydown', '.menu-item-parent-toggle', function(e) { 1106 if (e.which === 13) { 1107 e.preventDefault(); 1108 $(this).trigger('click'); 1109 } 1110 }); 1111 1112 $('.vertical-toggle').on('click', function(e) { 1113 e.preventDefault(); 1114 $(this).closest('#site-header-wrapper').toggleClass('vertical-active'); 1115 }); 1116 1117 $(function() { 1118 $(window).on('resize', function() { 1119 if (window.menuResizeTimeoutHandler) { 1120 clearTimeout(window.menuResizeTimeoutHandler); 1121 } 1122 window.menuResizeTimeoutHandler = setTimeout(primary_menu_reinit, 50); 1123 }); 1124 }); 1125 1126 $('#primary-navigation').on('click', 'a', function(e) { 1127 var $item = $(this); 1128 if($('#primary-menu').hasClass('no-responsive') && window.gemSettings.isTouch && $item.next('ul').length) { 1129 e.preventDefault(); 1130 } 1131 }); 1132 1133 $(document).on('click', function(e) { 1134 if ($('.hamburger-overlay').hasClass('active') && !$(e.target).closest("#primary-menu").length && !$(e.target).closest(".hamburger-toggle").length) { 1135 $('.hamburger-toggle').trigger('click'); 1136 } 1137 1138 if ($("#site-header-wrapper").hasClass('vertical-active')) { 1139 if (!$("#site-header-wrapper").is(e.target) && $("#site-header-wrapper").has(e.target).length === 0) { 1140 $('.vertical-toggle').trigger('click'); 1141 } 1142 } 1143 }); 1144 1145 $(document).on('keydown', function (event) { 1146 if (event.keyCode === 27 && $('.hamburger-overlay').hasClass('active')) { 1147 $('.hamburger-toggle').trigger('click'); 1148 } 1149 }); 1150 1151})(jQuery); 1152 1153// Menu perspective 1154(function($) { 1155 var transitionEndEvent = { 1156 'WebkitTransition': 'webkitTransitionEnd', 1157 'MozTransition': 'transitionend', 1158 'OTransition': 'oTransitionEnd', 1159 'msTransition': 'MSTransitionEnd', 1160 'transition': 'transitionend' 1161 }[ window.supportedTransition ], 1162 clickEventName = 'click'; 1163 1164 function initPerspective() { 1165 var $menuToggleButton = $('.perspective-toggle'), 1166 $perspective = $('#thegem-perspective'), 1167 $page = $('#page'); 1168 1169 if (!$perspective.length) { 1170 return false;
1171 } 1172 1173 $menuToggleButton.on(clickEventName, function(event) { 1174 if ($perspective.hasClass('animate')) { 1175 return; 1176 } 1177 1178 var documentScrollTop = $(window).scrollTop(); 1179 $(window).scrollTop(0); 1180 1181 var pageWidth = $page.outerWidth(), 1182 perspectiveWidth = $perspective.outerWidth(), 1183 pageCss = { 1184 width: pageWidth 1185 }; 1186 1187 if (pageWidth < perspectiveWidth) { 1188 pageCss.marginLeft = $page[0].offsetLeft; 1189 } 1190 1191 $page.css(pageCss); 1192 1193 $perspective.addClass('modalview animate'); 1194 $page.scrollTop(documentScrollTop); 1195 //$(window).trigger('perspective-modalview-opened'); 1196 event.preventDefault(); 1197 event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true); 1198 }); 1199 1200 $('#primary-navigation').on(clickEventName, function(event) { 1201 if (isResponsiveMenuVisible()) { 1202 return; 1203 } 1204 event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true); 1205 }); 1206 1207 $('#thegem-perspective .perspective-menu-close').on(clickEventName, function(event) { 1208 $perspective.trigger('click'); 1209 event.preventDefault(); 1210 event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true); 1211 }); 1212 1213 $perspective.on(clickEventName, function(event) { 1214 if (!$perspective.hasClass('animate')) { 1215 return; 1216 } 1217 1218 var onEndTransitionCallback = function(event) { 1219 if (window.supportsTransitions && (event.originalEvent.target.id !== 'page' || event.originalEvent.propertyName.indexOf('transform' ) == -1)) { 1220 return; 1221 } 1222 1223 $(this).off(transitionEndEvent, onEndTransitionCallback); 1224 var pageScrollTop = $page.scrollTop(); 1225 $perspective.removeClass('modalview'); 1226 $page.css({ 1227 width: '', 1228 marginLeft: '' 1229 }); 1230 $(window).scrollTop(pageScrollTop); 1231 $page.scrollTop(0); 1232 $(window).trigger('resize'); 1233 //$(window).trigger('perspective-modalview-closed'); 1234 }; 1235 1236 if (window.supportsTransitions) { 1237 $perspective.on(transitionEndEvent, onEndTransitionCallback); 1238 } else { 1239 onEndTransitionCallback.call(); 1240 } 1241 1242 $perspective.removeClass('animate'); 1243 }); 1244 1245 $(document).on('keydown', function(event) { 1246 if (event.keyCode == 27 && $perspective.hasClass('modalview')) { 1247 $('#thegem-perspective .perspective-menu-close').trigger('click'); 1248 } 1249 }); 1250 1251 } 1252 1253 initPerspective(); 1254})(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.