3DS / IE11 compatibility

This commit is contained in:
Til Schmitter 2026-04-21 23:13:23 +02:00
parent a7a5d101a6
commit 294e1bcb13
6 changed files with 240 additions and 179 deletions

View file

@ -1,5 +1,6 @@
:root {
color-scheme: dark;
--transparent: transparent;
--grid-sz: 10em;
--grid-ln: 3;
@ -538,6 +539,9 @@ html, body {
margin: 0;
padding: 0;
}
.noscroll {
overflow: hidden;
}
pre, code, tt, #doc, #doc>code {
font-family: 'scp', monospace, monospace;
font-family: var(--font-mono), 'scp', monospace, monospace;
@ -1140,7 +1144,6 @@ html.dz #flogout {
}
#widget.open #widgeti{
/* box-shadow: 0 0 1em rgba(0,48,64,0.2); */
height: 100%;
display: block;
}
@ -1154,29 +1157,49 @@ html.dz #flogout {
#widget.thin #pbarthinpos{
display: block;
}
#widget.thin #trackname {
margin-right: auto;
}
#widgeti {
position: relative;
width: 100%;
display: none;
}
#np_inf {
height: 0;
}
#fshr,
#wtgrid, #wtgrid2,
#wtgrid,
#wtico {
position: relative;
font-size: .9em;
top: -.04em;
margin-right: .3em;
}
#wtgrid, #wtgrid2 {
font-size: .75em;
padding: 0;
top: -.7em;
display: inline-flex;
#wtc {
margin-top: -.5em;
font-size: 1.2em;
}
#wtgrid {
display: inline-block;
position: relative;
top: 0;
padding: 0;
margin: .2em;
}
.btn.svgIcon {
width: 1.5em;
height: 1.5em;
padding: .1em;
display: inline-block;
vertical-align: bottom;
}
.btn.svgIcon.gb1 {
width: 1.7em;
height: 1.7em;
padding: 0;
}
#wtico {
cursor: pointer;
}
@ -1204,11 +1227,12 @@ html.dz #flogout {
}
#wtoggle,
#widgeti {
background: #fff;
background: #ccc;
background: var(--bg-u2);
}
#up_quick {
position: absolute;
bottom: 100%;
bottom: calc(100% + .4em);
right: .4em;
font-size: xx-large;
@ -1217,6 +1241,7 @@ html.dz #flogout {
transition: all .15s;
border-radius: .35em;
text-align: right;
background: #ccc;
background: var(--bg-u2);
border: var(--btn-bg) solid 1px;
}
@ -1227,6 +1252,7 @@ html.dz #flogout {
margin-bottom: .2em;
}
#up_quick_more.vis {
display: block;
display: grid;
}
#up_quick_more a:hover {
@ -1427,19 +1453,20 @@ html.a #up_quick .btn.on {
box-shadow: -.03em -.03em .7em rgba(0,0,0,0.5) inset;
}
#pctl {
display: flex;
display: grid;
grid-template-columns: max-content max-content max-content 20% auto max-content max-content max-content;
align-content: center;
align-items: center;
height: 100%;
margin-right: .5em;
padding: .3em 0;
}
#pctl .icon {
font-size: 1em;
width: 1.5em;
height: 1.5em;
text-align: center;
}
#pctl svg {
width: 1.5em;
height: 1.5em;
}
#pctl .btn {
font-size: 1em;
@ -1461,10 +1488,10 @@ html.a #up_quick .btn.on {
transition: opacity .15s;
}
#pvolbg {
height: 100%;
height: 1.3em;
min-width: 1em;
padding: .3em;
cursor: pointer;
align-content: center;
align-items: center;
display: flex;
}
@ -1497,6 +1524,11 @@ html.a #up_quick .btn.on {
display: block;
}
#ops a {
/* fallback if emojis don't render */
border: #777 solid 1px;
border-radius: .3em;
border: var(--transparent) solid 1px;
color: var(--a);
font-size: 1.5em;
padding: .25em .4em;
@ -1527,26 +1559,20 @@ html.y #ops svg circle {
}
#headerArea{
display: flex;
margin: .5em .5em 0 .5em;
}
.hamburger_line{
height: .2em;
width: 1.4em;
margin: .3em;
background: var(--a);
border-radius: .1em;
margin: 1em;
margin-bottom: 0;
}
#srv_name{
margin-left: .3em;
font-size: x-large;
margin-top: .3em;
align-self: baseline;
vertical-align: bottom;
}
#treeToggleBtn{
padding: .2em;
margin-top: .3em;
cursor: pointer;
display: block;
align-self: center;
margin: 0;
padding: 0;
width: 2em;
height: 2em;
vertical-align: bottom;
}
#ops {
padding: .3em .6em;
@ -1562,8 +1588,13 @@ html.y #ops svg circle {
#acc_pfp {
aspect-ratio: 1 / 1;
width: 1.25em;
background: #ccc;
color: #000;
background: var(--a);
color: var(--bg);
border: var(--btn-bg) solid 1px;
border-radius: .3em;
justify-content: center;
@ -1586,7 +1617,8 @@ html.y #ops svg circle {
margin: .2em;
}
#op_bup {
margin-bottom: 1em;
margin: 0;
border-radius: 0 0 .3em .3em;
}
#op_cfg {
display: none;
@ -1625,7 +1657,7 @@ input[type="checkbox"]+label {
}
input[type="radio"]:checked+label,
input[type="checkbox"]:checked+label {
color: #0e0;
color: rgb(9, 185, 9);
color: var(--btn-1-bg);
}
input[type="checkbox"]:checked+label {
@ -1783,6 +1815,7 @@ input.ssconf_v {
border: 1px solid var(--bg-u3);
transition: width 0.15s;
z-index: 4;
padding-bottom: 3em;
}
#tree,
html {
@ -2065,7 +2098,7 @@ html.y #tree.nowrap .ntree a+a:hover {
background: #fff;
background: var(--bg-u2);
border-radius: .3em;
padding: .2em .5em 0 .5em;
padding: .2em .2em .1em .2em;
line-height: 2.3em;
margin-bottom: 1.5em;
}
@ -2601,9 +2634,11 @@ html.y #bbox-overlay figcaption a {
margin: 5vh 5vw;
border-radius: .5em;
border: var(--a) solid 1px;
background: #fff;
background: var(--bg);
max-width: 66.6em;
position: relative;
overflow: auto;
}
html.c .modalcontent {
background: var(--bg-u2);
@ -2623,6 +2658,7 @@ html.c .modalcontent {
}
.close{
position: absolute;
top: 0;
right: 0;
margin: .5em;
color: var(--fg);
@ -2631,7 +2667,10 @@ html.c .modalcontent {
}
.closepane {
position: absolute;
inset: 0;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
/* settings */
@ -2641,6 +2680,9 @@ html.c .modalcontent {
min-height: 0;
}
.splitsub {
/* fallback */
display: block;
display: flex;
flex-direction: column;
overflow-y: auto;
@ -2693,6 +2735,10 @@ html.c .modalcontent {
}
.modal.vis,
.dropzone {
/* fallback */
display: block;
overflow-y: auto;
display: flex;
justify-content: center;
position: fixed;
@ -3194,8 +3240,12 @@ details {
border-radius: .3em;
margin: .3em 0;
}
details:not(.open) .setting {
display: none;
}
summary {
cursor: pointer;
background: #ccc;
background: var(--bg-u1);
color: var(--a);
padding: .3em;
@ -3240,6 +3290,7 @@ html.c #treeh,
html.a #tree,
html.a #treeh {
border-radius: 0 .3em 0 0;
background: #fff;
background: var(--bg-u2);
}
html.c #treepar,
@ -3271,6 +3322,7 @@ html.a .opbox,
html.a #path,
html.a #srch_form,
html.a .ghead {
background: #ccc;
background: var(--bg-u2);
border: 1px solid var(--bg-u3);
box-shadow: 0 0 .3em var(--bg-d3);
@ -3532,7 +3584,6 @@ html.d #treepar {
padding-bottom: 5em;
}
.splitsub {
overflow-y: hidden;
padding-bottom: .5em;
}
.divider {
@ -3552,7 +3603,7 @@ html.d #treepar {
border: .7em solid var(--bg-u3);
transform: rotate(-90deg);
position: fixed;
bottom: 4.3em;
bottom: 4em;
right: -.7em;
opacity: 0;
pointer-events: none;
@ -3574,6 +3625,7 @@ html.d #treepar {
}
#s_nav .btn {
padding: .5em;
padding-right: 2em;
}
}
@media (min-width: 70em) {
@ -3736,7 +3788,6 @@ html.ey {
--white: #fff;
--grey: grey;
--silver: silver;
--transparent: transparent;
--shadow-color-1: #0a0a0a;
--shadow-color-2: #808080;
--border-dashed-black: 1px dashed var(--black);
@ -4386,12 +4437,14 @@ html.e #docul {
border-left: 0 !important;
margin-left: 0 !important;
}
html.e #tree_footer {
margin-left: 0.5em;
}
html.e #wrap {
transform: translateX(calc((var(--negative-space) * 2) - .2em));
padding-right: var(--negative-space);
position: relative;
margin-right: calc((var(--negative-space) * 2) - .1em);
margin-top: var(--negative-space);
margin-left: 1.2em;
/*overflow-x: auto; fix for OOB table when screen space is limited (mobile), but removes sticky header*/
}
@ -4426,7 +4479,7 @@ html.e #wtico,
html.e #zip1 {
box-shadow: 0 0 !important;
}
html.e #wtgrid2 {
html.e #wtc {
top: 0.2em;
}
html.e #wfs,
@ -4607,6 +4660,7 @@ html.e #detree {
.popup {
visibility: hidden;
width: fit-content;
background: #000;
background: var(--bg-u2);
border: 1px solid var(--bg-u3);
box-shadow: 0 .5em 1em var(--txt-sh);
@ -4619,7 +4673,10 @@ html.e #detree {
bottom: 2.5em;
}
.under {
inset: calc(100% + .2em) 0 auto 0;
top: calc(100% + .2em);
left: 0;
bottom: auto;
right: 0;
text-align: left;
width: auto;
}
@ -4630,7 +4687,7 @@ html.e #detree {
font-size: small;
}
#srchfolder_div:focus-within .popup{
#srchfolder_div:focus-within .popup {
visibility: visible;
-webkit-animation: fadeIn 1s;
animation: fadeIn 1s;
@ -4642,49 +4699,3 @@ html.e #detree {
color: var(--fg);
text-shadow: -1px 1px 1px var(--bg-max);
}
.gridViewIcon,
.listViewIcon{
width: 1.7em;
height: 1.7em;
padding: .2em;
top: 0;
}
.gridViewIcon{
display: grid;
grid-template-columns: auto auto;
grid-template-rows: auto auto;
}
.listViewIcon{
display: grid;
grid-template-rows: auto auto ;
}
.gridSquare{
margin: .1em;
background: var(--a);
border-radius: .1em;
}
.listRow{
margin: .3em .1em;
margin-left: .8em;
background: var(--a);
border-radius: .1em;
max-height: .15em;
}
.on div{
background: var(--btn-1h-fg);
}
.listRow::before{
position: absolute;
content: '';
margin-left: -.7em;
margin-top: -.2em;
width: .3em;
height: .3em;
border: var(--a) solid .15em;
border-radius: .1em;
}
.on ::before{
border-color: var(--btn-1h-fg);
}

