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');
+ });
+ });
+});