Skip to content

Commit ce1e4d4

Browse files
committed
fix(tpl): enable selecting upload tab by keyboard
1 parent fdea24e commit ce1e4d4

File tree

4 files changed

+60
-12
lines changed

4 files changed

+60
-12
lines changed

src/tpl/asset/main.js

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
var classHeader = 'header';
44
var leavingEvent = typeof window.onpagehide !== 'undefined' ? 'pagehide' : 'beforeunload';
55

6+
var Enter = 'Enter';
7+
var Escape = 'Escape';
8+
var Esc = 'Esc';
9+
var Space = ' ';
10+
611
function enableFilter() {
712
if (!document.querySelector) {
813
var filter = document.getElementById && document.getElementById('panel-filter');
@@ -82,14 +87,14 @@
8287
input.addEventListener('change', onValueMayChange, false);
8388
input.addEventListener('keydown', function (e) {
8489
switch (e.key) {
85-
case 'Enter':
90+
case Enter:
8691
clearTimeout(timeoutId);
8792
input.blur();
8893
doFilter();
8994
e.preventDefault();
9095
break;
91-
case 'Escape':
92-
case 'Esc':
96+
case Escape:
97+
case Esc:
9398
clearTimeout(timeoutId);
9499
input.value = '';
95100
doFilter();
@@ -448,6 +453,23 @@
448453
}
449454
}
450455

456+
function onKeydownOpt(e) {
457+
switch (e.key) {
458+
case Enter:
459+
case Space:
460+
if (e.ctrlKey || e.altKey || e.metaKey || e.shiftKey) {
461+
break;
462+
}
463+
e.preventDefault();
464+
e.stopPropagation();
465+
if (e.target === optActive) {
466+
break;
467+
}
468+
e.target.click();
469+
break;
470+
}
471+
}
472+
451473
if (typeof fileInput.webkitdirectory === 'undefined') {
452474
addClass(uploadType, classNone);
453475
return;
@@ -457,12 +479,15 @@
457479

458480
if (optFile) {
459481
optFile.addEventListener('click', onClickOptFile);
482+
optFile.addEventListener('keydown', onKeydownOpt);
460483
}
461484
if (optDirFile) {
462485
optDirFile.addEventListener('click', onClickOptDirFile);
486+
optDirFile.addEventListener('keydown', onKeydownOpt);
463487
}
464488
if (optInnerDirFile) {
465489
optInnerDirFile.addEventListener('click', onClickOptInnerDirFile);
490+
optInnerDirFile.addEventListener('keydown', onKeydownOpt);
466491
}
467492

468493
if (sessionStorage) {

src/tpl/asset/main.js.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ const mainJs = `
55
var classNone = 'none';
66
var classHeader = 'header';
77
var leavingEvent = typeof window.onpagehide !== 'undefined' ? 'pagehide' : 'beforeunload';
8+
var Enter = 'Enter';
9+
var Escape = 'Escape';
10+
var Esc = 'Esc';
11+
var Space = ' ';
812
function enableFilter() {
913
if (!document.querySelector) {
1014
var filter = document.getElementById && document.getElementById('panel-filter');
@@ -75,14 +79,14 @@ input.addEventListener('input', onValueMayChange, false);
7579
input.addEventListener('change', onValueMayChange, false);
7680
input.addEventListener('keydown', function (e) {
7781
switch (e.key) {
78-
case 'Enter':
82+
case Enter:
7983
clearTimeout(timeoutId);
8084
input.blur();
8185
doFilter();
8286
e.preventDefault();
8387
break;
84-
case 'Escape':
85-
case 'Esc':
88+
case Escape:
89+
case Esc:
8690
clearTimeout(timeoutId);
8791
input.value = '';
8892
doFilter();
@@ -400,6 +404,22 @@ fileInput.name = innerDirFile;
400404
fileInput.webkitdirectory = true;
401405
}
402406
}
407+
function onKeydownOpt(e) {
408+
switch (e.key) {
409+
case Enter:
410+
case Space:
411+
if (e.ctrlKey || e.altKey || e.metaKey || e.shiftKey) {
412+
break;
413+
}
414+
e.preventDefault();
415+
e.stopPropagation();
416+
if (e.target === optActive) {
417+
break;
418+
}
419+
e.target.click();
420+
break;
421+
}
422+
}
403423
if (typeof fileInput.webkitdirectory === 'undefined') {
404424
addClass(uploadType, classNone);
405425
return;
@@ -408,12 +428,15 @@ optDirFile && removeClass(optDirFile, classHidden);
408428
optInnerDirFile && removeClass(optInnerDirFile, classHidden);
409429
if (optFile) {
410430
optFile.addEventListener('click', onClickOptFile);
431+
optFile.addEventListener('keydown', onKeydownOpt);
411432
}
412433
if (optDirFile) {
413434
optDirFile.addEventListener('click', onClickOptDirFile);
435+
optDirFile.addEventListener('keydown', onKeydownOpt);
414436
}
415437
if (optInnerDirFile) {
416438
optInnerDirFile.addEventListener('click', onClickOptInnerDirFile);
439+
optInnerDirFile.addEventListener('keydown', onKeydownOpt);
417440
}
418441
if (sessionStorage) {
419442
var uploadTypeField = 'upload-type';

src/tpl/page.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@
2929

3030
{{if .CanUpload}}
3131
<div class="tab upload-type">
32-
<label class="file active" tabindex="0" title="Upload files">Files</label>
33-
{{if .CanMkdir}}<label class="dirfile hidden" tabindex="0" title="Upload Directory itself">Dir</label>{{end}}
34-
<label class="innerdirfile hidden" tabindex="0" title="Upload contents of directory">Dir contents</label>
32+
<label class="file active" tabindex="0" role="button" title="Upload files">Files</label>
33+
{{if .CanMkdir}}<label class="dirfile hidden" tabindex="0" role="button" title="Upload Directory itself">Dir</label>{{end}}
34+
<label class="innerdirfile hidden" tabindex="0" role="button" title="Upload contents of directory">Dir contents</label>
3535
</div>
3636
<div class="panel upload">
3737
<form method="POST" action="{{.SubItemPrefix}}?upload" enctype="multipart/form-data">

src/tpl/page.html.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ const pageTplStr = `
3737
{{end}}
3838
{{if .CanUpload}}
3939
<div class="tab upload-type">
40-
<label class="file active" tabindex="0" title="Upload files">Files</label>
41-
{{if .CanMkdir}}<label class="dirfile hidden" tabindex="0" title="Upload Directory itself">Dir</label>{{end}}
42-
<label class="innerdirfile hidden" tabindex="0" title="Upload contents of directory">Dir contents</label>
40+
<label class="file active" tabindex="0" role="button" title="Upload files">Files</label>
41+
{{if .CanMkdir}}<label class="dirfile hidden" tabindex="0" role="button" title="Upload Directory itself">Dir</label>{{end}}
42+
<label class="innerdirfile hidden" tabindex="0" role="button" title="Upload contents of directory">Dir contents</label>
4343
</div>
4444
<div class="panel upload">
4545
<form method="POST" action="{{.SubItemPrefix}}?upload" enctype="multipart/form-data">

0 commit comments

Comments
 (0)