linkSrv.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. define([
  2. 'angular',
  3. 'kbn',
  4. 'lodash',
  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. url += (url.indexOf('?') !== -1 ? '&' : '?');
  44. return url + paramsArray.join('&');
  45. };
  46. this.getAnchorInfo = function(link) {
  47. var info = {};
  48. info.href = this.getLinkUrl(link);
  49. info.title = templateSrv.replace(link.title || '');
  50. return info;
  51. };
  52. this.getPanelLinkAnchorInfo = function(link, scopedVars) {
  53. var info = {};
  54. if (link.type === 'absolute') {
  55. info.target = link.targetBlank ? '_blank' : '_self';
  56. info.href = templateSrv.replace(link.url || '', scopedVars);
  57. info.title = templateSrv.replace(link.title || '', scopedVars);
  58. info.href += '?';
  59. }
  60. else if (link.dashUri) {
  61. info.href = 'dashboard/' + link.dashUri + '?';
  62. info.title = templateSrv.replace(link.title || '', scopedVars);
  63. info.target = link.targetBlank ? '_blank' : '';
  64. }
  65. else {
  66. info.title = templateSrv.replace(link.title || '', scopedVars);
  67. var slug = kbn.slugifyForUrl(link.dashboard || '');
  68. info.href = 'dashboard/db/' + slug + '?';
  69. }
  70. var params = {};
  71. if (link.keepTime) {
  72. var range = timeSrv.timeRangeForUrl();
  73. params['from'] = range.from;
  74. params['to'] = range.to;
  75. }
  76. if (link.includeVars) {
  77. templateSrv.fillVariableValuesForUrl(params, scopedVars);
  78. }
  79. info.href = this.addParamsToUrl(info.href, params);
  80. if (link.params) {
  81. info.href += "&" + templateSrv.replace(link.params, scopedVars);
  82. }
  83. return info;
  84. };
  85. });
  86. });