fix tree-rendering when history-popping into bbox

plus misc similar technically-incorrect addq usages;
most of these don't matter in practice since they'll
never get a url with a hash, but makes the intent clear

and make sure hashes never get passed around
like they're part of a dirkey, harmless as it is
This commit is contained in:
ed 2024-04-09 19:54:15 +00:00
parent 4f0cad5468
commit 989cc613ef
2 changed files with 17 additions and 13 deletions

View file

@ -1554,7 +1554,7 @@ var mpl = (function () {
if (!c) if (!c)
return url; return url;
return addq(url, 'th=') + (can_ogg ? 'opus' : (IPHONE || MACOS) ? 'caf' : 'mp3'); return addq(url, 'th=' + (can_ogg ? 'opus' : (IPHONE || MACOS) ? 'caf' : 'mp3'));
}; };
r.pp = function () { r.pp = function () {
@ -4286,7 +4286,7 @@ var showfile = (function () {
r.show = function (url, no_push) { r.show = function (url, no_push) {
var xhr = new XHR(), var xhr = new XHR(),
m = /[?&](k=[^&]+)/.exec(url); m = /[?&](k=[^&#]+)/.exec(url);
url = url.split('?')[0] + (m ? '?' + m[1] : ''); url = url.split('?')[0] + (m ? '?' + m[1] : '');
xhr.url = url; xhr.url = url;
@ -4826,7 +4826,7 @@ var thegrid = (function () {
ihref = ohref; ihref = ohref;
if (r.thumbs) { if (r.thumbs) {
ihref = addq(ihref, 'th=') + (have_webp ? 'w' : 'j'); ihref = addq(ihref, 'th=' + (have_webp ? 'w' : 'j'));
if (!r.crop) if (!r.crop)
ihref += 'f'; ihref += 'f';
if (r.x3) if (r.x3)
@ -5975,14 +5975,14 @@ var treectl = (function () {
function get_tree(top, dst, rst) { function get_tree(top, dst, rst) {
var xhr = new XHR(), var xhr = new XHR(),
m = /[?&](k=[^&]+)/.exec(dst), m = /[?&](k=[^&#]+)/.exec(dst),
k = m ? '&' + m[1] : dk ? '&k=' + dk : ''; k = m ? '&' + m[1] : dk ? '&k=' + dk : '';
xhr.top = top; xhr.top = top;
xhr.dst = dst; xhr.dst = dst;
xhr.rst = rst; xhr.rst = rst;
xhr.ts = Date.now(); xhr.ts = Date.now();
xhr.open('GET', addq(dst, 'tree=') + top + (r.dots ? '&dots' : '') + k, true); xhr.open('GET', addq(dst, 'tree=' + top + (r.dots ? '&dots' : '') + k), true);
xhr.onload = xhr.onerror = recvtree; xhr.onload = xhr.onerror = recvtree;
xhr.send(); xhr.send();
enspin('#tree'); enspin('#tree');
@ -6071,7 +6071,7 @@ var treectl = (function () {
cl = ''; cl = '';
if (dk && ehref == cevp && !/[?&]k=/.exec(qhref)) if (dk && ehref == cevp && !/[?&]k=/.exec(qhref))
links[a].setAttribute('href', addq(qhref, 'k=') + dk); links[a].setAttribute('href', addq(qhref, 'k=' + dk));
if (href == cdir) { if (href == cdir) {
act = links[a]; act = links[a];
@ -6172,7 +6172,7 @@ var treectl = (function () {
return window.location = url; return window.location = url;
var xhr = new XHR(), var xhr = new XHR(),
m = /[?&](k=[^&]+)/.exec(url), m = /[?&](k=[^&#]+)/.exec(url),
k = m ? '&' + m[1] : dk ? '&k=' + dk : ''; k = m ? '&' + m[1] : dk ? '&k=' + dk : '';
xhr.top = url.split('?')[0]; xhr.top = url.split('?')[0];
@ -6258,7 +6258,7 @@ var treectl = (function () {
for (var a = 0; a < res.dirs.length; a++) { for (var a = 0; a < res.dirs.length; a++) {
var dh = res.dirs[a].href, var dh = res.dirs[a].href,
dn = dh.split('/')[0].split('?')[0], dn = dh.split('/')[0].split('?')[0],
m = /[?&](k=[^&]+)/.exec(dh); m = /[?&](k=[^&#]+)/.exec(dh);
if (m) if (m)
dn += '?' + m[1]; dn += '?' + m[1];
@ -6630,7 +6630,7 @@ var treectl = (function () {
hbase = req, hbase = req,
cbase = location.pathname, cbase = location.pathname,
mdoc = /[?&]doc=/.exec('' + url), mdoc = /[?&]doc=/.exec('' + url),
mdk = /[?&](k=[^&]+)/.exec('' + url); mdk = /[?&](k=[^&#]+)/.exec('' + url);
if (mdoc && hbase == cbase) if (mdoc && hbase == cbase)
return showfile.show(hbase + showfile.sname(url.search), true); return showfile.show(hbase + showfile.sname(url.search), true);
@ -7267,7 +7267,7 @@ var arcfmt = (function () {
if (!/^(zip|tar|pax|tgz|txz)$/.exec(txt)) if (!/^(zip|tar|pax|tgz|txz)$/.exec(txt))
continue; continue;
var m = /(.*[?&])(tar|zip)([^&]*)(.*)$/.exec(href); var m = /(.*[?&])(tar|zip)([^&#]*)(.*)$/.exec(href);
if (!m) if (!m)
throw new Error('missing arg in url'); throw new Error('missing arg in url');
@ -7343,7 +7343,7 @@ var msel = (function () {
item.vp = href.indexOf('/') !== -1 ? href : vbase + href; item.vp = href.indexOf('/') !== -1 ? href : vbase + href;
if (dk) { if (dk) {
var m = /[?&](k=[^&]+)/.exec(qhref); var m = /[?&](k=[^&#]+)/.exec(qhref);
item.q = m ? '?' + m[1] : ''; item.q = m ? '?' + m[1] : '';
} }
else item.q = ''; else item.q = '';
@ -8281,7 +8281,7 @@ function reload_browser() {
for (var a = 0; a < parts.length - 1; a++) { for (var a = 0; a < parts.length - 1; a++) {
link += parts[a] + '/'; link += parts[a] + '/';
var link2 = dks[link] ? addq(link, 'k=') + dks[link] : link; var link2 = dks[link] ? addq(link, 'k=' + dks[link]) : link;
o = mknod('a'); o = mknod('a');
o.setAttribute('href', link2); o.setAttribute('href', link2);

View file

@ -736,7 +736,11 @@ function vjoin(p1, p2) {
function addq(url, q) { function addq(url, q) {
return url + (url.indexOf('?') < 0 ? '?' : '&') + (q === undefined ? '' : q); var uh = url.split('#', 1),
u = uh[0],
h = uh.length == 1 ? '' : '#' + uh[1];
return u + (u.indexOf('?') < 0 ? '?' : '&') + (q === undefined ? '' : q) + h;
} }