linkSrv.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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) {
  53. var info = {};
  54. if (link.type === 'absolute') {
  55. info.target = '_blank';
  56. info.href = templateSrv.replace(link.url || '');
  57. info.title = templateSrv.replace(link.title || '');
  58. info.href += '?';
  59. }
  60. else {
  61. info.title = templateSrv.replace(link.title || '');
  62. var slug = kbn.slugifyForUrl(link.dashboard || '');
  63. info.href = 'dashboard/db/' + slug + '?';
  64. }
  65. var range = timeSrv.timeRangeForUrl();
  66. info.href += 'from=' + range.from;
  67. info.href += '&to=' + range.to;
  68. if (link.params) {
  69. info.href += "&" + templateSrv.replace(link.params);
  70. }
  71. return info;
  72. };
  73. });
  74. });