linkSrv.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. define([
  2. 'angular',
  3. 'lodash',
  4. 'app/core/utils/kbn',
  5. ],
  6. function (angular, _, kbn) {
  7. 'use strict';
  8. angular
  9. .module('grafana.services')
  10. .service('linkSrv', function(templateSrv, timeSrv) {
  11. this.getLinkUrl = function(link) {
  12. var url = templateSrv.replace(link.url || '');
  13. var params = {};
  14. if (link.keepTime) {
  15. var range = timeSrv.timeRangeForUrl();
  16. params['from'] = range.from;
  17. params['to'] = range.to;
  18. }
  19. if (link.includeVars) {
  20. templateSrv.fillVariableValuesForUrl(params);
  21. }
  22. return this.addParamsToUrl(url, params);
  23. };
  24. this.addParamsToUrl = function(url, params) {
  25. var paramsArray = [];
  26. _.each(params, function(value, key) {
  27. if (value === null) { return; }
  28. if (value === true) {
  29. paramsArray.push(key);
  30. }
  31. else if (_.isArray(value)) {
  32. _.each(value, function(instance) {
  33. paramsArray.push(key + '=' + encodeURIComponent(instance));
  34. });
  35. }
  36. else {
  37. paramsArray.push(key + '=' + encodeURIComponent(value));
  38. }
  39. });
  40. if (paramsArray.length === 0) {
  41. return url;
  42. }
  43. return this.appendToQueryString(url, paramsArray.join('&'));
  44. };
  45. this.appendToQueryString = function(url, stringToAppend) {
  46. if (!_.isUndefined(stringToAppend) && stringToAppend !== null && stringToAppend !== '') {
  47. var pos = url.indexOf('?');
  48. if (pos !== -1) {
  49. if (url.length - pos > 1) {
  50. url += '&';
  51. }
  52. } else {
  53. url += '?';
  54. }
  55. url += stringToAppend;
  56. }
  57. return url;
  58. };
  59. this.getAnchorInfo = function(link) {
  60. var info = {};
  61. info.href = this.getLinkUrl(link);
  62. info.title = templateSrv.replace(link.title || '');
  63. return info;
  64. };
  65. this.getPanelLinkAnchorInfo = function(link, scopedVars) {
  66. var info = {};
  67. if (link.type === 'absolute') {
  68. info.target = link.targetBlank ? '_blank' : '_self';
  69. info.href = templateSrv.replace(link.url || '', scopedVars);
  70. info.title = templateSrv.replace(link.title || '', scopedVars);
  71. }
  72. else if (link.dashUri) {
  73. info.href = 'dashboard/' + link.dashUri + '?';
  74. info.title = templateSrv.replace(link.title || '', scopedVars);
  75. info.target = link.targetBlank ? '_blank' : '';
  76. }
  77. else {
  78. info.title = templateSrv.replace(link.title || '', scopedVars);
  79. var slug = kbn.slugifyForUrl(link.dashboard || '');
  80. info.href = 'dashboard/db/' + slug + '?';
  81. }
  82. var params = {};
  83. if (link.keepTime) {
  84. var range = timeSrv.timeRangeForUrl();
  85. params['from'] = range.from;
  86. params['to'] = range.to;
  87. }
  88. if (link.includeVars) {
  89. templateSrv.fillVariableValuesForUrl(params, scopedVars);
  90. }
  91. info.href = this.addParamsToUrl(info.href, params);
  92. if (link.params) {
  93. info.href = this.appendToQueryString(info.href, templateSrv.replace(link.params, scopedVars));
  94. }
  95. return info;
  96. };
  97. });
  98. });