X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;ds=sidebyside;f=yarrg%2Fweb%2Ftabsort;h=444bfb56b15f6e1b01e6e2ff74a29c1140209bb8;hb=67d3ce955da83bcd2aae676e1092bc160277b21e;hp=e690ac8df740d2535ecc56425452e79ab4463305;hpb=e58353c2740e8c35e3ce04397d60009989c2f16e;p=ypp-sc-tools.db-live.git diff --git a/yarrg/web/tabsort b/yarrg/web/tabsort index e690ac8..444bfb5 100644 --- a/yarrg/web/tabsort +++ b/yarrg/web/tabsort @@ -38,10 +38,16 @@ <%args> $table => 'ts_table' $sortkeys => 'ts_sortkeys' +$throw => undef +$tbrow => undef +$rowclass => undef $cols <%doc> + Numeric + SortKey + MapFn NoSort DoReverse @@ -56,14 +62,44 @@ function <% $sortfn %>(compar) { var tbody= firstrow.parentNode var rows= tbody.childNodes var newrows= new Array; - for (var rowix=0; rowix < rows.length; rowix++) { + var finalrows= new Array; + var rowix= 0; +% if (defined $throw) { + for (; rowix < rows.length; rowix++) { var row= rows.item(rowix); - debug('process row '+rowix+' [[ '+row+' ]] id='+row.id) - if (!row.id) continue; - if (row.tagName != 'TR') continue; + if (row.id == '<% $throw %>') break; + debug('skip row '+rowix+' [[ '+row+' ]] id='+row.id); + } + rowix++; +% } + for (; rowix < rows.length; rowix++) { + var row= rows.item(rowix); +% if (defined $tbrow) { + if (row.id == '<% $tbrow %>') break; +% } + if (!row.id) { debug('noid row '+rowix+' [[ '+row+' ]]'); continue; } + if (row.tagName != 'TR') { + debug('no-tr row '+rowix+' tagName='+row.tagName+' [[ '+row+' ]]'); + continue; + } + debug('process row '+rowix+' [[ '+row+' ]] id='+row.id); newrows.push(row); } + for (; rowix < rows.length; rowix++) { + var row= rows.item(rowix); + finalrows.push(row); + debug('final row '+rowix+' [[ '+row+' ]]'); + } newrows.sort(compar); +% if (defined $rowclass) { + for (var rowix=0; rowix < newrows.length; rowix++) { + var row= newrows[rowix]; + var classname= '<% $rowclass %>'+(rowix % 2); + debug('fix row '+rowix+' class '+classname); + row.className= classname; + } +% } + newrows= newrows.concat(finalrows); for (var rowix=0; rowix < newrows.length; rowix++) { var row= newrows[rowix]; debug('add row '+rowix+' [[ '+row+' ]]'); @@ -83,7 +119,12 @@ function <% $mapfn %>(rowelement) { % if ($col->{SortKey}) { return <% $col->{SortKey} %>; % } else { - return <% $sortkeys %>[<% $cix %>][rowid]; +% my $sk= "$sortkeys"."[$cix][rowid]"; +% if ($col->{MapFn}) { + return <% $col->{MapFn} %>(<% $sk %>); +% } else { + return <% $sk %>; +% } % } } @@ -100,7 +141,7 @@ function <% $comparefn %>(a,b) { % } } -% foreach my $reverse (qw(0 1)) { +% foreach my $reverse (qw(1 0)) { % my $tcomparefn= "ts_compar${cix}_cmp${reverse}__$table"; % if ($reverse) { % next unless $col->{DoReverse}; @@ -116,8 +157,8 @@ function <% $tcomparefn %>(a,b) { return -<% $comparefn %>(a,b); } function ts_onload__<% $table %>() { var ts_add_heads= <% to_json_protecttags(\%add_heads) %>; - var table= document.getElementById('<% $table %>'); - var firstth= table.getElementsByTagName('th').item(0); + var ctr= document.getElementById('<% defined($throw) ? $throw : $table %>'); + var firstth= ctr.getElementsByTagName('th').item(0); var thlist= firstth.parentNode.getElementsByTagName('th'); debug('thlist='+thlist); debug('thlist.item(2)=' + thlist.item(2));