dashnav.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import moment from 'moment';
  2. import angular from 'angular';
  3. import {appEvents, NavModel} from 'app/core/core';
  4. import {DashboardModel} from '../dashboard_model';
  5. export class DashNavCtrl {
  6. dashboard: DashboardModel;
  7. navModel: NavModel;
  8. titleTooltip: string;
  9. /** @ngInject */
  10. constructor(
  11. private $scope,
  12. private dashboardSrv,
  13. private $location,
  14. public playlistSrv) {
  15. appEvents.on('save-dashboard', this.saveDashboard.bind(this), $scope);
  16. if (this.dashboard.meta.isSnapshot) {
  17. var meta = this.dashboard.meta;
  18. this.titleTooltip = 'Created:  ' + moment(meta.created).calendar();
  19. if (meta.expires) {
  20. this.titleTooltip += '<br>Expires: &nbsp;' + moment(meta.expires).fromNow() + '<br>';
  21. }
  22. }
  23. }
  24. toggleSettings() {
  25. let search = this.$location.search();
  26. if (search.editview) {
  27. delete search.editview;
  28. } else {
  29. search.editview = 'settings';
  30. }
  31. this.$location.search(search);
  32. }
  33. close() {
  34. let search = this.$location.search();
  35. if (search.editview) {
  36. delete search.editview;
  37. }
  38. if (search.fullscreen) {
  39. delete search.fullscreen;
  40. delete search.edit;
  41. }
  42. this.$location.search(search);
  43. }
  44. starDashboard() {
  45. this.dashboardSrv.starDashboard(this.dashboard.id, this.dashboard.meta.isStarred)
  46. .then(newState => {
  47. this.dashboard.meta.isStarred = newState;
  48. });
  49. }
  50. shareDashboard(tabIndex) {
  51. var modalScope = this.$scope.$new();
  52. modalScope.tabIndex = tabIndex;
  53. modalScope.dashboard = this.dashboard;
  54. appEvents.emit('show-modal', {
  55. src: 'public/app/features/dashboard/partials/shareModal.html',
  56. scope: modalScope
  57. });
  58. }
  59. hideTooltip(evt) {
  60. angular.element(evt.currentTarget).tooltip('hide');
  61. }
  62. saveDashboard() {
  63. return this.dashboardSrv.saveDashboard();
  64. }
  65. showSearch() {
  66. appEvents.emit('show-dash-search');
  67. }
  68. addPanel() {
  69. if (this.dashboard.panels.length > 0 && this.dashboard.panels[0].type === 'add-panel') {
  70. this.dashboard.removePanel(this.dashboard.panels[0]);
  71. return;
  72. }
  73. this.dashboard.addPanel({
  74. type: 'add-panel',
  75. gridPos: {x: 0, y: 0, w: 12, h: 9},
  76. title: 'Panel Title',
  77. });
  78. }
  79. navItemClicked(navItem, evt) {
  80. if (navItem.clickHandler) {
  81. navItem.clickHandler();
  82. evt.preventDefault();
  83. }
  84. }
  85. }
  86. export function dashNavDirective() {
  87. return {
  88. restrict: 'E',
  89. templateUrl: 'public/app/features/dashboard/dashnav/dashnav.html',
  90. controller: DashNavCtrl,
  91. bindToController: true,
  92. controllerAs: 'ctrl',
  93. transclude: true,
  94. scope: { dashboard: "=" }
  95. };
  96. }
  97. angular.module('grafana.directives').directive('dashnav', dashNavDirective);