From b4acb24f6a0cfeb395a18253d3c60ef1814dbdec Mon Sep 17 00:00:00 2001 From: ed Date: Sat, 20 Mar 2021 10:56:35 +0100 Subject: [PATCH] remember sort order --- copyparty/web/browser.html | 12 ++++++------ copyparty/web/browser.js | 40 +++++++++++++++++++++++++++++++------- copyparty/web/util.js | 21 ++++++++++++++++++++ 3 files changed, 60 insertions(+), 13 deletions(-) diff --git a/copyparty/web/browser.html b/copyparty/web/browser.html index 260c4e2b..32025d96 100644 --- a/copyparty/web/browser.html +++ b/copyparty/web/browser.html @@ -67,17 +67,17 @@ - File Name - Size + File Name + Size {%- for k in taglist %} {%- if k.startswith('.') %} - {{ k[1:] }} + {{ k[1:] }} {%- else %} - {{ k[0]|upper }}{{ k[1:] }} + {{ k[0]|upper }}{{ k[1:] }} {%- endif %} {%- endfor %} - T - Date + T + Date diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 5e14bdc3..76adfd2b 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -1004,7 +1004,33 @@ var treectl = (function () { } ebi('srv_info').innerHTML = '' + res.srvinf + ''; - 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 html = mk_files_header(res.taglist); html.push(''); @@ -1198,23 +1224,23 @@ function mk_files_header(taglist) { var html = [ '', '', - 'File Name', - 'Size' + 'File Name', + 'Size' ]; for (var a = 0; a < taglist.length; a++) { var tag = taglist[a]; var c1 = tag.slice(0, 1).toUpperCase(); tag = c1 + tag.slice(1); if (c1 == '.') - tag = '' + tag.slice(1); + tag = '' + tag.slice(1); else - tag = '' + tag; + tag = '' + tag; html.push(tag + ''); } html = html.concat([ - 'T', - 'Date', + 'T', + 'Date', '', ]); return html; diff --git a/copyparty/web/util.js b/copyparty/web/util.js index c519c3ba..721dbb58 100644 --- a/copyparty/web/util.js +++ b/copyparty/web/util.js @@ -100,6 +100,27 @@ function sortTable(table, col) { th[a].className = th[a].className.replace(/ *sort-?1 */, " "); th[col].className += ' sort' + reverse; 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 = []; for (var a = 0; a < tr.length; a++) { var cell = tr[a].cells[col];