View file

@ -18,7 +18,7 @@
<body>
<div id="topBar">
<div id="headerArea">
<div href="#" id="treeToggleBtn" class="tgl btn"><div class="hamburger_line"></div><div class="hamburger_line"></div><div class="hamburger_line"></div></div>
<a href="#" id="treeToggleBtn" class="tgl btn"></a>
<a href="/" id="srv_name"><span id="favico_onpage"></span>{{ srv_name }}</a>
</div>
<div id="ops"></div>
@ -38,7 +38,7 @@
<div id="op_bup" class="opview opbox {% if not ls0 %}act{% endif %}">
<form method="post" enctype="multipart/form-data" accept-charset="utf-8" action="{{ url_suf }}">
<input type="hidden" name="act" value="bput" />
<input type="file" name="f" multiple /><br />
<input id="bup_btn" type="file" name="f" multiple /><br />
<input type="submit" value="start upload">
</form>
<a id="bbsw" href="?b=u" rel="nofollow"><br />switch to basic browser</a>
@ -102,6 +102,7 @@
<div id="pro" class="logue">{{ "" if sb_lg else logues[0] }}</div>
<div id="wtc"></div>
<table id="files">
<thead>
<tr>
@ -161,9 +162,6 @@
</div>
<a id="gridicon_template" class="gridViewIcon tgl btn on"><div class="gridSquare"></div><div class="gridSquare"></div><div class="gridSquare"></div><div class="gridSquare"></div></div></a>
<a id="listicon_template" class="listViewIcon tgl btn"><div class="listRow"></div><div class="listRow"></div></div></a>
<div id="srv_info" style="display: none;"><span>{{ srv_info }}</span></div>
<div id="widget"></div>

