MarkdownViewer.razor 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. @using Markdig
  2. <div class="relative border border-zinc-800 rounded p-4 bg-zinc-900"
  3. data-testid="@BaseTestId">
  4. @if (ShowEditButton)
  5. {
  6. <div class="absolute top-2 right-2 z-10"
  7. data-testid="@($"{BaseTestId}-edit-container")">
  8. <button class="text-xs text-blue-400 hover:text-blue-300 transition"
  9. data-testid="@($"{BaseTestId}-edit-button")"
  10. @onclick="HandleEdit">
  11. @(string.IsNullOrWhiteSpace(Value) ? "Add" : "Edit")
  12. </button>
  13. </div>
  14. }
  15. @if (string.IsNullOrWhiteSpace(Value))
  16. {
  17. <div class="text-sm text-zinc-500 italic"
  18. data-testid="@($"{BaseTestId}-empty")">
  19. No notes
  20. </div>
  21. }
  22. else
  23. {
  24. <div class="markdown text-sm"
  25. data-testid="@($"{BaseTestId}-content")">
  26. @((MarkupString)_html)
  27. </div>
  28. }
  29. </div>
  30. @code {
  31. [Parameter] public string? Value { get; set; }
  32. [Parameter] public bool ShowEditButton { get; set; }
  33. [Parameter] public EventCallback OnEdit { get; set; }
  34. [Parameter] public string? TestIdPrefix { get; set; }
  35. private string BaseTestId =>
  36. string.IsNullOrWhiteSpace(TestIdPrefix)
  37. ? "markdown-viewer"
  38. : $"{TestIdPrefix}-markdown-viewer";
  39. private string _html = string.Empty;
  40. private static readonly MarkdownPipeline Pipeline =
  41. new MarkdownPipelineBuilder()
  42. .UseAdvancedExtensions()
  43. .Build();
  44. protected override void OnParametersSet()
  45. {
  46. _html = Markdown.ToHtml(Value ?? string.Empty, Pipeline);
  47. }
  48. private Task HandleEdit()
  49. {
  50. return OnEdit.HasDelegate
  51. ? OnEdit.InvokeAsync()
  52. : Task.CompletedTask;
  53. }
  54. }