1/*
2 * For Folded Text Plugin
3 *
4 * @author Fabian van-de-l_Isle <webmaster [at] lajzar [dot] co [dot] uk>
5 * @author Christopher Smith <chris [at] jalakai [dot] co [dot] uk>
6 * @author Schplurtz le Déboulonné <schplurtz [At] laposte [doT] net>
7 * @author Michael Hamann <michael@content-space.de>
8 */
9
10
11/*
12 * run on document load, setup everything we need
13 */
14jQuery(function() {
15    // containers for localised reveal/hide strings,
16    // populated from the content set by the action plugin
17    if(!JSINFO || !JSINFO['plugin_folded']) return;
18    var folded_reveal = JSINFO['plugin_folded']['reveal'];
19    var folded_hide = JSINFO['plugin_folded']['hide'];
20
21    jQuery('a.folder[href*="#folded_"]').attr('title', folded_reveal);
22
23    /*
24     * toggle the folded element via className change also adjust the classname and
25     * title tooltip on the folding link
26     */
27    jQuery('.dokuwiki .folder').click(function folded_toggle(evt) {
28        var id = this.href.match(/#(.*)$/)[1];
29        var $id = jQuery(document.getElementById(id));
30
31        if ($id.hasClass('hidden')) {
32            $id.addClass('open').removeClass('hidden');
33            jQuery(this)
34                .addClass('open')
35                .attr('title', folded_hide);
36        } else {
37            $id.addClass('hidden').removeClass('open');
38            jQuery(this)
39                .removeClass('open')
40                .attr('title', folded_reveal);
41        }
42
43        evt.preventDefault();
44        return false;
45    });
46});
47
48function fold_unfold_all() {
49    var i;
50    var hide = -1;
51    var cpt = 1;
52    var elements;
53
54    elements = document.getElementsByClassName("folder");
55    for (i = 0; i < elements.length; i++) {
56        // initially, find out whether we want to hide or unhide
57        if (hide == -1) {
58            if (elements[i].className.search("open") == -1) {
59                hide = 0;
60            } else {
61                hide = 1;
62            }
63        }
64
65        if (hide == 1) {
66            elements[i].className = elements[i].className.replace(/open/g, "");
67        } else {
68            elements[i].className = elements[i].className + " open";
69        }
70
71    }
72
73    // get folded elements
74    elements = document.getElementsByClassName("folded");
75    for (i = 0; i < elements.length; i++) {
76        if (hide == 1) {
77            elements[i].className = elements[i].className.replace(/open/g, "");
78            elements[i].className = elements[i].className + " hidden";
79        } else {
80            elements[i].className = elements[i].className.replace(/hidden/g, "");
81            elements[i].className = elements[i].className + " open";
82        }
83    }
84}
85
86// support graceful js degradation, this hides the folded blocks from view
87// before they are shown,
88// whilst still allowing non-js user to see any folded content.
89document.write('<style type="text/css" media="screen"><!--/*--><![CDATA[/*><!--*/ .folded.hidden { display: none; } .folder .indicator { visibility: visible; } /*]]>*/--></style>');
90