View file

@ -754,6 +754,7 @@ modal.load();
// toolbar
ebi('ops').innerHTML = (
//'<a href="#" id="opa_x" data-dest="" tt="' + L.ot_close + '">--</a>' +
(IE ? '<span id="noie">' + L.ot_noie + '</span>' : '') +
'<a href="#" id="opa_srch" data-perm="read" data-dep="idx" data-dest="search" tt="' + L.ot_search + '">🔎</a>' +
(have_del ? '<a href="#" id="opa_del" data-perm="write" data-dest="unpost" tt="' + L.ot_unpost + '">🧯</a>' : '') +
'<a href="#" id="opa_up" data-dest="up2k">🚀</a>' +
@ -763,7 +764,6 @@ ebi('ops').innerHTML = (
'<a href="#" id="opa_msg" data-dest="msg" tt="' + L.ot_msg + '">📟</a>' +
'<a href="#" id="opa_cfg" data-dest="cfg" tt="' + L.ot_cfg + '">⚙️</a>' +
'<a href="#" id="opa_acc" data-dest="acc" tt=""><div id="acc_pfp">👤</div></a>' +
(IE ? '<span id="noie">' + L.ot_noie + '</span>' : '') +
'<div id="opdesc"></div>'
);
@ -809,7 +809,12 @@ function mktemp(is_dir) {
sendit(input.value);
// Chrome blurs elements when calling remove for some reason
input.onblur = null;
row.remove();
try{
row.remove();
}
catch(e){
console.log(e);
}
};
input.onkeydown = function(e) {
if (e.key == "Enter")
@ -924,7 +929,7 @@ ebi('op_up2k').innerHTML = (
'<form id="u2form" method="post" enctype="multipart/form-data" onsubmit="return false;"></form>\n' +
'<div id="u2conf" tt="">' +
'<details><summary>' + L.options + '</summary>' +
'<details><summary id="sum_u2conf">' + (IE ? '>> ' : '') + L.options + (IE ? ' <<' : '') + '</summary>' +
' <div class="setting">' +
' <table id="u2conft">\n' +
@ -1012,7 +1017,7 @@ ebi('op_up2k').innerHTML = (
' </div>' +
'</div>' +
'<details id="bup_tgl" href="#v=bup" data-dest="bup" data-perm="write" tt="' + L.ot_bup + '"><summary>' + L.bup +'</summary></details>'
'<details id="bup_tgl" href="#v=bup" data-dest="bup" data-perm="write" tt="' + L.ot_bup + '"><summary id="sum_bup">' + (IE ? '>> ' : '') + L.bup + (IE ? ' <<' : '') + '</summary></details>'
);
@ -1048,6 +1053,9 @@ ebi('up_outside').onclick = ebi('c_up_btn').onclick = function(){
modaltoggle('up2k');
}
ebi('sum_u2conf').onclick = function(){
clmod(this.parentElement, 'open', 't');
}
ebi('wrap').insertBefore(mknod('div', 'lazy'), ebi('epi'));
@ -1056,14 +1064,14 @@ x.parentNode.insertBefore(mknod('div', null,
'<input type="checkbox" id="uput" name="uput"><label for="uput">' + L.u_uput + '</label>'), x);
var bup = ebi('op_bup');
ebi('bup_tgl').after(bup);
ebi('bup_tgl').onclick = function() {
ebi('bup_tgl').appendChild(bup);
ebi('sum_bup').onclick = function() {
var open = !clgot(bup, 'act');
if(open)
modaltoggle('bup', true);
else
modaltoggle('up2k', true);
this.open = !open;
ebi('bup_tgl').open = !open;
};
ebi('up_moreopts').onclick = function(){
@ -1252,21 +1260,21 @@ ebi('op_cfg').innerHTML = (
h.id = ''
var subSettings = sections[i].children[1];
var section = `<div id="${sId}" class="s_section"><h3>${sName}</h3>`;
var section = '<div id="' + sId + '" class="s_section"><h3>' + sName + '</h3>';
for (var ii = 0; ii < subSettings.children.length; ii++){
var s = subSettings.children[ii];
var info = tt.parse(s.getAttribute('tt'));
s.removeAttribute('tt');
//s.href = '#' + sId;
section += `<div id="${subSettings.id}" class="setting">` +
section += '<div id="' + subSettings.id + '" class="setting">' +
s.outerHTML +
(info?.length > 0 ? `<p class="s_desc">${info}</p>` : '') +
((info != null && info.length > 0) ? '<p class="s_desc">' + info + '</p>' : '') +
'</div>';
}
section += '</div>'
ebi('s_list').innerHTML += section;
subSettings.innerHTML = '';
ebi('s_nav').innerHTML += `<a href="#${sId}" class="btn">${sName}</a>\n`;
ebi('s_nav').innerHTML += '<a href="#' + sId + '" class="btn">' + sName + '</a>\n';
}
ebi('s_outside').onclick = ebi('cs_btn').onclick = function(){
@ -1276,7 +1284,7 @@ ebi('op_cfg').innerHTML = (
// accent color
function parseColor (strColor) {
const s = new Option().style;
var s = new Option().style;
s.color = strColor;
return s.color !== '' ? s.color : '';
}
@ -1314,7 +1322,7 @@ ebi('tree').innerHTML = (
'<ul class="ntree" id="treeul"></ul>\n' +
'<div id="thx_ff">&nbsp;</div>'
);
ebi('thx_ff').before(ebi('tree_footer'));
ebi('tree').appendChild(ebi('tree_footer'));
clmod(ebi('tree'), 'sbar', 1);
ebi('goh').textContent = L.goh;
QS('#op_mkdir input[type="submit"]').value = L.ab_mkdir;
@ -1370,13 +1378,15 @@ ebi('rcm').innerHTML = (
mktemp(true);
}
ebi('acc_pfp').before(ebi('op_acc'));
ebi('opa_acc').appendChild(ebi('op_acc'));
ebi('op_acc').onclick = function (e){
e.stopPropagation();
};
})();
function modaltoggle(dest, show = 't'){
function modaltoggle(dest, show){
if(show == null)
show = 't';
if (show == false || show == 't' && QS('#' + dest + '.vis'))
dest = '';
@ -1425,8 +1435,7 @@ function goto(dest) {
clmod(obj[a], 'vis');
if (dest) {
var rewritten = ['mkdir', 'new_md'];
if(rewritten.includes(dest))
if(dest == 'mkdir' || dest == 'new_md')
return;
var lnk = QS('#ops>a[data-dest=' + dest + ']'),
@ -1443,11 +1452,14 @@ function goto(dest) {
return;
var modal = ebi(dest);
if(modal != null)
if(modal != null){
clmod(modal, 'vis', true);
}
var page = ebi('op_' + dest) ?? QS('#' + dest + ' .opview')
clmod(page, 'act', 1);
var opd = ebi('op_' + dest);
var page = opd != null ? opd : QS('#' + dest + ' .opview')
if(page != null)
clmod(page, 'act', 1);
clmod(lnk, 'act', 1);
if(dest == 'bup'){
@ -1462,6 +1474,7 @@ function goto(dest) {
}
clmod(document.documentElement, 'op_open', dest);
clmod(document.documentElement, 'noscroll', QS('.modal.vis'));
if (treectl)
treectl.onscroll();
@ -2347,25 +2360,18 @@ function canvas_cfg(can) {
return r;
}
function glossy_grad(can, h, s, l) {
var g = can.ctx.createLinearGradient(0, 0, 0, can.h),
p = [0, 0.49, 0.50, 1];
for (var a = 0; a < p.length; a++)
g.addColorStop(p[a], 'hsl(' + h + ',' + (Array.isArray(s) ? s[a] : s) + '%,' + (Array.isArray(l) ? l[a] : l) + '%)');
return g;
}
function auto_grad(can, color, color2 = '#000') {
function auto_grad(can, color, color2) {
if(color2 == null)
color2 = '#000';
var g = can.ctx.createLinearGradient(0, 0, 0, can.h),
p = [0, 0.49, 0.50, 1],
mix = [70, 100, 90, 70];
for (var a = 0; a < p.length; a++){
var c = `color-mix(in xyz, ${color} ${mix[a]}%, ${color2} ${100 - mix[a]}%)`;
g.addColorStop(p[a], c);
var c = 'color-mix(in xyz, ' + color + ' ' + mix[a] + '%, ' + color2 + ' ' + (100 - mix[a]) + '%)';
var pc = parseColor(c);
if(pc)
g.addColorStop(p[a], parseColor(c));
}
return g;
@ -2630,7 +2636,7 @@ var vbar = (function () {
if (gradh != gh) {
gradh = gh;
style1 = auto_grad(r.can, accent, accent);
style2 = light ? `color-mix(${bg} 85%, #000 15%` : `color-mix(${bg} 85%, #fff 15%`;
style2 = light ? 'color-mix(' + bg + ' 85%, #000 15%' : 'color-mix(' + bg + ' 85%, #fff 15%';
}
ctx.fillStyle = style2; ctx.fillRect(0, 0, w, h);
ctx.fillStyle = style1; ctx.fillRect(0, 0, w * mp.vol, h);
@ -5846,16 +5852,17 @@ var thegrid = (function () {
gfiles.style.display = 'none';
gfiles.innerHTML = (
'<div id="ghead" class="ghead">' +
'<a href="#" id="wtgrid" tt="' + L.wt_grid + '"></a>' +
'<a href="#" id="gridicon_template" class="grdbtn gb1 svgIcon tgl btn on"></a>' +
'<a href="#" id="listicon_template" class="grdbtn gb2 svgIcon tgl btn"></a>' +
'<a href="#" class="tgl btn" id="gridsel" tt="' + L.gt_msel + '</a> ' +
'<a href="#" class="tgl btn" id="gridvau" tt="' + L.gt_vau + '</a> ' +
'<a href="#" class="tgl btn" id="gridcrop" tt="' + L.gt_crop + '</a> ' +
'<a href="#" class="tgl btn" id="grid3x" tt="' + L.gt_3x + '</a> ' +
'<span>' + L.gt_zoom + ': ' +
'<span id="gridzoom">' + L.gt_zoom + ': ' +
'<a href="#" class="btn" z="-1.1" tt="Hotkey: shift-A">&ndash;</a> ' +
'<a href="#" class="btn" z="1.1" tt="Hotkey: shift-D">+</a></span> <span>' + L.gt_chop + ': ' +
'<a href="#" class="btn" z="1.1" tt="Hotkey: shift-D">+</a></span> <span id="gridchop">' + L.gt_chop + ': ' +
'<a href="#" class="btn" l="-1" tt="' + L.gt_c1 + '">&ndash;</a> ' +
'<a href="#" class="btn" l="1" tt="' + L.gt_c2 + '">+</a></span> <span>' + L.gt_sort + ': ' +
'<a href="#" class="btn" l="1" tt="' + L.gt_c2 + '">+</a></span> <span id="gridsort">' + L.gt_sort + ': ' +
'<a href="#" s="href">' + L.gt_name + '</a> ' +
'<a href="#" s="sz">' + L.gt_sz + '</a> ' +
'<a href="#" s="ts">' + L.gt_ts + '</a> ' +
@ -5866,16 +5873,15 @@ var thegrid = (function () {
lfiles.parentNode.insertBefore(gfiles, lfiles);
var ggrid = ebi('ggrid');
ebi('wtgrid').appendChild(ebi('gridicon_template'));
ebi('wtgrid').appendChild(ebi('listicon_template'));
var svg_grid = svg_box + '<rect x="4" y="4" width="7" height="7" rx="1" fill="currentColor"/><rect x="4" y="13" width="7" height="7" rx="1" fill="currentColor"/><rect x="13" y="4" width="7" height="7" rx="1" fill="currentColor"/><rect x="13" y="13" width="7" height="7" rx="1" fill="currentColor"/></svg>'
var svg_list = svg_box + '<path fill-rule="evenodd" clip-rule="evenodd" d="M9 6C9 4.34315 7.65685 3 6 3H4C2.34315 3 1 4.34315 1 6V8C1 9.65685 2.34315 11 4 11H6C7.65685 11 9 9.65685 9 8V6ZM7 6C7 5.44772 6.55228 5 6 5H4C3.44772 5 3 5.44772 3 6V8C3 8.55228 3.44772 9 4 9H6C6.55228 9 7 8.55228 7 8V6Z" fill="currentColor"/><path fill-rule="evenodd" clip-rule="evenodd" d="M9 16C9 14.3431 7.65685 13 6 13H4C2.34315 13 1 14.3431 1 16V18C1 19.6569 2.34315 21 4 21H6C7.65685 21 9 19.6569 9 18V16ZM7 16C7 15.4477 6.55228 15 6 15H4C3.44772 15 3 15.4477 3 16V18C3 18.5523 3.44772 19 4 19H6C6.55228 19 7 18.5523 7 18V16Z" fill="currentColor"/><path d="M11 7C11 6.44772 11.4477 6 12 6H22C22.5523 6 23 6.44772 23 7C23 7.55228 22.5523 8 22 8H12C11.4477 8 11 7.55228 11 7Z" fill="currentColor"/><path d="M11 17C11 16.4477 11.4477 16 12 16H22C22.5523 16 23 16.4477 23 17C23 17.5523 22.5523 18 22 18H12C11.4477 18 11 17.5523 11 17Z" fill="currentColor"/></svg>'
ebi('gridicon_template').innerHTML = svg_grid;
ebi('listicon_template').innerHTML = svg_list;
var clone = ebi('wtgrid').cloneNode(true);
clone.id = 'wtgrid2';
clone.childNodes.forEach((el)=>{
clmod(el, 'on', 't');
});
ebi('files').before(clone);
var g_tgl = mknod('a', 'wtgrid', ebi('gridicon_template').outerHTML + ebi('listicon_template').outerHTML);
for(var i = 0; i < g_tgl.childNodes.length; i++)
clmod(g_tgl.childNodes[i], 'on', 't');
ebi('wtc').appendChild(g_tgl);
var r = {
'sz': clamp(fcfg_get('gridsz', 10), 4, 80),
@ -5888,7 +5894,13 @@ var thegrid = (function () {
ev(e);
var s = this.getAttribute('s'),
z = this.getAttribute('z'),
l = this.getAttribute('l');
l = this.getAttribute('l'),
grdbtn = clgot(this, 'grdbtn');
if(grdbtn) {
ebi('griden').click();
return;
}
if (z)
return setsz(z > 0 ? r.sz * z : r.sz / (-z));
@ -5906,7 +5918,7 @@ var thegrid = (function () {
r.setdirty();
};
var links = QSA('#ghead a');
var links = QSA('#ghead a.btn');
for (var a = 0; a < links.length; a++)
links[a].onclick = btnclick;
@ -5926,7 +5938,7 @@ var thegrid = (function () {
var vis = has(perms, "read");
gfiles.style.display = vis && r.en ? '' : 'none';
lfiles.style.display = vis && !r.en ? '' : 'none';
ebi('wtgrid2').style.display = lfiles.style.display;
ebi('wtc').style.display = lfiles.style.display;
clmod(ggrid, 'crop', r.crop);
clmod(ggrid, 'nocrop', !r.crop);
ebi('pro').style.display = ebi('epi').style.display = ebi('lazy').style.display = ebi('treeul').style.display = ebi('treepar').style.display = '';
@ -6063,8 +6075,11 @@ var thegrid = (function () {
var ths = QSA('#ggrid>a');
for (var a = 0, aa = ths.length; a < aa; a++) {
var tr = ebi(ths[a].getAttribute('ref'))?.closest('tr'),
cl = tr?.className || '';
var _ref = ebi(ths[a].getAttribute('ref'));
if(_ref == null)
continue;
var tr = _ref.closest('tr'),
cl = tr.className || '';
if (noq_href(ths[a]).endsWith('/'))
cl += ' dir';
@ -6339,9 +6354,11 @@ var thegrid = (function () {
pbar.onresize();
vbar.onresize();
});
ebi('wtgrid').onclick = ebi('griden').onclick;
ebi('wtgrid2').onclick = ebi('griden').onclick;
ebi('listicon_template').onclick = ebi('griden').onclick;
ebi('wtgrid').onclick =
ebi('gridicon_template').onclick =
ebi('listicon_template').onclick =
ebi('griden').onclick;
return r;
})();
@ -6824,6 +6841,10 @@ var search_ui = (function () {
var path = decodeURI(get_evpath());
ebi('srch_pathv').value = path.slice(1);
}
if(IE)
folderSearch.onclick = function() {
clmod(ebi('srch_quickopts'), 'act', 't');
}
folderSearch.oninput = function(){
var v = unsmart(this.value)
var nsearch = ebi('srch_namev');
@ -6895,6 +6916,10 @@ var search_ui = (function () {
srch_msg(false, (q == vq) ? '' : L.sm_prev + (vq ? vq : '(*)'));
}
function onlyUnique(value, index, array) {
return array.indexOf(value) == index && value.length > 0;
}
function encode_query() {
var recursive = ebi('srch_recursivec').checked;
var q = '';
@ -6905,19 +6930,19 @@ var search_ui = (function () {
vs = unsmart(ebi('srch_' + k + 'v').value),
tvs = [];
if(k == 'path' && vs?.endsWith('/') && !vs?.includes('"')){
if(k == 'path' && vs.endsWith('/') && !vs.match('"')){
vs = vs.slice(0, -1);
vs = `"${vs}${(recursive ? '*' : '')}"`;
vs = '"' + vs + (recursive ? '*' : '') + '"';
}
function onlyUnique(value, index, array) {
return array.indexOf(value) === index && value?.length > 0;
}
var immune = vs.match(/\B("(?:[^"]|\\")*[^\\]")\B/g)?.filter(onlyUnique)
for(var i = 0; i < immune?.length; i++){
if(immune[i].length > 0){
tvs.push(immune[i]);
vs = vs.replace(immune[i], '')
var match = vs.match(/\B("(?:[^"]|\\")*[^\\]")\B/g);
if(match != null){
var immune = match.filter(onlyUnique)
for(var i = 0; i < immune.length; i++){
if(immune[i].length > 0){
tvs.push(immune[i]);
vs = vs.replace(immune[i], '')
}
}
}
@ -6976,18 +7001,18 @@ var search_ui = (function () {
if (tv.slice(0, 1) == '^') {
tv = tv.slice(1);
}
else if (!(tv.includes(' ') || tv.startsWith('"'))){
else if (!(tv.match(' ') || tv.startsWith('"'))){
tv = '*' + tv;
}
if (tv.slice(-1) == '$') {
tv = tv.slice(0, -1);
}
else if(!(tv.includes(' ') || tv.endsWith('"'))){
else if(!(tv.match(' ') || tv.endsWith('"'))){
tv += '*';
}
if (tv.includes(' ') && !tv.includes('"')) {
if (tv.match(' ') && !tv.match('"')) {
tv = '"' + tv + '"';
}
@ -7268,18 +7293,27 @@ function onwidgetresize(){
var pbarthinpos = ebi('pbarthinpos');
var width = widget.offsetWidth;
var thin = width < 800; //px
var gtc = `max-content max-content max-content ${thin ? '' : '20%'} auto max-content max-content max-content`;
var thin = IE || width < 800; //px
var gtc = 'max-content max-content max-content ' + (thin ? '' : '20%') + ' auto max-content max-content max-content';
if(!thin && bar.children.length < gtc.split(' ').length){
try{
ebi('trackname').after(ebi('progbar'));
ebi('trackname').after(ebi('altprogbar'));
bar.style.paddingTop = '.3em';
}
catch (e) {
// unnacounted old browser fallback
console.log(e);
thin = true;
}
}
gtc = 'max-content max-content max-content ' + (thin ? '' : '20%') + ' auto max-content max-content max-content';
if(thin && bar.children.length > gtc.split(' ').length){
pbarthinpos.appendChild(ebi('progbar'));
pbarthinpos.appendChild(ebi('altprogbar'));
bar.style.paddingTop = '0';
}
else if(!thin && bar.children.length < gtc.split(' ').length){
ebi('trackname').after(ebi('progbar'));
ebi('trackname').after(ebi('altprogbar'));
bar.style.paddingTop = '.3em';
}
ebi('altprogbar').maxWidth = thin ? '' : '40vw'
bar.style.gridTemplateColumns = gtc;
@ -8314,6 +8348,8 @@ var treectl = (function () {
onresize();
}
var svg_hamburger = svg_box + '<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="Menu"><rect id="Rectangle" fill-rule="nonzero" x="0" y="0" width="24" height="24"></rect><line x1="5" y1="7" x2="19" y2="7" id="Path" ' + svg_options + '></line><line x1="5" y1="17" x2="19" y2="17" id="Path" ' + svg_options + '></line><line x1="5" y1="12" x2="19" y2="12" id="Path" ' + svg_options + '></line></g></g></svg>'
ebi('treeToggleBtn').innerHTML = svg_hamburger;
ebi('treeToggleBtn').setAttribute('tt', L.tt_entree);
ebi('treeToggleBtn').onclick = r.toggleTree;
@ -8628,7 +8664,7 @@ var filecols = (function () {
r.uivis = function () {
var hcols = ebi('hcols');
var hcolDiv = hcols.parentElement.parentElement;
QS(`a[href='#${hcolDiv.id}']`).style.display = hcolDiv.style.display = ((!thegrid || !thegrid.en) && (hidden.length || MOBILE)) ? 'block' : 'none';
QS("a[href='#" + hcolDiv.id + "']").style.display = hcolDiv.style.display = ((!thegrid || !thegrid.en) && (hidden.length || MOBILE)) ? 'block' : 'none';
};
r.set_style = function (unhide) {
@ -9553,7 +9589,7 @@ function show_md(md, name, div, url, depth) {
if (depth) {
clmod(div, 'raw', 1);
div.textContent = "--[ " + name + " ]---------\r\n" + md;
return toast.warn(10, errmsg + (WebAssembly ? 'failed to load marked.js' : 'your browser is too old'));
return toast.warn(3, errmsg + (WebAssembly ? 'failed to load marked.js' : 'your browser is too old'));
}
wfp_debounce.n--;
@ -10234,24 +10270,24 @@ var rcm = (function () {
var vw = document.documentElement.clientWidth;
var maxh = Math.min(y, vh / 2);
menu.style.maxHeight = `calc(100vh - ${maxh}px - 2em)`;
menu.style.maxHeight = 'calc(100vh - ' + maxh + 'px - 2em)';
if(y > vh / 2){
// low click => menu upwards
menu.style.top = '';
menu.style.bottom = `${vh - y}px`;
menu.style.bottom = (vh - y) + 'px';
}
else{
menu.style.top = `${y}px`;
menu.style.top = y + 'px';
menu.style.bottom = '';
}
if(x > vw / 2){
// far right click => menu leftwards
menu.style.left = '';
menu.style.right = `${vw - x}px`;
menu.style.right = (vw - x) + 'px';
}
else{
menu.style.left = `${x}px`;
menu.style.left = x + 'px';
menu.style.right = '';
}
menu.style.display = 'block';

View file

@ -26,7 +26,10 @@ html {
}
#outer {
inset: 0;
top: 0;
left: 0;
bottom: 0;
right: 0;
position: absolute;
display: flex;
flex-direction: column;

View file

@ -50,8 +50,21 @@ catch (ex) {
up2k = up2k_init(false);
}
catch (ex) {
ebi('u2conf').style.display =
ebi('u2btn_ct').style.display =
ebi('u2c3t').style.display =
ebi('up_info').style.display =
ebi('opa_up').style.display =
'none'
ebi('uq_up').onclick = function(){
modaltoggle('bup', true);
ebi('bup_btn').click();
}
console.log('up2k init failed:', ex);
toast.err(10, 'could not initialize up2k\n\n' + basenames(ex));
toast.err(3, 'could not initialize up2k\n\n' + basenames(ex));
}
}
treectl.onscroll();
@ -1055,7 +1068,7 @@ function up2k_init(subtle) {
return onovercmn(this, e, true);
}
function checkDropMode(){
if(ebi('fsearch')?.checked){
if(ebi('fsearch').checked){
ebi('srch_zd').style.display = '';
ebi('up_zd').style.display = 'none';
ebi('srch_dz').style.display = '';

View file

@ -1552,7 +1552,7 @@ var tt = (function () {
};
r.parse = function(msg){
if(!(msg?.length > 0))
if(msg == null || msg.length == 0)
return msg;
if (msg.startsWith('`')) {
var x = false;