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.