PageSourceSearch

https://experiences-uphf.fr/wp-content/uploads/ac_assets/ue-side-menu/menu.js?ver=2.0.10

js experiences-uphf.fr collected 2026-10-09 22:23:20 UTC 25,534 bytes, 955 lines download raw bytes

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.