shortcuts_handler.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. "use strict";
  2. /**
  3. * @fileoverview Handle shortcuts in various pages
  4. * @name Shortcuts handler
  5. *
  6. * @requires jQuery
  7. * @requires jQueryUI
  8. */
  9. /* global Console */
  10. // js/console.js
  11. /**
  12. * Register key events on load
  13. */
  14. $(function () {
  15. var databaseOp = false;
  16. var tableOp = false;
  17. var keyD = 68;
  18. var keyT = 84;
  19. var keyK = 75;
  20. var keyS = 83;
  21. var keyF = 70;
  22. var keyE = 69;
  23. var keyH = 72;
  24. var keyC = 67;
  25. var keyBackSpace = 8;
  26. $(document).on('keyup', function (e) {
  27. // is a string but is also a boolean according to https://api.jquery.com/prop/
  28. if ($(e.target).prop('contenteditable') === 'true' || $(e.target).prop('contenteditable') === true) {
  29. return;
  30. }
  31. if (e.target.nodeName === 'INPUT' || e.target.nodeName === 'TEXTAREA' || e.target.nodeName === 'SELECT') {
  32. return;
  33. }
  34. if (e.keyCode === keyD) {
  35. setTimeout(function () {
  36. databaseOp = false;
  37. }, 2000);
  38. } else if (e.keyCode === keyT) {
  39. setTimeout(function () {
  40. tableOp = false;
  41. }, 2000);
  42. }
  43. });
  44. $(document).on('keydown', function (e) {
  45. // is a string but is also a boolean according to https://api.jquery.com/prop/
  46. if ($(e.target).prop('contenteditable') === 'true' || $(e.target).prop('contenteditable') === true) {
  47. return;
  48. } // disable the shortcuts when session has timed out.
  49. if ($('#modalOverlay').length > 0) {
  50. return;
  51. }
  52. if (e.ctrlKey && e.altKey && e.keyCode === keyC) {
  53. Console.toggle();
  54. }
  55. if (e.ctrlKey && e.keyCode === keyK) {
  56. e.preventDefault();
  57. Console.toggle();
  58. }
  59. if (e.target.nodeName === 'INPUT' || e.target.nodeName === 'TEXTAREA' || e.target.nodeName === 'SELECT') {
  60. return;
  61. }
  62. var isTable;
  63. var isDb;
  64. if (e.keyCode === keyD) {
  65. databaseOp = true;
  66. } else if (e.keyCode === keyK) {
  67. e.preventDefault();
  68. Console.toggle();
  69. } else if (e.keyCode === keyS) {
  70. if (databaseOp === true) {
  71. isTable = CommonParams.get('table');
  72. isDb = CommonParams.get('db');
  73. if (isDb && !isTable) {
  74. $('.nav-link .ic_b_props').first().trigger('click');
  75. }
  76. } else if (tableOp === true) {
  77. isTable = CommonParams.get('table');
  78. isDb = CommonParams.get('db');
  79. if (isDb && isTable) {
  80. $('.nav-link .ic_b_props').first().trigger('click');
  81. }
  82. } else {
  83. $('#pma_navigation_settings_icon').trigger('click');
  84. }
  85. } else if (e.keyCode === keyF) {
  86. if (databaseOp === true) {
  87. isTable = CommonParams.get('table');
  88. isDb = CommonParams.get('db');
  89. if (isDb && !isTable) {
  90. $('.nav-link .ic_b_search').first().trigger('click');
  91. }
  92. } else if (tableOp === true) {
  93. isTable = CommonParams.get('table');
  94. isDb = CommonParams.get('db');
  95. if (isDb && isTable) {
  96. $('.nav-link .ic_b_search').first().trigger('click');
  97. }
  98. }
  99. } else if (e.keyCode === keyT) {
  100. tableOp = true;
  101. } else if (e.keyCode === keyE) {
  102. $('.ic_b_export').first().trigger('click');
  103. } else if (e.keyCode === keyBackSpace) {
  104. window.history.back();
  105. } else if (e.keyCode === keyH) {
  106. $('.ic_b_home').first().trigger('click');
  107. }
  108. });
  109. });