/html/js/jquery.dcjqaccordion.2.7.js
JavaScript | 242 lines | 149 code | 37 blank | 56 comment | 35 complexity | 7c953bda72c834fdc8fed6d0748a4574 MD5 | raw file
Possible License(s): LGPL-2.1, MPL-2.0-no-copyleft-exception, Apache-2.0
- /*
- * 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 : 'slow',
- saveState : true,
- disableLink : true,
- 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);
- if($(this).siblings('ul').hasClass("level-3")){
- //$("#main-content .wrapper").css("margin-left","240px;");
- }
- }
- if ($activeLi.hasClass("level-2-li") && $(".level-2-li >a").hasClass("active")){
- $("#container").removeClass("open-right-panel")
- $("#container > .header").removeClass("merge-header")
- $("#container").addClass("open-right-panel-2")
- $("#container > .header").addClass("merge-header-2")
- }else if($activeLi.hasClass("level-2-li") || ($activeLi.hasClass("level-1-li") && !$(".level-1-li > a").hasClass("active"))){
- $("#container").addClass("open-right-panel")
- $("#container > .header").addClass("merge-header")
- $("#container").removeClass("open-right-panel-2")
- $("#container > .header").removeClass("merge-header-2")
- }
-
- // // Write cookie if save state is on
- // if(defaults.saveState == true){
- // createCookie(defaults.cookie, obj);
- // }
- });
- }
- // Set up accordion
- function setUpAccordion(){
- $arrow = '<span class="'+defaults.classArrow+'"></span>';
- 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(' <span class="'+defaults.classCount+'">'+getCount+'</span>');
- });
- }
- }
-
- 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){
- // 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);