dashboardKeyBindings.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. define([
  2. 'angular',
  3. 'jquery',
  4. 'services/all'
  5. ],
  6. function(angular, $) {
  7. "use strict";
  8. var module = angular.module('grafana.services');
  9. module.service('dashboardKeybindings', function($rootScope, keyboardManager, $modal, $q) {
  10. this.shortcuts = function(scope) {
  11. scope.$on('$destroy', function() {
  12. keyboardManager.unbind('ctrl+f');
  13. keyboardManager.unbind('ctrl+h');
  14. keyboardManager.unbind('ctrl+s');
  15. keyboardManager.unbind('ctrl+r');
  16. keyboardManager.unbind('ctrl+z');
  17. keyboardManager.unbind('ctrl+o');
  18. keyboardManager.unbind('esc');
  19. });
  20. var helpModalScope = null;
  21. keyboardManager.bind('shift+¿', function() {
  22. if (helpModalScope) { return; }
  23. helpModalScope = $rootScope.$new();
  24. var helpModal = $modal({
  25. template: './app/partials/help_modal.html',
  26. persist: false,
  27. show: false,
  28. scope: helpModalScope,
  29. keyboard: false
  30. });
  31. helpModalScope.$on('$destroy', function() { helpModalScope = null; });
  32. $q.when(helpModal).then(function(modalEl) { modalEl.modal('show'); });
  33. }, { inputDisabled: true });
  34. keyboardManager.bind('ctrl+f', function() {
  35. scope.appEvent('show-dash-editor', { src: 'app/partials/search.html' });
  36. }, { inputDisabled: true });
  37. keyboardManager.bind('ctrl+o', function() {
  38. var current = scope.dashboard.sharedCrosshair;
  39. scope.dashboard.sharedCrosshair = !current;
  40. scope.dashboard.emit_refresh('refresh');
  41. }, { inputDisabled: true });
  42. keyboardManager.bind('ctrl+h', function() {
  43. var current = scope.dashboard.hideControls;
  44. scope.dashboard.hideControls = !current;
  45. }, { inputDisabled: true });
  46. keyboardManager.bind('ctrl+s', function(evt) {
  47. scope.appEvent('save-dashboard', evt);
  48. }, { inputDisabled: true });
  49. keyboardManager.bind('ctrl+r', function() {
  50. scope.dashboard.emit_refresh();
  51. }, { inputDisabled: true });
  52. keyboardManager.bind('ctrl+z', function(evt) {
  53. scope.appEvent('zoom-out', evt);
  54. }, { inputDisabled: true });
  55. keyboardManager.bind('esc', function() {
  56. var popups = $('.popover.in');
  57. if (popups.length > 0) {
  58. return;
  59. }
  60. // close modals
  61. var modalData = $(".modal").data();
  62. if (modalData && modalData.$scope && modalData.$scope.dismiss) {
  63. modalData.$scope.dismiss();
  64. }
  65. scope.appEvent('hide-dash-editor');
  66. scope.exitFullscreen();
  67. }, { inputDisabled: true });
  68. };
  69. });
  70. });