module.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. define([
  2. 'angular',
  3. 'app/app',
  4. 'lodash',
  5. 'require',
  6. 'app/features/panel/panel_meta',
  7. ],
  8. function (angular, app, _, require, PanelMeta) {
  9. 'use strict';
  10. var converter;
  11. var module = angular.module('grafana.panels.text', []);
  12. app.useModule(module);
  13. module.directive('grafanaPanelText', function() {
  14. return {
  15. controller: 'TextPanelCtrl',
  16. templateUrl: 'app/plugins/panels/text/module.html',
  17. };
  18. });
  19. module.controller('TextPanelCtrl', function($scope, templateSrv, $sce, panelSrv) {
  20. $scope.panelMeta = new PanelMeta({
  21. panelName: 'Text',
  22. editIcon: "fa fa-text-width",
  23. fullscreen: true,
  24. });
  25. $scope.panelMeta.addEditorTab('Edit text', 'app/plugins/panels/text/editor.html');
  26. // Set and populate defaults
  27. var _d = {
  28. title : 'default title',
  29. mode : "markdown", // 'html', 'markdown', 'text'
  30. content : "",
  31. style: {},
  32. };
  33. _.defaults($scope.panel, _d);
  34. $scope.init = function() {
  35. panelSrv.init($scope);
  36. $scope.ready = false;
  37. $scope.render();
  38. };
  39. $scope.refreshData = function() {
  40. $scope.panelMeta.loading = false;
  41. $scope.render();
  42. };
  43. $scope.render = function() {
  44. if ($scope.panel.mode === 'markdown') {
  45. $scope.renderMarkdown($scope.panel.content);
  46. }
  47. else if ($scope.panel.mode === 'html') {
  48. $scope.updateContent($scope.panel.content);
  49. }
  50. else if ($scope.panel.mode === 'text') {
  51. $scope.renderText($scope.panel.content);
  52. }
  53. $scope.panelRenderingComplete();
  54. };
  55. $scope.renderText = function(content) {
  56. content = content
  57. .replace(/&/g, '&')
  58. .replace(/>/g, '>')
  59. .replace(/</g, '&lt;')
  60. .replace(/\n/g, '<br/>');
  61. $scope.updateContent(content);
  62. };
  63. $scope.renderMarkdown = function(content) {
  64. var text = content
  65. .replace(/&/g, '&amp;')
  66. .replace(/>/g, '&gt;')
  67. .replace(/</g, '&lt;');
  68. if (converter) {
  69. $scope.updateContent(converter.makeHtml(text));
  70. }
  71. else {
  72. require(['vendor/showdown'], function (Showdown) {
  73. converter = new Showdown.converter();
  74. $scope.updateContent(converter.makeHtml(text));
  75. });
  76. }
  77. };
  78. $scope.updateContent = function(html) {
  79. try {
  80. $scope.content = $sce.trustAsHtml(templateSrv.replace(html, $scope.panel.scopedVars));
  81. } catch(e) {
  82. console.log('Text panel error: ', e);
  83. $scope.content = $sce.trustAsHtml(html);
  84. }
  85. if(!$scope.$$phase) {
  86. $scope.$digest();
  87. }
  88. };
  89. $scope.openEditor = function() {
  90. };
  91. $scope.init();
  92. });
  93. });