aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorChristopher Ng <chrng8@gmail.com>2022-05-27 00:37:27 +0000
committerChristopher Ng <chrng8@gmail.com>2022-06-08 23:58:28 +0000
commit229c65b0d76e0856c8eac45ec2ba53fddfaf8ffd (patch)
tree624c0ee0b63e08867ab907edfe8238bb5e673cf0 /core
parentb7089c20ee4dd0f4b8bc805068aadbaf89a6a081 (diff)
downloadnextcloud-server-229c65b0d76e0856c8eac45ec2ba53fddfaf8ffd.tar.gz
nextcloud-server-229c65b0d76e0856c8eac45ec2ba53fddfaf8ffd.zip
Handle keyboard navigation in the file picker
Signed-off-by: Christopher Ng <chrng8@gmail.com>
Diffstat (limited to 'core')
-rw-r--r--core/src/OC/dialogs.js26
-rw-r--r--core/src/jquery/ocdialog.js10
-rw-r--r--core/templates/filepicker.html8
3 files changed, 26 insertions, 18 deletions
diff --git a/core/src/OC/dialogs.js b/core/src/OC/dialogs.js
index bd65ce90c43..ef923d44f0d 100644
--- a/core/src/OC/dialogs.js
+++ b/core/src/OC/dialogs.js
@@ -443,17 +443,23 @@ const Dialogs = {
self.$filelist = self.$filePicker.find('.filelist tbody')
self.$filelistContainer = self.$filePicker.find('.filelist-container')
self.$dirTree = self.$filePicker.find('.dirtree')
- self.$dirTree.on('click', 'div:not(:last-child)', self, function(event) {
- self._handleTreeListSelect(event, type)
+ self.$dirTree.on('click keydown', 'div:not(:last-child)', self, function(event) {
+ if (event.type === 'click' || (event.type === 'keydown' && event.key === 'Enter')) {
+ self._handleTreeListSelect(event, type)
+ }
})
- self.$filelist.on('click', 'tr', function(event) {
- self._handlePickerClick(event, $(this), type)
+ self.$filelist.on('click keydown', 'tr', function(event) {
+ if (event.type === 'click' || (event.type === 'keydown' && event.key === 'Enter')) {
+ self._handlePickerClick(event, $(this), type)
+ }
})
- self.$fileListHeader.on('click', 'a', function(event) {
- var dir = self.$filePicker.data('path')
- self.filepicker.sortField = $(event.currentTarget).data('sort')
- self.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'
- self._fillFilePicker(dir)
+ self.$fileListHeader.on('click keydown', 'a', function(event) {
+ if (event.type === 'click' || (event.type === 'keydown' && event.key === 'Enter')) {
+ var dir = self.$filePicker.data('path')
+ self.filepicker.sortField = $(event.currentTarget).data('sort')
+ self.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'
+ self._fillFilePicker(dir)
+ }
})
self._fillFilePicker(path)
})
@@ -1272,7 +1278,7 @@ const Dialogs = {
var dir
var path = this.$filePicker.data('path')
- var $template = $('<div data-dir="{dir}"><a>{name}</a></div>').addClass('crumb')
+ var $template = $('<div data-dir="{dir}" tabindex="0"><a>{name}</a></div>').addClass('crumb')
if (path) {
var paths = path.split('/')
$.each(paths, function(index, dir) {
diff --git a/core/src/jquery/ocdialog.js b/core/src/jquery/ocdialog.js
index 51a1c479e99..4579f420625 100644
--- a/core/src/jquery/ocdialog.js
+++ b/core/src/jquery/ocdialog.js
@@ -171,11 +171,13 @@ $.widget('oc.ocdialog', {
break
case 'closeButton':
if (value) {
- const $closeButton = $('<a class="oc-dialog-close"></a>')
+ const $closeButton = $('<a class="oc-dialog-close" tabindex="0"></a>')
this.$dialog.prepend($closeButton)
- $closeButton.on('click', function() {
- self.options.closeCallback && self.options.closeCallback()
- self.close()
+ $closeButton.on('click keydown', function(event) {
+ if (event.type === 'click' || (event.type === 'keydown' && event.key === 'Enter')) {
+ self.options.closeCallback && self.options.closeCallback()
+ self.close()
+ }
})
} else {
this.$dialog.find('.oc-dialog-close').remove()
diff --git a/core/templates/filepicker.html b/core/templates/filepicker.html
index 91514010cb3..124bc081ecf 100644
--- a/core/templates/filepicker.html
+++ b/core/templates/filepicker.html
@@ -25,26 +25,26 @@
<tr>
<th id="headerName" class="column-name">
<div id="headerName-container">
- <a class="name sort columntitle" data-sort="name">
+ <a class="name sort columntitle" data-sort="name" tabindex="0">
<span>{nameCol}</span>
<span class="sort-indicator hidden icon-triangle-n"></span>
</a>
</div>
</th>
<th id="headerSize" class="column-size">
- <a class="size sort columntitle" data-sort="size">
+ <a class="size sort columntitle" data-sort="size" tabindex="0">
<span>{sizeCol}</span>
<span class="sort-indicator hidden icon-triangle-n"></span></a>
</th>
<th id="headerDate" class="column-mtime">
- <a id="modified" class="columntitle" data-sort="mtime">
+ <a id="modified" class="columntitle" data-sort="mtime" tabindex="0">
<span>{modifiedCol}</span>
<span class="sort-indicator hidden icon-triangle-n"></span></a>
</th>
</tr>
</thead>
<tbody>
- <tr data-entryname="{filename}" data-type="{type}">
+ <tr data-entryname="{filename}" data-type="{type}" tabindex="0">
<td class="filename"
style="background-image:url({icon})">
<span class="filename-parts">