1 2function UCSideMenu(){ 3 4 //classes, ids 5 var g_widgetID; 6 var g_backLinkClass, g_menuOpenedClass, g_menuRightCloseClass, g_menuLeftCloseClass, g_menuPushClass, g_menuRightOpenClass, g_menuLeftOpenClass, g_closeActionClass, g_collapsedClass, g_expandedClass, g_subMenuClass, g_menuItemPointerClass; 7 8 //selectors 9 var g_subMenuSelector, g_swiperContainerSelector, g_expandedSelector; 10 11 //objects 12 var g_menuWrapper, g_objWrapper, g_objButtonToggle, g_objInputBox, g_isCloseOnOpen, g_isClickable, g_isOpenOnLoad, g_subsFromSide, g_objBody; 13 var g_pushOnOpen, g_pushOnOpenMobile, g_lastBodyPadding; 14 15 //helpers 16 var g_startExpanded, g_dataSpeed, g_urlAjax; 17 18 /** 19 * add support to swiper container 20 */ 21 function pushSwipers(num){ 22 var objSwipers = jQuery(g_swiperContainerSelector); 23 24 objSwipers.each(function(){ 25 var objSwiper = jQuery(this); 26 27 objSwiper.css("transform", "translate("+num+"px, 0)"); 28 }); 29 } 30 31 /** 32 * add support to swiper container 33 */ 34 function releaseSwipers(){ 35 var objSwipers = jQuery(g_swiperContainerSelector); 36 37 objSwipers.each(function(){ 38 var objSwiper = jQuery(this); 39 40 objSwiper.css("transform", ""); 41 }); 42 } 43 44 /** 45 * push content to left 46 */ 47 function pushContentToLeft(menuWidth){ 48 g_objBody.addClass(g_menuPushClass); 49 g_objBody.css("padding-right",menuWidth+"px"); 50 51 pushSwipers(-menuWidth); 52 } 53 54 /** 55 * push content to right 56 */ 57 function pushContentToRight(menuWidth){ 58 g_objBody.addClass(g_menuPushClass); 59 g_objBody.css("padding-left",menuWidth+"px"); 60 61 pushSwipers(menuWidth); 62 } 63 64 /** 65 * open nav 66 */ 67 function openNav() { 68 var menuWidth = g_menuWrapper.width(); 69 70 g_objBody.addClass(g_menuOpenedClass); 71 g_objWrapper.addClass(g_menuOpenedClass); 72 73 if ( g_menuWrapper.hasClass(g_menuRightCloseClass)) { 74 75 g_menuWrapper.removeClass(g_menuRightCloseClass); 76 g_menuWrapper.addClass(g_menuRightOpenClass); 77 78 if(window.matchMedia("(min-width: 420px)").matches && g_pushOnOpen == true){ 79 pushContentToLeft(menuWidth); 80 } 81 82 if(window.matchMedia("(max-width: 420px)").matches && g_pushOnOpenMobile == true){ 83 pushContentToLeft(menuWidth); 84 } 85 86 g_lastBodyPadding = g_objBody.css("padding-right"); 87 88 } else if (g_menuWrapper.hasClass(g_menuLeftCloseClass)) { 89 90 g_menuWrapper.removeClass(g_menuLeftCloseClass); 91 g_menuWrapper.addClass(g_menuLeftOpenClass); 92 93 if(window.matchMedia("(min-width: 420px)").matches && g_pushOnOpen == true){ 94 pushContentToRight(menuWidth); 95 } 96 97 if(window.matchMedia("(max-width: 420px)").matches && g_pushOnOpenMobile == true){ 98 pushContentToRight(menuWidth); 99 } 100 101 g_lastBodyPadding = g_objBody.css("padding-left"); 102 } 103 g_objButtonToggle.addClass(g_closeActionClass); 104 } 105 106 /** 107 * return last padding right on body 108 */ 109 function lastBodyPaddingRight() { 110 setTimeout(function(){ 111 g_objBody.removeClass(g_menuPushClass); 112 },g_dataSpeed*1000) 113 114 g_objBody.css("padding-right", ''); 115 116 releaseSwipers(); 117 } 118 119 /** 120 * return last padding left on body 121 */ 122 function lastBodyPaddingLeft() { 123 124 setTimeout(function(){ 125 g_objBody.removeClass(g_menuPushClass); 126 },g_dataSpeed*1000); 127 128 g_objBody.css("padding-left", ''); 129 130 releaseSwipers(); 131 } 132 133 /** 134 * close the menu 135 */ 136 function closeNav() { 137 g_objButtonToggle.removeClass(g_closeActionClass); 138 139 checkUrlAndSelectActive(); 140 141 g_objBody.removeClass(g_menuOpenedClass); 142 g_objWrapper.removeClass(g_menuOpenedClass); 143 144 if (g_menuWrapper.hasClass(g_menuLeftOpenClass)) { 145 146 g_menuWrapper.addClass(g_menuLeftCloseClass); 147 148 if(window.matchMedia("(min-width: 420px)").matches && g_pushOnOpen == true) { 149 lastBodyPaddingLeft(); 150 } 151 152 if(window.matchMedia("(max-width: 420px)").matches && g_pushOnOpenMobile == true) { 153 lastBodyPaddingLeft(); 154 } 155 156 } else if (g_menuWrapper.hasClass(g_menuRightOpenClass)) { 157 158 g_menuWrapper.addClass(g_menuRightCloseClass); 159 160 if(window.matchMedia("(min-width: 420px)").matches && g_pushOnOpen == true){ 161 lastBodyPaddingRight(); 162 } 163 164 if(window.matchMedia("(max-width: 420px)").matches && g_pushOnOpenMobile == true) { 165 lastBodyPaddingRight(); 166 } 167 } 168 169 if(g_subsFromSide == true){ 170 var objAllExpanded = g_menuWrapper.find(g_expandedSelector); 171 172 if(objAllExpanded.length == false) 173 return(false); 174 175 jQuery.each(objAllExpanded, function(index, link){ 176 var objLink = jQuery(link); 177 var section = link.nextElementSibling; 178 179 collapseSection(section, objLink); 180 menuItemIconToggle(objLink[0]); 181 }); 182 } 183 } 184 185 /** 186 * get closed state 187 */ 188 function isMenuClosed(){ 189 var isClose = g_objButtonToggle.hasClass(g_closeActionClass); 190 191 return(!isClose); 192 } 193 194 /** 195 * toggle click 196 */ 197 function onButtonToggleClick(){ 198 var isClose = g_objButtonToggle.hasClass(g_closeActionClass); 199 200 if(isClose == true) 201 closeNav(); 202 else 203 openNav(); 204 } 205 206 /** 207 * outer button click func 208 */ 209 this.ueOpenSideMenu = function(){ 210 openNav(); 211 } 212 213 /** 214 * outer button click func 215 */ 216 this.ueCloseSideMenu = function(){ 217 closeNav(); 218 } 219 220 /** 221 * collapse inner section 222 */ 223 function collapseInnerSection(element){ 224 if(g_subsFromSide == false){ 225 var sectionHeight = element.scrollHeight; 226 227 var elementTransition = element.style.transition; 228 element.style.transition = ''; 229 230 requestAnimationFrame(function() { 231 element.style.height = sectionHeight + 'px'; 232 element.style.transition = elementTransition; 233 234 requestAnimationFrame(function() { 235 element.style.height = 0 + 'px'; 236 }); 237 238 }); 239 } 240 241 element.setAttribute('data-collapsed', 'true'); 242 } 243 244 /** 245 * expand the inner of the section 246 */ 247 function expandSectionInner(element){ 248 if(g_subsFromSide == false){ 249 var sectionHeight = element.scrollHeight; 250 element.style.height = sectionHeight + 'px'; 251 252 element.addEventListener('transitionend', function(e) { 253 element.removeEventListener('transitionend', arguments.callee); 254 element.style.height = null; 255 256 }); 257 } 258 259 element.setAttribute('data-collapsed', 'false'); 260 } 261 262 /** 263 * expand section 264 */ 265 function expandSection(section, objLink){ 266 expandSectionInner(section); 267 268 section.setAttribute('data-collapsed', 'false') 269 objLink.removeClass(g_collapsedClass); 270 objLink.addClass(g_expandedClass); 271 } 272 273 /** 274 * collapse the section 275 */ 276 function collapseSection(section, objLink){ 277 collapseInnerSection(section); 278 279 objLink.addClass(g_collapsedClass); 280 objLink.removeClass(g_expandedClass); 281 } 282 283 /** 284 * collapse all expanded sections 285 */ 286 function collapseAllExpanded(clickedItem){ 287 var clickedParentExpanded = jQuery(clickedItem).parents(g_subMenuSelector).prev(); 288 var clickedChildrenExpanded = jQuery(clickedItem).next().find(g_expandedSelector); 289 290 var objAllExpanded = g_menuWrapper.find(g_expandedSelector).not(clickedChildrenExpanded).not(clickedParentExpanded); 291 292 if(objAllExpanded.length == false) 293 return(false); 294 295 jQuery.each(objAllExpanded, function(index, link){ 296 var objLink = jQuery(link); 297 var section = link.nextElementSibling; 298 299 //make sure link is link, and not icon 300 if(objLink.prop("tagName") == "SPAN"){ 301 objLink = objLink.parent(); 302 } 303 304 var objSection = objLink.next(); 305 var objChildSection = objSection.find(g_subMenuSelector); 306 307 //check if objLink has opened children if so, skip this one (disabled until case with it is found) 308 if(objChildSection && objChildSection.length > 0){ 309 //return(true); 310 } 311 312 var section = objLink[0].nextElementSibling; 313 collapseSection(section, objLink); 314 }); 315 } 316 317 /** 318 * close or open link 319 */ 320 function toggleSection(objLink){ 321 var link = objLink[0]; 322 var section = link.nextElementSibling; 323 var isCollapsed = section.getAttribute('data-collapsed') === 'true'; 324 325 if (isCollapsed) { //expend current 326 if(g_isCloseOnOpen == true) 327 collapseAllExpanded(link); 328 329 expandSection(section, objLink); 330 331 } else { //collapse current 332 collapseSection(section,objLink); 333 } 334 } 335 336 /** 337 * toggle menu item icon 338 */ 339 function menuItemIconToggle(link){ 340 //add icons to pointer elements 341 var pointerSelector = "."+g_menuItemPointerClass; 342 343 var objPointer = jQuery(link).find(pointerSelector); 344 var objPsrentsMenuItems = jQuery(link).parents(".menu-item-has-children"); 345 var objParentsPointers = objPsrentsMenuItems.find(pointerSelector); 346 var objAllPointers = g_menuWrapper.find(pointerSelector).not(objParentsPointers); 347 348 var objExpandedIcon = g_objWrapper.find(".uc-side-menu-expand-icon"); 349 var objCollapsedIcon = g_objWrapper.find(".uc-side-menu-collapse-icon"); 350 351 if(!objExpandedIcon.length || !objCollapsedIcon) 352 return(false); 353 354 var expandedIconHtml = objExpandedIcon.html(); 355 var collapsedIconHtml = objCollapsedIcon.html(); 356 357 if(jQuery(link).hasClass(g_collapsedClass) == true){ 358 359 if(g_isCloseOnOpen == true) 360 objAllPointers.html(expandedIconHtml); 361 362 objPointer.html(expandedIconHtml); 363 } 364 365 if(jQuery(link).hasClass(g_expandedClass) == true){ 366 367 if(g_isCloseOnOpen == true) 368 objAllPointers.html(expandedIconHtml); 369 370 objPointer.html(collapsedIconHtml); 371 372 } 373 } 374 375 /** 376 * open or close some item 377 */ 378 function openCloseItem(link, event, isPointer, isOnlyOpen){ 379 var section = link.nextElementSibling; 380 381 if(isPointer == true){ 382 section = jQuery(link).parents("a")[0].nextElementSibling; 383 } 384 385 if(!section) 386 return(true); 387 388 var objSection = jQuery(section); 389 390 if(objSection.hasClass(g_subMenuClass) == false) 391 return(true); 392 393 if(event) 394 event.preventDefault(); 395 396 var objLink = jQuery(link); 397 var isCollapsed = section.getAttribute('data-collapsed') === 'true'; 398 399 if(isCollapsed == true && isOnlyOpen == true){ 400 401 if(isPointer == true) { 402 expandSection(section, objLink.parent()); 403 menuItemIconToggle(objLink.parent());
404 }else{ 405 expandSection(section, objLink); 406 menuItemIconToggle(objLink); 407 } 408 409 return(true); 410 } 411 412 if (isCollapsed == true && !isOnlyOpen) { //expend current 413 if(g_isCloseOnOpen == true) 414 collapseAllExpanded(link); 415 416 expandSection(section, objLink); 417 418 } else if(isCollapsed == false && !isOnlyOpen) { //collapse current 419 420 collapseSection(section,objLink); 421 } 422 menuItemIconToggle(link); 423 } 424 425 /** 426 * if clicked link is an anchor then close nav 427 */ 428 function closeNavOnAnchorLinkClick(objLink, event){ 429 var url = objLink.attr("href"); 430 url = jQuery.trim(url); 431 432 if(!url) 433 return(true); 434 435 var objLinkIcon = objLink.find('.'+g_menuItemPointerClass); 436 437 if(!objLinkIcon) 438 return(true); 439 440 var target = event.target; 441 442 if(target == objLinkIcon[0]) 443 return(true); 444 445 var objLinkParent = objLink.parent(); 446 447 if(g_isClickable == false){ 448 449 if(objLinkParent.hasClass('menu-item-has-children')) 450 return(true) 451 452 //check if clicked link is an anchor link 453 if (url.indexOf("#") > -1) 454 closeNav(); 455 }else{ 456 457 //check if clicked link is an anchor link 458 if (url.indexOf("#") > -1) 459 closeNav(); 460 } 461 } 462 463 /** 464 * on menu item click, if sub menu, open or close 465 */ 466 function onMenuItemClick(event){ 467 openCloseItem(this,event); 468 469 var objLink = jQuery(this); 470 471 closeNavOnAnchorLinkClick(objLink, event) 472 } 473 474 /** 475 * console log shortcut 476 */ 477 function trace(str){ 478 console.log(str); 479 } 480 481 /** 482 * do search 483 */ 484 function doSearch(){ 485 if(!g_objInputBox) 486 return(false); 487 488 var searchString = g_objInputBox.val(); 489 490 searchString = jQuery.trim(searchString); 491 492 if(!searchString) 493 return(true); 494 495 var urlBase = g_objInputBox.data("urlbase"); 496 var urlSearch = urlBase+"?s="+searchString; 497 498 location.href = urlSearch; 499 } 500 501 /** 502 * on input box key up - if enter clicked - go to search 503 */ 504 function onInputBoxKeyUp(event){ 505 if(event.keyCode !== 13) 506 return(true); 507 508 doSearch(); 509 } 510 511 /** 512 * on menu body click - disable propogation 513 */ 514 function onMenuBodyClick(event){ 515 event.stopPropagation(); 516 } 517 518 /** 519 * on body click - close the menu if needed 520 */ 521 function onBodyClick(){ 522 var isClosed = isMenuClosed(); 523 524 if(isClosed == true) 525 return(true); 526 527 closeNav(); 528 } 529 530 //on trigger link click 531 532 function onLinkClick(e){ 533 var objLink = jQuery(this); 534 535 var dataMenuName = g_menuWrapper.data('name'); 536 var dataLinkName = objLink.data('name'); 537 538 if(dataLinkName == undefined){ 539 return(false); 540 } 541 542 e.preventDefault(); 543 if(dataLinkName == dataMenuName){ 544 g_objButtonToggle.trigger("click"); 545 }else{ 546 return(false); 547 } 548 } 549 550 /** 551 * init open links 552 */ 553 function initLinks(){ 554 var objLinks = jQuery('.ue-link-open-menu').not(".uc-link-inited"); 555 556 if(objLinks.length == 0){ 557 return(false); 558 } 559 560 var elementName = g_menuWrapper.data("name"); 561 562 jQuery.each(objLinks, function(index, linkElement){ 563 var objLink = jQuery(linkElement); 564 var name = objLink.data("name"); 565 566 if(name != elementName) 567 return(true); 568 569 objLink.addClass("uc-link-inited"); 570 objLink.on("click", onLinkClick); 571 572 }); 573 } 574 575 /* 576 * scrolls to elment 577 */ 578 function scrollMenuToElement(elementOffsetTop){ 579 580 var objScrollableHolder = g_objWrapper.find(".uc-side-menu-items"); 581 582 //wait untill all transitions are finished 583 setTimeout(function(){ 584 objScrollableHolder.animate({ 585 scrollTop: elementOffsetTop 586 }, 100) 587 588 }, 500); 589 } 590 591 /** 592 * finds if element is in viewport 593 */ 594 function isElementInViewport(element) { 595 var elementTop = element.offset().top; 596 var elementBottom = elementTop + element.outerHeight(); 597 598 var viewportTop = jQuery(window).scrollTop(); 599 var viewportBottom = viewportTop + jQuery(window).height(); 600 601 var isInViwport = elementBottom > viewportTop && elementTop < viewportBottom; 602 603 return(isInViwport); 604 } 605 606 /* 607 * check url and select active item 608 */ 609 function checkUrlAndSelectActive(){ 610 var currentPageClass = "current_page_item"; 611 var objlinks = g_objWrapper.find('a'); 612 613 objlinks.each(function(){ 614 var objLink = jQuery(this); 615 var linkHref = objLink.attr("href"); 616 617 //if link has same link adress as menu item then open menu item 618 if(linkHref != g_urlAjax) 619 return(true); 620 621 var objMenuListItem = objLink.parents('li'); 622 623 objlinks.removeClass(currentPageClass); 624 objMenuListItem.addClass(currentPageClass); 625 626 var objParentLinks = objLink.parents(g_subMenuSelector).prev(); 627 628 objParentLinks.each(function(index, elem){ 629 var objParentLink = jQuery(this); 630 631 if(objParentLink.hasClass(g_collapsedClass)){ 632 633 if(g_isClickable == false){ 634 openCloseItem(objParentLink[0]); 635 } 636 637 if(g_isClickable == true){ 638 var objPointer = objParentLink.find("."+g_menuItemPointerClass); 639 640 openCloseItem(objPointer[0], false, true, true); 641 } 642 } 643 }); 644 645 //check if item is in viewport and scroll if needed 646 objLinkOffsetTop = objLink.offset().top; 647 648 if(isElementInViewport(objLink) == false){ 649 scrollMenuToElement(objLinkOffsetTop); 650 } 651 }); 652 } 653 654 /* 655 * open current page menu item 656 */ 657 function checkUrlAndTriggerClick(){ 658 if(g_startExpanded == true) 659 return(false); 660 661 var currentPageClass = "current_page_item"; 662 663 var objlinks = g_objWrapper.find('a'); 664 665 objlinks.each(function(){ 666 667 var objLink = jQuery(this); 668 var linkHref = objLink.attr("href"); 669 670 //if link has same link adress as menu item then open menu item 671 if(linkHref != g_urlAjax) 672 return(true); 673 674 var objMenuListItem = objLink.parents('li'); 675 676 objlinks.removeClass(currentPageClass); 677 objMenuListItem.addClass(currentPageClass); 678 679 //check if item is in viewport and scroll if needed 680 objLinkOffsetTop = objLink.offset().top; 681 682 if(isElementInViewport(objLink) == false){ 683 scrollMenuToElement(objLinkOffsetTop); 684 } 685 686 var objLinkToOpens = objLink.parents(g_subMenuSelector).prev(); 687 688 if(g_isClickable == false){ 689 objLinkToOpens.each(function(){ 690 var objLinkToOpen = jQuery(this); 691 openCloseItem(objLinkToOpen[0]); 692 693 }); 694 } 695 696 if(g_isClickable == true){ 697 objLinkToOpens.each(function(){ 698 699 var objLinkToOpen = jQuery(this); 700 var objPointer = objLinkToOpen.find("."+g_menuItemPointerClass); 701 702 openCloseItem(objPointer[0], false, true, true); 703 }); 704 } 705 }); 706 } 707 708 /** 709 * check if menu is hidden after resize 710 */ 711 function onWindowResize(){ 712 var isMenuOpened = jQuery("body").hasClass(g_menuOpenedClass); 713 714 //only if menu is opened and body has overflow hidden 715 if(isMenuOpened == false) 716 return(false); 717 718 var objParents = g_menuWrapper.parents(); 719 720 objParents.each(function(){ 721 722 var objParent = jQuery(this); 723 var isParentVisible = objParent.is(":visible"); 724 725 if(isParentVisible == true) 726 return(true); 727 728 closeNav(); 729 }); 730 731 } 732 733 /** 734 * append back links to submenus 735 */ 736 function appendBackLinksToSubMenus(){ 737 if(g_subsFromSide == false) 738 return(false); 739 740 var objSubMenus = g_menuWrapper.find(g_subMenuSelector); 741 742 if(!objSubMenus || objSubMenus.length == 0) 743 return(false); 744 745 var iconHtml; 746 var backLinkIconClass = "ue-back-link-icon";
747 var objBackLinkIconPlaceholder = g_objWrapper.find(".uc-side-menu-back-link-icon"); 748 749 if(!objBackLinkIconPlaceholder || objBackLinkIconPlaceholder.length == 0) 750 iconHtml = `<span class="${backLinkIconClass}"></span>`; 751 else 752 iconHtml = `<span class="${backLinkIconClass}">${objBackLinkIconPlaceholder.html()}</span>`; 753 754 objSubMenus.each(function(){ 755 var objSubMenu = jQuery(this); 756 var backlinkText = g_objWrapper.data("backlink-text"); 757 var backLinkHtml = `<li class="${g_backLinkClass}"><a href="javascript:void(0);">${backlinkText} ${iconHtml}</a></li>`; 758 759 objSubMenu.prepend(backLinkHtml); 760 }); 761 } 762 763 /** 764 * on back link click 765 */ 766 function onBackLinkClick(){ 767 var objBackLink = jQuery(this); 768 var objParentSubMenu = objBackLink.closest(g_subMenuSelector); 769 var objMenuLink = objParentSubMenu.prev(); 770 771 collapseSection(objParentSubMenu[0], objMenuLink); 772 menuItemIconToggle(objMenuLink[0]); 773 } 774 775 /** 776 * collapse inner section after init 777 */ 778 function initCollapsedState(item){ 779 collapseInnerSection(item.nextElementSibling); 780 781 jQuery(item).addClass(g_collapsedClass); 782 jQuery(item).removeClass(g_expandedClass); 783 } 784 785 /** 786 * run the menu, init 787 */ 788 function runMenu(){ 789 790 //classes 791 g_backLinkClass = "ue-back-link"; 792 g_menuRightCloseClass = "menu-right-close"; 793 g_menuLeftCloseClass = "menu-left-close"; 794 g_menuPushClass = "uc-menu-push"; 795 g_menuRightOpenClass = "menu-right-open"; 796 g_menuLeftOpenClass = "menu-left-open"; 797 g_closeActionClass = "uc-close-action"; 798 g_collapsedClass = "collapsed"; 799 g_expandedClass = "expanded"; 800 g_subMenuClass = "sub-menu"; 801 g_menuItemPointerClass = "uc-menu-item-pointer"; 802 g_menuOpenedClass = "menu-opened"; 803 804 //selectors 805 g_subMenuSelector = "."+g_subMenuClass; 806 g_swiperContainerSelector = ".swiper-container"; 807 g_expandedSelector = "."+g_expandedClass; 808 809 //objects 810 g_menuWrapper = g_objWrapper.find(".uc-side-menu-wrapper"); 811 var objButtonClose = g_menuWrapper.find(".uc-close-side-menu"); 812 g_objButtonToggle = g_objWrapper.find(".open_side_menu"); 813 g_objInputBox = g_menuWrapper.find("input[type='text']"); 814 g_objBody = jQuery("body"); 815 816 //helpers 817 g_isClickable = g_objWrapper.data("clickable"); 818 g_isCloseOnOpen = g_objWrapper.data("closeothers"); 819 g_subsFromSide = g_objWrapper.data("subs-from-side"); 820 var isCloseOnBody = g_objWrapper.data("closeonbody"); 821 g_isOpenOnLoad = g_menuWrapper.data("openonload"); 822 g_pushOnOpen = g_objWrapper.data("push"); 823 g_pushOnOpenMobile = g_objWrapper.data("push-mobile") 824 g_dataSpeed = g_objWrapper.data("speed"); 825 g_startExpanded = g_objWrapper.data("expand"); 826 827 if(g_menuWrapper.length == 0){ 828 console.log("menu with ID: "+g_widgetID+" not found!"); 829 return(false); 830 } 831 832 if(objButtonClose.length == 0){ 833 console.log("The close button not found"); 834 return(false); 835 } 836 837 if(g_objButtonToggle.length == 0){ 838 console.log("The trigger button not found"); 839 return(false); 840 } 841 842 //collapse or expand all 843 var dataExpandFirst = g_objWrapper.data("first-expand"); 844 845 g_menuWrapper.find("ul.uc-list-menu li a").each((i, item) => { 846 if(item.nextElementSibling){ 847 848 var objItem = jQuery(item); 849 objItem.append("<span class='"+g_menuItemPointerClass+"'></span>"); 850 851 if(g_startExpanded == false){ 852 853 //expand first 854 if(dataExpandFirst == true && i != 0) 855 initCollapsedState(item); 856 else if(dataExpandFirst == false) 857 initCollapsedState(item); 858 859 }else{ 860 861 jQuery(item).removeClass(g_collapsedClass); 862 jQuery(item).addClass(g_expandedClass); 863 864 } 865 866 //add icons to pointer elements 867 menuItemIconToggle(item); 868 } 869 }); 870 871 initLinks(); 872 873 //append sub menu back links 874 appendBackLinksToSubMenus(); 875 876 //on back link click 877 jQuery(`.${g_backLinkClass}`).on("click", onBackLinkClick); 878 879 //init events 880
881 if(g_objInputBox.length == 0) 882 g_objInputBox = null; 883 884 if(g_objInputBox) 885 g_objInputBox.on("keyup",onInputBoxKeyUp); 886 887 var objButtonSearch = g_menuWrapper.find(".side-menu-search-button-search"); 888 objButtonSearch.on("click", doSearch); 889 890 var objLinks = g_menuWrapper.find("ul.uc-list-menu li a"); 891 892 if(g_isClickable == false){ 893 objLinks.on("click", onMenuItemClick); 894 }else{ 895 896 var objPointers = g_menuWrapper.find("ul.uc-list-menu li ."+g_menuItemPointerClass); 897 898 //pointer click - toggle section 899 objPointers.on("click", function(event){ 900 event.preventDefault(); 901 902 var objLink = jQuery(this); 903 var objParentLink = objLink.parent(); 904 905 toggleSection(objParentLink); 906 907 menuItemIconToggle(objParentLink[0]); 908 909 }); 910 911 //close nav if anchor link clicked 912 objLinks.on("click", function(event){ 913 var objLink = jQuery(this); 914 915 closeNavOnAnchorLinkClick(objLink, event); 916 }); 917 918 } 919 920 if(dataExpandFirst == false) 921 setTimeout(checkUrlAndTriggerClick,500); 922 923 objButtonClose.on("click", closeNav); 924 925 g_objButtonToggle.on("click", onButtonToggleClick); 926 927 if(isCloseOnBody === true){ 928 var objOverlay = g_menuWrapper.find(".ue_side_menu_overlay"); 929 930 if(objOverlay.length) 931 objOverlay.on("click", closeNav); 932 else{ 933 g_menuWrapper.on("click", onBodyClick); 934 g_objButtonToggle.on("click", onBodyClick); 935 936 jQuery("body").on("click", onBodyClick); 937 } 938 } 939 940 if(g_isOpenOnLoad === true){ 941 g_objButtonToggle.trigger("click"); 942 } 943 944 jQuery(window).on("resize", onWindowResize); 945 } 946 947 this.initSideMenu = function(id, urlAjax){ 948 g_widgetID = id; 949 g_objWrapper = jQuery("#"+g_widgetID); 950 g_urlAjax = urlAjax; 951 952 runMenu(); 953 } 954} 955
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.