https://www.yourfirm.de/app/uploads/sites/24/ac_assets/fullscreen_navigation_menu/menu.js?ver=2.0.20
1function UCFullscreenMenu(menuWrapperID){ 2 3 var t = this; 4 5 //classes / ids 6 var g_menuWrapperID, g_subMenuClass, g_collapsedClass, g_expandedClass, g_noTransitionClass, g_listMenuClass, g_menuItemPointerClass, g_menuOpenedClass, g_isActiveCLass, g_menuItemHasChildrenClass, ucForceDisablePageScroll; 7 8 //selectors 9 var g_subMenuSelector, g_expandedSelector, g_menuItemPointerSelector, g_checkboxToggleSelector, g_objBody, g_objHTML, g_objWindow, g_innerMenuExpandIconSelector, g_innerMenuCollapseIconSelector; 10 11 //obj 12 var g_objWidget, g_objInnerMenu, g_objMenuLinks, g_objListMenu, g_objMenuItemPointers, g_objMenuItemHasChildren, g_objHamburgerMenu, g_objCheckboxToggle, g_objUCHamburger, g_objUCHamburgerLink; 13 14 //helpers 15 var g_isIconClicked = false, g_isCloseOnOpen = false, g_isLoaded = false, g_isClickable, g_dataOpenOnHover, g_isDesktopViewport; 16 17 /** 18 * collapse inner section 19 */ 20 function collapseInnerSection(element, link){ 21 var sectionHeight = element.scrollHeight; 22 var elementTransition = element.style.transition; 23 element.style.transition = ''; 24 25 requestAnimationFrame(function() { 26 element.style.height = sectionHeight + 'px'; 27 element.style.transition = elementTransition; 28 29 requestAnimationFrame(function() { 30 element.style.height = 0 + 'px'; 31 }); 32 }); 33 34 element.setAttribute('data-collapsed', 'true'); 35 } 36 37 /** 38 * expand the inner of the section 39 */ 40 function expandSectionInner(element){ 41 var sectionHeight = element.scrollHeight; 42 43 element.style.height = sectionHeight + 'px'; 44 45 element.addEventListener('transitionend', function(e) { 46 element.removeEventListener('transitionend', arguments.callee); 47 element.style.height = null; 48 }); 49 50 element.setAttribute('data-collapsed', 'false'); 51 } 52 53 /** 54 * expand section 55 */ 56 function expandSection(section, objLink){ 57 expandSectionInner(section); 58 59 section.setAttribute('data-collapsed', 'false') 60 objLink.removeClass(g_collapsedClass); 61 objLink.addClass(g_expandedClass); 62 } 63 64 /** 65 * collapse the section 66 */ 67 function collapseSection(section, objLink){ 68 collapseInnerSection(section, objLink); 69 70 objLink.addClass(g_collapsedClass); 71 objLink.removeClass(g_expandedClass); 72 } 73 74 /** 75 * collapse all expanded sections 76 */ 77 function collapseAllExpanded(clickedItem){ 78 var clickedParentExpanded = jQuery(clickedItem).parents(g_subMenuSelector).prev(); 79 var clickedChildrenExpanded = jQuery(clickedItem).next().find(g_expandedSelector); 80 var objAllExpanded = g_objInnerMenu.find(g_expandedSelector).not(clickedChildrenExpanded).not(clickedParentExpanded); 81 82 if(objAllExpanded.length == false) 83 return(false); 84 85 jQuery.each(objAllExpanded, function(index, link){ 86 var objLink = jQuery(link); 87 var section = link.nextElementSibling; 88 89 collapseSection(section, objLink); 90 }); 91 } 92 93 /** 94 * close or open link 95 */ 96 function toggleSection(objLink){ 97 var link = objLink[0]; 98 var section = link.nextElementSibling; 99 var isCollapsed = section.getAttribute('data-collapsed') === 'true'; 100 101 if (isCollapsed) { //expend current 102 if(g_isCloseOnOpen == true) 103 collapseAllExpanded(link); 104 105 expandSection(section, objLink); 106 } else { //collapse current 107 collapseSection(section,objLink); 108 } 109 } 110 111 /** 112 * open or close some item 113 */ 114 function openCloseItem(link, event){ 115 var section = link.nextElementSibling; 116 117 if(!section) 118 return(true); 119 120 var objSection = jQuery(section); 121 if(objSection.hasClass(g_subMenuClass) == false) 122 return(true); 123 124 if(event) 125 event.preventDefault(); 126 127 var objLink = jQuery(link); 128 var isCollapsed = section.getAttribute('data-collapsed') === 'true'; 129 130 if (isCollapsed) { //expend current 131 if(g_isCloseOnOpen == true) 132 collapseAllExpanded(link); 133 134 expandSection(section, objLink); 135 } else { //collapse current 136 collapseSection(section,objLink); 137 } 138 } 139 140 /** 141 * got to item 142 */ 143 function showExpandCollapseIcons(e, objLink){ 144 toggleIcon(objLink); 145 146 var url = objLink.attr("href"); 147 url = jQuery.trim(url); 148 149 if(!url) 150 return(true); 151 152 var objLinkParent = objLink.parent(); 153 var expandCollapsed = g_objListMenu.find(g_menuItemPointerSelector) 154 var target = e.target 155 156 if(expandCollapsed && expandCollapsed.length > 0 && target.className == expandCollapsed[0].className) 157 return(true); 158 159 if(g_isClickable == false){ 160 161 if(objLinkParent.hasClass(g_menuItemHasChildrenClass) == true) 162 return(true) 163 else 164 resetMenuState(); 165 166 }else{ 167 resetMenuState(); 168 } 169 170 return(true); 171 } 172 173 /** 174 * on menu item click, if sub menu, open or close 175 */ 176 function onMenuItemClick(event){ 177 openCloseItem(this, event); 178 179 var objLink = jQuery(this); 180 181 showExpandCollapseIcons(event, objLink); 182 } 183 184 /** 185 * expand current item tree 186 */ 187 function expandCurrentItemTree(){ 188 //disable transition 189 var objCurrentItem = g_objInnerMenu.find(".current-menu-item"); 190 191 if(objCurrentItem.length == 0) 192 return(false); 193 194 g_objInnerMenu.addClass(g_noTransitionClass); 195 196 setTimeout(function(){ 197 g_objInnerMenu.removeClass(g_noTransitionClass); 198 },300); 199 200 var objParents = objCurrentItem.parents("li"); 201 202 if(objParents.length == 0) 203 return(false); 204 205 jQuery.each(objParents, function(index, parent){ 206 var objParent = jQuery(parent); 207 var objLink = objParent.children("a"); 208 var link = objLink[0]; 209 210 openCloseItem(link); 211 }); 212 } 213 214 // collapse all except the current 215 this.collapseAll = function(){ 216 g_objMenuLinks.each((i, item) => { 217 var objLink = jQuery(item); 218 219 collapseAllExpanded(objLink[0]); 220 }); 221 } 222 223 /** 224 * expand all 225 */ 226 this.expandAllAfterPageLoad = function(){ 227 var dataExpandAll = g_objInnerMenu.data("expandall"); 228 229 if(dataExpandAll == false) 230 return(false); 231 232 if(!g_objMenuItemHasChildren || g_objMenuItemHasChildren.length == 0) 233 return(false); 234 235 //disable transition temporarely 236 g_objInnerMenu.addClass(g_noTransitionClass); 237 setTimeout(function(){ 238 g_objInnerMenu.removeClass(g_noTransitionClass); 239 },300); 240 241 g_objMenuItemHasChildren.each(function(){ 242 var objItem = jQuery(this); 243 var objLink = objItem.children("a"); 244 var link = objLink[0]; 245 246 openCloseItem(link); 247 }); 248 } 249 250 /* 251 * open current page menu item 252 */ 253 this.openCurrentPageMenuItem = function(){ 254 var currentLocation = window.location.href; 255 256 g_objMenuLinks.each((i, item) => { 257 258 var objLink = jQuery(item); 259 var section = item.nextElementSibling; 260 var objLinkItemHref = objLink.attr('href'); 261 262 if(currentLocation == objLinkItemHref){ 263 264 if(jQuery(section) && jQuery(section).length > 0) 265 expandSection(section, objLink); 266 267 var objParentSection = objLink.parents(g_subMenuSelector); 268 269 if(!objParentSection) 270 return(true) 271 272 var objParentLink = objParentSection.prev(); 273 274 if(!objParentLink) 275 return(true) 276 277 if(objParentSection && objParentSection.length > 0) 278 expandSection(objParentSection[0], objParentLink); 279 } 280 }); 281 } 282 283 /* 284 * position fixed protection from parents transform rules 285 */ 286 function protectForFixed(){ 287 //find element with position fixed css rule 288 var objFixedElement = g_objInnerMenu.parents('.ue_menu'); 289 290 //find all parents and look at each one 291 var objFixedParents = objFixedElement.parents(); 292 293 objFixedParents.each(function(){ 294 var objFixedParent = jQuery(this); 295 296 //check if parent has one of issued css rules 297 var transformRule = objFixedParent.css('transform'); 298 299 //if transform is epsent then skip and move to another css rule 300 if(transformRule == 'none') 301 return(true); 302 303 //if finds transform then remove it 304 objFixedParent.css('transform', ''); 305 306 //animation-fill-mode 307 var fillmodeRule = objFixedParent.css('animation-fill-mode'); 308 309 if(fillmodeRule == 'none') 310 return(true); 311 312 objFixedParent.css('animation-fill-mode', 'none'); 313 314 //perspective 315 var perspectiveRule = objFixedParent.css('perspective'); 316 317 if(perspectiveRule == 'none') 318 return(true); 319 320 objFixedParent.css('perspective', 'none'); 321 322 //filter 323 var filterRule = objFixedParent.css('filter'); 324 325 if(filterRule == 'none') 326 return(true); 327 328 objFixedParent.css('filter', 'none'); 329 }); 330 } 331 332 /** 333 * on hamburger menu icon keydown 334 */ 335 function onHamburgerKeydown(event){ 336 var keyCode = event.keyCode; 337 338 if(keyCode == 13 && g_objHamburgerMenu.is(":focus")){ 339 340 g_objCheckboxToggle.trigger("click"); 341 } 342 } 343 344 /** 345 * close menu 346 */ 347 function closeMenu(){ 348 g_objBody.removeClass(g_menuOpenedClass); 349 g_objHTML.removeClass(g_menuOpenedClass); 350 g_objWidget.removeClass(g_menuOpenedClass); 351 g_objHamburgerMenu.attr("aria-expanded", false); 352 } 353 354 /** 355 * reset menu state 356 */ 357 function resetMenuState(){
358 g_objCheckboxToggle.prop('checked',false); 359 360 closeMenu(); 361 362 if(g_objUCHamburger && g_objUCHamburger.length > 0){ 363 g_objUCHamburger.removeClass(g_isActiveCLass); 364 g_objUCHamburgerLink.removeClass(g_isActiveCLass); 365 } 366 } 367 368 /** 369 * toggle icons 370 */ 371 function toggleIcons() { 372 var objExpandIconHTML = g_objWidget.find(g_innerMenuExpandIconSelector).html(); 373 var objCollapseIconHTML = g_objWidget.find(g_innerMenuCollapseIconSelector).html(); 374 375 g_objMenuLinks.each(function() { 376 var objLink = jQuery(this); 377 var isLinkOpened = objLink.hasClass(g_expandedClass); 378 var objLinkContainer = objLink.find(g_menuItemPointerSelector); 379 380 // Update icon based on the state of the menu item 381 if (isLinkOpened == true) { 382 objLinkContainer.html(objCollapseIconHTML); 383 } else { 384 objLinkContainer.html(objExpandIconHTML); 385 } 386 }); 387 } 388 389 /** 390 * toggle icon for a specific link 391 */ 392 function toggleIcon(objLink) { 393 var isLinkOpened = objLink.hasClass(g_expandedClass); 394 var objLinkContainer = objLink.find(g_menuItemPointerSelector); 395 var objExpandIconHTML = g_objWidget.find(g_innerMenuExpandIconSelector).html(); 396 var objCollapseIconHTML = g_objWidget.find(g_innerMenuCollapseIconSelector).html(); 397 398 // Update icon based on the state of the menu item 399 if (isLinkOpened) { 400 objLinkContainer.html(objCollapseIconHTML); 401 } else { 402 objLinkContainer.html(objExpandIconHTML); 403 } 404 405 // Update all icons 406 toggleIcons(); 407 } 408 409 /** 410 * open menu 411 */ 412 function openMenu(){ 413 var dataOpenCurrentOnLoad = g_objInnerMenu.data("open-current-menu"); 414 415 g_objBody.addClass(g_menuOpenedClass); 416 g_objHTML.addClass(g_menuOpenedClass); 417 g_objWidget.addClass(g_menuOpenedClass); 418 t.collapseAll(); 419 g_objHamburgerMenu.attr("aria-expanded", true); 420 421 if(dataOpenCurrentOnLoad == true) 422 objMenu.openCurrentPageMenuItem(); 423 424 if(g_isLoaded == false){ 425 t.expandAllAfterPageLoad(); 426 } 427 428 g_isLoaded = true; 429 430 g_objMenuLinks.each(function(){ 431 var objLink = jQuery(this); 432 433 toggleIcon(objLink); 434 }); 435 436 if(g_objUCHamburger && g_objUCHamburger.length > 0){ 437 g_objUCHamburger.addClass(g_isActiveCLass); 438 g_objUCHamburgerLink.addClass(g_isActiveCLass); 439 } 440 } 441 442 /** 443 * on checkbox toggle click 444 */ 445 function onCheckboxToggleClick(){ 446 var isChecked = g_objCheckboxToggle.is(":checked"); 447 448 if(isChecked == true){ 449 openMenu(); 450 }else{ 451 resetMenuState(); 452 } 453 } 454 455 /** 456 * on window keydown 457 */ 458 function onWindowKeydown(event) { 459 if(event.key == "Escape"){ 460 resetMenuState(); 461 } 462 } 463 464 /** 465 * init close icon position 466 */ 467 function initCloseIconPosition(){ 468 var closeIconPosition = g_objInnerMenu.data('close-position'); 469 470 if(closeIconPosition == 'top'){ 471 var scrolledDistance; 472 473 g_objInnerMenu.on('scroll', function(e){ 474 scrolledDistance = g_objInnerMenu.scrollTop(); 475 476 g_objCheckboxToggle.css({ 477 'transform': 'translate(0, -' + scrolledDistance + 'px)', 478 'transition': 'unset' 479 }); 480 g_objHamburgerMenu.css({ 481 'transform': 'translate(0, -' + scrolledDistance + 'px)', 482 'transition': 'unset' 483 }); 484 }); 485 486 g_objWidget.delegate(g_checkboxToggleSelector, 'click', function(){ 487 488 g_objCheckboxToggle.css({ 489 'transform': 'translate(0, 0)', 490 'transition': '' 491 }); 492 493 g_objHamburgerMenu.css({ 494 'transform': 'translate(0, 0)', 495 'transition': '' 496 }); 497 }); 498 } 499 } 500 501 /** 502 * on mouse hover 503 */ 504 function onMouseHover(){ 505 if(g_dataOpenOnHover == false) 506 return(true); 507 508 if(g_isDesktopViewport == false) 509 return(true); 510 511 var objLink = jQuery(this); 512 var objLinkParent = objLink.parent(); 513 514 if(objLinkParent.hasClass(g_menuItemHasChildrenClass) == false) 515 return(true); 516 517 if(g_isClickable == true){ 518 if(objLink.hasClass(g_expandedClass) == true) 519 return(true); 520 521 var objLinkIcon = objLink.find(g_menuItemPointerSelector); 522 523 objLinkIcon.trigger("click"); 524 }else{ 525 if(objLink.hasClass(g_expandedClass) == true) 526 return(true); 527 528 objLink.trigger("click"); 529 } 530 } 531 532 /** 533 * init exp / collase icons 534 */ 535 function initExpandCollapseIcons(){ 536 var dataShowIcons = g_objInnerMenu.data("show-menuicons"); 537 538 if(dataShowIcons == false) 539 return(false); 540 541 g_objMenuLinks.each(function(){ 542 objLink = jQuery(this); 543 544 toggleIcon(objLink); 545 }); 546 } 547 548 /** 549 * on mouse leave 550 */ 551 function onMouseLeave(){ 552 if(g_dataOpenOnHover == false) 553 return(true); 554 555 if(g_isDesktopViewport == false) 556 return(true); 557 558 var objLinkParent = jQuery(this); 559 var objLink = objLinkParent.find('> a'); 560 561 if(g_isClickable == true){ 562 563 if(objLink.hasClass(g_collapsedClass) == true) 564 return(false); 565 566 var objLinkIcon = objLink.find(g_menuItemPointerSelector); 567 568 setTimeout(function(){ 569 objLinkIcon.trigger("click"); 570 }, 600); 571 572 }else{ 573 if(objLink.hasClass(g_collapsedClass) == true) 574 return(false); 575 576 setTimeout(function(){ 577 objLink.trigger("click"); 578 }, 600); 579 } 580 } 581 582 /** 583 * fix for sticky parent section 584 */ 585 function initFixForStickyParent(){ 586 var objParents = g_objWidget.parents(); 587 var ucVisibleClass = "uc-visible"; 588 var ucHiddenClass = "uc-hidden"; 589 590 objParents.each(function(){ 591 var objParent = jQuery(this); 592 593 if(objParent.hasClass("elementor-sticky") == true){ 594 var isParentVisible = objParent.is(":visible"); 595 g_objBody.addClass(ucForceDisablePageScroll); 596 g_objHTML.addClass(ucForceDisablePageScroll); 597 598 if(isParentVisible == true){ 599 objParent.addClass(ucVisibleClass); 600 objParent.removeClass(ucHiddenClass); 601 } else{ 602 objParent.addClass(ucHiddenClass); 603 objParent.removeClass(ucVisibleClass); 604 } 605 } 606 }); 607 } 608 609 /** 610 * init fix for safari browser 611 */ 612 function initFixForSafari(){ 613 var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); 614 615 if (isSafari) 616 g_objWidget.closest(".e-flex.e-con-boxed.e-con.e-parent").css("overflow", "visible"); 617 } 618 619 /** 620 * outer button click func 621 */ 622 this.ueOpenFullscreenMenu = function(){ 623 openMenu(); 624 } 625 626 /** 627 * outer button click func 628 */ 629 this.ueCloseFullscreenMenu = function(){ 630 resetMenuState(); 631 } 632 633 /** 634 * run the menu, init 635 */ 636 function runMenu(menuWrapperID){ 637 //classes / ids 638 g_menuWrapperID = menuWrapperID; 639 g_subMenuClass = "sub-menu"; 640 g_collapsedClass = "collapsed"; 641 g_expandedClass = "expanded"; 642 g_noTransitionClass = "uc-no-transition"; 643 g_listMenuClass = "uc-list-menu"; 644 g_menuItemPointerClass = "uc-menu-item-pointer"; 645 g_menuOpenedClass = "menu-opened"; 646 g_isActiveCLass = "is-active"; 647 g_menuItemHasChildrenClass = "menu-item-has-children"; 648 ucForceDisablePageScroll = "uc-force-disable-page-scroll"; 649 650 //selectors 651 g_subMenuSelector = "."+g_subMenuClass; 652 g_expandedSelector = "."+g_expandedClass; 653 g_menuItemPointerSelector = "."+g_menuItemPointerClass; 654 g_checkboxToggleSelector = ".checkbox-toggle"; 655 g_innerMenuExpandIconSelector = ".ue_inner_menu_expand_icon"; 656 g_innerMenuCollapseIconSelector = ".ue_inner_menu_collapse_icon"; 657 658 //init globals 659 g_objWindow = jQuery(window); 660 g_objHTML = jQuery("html"); 661 g_objBody = jQuery("body"); 662 g_objWidget = jQuery("#"+g_menuWrapperID); 663 g_objInnerMenu = g_objWidget.find(".ue_inner_menu"); 664 g_objListMenu = g_objWidget.find(".uc-list-menu"); 665 g_objMenuLinks = g_objListMenu.find("a"); 666 g_objHamburgerMenu = g_objWidget.find(".ue_hamburger"); 667 g_objCheckboxToggle = g_objWidget.find(g_checkboxToggleSelector);
668 g_objUCHamburger = g_objWidget.find(".uc_hamburger"); 669 g_objUCHamburgerLink = g_objWidget.find(".uc_animated_hamburger_icon"); 670 g_objMenuItemHasChildren = g_objListMenu.find("."+g_menuItemHasChildrenClass); 671 672 //helpers 673 g_isCloseOnOpen = g_objInnerMenu.data("closeothers"); 674 g_isCloseOnOpen = (g_isCloseOnOpen == "yes"); 675 g_isClickable = g_objInnerMenu.data("clickable"); 676 g_dataOpenOnHover = g_objInnerMenu.data("openonhover"); 677 g_isDesktopViewport = window.matchMedia("(min-width: 1024px)"); 678 679 if(g_objWidget.length == 0){ 680 console.log("menu with ID: "+g_menuWrapperID+" not found!"); 681 682 return(false); 683 } 684 685 resetMenuState(); 686 initCloseIconPosition(); 687 initExpandCollapseIcons(); 688 initFixForSafari(); 689 setTimeout(initFixForStickyParent,300); 690 691 jQuery(window).on("scroll", function(){ 692 //init fix for sticky 693 setTimeout(initFixForStickyParent,100); 694 }); 695 696 //collapse all except the current 697 g_objMenuLinks.each((i, item) => { 698 //add area haspopup 699 var objHasChildrenLinks = g_objMenuItemHasChildren.find("> a"); 700 701 if(objHasChildrenLinks && objHasChildrenLinks.length > 0){ 702 objHasChildrenLinks.attr("aria-haspopup", "true"); 703 } 704 705 if(item.nextElementSibling){ 706 var objItem = jQuery(item); 707 var iconPosition = g_objInnerMenu.data('icon-position'); 708 709 if(iconPosition == 'start') 710 objItem.prepend("<span class='"+g_menuItemPointerClass+"'></span>"); 711 712 if(iconPosition == 'end') 713 objItem.append("<span class='"+g_menuItemPointerClass+"'></span>"); 714 715 collapseInnerSection(item.nextElementSibling, item); 716 717 item.nextElementSibling.style.display = "block"; 718 719 jQuery(item).addClass(g_collapsedClass); 720 jQuery(item).removeClass(g_expandedClass); 721 } 722 }); 723 724 g_objMenuItemPointers = g_objListMenu.find(g_menuItemPointerSelector); 725 726 //init events 727 728 if(g_isClickable == false){ 729 g_objMenuLinks.on("click", onMenuItemClick); 730 }else{ 731 //pointer click - toggle section 732 g_objMenuItemPointers.on("click", function(event){ 733 g_isIconClicked = true; 734 735 var objLink = jQuery(this).parent(); 736 737 toggleSection(objLink); 738 }); 739 740 g_objMenuLinks.on("click", function(e){ 741 742 //check if icon was clicked if not make sure that no icon found in clicked link 743 if(g_isIconClicked == true){ 744 var objIcon = jQuery(this).find(g_menuItemPointerSelector); 745 746 if(objIcon && objIcon.length > 0){ 747 e.preventDefault(); 748 749 g_isIconClicked = false; 750 } 751 } 752 753 showExpandCollapseIcons(e, jQuery(this)); 754 }); 755 } 756 757 g_objHamburgerMenu.on("keydown", function(event){ 758 onHamburgerKeydown(event); 759 }); 760 761 g_objWidget.delegate(g_checkboxToggleSelector, "click", onCheckboxToggleClick); 762 763 g_objWindow.on("keydown", function(e) { 764 onWindowKeydown(e); 765 }); 766 767 g_objMenuLinks.on("mouseover", onMouseHover); 768 g_objMenuItemHasChildren.on("mouseleave", onMouseLeave); 769 770 //open the section with current item 771 setTimeout(expandCurrentItemTree,100); 772 773 //protection for elements with position fixed rule 774 setTimeout(protectForFixed,2000); 775 } 776 777 this.initFullscreenMenu = function(id){ 778 runMenu(id); 779 } 780}
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.