diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 467d6035..d69dceae 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -495,6 +495,7 @@ if (1) "gt_sz": "size", "gt_ts": "date", "gt_ext": "type", + "gt_rand": "random", "gt_c1": "truncate filenames more (show less)", "gt_c2": "truncate filenames less (show more)", @@ -3993,7 +3994,7 @@ var fileman = (function () { '', '', '', @@ -5478,6 +5479,7 @@ var thegrid = (function () { '' + L.gt_sz + ' ' + '' + L.gt_ts + ' ' + '' + L.gt_ext + '' + + '' + L.gt_rand + '' + '' + '
' ); @@ -8060,7 +8062,8 @@ function mk_files_header(taglist) { '', '', '', - '' + '', + '' ]; for (var a = 0; a < taglist.length; a++) { var tag = taglist[a], diff --git a/copyparty/web/util.js b/copyparty/web/util.js index 0476e203..d14c9896 100644 --- a/copyparty/web/util.js +++ b/copyparty/web/util.js @@ -719,15 +719,30 @@ function sortTable(table, col, cb) { vl.push([v, a]); } - if (stype == 'int') + if (stype == 'random') { + // Fisher-Yates shuffle for true randomization + for (var i = vl.length - 1; i > 0; i--) { + var j = Math.floor(Math.random() * (i + 1)); + var temp = vl[i]; + vl[i] = vl[j]; + vl[j] = temp; + } + } + else if (stype == 'int') { vl.sort(st_cmp_num); - else if (ENATSORT) + if (reverse < 0) + vl.reverse(); + } + else if (ENATSORT) { vl.sort(st_cmp_nat); - else + if (reverse < 0) + vl.reverse(); + } + else { vl.sort(st_cmp_gen); - - if (reverse < 0) - vl.reverse(); + if (reverse < 0) + vl.reverse(); + } if (sread('dir1st') !== '0') { var r1 = [], r2 = []; diff --git a/scripts/make-sfx.sh b/scripts/make-sfx.sh index af4060b7..7cb13af8 100755 --- a/scripts/make-sfx.sh +++ b/scripts/make-sfx.sh @@ -322,7 +322,7 @@ necho() { exit 1 } rm "$f1" - cp -p "$f2" "$f1" + cp -rp "$f2" "$f1" ); done # resolve symlinks on windows
', '', - '', + '', '', '
' + L.fs_name + '
cFile NameSizeSizeRandom