1/*
2 * DokuWiki Plugin foldablelist (Syntax Component)
3 *
4 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
5 * @author  medmen <med-men@gmx.net>
6 *
7 * Based on a jquery script discussed at stackoverflow.com:
8 * https://stackoverflow.com/questions/4054211/jquery-hide-show-list-items-after-nth-item
9 * Requires: jQuery
10 *
11 */
12
13jQuery.fn.foldlist = function(settings) {
14    // get the next parent div with class foldablelist, see if it holds a parameter to override global settings
15    let new_setting = jQuery(this).parents('div.foldablelist').attr('data-collapse_after');
16    if (new_setting != undefined) {
17        settings.collapse_after = new_setting;
18    }
19
20    return this.each(function(){
21        var $bt = jQuery('<input type="button" class="toggle_foldablelist" />');
22        $bt.attr('style', settings.button_css);
23        $bt.val(settings.button_up_value);
24
25        var $list = jQuery(this);
26        if($list.children().length > settings.collapse_after) {
27            $list.children().slice(settings.collapse_after).toggle();
28            $bt.val(settings.button_down_value);
29
30            $list.parent().append($bt);
31            var $act_bt = $list.parent().find('.toggle_foldablelist');
32            $act_bt.click(function() {
33                $list.children().slice(settings.collapse_after).toggle();
34                if(settings.button_down_value == $act_bt.val()) {
35                    $act_bt.val(settings.button_up_value)
36                } else {
37                    $act_bt.val(settings.button_down_value)
38                }
39            });
40        }
41    });
42};
43
44
45jQuery(function(){
46    // read settings from config
47    let settings = JSINFO['plugin_foldablelist'];
48    jQuery('div.foldablelist ul,ol').each(function(){
49        jQuery(this).foldlist(settings);
50    });
51});
52