diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index bd71c408..86a57575 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -753,7 +753,7 @@ document.onkeydown = function (e) { clearTimeout(search_timeout); var now = new Date().getTime(); if (now - search_in_progress > 30 * 1000) - search_timeout = setTimeout(do_search, 100); + search_timeout = setTimeout(do_search, 200); } function do_search() { @@ -796,6 +796,8 @@ document.onkeydown = function (e) { var res = JSON.parse(this.responseText), tagord = res.tag_order; + sortfiles(res.hits); + var ofiles = ebi('files'); if (ofiles.getAttribute('ts') > this.ts) return; @@ -814,7 +816,7 @@ document.onkeydown = function (e) { var html = mk_files_header(tagord); html.push(''); - html.push('-close search results'); + html.push('-! close search results'); for (var a = 0; a < res.hits.length; a++) { var r = res.hits[a], ts = parseInt(r.ts), @@ -1085,59 +1087,8 @@ var treectl = (function () { } ebi('srv_info').innerHTML = '' + res.srvinf + ''; - var nodes = res.dirs.concat(res.files), - sopts = jread('fsort', [["lead", -1, ""], ["href", 1, ""]]); - - 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) - continue; - - if (name.indexOf('tags/') === 0) { - name = name.slice(5); - for (var b = 0, bb = nodes.length; b < bb; b++) - nodes[b]._sv = nodes[b].tags[name]; - } - else { - for (var b = 0, bb = nodes.length; b < bb; b++) { - var v = nodes[b][name]; - - if ((v + '').indexOf('')[1]; - else if (name == "href" && v) - v = uricom_dec(v)[0] - - nodes[b]._sv = v; - } - } - - var onodes = nodes.map((x) => x); - nodes.sort(function (n1, n2) { - var v1 = n1._sv, - v2 = n2._sv; - - if (v1 === undefined) { - if (v2 === undefined) { - return onodes.indexOf(n1) - onodes.indexOf(n2); - } - return -1 * rev; - } - if (v2 === undefined) return 1 * rev; - - var ret = rev * (typ == 'int' ? (v1 - v2) : (v1.localeCompare(v2))); - if (ret === 0) - ret = onodes.indexOf(n1) - onodes.indexOf(n2); - - return ret; - }); - } - for (var b = 0, bb = nodes.length; b < bb; b++) - delete nodes[b]._sv; - } - catch (ex) { - console.log("failed to apply sort config: " + ex); - } + var nodes = res.dirs.concat(res.files); + nodes = sortfiles(nodes); var top = this.top; var html = mk_files_header(res.taglist); @@ -1560,7 +1511,10 @@ var mukey = (function () { function addcrc() { - var links = document.querySelectorAll('#files>tbody>tr>td:nth-child(2)>a'); + var links = document.querySelectorAll( + '#files>tbody>tr>td:nth-child(2)>' + ( + ebi('unsearch') ? 'div>a:last-child' : 'a')); + for (var a = 0, aa = links.length; a < aa; a++) if (!links[a].getAttribute('id')) links[a].setAttribute('id', 'f-' + crc32(links[a].textContent)); diff --git a/copyparty/web/util.js b/copyparty/web/util.js index e36cf05a..2343280b 100644 --- a/copyparty/web/util.js +++ b/copyparty/web/util.js @@ -113,6 +113,75 @@ function crc32(str) { }; +function sortfiles(nodes) { + var sopts = jread('fsort', [["lead", -1, ""], ["href", 1, ""]]); + + try { + var is_srch = false; + if (nodes[0]['rp']) { + is_srch = true; + for (var b = 0, bb = nodes.length; b < bb; b++) + nodes[b].ext = nodes[b].rp.split('.').pop(); + for (var b = 0; b < sopts.length; b++) + if (sopts[b][0] == 'href') + sopts[b][0] = 'rp'; + } + for (var a = sopts.length - 1; a >= 0; a--) { + var name = sopts[a][0], rev = sopts[a][1], typ = sopts[a][2]; + if (!name) + continue; + + if (name.indexOf('tags/') === 0) { + name = name.slice(5); + for (var b = 0, bb = nodes.length; b < bb; b++) + nodes[b]._sv = nodes[b].tags[name]; + } + else { + for (var b = 0, bb = nodes.length; b < bb; b++) { + var v = nodes[b][name]; + + if ((v + '').indexOf('')[1]; + else if (name == "href" && v) + v = uricom_dec(v)[0] + + nodes[b]._sv = v; + } + } + + var onodes = nodes.map((x) => x); + nodes.sort(function (n1, n2) { + var v1 = n1._sv, + v2 = n2._sv; + + if (v1 === undefined) { + if (v2 === undefined) { + return onodes.indexOf(n1) - onodes.indexOf(n2); + } + return -1 * rev; + } + if (v2 === undefined) return 1 * rev; + + var ret = rev * (typ == 'int' ? (v1 - v2) : (v1.localeCompare(v2))); + if (ret === 0) + ret = onodes.indexOf(n1) - onodes.indexOf(n2); + + return ret; + }); + } + for (var b = 0, bb = nodes.length; b < bb; b++) { + delete nodes[b]._sv; + if (is_srch) + delete nodes[b].ext; + } + } + catch (ex) { + console.log("failed to apply sort config: " + ex); + } + return nodes; +} + + function sortTable(table, col, cb) { var tb = table.tBodies[0], th = table.tHead.rows[0].cells, @@ -186,7 +255,6 @@ function makeSortable(table, cb) { } - (function () { var ops = document.querySelectorAll('#ops>a'); for (var a = 0; a < ops.length; a++) {