/* * DC jQuery Vertical Accordion Menu - jQuery vertical accordion menu plugin * Copyright (c) 2011 Design Chemical * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * */ (function($){ $.fn.dcAccordion = function(options) { //set default options var defaults = { classParent : 'dcjq-parent', classActive : 'active', classArrow : 'dcjq-icon', classCount : 'dcjq-count', classExpand : 'dcjq-current-parent', eventType : 'click', hoverDelay : 300, menuClose : true, autoClose : true, autoExpand : false, speed : 'fast', saveState : true, disableLink : false, showCount : false, cookie : 'dcjq-accordion' }; //call in the default otions var options = $.extend(defaults, options); this.each(function(options){ var obj = this; setUpAccordion(); if(defaults.saveState == true){ checkCookie(defaults.cookie, obj); } if(defaults.autoExpand == true){ $('li.'+defaults.classExpand+' > a').addClass(defaults.classActive); } resetAccordion(); if(defaults.eventType == 'hover'){ var config = { sensitivity: 2, // number = sensitivity threshold (must be 1 or higher) interval: defaults.hoverDelay, // number = milliseconds for onMouseOver polling interval over: linkOver, // function = onMouseOver callback (REQUIRED) timeout: defaults.hoverDelay, // number = milliseconds delay before onMouseOut out: linkOut // function = onMouseOut callback (REQUIRED) }; $('li a',obj).hoverIntent(config); var configMenu = { sensitivity: 2, // number = sensitivity threshold (must be 1 or higher) interval: 1000, // number = milliseconds for onMouseOver polling interval over: menuOver, // function = onMouseOver callback (REQUIRED) timeout: 1000, // number = milliseconds delay before onMouseOut out: menuOut // function = onMouseOut callback (REQUIRED) }; $(obj).hoverIntent(configMenu); // Disable parent links if(defaults.disableLink == true){ $('li a',obj).click(function(e){ if($(this).siblings('ul').length >0){ e.preventDefault(); } }); } } else { $('li a',obj).click(function(e){ $activeLi = $(this).parent('li'); $parentsLi = $activeLi.parents('li'); $parentsUl = $activeLi.parents('ul'); // Prevent browsing to link if has child links if(defaults.disableLink == true){ if($(this).siblings('ul').length >0){ e.preventDefault(); } } // Auto close sibling menus if(defaults.autoClose == true){ autoCloseAccordion($parentsLi, $parentsUl); } if ($('> ul',$activeLi).is(':visible')){ $('ul',$activeLi).slideUp(defaults.speed); $('a',$activeLi).removeClass(defaults.classActive); } else { $(this).siblings('ul').slideToggle(defaults.speed); $('> a',$activeLi).addClass(defaults.classActive); ////////////////////// вычисляем активный пункт каталога /* zz=String(this).lastIndexOf('/')+1; alert(String(this).substr(zz));*/ ///////////////////////////// } // Write cookie if save state is on if(defaults.saveState == true){ createCookie(defaults.cookie, obj); } }); } // Set up accordion function setUpAccordion(){ $arrow = ''; var classParentLi = defaults.classParent+'-li'; $('> ul',obj).show(); $('li',obj).each(function(){ if($('> ul',this).length > 0){ $(this).addClass(classParentLi); $('> a',this).addClass(defaults.classParent).append($arrow); } }); $('> ul',obj).hide(); if(defaults.showCount == true){ $('li.'+classParentLi,obj).each(function(){ if(defaults.disableLink == true){ var getCount = parseInt($('ul a:not(.'+defaults.classParent+')',this).length); } else { var getCount = parseInt($('ul a',this).length); } $('> a',this).append(' ('+getCount+')'); }); } } function linkOver(){ $activeLi = $(this).parent('li'); $parentsLi = $activeLi.parents('li'); $parentsUl = $activeLi.parents('ul'); // Auto close sibling menus if(defaults.autoClose == true){ autoCloseAccordion($parentsLi, $parentsUl); } if ($('> ul',$activeLi).is(':visible')){ $('ul',$activeLi).slideUp(defaults.speed); $('a',$activeLi).removeClass(defaults.classActive); } else { $(this).siblings('ul').slideToggle(defaults.speed); $('> a',$activeLi).addClass(defaults.classActive); } // Write cookie if save state is on if(defaults.saveState == true){ createCookie(defaults.cookie, obj); } } function linkOut(){ } function menuOver(){ } function menuOut(){ if(defaults.menuClose == true){ $('ul',obj).slideUp(defaults.speed); // Reset active links $('a',obj).removeClass(defaults.classActive); createCookie(defaults.cookie, obj); } } // Auto-Close Open Menu Items function autoCloseAccordion($parentsLi, $parentsUl){ $('ul',obj).not($parentsUl).slideUp(defaults.speed); // Reset active links $('a',obj).removeClass(defaults.classActive); $('> a',$parentsLi).addClass(defaults.classActive); } // Reset accordion using active links function resetAccordion(){ $('ul',obj).hide(); $allActiveLi = $('a.'+defaults.classActive,obj); $allActiveLi.siblings('ul').show(); } }); // Retrieve cookie value and set active items function checkCookie(cookieId, obj){ if($.cookie(cookieId)) var cookieVal = $.cookie(cookieId); // добавил условие if(cookieVal != null){ // create array from cookie string var activeArray = cookieVal.split(','); $.each(activeArray, function(index,value){ var $cookieLi = $('li:eq('+value+')',obj); $('> a',$cookieLi).addClass(defaults.classActive); var $parentsLi = $cookieLi.parents('li'); $('> a',$parentsLi).addClass(defaults.classActive); }); } } // Write cookie function createCookie(cookieId, obj){ var activeIndex = []; // Create array of active items index value $('li a.'+defaults.classActive,obj).each(function(i){ var $arrayItem = $(this).parent('li'); var itemIndex = $('li',obj).index($arrayItem); activeIndex.push(itemIndex); }); // Store in cookie $.cookie(cookieId, activeIndex, { path: '/' }); } }; })(jQuery);