feat: 美化文章界面 #3
|
@ -12,6 +12,8 @@ public class BlogEssay : IComparable<BlogEssay>
|
||||||
|
|
||||||
public required uint WordCount { get; init; }
|
public required uint WordCount { get; init; }
|
||||||
|
|
||||||
|
public required string ReadTime { get; init; }
|
||||||
|
|
||||||
public List<string> Tags { get; } = [];
|
public List<string> Tags { get; } = [];
|
||||||
|
|
||||||
public required string HtmlContent { get; init; }
|
public required string HtmlContent { get; init; }
|
||||||
|
@ -25,6 +27,7 @@ public class BlogEssay : IComparable<BlogEssay>
|
||||||
PublishTime = PublishTime,
|
PublishTime = PublishTime,
|
||||||
Description = Description,
|
Description = Description,
|
||||||
WordCount = WordCount,
|
WordCount = WordCount,
|
||||||
|
ReadTime = ReadTime,
|
||||||
HtmlContent = newHtmlContent
|
HtmlContent = newHtmlContent
|
||||||
};
|
};
|
||||||
essay.Tags.AddRange(Tags);
|
essay.Tags.AddRange(Tags);
|
||||||
|
|
|
@ -12,7 +12,8 @@ using YamlDotNet.Serialization;
|
||||||
|
|
||||||
namespace YaeBlog.Core.Services;
|
namespace YaeBlog.Core.Services;
|
||||||
|
|
||||||
public partial class RendererService(ILogger<RendererService> logger,
|
public partial class RendererService(
|
||||||
|
ILogger<RendererService> logger,
|
||||||
EssayScanService essayScanService,
|
EssayScanService essayScanService,
|
||||||
MarkdownPipeline markdownPipeline,
|
MarkdownPipeline markdownPipeline,
|
||||||
IDeserializer yamlDeserializer,
|
IDeserializer yamlDeserializer,
|
||||||
|
@ -38,12 +39,14 @@ public partial class RendererService(ILogger<RendererService> logger,
|
||||||
foreach (BlogContent content in preProcessedContents)
|
foreach (BlogContent content in preProcessedContents)
|
||||||
{
|
{
|
||||||
MarkdownMetadata? metadata = TryParseMetadata(content);
|
MarkdownMetadata? metadata = TryParseMetadata(content);
|
||||||
|
uint wordCount = GetWordCount(content);
|
||||||
BlogEssay essay = new()
|
BlogEssay essay = new()
|
||||||
{
|
{
|
||||||
Title = metadata?.Title ?? content.FileName,
|
Title = metadata?.Title ?? content.FileName,
|
||||||
FileName = content.FileName,
|
FileName = content.FileName,
|
||||||
Description = GetDescription(content),
|
Description = GetDescription(content),
|
||||||
WordCount = GetWordCount(content),
|
WordCount = wordCount,
|
||||||
|
ReadTime = CalculateReadTime(wordCount),
|
||||||
PublishTime = metadata?.Date ?? DateTime.Now,
|
PublishTime = metadata?.Date ?? DateTime.Now,
|
||||||
HtmlContent = content.FileContent
|
HtmlContent = content.FileContent
|
||||||
};
|
};
|
||||||
|
@ -52,6 +55,7 @@ public partial class RendererService(ILogger<RendererService> logger,
|
||||||
{
|
{
|
||||||
essay.Tags.AddRange(metadata.Tags);
|
essay.Tags.AddRange(metadata.Tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
essays.Add(essay);
|
essays.Add(essay);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -229,4 +233,13 @@ public partial class RendererService(ILogger<RendererService> logger,
|
||||||
count);
|
count);
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string CalculateReadTime(uint wordCount)
|
||||||
|
{
|
||||||
|
// 据说语文教学大纲规定,中国高中问阅读现代文的速度是600字每分钟
|
||||||
|
int second = (int)wordCount / 10;
|
||||||
|
TimeSpan span = new TimeSpan(0, 0, second);
|
||||||
|
|
||||||
|
return span.ToString("mm'分 'ss'秒'");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
<div class="row px-4 py-1">
|
<div class="row px-4 py-1">
|
||||||
<div class="col-auto fw-light">
|
<div class="col-auto fw-light">
|
||||||
总字数:@(_essay!.WordCount)字。
|
总字数:@(_essay!.WordCount)字,预计阅读时间 @(_essay!.ReadTime)。
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user