1/* 2 * DC jQuery Vertical Accordion Menu - jQuery vertical accordion menu plugin 3 * Copyright (c) 2011 Design Chemical 4 * 5 * Dual licensed under the MIT and GPL licenses: 6 * http://www.opensource.org/licenses/mit-license.php 7 * http://www.gnu.org/licenses/gpl.html 8 * 9 */ 10(function($){ 11 $.fn.dcAccordion = function(options) { 12 //set default options 13 var defaults = { 14 classParent : 'dcjq-parent', 15 classActive : 'active', classArrow : 'dcjq-icon', classCount : 'dcjq-count', 16 classExpand : 'dcjq-current-parent', 17 classDisable : '', 18 eventType : 'click', 19 hoverDelay : 300, 20 menuClose : true, 21 autoClose : true, 22 autoExpand : false, 23 speed : 'slow', 24 saveState : true, 25 disableLink : true, showCount : false, 26 cookie : 'dcjq-accordion' 27 }; 28 //call in the default otions 29 var options = $.extend(defaults, options); 30 this.each(function(options){ 31 var obj = this; 32 $objLinks = $('li > a',obj); 33 $objSub = $('li > ul',obj); 34 if(defaults.classDisable){ 35 $objLinks = $('li:not(.'+defaults.classDisable+') > a',obj); 36 $objSub = $('li:not(.'+defaults.classDisable+') > ul',obj); 37 } 38 39 classActive = defaults.classActive; 40 41 setUpAccordion(); 42 if(defaults.saveState == true){ 43 checkCookie(defaults.cookie, obj, classActive); 44 } 45 if(defaults.autoExpand == true){ 46 $('li.'+defaults.classExpand+' > a').addClass(classActive); 47 } 48 resetAccordion(); 49 if(defaults.eventType == 'hover'){ 50 var config = { 51 sensitivity: 2, // number = sensitivity threshold (must be 1 or higher) 52 interval: defaults.hoverDelay, // number = milliseconds for onMouseOver polling interval 53 over: linkOver, // function = onMouseOver callback (REQUIRED) 54 timeout: defaults.hoverDelay, // number = milliseconds delay before onMouseOut 55 out: linkOut // function = onMouseOut callback (REQUIRED) 56 }; 57 $objLinks.hoverIntent(config); 58 var configMenu = { 59 sensitivity: 2, // number = sensitivity threshold (must be 1 or higher) 60 interval: 1000, // number = milliseconds for onMouseOver polling interval 61 over: menuOver, // function = onMouseOver callback (REQUIRED) 62 timeout: 1000, // number = milliseconds delay before onMouseOut 63 out: menuOut // function = onMouseOut callback (REQUIRED) 64 }; 65 $(obj).hoverIntent(configMenu); 66 // Disable parent links 67 if(defaults.disableLink == true){ 68 $objLinks.click(function(e){ 69 if($(this).siblings('ul').length >0){ 70 e.preventDefault(); 71 } 72 }); 73 } 74 } else { 75 $objLinks.click(function(e){ 76 $activeLi = $(this).parent('li'); 77 $parentsLi = $activeLi.parents('li'); 78 $parentsUl = $activeLi.parents('ul'); 79 // Prevent browsing to link if has child links 80 if(defaults.disableLink == true){ 81 if($(this).siblings('ul').length >0){ 82 e.preventDefault(); 83 } 84 } 85 // Auto close sibling menus 86 if(defaults.autoClose == true){ 87 autoCloseAccordion($parentsLi, $parentsUl); 88 } 89 if ($('> ul',$activeLi).is(':visible')){ 90 $('ul',$activeLi).slideUp(defaults.speed); 91 $('a',$activeLi).removeClass(classActive); 92 } else { 93 $(this).siblings('ul').slideToggle(defaults.speed); 94 $('> a',$activeLi).addClass(classActive); 95 } 96 // Write cookie if save state is on 97 if(defaults.saveState == true){ 98 createCookie(defaults.cookie, obj, classActive); 99 } 100 }); 101 } 102 // Set up accordion 103 function setUpAccordion(){ 104 $arrow = '<span class="'+defaults.classArrow+'"></span>'; 105 var classParentLi = defaults.classParent+'-li'; 106 $objSub.show(); 107 $('li',obj).each(function(){ 108 if($('> ul',this).length > 0){ $(this).addClass(classParentLi); 109 $('> a',this).addClass(defaults.classParent).append($arrow); 110 } 111 }); 112 $objSub.hide(); 113 if(defaults.classDisable){ 114 $('li.'+defaults.classDisable+' > ul').show(); 115 } 116 if(defaults.showCount == true){ 117 $('li.'+classParentLi,obj).each(function(){ 118 if(defaults.disableLink == true){ 119 var getCount = parseInt($('ul a:not(.'+defaults.classParent+')',this).length); 120 } else { 121 var getCount = parseInt($('ul a',this).length); 122 } 123 $('> a',this).append(' <span class="'+defaults.classCount+'">('+getCount+')</span>'); 124 }); 125 } 126 } 127 128 function linkOver(){ 129 130 $activeLi = $(this).parent('li'); 131 $parentsLi = $activeLi.parents('li'); 132 $parentsUl = $activeLi.parents('ul'); 133 134 // Auto close sibling menus 135 if(defaults.autoClose == true){ 136 autoCloseAccordion($parentsLi, $parentsUl); 137 138 } 139 140 if ($('> ul',$activeLi).is(':visible')){ 141 $('ul',$activeLi).slideUp(defaults.speed); 142 $('a',$activeLi).removeClass(classActive); 143 } else { 144 $(this).siblings('ul').slideToggle(defaults.speed); 145 $('> a',$activeLi).addClass(classActive); 146 } 147 148 // Write cookie if save state is on 149 if(defaults.saveState == true){ 150 createCookie(defaults.cookie, obj, classActive); 151 } 152 } 153 154 function linkOut(){ 155 } 156 157 function menuOver(){ 158 } 159 160 function menuOut(){ 161 162 if(defaults.menuClose == true){ 163 $objSub.slideUp(defaults.speed); 164 // Reset active links 165 $('a',obj).removeClass(classActive); 166 createCookie(defaults.cookie, obj, classActive); 167 } 168 } 169 170 // Auto-Close Open Menu Items 171 function autoCloseAccordion($parentsLi, $parentsUl){ 172 $('ul',obj).not($parentsUl).slideUp(defaults.speed); 173 // Reset active links 174 $('a',obj).removeClass(classActive); 175 $('> a',$parentsLi).addClass(classActive); 176 } 177 // Reset accordion using active links 178 function resetAccordion(){ 179 $objSub.hide(); 180 var $parentsLi = $('a.'+classActive,obj).parents('li'); 181 $('> a',$parentsLi).addClass(classActive); 182 $allActiveLi = $('a.'+classActive,obj); 183 $($allActiveLi).siblings('ul').show(); 184 } 185 }); 186 // Retrieve cookie value and set active items 187 function checkCookie(cookieId, obj, classActive){ 188 var cookieVal = $.cookie(cookieId); 189 if(cookieVal != null){ 190 // create array from cookie string 191 var activeArray = cookieVal.split(','); 192 $.each(activeArray, function(index,value){ 193 var $cookieLi = $('li:eq('+value+')',obj); 194 $('> a',$cookieLi).addClass(classActive); 195 var $parentsLi = $cookieLi.parents('li'); 196 $('> a',$parentsLi).addClass(classActive); 197 }); 198 } 199 } 200 // Write cookie 201 function createCookie(cookieId, obj, classActive){ 202 var activeIndex = []; 203 // Create array of active items index value 204 $('li a.'+classActive,obj).each(function(i){ 205 var $arrayItem = $(this).parent('li'); 206 var itemIndex = $('li',obj).index($arrayItem); 207 activeIndex.push(itemIndex); 208 }); 209 // Store in cookie 210 $.cookie(cookieId, activeIndex, { path: '/' }); 211 } 212 }; 213})(jQuery);
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.