mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Merge branch 'linkSrv-js-to-ts'
This commit is contained in:
commit
9aa6a6b4c4
@ -2,7 +2,7 @@ import {describe, beforeEach, it, expect, sinon, angularMocks} from 'test/lib/co
|
|||||||
import helpers from 'test/specs/helpers';
|
import helpers from 'test/specs/helpers';
|
||||||
import '../shareModalCtrl';
|
import '../shareModalCtrl';
|
||||||
import config from 'app/core/config';
|
import config from 'app/core/config';
|
||||||
import 'app/features/panellinks/linkSrv';
|
import 'app/features/panellinks/link_srv';
|
||||||
|
|
||||||
describe('ShareModalCtrl', function() {
|
describe('ShareModalCtrl', function() {
|
||||||
var ctx = new helpers.ControllerTestContext();
|
var ctx = new helpers.ControllerTestContext();
|
||||||
|
@ -1,118 +0,0 @@
|
|||||||
define([
|
|
||||||
'angular',
|
|
||||||
'lodash',
|
|
||||||
'app/core/utils/kbn',
|
|
||||||
],
|
|
||||||
function (angular, _, kbn) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
kbn = kbn.default;
|
|
||||||
|
|
||||||
angular
|
|
||||||
.module('grafana.services')
|
|
||||||
.service('linkSrv', function(templateSrv, timeSrv) {
|
|
||||||
|
|
||||||
this.getLinkUrl = function(link) {
|
|
||||||
var url = templateSrv.replace(link.url || '');
|
|
||||||
var params = {};
|
|
||||||
|
|
||||||
if (link.keepTime) {
|
|
||||||
var range = timeSrv.timeRangeForUrl();
|
|
||||||
params['from'] = range.from;
|
|
||||||
params['to'] = range.to;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (link.includeVars) {
|
|
||||||
templateSrv.fillVariableValuesForUrl(params);
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.addParamsToUrl(url, params);
|
|
||||||
};
|
|
||||||
|
|
||||||
this.addParamsToUrl = function(url, params) {
|
|
||||||
var paramsArray = [];
|
|
||||||
_.each(params, function(value, key) {
|
|
||||||
if (value === null) { return; }
|
|
||||||
if (value === true) {
|
|
||||||
paramsArray.push(key);
|
|
||||||
}
|
|
||||||
else if (_.isArray(value)) {
|
|
||||||
_.each(value, function(instance) {
|
|
||||||
paramsArray.push(key + '=' + encodeURIComponent(instance));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
paramsArray.push(key + '=' + encodeURIComponent(value));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (paramsArray.length === 0) {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.appendToQueryString(url, paramsArray.join('&'));
|
|
||||||
};
|
|
||||||
|
|
||||||
this.appendToQueryString = function(url, stringToAppend) {
|
|
||||||
if (!_.isUndefined(stringToAppend) && stringToAppend !== null && stringToAppend !== '') {
|
|
||||||
var pos = url.indexOf('?');
|
|
||||||
if (pos !== -1) {
|
|
||||||
if (url.length - pos > 1) {
|
|
||||||
url += '&';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
url += '?';
|
|
||||||
}
|
|
||||||
url += stringToAppend;
|
|
||||||
}
|
|
||||||
return url;
|
|
||||||
};
|
|
||||||
|
|
||||||
this.getAnchorInfo = function(link) {
|
|
||||||
var info = {};
|
|
||||||
info.href = this.getLinkUrl(link);
|
|
||||||
info.title = templateSrv.replace(link.title || '');
|
|
||||||
return info;
|
|
||||||
};
|
|
||||||
|
|
||||||
this.getPanelLinkAnchorInfo = function(link, scopedVars) {
|
|
||||||
var info = {};
|
|
||||||
if (link.type === 'absolute') {
|
|
||||||
info.target = link.targetBlank ? '_blank' : '_self';
|
|
||||||
info.href = templateSrv.replace(link.url || '', scopedVars);
|
|
||||||
info.title = templateSrv.replace(link.title || '', scopedVars);
|
|
||||||
}
|
|
||||||
else if (link.dashUri) {
|
|
||||||
info.href = 'dashboard/' + link.dashUri + '?';
|
|
||||||
info.title = templateSrv.replace(link.title || '', scopedVars);
|
|
||||||
info.target = link.targetBlank ? '_blank' : '';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
info.title = templateSrv.replace(link.title || '', scopedVars);
|
|
||||||
var slug = kbn.slugifyForUrl(link.dashboard || '');
|
|
||||||
info.href = 'dashboard/db/' + slug + '?';
|
|
||||||
}
|
|
||||||
|
|
||||||
var params = {};
|
|
||||||
|
|
||||||
if (link.keepTime) {
|
|
||||||
var range = timeSrv.timeRangeForUrl();
|
|
||||||
params['from'] = range.from;
|
|
||||||
params['to'] = range.to;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (link.includeVars) {
|
|
||||||
templateSrv.fillVariableValuesForUrl(params, scopedVars);
|
|
||||||
}
|
|
||||||
|
|
||||||
info.href = this.addParamsToUrl(info.href, params);
|
|
||||||
|
|
||||||
if (link.params) {
|
|
||||||
info.href = this.appendToQueryString(info.href, templateSrv.replace(link.params, scopedVars));
|
|
||||||
}
|
|
||||||
|
|
||||||
return info;
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
113
public/app/features/panellinks/link_srv.ts
Normal file
113
public/app/features/panellinks/link_srv.ts
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
import angular from 'angular';
|
||||||
|
import _ from 'lodash';
|
||||||
|
import kbn from 'app/core/utils/kbn';
|
||||||
|
|
||||||
|
export class LinkSrv {
|
||||||
|
|
||||||
|
/** @ngInject */
|
||||||
|
constructor(private templateSrv, private timeSrv) {}
|
||||||
|
|
||||||
|
getLinkUrl(link) {
|
||||||
|
var url = this.templateSrv.replace(link.url || '');
|
||||||
|
var params = {};
|
||||||
|
|
||||||
|
if (link.keepTime) {
|
||||||
|
var range = this.timeSrv.timeRangeForUrl();
|
||||||
|
params['from'] = range.from;
|
||||||
|
params['to'] = range.to;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (link.includeVars) {
|
||||||
|
this.templateSrv.fillVariableValuesForUrl(params);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.addParamsToUrl(url, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
addParamsToUrl(url, params) {
|
||||||
|
var paramsArray = [];
|
||||||
|
|
||||||
|
_.each(params, function(value, key) {
|
||||||
|
if (value === null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (value === true) {
|
||||||
|
paramsArray.push(key);
|
||||||
|
} else if (_.isArray(value)) {
|
||||||
|
_.each(value, function(instance) {
|
||||||
|
paramsArray.push(key + '=' + encodeURIComponent(instance));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
paramsArray.push(key + '=' + encodeURIComponent(value));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (paramsArray.length === 0) {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.appendToQueryString(url, paramsArray.join('&'));
|
||||||
|
}
|
||||||
|
|
||||||
|
appendToQueryString(url, stringToAppend) {
|
||||||
|
if (!_.isUndefined(stringToAppend) && stringToAppend !== null && stringToAppend !== '') {
|
||||||
|
var pos = url.indexOf('?');
|
||||||
|
if (pos !== -1) {
|
||||||
|
if (url.length - pos > 1) {
|
||||||
|
url += '&';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
url += '?';
|
||||||
|
}
|
||||||
|
url += stringToAppend;
|
||||||
|
}
|
||||||
|
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
getAnchorInfo(link) {
|
||||||
|
var info: any = {};
|
||||||
|
info.href = this.getLinkUrl(link);
|
||||||
|
info.title = this.templateSrv.replace(link.title || '');
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
getPanelLinkAnchorInfo(link, scopedVars) {
|
||||||
|
var info: any = {};
|
||||||
|
if (link.type === 'absolute') {
|
||||||
|
info.target = link.targetBlank ? '_blank' : '_self';
|
||||||
|
info.href = this.templateSrv.replace(link.url || '', scopedVars);
|
||||||
|
info.title = this.templateSrv.replace(link.title || '', scopedVars);
|
||||||
|
} else if (link.dashUri) {
|
||||||
|
info.href = 'dashboard/' + link.dashUri + '?';
|
||||||
|
info.title = this.templateSrv.replace(link.title || '', scopedVars);
|
||||||
|
info.target = link.targetBlank ? '_blank' : '';
|
||||||
|
} else {
|
||||||
|
info.title = this.templateSrv.replace(link.title || '', scopedVars);
|
||||||
|
var slug = kbn.slugifyForUrl(link.dashboard || '');
|
||||||
|
info.href = 'dashboard/db/' + slug + '?';
|
||||||
|
}
|
||||||
|
|
||||||
|
var params = {};
|
||||||
|
|
||||||
|
if (link.keepTime) {
|
||||||
|
var range = this.timeSrv.timeRangeForUrl();
|
||||||
|
params['from'] = range.from;
|
||||||
|
params['to'] = range.to;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (link.includeVars) {
|
||||||
|
this.templateSrv.fillVariableValuesForUrl(params, scopedVars);
|
||||||
|
}
|
||||||
|
|
||||||
|
info.href = this.addParamsToUrl(info.href, params);
|
||||||
|
|
||||||
|
if (link.params) {
|
||||||
|
info.href = this.appendToQueryString(info.href, this.templateSrv.replace(link.params, scopedVars));
|
||||||
|
}
|
||||||
|
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
angular.module('grafana.services').service('linkSrv', LinkSrv);
|
@ -1,7 +1,7 @@
|
|||||||
define([
|
define([
|
||||||
'angular',
|
'angular',
|
||||||
'lodash',
|
'lodash',
|
||||||
'./linkSrv',
|
'./link_srv',
|
||||||
],
|
],
|
||||||
function (angular, _) {
|
function (angular, _) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -1,46 +0,0 @@
|
|||||||
import {describe, beforeEach, it, expect, angularMocks} from 'test/lib/common';
|
|
||||||
import 'app/features/panellinks/linkSrv';
|
|
||||||
import _ from 'lodash';
|
|
||||||
|
|
||||||
describe('linkSrv', function() {
|
|
||||||
var _linkSrv;
|
|
||||||
|
|
||||||
beforeEach(angularMocks.module('grafana.core'));
|
|
||||||
beforeEach(angularMocks.module('grafana.services'));
|
|
||||||
|
|
||||||
beforeEach(angularMocks.inject(function(linkSrv) {
|
|
||||||
_linkSrv = linkSrv;
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe('when appending query strings', function() {
|
|
||||||
|
|
||||||
it('add ? to URL if not present', function() {
|
|
||||||
var url = _linkSrv.appendToQueryString('http://example.com', 'foo=bar');
|
|
||||||
expect(url).to.be('http://example.com?foo=bar');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('do not add & to URL if ? is present but query string is empty', function() {
|
|
||||||
var url = _linkSrv.appendToQueryString('http://example.com?', 'foo=bar');
|
|
||||||
expect(url).to.be('http://example.com?foo=bar');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('add & to URL if query string is present', function() {
|
|
||||||
var url = _linkSrv.appendToQueryString('http://example.com?foo=bar', 'hello=world');
|
|
||||||
expect(url).to.be('http://example.com?foo=bar&hello=world');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('do not change the URL if there is nothing to append', function() {
|
|
||||||
_.each(['', undefined, null], function(toAppend) {
|
|
||||||
var url1 = _linkSrv.appendToQueryString('http://example.com', toAppend);
|
|
||||||
expect(url1).to.be('http://example.com');
|
|
||||||
|
|
||||||
var url2 = _linkSrv.appendToQueryString('http://example.com?', toAppend);
|
|
||||||
expect(url2).to.be('http://example.com?');
|
|
||||||
|
|
||||||
var url3 = _linkSrv.appendToQueryString('http://example.com?foo=bar', toAppend);
|
|
||||||
expect(url3).to.be('http://example.com?foo=bar');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
@ -2,7 +2,7 @@ import _ from 'lodash';
|
|||||||
import $ from 'jquery';
|
import $ from 'jquery';
|
||||||
import 'vendor/flot/jquery.flot';
|
import 'vendor/flot/jquery.flot';
|
||||||
import 'vendor/flot/jquery.flot.gauge';
|
import 'vendor/flot/jquery.flot.gauge';
|
||||||
import 'app/features/panellinks/linkSrv';
|
import 'app/features/panellinks/link_srv';
|
||||||
|
|
||||||
import kbn from 'app/core/utils/kbn';
|
import kbn from 'app/core/utils/kbn';
|
||||||
import config from 'app/core/config';
|
import config from 'app/core/config';
|
||||||
|
Loading…
Reference in New Issue
Block a user