Description

This is a (very) simple plugin that allows you to make any element on a web-page unobtrusively collapsable. It's something I find I end up doing quite a lot to clean up busy pages and hide away non-essential information, so I decided to write a jQuery plugin to do the hard work for me...

Usage

Using the plugin is pretty simple:

$('clickable element(s)').toggleControl( 'collapsable element(s)', options );

i.e. The following would make a title, control the toggling of a box of text (like this page)

$('#description-title').toggleControl('#description-body');

or you can use it to act on a series of paired elements - i.e. fieldsets in a form

$('fieldset.toggleable legend').toggleControl('fieldset.toggleable div');

These are the configurable options (passed in a JSON string):

hide: [true/false]
Hide the toggle-able element on page load, (default action is true).
speed: ['slow'/'normal'/'fast' etc.]
The speed of the sliding animations, (default setting is 'normal').
event: ['click'/'mouseover' etc.]
The event to observe for to fire the toggleControl, (default is 'click').
openClass
The CSS class for the control to take when its action is to 'open' the content, (default is 'toggle-open').
closeClass
The CSS class for the control to take when its action is to 'close' the content, (default is 'toggle-close').

Examples

This whole page uses the control, but here's a couple of examples using fieldsets. The only extra mark-up needed is a class of 'toggleable' as we use that to distinguish between other fieldsets. The code to activate them is as follows:

$('.toggleable legend').toggleControl('.toggleable div',{ speed:'slow' });

Simple eh?

Title

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent ac turpis ut purus scelerisque ornare. In vitae arcu. Ut eros urna, convallis id, blandit pretium, varius eu, turpis. Maecenas lacinia, tortor ut aliquet dignissim, eros risus vehicula sem, elementum sagittis augue ipsum sit amet libero. Donec semper dolor eget lacus. Curabitur tristique, nunc nec lobortis sollicitudin, nunc odio convallis est, nec rutrum sapien augue vitae erat. Ut tincidunt faucibus est. Morbi accumsan. Aliquam bibendum hendrerit sem. Nam lectus massa, facilisis at, mattis vel, tincidunt nec, ipsum. Donec ante enim, vestibulum vitae, vulputate sed, iaculis et, arcu. Suspendisse potenti. Phasellus egestas ullamcorper dolor. Proin sagittis varius erat. Donec vitae mauris at metus ultrices mollis. Morbi tincidunt.

Donec adipiscing rhoncus ante. Curabitur dapibus luctus magna. Etiam vel augue vel lorem gravida feugiat. Duis lorem leo, lobortis quis, sagittis eget, porttitor ut, pede. Maecenas dignissim varius justo. Duis interdum, enim vitae tincidunt luctus, nisl felis pulvinar metus, eu tincidunt pede erat vitae quam. Sed a ipsum. Donec sit amet quam et leo commodo facilisis. Nunc ut nulla vel sapien commodo mattis. Morbi at ante. Mauris tempor tortor volutpat neque. Integer porta mi venenatis orci. Maecenas nisl.

Praesent pretium. Curabitur sodales libero vel erat. Curabitur lacinia sapien tempor leo. Phasellus enim justo, pellentesque nec, malesuada nec, convallis eget, lorem. Proin semper lectus quis lorem. Praesent justo est, bibendum eu, consectetuer eget, venenatis vitae, ligula. Quisque scelerisque tortor id eros. Curabitur pharetra leo vel velit. Integer mattis velit nec orci. Fusce in justo. Fusce tempor enim non mauris. Aenean aliquam bibendum nunc. Phasellus interdum laoreet erat. Duis commodo orci sed sem. Mauris sapien nisl, convallis vitae, suscipit ut, sodales volutpat, ligula. Nunc nec libero in risus aliquet vehicula. Suspendisse sed nulla vehicula mauris aliquam placerat. Morbi pretium turpis ac libero. Vestibulum pulvinar ornare pede.

Duis libero odio, aliquam eu, pulvinar eget, gravida et, ipsum. Etiam risus. Aliquam velit. Cras luctus gravida tellus. Suspendisse sit amet risus. Mauris lacus magna, mattis in, aliquet eu, rhoncus non, ipsum. Aliquam interdum metus et sapien. Etiam pellentesque dui ac tellus. Curabitur at tellus sit amet augue luctus tempor. Etiam consequat, enim vitae tempus dapibus, lacus elit fringilla mauris, posuere volutpat est pede ultricies turpis. Pellentesque dapibus suscipit enim. Quisque et dui a nunc aliquet sodales. In ut augue venenatis orci pulvinar porttitor.

Nulla facilisi. Nulla sapien nunc, varius eu, suscipit sit amet, vulputate eget, nisl. Maecenas sit amet turpis vitae nisl iaculis pulvinar. Donec tempus justo at eros. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed lobortis. Praesent lacus nunc, faucibus vitae, tristique in, suscipit vitae, tortor. Nunc congue neque vitae urna. Sed a dolor. Mauris mauris massa, lacinia at, imperdiet quis, sodales ornare, risus. In massa nunc, mattis luctus, accumsan at, viverra sit amet, quam. Nunc purus erat, iaculis vitae, fringilla bibendum, ornare et, orci. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur ante enim, lacinia non, feugiat sit amet, imperdiet sit amet, orci. Nam vel diam.

