-
-
Save rainb3rry/716d10cd5c71162458ae34456745b52d to your computer and use it in GitHub Desktop.
jQuery Expand Collapse All
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* jquery.expandCollapseAll.js | |
* Arietis Software | |
* www.arietis-software.com | |
* 2009 | |
* version: 1.2 | |
* ---------------------------- | |
* distributed under the GNU General Public License Version 2 | |
* http://www.arietis-software.com/license/gnu/license.txt | |
* | |
*/ | |
(function($) { | |
$.fn.expandCollapseAll = function(options) { | |
var opts = $.extend( {}, $.fn.expandCollapseAll.defaults, options); | |
return this.each(function() { | |
$this = $(this); | |
var o = $.meta ? $.extend( {}, opts, $this.data()) : opts; | |
initGroup(o, $(this)); | |
}); | |
} | |
function getBaseName(href) { | |
if (href) { | |
var arr = href.split('/'); | |
return href.replace(/^http:\/\/[\w\.]+/, ''); | |
} else { | |
return false; | |
} | |
} | |
function initGroup(o, obj) { | |
var hasCurrPage = false; | |
//get the browser url | |
var href = document.location.href ? document.location.href | |
: document.location; | |
//get the filepath (without domain) | |
var basename = getBaseName(href); | |
/* | |
* find the group with the selected page and make it visible | |
*/ | |
if (basename) { | |
$kids = obj.next('ul').find('li a'); | |
$.each($kids, function() { | |
$kid = $(this); | |
var filename = getBaseName($kid.attr('href')); | |
//does the span contain the selected page? | |
if (basename == filename) { //yes (open the group) | |
hasCurrPage = true; | |
$ancestors = $kid.parents('ul'); | |
$.each($ancestors, function() { | |
$ancestor = $(this); | |
if ($ancestor.attr('id') == '') { | |
$span = $ancestor.prev('span'); | |
//change the +/- icon | |
$span.addClass(o.currGroupClass); | |
//underline the select page | |
$kid.addClass(o.currPageClass); | |
} | |
}); | |
} | |
}); | |
} | |
/* | |
* close all groups that don't contain the selected page | |
*/ | |
if (!hasCurrPage) { | |
//close the group | |
obj.next('ul').hide(); | |
//bind mouseover (hover) event | |
obj.mouseover(function() { | |
$(this).addClass(o.mouseoverClass); | |
}); | |
//bind mouseout (hover) event | |
obj.mouseout(function() { | |
$(this).removeClass(o.mouseoverClass); | |
}); | |
//bind onclick event | |
obj.click(function() { | |
//change the +/- icon | |
$(this).toggleClass(o.expandedClass); | |
//toggle the ul visibility | |
$(this).next('ul').toggle(o.toggleSpeed); | |
}); | |
} | |
} | |
$.fn.expandCollapseAll.defaults = { | |
mouseoverClass : 'mouseover', | |
expandedClass : 'expanded', | |
currGroupClass : 'on', | |
currPageClass : 'underline', | |
toggleSpeed : 'fast' | |
} | |
})(jQuery); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment