summaryrefslogtreecommitdiffstats
path: root/develop/dynsections.js
diff options
context:
space:
mode:
authorbyrnHDF <byrnHDF@users.noreply.github.com>2024-01-29 19:10:27 (GMT)
committerbyrnHDF <byrnHDF@users.noreply.github.com>2024-01-29 19:10:27 (GMT)
commit63b7d411312cb7c38efd1648363e347f27c24048 (patch)
treeaf34e5dc2c0cdb79bc809e2034f7d8c7fed6e2e4 /develop/dynsections.js
parent6ba66d0a9efca6f012934bfbeb9bf4ef19465bbd (diff)
downloadhdf5-63b7d411312cb7c38efd1648363e347f27c24048.zip
hdf5-63b7d411312cb7c38efd1648363e347f27c24048.tar.gz
hdf5-63b7d411312cb7c38efd1648363e347f27c24048.tar.bz2
deploy: 365e23340cd001ee751da366235ae420156ad728
Diffstat (limited to 'develop/dynsections.js')
-rw-r--r--develop/dynsections.js261
1 files changed, 167 insertions, 94 deletions
diff --git a/develop/dynsections.js b/develop/dynsections.js
index 3174bd7..8f49326 100644
--- a/develop/dynsections.js
+++ b/develop/dynsections.js
@@ -22,100 +22,173 @@
@licend The above is the entire license notice for the JavaScript code in this file
*/
-function toggleVisibility(linkObj)
-{
- var base = $(linkObj).attr('id');
- var summary = $('#'+base+'-summary');
- var content = $('#'+base+'-content');
- var trigger = $('#'+base+'-trigger');
- var src=$(trigger).attr('src');
- if (content.is(':visible')===true) {
- content.hide();
- summary.show();
- $(linkObj).addClass('closed').removeClass('opened');
- $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
- } else {
- content.show();
- summary.hide();
- $(linkObj).removeClass('closed').addClass('opened');
- $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
- }
- return false;
-}
-
-function updateStripes()
-{
- $('table.directory tr').
- removeClass('even').filter(':visible:even').addClass('even');
-}
-
-function toggleLevel(level)
-{
- $('table.directory tr').each(function() {
- var l = this.id.split('_').length-1;
- var i = $('#img'+this.id.substring(3));
- var a = $('#arr'+this.id.substring(3));
- if (l<level+1) {
- i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
- a.html('&#9660;');
- $(this).show();
- } else if (l==level+1) {
- i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
- a.html('&#9658;');
- $(this).show();
+
+let dynsection = {
+
+ // helper function
+ updateStripes : function() {
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+ $('table.directory tr').
+ removeClass('odd').filter(':visible:odd').addClass('odd');
+ },
+
+ toggleVisibility : function(linkObj) {
+ const base = $(linkObj).attr('id');
+ const summary = $('#'+base+'-summary');
+ const content = $('#'+base+'-content');
+ const trigger = $('#'+base+'-trigger');
+ const src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+ },
+
+ toggleLevel : function(level) {
+ $('table.directory tr').each(function() {
+ const l = this.id.split('_').length-1;
+ const i = $('#img'+this.id.substring(3));
+ const a = $('#arr'+this.id.substring(3));
+ if (l<level+1) {
+ i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+ a.html('&#9660;');
+ $(this).show();
+ } else if (l==level+1) {
+ i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+ a.html('&#9658;');
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ this.updateStripes();
+ },
+
+ toggleFolder : function(id) {
+ // the clicked row
+ const currentRow = $('#row_'+id);
+
+ // all rows after the clicked row
+ const rows = currentRow.nextAll("tr");
+
+ const re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+ // only match elements AFTER this one (can't hide elements before)
+ const childRows = rows.filter(function() { return this.id.match(re); });
+
+ // first row is visible we are HIDING
+ if (childRows.filter(':first').is(':visible')===true) {
+ // replace down arrow by right arrow for current row
+ const currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ currentRowSpans.filter(".arrow").html('&#9658;');
+ rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+ } else { // we are SHOWING
+ // replace right arrow by down arrow for current row
+ const currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+ currentRowSpans.filter(".arrow").html('&#9660;');
+ // replace down arrows by right arrows for child rows
+ const childRowsSpans = childRows.find("span");
+ childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ childRowsSpans.filter(".arrow").html('&#9658;');
+ childRows.show(); //show all children
+ }
+ this.updateStripes();
+ },
+
+ toggleInherit : function(id) {
+ const rows = $('tr.inherit.'+id);
+ const img = $('tr.inherit_header.'+id+' img');
+ const src = $(img).attr('src');
+ if (rows.filter(':first').is(':visible')===true) {
+ rows.css('display','none');
+ $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ rows.css('display','table-row'); // using show() causes jump in firefox
+ $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ },
+};
+
+let codefold = {
+ opened : true,
+
+ // in case HTML_COLORSTYLE is LIGHT or DARK the vars will be replaced, so we write them out explicitly and use double quotes
+ plusImg: [ "var(--fold-plus-image)", "var(--fold-plus-image-relpath)" ],
+ minusImg: [ "var(--fold-minus-image)", "var(--fold-minus-image-relpath)" ],
+
+ // toggle all folding blocks
+ toggle_all : function(relPath) {
+ if (this.opened) {
+ $('#fold_all').css('background-image',this.plusImg[relPath]);
+ $('div[id^=foldopen]').hide();
+ $('div[id^=foldclosed]').show();
} else {
- $(this).hide();
+ $('#fold_all').css('background-image',this.minusImg[relPath]);
+ $('div[id^=foldopen]').show();
+ $('div[id^=foldclosed]').hide();
}
- });
- updateStripes();
-}
-
-function toggleFolder(id)
-{
- // the clicked row
- var currentRow = $('#row_'+id);
-
- // all rows after the clicked row
- var rows = currentRow.nextAll("tr");
-
- var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
-
- // only match elements AFTER this one (can't hide elements before)
- var childRows = rows.filter(function() { return this.id.match(re); });
-
- // first row is visible we are HIDING
- if (childRows.filter(':first').is(':visible')===true) {
- // replace down arrow by right arrow for current row
- var currentRowSpans = currentRow.find("span");
- currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
- currentRowSpans.filter(".arrow").html('&#9658;');
- rows.filter("[id^=row_"+id+"]").hide(); // hide all children
- } else { // we are SHOWING
- // replace right arrow by down arrow for current row
- var currentRowSpans = currentRow.find("span");
- currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
- currentRowSpans.filter(".arrow").html('&#9660;');
- // replace down arrows by right arrows for child rows
- var childRowsSpans = childRows.find("span");
- childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
- childRowsSpans.filter(".arrow").html('&#9658;');
- childRows.show(); //show all children
- }
- updateStripes();
-}
-
-
-function toggleInherit(id)
-{
- var rows = $('tr.inherit.'+id);
- var img = $('tr.inherit_header.'+id+' img');
- var src = $(img).attr('src');
- if (rows.filter(':first').is(':visible')===true) {
- rows.css('display','none');
- $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
- } else {
- rows.css('display','table-row'); // using show() causes jump in firefox
- $(img).attr('src',src.substring(0,src.length-10)+'open.png');
- }
-}
+ this.opened=!this.opened;
+ },
+
+ // toggle single folding block
+ toggle : function(id) {
+ $('#foldopen'+id).toggle();
+ $('#foldclosed'+id).toggle();
+ },
+
+ init : function(relPath) {
+ $('span[class=lineno]').css({
+ 'padding-right':'4px',
+ 'margin-right':'2px',
+ 'display':'inline-block',
+ 'width':'54px',
+ 'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%'
+ });
+ // add global toggle to first line
+ $('span[class=lineno]:first').append('<span class="fold" id="fold_all" '+
+ 'onclick="javascript:codefold.toggle_all('+relPath+');" '+
+ 'style="background-image:'+this.minusImg[relPath]+';"></span>');
+ // add vertical lines to other rows
+ $('span[class=lineno]').not(':eq(0)').append('<span class="fold"></span>');
+ // add toggle controls to lines with fold divs
+ $('div[class=foldopen]').each(function() {
+ // extract specific id to use
+ const id = $(this).attr('id').replace('foldopen','');
+ // extract start and end foldable fragment attributes
+ const start = $(this).attr('data-start');
+ const end = $(this).attr('data-end');
+ // replace normal fold span with controls for the first line of a foldable fragment
+ $(this).find('span[class=fold]:first').replaceWith('<span class="fold" '+
+ 'onclick="javascript:codefold.toggle(\''+id+'\');" '+
+ 'style="background-image:'+codefold.minusImg[relPath]+';"></span>');
+ // append div for folded (closed) representation
+ $(this).after('<div id="foldclosed'+id+'" class="foldclosed" style="display:none;"></div>');
+ // extract the first line from the "open" section to represent closed content
+ const line = $(this).children().first().clone();
+ // remove any glow that might still be active on the original line
+ $(line).removeClass('glow');
+ if (start) {
+ // if line already ends with a start marker (e.g. trailing {), remove it
+ $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),''));
+ }
+ // replace minus with plus symbol
+ $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]);
+ // append ellipsis
+ $(line).append(' '+start+'<a href="javascript:codefold.toggle(\''+id+'\')">&#8230;</a>'+end);
+ // insert constructed line into closed div
+ $('#foldclosed'+id).html(line);
+ });
+ },
+};
/* @license-end */