window.initializeCodeFolding = function(show) { // handlers for show-all and hide all $("#rmd-show-all-code").click(function() { $('div.r-code-collapse').each(function() { $(this).collapse('show'); }); }); $("#rmd-hide-all-code").click(function() { $('div.r-code-collapse').each(function() { $(this).collapse('hide'); }); }); // index for unique code element ids var currentIndex = 1; // select all R code blocks var rCodeBlocks = $('pre.r, pre.python, pre.bash, pre.sql, pre.cpp, pre.stan, pre.julia, pre.foldable'); rCodeBlocks.each(function() { // skip if the block has fold-none class if ($(this).hasClass('fold-none')) return; // create a collapsable div to wrap the code in var div = $('
'); var showThis = (show || $(this).hasClass('fold-show')) && !$(this).hasClass('fold-hide'); var id = 'rcode-643E0F36' + currentIndex++; div.attr('id', id); $(this).before(div); $(this).detach().appendTo(div); // add a show code button right above var showCodeText = $('' + (showThis ? 'Hide' : 'Code') + ''); var showCodeButton = $(''); showCodeButton.append(showCodeText); showCodeButton .attr('data-toggle', 'collapse') .attr('data-bs-toggle', 'collapse') // BS5 .attr('data-target', '#' + id) .attr('data-bs-target', '#' + id) // BS5 .attr('aria-expanded', showThis) .attr('aria-controls', id); var buttonRow = $('
'); var buttonCol = $('
'); buttonCol.append(showCodeButton); buttonRow.append(buttonCol); div.before(buttonRow); // show the div if necessary if (showThis) div.collapse('show'); // update state of button on show/hide // * Change text // * add a class for intermediate states styling div.on('hide.bs.collapse', function () { showCodeText.text('Code'); showCodeButton.addClass('btn-collapsing'); }); div.on('hidden.bs.collapse', function () { showCodeButton.removeClass('btn-collapsing'); }); div.on('show.bs.collapse', function () { showCodeText.text('Hide'); showCodeButton.addClass('btn-expanding'); }); div.on('shown.bs.collapse', function () { showCodeButton.removeClass('btn-expanding'); }); }); }