mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
120 lines
3.0 KiB
TypeScript
120 lines
3.0 KiB
TypeScript
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);
|