mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
fix sorting of japanese folders
directory-tree sidebar did not sort correctly for non-ascii names also fix a natural-sort bug; it only took effect for the initial folder load, and not when changing the sort-order also, natural-sort will now apply to all non-numeric fields, not just the filename like before
This commit is contained in:
parent
2bd955ba9f
commit
7b2bd6da83
|
@ -4433,7 +4433,8 @@ function eval_hash() {
|
|||
|
||||
function read_dsort(txt) {
|
||||
dnsort = dnsort ? 1 : 0;
|
||||
clmod(ebi('nsort'), 'on', (sread('nsort') || dnsort) == 1);
|
||||
ENATSORT = NATSORT && (sread('nsort') || dnsort) == 1;
|
||||
clmod(ebi('nsort'), 'on', ENATSORT);
|
||||
try {
|
||||
var zt = (('' + txt).trim() || 'href').split(/,+/g);
|
||||
dsort = [];
|
||||
|
@ -4479,9 +4480,6 @@ function sortfiles(nodes) {
|
|||
|
||||
sopts = sopts && sopts.length ? sopts : jcp(dsort);
|
||||
|
||||
var collator = !clgot(ebi('nsort'), 'on') ? null :
|
||||
new Intl.Collator([], {numeric: true});
|
||||
|
||||
try {
|
||||
var is_srch = false;
|
||||
if (nodes[0]['rp']) {
|
||||
|
@ -4533,8 +4531,9 @@ function sortfiles(nodes) {
|
|||
}
|
||||
if (v2 === undefined) return 1 * rev;
|
||||
|
||||
var ret = rev * (typ == 'int' ? (v1 - v2) : collator ?
|
||||
collator.compare(v1, v2) : v1.localeCompare(v2));
|
||||
var ret = rev * (typ == 'int' ? (v1 - v2) :
|
||||
ENATSORT ? NATSORT.compare(v1, v2) :
|
||||
v1.localeCompare(v2));
|
||||
|
||||
if (ret === 0)
|
||||
ret = onodes.indexOf(n1) - onodes.indexOf(n2);
|
||||
|
@ -7271,6 +7270,7 @@ var treectl = (function () {
|
|||
treesz = clamp(icfg_get('treesz', 16), 10, 50);
|
||||
|
||||
var resort = function () {
|
||||
ENATSORT = NATSORT && clgot(ebi('nsort'), 'on');
|
||||
treectl.gentab(get_evpath(), treectl.lsc);
|
||||
};
|
||||
bcfg_bind(r, 'ireadme', 'ireadme', true);
|
||||
|
@ -8143,9 +8143,16 @@ var treectl = (function () {
|
|||
}
|
||||
delete res['a'];
|
||||
var keys = Object.keys(res);
|
||||
keys.sort(function (a, b) { return a.localeCompare(b); });
|
||||
for (var a = 0; a < keys.length; a++)
|
||||
keys[a] = [uricom_dec(keys[a]), keys[a]];
|
||||
|
||||
if (ENATSORT)
|
||||
keys.sort(function (a, b) { return NATSORT.compare(a[0], b[0]); });
|
||||
else
|
||||
keys.sort(function (a, b) { return a[0].localeCompare(b[0]); });
|
||||
|
||||
for (var a = 0; a < keys.length; a++) {
|
||||
var kk = keys[a],
|
||||
var kk = keys[a][1],
|
||||
m = /(\?k=[^\n]+)/.exec(kk),
|
||||
kdk = m ? m[1] : '',
|
||||
ks = kk.replace(kdk, '').slice(1),
|
||||
|
|
|
@ -461,6 +461,13 @@ function namesan(txt, win, fslash) {
|
|||
}
|
||||
|
||||
|
||||
var NATSORT, ENATSORT;
|
||||
try {
|
||||
NATSORT = new Intl.Collator([], {numeric: true});
|
||||
}
|
||||
catch (ex) { }
|
||||
|
||||
|
||||
var crctab = (function () {
|
||||
var c, tab = [];
|
||||
for (var n = 0; n < 256; n++) {
|
||||
|
@ -614,6 +621,33 @@ function showsort(tab) {
|
|||
}
|
||||
}
|
||||
}
|
||||
function st_cmp_num(a, b) {
|
||||
a = a[0];
|
||||
b = b[0];
|
||||
return (
|
||||
a === null ? -1 :
|
||||
b === null ? 1 :
|
||||
(a - b)
|
||||
);
|
||||
}
|
||||
function st_cmp_nat(a, b) {
|
||||
a = a[0];
|
||||
b = b[0];
|
||||
return (
|
||||
a === null ? -1 :
|
||||
b === null ? 1 :
|
||||
NATSORT.compare(a, b)
|
||||
);
|
||||
}
|
||||
function st_cmp_gen(a, b) {
|
||||
a = a[0];
|
||||
b = b[0];
|
||||
return (
|
||||
a === null ? -1 :
|
||||
b === null ? 1 :
|
||||
a.localeCompare(b)
|
||||
);
|
||||
}
|
||||
function sortTable(table, col, cb) {
|
||||
var tb = table.tBodies[0],
|
||||
th = table.tHead.rows[0].cells,
|
||||
|
@ -659,19 +693,17 @@ function sortTable(table, col, cb) {
|
|||
}
|
||||
vl.push([v, a]);
|
||||
}
|
||||
vl.sort(function (a, b) {
|
||||
a = a[0];
|
||||
b = b[0];
|
||||
if (a === null)
|
||||
return -1;
|
||||
if (b === null)
|
||||
return 1;
|
||||
|
||||
if (stype == 'int') {
|
||||
return reverse * (a - b);
|
||||
}
|
||||
return reverse * (a.localeCompare(b));
|
||||
});
|
||||
if (stype == 'int')
|
||||
vl.sort(st_cmp_num);
|
||||
else if (ENATSORT)
|
||||
vl.sort(st_cmp_nat);
|
||||
else
|
||||
vl.sort(st_cmp_gen);
|
||||
|
||||
if (reverse < 0)
|
||||
vl.reverse();
|
||||
|
||||
if (sread('dir1st') !== '0') {
|
||||
var r1 = [], r2 = [];
|
||||
for (var i = 0; i < tr.length; i++) {
|
||||
|
|
Loading…
Reference in a new issue