remember sort order

This commit is contained in:
ed 2021-03-20 10:56:35 +01:00
parent bcee8a4934
commit b4acb24f6a
3 changed files with 60 additions and 13 deletions

View file

@ -67,17 +67,17 @@
<thead> <thead>
<tr> <tr>
<th></th> <th></th>
<th><span>File Name</span></th> <th name="href"><span>File Name</span></th>
<th sort="int"><span>Size</span></th> <th name="sz" sort="int"><span>Size</span></th>
{%- for k in taglist %} {%- for k in taglist %}
{%- if k.startswith('.') %} {%- if k.startswith('.') %}
<th sort="int"><span>{{ k[1:] }}</span></th> <th name="tags/{{ k }}" sort="int"><span>{{ k[1:] }}</span></th>
{%- else %} {%- else %}
<th><span>{{ k[0]|upper }}{{ k[1:] }}</span></th> <th name="tags/{{ k }}"><span>{{ k[0]|upper }}{{ k[1:] }}</span></th>
{%- endif %} {%- endif %}
{%- endfor %} {%- endfor %}
<th><span>T</span></th> <th name="ext"><span>T</span></th>
<th><span>Date</span></th> <th name="ts"><span>Date</span></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>

View file

@ -1004,7 +1004,33 @@ var treectl = (function () {
} }
ebi('srv_info').innerHTML = '<span>' + res.srvinf + '</span>'; ebi('srv_info').innerHTML = '<span>' + res.srvinf + '</span>';
var nodes = res.dirs.concat(res.files); var nodes = res.dirs.concat(res.files),
sopts = jread('fsort', []);
try {
for (var a = sopts.length - 1; a >= 0; a--) {
var name = sopts[a][0], rev = sopts[a][1], typ = sopts[a][2];
if (name.indexOf('tags/') == -1) {
nodes.sort(function (v1, v2) {
if (!v1[name]) return -1 * rev;
if (!v2[name]) return 1 * rev;
return rev * (typ == 'int' ? (v1[name] - v2[name]) : (v1[name].localeCompare(v2[name])));
});
}
else {
name = name.slice(5);
nodes.sort(function (v1, v2) {
if (!v1.tags[name]) return -1 * rev;
if (!v2.tags[name]) return 1 * rev;
return rev * (typ == 'int' ? (v1.tags[name] - v2.tags[name]) : (v1.tags[name].localeCompare(v2.tags[name])));
});
}
}
}
catch (ex) {
console.log("failed to apply sort config: " + ex);
}
var top = this.top; var top = this.top;
var html = mk_files_header(res.taglist); var html = mk_files_header(res.taglist);
html.push('<tbody>'); html.push('<tbody>');
@ -1198,23 +1224,23 @@ function mk_files_header(taglist) {
var html = [ var html = [
'<thead>', '<thead>',
'<th></th>', '<th></th>',
'<th><span>File Name</span></th>', '<th name="href"><span>File Name</span></th>',
'<th sort="int"><span>Size</span></th>' '<th name="sz" sort="int"><span>Size</span></th>'
]; ];
for (var a = 0; a < taglist.length; a++) { for (var a = 0; a < taglist.length; a++) {
var tag = taglist[a]; var tag = taglist[a];
var c1 = tag.slice(0, 1).toUpperCase(); var c1 = tag.slice(0, 1).toUpperCase();
tag = c1 + tag.slice(1); tag = c1 + tag.slice(1);
if (c1 == '.') if (c1 == '.')
tag = '<th sort="int"><span>' + tag.slice(1); tag = '<th name="tags/' + tag + '" sort="int"><span>' + tag.slice(1);
else else
tag = '<th><span>' + tag; tag = '<th name="tags/' + tag + '"><span>' + tag;
html.push(tag + '</span></th>'); html.push(tag + '</span></th>');
} }
html = html.concat([ html = html.concat([
'<th><span>T</span></th>', '<th name="ext"><span>T</span></th>',
'<th><span>Date</span></th>', '<th name="ts"><span>Date</span></th>',
'</thead>', '</thead>',
]); ]);
return html; return html;

View file

@ -100,6 +100,27 @@ function sortTable(table, col) {
th[a].className = th[a].className.replace(/ *sort-?1 */, " "); th[a].className = th[a].className.replace(/ *sort-?1 */, " ");
th[col].className += ' sort' + reverse; th[col].className += ' sort' + reverse;
var stype = th[col].getAttribute('sort'); var stype = th[col].getAttribute('sort');
try {
var nrules = [], rules = jread("fsort", []);
rules.unshift([th[col].getAttribute('name'), reverse, stype || '']);
for (var a = 0; a < rules.length; a++) {
var add = true;
for (var b = 0; b < a; b++)
if (rules[a][0] == rules[b][0])
add = false;
if (add)
nrules.push(rules[a]);
if (nrules.length >= 10)
break;
}
jwrite("fsort", nrules);
}
catch (ex) {
console.log("failed to persist sort rules, resetting: " + ex);
jwrite("fsort", null);
}
var vl = []; var vl = [];
for (var a = 0; a < tr.length; a++) { for (var a = 0; a < tr.length; a++) {
var cell = tr[a].cells[col]; var cell = tr[a].cells[col];