Skip to content

Instantly share code, notes, and snippets.

@andidev
Created September 17, 2011 08:02
Show Gist options
  • Save andidev/1223743 to your computer and use it in GitHub Desktop.
Save andidev/1223743 to your computer and use it in GitHub Desktop.
jquery plugin to add collapser do tags
jQuery.fn.collapse = function(options) {
// This plugin requires jquery.cookie.js plugin
// Load plugin for handling cookies
// $.getScript('jquery/plugins/jquery.cookie.js');
// Default values
var defaults = {
collapsed: true,
ignore: [],
rememberState: true
}
var settings = $.extend(defaults, options);
return this.each(function() {
// Handle rememered state from cookie
var cookieName = "collapse.js-" + $(this).attr("id") + '-collapsed';
if (settings.rememberState) {
if ($.cookie(cookieName) === 'true') {
settings.collapsed = true;
} else if ($.cookie(cookieName) === 'false') {
settings.collapsed = false;
}
}
// Create collapsor <div> with class="collapsor"
$(this).find('lh a').append('<div class="collapsor" style="float:right;"></div>');
$collapsor = $(this).find('.collapsor');
// Find items <li> to collapse and set class="collapse"
$allItems = $(this).find('li');
$allItems.addClass('collapse');
$.each(settings.ignore, function(index, value) {
$allItems.filter(':contains("' + value + '")').removeClass('collapse');
});
// Create a toggler for the collapsor icon
$collapsor.addClass('ui-icon ui-icon-triangle-1-s');
$collapsor.toggle(function() {
$(this).removeClass('ui-icon-triangle-1-s').addClass('ui-icon-triangle-1-e');
$.cookie(cookieName, 'true');
}, function() {
$(this).removeClass('ui-icon-triangle-1-e').addClass('ui-icon-triangle-1-s');
$.cookie(cookieName, 'false');
});
// Create a toggler for showing/hiding collapseble items
$collapsor.click(function() {
$collapseItems = $(this).closest('ul').find('.collapse');
$collapseItems.toggle('fast');
});
// Display initial state
if (settings.collapsed) {
$collapsor.click();
$collapseItems = $collapsor.closest('ul').find('.collapse');
$collapseItems.hide();
}
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment