PageSourceSearch

https://vinarija-trs.com/wp-content/uploads/ac_assets/ue-side-menu/menu.js?ver=2.0.20

js vinarija-trs.com collected 2026-09-24 11:39:01 UTC 19,949 bytes, 866 lines download raw bytes

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

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.