mirror of https://github.com/grafana/grafana
parent
c91a1e994b
commit
2dd49e6e50
@ -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; |
||||
}; |
||||
|
||||
}); |
||||
}); |
@ -0,0 +1,114 @@ |
||||
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); |
||||
(<any>info).title = this.templateSrv.replace(link.title || ''); |
||||
return info; |
||||
} |
||||
|
||||
getPanelLinkAnchorInfo(link, scopedVars) { |
||||
var info = {}; |
||||
if (link.type === 'absolute') { |
||||
(<any>info).target = link.targetBlank ? '_blank' : '_self'; |
||||
(<any>info).href = this.templateSrv.replace(link.url || '', scopedVars); |
||||
(<any>info).title = this.templateSrv.replace(link.title || '', scopedVars); |
||||
} else if (link.dashUri) { |
||||
(<any>info).href = 'dashboard/' + link.dashUri + '?'; |
||||
(<any>info).title = this.templateSrv.replace(link.title || '', scopedVars); |
||||
(<any>info).target = link.targetBlank ? '_blank' : ''; |
||||
} else { |
||||
(<any>info).title = this.templateSrv.replace(link.title || '', scopedVars); |
||||
var slug = kbn.slugifyForUrl(link.dashboard || ''); |
||||
(<any>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); |
||||
} |
||||
|
||||
(<any>info).href = this.addParamsToUrl((<any>info).href, params); |
||||
|
||||
if (link.params) { |
||||
(<any>info).href = this.appendToQueryString((<any>info).href, this.templateSrv.replace(link.params, scopedVars)); |
||||
} |
||||
|
||||
return info; |
||||
} |
||||
|
||||
} |
||||
|
||||
angular.module('grafana.services').service('linkSrv', LinkSrv); |
Loading…
Reference in new issue