2 * Interface Elements for jQuery
\r
5 * http://interface.eyecon.ro
\r
7 * Copyright (c) 2006 Stefan Petre
\r
8 * Dual licensed under the MIT (MIT-LICENSE.txt)
\r
9 * and GPL (GPL-LICENSE.txt) licenses.
\r
14 * Create an accordion from a HTML structure
\r
16 * @example $('#myAccordion').Accordion(
\r
18 * headerSelector : 'dt',
\r
19 * panelSelector : 'dd',
\r
20 * activeClass : 'myAccordionActive',
\r
21 * hoverClass : 'myAccordionHover',
\r
22 * panelHeight : 200,
\r
26 * @desc Converts definition list with id 'myAccordion' into an accordion width dt tags as headers and dd tags as panels
\r
29 * @description Create an accordion from a HTML structure
\r
30 * @param Hash hash A hash of parameters
\r
31 * @option Integer panelHeight the pannels' height
\r
32 * @option String headerSelector selector for header elements
\r
33 * @option String panelSelector selector for panel elements
\r
34 * @option String activeClass (optional) CSS Class for active header
\r
35 * @option String hoverClass (optional) CSS Class for hovered header
\r
36 * @option Function onShow (optional) callback called whenever an pannel gets active
\r
37 * @option Function onHide (optional) callback called whenever an pannel gets incative
\r
38 * @option Function onClick (optional) callback called just before an panel gets active
\r
39 * @option Mixed speed (optional) animation speed, integer for miliseconds, string ['slow' | 'normal' | 'fast']
\r
40 * @option Integer crrentPanel (otional) the active panel on initialisation
\r
43 * @cat Plugins/Interface
\r
44 * @author Stefan Petre
\r
46 jQuery.iAccordion = {
\r
47 build : function(options)
\r
52 if (!options.headerSelector || !options.panelSelector)
\r
56 panelHeight : options.panelHeight||300,
\r
57 headerSelector : options.headerSelector,
\r
58 panelSelector : options.panelSelector,
\r
59 activeClass : options.activeClass||'fakeAccordionClass',
\r
60 hoverClass : options.hoverClass||'fakeAccordionClass',
\r
61 onShow : options.onShow && typeof options.onShow == 'function' ? options.onShow : false,
\r
62 onHide : options.onShow && typeof options.onHide == 'function' ? options.onHide : false,
\r
63 onClick : options.onClick && typeof options.onClick == 'function' ? options.onClick : false,
\r
64 headers : jQuery(options.headerSelector, this),
\r
65 panels : jQuery(options.panelSelector, this),
\r
66 speed : options.speed||400,
\r
67 currentPanel : options.currentPanel||0
\r
69 el.accordionCfg.panels
\r
71 .css('height', '1px')
\r
75 height: el.accordionCfg.panelHeight + 'px',
\r
81 el.accordionCfg.headers
\r
85 this.accordionPos = nr;
\r
91 jQuery(this).addClass(el.accordionCfg.hoverClass);
\r
95 jQuery(this).removeClass(el.accordionCfg.hoverClass);
\r
102 if (el.accordionCfg.currentPanel == this.accordionPos)
\r
104 el.accordionCfg.headers
\r
105 .eq(el.accordionCfg.currentPanel)
\r
106 .removeClass(el.accordionCfg.activeClass)
\r
108 .eq(this.accordionPos)
\r
109 .addClass(el.accordionCfg.activeClass)
\r
111 el.accordionCfg.panels
\r
112 .eq(el.accordionCfg.currentPanel)
\r
115 el.accordionCfg.speed,
\r
118 this.style.display = 'none';
\r
119 if (el.accordionCfg.onHide) {
\r
120 el.accordionCfg.onHide.apply(el, [this]);
\r
125 .eq(this.accordionPos)
\r
128 {height:el.accordionCfg.panelHeight},
\r
129 el.accordionCfg.speed,
\r
132 this.style.display = 'block';
\r
133 if (el.accordionCfg.onShow) {
\r
134 el.accordionCfg.onShow.apply(el, [this]);
\r
140 if (el.accordionCfg.onClick) {
\r
141 el.accordionCfg.onClick.apply(
\r
145 el.accordionCfg.panels.get(this.accordionPos),
\r
146 el.accordionCfg.headers.get(el.accordionCfg.currentPanel),
\r
147 el.accordionCfg.panels.get(el.accordionCfg.currentPanel)
\r
151 el.accordionCfg.currentPanel = this.accordionPos;
\r
155 .addClass(el.accordionCfg.activeClass)
\r
158 .css('height', jQuery(this).css('height'))
\r
159 .css('overflow', 'hidden');
\r
165 jQuery.fn.Accordion = jQuery.iAccordion.build;