mirror of
https://github.com/Tyrrrz/DiscordChatExporter.git
synced 2026-02-14 15:53:30 -07:00
Improve the templates a bit
This commit is contained in:
parent
4fbec95208
commit
25207c5093
|
|
@ -2,208 +2,214 @@
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>{{ Guild.Name | HtmlEncode }} - {{ Channel.Name | HtmlEncode }}</title>
|
<title>{{ Guild.Name | html.escape }} - {{ Channel.Name | html.escape }}</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<style>{{ StyleSheet }}</style>
|
<style>
|
||||||
|
{{ StyleSheet }}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
{{~ # Info }}
|
{{~ # Info ~}}
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<div class="info__guild-icon-container">
|
<div class="info__guild-icon-container">
|
||||||
<img class="info__guild-icon" src="{{ Guild.IconUrl }}" />
|
<img class="info__guild-icon" src="{{ Guild.IconUrl }}" />
|
||||||
</div>
|
</div>
|
||||||
<div class="info__metadata">
|
<div class="info__metadata">
|
||||||
<div class="info__guild-name">{{ Guild.Name | HtmlEncode }}</div>
|
<div class="info__guild-name">{{ Guild.Name | html.escape }}</div>
|
||||||
<div class="info__channel-name">{{ Channel.Name | HtmlEncode }}</div>
|
<div class="info__channel-name">{{ Channel.Name | html.escape }}</div>
|
||||||
|
|
||||||
{{ if Channel.Topic }}
|
{{~ if Channel.Topic ~}}
|
||||||
<div class="info__channel-topic">{{ Channel.Topic | HtmlEncode }}</div>
|
<div class="info__channel-topic">{{ Channel.Topic | html.escape }}</div>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
|
|
||||||
<div class="info__channel-message-count">{{ TotalMessageCount | Format "N0" }} messages</div>
|
<div class="info__channel-message-count">{{ TotalMessageCount | Format "N0" }} messages</div>
|
||||||
|
|
||||||
{{ if From || To }}
|
{{~ if From || To ~}}
|
||||||
<div class="info__channel-date-range">
|
<div class="info__channel-date-range">
|
||||||
{{ if From && To }}
|
{{~ if From && To ~}}
|
||||||
Between {{ From | FormatDate | HtmlEncode }} and {{ To | FormatDate | HtmlEncode }}
|
Between {{ From | FormatDate | html.escape }} and {{ To | FormatDate | html.escape }}
|
||||||
{{ else if From }}
|
{{~ else if From ~}}
|
||||||
After {{ From | FormatDate | HtmlEncode }}
|
After {{ From | FormatDate | html.escape }}
|
||||||
{{ else if To }}
|
{{~ else if To ~}}
|
||||||
Before {{ To | FormatDate | HtmlEncode }}
|
Before {{ To | FormatDate | html.escape }}
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{~ # Log }}
|
{{~ # Log ~}}
|
||||||
<div class="chatlog">
|
<div class="chatlog">
|
||||||
{{ for group in MessageGroups }}
|
{{~ for group in MessageGroups ~}}
|
||||||
<div class="chatlog__message-group">
|
<div class="chatlog__message-group">
|
||||||
{{~ # Avatar }}
|
{{~ # Avatar ~}}
|
||||||
<div class="chatlog__author-avatar-container">
|
<div class="chatlog__author-avatar-container">
|
||||||
<img class="chatlog__author-avatar" src="{{ group.Author.AvatarUrl }}" />
|
<img class="chatlog__author-avatar" src="{{ group.Author.AvatarUrl }}" />
|
||||||
</div>
|
</div>
|
||||||
<div class="chatlog__messages">
|
<div class="chatlog__messages">
|
||||||
{{~ # Author name and timestamp }}
|
{{~ # Author name and timestamp ~}}
|
||||||
<span class="chatlog__author-name" title="{{ group.Author.FullName | HtmlEncode }}">{{ group.Author.Name | HtmlEncode }}</span>
|
<span class="chatlog__author-name" title="{{ group.Author.FullName | html.escape }}">{{ group.Author.Name | html.escape }}</span>
|
||||||
<span class="chatlog__timestamp">{{ group.Timestamp | FormatDate | HtmlEncode }}</span>
|
<span class="chatlog__timestamp">{{ group.Timestamp | FormatDate | html.escape }}</span>
|
||||||
|
|
||||||
{{~ # Messages }}
|
{{~ # Messages ~}}
|
||||||
{{ for message in group.Messages }}
|
{{~ for message in group.Messages ~}}
|
||||||
{{~ # Content }}
|
{{~ # Content ~}}
|
||||||
{{ if message.Content }}
|
{{~ if message.Content ~}}
|
||||||
<div class="chatlog__content">
|
<div class="chatlog__content">
|
||||||
{{ message.Content | FormatContent }}
|
{{ message.Content | FormatContent }}
|
||||||
|
|
||||||
{{~ # Edited timestamp }}
|
{{~ # Edited timestamp ~}}
|
||||||
{{ if message.EditedTimestamp }}
|
{{~ if message.EditedTimestamp ~}}
|
||||||
<span class="chatlog__edited-timestamp" title="{{ message.EditedTimestamp | FormatDate | HtmlEncode }}">(edited)</span>
|
<span class="chatlog__edited-timestamp" title="{{ message.EditedTimestamp | FormatDate | html.escape }}">(edited)</span>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
|
|
||||||
{{~ # Attachments }}
|
{{~ # Attachments ~}}
|
||||||
{{ for attachment in message.Attachments }}
|
{{~ for attachment in message.Attachments ~}}
|
||||||
<div class="chatlog__attachment">
|
<div class="chatlog__attachment">
|
||||||
<a href="{{ attachment.Url }}">
|
<a href="{{ attachment.Url }}">
|
||||||
{{~ # Image }}
|
{{ # Image }}
|
||||||
{{ if attachment.IsImage }}
|
{{~ if attachment.IsImage ~}}
|
||||||
<img class="chatlog__attachment-thumbnail" src="{{ attachment.Url }}" />
|
<img class="chatlog__attachment-thumbnail" src="{{ attachment.Url }}" />
|
||||||
{{~ # Non-image }}
|
{{~ # Non-image ~}}
|
||||||
{{ else }}
|
{{~ else ~}}
|
||||||
Attachment: {{ attachment.FileName }} ({{ attachment.FileSize | FormatFileSize }})
|
Attachment: {{ attachment.FileName }} ({{ attachment.FileSize | FormatFileSize }})
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
|
|
||||||
{{~ # Embeds }}
|
{{~ # Embeds ~}}
|
||||||
{{ for embed in message.Embeds }}
|
{{~ for embed in message.Embeds ~}}
|
||||||
<div class="chatlog__embed">
|
<div class="chatlog__embed">
|
||||||
<div class="chatlog__embed-color-pill" style="background-color: rgba({{ embed.Color | FormatColor }})"></div>
|
<div class="chatlog__embed-color-pill" style="background-color: rgba({{ embed.Color | FormatColor }})"></div>
|
||||||
<div class="chatlog__embed-content-container">
|
<div class="chatlog__embed-content-container">
|
||||||
<div class="chatlog__embed-content">
|
<div class="chatlog__embed-content">
|
||||||
<div class="chatlog__embed-text">
|
<div class="chatlog__embed-text">
|
||||||
{{~ # Author }}
|
{{~ # Author ~}}
|
||||||
{{ if embed.Author }}
|
{{~ if embed.Author ~}}
|
||||||
<div class="chatlog__embed-author">
|
<div class="chatlog__embed-author">
|
||||||
{{ if embed.Author.IconUrl }}
|
{{~ if embed.Author.IconUrl ~}}
|
||||||
<img class="chatlog__embed-author-icon" src="{{ embed.Author.IconUrl }}" />
|
<img class="chatlog__embed-author-icon" src="{{ embed.Author.IconUrl }}" />
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
|
|
||||||
{{ if embed.Author.Name }}
|
{{~ if embed.Author.Name ~}}
|
||||||
<span class="chatlog__embed-author-name">
|
<span class="chatlog__embed-author-name">
|
||||||
{{ if embed.Author.Url }}
|
{{~ if embed.Author.Url ~}}
|
||||||
<a class="chatlog__embed-author-name-link" href="{{ embed.Author.Url }}">{{ embed.Author.Name | HtmlEncode }}</a>
|
<a class="chatlog__embed-author-name-link" href="{{ embed.Author.Url }}">{{ embed.Author.Name | html.escape }}</a>
|
||||||
{{ else }}
|
{{~ else ~}}
|
||||||
{{ embed.Author.Name | HtmlEncode }}
|
{{ embed.Author.Name | html.escape }}
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
</span>
|
</span>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
|
|
||||||
{{~ # Title }}
|
{{~ # Title ~}}
|
||||||
{{ if embed.Title }}
|
{{~ if embed.Title ~}}
|
||||||
<div class="chatlog__embed-title">
|
<div class="chatlog__embed-title">
|
||||||
{{ if embed.Url }}
|
{{~ if embed.Url ~}}
|
||||||
<a class="chatlog__embed-title-link" href="{{ embed.Url }}">{{ embed.Title | FormatContent }}</a>
|
<a class="chatlog__embed-title-link" href="{{ embed.Url }}">{{ embed.Title | FormatContent }}</a>
|
||||||
{{ else }}
|
{{~ else ~}}
|
||||||
{{ embed.Title | FormatContent }}
|
{{ embed.Title | FormatContent }}
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
|
|
||||||
{{~ # Description }}
|
{{~ # Description ~}}
|
||||||
{{ if embed.Description }}
|
{{~ if embed.Description ~}}
|
||||||
<div class="chatlog__embed-description">{{ embed.Description | FormatContent true }}</div>
|
<div class="chatlog__embed-description">{{ embed.Description | FormatContent true }}</div>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
|
|
||||||
{{~ # Fields }}
|
{{~ # Fields ~}}
|
||||||
<div class="chatlog__embed-fields">
|
{{~ if embed.Fields | array.size > 0 ~}}
|
||||||
{{ for field in embed.Fields }}
|
<div class="chatlog__embed-fields">
|
||||||
<div class="chatlog__embed-field {{ if field.IsInline }} chatlog__embed-field--inline {{ end }}">
|
{{~ for field in embed.Fields ~}}
|
||||||
{{ if field.Name }}
|
<div class="chatlog__embed-field {{ if field.IsInline }} chatlog__embed-field--inline {{ end }}">
|
||||||
<div class="chatlog__embed-field-name">{{ field.Name | FormatContent }}</div>
|
{{~ if field.Name ~}}
|
||||||
{{ end }}
|
<div class="chatlog__embed-field-name">{{ field.Name | FormatContent }}</div>
|
||||||
{{ if field.Value }}
|
{{~ end ~}}
|
||||||
<div class="chatlog__embed-field-value">{{ field.Value | FormatContent true }}</div>
|
{{~ if field.Value ~}}
|
||||||
{{ end }}
|
<div class="chatlog__embed-field-value">{{ field.Value | FormatContent true }}</div>
|
||||||
</div>
|
{{~ end ~}}
|
||||||
{{ end }}
|
</div>
|
||||||
</div>
|
{{~ end ~}}
|
||||||
|
</div>
|
||||||
|
{{~ end ~}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{~ # Thumbnail }}
|
{{~ # Thumbnail ~}}
|
||||||
{{ if embed.Thumbnail }}
|
{{~ if embed.Thumbnail ~}}
|
||||||
<div class="chatlog__embed-thumbnail-container">
|
<div class="chatlog__embed-thumbnail-container">
|
||||||
<a class="chatlog__embed-thumbnail-link" href="{{ embed.Thumbnail.Url }}">
|
<a class="chatlog__embed-thumbnail-link" href="{{ embed.Thumbnail.Url }}">
|
||||||
<img class="chatlog__embed-thumbnail" src="{{ embed.Thumbnail.Url }}" />
|
<img class="chatlog__embed-thumbnail" src="{{ embed.Thumbnail.Url }}" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{~ # Image }}
|
{{~ # Image ~}}
|
||||||
{{ if embed.Image }}
|
{{~ if embed.Image ~}}
|
||||||
<div class="chatlog__embed-image-container">
|
<div class="chatlog__embed-image-container">
|
||||||
<a class="chatlog__embed-image-link" href="{{ embed.Image.Url }}">
|
<a class="chatlog__embed-image-link" href="{{ embed.Image.Url }}">
|
||||||
<img class="chatlog__embed-image" src="{{ embed.Image.Url }}" />
|
<img class="chatlog__embed-image" src="{{ embed.Image.Url }}" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
|
|
||||||
{{~ # Footer }}
|
{{~ # Footer ~}}
|
||||||
{{ if embed.Footer || embed.Timestamp }}
|
{{~ if embed.Footer || embed.Timestamp ~}}
|
||||||
<div class="chatlog__embed-footer">
|
<div class="chatlog__embed-footer">
|
||||||
{{ if embed.Footer }}
|
{{~ if embed.Footer ~}}
|
||||||
{{ if embed.Footer.Text && embed.Footer.IconUrl }}
|
{{~ if embed.Footer.Text && embed.Footer.IconUrl ~}}
|
||||||
<img class="chatlog__embed-footer-icon" src="{{ embed.Footer.IconUrl }}" />
|
<img class="chatlog__embed-footer-icon" src="{{ embed.Footer.IconUrl }}" />
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
|
|
||||||
<span class="chatlog__embed-footer-text">
|
<span class="chatlog__embed-footer-text">
|
||||||
{{ if embed.Footer }}
|
{{~ if embed.Footer ~}}
|
||||||
{{ if embed.Footer.Text }}
|
{{~ if embed.Footer.Text ~}}
|
||||||
{{ embed.Footer.Text | HtmlEncode }}
|
{{ embed.Footer.Text | html.escape }}
|
||||||
{{ if embed.Timestamp }} • {{ end }}
|
{{ if embed.Timestamp }} • {{ end }}
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
|
|
||||||
{{ if embed.Timestamp }}
|
{{~ if embed.Timestamp ~}}
|
||||||
{{ embed.Timestamp | FormatDate | HtmlEncode }}
|
{{ embed.Timestamp | FormatDate | html.escape }}
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
|
|
||||||
{{~ # Reactions }}
|
{{~ # Reactions ~}}
|
||||||
<div class="chatlog__reactions">
|
{{~ if message.Reactions | array.size > 0 ~}}
|
||||||
{{ for reaction in message.Reactions }}
|
<div class="chatlog__reactions">
|
||||||
<div class="chatlog__reaction">
|
{{~ for reaction in message.Reactions ~}}
|
||||||
<span class="chatlog__reaction-emoji">
|
<div class="chatlog__reaction">
|
||||||
{{~ # Custom emoji }}
|
<span class="chatlog__reaction-emoji">
|
||||||
{{ if reaction.EmojiId }}
|
{{~ # Custom emoji ~}}
|
||||||
<img class="emoji emoji--small" title="{{ reaction.EmojiName }}" src="https://cdn.discordapp.com/emojis/{{ reaction.EmojiId }}.png" />
|
{{~ if reaction.EmojiId ~}}
|
||||||
{{~ # Default emoji }}
|
<img class="emoji emoji--small" title="{{ reaction.EmojiName }}" src="https://cdn.discordapp.com/emojis/{{ reaction.EmojiId }}.png" />
|
||||||
{{ else }}
|
{{~ # Default emoji ~}}
|
||||||
{{ reaction.EmojiName }}
|
{{~ else ~}}
|
||||||
{{ end }}
|
{{ reaction.EmojiName }}
|
||||||
</span>
|
{{~ end ~}}
|
||||||
<span class="chatlog__reaction-count">{{ reaction.Count }}</span>
|
</span>
|
||||||
</div>
|
<span class="chatlog__reaction-count">{{ reaction.Count }}</span>
|
||||||
{{ end }}
|
</div>
|
||||||
</div>
|
{{~ end ~}}
|
||||||
{{ end }}
|
</div>
|
||||||
|
{{~ end ~}}
|
||||||
|
{{~ end ~}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{~ end ~}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
==============================================================
|
{{~ # Info ~}}
|
||||||
|
==============================================================
|
||||||
Guild: {{ Guild.Name }}
|
Guild: {{ Guild.Name }}
|
||||||
Channel: {{ Channel.Name }}
|
Channel: {{ Channel.Name }}
|
||||||
Topic: {{ Channel.Topic }}
|
Topic: {{ Channel.Topic }}
|
||||||
|
|
@ -6,13 +7,19 @@ Messages: {{ TotalMessageCount | Format "N0" }}
|
||||||
Range: {{ if From }}{{ From | FormatDate }} {{ end }}{{ if From || To }}->{{ end }}{{ if To }} {{ To | FormatDate }}{{ end }}
|
Range: {{ if From }}{{ From | FormatDate }} {{ end }}{{ if From || To }}->{{ end }}{{ if To }} {{ To | FormatDate }}{{ end }}
|
||||||
==============================================================
|
==============================================================
|
||||||
|
|
||||||
|
{{~ # Log ~}}
|
||||||
{{~ for group in MessageGroups ~}}
|
{{~ for group in MessageGroups ~}}
|
||||||
{{~ group.Author.FullName }} [{{ group.Timestamp | FormatDate }}]
|
{{~ # Author name and timestamp ~}}
|
||||||
|
{{~ }}[{{ group.Timestamp | FormatDate }}] {{ group.Author.FullName }}
|
||||||
|
{{~ # Messages ~}}
|
||||||
{{~ for message in group.Messages ~}}
|
{{~ for message in group.Messages ~}}
|
||||||
|
{{~ # Content ~}}
|
||||||
{{~ message.Content | FormatContent }}
|
{{~ message.Content | FormatContent }}
|
||||||
|
{{~ # Attachments ~}}
|
||||||
{{~ for attachment in message.Attachments ~}}
|
{{~ for attachment in message.Attachments ~}}
|
||||||
{{~ attachment.Url }}
|
{{~ attachment.Url }}
|
||||||
{{~ end ~}}
|
{{~ end ~}}
|
||||||
{{~ end ~}}
|
{{~ end ~}}
|
||||||
|
|
||||||
|
|
||||||
{{~ end ~}}
|
{{~ end ~}}
|
||||||
|
|
@ -28,8 +28,6 @@ namespace DiscordChatExporter.Core.Services
|
||||||
|
|
||||||
private string HtmlEncode(string str) => WebUtility.HtmlEncode(str);
|
private string HtmlEncode(string str) => WebUtility.HtmlEncode(str);
|
||||||
|
|
||||||
private string HtmlDecode(string str) => WebUtility.HtmlDecode(str);
|
|
||||||
|
|
||||||
private string Format(IFormattable obj, string format) =>
|
private string Format(IFormattable obj, string format) =>
|
||||||
obj.ToString(format, CultureInfo.InvariantCulture);
|
obj.ToString(format, CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
|
|
@ -312,8 +310,6 @@ namespace DiscordChatExporter.Core.Services
|
||||||
scriptObject.Import(_log, TemplateMemberFilter, TemplateMemberRenamer);
|
scriptObject.Import(_log, TemplateMemberFilter, TemplateMemberRenamer);
|
||||||
|
|
||||||
// Import functions
|
// Import functions
|
||||||
scriptObject.Import(nameof(HtmlEncode), new Func<string, string>(HtmlEncode));
|
|
||||||
scriptObject.Import(nameof(HtmlDecode), new Func<string, string>(HtmlDecode));
|
|
||||||
scriptObject.Import(nameof(Format), new Func<IFormattable, string, string>(Format));
|
scriptObject.Import(nameof(Format), new Func<IFormattable, string, string>(Format));
|
||||||
scriptObject.Import(nameof(FormatDate), new Func<DateTime, string>(FormatDate));
|
scriptObject.Import(nameof(FormatDate), new Func<DateTime, string>(FormatDate));
|
||||||
scriptObject.Import(nameof(FormatFileSize), new Func<long, string>(FormatFileSize));
|
scriptObject.Import(nameof(FormatFileSize), new Func<long, string>(FormatFileSize));
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue