PageSourceSearch

https://forbiddenstories.org/wp-content/uploads/ac_assets/sliding-menu/ue-sliding-menu.js?x87007&ver=2.0.19

js forbiddenstories.org collected 2026-09-24 08:51:17 UTC 5,598 bytes, 210 lines download raw bytes

1function ueSlidingMenu(){
2  var g_backLinkClass, g_activeClass, g_hasChildrenClass, g_expandIconClass;
3  var g_subMenuSelector, g_expandIconSelector;
4  var g_objWidget, g_objItems, g_objExpand;
5  var g_clickableParents;
6  
7  /**
8  * append back links to submenus
9  */
10  function appendBackLinksToSubMenus(){   
11    var objSubMenus = g_objWidget.find(g_subMenuSelector);
12    
13    if(!objSubMenus || objSubMenus.length == 0)
14      return(false);
15    
16    var objBackLinkPlaceholder = g_objWidget.find(".ue-back-link");
17    var backLinkInnerHtml = objBackLinkPlaceholder.html();  
18    
19    objSubMenus.each(function(){
20      var objSubMenu = jQuery(this);
21      var backLinkHtml = `<li class="${g_backLinkClass}"><a>${backLinkInnerHtml}</a></li>`;
22      
23      objSubMenu.prepend(backLinkHtml);
24    });
25  }
26  
27  /**
28  * append append expand collapse icons
29  */
30  function appendExpandIcons(){   
31    var objSubMenus = g_objWidget.find(g_subMenuSelector);
32    
33    if(!objSubMenus || objSubMenus.length == 0)
34      return(false);
35    
36    var objExpandLinkPlaceholder = g_objWidget.find(".ue-slide-menu-expand-icon-placeholder");
37    
38    objSubMenus.each(function(){
39      var objSubMenu = jQuery(this);
40      var objSubMenuLink = objSubMenu.prev();
41      
42      objSubMenuLink.append(objExpandLinkPlaceholder.html());
43    });
44  }
45  
46  /**
47  * set min height of the menu
48  */
49  function setMinHeight(){
50    var objSubMenus = g_objWidget.find(g_subMenuSelector);
51    
52    if(!objSubMenus || objSubMenus.length == 0)
53      return(false);
54    
55    var maxHeight = 0;
56    
57    objSubMenus.each(function(){
58      var objSubMenu = jQuery(this);
59      var subMenuHeight = objSubMenu.outerHeight(true);
60      
61      if(subMenuHeight > maxHeight)
62        maxHeight = subMenuHeight;
63      
64    });
65    
66    var objMenuWrap = g_objWidget.find(".ue-slide-menu-wrapper");
67    
68    objMenuWrap.css("min-height", maxHeight+"px");
69  }
70  
71  /**
72  * init menu layout
73  */
74  function initMenuLayout(){
75    var objSubMenus = g_objWidget.find(g_subMenuSelector);
76    
77    if(!objSubMenus || objSubMenus.length == 0)
78      return(false);
79    
80    objSubMenus.each(function(){
81      var objSubMenu = jQuery(this);
82      var objParentLink = objSubMenu.prev();
83      
84      if(g_clickableParents == false)
85        objParentLink.removeAttr("href");
86      
87    });
88  }
89  
90  /** 
91  * open submenu on link click
92  */
93  function openSubMenu(objLink){
94    var objParentMenuItem = objLink.closest(`.${g_hasChildrenClass}`);
95    
96    if(!objParentMenuItem || objParentMenuItem.length == 0)
97      return(true);
98    
99    var objSubMenu = objParentMenuItem.find(`>${g_subMenuSelector}`);
100    
101    if(!objSubMenu || objSubMenu.length == 0)
102      return(true);
103    
104    var isLinkActive = objLink.hasClass(g_activeClass);
105    
106    if(isLinkActive == false){
107      objLink.addClass(g_activeClass);
108      objSubMenu.addClass(g_activeClass);
109    }else{
110      objLink.removeClass(g_activeClass);
111      objSubMenu.removeClass(g_activeClass);
112    }
113  }
114  
115  /**
116  * on expand Icon Click
117  */
118  function onExpandIconClick(e){ 
119    var objIcon = jQuery(this);
120    var objParentLink = objIcon.closest("a");
121
122    e.stopPropagation();
123    
124    openSubMenu(objParentLink);
125  }
126  
127  /**
128  * on menu link click
129  */
130  function onMenuLinkClick(e){
131    var objLink = jQuery(this);
132    var objTarget = jQuery(e.target);
133    var objParentExpand = objTarget.closest(g_expandIconSelector);
134    
135    if(g_clickableParents == true){
136      var isTargetExpandIcon = objTarget.hasClass(g_expandIconClass);
137      var isParentExpandIconExist = objParentExpand && objParentExpand.length > 0;
138      
139      if(isTargetExpandIcon == true || isParentExpandIconExist == true){
140        e.preventDefault();
141
142        openSubMenu(objLink);
143
144        return(true);
145      }else{
146        //default behaviour - follow the link
147      }
148
149    }else    
150    openSubMenu(objLink);
151  }
152  
153  /**
154  * on back link click
155  */
156  function onBackLinkClick(){
157    var objBackLink = jQuery(this);
158    var objParentSubMenu = objBackLink.closest(g_subMenuSelector);
159    var objMenuLink = objParentSubMenu.prev();
160    
161    objParentSubMenu.removeClass(g_activeClass);
162    objMenuLink.removeClass(g_activeClass);
163  }
164  
165  /**
166  * init menu
167  */
168  this.init = function(options){
169    var widgetId = options.id;
170    var menuSide = options.menuSide;
171    
172    g_menuOpenClass = `ue-slide-menu-fixed-${menuSide}--open`;
173    g_menuCloseClass = `ue-slide-menu-fixed-${menuSide}--close`;
174    g_backLinkClass = "ue-back-link";
175    g_activeClass = "ue-active";
176    g_hasChildrenClass = "menu-item-has-children";
177    g_menuClass = "ue-slide-menu";
178    g_expandIconClass = "ue-slide-menu-expand-icon";
179    
180    g_subMenuSelector = ".sub-menu";
181    g_expandIconSelector = "."+g_expandIconClass;
182    
183    g_objWidget = jQuery(`#${widgetId}`);
184    g_objOpenMenu = g_objWidget.find(".ue-slide-menu-open");
185    g_objCloseMenu = g_objWidget.find(".ue-slide-menu-close");
186    g_objFixed = g_objWidget.find(".ue-slide-menu-fixed");
187    g_objItems = g_objWidget.find(".menu-item>a");
188    g_objExpand = g_objWidget.find(g_expandIconSelector);
189    
190    g_slidingTransition = "fast";
191    g_clickableParents = options.clickableParents;
192    g_closeOnBody = options.closeOnBody;
193    
194    //init view
195    initMenuLayout();
196    
197    //append back links
198    appendBackLinksToSubMenus();
199    
200    //append exp / coll icons
201    appendExpandIcons();
202    
203    //set min height
204    setMinHeight();
205    
206    //init events
207    g_objItems.on("click", onMenuLinkClick);
208    jQuery(`.${g_backLinkClass}`).on("click", onBackLinkClick);
209  }
210}

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.