add read time and toc
This commit is contained in:
@ -18,11 +18,16 @@ search:
|
|||||||
panel:
|
panel:
|
||||||
lastmod: "Recently Updated"
|
lastmod: "Recently Updated"
|
||||||
trending_tags: "Trending Tags"
|
trending_tags: "Trending Tags"
|
||||||
|
toc: "Contents"
|
||||||
|
|
||||||
post:
|
post:
|
||||||
posted: "Posted"
|
posted: "Posted"
|
||||||
updated: "Updated"
|
updated: "Updated"
|
||||||
written_by: "By"
|
written_by: "By"
|
||||||
|
read_time:
|
||||||
|
prompt: "read"
|
||||||
|
unit: "min"
|
||||||
|
words: "words"
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
brief: "All rights reserved"
|
brief: "All rights reserved"
|
||||||
|
@ -23,6 +23,11 @@ post:
|
|||||||
posted: "发布"
|
posted: "发布"
|
||||||
updated: "更新"
|
updated: "更新"
|
||||||
written_by: "由"
|
written_by: "由"
|
||||||
|
read_time:
|
||||||
|
prompt: "阅读"
|
||||||
|
unit: "分钟"
|
||||||
|
words: "字"
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
brief: "版权所有"
|
brief: "版权所有"
|
||||||
verbose: "版权所有"
|
verbose: "版权所有"
|
||||||
|
@ -26,12 +26,14 @@
|
|||||||
{{ partialCached "update-list.html" . }}
|
{{ partialCached "update-list.html" . }}
|
||||||
{{ partialCached "trending-tags.html" . }}
|
{{ partialCached "trending-tags.html" . }}
|
||||||
</div>
|
</div>
|
||||||
|
{{ block "panel" . }}{{ end }}
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<!-- tail -->
|
<!-- tail -->
|
||||||
<div id="tail-wrapper" class="col-12 col-lg-11 col-xl-9 px-md-4">
|
<div id="tail-wrapper" class="col-12 col-lg-11 col-xl-9 px-md-4">
|
||||||
|
{{ block "tail" . }}{{ end }}
|
||||||
{{ partialCached "footer.html" . }}
|
{{ partialCached "footer.html" . }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -82,6 +82,7 @@
|
|||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<!-- read time -->
|
<!-- read time -->
|
||||||
|
{{ partial "read-time.html" (dict "content" .Content "prompt" true "lang" $lang) }}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -155,3 +156,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "panel" }}
|
||||||
|
{{ partial "toc.html" . }}
|
||||||
|
{{ end }}
|
35
layouts/partials/read-time.html
Normal file
35
layouts/partials/read-time.html
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<!-- Calculate the post's reading time, and display the word count in tooltip -->
|
||||||
|
{{ $content := .content }}
|
||||||
|
{{ $words := len (split $content " ") }}
|
||||||
|
|
||||||
|
<!-- words per minute -->
|
||||||
|
{{ $wpm := 180 }}
|
||||||
|
{{ $min_time := 1 }}
|
||||||
|
|
||||||
|
{{ $read_time := div $words $wpm }}
|
||||||
|
|
||||||
|
{{ if lt $read_time 1 }}
|
||||||
|
{{ $read_time = $min_time }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ $lang := .lang | default site.Language.Lang }}
|
||||||
|
{{ $read_prompt := i18n "post.read_time.prompt" (dict "Language" $lang) }}
|
||||||
|
|
||||||
|
<!-- return element -->
|
||||||
|
<span
|
||||||
|
class="readtime"
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="bottom"
|
||||||
|
title="{{ $words }} {{ i18n "post.words" (dict "Language" $lang) }}"
|
||||||
|
>
|
||||||
|
<em>
|
||||||
|
{{- $read_time -}}
|
||||||
|
{{ " " }}
|
||||||
|
{{- i18n "post.read_time.unit" (dict "Language" $lang) -}}
|
||||||
|
</em>
|
||||||
|
{{- if .prompt -}}
|
||||||
|
{{- $prompt_words := len (split $read_prompt " ") -}}
|
||||||
|
{{- if le $prompt_words 1 -}}{{ " " }}{{- end -}}
|
||||||
|
{{ $read_prompt }}
|
||||||
|
{{- end -}}
|
||||||
|
</span>
|
23
layouts/partials/toc.html
Normal file
23
layouts/partials/toc.html
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{{/*
|
||||||
|
Table of Contents (TOC) partial
|
||||||
|
Checks if TOC should be enabled, then renders it if needed
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
{{/* Determine if TOC should be enabled */}}
|
||||||
|
{{ $enable_toc := false }}
|
||||||
|
{{ $page_toc := default true .Params.toc }} {{/* 如果 .Params.toc 不存在,默认 true */}}
|
||||||
|
{{ if and site.Params.toc $page_toc }}
|
||||||
|
{{ if or (findRE "<h2" .Content) (findRE "<h3" .Content) }}
|
||||||
|
{{ $enable_toc = true }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
|
||||||
|
{{/* Render TOC if enabled */}}
|
||||||
|
{{ if $enable_toc }}
|
||||||
|
<div class="toc-border-cover z-3"></div>
|
||||||
|
<section id="toc-wrapper" class="invisible position-sticky ps-0 pe-4 pb-4">
|
||||||
|
<h2 class="panel-heading ps-3 pb-2 mb-0">{{ i18n "panel.toc" }}</h2>
|
||||||
|
<nav id="toc"></nav>
|
||||||
|
</section>
|
||||||
|
{{ end }}
|
Reference in New Issue
Block a user