mirror of
				https://github.com/9001/copyparty.git
				synced 2025-11-04 05:43:17 +00: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:
		@@ -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++) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user