module.js 2.6 KB

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