diff --git a/public/app/features/panel/metrics_panel_ctrl.ts b/public/app/features/panel/metrics_panel_ctrl.ts new file mode 100644 index 00000000000..968bcea52b6 --- /dev/null +++ b/public/app/features/panel/metrics_panel_ctrl.ts @@ -0,0 +1,22 @@ +/// + +import config from 'app/core/config'; +import {PanelCtrl} from './panel_ctrl'; + +function metricsEditorTab() { + return {templateUrl: 'public/app/partials/metrics.html'}; +} + +class MetricsPanelCtrl extends PanelCtrl { + constructor($scope) { + super($scope); + } + + initEditorTabs() { + super.initEditorTabs(); + this.editorTabs.push({title: 'Metrics', directiveFn: metricsEditorTab}); + } +} + +export {MetricsPanelCtrl}; + diff --git a/public/app/features/panel/panel.ts b/public/app/features/panel/panel.ts index bff0d68955b..08ede83eb95 100644 --- a/public/app/features/panel/panel.ts +++ b/public/app/features/panel/panel.ts @@ -2,75 +2,10 @@ import config from 'app/core/config'; -function generalOptionsTabEditorTab() { - return {templateUrl: 'public/app/partials/panelgeneral.html'}; -} +import {PanelCtrl} from './panel_ctrl'; +import {MetricsPanelCtrl} from './metrics_panel_ctrl'; -export class PanelCtrl { - panel: any; - row: any; - dashboard: any; - editorTabIndex: number; - name: string; - icon: string; - editorTabs: any; - $scope: any; - - constructor($scope) { - var plugin = config.panels[this.panel.type]; - - this.$scope = $scope; - this.name = plugin.name; - this.icon = plugin.info.icon; - this.editorTabIndex = 0; - this.publishAppEvent('panel-instantiated', {scope: $scope}); - } - - publishAppEvent(evtName, evt) { - this.$scope.$root.appEvent(evtName, evt); - } - - changeView(fullscreen, edit) { - this.publishAppEvent('panel-change-view', { - fullscreen: fullscreen, edit: edit, panelId: this.panel.id - }); - } - - viewPanel() { - this.changeView(true, false); - } - - editPanel() { - if (!this.editorTabs) { - this.initEditorTabs(); - } - - this.changeView(true, true); - } - - exitFullscreen() { - this.changeView(false, false); - } - - initEditorTabs() { - this.editorTabs = []; - this.editorTabs.push({title: 'General', directiveFn: generalOptionsTabEditorTab}); - this.editorTabs = this.editorTabs.concat(this.getEditorTabs()); - } - - getEditorTabs() { return [];} - - getMenu() { - let menu = []; - menu.push({text: 'View', click: 'ctrl.viewPanel(); dismiss();'}); - menu.push({text: 'Edit', click: 'ctrl.editPanel(); dismiss();', role: 'Editor'}); - menu.push({text: 'Duplicate', click: 'ctrl.duplicate()', role: 'Editor' }); - menu.push({text: 'Share', click: 'ctrl.share(); dismiss();'}); - return menu; - } -} - -export class PanelDirective { +class PanelDirective { template: string; templateUrl: string; bindToController: boolean; @@ -99,3 +34,8 @@ export class PanelDirective { } } +export { + PanelCtrl, + MetricsPanelCtrl, + PanelDirective, +} diff --git a/public/app/features/panel/panel_ctrl.ts b/public/app/features/panel/panel_ctrl.ts new file mode 100644 index 00000000000..b6b6e07ed86 --- /dev/null +++ b/public/app/features/panel/panel_ctrl.ts @@ -0,0 +1,69 @@ +/// + +import config from 'app/core/config'; + +function generalOptionsTabEditorTab() { + return {templateUrl: 'public/app/partials/panelgeneral.html'}; +} + +export class PanelCtrl { + panel: any; + row: any; + dashboard: any; + editorTabIndex: number; + name: string; + icon: string; + editorTabs: any; + $scope: any; + isMetricsPanel: boolean; + + constructor($scope) { + var plugin = config.panels[this.panel.type]; + + this.$scope = $scope; + this.name = plugin.name; + this.icon = plugin.info.icon; + this.editorTabIndex = 0; + this.publishAppEvent('panel-instantiated', {scope: $scope}); + } + + publishAppEvent(evtName, evt) { + this.$scope.$root.appEvent(evtName, evt); + } + + changeView(fullscreen, edit) { + this.publishAppEvent('panel-change-view', { + fullscreen: fullscreen, edit: edit, panelId: this.panel.id + }); + } + + viewPanel() { + this.changeView(true, false); + } + + editPanel() { + if (!this.editorTabs) { + this.initEditorTabs(); + } + + this.changeView(true, true); + } + + exitFullscreen() { + this.changeView(false, false); + } + + initEditorTabs() { + this.editorTabs = []; + this.editorTabs.push({title: 'General', directiveFn: generalOptionsTabEditorTab}); + } + + getMenu() { + let menu = []; + menu.push({text: 'View', click: 'ctrl.viewPanel(); dismiss();'}); + menu.push({text: 'Edit', click: 'ctrl.editPanel(); dismiss();', role: 'Editor'}); + menu.push({text: 'Duplicate', click: 'ctrl.duplicate()', role: 'Editor' }); + menu.push({text: 'Share', click: 'ctrl.share(); dismiss();'}); + return menu; + } +} diff --git a/public/app/plugins/panel/test/module.ts b/public/app/plugins/panel/test/module.ts index eed9fdc021d..0868002c2dd 100644 --- a/public/app/plugins/panel/test/module.ts +++ b/public/app/plugins/panel/test/module.ts @@ -1,20 +1,19 @@ /// -import {PanelDirective, PanelCtrl} from '../../../features/panel/panel'; +import {PanelDirective, MetricsPanelCtrl} from '../../../features/panel/panel'; function optionsTab() { - return { - template: '

options!

' - }; + return {template: '

options!

' }; } -export class TestPanelCtrl extends PanelCtrl { +export class TestPanelCtrl extends MetricsPanelCtrl { constructor($scope) { super($scope); } - getEditorTabs() { - return [{title: 'Options', directiveFn: optionsTab}]; + initEditorTabs() { + super.initEditorTabs(); + this.editorTabs.push({title: 'Options', directiveFn: optionsTab}); } }