MarkdownViewer.razor 1.2 KB

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