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).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: parseInt(bound.left) + elemScrolls.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft, 212 y: parseInt(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').hover( 375 function() { 376 fix_megamenu_position(this); 377 }, 378 function() {} 379 ); 380 381 $('#primary-menu > li.megamenu-enable:hover').each(function() { 382 fix_megamenu_position(this); 383 }); 384 385 $('#primary-menu > li.megamenu-enable').each(function() { 386 var $item = $('> ul', this); 387 if($item.length == 0) return; 388 $item.addClass('megamenu-item-inited'); 389 }); 390 391 function fix_megamenu_position(elem, containerWidthCallback) { 392 if (!$('.megamenu-inited', elem).length && isResponsiveMenuVisible()) { 393 return false; 394 } 395 396 var $item = $('> ul', elem); 397 if($item.length == 0) return; 398 var self = $item.get(0); 399 400 $item.addClass('megamenu-item-inited'); 401 402 var default_item_css = { 403 width: 'auto', 404 height: 'auto' 405 }; 406 407 if (!isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu) { 408 default_item_css.left = 0; 409 } 410 411 $item 412 .removeClass('megamenu-masonry-inited megamenu-fullwidth') 413 .css(default_item_css); 414 415 $(' > li', $item).css({ 416 left: 0, 417 top: 0 418 }).each(function() { 419 var old_width = $(this).data('old-width') || -1; 420 if (old_width != -1) { 421 $(this).width(old_width).data('old-width', -1); 422 } 423 }); 424 425 if (isResponsiveMenuVisible()) { 426 return; 427 } 428 429 if (containerWidthCallback !== undefined) { 430 var container_width = containerWidthCallback(); 431 } else if (isVerticalMenu) { 432 var container_width = window.gemOptions.clientWidth - $('#site-header-wrapper').outerWidth(); 433 } else if (isPerspectiveMenu) { 434 var container_width = window.gemOptions.clientWidth - $('#primary-navigation').outerWidth(); 435 } else if (isHamburgerMenu) { 436 var container_width = window.gemOptions.clientWidth - $('#primary-menu').outerWidth(); 437 } else { 438 var $container = $item.closest('.header-main'), 439 container_width = $container.width(), 440 container_padding_left = parseInt($container.css('padding-left')), 441 container_padding_right = parseInt($container.css('padding-right')), 442 parent_width = $item.parent().outerWidth(); 443 } 444 445 var megamenu_width = $item.outerWidth(); 446 447 if (megamenu_width > container_width) { 448 megamenu_width = container_width; 449 var new_megamenu_width = container_width - parseInt($item.css('padding-left')) - parseInt($item.css('padding-right')); 450 var columns = $item.data('megamenu-columns') || 4; 451 var column_width = parseFloat(new_megamenu_width - columns * parseInt($(' > li.menu-item:first', $item).css('margin-left'))) / columns; 452 var column_width_int = parseInt(column_width); 453 $(' > li', $item).each(function() { 454 $(this).data('old-width', $(this).width()).css('width', column_width_int); 455 }); 456 $item.addClass('megamenu-fullwidth').width(new_megamenu_width - (column_width - column_width_int) * columns); 457 } 458 459 if (!isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu && containerWidthCallback === undefined) { 460 if (megamenu_width > parent_width) { 461 var left = -(megamenu_width - parent_width) / 2; 462 } else { 463 var left = 0; 464 } 465 466 var container_offset = getOffset($container[0]); 467 var megamenu_offset = getOffset(self); 468 469 if ((megamenu_offset.x - container_offset.x - container_padding_left + left) < 0) { 470 left = -(megamenu_offset.x - container_offset.x - container_padding_left); 471 } 472 473 if ((megamenu_offset.x + megamenu_width + left) > (container_offset.x + $container.outerWidth() - container_padding_right)) { 474 left -= (megamenu_offset.x + megamenu_width + left) - (container_offset.x + $container.outerWidth() - container_padding_right); 475 } 476 477 $item.css('left', left).css('left'); 478 } 479 480 if ($item.hasClass('megamenu-masonry')) { 481 var positions = {}, 482 max_bottom = 0; 483 484 $item.width($item.width() - 1); 485 var new_row_height = $('.megamenu-new-row', $item).outerHeight() + parseInt($('.megamenu-new-row', $item).css('margin-bottom')); 486 487 $('> li.menu-item', $item).each(function() { 488 var pos = $(this).position(); 489 if (positions[pos.left] != null && positions[pos.left] != undefined) { 490 var top_position = positions[pos.left]; 491 } else { 492 var top_position = pos.top; 493 } 494 positions[pos.left] = top_position + $(this).outerHeight() + new_row_height + parseInt($(this).css('margin-bottom')); 495 if (positions[pos.left] > max_bottom) 496 max_bottom = positions[pos.left]; 497 $(this).css({ 498 left: pos.left, 499 top: top_position 500 }) 501 }); 502 503 $item.height(max_bottom - new_row_height - parseInt($item.css('padding-top')) - 1); 504 $item.addClass('megamenu-masonry-inited'); 505 } 506 507 if ($item.hasClass('megamenu-empty-right')) { 508 var mega_width = $item.width(); 509 var max_rights = { 510 columns: [], 511 position: -1 512 }; 513 514 $('> li.menu-item', $item).removeClass('megamenu-no-right-border').each(function() { 515 var pos = $(this).position(); 516 var column_right_position = pos.left + $(this).width(); 517 518 if (column_right_position > max_rights.position) { 519 max_rights.position = column_right_position; 520 max_rights.columns = []; 521 } 522 523 if (column_right_position == max_rights.position) { 524 max_rights.columns.push($(this)); 525 } 526 }); 527 528 if (max_rights.columns.length && max_rights.position >= (mega_width - 7)) { 529 max_rights.columns.forEach(function($li) { 530 $li.addClass('megamenu-no-right-border'); 531 });
532 } 533 } 534 535 if (isVerticalMenu || isHamburgerMenu || isPerspectiveMenu) { 536 var clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight, 537 itemOffset = $item.offset(), 538 itemHeight = $item.outerHeight(), 539 scrollTop = $(window).scrollTop(); 540 541 if (itemOffset.top - scrollTop + itemHeight > clientHeight) { 542 $item.css({ 543 top: clientHeight - itemOffset.top + scrollTop - itemHeight - 20 544 }); 545 } 546 } 547 548 $item.addClass('megamenu-inited'); 549 } 550 551 window.fix_megamenu_position = fix_megamenu_position; 552 553 function primary_menu_reinit() { 554 if(isResponsiveMenuVisible()) { 555 if (window.gemMobileMenuType == 'default') { 556 var $submenuDisabled = $('#primary-navigation .dl-submenu-disabled'); 557 if ($submenuDisabled.length) { 558 $submenuDisabled.addClass('dl-submenu').removeClass('dl-submenu-disabled'); 559 } 560 } 561 if ($('#primary-menu').hasClass('no-responsive')) { 562 $('#primary-menu').removeClass('no-responsive'); 563 } 564 if (!$('#primary-navigation').hasClass('responsive')) { 565 $('#primary-navigation').addClass('responsive'); 566 } 567 $('.menu-overlay').addClass('mobile'); 568 if (window.thegemDesktopMenuLogoFixed) { 569 window.fixMenuLogoPosition(); 570 } 571 572 if($('body').hasClass('mobile-cart-position-top')) { 573 $('.mobile-cart > .minicart-menu-link.temp').remove(); 574 $('#primary-navigation .menu-item-cart > *').appendTo('.mobile-cart'); 575 } 576 } else { 577 window.thegemWasDesktop = true; 578 579 if (window.gemMobileMenuType == 'overlay' && !$('.header-layout-overlay').length && $('.menu-overlay').hasClass('active')) { 580 $('.mobile-menu-layout-overlay .menu-toggle').click(); 581 } 582 583 $('#primary-navigation').addClass('without-transition'); 584 585 if (window.gemMobileMenuType == 'default') { 586 $('#primary-navigation .dl-submenu').addClass('dl-submenu-disabled').removeClass('dl-submenu'); 587 } 588 $('#primary-menu').addClass('no-responsive'); 589 $('#primary-navigation').removeClass('responsive'); 590 $('.menu-overlay').removeClass('mobile'); 591 592 window.fixMenuLogoPosition(); 593 594 if (!window.megaMenuWithSettingsFixed) { 595 fixMegaMenuWithSettings(); 596 } 597 598 $('#primary-navigation').removeClass('without-transition'); 599 600 if($('body').hasClass('mobile-cart-position-top')) { 601 $('.mobile-cart > .minicart-menu-link.temp').remove(); 602 $('.mobile-cart > *').appendTo('#primary-navigation .menu-item-cart'); 603 } 604 } 605 } 606 607 $(function() { 608 function getScrollY(elem){ 609 return window.pageYOffset || document.documentElement.scrollTop; 610 } 611 $(document).on('click touchend', '.mobile-cart > a', function(e) { 612 e.preventDefault(); 613 $('.mobile-cart .minicart').addClass('minicart-show'); 614 $('body').data('scroll-position', getScrollY()) 615 $('body').addClass('mobile-minicart-opened'); 616 }); 617 $(document).on('click', '.mobile-cart-header-close, .mobile-minicart-overlay', function(e) { 618 e.preventDefault(); 619 $('.mobile-cart .minicart').removeClass('minicart-show'); 620 $('body').removeClass('mobile-minicart-opened'); 621 if($('body').data('scroll-position')) { 622 window.scrollTo(0, $('body').data('scroll-position')) 623 } 624 }); 625 626 if (isResponsiveMenuVisible() && typeof window.gemResponsiveCartClicked !== 'undefined' && window.gemResponsiveCartClicked) { 627 console.log($('.mobile-cart-position-top .mobile-cart > a')); 628 $('.mobile-cart-position-top .mobile-cart > a').trigger('click'); 629 window.gemResponsiveCartClicked = null; 630 } 631 632 }); 633 634 if (window.gemMobileMenuType == 'default') { 635 $('#primary-navigation .submenu-languages').addClass('dl-submenu'); 636 } 637 $('#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'); 638 $('#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"></span>'); 639 640 fixMegaMenuWithSettings();
641 642 if (window.gemMobileMenuType == 'default') { 643 var updateMobileMenuPosition = function() { 644 var siteHeaderHeight = $('#site-header').outerHeight(), 645 windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; 646 647 if ($('#thegem-perspective #primary-menu').length) { 648 $('#thegem-perspective > .mobile-menu-layout-default').css({ 649 top: siteHeaderHeight 650 }); 651 } 652 653 $('#primary-menu').css({ 654 maxHeight: windowHeight - siteHeaderHeight 655 }); 656 }; 657 658 $(window).resize(function() { 659 if (isResponsiveMenuVisible() && $('#primary-menu').hasClass('dl-menuopen')) { 660 setTimeout(updateMobileMenuPosition, 50); 661 } else { 662 $('#primary-menu').css({ 663 maxHeight: '' 664 }); 665 } 666 }); 667 668 $('#site-header .dl-trigger').on('click', function() { 669 updateMobileMenuPosition(); 670 }); 671 672 if (typeof $.fn.dlmenu === 'function') { 673 $('#primary-navigation').dlmenu({ 674 animationClasses: { 675 classin : 'dl-animate-in', 676 classout : 'dl-animate-out' 677 }, 678 onLevelClick: function (el, name) { 679 //$('html, body').animate({ scrollTop : 0 }); 680 }, 681 backLabel: thegem_dlmenu_settings.backLabel, 682 showCurrentLabel: thegem_dlmenu_settings.showCurrentLabel 683 }); 684 } 685 } 686 primary_menu_reinit(); 687 688 $('#primary-menu > li').hover( 689 function() { 690 var $items = $('ul:not(.minicart ul), .minicart, .minisearch', this); 691 $items.removeClass('invert vertical-invert'); 692 693 if (!$(this).hasClass('megamenu-enable')) { 694 $items.css({top: ''}); 695 } 696 697 if ($(this).hasClass('megamenu-enable') || 698 $(this).closest('.header-layout-overlay').length || 699 $(this).closest('.mobile-menu-layout-overlay').length && isResponsiveMenuVisible()) { 700 return; 701 } 702 703 var topItemTranslate = 0; 704 if ($('>ul', this).css('transform')) { 705 topItemTranslate = parseInt($('>ul', this).css('transform').split(',')[5]); 706 } 707 if (isNaN(topItemTranslate)) { 708 topItemTranslate = 0; 709 } 710 var windowScroll = $(window).scrollTop(), 711 siteHeaderOffset = $('#site-header').offset(), 712 siteHeaderOffsetTop = siteHeaderOffset.top - windowScroll, 713 siteHeaderHeight = $('#site-header').outerHeight(), 714 pageOffset = $('#page').offset(), 715 pageWidth = $('#page').width(); 716 717 $items.each(function() { 718 var $item = $(this), 719 self = this, 720 $parentList = $item.parent().closest('ul'); 721 722 var itemOffset = $item.offset(), 723 itemOffsetTop = itemOffset.top - windowScroll, 724 itemOffsetLeft = itemOffset.left; 725 726 727 var leftItemTranslate = 0; 728 if ($item.css('transform')) { 729 leftItemTranslate = parseInt(getComputedStyle(this).transform.split(',')[4]); 730 var levelUL = getLevelULByPrimaryMenu(self); 731 if (levelUL > 0) { 732 leftItemTranslate = leftItemTranslate*levelUL; 733 } 734 } 735 if (isNaN(leftItemTranslate)) { 736 leftItemTranslate = 0; 737 } 738 739 if ($parentList.hasClass('invert')) { 740 if ($parentList.offset().left - $item.outerWidth() > pageOffset.left) { 741 $item.addClass('invert'); 742 } 743 } else { 744 if (itemOffsetLeft - leftItemTranslate - pageOffset.left + $item.outerWidth() > pageWidth) { 745 $item.addClass('invert'); 746 } 747 } 748 749 if (isVerticalMenu || isPerspectiveMenu || isHamburgerMenu) { 750 if (itemOffsetTop - topItemTranslate + $item.outerHeight() > $(window).height()) { 751 $item.addClass('vertical-invert'); 752 var itemOffsetFix = itemOffsetTop - topItemTranslate + $item.outerHeight() - $(window).height(); 753 if (itemOffsetTop - topItemTranslate - itemOffsetFix < 0) { 754 itemOffsetFix = 0; 755 } 756 $item.css({ top: -itemOffsetFix + 'px' }); 757 } 758 } else { 759 if (itemOffsetTop - topItemTranslate + $item.outerHeight() > $(window).height()) { 760 $item.addClass('vertical-invert'); 761 var itemOffsetFix = itemOffsetTop - topItemTranslate + $item.outerHeight() - $(window).height(); 762 if (itemOffsetTop - topItemTranslate - itemOffsetFix < siteHeaderOffsetTop + siteHeaderHeight) { 763 itemOffsetFix -= siteHeaderOffsetTop + siteHeaderHeight - (itemOffsetTop - topItemTranslate - itemOffsetFix); 764 if (itemOffsetFix < 0) { 765 itemOffsetFix = 0; 766 } 767 } 768 if(itemOffsetFix > 0) { 769 $item.css({ top: -itemOffsetFix + 'px' }); 770 } 771 } 772 } 773 }); 774 }, 775 function() {} 776 ); 777 778 function getLevelULByPrimaryMenu(item) { 779 var parentUL = $(item).parent('li').parent('ul'); 780 var level = 0; 781 782 while (!parentUL.is('#primary-menu')) { 783 parentUL = parentUL.parent('li').parent('ul'); 784 level++; 785 } 786 787 return level; 788 } 789 790 $('.hamburger-toggle').click(function(e) { 791 e.preventDefault(); 792 $(this).closest('#primary-navigation').toggleClass('hamburger-active'); 793 $('.hamburger-overlay').toggleClass('active'); 794 }); 795 796 $('.overlay-toggle, .mobile-menu-layout-overlay .menu-toggle').click(function(e) { 797 var $element = this; 798 e.preventDefault(); 799 if($('.menu-overlay').hasClass('active')) { 800 $('.menu-overlay').removeClass('active'); 801 $('.primary-navigation').addClass('close'); 802 $('.primary-navigation').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(e) { 803 $('.primary-navigation').removeClass('overlay-active close'); 804 $('.overlay-menu-wrapper').removeClass('active'); 805 }); 806 $(document).off('keydown.overlay-close'); 807 $('#primary-menu').off('click.overlay-close'); 808 } else { 809 $('.overlay-menu-wrapper').addClass('active'); 810 $('.primary-navigation').off('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend'); 811 $('.primary-navigation').addClass('overlay-active').removeClass('close'); 812 if (isResponsiveMenuVisible()) { 813 $('#site-header').removeClass('hidden'); 814 $('.menu-overlay').addClass('mobile'); 815 } else { 816 $('.menu-overlay').removeClass('mobile'); 817 } 818 $('.menu-overlay').addClass('active'); 819 $(document).on('keydown.overlay-close', function(event) { 820 if (event.keyCode == 27) { 821 $element.click(); 822 } 823 }); 824 $('#primary-menu').on('click.overlay-close', 'li:not(.menu-item-search)', function() { 825 $element.click(); 826 }); 827 } 828 }); 829 830 $('.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() { 831 if (!isResponsiveMenuVisible()) { 832 return; 833 } 834 835 $(this).addClass('opened'); 836 $('> ul', this).show(); 837 }); 838 839 function getScrollY(elem){ 840 return window.pageYOffset || document.documentElement.scrollTop; 841 } 842 843 $('.mobile-menu-layout-slide-horizontal .menu-toggle, .mobile-menu-layout-slide-vertical .menu-toggle, .mobile-menu-slide-wrapper .mobile-menu-slide-close').click(function(e) { 844 if (!isResponsiveMenuVisible()) { 845 return; 846 } 847 848 e.preventDefault(); 849 $('#site-header').removeClass('hidden'); 850 $('.mobile-menu-slide-wrapper').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(e) { 851 $(this).removeClass('animation'); 852 }); 853 $('.mobile-menu-slide-wrapper').addClass('animation').toggleClass('opened'); 854 $('#site-header').toggleClass('menu-slide-opened'); 855 if($('.mobile-menu-slide-wrapper').hasClass('opened')) { 856 $('body').data('scroll-position', getScrollY()) 857 $('body').addClass('menu-scroll-locked'); 858 } else { 859 $('body').removeClass('menu-scroll-locked'); 860 if($('body').data('scroll-position')) { 861 window.scrollTo(0, $('body').data('scroll-position')) 862 } 863 } 864 setTimeout(function() { 865 $(document).on('click.mobile-menu-out-click', function(e) { 866 if($('.mobile-menu-slide-wrapper').hasClass('opened')) { 867 if(!$(e.target).is('#site-header *') && !$(e.target).is('#thegem-perspective *')) { 868 e.preventDefault(); 869 $('.mobile-menu-slide-wrapper .mobile-menu-slide-close').trigger('click'); 870 $(document).off('click.mobile-menu-out-click'); 871 } 872 } 873 }); 874 }, 500); 875 }); 876 877 if (isResponsiveMenuVisible() && typeof window.gemResponsiveMenuClicked !== 'undefined' && window.gemResponsiveMenuClicked) { 878 $('.primary-navigation .menu-toggle').trigger('click'); 879 window.gemResponsiveMenuClicked = null; 880 } 881 882 $('.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').on('click', function(e) { 883 if (!isResponsiveMenuVisible()) { 884 return; 885 } 886 887 e.preventDefault(); 888 var self = this; 889 $(this).closest('li').toggleClass('opened'); 890 $(this).siblings('ul').slideToggle(200, function() { 891 if (!$(self).closest('li').hasClass('opened')) { 892 $(self).siblings('ul').find('li').removeClass('opened'); 893 $(self).siblings('ul').css('display', ''); 894 $(self).siblings('ul').find('ul').css('display', ''); 895 } 896 }); 897 }); 898 899 $('.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) { 900 //if(!$('#primary-menu').hasClass('no-responsive')) return ; 901 902 e.preventDefault(); 903 e.stopPropagation(); 904 905 if (!$('#primary-menu').hasClass('no-responsive') && !$(this).hasClass('menu-item-parent-toggle')) { 906 return; 907 } 908 909 var $itemLink = $(this); 910 var $item = $itemLink.closest('li'); 911 if($item.hasClass('menu-item-parent') && ($item.closest('ul').hasClass('nav-menu') || $item.parent().closest('li').hasClass('menu-overlay-item-open'))) { 912 e.preventDefault(); 913 if($item.hasClass('menu-overlay-item-open')) { 914 $(' > ul, .menu-overlay-item-open > ul', $item).each(function() { 915 $(this).css({height: $(this).outerHeight()+'px'}); 916 }); 917 setTimeout(function() { 918 $(' > ul, .menu-overlay-item-open > ul', $item).css({height: ''}); 919 $('.menu-overlay-item-open', $item).add($item).removeClass('menu-overlay-item-open'); 920 }, 50); 921 } else { 922 var $oldActive = $('.primary-navigation .menu-overlay-item-open').not($item.parents()); 923 $('> ul', $oldActive).not($item.parents()).each(function() { 924 $(this).css({height: $(this).outerHeight()+'px'}); 925 }); 926 setTimeout(function() { 927 $('> ul', $oldActive).not($item.parents()).css({height: ''}); 928 $oldActive.removeClass('menu-overlay-item-open'); 929 }, 50); 930 $('> ul', $item).css({height: 'auto'}); 931 var itemHeight = $('> ul', $item).outerHeight(); 932 $('> ul', $item).css({height: ''}); 933 setTimeout(function() { 934 $('> ul', $item).css({height: itemHeight+'px'}); 935 $item.addClass('menu-overlay-item-open'); 936 $('> ul', $item).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function() { 937 $('> ul', $item).css({height: 'auto'}); 938 });
939 }, 50); 940 } 941 } 942 }); 943 944 $('.vertical-toggle').click(function(e) { 945 e.preventDefault(); 946 $(this).closest('#site-header-wrapper').toggleClass('vertical-active'); 947 }); 948 949 $(function() { 950 $(window).resize(function() { 951 if (window.menuResizeTimeoutHandler) { 952 clearTimeout(window.menuResizeTimeoutHandler); 953 } 954 window.menuResizeTimeoutHandler = setTimeout(primary_menu_reinit, 50); 955 }); 956 }); 957 958 $('#primary-navigation').on('click', 'a', function(e) { 959 var $item = $(this); 960 if($('#primary-menu').hasClass('no-responsive') && window.gemSettings.isTouch && $item.next('ul').length) { 961 e.preventDefault(); 962 } 963 }); 964 965 $(document).on('click', function(e) { 966 if ($('.hamburger-overlay').hasClass('active') && !$(e.target).closest("#primary-menu").length && !$(e.target).closest(".hamburger-toggle").length) { 967 $('.hamburger-toggle').trigger('click'); 968 } 969 970 if ($("#site-header-wrapper").hasClass('vertical-active')) { 971 if (!$("#site-header-wrapper").is(e.target) && $("#site-header-wrapper").has(e.target).length === 0) { 972 $('.vertical-toggle').trigger('click'); 973 } 974 } 975 }); 976 977})(jQuery); 978 979// Menu perspective 980(function($) { 981 var transitionEndEvent = { 982 'WebkitTransition': 'webkitTransitionEnd', 983 'MozTransition': 'transitionend', 984 'OTransition': 'oTransitionEnd', 985 'msTransition': 'MSTransitionEnd', 986 'transition': 'transitionend' 987 }[ window.supportedTransition ], 988 clickEventName = 'click'; 989 990 function initPerspective() { 991 var $menuToggleButton = $('.perspective-toggle'), 992 $perspective = $('#thegem-perspective'), 993 $page = $('#page'); 994 995 if (!$perspective.length) { 996 return false; 997 } 998 999 $menuToggleButton.on(clickEventName, function(event) { 1000 if ($perspective.hasClass('animate')) { 1001 return; 1002 } 1003 1004 var documentScrollTop = $(window).scrollTop(); 1005 $(window).scrollTop(0); 1006 1007 var pageWidth = $page.outerWidth(), 1008 perspectiveWidth = $perspective.outerWidth(), 1009 pageCss = { 1010 width: pageWidth 1011 }; 1012 1013 if (pageWidth < perspectiveWidth) { 1014 pageCss.marginLeft = $page[0].offsetLeft; 1015 } 1016 1017 $page.css(pageCss); 1018 1019 $perspective.addClass('modalview animate'); 1020 $page.scrollTop(documentScrollTop); 1021 //$(window).trigger('perspective-modalview-opened'); 1022 event.preventDefault(); 1023 event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true); 1024 }); 1025 1026 $('#primary-navigation').on(clickEventName, function(event) { 1027 if (isResponsiveMenuVisible()) { 1028 return; 1029 } 1030 event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true); 1031 }); 1032 1033 $('#thegem-perspective .perspective-menu-close').on(clickEventName, function(event) { 1034 $perspective.click(); 1035 event.preventDefault(); 1036 event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true); 1037 }); 1038 1039 $perspective.on(clickEventName, function(event) { 1040 if (!$perspective.hasClass('animate')) { 1041 return; 1042 } 1043 1044 var onEndTransitionCallback = function(event) { 1045 if (window.supportsTransitions && (event.originalEvent.target.id !== 'page' || event.originalEvent.propertyName.indexOf('transform' ) == -1)) { 1046 return; 1047 } 1048 1049 $(this).off(transitionEndEvent, onEndTransitionCallback); 1050 var pageScrollTop = $page.scrollTop(); 1051 $perspective.removeClass('modalview'); 1052 $page.css({ 1053 width: '', 1054 marginLeft: '' 1055 }); 1056 $(window).scrollTop(pageScrollTop); 1057 $page.scrollTop(0); 1058 $(window).resize(); 1059 //$(window).trigger('perspective-modalview-closed'); 1060 }; 1061 1062 if (window.supportsTransitions) { 1063 $perspective.on(transitionEndEvent, onEndTransitionCallback); 1064 } else { 1065 onEndTransitionCallback.call(); 1066 } 1067 1068 $perspective.removeClass('animate'); 1069 }); 1070 } 1071 1072 initPerspective(); 1073})(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.