module.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. ///<reference path="../../../headers/common.d.ts" />
  2. import _ from 'lodash';
  3. import {PanelDirective, PanelCtrl} from '../../../features/panel/panel';
  4. function optionsEditorTab() {
  5. return {templateUrl: 'public/app/plugins/panel/text/editor.html'};
  6. }
  7. // Set and populate defaults
  8. var panelDefaults = {
  9. mode : "markdown", // 'html', 'markdown', 'text'
  10. content : "# title",
  11. };
  12. export class TextPanelCtrl extends PanelCtrl {
  13. converter: any;
  14. content: string;
  15. /** @ngInject */
  16. constructor($scope, private templateSrv, private $sce) {
  17. super($scope);
  18. _.defaults(this.panel, panelDefaults);
  19. this.render();
  20. }
  21. initEditorTabs() {
  22. super.initEditorTabs();
  23. this.editorTabs.push({title: 'Options', directiveFn: optionsEditorTab});
  24. }
  25. render() {
  26. if (this.panel.mode === 'markdown') {
  27. this.renderMarkdown(this.panel.content);
  28. } else if (this.panel.mode === 'html') {
  29. this.updateContent(this.panel.content);
  30. } else if (this.panel.mode === 'text') {
  31. this.renderText(this.panel.content);
  32. }
  33. // this.panelRenderingComplete();
  34. }
  35. refreshData() {
  36. this.render();
  37. }
  38. renderText(content) {
  39. content = content
  40. .replace(/&/g, '&amp;')
  41. .replace(/>/g, '&gt;')
  42. .replace(/</g, '&lt;')
  43. .replace(/\n/g, '<br/>');
  44. this.updateContent(content);
  45. }
  46. renderMarkdown(content) {
  47. var text = content
  48. .replace(/&/g, '&amp;')
  49. .replace(/>/g, '&gt;')
  50. .replace(/</g, '&lt;');
  51. if (this.converter) {
  52. this.updateContent(this.converter.makeHtml(text));
  53. } else {
  54. System.import('vendor/showdown').then(Showdown => {
  55. this.converter = new Showdown.converter();
  56. this.updateContent(this.converter.makeHtml(text));
  57. });
  58. }
  59. }
  60. updateContent(html) {
  61. try {
  62. this.content = this.$sce.trustAsHtml(this.templateSrv.replace(html, this.panel.scopedVars));
  63. } catch (e) {
  64. console.log('Text panel error: ', e);
  65. this.content = this.$sce.trustAsHtml(html);
  66. }
  67. if (!this.$scope.$$phase) {
  68. this.$scope.$digest();
  69. }
  70. }
  71. }
  72. class TextPanel extends PanelDirective {
  73. templateUrl = `app/plugins/panel/text/module.html`;
  74. controller = TextPanelCtrl;
  75. }
  76. export {TextPanel as Panel}