module.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. define([
  2. 'angular',
  3. 'app',
  4. 'lodash',
  5. 'require',
  6. ],
  7. function (angular, app, _, require) {
  8. 'use strict';
  9. var module = angular.module('grafana.panels.text', []);
  10. app.useModule(module);
  11. var converter;
  12. module.controller('text', function($scope, templateSrv, $sce, panelSrv) {
  13. $scope.panelMeta = {
  14. description : "A static text panel that can use plain text, markdown, or (sanitized) HTML"
  15. };
  16. // Set and populate defaults
  17. var _d = {
  18. title: 'default title',
  19. mode : "markdown", // 'html', 'markdown', 'text'
  20. content : "",
  21. style: {},
  22. };
  23. _.defaults($scope.panel, _d);
  24. $scope.init = function() {
  25. panelSrv.init(this);
  26. $scope.ready = false;
  27. $scope.$on('refresh', $scope.render);
  28. $scope.render();
  29. };
  30. $scope.render = function() {
  31. if ($scope.panel.mode === 'markdown') {
  32. $scope.renderMarkdown($scope.panel.content);
  33. }
  34. else if ($scope.panel.mode === 'html') {
  35. $scope.updateContent($scope.panel.content);
  36. }
  37. else if ($scope.panel.mode === 'text') {
  38. $scope.renderText($scope.panel.content);
  39. }
  40. };
  41. $scope.renderText = function(content) {
  42. content = content
  43. .replace(/&/g, '&')
  44. .replace(/>/g, '>')
  45. .replace(/</g, '&lt;')
  46. .replace(/\n/g, '<br/>');
  47. $scope.updateContent(content);
  48. };
  49. $scope.renderMarkdown = function(content) {
  50. var text = content
  51. .replace(/&/g, '&amp;')
  52. .replace(/>/g, '&gt;')
  53. .replace(/</g, '&lt;');
  54. if (converter) {
  55. $scope.updateContent(converter.makeHtml(text));
  56. }
  57. else {
  58. require(['./lib/showdown'], function (Showdown) {
  59. converter = new Showdown.converter();
  60. $scope.updateContent(converter.makeHtml(text));
  61. });
  62. }
  63. };
  64. $scope.updateContent = function(html) {
  65. try {
  66. $scope.content = $sce.trustAsHtml(templateSrv.replace(html));
  67. } catch(e) {
  68. console.log('Text panel error: ', e);
  69. $scope.content = $sce.trustAsHtml(html);
  70. }
  71. if(!$scope.$$phase) {
  72. $scope.$digest();
  73. }
  74. };
  75. $scope.openEditor = function() {
  76. };
  77. $scope.init();
  78. });
  79. });