Hi, Please find the attached patch to fix the RM #3284 : F5 key not working consistently.
- Added the configurable keyboard shortcut (default F5) to refresh the browser tree nodes. Thanks, Khushboo
diff --git a/web/pgadmin/browser/register_browser_preferences.py b/web/pgadmin/browser/register_browser_preferences.py index 178af6b..3c2da91 100644 --- a/web/pgadmin/browser/register_browser_preferences.py +++ b/web/pgadmin/browser/register_browser_preferences.py @@ -291,3 +291,18 @@ def register_browser_preferences(self): category_label=gettext('Keyboard shortcuts'), fields=fields ) + + self.preference.register( + 'keyboard_shortcuts', + 'sub_menu_refresh', + gettext('Refresh browser tree node'), + 'keyboardshortcut', + { + 'alt': False, + 'shift': False, + 'control': False, + 'key': {'key_code': 116, 'char': 'F5'} + }, + category_label=gettext('Keyboard shortcuts'), + fields=fields + ) diff --git a/web/pgadmin/browser/static/js/keyboard.js b/web/pgadmin/browser/static/js/keyboard.js index 5c71b80..37fd61f 100644 --- a/web/pgadmin/browser/static/js/keyboard.js +++ b/web/pgadmin/browser/static/js/keyboard.js @@ -24,6 +24,7 @@ function(_, S, pgAdmin, $, Mousetrap, commonUtils, dialogTabNavigator) { 'sub_menu_properties': commonUtils.parseShortcutValue(pgBrowser.get_preference('browser', 'sub_menu_properties').value), 'sub_menu_create': commonUtils.parseShortcutValue(pgBrowser.get_preference('browser', 'sub_menu_create').value), 'sub_menu_delete': commonUtils.parseShortcutValue(pgBrowser.get_preference('browser', 'sub_menu_delete').value), + 'sub_menu_refresh': commonUtils.parseShortcutValue(pgBrowser.get_preference('browser', 'sub_menu_refresh').value), 'context_menu': commonUtils.parseShortcutValue(pgBrowser.get_preference('browser', 'context_menu').value), 'direct_debugging': commonUtils.parseShortcutValue(pgBrowser.get_preference('browser', 'direct_debugging').value), }; @@ -41,6 +42,7 @@ function(_, S, pgAdmin, $, Mousetrap, commonUtils, dialogTabNavigator) { 'bindSubMenuProperties': {'shortcuts': this.keyboardShortcut.sub_menu_properties}, // Sub menu - Edit Properties, 'bindSubMenuCreate': {'shortcuts': this.keyboardShortcut.sub_menu_create}, // Sub menu - Create Object, 'bindSubMenuDelete': {'shortcuts': this.keyboardShortcut.sub_menu_delete}, // Sub menu - Delete object, + 'bindSubMenuRefresh': {'shortcuts': this.keyboardShortcut.sub_menu_refresh, 'bindElem': '#tree'}, // Sub menu - Refresh object, 'bindContextMenu': {'shortcuts': this.keyboardShortcut.context_menu}, // Sub menu - Open context menu, 'bindDirectDebugging': {'shortcuts': this.keyboardShortcut.direct_debugging}, // Sub menu - Direct Debugging }; @@ -221,6 +223,13 @@ function(_, S, pgAdmin, $, Mousetrap, commonUtils, dialogTabNavigator) { // Call delete object callback pgAdmin.Browser.Node.callbacks.delete_obj.call(pgAdmin.Browser.Nodes[tree.t.itemData(tree.i)._type]); }, + bindSubMenuRefresh: function(e) { + e.preventDefault(); + var tree = pgBrowser.keyboardNavigation.getTreeDetails(); + + // Call refresh object callback + pgAdmin.Browser.Node.callbacks.refresh.call(pgAdmin.Browser.Nodes[tree.t.itemData(tree.i)._type]); + }, bindContextMenu: function(e) { var tree = this.getTreeDetails(), left = $(e.srcElement).find('.aciTreeEntry').position().left + 70, @@ -263,5 +272,5 @@ function(_, S, pgAdmin, $, Mousetrap, commonUtils, dialogTabNavigator) { }, }); - return pgAdmin.keyboardNavigation; + return pgAdmin.Browser.keyboardNavigation; }); diff --git a/web/pgadmin/static/js/utils.js b/web/pgadmin/static/js/utils.js index 026297f..879bbd0 100644 --- a/web/pgadmin/static/js/utils.js +++ b/web/pgadmin/static/js/utils.js @@ -12,7 +12,7 @@ export function parseShortcutValue(obj) { if (obj.alt) { shortcut += 'alt+'; } if (obj.shift) { shortcut += 'shift+'; } if (obj.control) { shortcut += 'ctrl+'; } - shortcut += String.fromCharCode(obj.key.key_code).toLowerCase(); + shortcut += obj.key.char.toLowerCase(); return shortcut; } diff --git a/web/regression/javascript/parse_shortcut_value_spec.js b/web/regression/javascript/parse_shortcut_value_spec.js new file mode 100644 index 0000000..dc20c3e --- /dev/null +++ b/web/regression/javascript/parse_shortcut_value_spec.js @@ -0,0 +1,117 @@ +///////////////////////////////////////////////////////////// +// +// pgAdmin 4 - PostgreSQL Tools +// +// Copyright (C) 2013 - 2018, The pgAdmin Development Team +// This software is released under the PostgreSQL Licence +// +////////////////////////////////////////////////////////////// + +import { parseShortcutValue } from 'sources/utils'; + +describe('parseShortcutValue', function () { + describe('when short cut is F5', function () { + it('returns f5', function () { + expect(parseShortcutValue({ + alt: false, + control: false, + shift: false, + key: { + char: 'F5', + key_code: 116 + } + })).toEqual('f5'); + }); + }); + describe('when short cut is Alt+Shift+F5', function () { + it('returns alt+shift+f5', function () { + expect(parseShortcutValue({ + alt: true, + control: false, + shift: true, + key: { + char: 'F5', + key_code: 116 + } + })).toEqual('alt+shift+f5'); + }); + }); + describe('when short cut is Alt+Shift+t', function () { + it('returns alt+shift+t', function () { + expect(parseShortcutValue({ + alt: true, + control: false, + shift: true, + key: { + char: 't', + key_code: 84 + } + })).toEqual('alt+shift+t'); + }); + }); + describe('when short cut is Alt+Shift+Ctrl+t', function () { + it('returns alt+shift+ctrl+t', function () { + expect(parseShortcutValue({ + alt: true, + control: true, + shift: true, + key: { + char: 't', + key_code: 84 + } + })).toEqual('alt+shift+ctrl+t'); + }); + }); + describe('when short cut is Alt+Ctrl+t', function () { + it('returns alt+ctrl+t', function () { + expect(parseShortcutValue({ + alt: true, + control: true, + shift: false, + key: { + char: 't', + key_code: 84 + } + })).toEqual('alt+ctrl+t'); + }); + }); + describe('when short cut is Shift+Ctrl+L', function () { + it('returns shift+ctrl+l', function () { + expect(parseShortcutValue({ + alt: false, + control: true, + shift: true, + key: { + char: 'L', + key_code: 76 + } + })).toEqual('shift+ctrl+l'); + }); + }); + describe('when short cut is $', function () { + it('returns $', function () { + expect(parseShortcutValue({ + alt: false, + control: false, + shift: false, + key: { + char: '$', + key_code: 52 + } + })).toEqual('$'); + }); + }); + describe('when short cut is 4', function () { + it('returns 4', function () { + expect(parseShortcutValue({ + alt: false, + control: false, + shift: false, + key: { + char: '4', + key_code: 52 + } + })).toEqual('4'); + }); + }); +});