|
2 | 2 | @using System.Collections.Generic |
3 | 3 | @using System.Linq |
4 | 4 | @using System.Threading.Tasks |
| 5 | +@using RazorBlade |
5 | 6 | @using DiscordChatExporter.Core.Discord.Data |
6 | 7 | @using DiscordChatExporter.Core.Discord.Data.Embeds |
7 | 8 | @using DiscordChatExporter.Core.Markdown.Parsing |
|
23 | 24 | string FormatDate(DateTimeOffset instant, string format = "g") => |
24 | 25 | Context.FormatDate(instant, format); |
25 | 26 |
|
26 | | - async ValueTask<string> FormatMarkdownAsync(string markdown) => |
| 27 | + async ValueTask<IEncodedContent> FormatMarkdownAsync(string markdown) => |
27 | 28 | Context.Request.ShouldFormatMarkdown |
28 | | - ? await HtmlMarkdownVisitor.FormatAsync(Context, markdown, true, CancellationToken) |
29 | | - : markdown; |
| 29 | + ? Html.Raw(await HtmlMarkdownVisitor.FormatAsync(Context, markdown, true, CancellationToken)) |
| 30 | + : Html.Raw(Html.Encode(markdown)); |
30 | 31 |
|
31 | | - async ValueTask<string> FormatEmbedMarkdownAsync(string markdown) => |
| 32 | + async ValueTask<IEncodedContent> FormatEmbedMarkdownAsync(string markdown) => |
32 | 33 | Context.Request.ShouldFormatMarkdown |
33 | | - ? await HtmlMarkdownVisitor.FormatAsync(Context, markdown, false, CancellationToken) |
34 | | - : markdown; |
| 34 | + ? Html.Raw(await HtmlMarkdownVisitor.FormatAsync(Context, markdown, false, CancellationToken)) |
| 35 | + : Html.Raw(Html.Encode(markdown)); |
35 | 36 | } |
36 | 37 |
|
37 | 38 | <div class="chatlog__message-group"> |
|
179 | 180 | <span class="chatlog__reply-link" onclick="scrollToMessage(event, '@message.ReferencedMessage.Id')"> |
180 | 181 | @if (!string.IsNullOrWhiteSpace(message.ReferencedMessage.Content) && !message.ReferencedMessage.IsContentHidden()) |
181 | 182 | { |
182 | | - <!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(message.ReferencedMessage.Content))<!--/wmm:ignore--> |
| 183 | + <!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(message.ReferencedMessage.Content))<!--/wmm:ignore--> |
183 | 184 | } |
184 | 185 | else if (message.ReferencedMessage.Attachments.Any() || message.ReferencedMessage.Embeds.Any()) |
185 | 186 | { |
|
252 | 253 | @* Text *@ |
253 | 254 | @if (!string.IsNullOrWhiteSpace(message.Content) && !message.IsContentHidden()) |
254 | 255 | { |
255 | | - <span class="chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatMarkdownAsync(message.Content))<!--/wmm:ignore--></span> |
| 256 | + <span class="chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatMarkdownAsync(message.Content))<!--/wmm:ignore--></span> |
256 | 257 | } |
257 | 258 |
|
258 | 259 | @* Edited timestamp *@ |
|
278 | 279 | @if (!string.IsNullOrWhiteSpace(message.ForwardedMessage.Content)) |
279 | 280 | { |
280 | 281 | <div class="chatlog__forwarded-content chatlog__markdown"> |
281 | | - <span class="chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatMarkdownAsync(message.ForwardedMessage.Content))<!--/wmm:ignore--></span> |
| 282 | + <span class="chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatMarkdownAsync(message.ForwardedMessage.Content))<!--/wmm:ignore--></span> |
282 | 283 | </div> |
283 | 284 | } |
284 | 285 |
|
|
504 | 505 | @if (!string.IsNullOrWhiteSpace(embed.Url)) |
505 | 506 | { |
506 | 507 | <a class="chatlog__embed-title-link" href="@embed.Url"> |
507 | | - <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div> |
| 508 | + <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div> |
508 | 509 | </a> |
509 | 510 | } |
510 | 511 | else |
511 | 512 | { |
512 | | - <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div> |
| 513 | + <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div> |
513 | 514 | } |
514 | 515 | </div> |
515 | 516 | } |
|
543 | 544 | </div> |
544 | 545 | } |
545 | 546 | // Generic video embed |
546 | | - else if (embed.Kind == EmbedKind.Video |
| 547 | + else if (embed.Kind == EmbedKind.Video |
547 | 548 | && !string.IsNullOrWhiteSpace(embed.Url) |
548 | 549 | // Twitch clips cannot be embedded in local HTML files |
549 | 550 | && embed.TryGetTwitchClip() is null) |
|
624 | 625 | @if (!string.IsNullOrWhiteSpace(embed.Url)) |
625 | 626 | { |
626 | 627 | <a class="chatlog__embed-title-link" href="@embed.Url"> |
627 | | - <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div> |
| 628 | + <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div> |
628 | 629 | </a> |
629 | 630 | } |
630 | 631 | else |
631 | 632 | { |
632 | | - <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div> |
| 633 | + <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div> |
633 | 634 | } |
634 | 635 | </div> |
635 | 636 | } |
|
638 | 639 | @if (!string.IsNullOrWhiteSpace(embed.Description)) |
639 | 640 | { |
640 | 641 | <div class="chatlog__embed-description"> |
641 | | - <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(embed.Description))<!--/wmm:ignore--></div> |
| 642 | + <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(embed.Description))<!--/wmm:ignore--></div> |
642 | 643 | </div> |
643 | 644 | } |
644 | 645 |
|
|
652 | 653 | @if (!string.IsNullOrWhiteSpace(field.Name)) |
653 | 654 | { |
654 | 655 | <div class="chatlog__embed-field-name"> |
655 | | - <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(field.Name))<!--/wmm:ignore--></div> |
| 656 | + <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(field.Name))<!--/wmm:ignore--></div> |
656 | 657 | </div> |
657 | 658 | } |
658 | 659 |
|
659 | 660 | @if (!string.IsNullOrWhiteSpace(field.Value)) |
660 | 661 | { |
661 | 662 | <div class="chatlog__embed-field-value"> |
662 | | - <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(field.Value))<!--/wmm:ignore--></div> |
| 663 | + <div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(field.Value))<!--/wmm:ignore--></div> |
663 | 664 | </div> |
664 | 665 | } |
665 | 666 | </div> |
|
0 commit comments