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

Reply via email to