source: products/qPloneTabs/tags/0.2.1/skins/qPloneTabs/2.0.5/collapsiblesections.js @ 1591

Last change on this file since 1591 was 1, checked in by myroslav, 18 years ago

Building directory structure

File size: 3.3 KB
Line 
1/*
2 * This is the code for the collapsibles. It uses the following markup:
3 *
4 * <dl class="collapsible">
5 *   <dt class="collapsibleHeader">
6 *     A Title
7 *   </dt>
8 *   <dd class="collapsibleContent">
9 *     <!-- Here can be any content you want -->
10 *   </dd>
11 * </dl>
12 *
13 * When the collapsible is toggled, then the dl will get an additional class
14 * which switches between 'collapsedBlockCollapsible' and
15 * 'expandedBlockCollapsible'. You can use this to style it accordingly, for
16 * example:
17 *
18 * .expandedBlockCollapsible .collapsibleContent {
19 *   display: block;
20 * }
21 *
22 * .collapsedBlockCollapsible .collapsibleContent {
23 *   display: none;
24 * }
25 *
26 * If you add the 'collapsedOnLoad' class to the dl, then it will get
27 * collapsed on page load, this is done, so the content is accessible even when
28 * javascript is disabled.
29 *
30 * If you add the 'inline' class to the dl, then it will toggle between
31 * 'collapsedInlineCollapsible' and 'expandedInlineCollapsible' instead of
32 * 'collapsedBlockCollapsible' and 'expandedBlockCollapsible'.
33 *
34 * This file uses functions from register_function.js, cssQuery.js and
35 * nodeutils.js.
36 *
37 */
38
39function isCollapsible(node) {
40    if (hasClassName(node, 'collapsible')) {
41        return true;
42    }
43    return false;
44};
45
46function toggleCollapsible(event) {
47    if (!event) var event = window.event; // IE compatibility
48
49    if (!this.tagName && (this.tagName == 'DT' || this.tagName == 'dt')) {
50        return true;
51    }
52
53    var container = findContainer(this, isCollapsible);
54    if (!container) {
55        return true;
56    }
57
58    if (hasClassName(container, 'collapsedBlockCollapsible')) {
59        replaceClassName(container, 'collapsedBlockCollapsible', 'expandedBlockCollapsible');
60    } else if (hasClassName(container, 'expandedBlockCollapsible')) {
61        replaceClassName(container, 'expandedBlockCollapsible', 'collapsedBlockCollapsible');
62    } else if (hasClassName(container, 'collapsedInlineCollapsible')) {
63        replaceClassName(container, 'collapsedInlineCollapsible', 'expandedInlineCollapsible');
64    } else if (hasClassName(container, 'expandedInlineCollapsible')) {
65        replaceClassName(container, 'expandedInlineCollapsible', 'collapsedInlineCollapsible');
66    }
67};
68
69function activateCollapsibles() {
70    if (!W3CDOM) {return false;}
71
72    var collapsibles = cssQuery('dl.collapsible');
73    for (var i=0; i < collapsibles.length; i++) {
74        var collapsible = collapsibles[i];
75
76        var collapsible_header = cssQuery('dt.collapsibleHeader', collapsible)[0];
77        collapsible_header.onclick = toggleCollapsible;
78
79        if (hasClassName(collapsible, 'inline')) {
80            // the collapsible should be inline
81            if (hasClassName(collapsible, 'collapsedOnLoad')) {
82                replaceClassName(collapsible, 'collapsedOnLoad', 'collapsedInlineCollapsible');
83            } else {
84                addClassName(collapsible, 'expandedInlineCollapsible');
85            }
86        } else {
87            // the collapsible is a block
88            if (hasClassName(collapsible, 'collapsedOnLoad')) {
89                replaceClassName(collapsible, 'collapsedOnLoad', 'collapsedBlockCollapsible');
90            } else {
91                addClassName(collapsible, 'expandedBlockCollapsible');
92            }
93        }
94    }
95};
96
97registerPloneFunction(activateCollapsibles);
Note: See TracBrowser for help on using the repository browser.