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