1jQuery(document).ready(function($) { 2 var settings = ( window.slickNavVars && window.slickNavVars.ng_slicknav ) || {}; 3 4 if ( ! settings.ng_slicknav_menu || 'function' !== typeof $.fn.slicknav ) { 5 return; 6 } 7 8 try { 9 $( settings.ng_slicknav_menu ); 10 } catch ( error ) { 11 if ( window.console && 'function' === typeof window.console.warn ) { 12 window.console.warn( 'SlickNav Mobile Menu: invalid menu selector.', error ); 13 } 14 return; 15 } 16 17 if(settings.ng_slicknav_fixhead || !settings.ng_slicknav_position ) { 18 settings.ng_slicknav_position = 'body'; 19 } 20 21 if(settings.ng_slicknav_openedsymbol === "") { 22 settings.ng_slicknav_openedsymbol = "▼"; 23 } 24 25 if(settings.ng_slicknav_closedsymbol === "") { 26 settings.ng_slicknav_closedsymbol = "►"; 27 } 28 29 if(settings.ng_slicknav_search_text === "") { 30 settings.ng_slicknav_search_text = "search..."; 31 } 32 33 // Ov3rfly 34 var ng_slicknav_menu = ''; 35 var ng_slicknav_menu_duplicate = true; 36 var ng_slicknav_menu_arr = settings.ng_slicknav_menu.split(','); 37 38 if ( ng_slicknav_menu_arr.length > 1 ) { 39 // multiple comma seperated selectors 40 // based on http://codepen.io/ComputerWolf/pen/tjyIg 41 // clone all menus to keep them intact 42 ng_slicknav_menu = $( ng_slicknav_menu_arr[0].trim() ).clone(); 43 for ( var i = 1; i < ng_slicknav_menu_arr.length; i++ ) { 44 var ng_slicknav_other = $( ng_slicknav_menu_arr[i].trim() ).clone(); 45 ng_slicknav_other.children( 'li' ).appendTo( ng_slicknav_menu ); 46 } 47 ng_slicknav_menu_duplicate = false; 48 } else { 49 // only one selector 50 ng_slicknav_menu = ng_slicknav_menu_arr[0].trim(); 51 //ng_slicknav_menu = ng_slicknav_menu.trim(); 52 } 53 54 $(ng_slicknav_menu).slicknav({ // Ov3rfly 55 prependTo : settings.ng_slicknav_position, 56 label : settings.ng_slicknav_label, 57 duration : settings.ng_slicknav_speed, 58 showChildren : settings.ng_slicknav_child_links, 59 allowParentLinks: settings.ng_slicknav_parent_links, 60 closeOnClick : settings.ng_slicknav_close_click, 61 brand : '', 62 openedSymbol : settings.ng_slicknav_openedsymbol, 63 closedSymbol : settings.ng_slicknav_closedsymbol, 64 duplicate : ng_slicknav_menu_duplicate, // Ov3rfly 65 beforeOpen : (settings.ng_slicknav_accordion == true) ? function(trigger) { slicknavOpened(trigger); } : function(){}, 66 }); 67 68 69 if ( settings.ng_slicknav_brand ) { 70 var $brandImage = $( '<img>' ).attr({ 71 src: settings.ng_slicknav_brand, 72 alt: settings.ng_slicknav_alt || '' 73 }); 74 var $brandLink = $( '<a>' ).attr( 'href', settings.ng_slicksearch ).append( $brandImage ); 75 $( '.slicknav_menu' ).prepend( $( '<div>' ).addClass( 'slicknav_brand' ).append( $brandLink ) ); 76 } 77 78 if ( settings.ng_slicknav_search === true ) { 79 var $searchForm = $( '<form>' ).attr({ 80 role: 'search', 81 method: 'get', 82 id: 'slicknav-searchform', 83 action: settings.ng_slicksearch 84 }); 85 $searchForm.append( $( '<input>' ).attr({ 86 type: 'text', 87 placeholder: settings.ng_slicknav_search_text, 88 name: 's', 89 id: 's' 90 }) ); 91 $searchForm.append( $( '<input>' ).attr({ 92 type: 'submit', 93 id: 'searchsubmit', 94 value: '\uf179' 95 }) ); 96 $( '.slicknav_nav' ).append( $( '<li>' ).addClass( 'search' ).append( $searchForm ) ); 97 } 98 99 if ( !settings.ng_slicknav_brand && settings.ng_slicknav_brand_text ) { 100 var $textLink = $( '<a>' ).attr( 'href', settings.ng_slicksearch ).text( settings.ng_slicknav_brand_text ); 101 $( '.slicknav_menu' ).prepend( $( '<p>' ).addClass( 'slicknav-logo-text' ).append( $textLink ) ); 102 } 103 104 // Accordion used to show 1 sublevel at a time - https://github.com/ComputerWolf/SlickNav/issues/16 105 function slicknavOpened(trigger) {
106 var $trigger = $(trigger[0]); 107 if ($trigger.hasClass('slicknav_btn')) { 108 // this is the top-level menu/list opening. 109 // we only want to trap lower-level/sublists. 110 return; 111 } 112 // trigger is an <a> anchor contained in a <li> 113 var $liParent = $trigger.parent(); 114 // parent <li> is contained inside a <ul> 115 var $ulParent = $liParent.parent(); 116 // loop through all children of parent <ul> 117 // i.e. all siblings of this <li> 118 $ulParent.children().each(function () { 119 var $child = $(this); 120 if ($child.is($liParent)) { 121 // this child is self, not is sibling 122 return; 123 } 124 if ($child.hasClass('slicknav_collapsed')) { 125 // this child is already collapsed 126 return; 127 } 128 if (!$child.hasClass('slicknav_open')) { 129 // could throw an exception here: this shouldn't happen 130 // because I expect li to have class either slicknav_collapsed or slicknav_open 131 return; 132 } 133 // found a sibling <li> which is already open. 134 // expect that its first child is an anchor item. 135 var $anchor = $child.children().first(); 136 if (!$anchor.hasClass('slicknav_item')) { 137 return; 138 } 139 // close the sibling by emulating a click on its anchor. 140 $anchor.click(); 141 }); 142 143 } 144 145 // Add Flex container around brand/brand text and Menu icon/label divs so button can be centered 146 var brandBlank = ( settings.ng_slicknav_brand == '' ); 147 var brandBlankText = ( settings.ng_slicknav_brand_text == '' ); 148 if ( ! brandBlank ) { 149 $( ".slicknav_brand" ).next().addBack().wrapAll( "<div class='slicknav-flex'></div>" ); 150 } 151 else if ( ! brandBlankText ) { 152 $( ".slicknav-logo-text" ).next().addBack().wrapAll( "<div class='slicknav-flex'></div>" ); 153 } 154 else 155 $( ".slicknav_btn" ).wrapAll( "<div class='slicknav-flex'></div>" ); 156 157 158 });
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.