PageSourceSearch

https://cafekrasnodar.ru/wp-content/uploads/ac_assets/ue-side-menu/menu.js?ver=1.5.150

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

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.