diff --git a/web/pgadmin/misc/file_manager/static/js/create_dialogue.js b/web/pgadmin/misc/file_manager/static/js/create_dialogue.js index a3c44ec88..268d8d727 100644 --- a/web/pgadmin/misc/file_manager/static/js/create_dialogue.js +++ b/web/pgadmin/misc/file_manager/static/js/create_dialogue.js @@ -28,11 +28,7 @@ module.exports = Alertify.dialog('createModeDlg', function() { text: gettext('Create'), key: 13, className: 'btn btn-primary fa fa-file file_manager_create file_manager_ok pg-alertify-button disabled', - }, - ], - focus: { - element: 0, - }, + }], options: { closableByDimmer: false, maximizable: false, @@ -175,6 +171,7 @@ module.exports = Alertify.dialog('createModeDlg', function() { if (!_.isUndefined(newFile) && newFile !== '' && this.is_file_exist()) { this.replace_file(); + this.$container.find('.replace_file').find('.btn_yes').trigger('focus'); closeEvent.cancel = true; } else { pgAdmin.Browser.Events.trigger('pgadmin-storage:finish_btn:create_file', newFile); diff --git a/web/pgadmin/misc/file_manager/static/js/select_dialogue.js b/web/pgadmin/misc/file_manager/static/js/select_dialogue.js index 219e6ba4f..97d1ed770 100644 --- a/web/pgadmin/misc/file_manager/static/js/select_dialogue.js +++ b/web/pgadmin/misc/file_manager/static/js/select_dialogue.js @@ -91,9 +91,6 @@ module.exports = Alertify.dialog('fileSelectionDlg', function() { key: 13, className: 'btn btn-primary fa fa-file file_manager_ok pg-alertify-button disabled', }], - focus: { - element: 0, - }, options: { closableByDimmer: false, maximizable: false, diff --git a/web/pgadmin/misc/file_manager/static/js/utility.js b/web/pgadmin/misc/file_manager/static/js/utility.js index bd0e51cac..86d239989 100644 --- a/web/pgadmin/misc/file_manager/static/js/utility.js +++ b/web/pgadmin/misc/file_manager/static/js/utility.js @@ -474,7 +474,7 @@ define([ /* For the html ele */ let item_ele = - `
| + | ${lg.name} | @@ -575,7 +575,7 @@ define([ /* For the html ele */ let item_ele = - ` |
|---|---|---|
| `;
let data_protected = '';
@@ -698,7 +698,7 @@ define([
$('.storage_dialog #uploader .input-path').prop('disabled', false);
var result = '',
data = resp.data.result;
-
+ let isGridView = false;
// hide activity indicator
$('.fileinfo').find('span.activity').hide();
if (data.Code === 0) {
@@ -711,6 +711,7 @@ define([
// generate HTML for files/folder and render into container
if ($('.fileinfo').data('view') == 'grid') {
result += getGridView(data, capabilities);
+ isGridView = true;
} else {
result += getListView(data, capabilities);
}
@@ -737,6 +738,23 @@ define([
$.tablesorter.resizable.setWidth($listing_table.find('th[data-column="2"]'), wo.resizable_widths[2]);
});
+ /* Role of this function is to click or double click on element when user is doing keyboard navigation*/
+ var clickOnFileFolderManually = function(event) {
+ let self = this;
+ event.preventDefault();
+ event.stopPropagation();
+ // if file/folder is protected do nothing
+ if ($(this).find('.fa-lock').length)
+ return;
+ if ($(this).find('.fa-file-text-o').length)
+ $(this).click();
+ // If folder then first select and then double click to opn folder
+ else if ($(this).find('.fa-folder-open').length) {
+ $(this).click();
+ setTimeout(() => { $(self).trigger('dblclick'); }, 10);
+ }
+ };
+
$listing_table.on( 'tablesorter-ready', function() {
let wo = this.config.widgetOptions;
if($.tablesorter.storage($listing_table[0], 'tablesorter-table-resized-width') === '') {
@@ -744,8 +762,55 @@ define([
}
$.tablesorter.resizable.setWidth($listing_table.find('th[data-column="2"]'), wo.resizable_widths[2]);
$listing_table.trigger('resizableUpdate');
+
+ // Table Sorter writes table elements randomly so we need to handle some corner cases manually
+ $('#show_hidden').off('keydown').on('keydown', function(event) {
+ if (!isGridView && event.keyCode == 9 && event.shiftKey) {
+ event.preventDefault();
+ $listing_table.find('tbody tr:last').trigger('focus');
+ }
+ });
+
+ $listing_table.find('tbody tr').off('keydown').on('keydown', function(event) {
+ // If key is pressed then we need to trigger click so that it can select file
+ if (event.keyCode == 13 || event.keyCode == 32) {
+ clickOnFileFolderManually.call(this, event);
+ } else if (event.keyCode == 9) {
+ if (event.shiftKey) {
+ // When first tr losses focus and shift + tab > we need to set focus on header
+ if ($(this).prev().length == 0) {
+ event.preventDefault();
+ $listing_table.find('th.tablesorter-header:last').trigger('focus');
+ }
+ } else {
+ // When last tr losses focus and Tab was pressed > we need to set focus on checkbox
+ if ($(this).next().length == 0) {
+ event.preventDefault();
+ $('#show_hidden').trigger('focus');
+ }
+ }
+ }
+ });
+
+ $listing_table.find('th.tablesorter-header').off('keydown').on('keydown', function(event) {
+ // If key is pressed then we need to trigger click so that it can sort
+ if (event.keyCode == 13 || event.keyCode == 32) {
+ event.preventDefault();
+ event.stopPropagation();
+ $(this).trigger('click');
+ }
+ });
});
+ if(isGridView) {
+ $('.file_manager').find('#contents li').off('keydown').on('keydown', function(event) {
+ // If key is pressed then we need to trigger click so that it can sort
+ if (event.keyCode == 13 || event.keyCode == 32) {
+ clickOnFileFolderManually.call(this, event);
+ }
+ });
+ }
+
// rename file/folder
$('.file_manager button.rename').off().on('click', function(e) {
@@ -1195,11 +1260,11 @@ define([
select_box = `
${gettext('Show hidden files and folders')}?
-
+
-
+
`;
}
@@ -1255,6 +1320,8 @@ define([
enable_disable_btn();
});
+
+
// Refresh current directory
$('.file_manager .refresh').on('click', function() {
enable_disable_btn();
@@ -1476,12 +1543,12 @@ define([
// we remove simple file upload element
$('.file-input-container').remove();
$('.upload').remove();
- $('.create').before(' ');
+ $('.create').before(' ');
$('#uploader .upload').off().on('click', function() {
// we create prompt
var msg = '
diff --git a/web/pgadmin/static/js/backgrid.pgadmin.js b/web/pgadmin/static/js/backgrid.pgadmin.js
index 2ea0ec90e..5bf2fec5b 100644
--- a/web/pgadmin/static/js/backgrid.pgadmin.js
+++ b/web/pgadmin/static/js/backgrid.pgadmin.js
@@ -781,6 +781,7 @@ define([
this.$select.off('blur', this.exitEditMode);
this.$select.select2('close');
this.$el.removeClass('editor');
+ this.$el.find('.select2-selection').trigger('focus');
},
saveOrCancel: function (e) {
@@ -794,7 +795,9 @@ define([
let gotoCell;
// go to Next Cell & if Shift is also pressed go to Previous Cell
- gotoCell = e.shiftKey ? self.$el.prev() : self.$el.next();
+ if (e.keyCode == 9 || e.keyCode == 16) {
+ gotoCell = e.shiftKey ? self.$el.prev() : self.$el.next();
+ }
if (gotoCell) {
let command = new Backgrid.Command({
' +
- '' +
+ '' +
'
@@ -25,7 +25,7 @@
'+
''+
' ' +
@@ -1645,7 +1712,7 @@ define([
// template for creating new folder
folder_div =
- '' +
' New_Folder ' +
'
-
@@ -67,15 +67,15 @@
{{ _('Are you sure you want to delete this item?') }}
-
{{ _('Are you sure you want to replace this file?') }}
-
|