Fix url encoding, expand template vars, fix TS hacks

* moved datasource related functions to panel sub-class
* expand panel template vars for url
* added keybindings for x -> Explore
* url encoding for explore state
This commit is contained in:
David Kaltschmidt
2018-04-30 17:44:30 +02:00
parent 05b0bfafe4
commit 8a53ec610b
6 changed files with 60 additions and 26 deletions
+13 -1
View File
@@ -3,6 +3,7 @@ import _ from 'lodash';
import coreModule from 'app/core/core_module';
import appEvents from 'app/core/app_events';
import { encodePathComponent } from 'app/core/utils/location_util';
import Mousetrap from 'mousetrap';
import 'mousetrap-global-bind';
@@ -13,7 +14,7 @@ export class KeybindingSrv {
timepickerOpen = false;
/** @ngInject */
constructor(private $rootScope, private $location) {
constructor(private $rootScope, private $location, private datasourceSrv) {
// clear out all shortcuts on route change
$rootScope.$on('$routeChangeSuccess', () => {
Mousetrap.reset();
@@ -176,6 +177,17 @@ export class KeybindingSrv {
}
});
this.bind('x', async () => {
if (dashboard.meta.focusPanelId) {
const panel = dashboard.getPanelById(dashboard.meta.focusPanelId);
const datasource = await this.datasourceSrv.get(panel.datasource);
if (datasource && datasource.supportsExplore) {
const exploreState = encodePathComponent(JSON.stringify(datasource.getExploreState(panel)));
this.$location.url(`/explore/${exploreState}`);
}
}
});
// delete panel
this.bind('p r', () => {
if (dashboard.meta.focusPanelId && dashboard.meta.canEdit) {
+7 -4
View File
@@ -1,6 +1,11 @@
import config from 'app/core/config';
const _stripBaseFromUrl = url => {
// Slash encoding for angular location provider, see https://github.com/angular/angular.js/issues/10479
const SLASH = '<SLASH>';
export const decodePathComponent = (pc: string) => decodeURIComponent(pc).replace(new RegExp(SLASH, 'g'), '/');
export const encodePathComponent = (pc: string) => encodeURIComponent(pc.replace(/\//g, SLASH));
export const stripBaseFromUrl = url => {
const appSubUrl = config.appSubUrl;
const stripExtraChars = appSubUrl.endsWith('/') ? 1 : 0;
const urlWithoutBase =
@@ -9,6 +14,4 @@ const _stripBaseFromUrl = url => {
return urlWithoutBase;
};
export default {
stripBaseFromUrl: _stripBaseFromUrl,
};
export default { stripBaseFromUrl };