JSFiddle - React, Tailwind, and code Playground
HTML
<div id='content'>
<h1>Stuff</h1>
<fieldset>
<legend>Pets</legend>
<div class='options'>Dogs Cats</div>
</fieldset>
<fieldset>
<legend>Services</legend>
<div class='options'>Service 1, Service 2, Service 3</div>
</fieldset
</div>
JavaScript
(function($){
$.fn.collapsify = function(collapsable, options){
var settings = $.extend(
{
start_collapsed : true,
textFadeSpeed : 'slow',
containerShrinkSpeed : 'fast',
containerClass : 'collapsify_container',
collapsableClass : 'collapsify_collapsable',
collapsedClass : 'collapsify_collapsed',
expandedClass : 'collapsify_expanded',
expandLinkClass : 'collapsify_expand',
collapseLinkClass : 'collapsify_collapse',
collapseLinkText : 'Collapse',
expandLinkText : 'Expand'
},options||{});
var containers = this;
var EXPAND_LINK_HTML = '<a href="#" class="' + settings['expandLinkClass'] + '">' + settings['expandLinkText'] + '</a>';
var COLLAPSE_LINK_HTML = '<a href="#" class="' + settings['collapseLinkClass'] + '">' + settings['collapseLinkText'] + '</a>';
var EXPAND_LINK;
var COLLAPSE_LINK;
var CONTAINER_SELECTOR = "." + settings['containerClass'];
var COLLAPSABLE_SELECTOR = "." + settings['collapsableClass'];
var COLLAPSED_SELECTOR = "." + settings['collapsedClass'];
var EXPANDED_SELECTOR = "." + settings['expandedClass'];
var COLLAPSE_LINK_SELECTOR = "." + settings['collapseLinkClass'];
var EXPAND_LINK_SELECTOR = "." + settings['expandLinkClass'];
var QUEUE_NAME = 'collapsify_queue';
/* validate the passed wrapped set */
if(!collapsable instanceof jQuery){
throw new UserException("You did not pass a wrapped set to collapsify.");
}
collapsable.each(function(){
if(containers.find(this).size() == 0){
throw new UserException("At least one element of wrapped set you passed to collapsify isn't a decendent of the calling context.")
}
})
/*helpers*/
var collapsify_dequeue = function(queue){ return function(){$(queue).dequeue(QUEUE_NAME)}}; /*Interesting issue with self executing functions, workaround by returning another function in this function*/
/*event handlers*/
var collapse = function()
{
var hide =...