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) {
|
function read_dsort(txt) {
|
||||||
dnsort = dnsort ? 1 : 0;
|
dnsort = dnsort ? 1 : 0;
|
||||||
clmod(ebi('nsort'), 'on', (sread('nsort') || dnsort) == 1);
|
ENATSORT = NATSORT && (sread('nsort') || dnsort) == 1;
|
||||||
|
clmod(ebi('nsort'), 'on', ENATSORT);
|
||||||
try {
|
try {
|
||||||
var zt = (('' + txt).trim() || 'href').split(/,+/g);
|
var zt = (('' + txt).trim() || 'href').split(/,+/g);
|
||||||
dsort = [];
|
dsort = [];
|
||||||
|
@ -4479,9 +4480,6 @@ function sortfiles(nodes) {
|
||||||
|
|
||||||
sopts = sopts && sopts.length ? sopts : jcp(dsort);
|
sopts = sopts && sopts.length ? sopts : jcp(dsort);
|
||||||
|
|
||||||
var collator = !clgot(ebi('nsort'), 'on') ? null :
|
|
||||||
new Intl.Collator([], {numeric: true});
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var is_srch = false;
|
var is_srch = false;
|
||||||
if (nodes[0]['rp']) {
|
if (nodes[0]['rp']) {
|
||||||
|
@ -4533,8 +4531,9 @@ function sortfiles(nodes) {
|
||||||
}
|
}
|
||||||
if (v2 === undefined) return 1 * rev;
|
if (v2 === undefined) return 1 * rev;
|
||||||
|
|
||||||
var ret = rev * (typ == 'int' ? (v1 - v2) : collator ?
|
var ret = rev * (typ == 'int' ? (v1 - v2) :
|
||||||
collator.compare(v1, v2) : v1.localeCompare(v2));
|
ENATSORT ? NATSORT.compare(v1, v2) :
|
||||||
|
v1.localeCompare(v2));
|
||||||
|
|
||||||
if (ret === 0)
|
if (ret === 0)
|
||||||
ret = onodes.indexOf(n1) - onodes.indexOf(n2);
|
ret = onodes.indexOf(n1) - onodes.indexOf(n2);
|
||||||
|
@ -7271,6 +7270,7 @@ var treectl = (function () {
|
||||||
treesz = clamp(icfg_get('treesz', 16), 10, 50);
|
treesz = clamp(icfg_get('treesz', 16), 10, 50);
|
||||||
|
|
||||||
var resort = function () {
|
var resort = function () {
|
||||||
|
ENATSORT = NATSORT && clgot(ebi('nsort'), 'on');
|
||||||
treectl.gentab(get_evpath(), treectl.lsc);
|
treectl.gentab(get_evpath(), treectl.lsc);
|
||||||
};
|
};
|
||||||
bcfg_bind(r, 'ireadme', 'ireadme', true);
|
bcfg_bind(r, 'ireadme', 'ireadme', true);
|
||||||
|
@ -8143,9 +8143,16 @@ var treectl = (function () {
|
||||||
}
|
}
|
||||||
delete res['a'];
|
delete res['a'];
|
||||||
var keys = Object.keys(res);
|
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++) {
|
for (var a = 0; a < keys.length; a++) {
|
||||||
var kk = keys[a],
|
var kk = keys[a][1],
|
||||||
m = /(\?k=[^\n]+)/.exec(kk),
|
m = /(\?k=[^\n]+)/.exec(kk),
|
||||||
kdk = m ? m[1] : '',
|
kdk = m ? m[1] : '',
|
||||||
ks = kk.replace(kdk, '').slice(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 crctab = (function () {
|
||||||
var c, tab = [];
|
var c, tab = [];
|
||||||
for (var n = 0; n < 256; n++) {
|
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) {
|
function sortTable(table, col, cb) {
|
||||||
var tb = table.tBodies[0],
|
var tb = table.tBodies[0],
|
||||||
th = table.tHead.rows[0].cells,
|
th = table.tHead.rows[0].cells,
|
||||||
|
@ -659,19 +693,17 @@ function sortTable(table, col, cb) {
|
||||||
}
|
}
|
||||||
vl.push([v, a]);
|
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') {
|
if (stype == 'int')
|
||||||
return reverse * (a - b);
|
vl.sort(st_cmp_num);
|
||||||
}
|
else if (ENATSORT)
|
||||||
return reverse * (a.localeCompare(b));
|
vl.sort(st_cmp_nat);
|
||||||
});
|
else
|
||||||
|
vl.sort(st_cmp_gen);
|
||||||
|
|
||||||
|
if (reverse < 0)
|
||||||
|
vl.reverse();
|
||||||
|
|
||||||
if (sread('dir1st') !== '0') {
|
if (sread('dir1st') !== '0') {
|
||||||
var r1 = [], r2 = [];
|
var r1 = [], r2 = [];
|
||||||
for (var i = 0; i < tr.length; i++) {
|
for (var i = 0; i < tr.length; i++) {
|
||||||
|
|
Loading…
Reference in a new issue