Title

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent ac turpis ut purus scelerisque ornare. In vitae arcu. Ut eros urna, convallis id, blandit pretium, varius eu, turpis. Maecenas lacinia, tortor ut aliquet dignissim, eros risus vehicula sem, elementum sagittis augue ipsum sit amet libero. Donec semper dolor eget lacus. Curabitur tristique, nunc nec lobortis sollicitudin, nunc odio convallis est, nec rutrum sapien augue vitae erat. Ut tincidunt faucibus est. Morbi accumsan. Aliquam bibendum hendrerit sem. Nam lectus massa, facilisis at, mattis vel, tincidunt nec, ipsum. Donec ante enim, vestibulum vitae, vulputate sed, iaculis et, arcu. Suspendisse potenti. Phasellus egestas ullamcorper dolor. Proin sagittis varius erat. Donec vitae mauris at metus ultrices mollis. Morbi tincidunt.

Donec adipiscing rhoncus ante. Curabitur dapibus luctus magna. Etiam vel augue vel lorem gravida feugiat. Duis lorem leo, lobortis quis, sagittis eget, porttitor ut, pede. Maecenas dignissim varius justo. Duis interdum, enim vitae tincidunt luctus, nisl felis pulvinar metus, eu tincidunt pede erat vitae quam. Sed a ipsum. Donec sit amet quam et leo commodo facilisis. Nunc ut nulla vel sapien commodo mattis. Morbi at ante. Mauris tempor tortor volutpat neque. Integer porta mi venenatis orci. Maecenas nisl.

Praesent pretium. Curabitur sodales libero vel erat. Curabitur lacinia sapien tempor leo. Phasellus enim justo, pellentesque nec, malesuada nec, convallis eget, lorem. Proin semper lectus quis lorem. Praesent justo est, bibendum eu, consectetuer eget, venenatis vitae, ligula. Quisque scelerisque tortor id eros. Curabitur pharetra leo vel velit. Integer mattis velit nec orci. Fusce in justo. Fusce tempor enim non mauris. Aenean aliquam bibendum nunc. Phasellus interdum laoreet erat. Duis commodo orci sed sem. Mauris sapien nisl, convallis vitae, suscipit ut, sodales volutpat, ligula. Nunc nec libero in risus aliquet vehicula. Suspendisse sed nulla vehicula mauris aliquam placerat. Morbi pretium turpis ac libero. Vestibulum pulvinar ornare pede.

Duis libero odio, aliquam eu, pulvinar eget, gravida et, ipsum. Etiam risus. Aliquam velit. Cras luctus gravida tellus. Suspendisse sit amet risus. Mauris lacus magna, mattis in, aliquet eu, rhoncus non, ipsum. Aliquam interdum metus et sapien. Etiam pellentesque dui ac tellus. Curabitur at tellus sit amet augue luctus tempor. Etiam consequat, enim vitae tempus dapibus, lacus elit fringilla mauris, posuere volutpat est pede ultricies turpis. Pellentesque dapibus suscipit enim. Quisque et dui a nunc aliquet sodales. In ut augue venenatis orci pulvinar porttitor.

Nulla facilisi. Nulla sapien nunc, varius eu, suscipit sit amet, vulputate eget, nisl. Maecenas sit amet turpis vitae nisl iaculis pulvinar. Donec tempus justo at eros. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed lobortis. Praesent lacus nunc, faucibus vitae, tristique in, suscipit vitae, tortor. Nunc congue neque vitae urna. Sed a dolor. Mauris mauris massa, lacinia at, imperdiet quis, sodales ornare, risus. In massa nunc, mattis luctus, accumsan at, viverra sit amet, quam. Nunc purus erat, iaculis vitae, fringilla bibendum, ornare et, orci. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur ante enim, lacinia non, feugiat sit amet, imperdiet sit amet, orci. Nam vel diam.

Download

jquery.togglecontrol.js (uncompressed) - 1.6 Kb
jquery.togglecontrol.min.js (minified) - 624 bytes
jquery.togglecontrol.pack.js (packed) - 710 bytes

Or view the code itself...

                            /*
                             * jQuery toggleControl 1.0
                             * 
                             * Copyright (c) 2008 Darren Oakley
                             *
                             * http://hocuspokus.net/
                             *
                             * 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.extend({
                                    toggleControl: function( element, options ) {

                                        var defaults = {
                                            hide: true,
                                            speed: "normal",
                                            event: "click",
                                            openClass: "toggle-open",
                                            closeClass: "toggle-close"
                                        };

                                        var options = $.extend(defaults, options);

                                        return this.each( function( index ) {
                                            var obj = $(this);

                                            $(this).each( function ( i, toggle ) {

                                                if ( options.hide ) {
                                                    $(toggle).addClass( options.openClass );
                                                    $(element).slideUp( options.speed );
                                                } else {
                                                    $(toggle).addClass( options.closeClass );
                                                }

                                                $(toggle).bind( options.event, function(event) {
                                                    $(toggle).toggleClass( options.openClass );
                                                    $(toggle).toggleClass( options.closeClass );
                                                    $(element).eq(index).slideToggle( options.speed );
                                                });
                                            });

                                        });

                                    }
                                });
                            })(jQuery);