Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/reuixiy/hugo-theme-meme.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorreuixiy <reuixiy@gmail.com>2020-01-08 20:57:52 +0300
committerreuixiy <reuixiy@gmail.com>2020-01-08 20:57:52 +0300
commit8c3cb2bcb9b51c20ab985b57aab195014627d3ed (patch)
treee31079baf65f250437dc71414b9e03e1c91cb4a1
parente6c251a1ebf81a9e6e90306e5f57f4cf92796a24 (diff)
Release v4.0.0v4.0.0
closed #26, fixed #14
-rw-r--r--CHANGELOG.md25
-rw-r--r--assets/scss/_common/indent.scss3
-rw-r--r--config-examples/en-us/config.toml56
-rw-r--r--config-examples/zh-cn/config.toml56
-rw-r--r--exampleSite/resources/_gen/assets/scss/scss/main.scss_b04c21e44835e7dcdc8cb03d103b5ef1.content2
-rw-r--r--exampleSite/resources/_gen/assets/scss/scss/main.scss_b04c21e44835e7dcdc8cb03d103b5ef1.json2
-rw-r--r--layouts/index.sectionsatom.xml5
-rw-r--r--layouts/index.sectionsrss.xml5
-rw-r--r--layouts/partials/components/auto-detect-images.html2
-rw-r--r--layouts/partials/components/content.html43
-rw-r--r--layouts/partials/components/markdownify.html59
-rw-r--r--layouts/partials/components/open-graph.html2
-rw-r--r--layouts/partials/components/toc.html22
-rw-r--r--layouts/partials/footer.html16
-rw-r--r--layouts/partials/menu.html2
-rw-r--r--layouts/partials/minimal-footer-about.html4
-rw-r--r--layouts/partials/page/home-footage.html2
-rw-r--r--layouts/partials/page/home-poetry.html6
-rw-r--r--layouts/partials/post-copyright.html12
-rw-r--r--layouts/partials/post-gitinfo.html6
-rw-r--r--layouts/partials/post.html11
-rw-r--r--theme.toml2
22 files changed, 241 insertions, 102 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 08479de..d47e97a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,28 @@
+# [4.0.0](https://github.com/reuixiy/hugo-theme-meme/compare/v3.4.5...v4.0.0) (2020-01-08)
+
+
+As I described in [#26](https://github.com/reuixiy/hugo-theme-meme/issues/26), I want to make MemE support Hugo's new default Markdown rendering engine Goldmark, and this is it. In this version, MemE will support Goldmark and *no longer support* Blackfriday.
+
+### Notes
+
+1. Goldmark problems, see [#43 (comment)](https://github.com/reuixiy/hugo-theme-meme/issues/43#issuecomment-571074162)
+
+2. Compatibility with LaTeX, see [gohugoio/hugo#6544](https://github.com/gohugoio/hugo/issues/6544)
+
+ [Previously](https://github.com/reuixiy/hugo-theme-meme/issues/12), I suggested adding some backslashes to escape some characters to solve the syntax conflict between Markdown and LaTeX. Now, I think that is not the *right* way -- it's troublesome and stupid.
+
+ In v4.0.0, MemE adds a new `compatibleWithLaTeX` option as a temporary workaround. But note that it has some limitations, such as it can't exclude equations inside code block, it supports `$ ... $` and `$$ ... $$` only.
+
+ And at last, apology for my wrong suggestion, which may take some of your time to modify the equations again.
+
+3. With Hugo brand new Markdown renderer Goldmark, [#14](https://github.com/reuixiy/hugo-theme-meme/issues/14) should be fixed.
+
+### ATTENTION
+
+**MemE v4.0.0 requires Hugo v0.62.2 or higher.**
+
+
+
## [3.4.5](https://github.com/reuixiy/hugo-theme-meme/compare/v3.3.9...v3.4.5) (2020-01-08)
diff --git a/assets/scss/_common/indent.scss b/assets/scss/_common/indent.scss
index 9e8b942..3253f0e 100644
--- a/assets/scss/_common/indent.scss
+++ b/assets/scss/_common/indent.scss
@@ -46,6 +46,9 @@
ol {
margin: ($fontSize * 1.618) 0 0;
list-style-position: outside;
+ p {
+ display: block;
+ }
}
}
dl {
diff --git a/config-examples/en-us/config.toml b/config-examples/en-us/config.toml
index 7faa7bd..431bbbb 100644
--- a/config-examples/en-us/config.toml
+++ b/config-examples/en-us/config.toml
@@ -41,12 +41,6 @@ enableRobotsTXT = true
# layout in MemE)
paginate = 5
-# GitHub flavoured code fences
-pygmentsCodefences = true
-pygmentsUseClasses = true
-pygmentsCodefencesGuessSyntax = true
-pygmentsOptions = "linenos=table"
-
# URL related
disablePathToLower = false
relativeURLs = false
@@ -66,18 +60,36 @@ uglyURLs = false
[frontmatter]
lastmod = ["lastmod", ":git", ":fileModTime", ":default"]
-# v0.60.0
+# Markdown renderer
[markup]
- defaultMarkdownHandler = "blackfriday"
-
-# Markdown rendering engine
-[blackfriday]
- # Enable smart punctuation substitutions?
- smartypants = true
- # Open external links in a new window or tab?
- hrefTargetBlank = true
- # Disable some Blackfriday’s Markdown extensions
- extensionsmask = ["hardLineBreak", "backslashLineBreak"]
+ defaultMarkdownHandler = "goldmark"
+ [markup.goldmark]
+ [markup.goldmark.extensions]
+ definitionList = true
+ footnote = true
+ linkify = true
+ strikethrough = true
+ table = true
+ taskList = true
+ typographer = true
+ [markup.goldmark.parser]
+ attribute = true
+ autoHeadingID = true
+ autoHeadingIDType = "github"
+ [markup.goldmark.renderer]
+ hardWraps = false
+ unsafe = true
+ xHTML = false
+ [markup.highlight]
+ codeFences = true
+ guessSyntax = false
+ lineNos = true
+ lineNumbersInTable = true
+ noClasses = false
+ [markup.tableOfContents]
+ startLevel = 2
+ endLevel = 6
+ ordered = true
# Author’s information
[author]
@@ -734,6 +746,16 @@ uglyURLs = false
######################################
+ # Markdown Related
+
+ # Open external links in a new tab?
+ hrefTargetBlank = true
+
+ # Compatibility with LaTeX?
+ compatibleWithLaTeX = false
+
+
+ ######################################
# Table of Contents
enableTOC = false
diff --git a/config-examples/zh-cn/config.toml b/config-examples/zh-cn/config.toml
index b75ae5e..eea8e40 100644
--- a/config-examples/zh-cn/config.toml
+++ b/config-examples/zh-cn/config.toml
@@ -39,12 +39,6 @@ enableRobotsTXT = true
# 每一分页的文章数(仅对「文章摘要」首页布局有效)
paginate = 5
-# 代码高亮
-pygmentsCodefences = true
-pygmentsUseClasses = true
-pygmentsCodefencesGuessSyntax = true
-pygmentsOptions = "linenos=table"
-
# URL 相关
disablePathToLower = false
relativeURLs = false
@@ -64,18 +58,36 @@ uglyURLs = false
[frontmatter]
lastmod = ["lastmod", ":git", ":fileModTime", ":default"]
-# v0.60.0
-[markup]
- defaultMarkdownHandler = "blackfriday"
-
# Markdown 渲染器
-[blackfriday]
- # 是否开启智能标点符号替换
- smartypants = false
- # 是否在新标签页打开外链
- hrefTargetBlank = true
- # 屏蔽的扩展
- extensionsmask = ["hardLineBreak", "backslashLineBreak"]
+[markup]
+ defaultMarkdownHandler = "goldmark"
+ [markup.goldmark]
+ [markup.goldmark.extensions]
+ definitionList = true
+ footnote = true
+ linkify = true
+ strikethrough = true
+ table = true
+ taskList = true
+ typographer = false
+ [markup.goldmark.parser]
+ attribute = true
+ autoHeadingID = true
+ autoHeadingIDType = "github"
+ [markup.goldmark.renderer]
+ hardWraps = false
+ unsafe = true
+ xHTML = false
+ [markup.highlight]
+ codeFences = true
+ guessSyntax = false
+ lineNos = true
+ lineNumbersInTable = true
+ noClasses = false
+ [markup.tableOfContents]
+ startLevel = 2
+ endLevel = 6
+ ordered = true
# 作者信息
[author]
@@ -694,6 +706,16 @@ uglyURLs = false
######################################
+ # Markdown 相关
+
+ # 在新标签页打开外链?
+ hrefTargetBlank = true
+
+ # 与 LaTeX 的兼容性?
+ compatibleWithLaTeX = false
+
+
+ ######################################
# 文章目录
# 是否开启(全局设置)
diff --git a/exampleSite/resources/_gen/assets/scss/scss/main.scss_b04c21e44835e7dcdc8cb03d103b5ef1.content b/exampleSite/resources/_gen/assets/scss/scss/main.scss_b04c21e44835e7dcdc8cb03d103b5ef1.content
index 5a9619f..e95d880 100644
--- a/exampleSite/resources/_gen/assets/scss/scss/main.scss_b04c21e44835e7dcdc8cb03d103b5ef1.content
+++ b/exampleSite/resources/_gen/assets/scss/scss/main.scss_b04c21e44835e7dcdc8cb03d103b5ef1.content
@@ -1 +1 @@
-:root{--color-primary:hsl(220, 90%, 56%);--color-primary-h:220;--color-primary-s:90%;--color-primary-l:56%;--color-bg:hsl(0, 0%, 100%);--color-bg-h:0;--color-bg-s:0%;--color-bg-l:100%;--color-contrast-lower:hsl(0, 0%, 95%);--color-contrast-lower-h:0;--color-contrast-lower-s:0%;--color-contrast-lower-l:95%;--color-contrast-low:hsl(240, 1%, 83%);--color-contrast-low-h:240;--color-contrast-low-s:1%;--color-contrast-low-l:83%;--color-contrast-medium:hsl(240, 1%, 48%);--color-contrast-medium-h:240;--color-contrast-medium-s:1%;--color-contrast-medium-l:48%;--color-contrast-high:hsl(240, 4%, 20%);--color-contrast-high-h:240;--color-contrast-high-s:4%;--color-contrast-high-l:20%;--color-contrast-higher:hsl(240, 8%, 12%);--color-contrast-higher-h:240;--color-contrast-higher-s:8%;--color-contrast-higher-l:12%}[data-theme="dark"]{--color-primary:hsl(201, 65%, 62%);--color-primary-h:201;--color-primary-s:65%;--color-primary-l:62%;--color-bg:hsl(240, 8%, 12%);--color-bg-h:240;--color-bg-s:8%;--color-bg-l:12%;--color-contrast-lower:hsl(240, 6%, 19%);--color-contrast-lower-h:240;--color-contrast-lower-s:6%;--color-contrast-lower-l:19%;--color-contrast-low:hsl(240, 3%, 27%);--color-contrast-low-h:240;--color-contrast-low-s:3%;--color-contrast-low-l:27%;--color-contrast-medium:hsl(240, 1%, 57%);--color-contrast-medium-h:240;--color-contrast-medium-s:1%;--color-contrast-medium-l:57%;--color-contrast-high:hsl(0, 0%, 89%);--color-contrast-high-h:0;--color-contrast-high-s:0%;--color-contrast-high-l:89%;--color-contrast-higher:hsl(0, 0%, 100%);--color-contrast-higher-h:0;--color-contrast-higher-s:0%;--color-contrast-higher-l:100%}#theme-toggle{padding:1em;cursor:pointer;float:right;position:relative;z-index:4}[data-theme="dark"] img{filter:brightness(50%)}html,body{margin:0;width:100%;height:100%}body{font-size:20px;tab-size:4;color:var(--color-contrast-high);background-color:var(--color-bg);overflow-wrap:break-word;word-wrap:break-word;line-height:1.618}.container{min-height:100%;min-width:100%;position:relative}.main{padding:2em 1em 15em;display:block}.main-inner{margin:0 auto;display:block}.icon{width:1em;height:1em;fill:currentColor;display:inline-block}svg{vertical-align:middle}h1,h2,h3,h4,h5,h6{margin:1.618em 0 1em;color:var(--color-contrast-higher)}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{text-decoration:none !important;color:var(--color-contrast-higher)}h1{font-size:2em}h2{font-size:1.8em}h3{font-size:1.6em}h4{font-size:1.4em}h5{font-size:1.2em}h6{font-size:1em}a{color:var(--color-contrast-high);text-decoration:none;transition:color .5s}a:hover{color:var(--color-primary)}::selection{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.3)}::-webkit-scrollbar{width:0.4em;height:0.2em}::-webkit-scrollbar-track{background-color:var(--color-bg)}::-webkit-scrollbar-thumb{background-color:var(--color-contrast-low)}::-webkit-scrollbar-thumb:hover{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5)}::-webkit-scrollbar-thumb:active{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.75)}[data-hide="true"]{display:none}[data-small-caps="true"] .post-body h1,[data-small-caps="true"] .post-body h2,[data-small-caps="true"] .post-body h3,[data-small-caps="true"] .post-body h4,[data-small-caps="true"] .post-body h5,[data-small-caps="true"] .post-body h6{font-variant:small-caps}[data-small-caps="true"] .contents-title{font-variant:small-caps}[data-align="justify"] .post-body p{text-align:justify;text-justify:distribute}[data-align="center"] .post-body p{text-align:center}[data-type="poetry"] .post-body{display:table;margin:0 auto}.list-title,.term-title,.list-year,.list-month,.post-title,.post-subtitle,.related-title,.post-nav,thead,dt{font-family:Comfortaa,sans-serif}.post-body h1,.post-body h2,.post-body h3,.post-body h4,.post-body h5,.post-body h6{font-family:Comfortaa,sans-serif}.contents-title{font-family:Comfortaa,sans-serif}code,pre,sup,.post-meta,.updated-badge,.post-gitinfo,.minimal-footer,.minimal-footer-about,.busuanzi-site-uv-and-pv{font-family:"Source Code Pro",monospace}body{font-family:"IBM Plex Serif",serif}.header{z-index:3;position:relative}.site-brand{text-align:center}.site-brand{background-image:linear-gradient(90deg, #f79533 0, #f37055 15%, #ef4e7b 30%, #a166ab 44%, #5073b8 58%, #1098ad 72%, #07b39b 86%, #6dba82 100%)}.brand{width:250px;height:100px;fill:#fff}.nav{z-index:3;position:relative}.menu{padding:0;margin:0;list-style:none;text-align:center;background:var(--color-contrast-lower);line-height:1.5;font-weight:500}.menu-item{display:inline-block;margin:0 1em}.menu-item a{color:var(--color-contrast-medium)}.menu-item a:hover{color:var(--color-primary)}.active a{color:var(--color-primary)}.menu-item-name{display:flex}.post-meta{color:var(--color-contrast-medium);font-size:80%;text-align:center;margin:20px 0}.post-meta a{color:var(--color-contrast-medium)}.post-meta a:hover{color:var(--color-primary)}.home .post-meta{margin:20px 0}.post-meta-item{margin:0.5em;display:inline-block}.post-meta-icon{fill:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.5);margin-bottom:0.3em}.single .main-inner{width:32em}.post-title{text-align:center}.post-subtitle{font-size:1.8em;text-align:center;font-weight:700;margin-top:-0.618em}.post-description{text-align:center;margin:20px 0;font-size:90%}.post-body{margin-top:5em !important}.post-body a{text-decoration:underline}.post p{margin:0 0 1em;line-height:1.618}.post img{display:block;margin:2em auto;max-width:100%;border:1px solid var(--color-contrast-lower);clear:both}.post video{display:block;max-width:100%;margin:2em auto;clear:both}.post sup{font-size:70%;vertical-align:super}.post sup a{text-decoration:none}.post ol,.post ul{padding-left:2em;line-height:1.618}.post hr{border:none;margin:2.427em 0 1.5em;text-align:center}.post hr::after{content:"···";letter-spacing:2em;padding-left:2em}blockquote{margin:2em 0;padding:0 1em;color:var(--color-contrast-medium);border-left:3px solid var(--color-contrast-low)}blockquote p{text-align:left !important}blockquote a{color:var(--color-contrast-medium)}blockquote a:hover{color:var(--color-primary)}.emphasis-point{font-weight:normal;text-emphasis:'•';-webkit-text-emphasis:'•';-moz-text-emphasis:'•';text-emphasis-position:under;-webkit-text-emphasis-position:under;-moz-text-emphasis-position:under}.drop-cap{float:left;font-size:62px;margin-right:12.36px;margin-top:10px;line-height:32.36px}.caption{display:block;text-align:center;margin:-1em 0 0;font-size:90%;color:var(--color-contrast-medium)}.contents{margin-top:5em}.contents ol{list-style:none;counter-reset:item}.contents ol li::before{content:counters(item, ".") ". ";counter-increment:item}ol.toc{padding:0;overflow:auto hidden;white-space:nowrap}.footnotes{font-size:90%;margin-top:100px}.footnotes hr{margin:0;height:1px;border:none;background-color:var(--color-contrast-medium)}.footnotes hr::after{content:none}.footnotes ol{margin:32.36px 0 0;padding:0 20px 0 40px}.anchor-link{position:absolute;transform:translate(-150%)}.anchor-icon{width:0.75em;height:0.75em;vertical-align:baseline}table{width:100%;border-collapse:collapse;border-spacing:0;border:1px solid var(--color-contrast-lower);margin:2em 0}thead{font-weight:700}th,td{font-size:0.9em;padding:0.4em;border:1px solid var(--color-contrast-lower)}table>tbody>tr:nth-of-type(odd){background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5)}table>tbody>tr:hover{background-color:var(--color-contrast-lower)}dt{font-weight:700}dd{margin-left:2em;text-align:left}code{padding:2.5px 5px;background-color:var(--color-contrast-lower);border-radius:3px;font-size:80%}pre{overflow:auto hidden;font-size:16px;margin:40px 0;padding:1em;line-height:1.618;background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.75)}pre code{background-color:unset;font-size:inherit;padding:0}.highlight{font-size:0.8em;margin:40px 0}.highlight pre{margin:0 !important;overflow:auto hidden;background-color:unset}.highlight th,.highlight td{font-size:inherit}.highlight table>tbody>tr:nth-of-type(odd){background-color:inherit}.highlight table>tbody>tr:hover{background-color:inherit}span.lnt{user-select:none;display:block;margin-right:-1em !important;padding:0 !important}.katex-display,mjx-container[jax="CHTML"][display="true"]{overflow:auto hidden;text-indent:0}:root{--anchor-opacity: 0}.anchor-link{opacity:var(--anchor-opacity);transition:all .25s}.post h1:hover,.post h2:hover,.post h3:hover,.post h4:hover,.post h5:hover,.post h6:hover,.post .anchor-link:hover{--anchor-opacity: 1}.footnote-icon{fill:hsla(var(--color-contrast-high-h), var(--color-contrast-high-s), var(--color-contrast-high-l), 0.5);transition:fill .5s}.footnote-icon:hover{fill:var(--color-primary)}[data-indent="true"] .contents-title{text-align:center}[data-indent="true"] .post-body p{text-indent:2em;margin:0}[data-indent="true"] .post-body .caption{text-indent:0;margin:0 0 1em}[data-indent="true"] .post-body blockquote{margin:1em 0;padding:0;border:none}[data-indent="true"] .post-body img,[data-indent="true"] .post-body video{margin:1em auto}[data-indent="true"] .post-body table{margin:1em 0}[data-indent="true"] .post-body pre,[data-indent="true"] .post-body .highlight{margin:20px 0}[data-indent="true"] .post-body h1,[data-indent="true"] .post-body h2,[data-indent="true"] .post-body h3,[data-indent="true"] .post-body h4,[data-indent="true"] .post-body h5,[data-indent="true"] .post-body h6{text-align:center}[data-indent="true"] .post-body .anchor-link{position:relative;transform:none;display:block;float:none}[data-indent="true"] .post-body ol,[data-indent="true"] .post-body ul{margin:0;list-style-position:inside}[data-indent="true"] .post-body ol p,[data-indent="true"] .post-body ul p{text-indent:0;display:inline-block}[data-indent="true"] .post-body .footnotes ol{margin:32.36px 0 0;list-style-position:outside}[data-indent="true"] .post-body dl{text-indent:2em}[data-indent="true"] .post-body dl dd{text-indent:0;margin-left:4em}[data-indent="true"] .post-body dl p{text-indent:0}.post-copyright{margin:0;list-style:none;margin-top:5em;padding:0.5em 1em;background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5);border-left:3px solid hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5);line-height:2}.copyright-item{line-height:1.5;margin:0.5em 0}.updated-badge-container{margin-top:5em;text-align:center}.updated-badge-left{fill:var(--color-contrast-low)}.updated-badge-right{fill:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5)}.related-posts{text-align:left;border:1px solid var(--color-contrast-lower);padding:0.6em 1em;line-height:2em;margin-top:5em}.related-title{font-size:1em;margin:0}.related-icon{float:right;margin-top:0.4em}.related-list{margin:0;padding:0;list-style:none}.related-link{line-height:1.5;display:inline-block}.post-tags{margin-top:100px;text-align:center;font-size:90%}.post-tags-link{color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.9);margin:0 0.5em;line-height:2;display:inline-block}.tag-icon{margin-right:0.3em;font-size:80%}.post-nav{list-style:none;padding:0;display:flex;justify-content:space-between;border-top:1px solid var(--color-contrast-lower);font-weight:700;margin-top:5em;padding-top:0.618em}.post-nav-prev{margin-right:auto;max-width:42%}.post-nav-next{margin-left:auto;text-align:right;max-width:42%}.list .main-inner{width:30em}.list-title{text-align:center}.list ul{list-style:none;padding:0}.list-item{line-height:2;position:relative;transition:border .5s;border-bottom:1px dashed var(--color-contrast-low);margin-top:1em;padding-bottom:0.5em;display:flex;align-items:baseline}.list-item:hover{border-bottom-color:var(--color-primary)}.list-item:hover ::before{background:var(--color-primary)}.list-item ::before{content:" ";position:absolute;left:0.618em;top:0.618em;width:6.66666667px;height:6.66666667px;background:var(--color-contrast-low);border-radius:50%;border:1px solid var(--color-bg);transition:background .5s;font-size:20px}.list-item-title{margin:0 0.618em 0 2em;font-size:1.2em;line-height:1.5}.list-item-time{margin:0 0.618em 0 2em;color:var(--color-contrast-medium);line-height:1.5}.list-year{display:flex;justify-content:space-between;align-items:baseline}.term-count{color:var(--color-contrast-medium);font-size:0.7em}.tree{margin-left:-2em;overflow:auto hidden;white-space:nowrap}.category-item{color:blue;font-size:1.2em}.category-item:hover{color:blueviolet}.category-count{color:var(--color-contrast-medium)}.tag-cloud{text-align:center}.tag-cloud-item{margin:10px;display:inline-block}.list-item-title{flex:1}.list-item-time{text-align:right;margin-left:1em}.back-to-top{position:fixed;right:0;z-index:1}.back-to-top a{display:block;padding:1em;color:var(--color-contrast-medium)}.back-to-top a:hover{color:var(--color-primary)}.back-to-top{bottom:-5em;transition:bottom 0.3s ease-in-out}.back-to-top.show{bottom:0}.footer{position:absolute;bottom:0;width:100%;font-size:90%;color:var(--color-contrast-medium)}.footer a{color:var(--color-contrast-medium)}.footer a:hover{color:var(--color-primary)}.footer-inner{padding:1em;text-align:center}.footer-icon{margin:0 0.25em 0.3em}.footer-icon{fill:#f06292}@keyframes heartbeat{0%,100%{transform:scale(1)}10%,30%{transform:scale(0.9)}20%,40%,50%,60%,70%,80%{transform:scale(1.1)}}.footer-icon{animation:heartbeat 1.33s ease-in-out infinite}.summary-title-link{color:var(--color-contrast-higher)}.summary{line-height:1.618;display:block}.read-more-container{text-align:center;margin-top:1.618em}.read-more-link{display:inline-block}.pagination{list-style:none;margin:5em 0 0;padding:0;display:flex;justify-content:space-between}.pagination-prev{margin-right:auto}.pagination-next{margin-left:auto;text-align:right}.fof::before{background-repeat:no-repeat;background-size:cover;background-position:50% 50%;content:" ";position:fixed;width:100%;height:100%;top:0;left:0;z-index:1}.fof .main-inner{background:rgba(0,0,0,0.25);min-height:100%;min-width:100%;position:absolute;z-index:3}.fof video{position:fixed;top:50%;left:50%;min-width:100%;min-height:100%;width:auto;height:auto;z-index:2;transform:translateX(-50%) translateY(-50%)}.fof h1{font-size:3rem;text-transform:uppercase;letter-spacing:0.3rem;text-align:center;top:15%;left:5%;right:5%;position:absolute;color:#fff;margin:0.67em 0}.fof .fof-footer{font-size:2rem;position:absolute;bottom:15%;left:10%;right:10%;text-align:center}.fof a{color:#eee}.fof a:hover{color:#fff}@media only screen and (max-device-width: 1024px){.fof #bgvid{display:none}}.fof::before{background-image:url()}.chroma{background-color:#ffffff}.chroma .err{color:#ff0000;background-color:#ffaaaa}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl{display:block;width:100%;background-color:#ffffcc}.chroma .lnt{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma .ln{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma .k{color:#0000aa}.chroma .kc{color:#0000aa}.chroma .kd{color:#0000aa}.chroma .kn{color:#0000aa}.chroma .kp{color:#0000aa}.chroma .kr{color:#0000aa}.chroma .kt{color:#00aaaa}.chroma .na{color:#1e90ff}.chroma .nb{color:#00aaaa}.chroma .nc{color:#00aa00}.chroma .no{color:#aa0000}.chroma .nd{color:#888888}.chroma .ni{color:#880000}.chroma .nf{color:#00aa00}.chroma .nn{color:#00aaaa}.chroma .nt{color:#1e90ff}.chroma .nv{color:#aa0000}.chroma .s{color:#aa5500}.chroma .sa{color:#aa5500}.chroma .sb{color:#aa5500}.chroma .sc{color:#aa5500}.chroma .dl{color:#aa5500}.chroma .sd{color:#aa5500}.chroma .s2{color:#aa5500}.chroma .se{color:#aa5500}.chroma .sh{color:#aa5500}.chroma .si{color:#aa5500}.chroma .sx{color:#aa5500}.chroma .sr{color:#009999}.chroma .s1{color:#aa5500}.chroma .ss{color:#0000aa}.chroma .m{color:#009999}.chroma .mb{color:#009999}.chroma .mf{color:#009999}.chroma .mh{color:#009999}.chroma .mi{color:#009999}.chroma .il{color:#009999}.chroma .mo{color:#009999}.chroma .ow{color:#0000aa}.chroma .c{color:#888888}.chroma .ch{color:#888888}.chroma .cm{color:#888888}.chroma .c1{color:#888888}.chroma .cs{color:#0000aa}.chroma .cp{color:#4c8317}.chroma .cpf{color:#4c8317}.chroma .gd{color:#aa0000}.chroma .gr{color:#aa0000}.chroma .gh{color:#000080}.chroma .gi{color:#00aa00}.chroma .go{color:#666666}.chroma .gp{color:#454545}.chroma .gu{color:#800080}.chroma .gt{color:#aa0000}.chroma .w{color:#999999}.chroma{color:var(--color-contrast-high);background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5)}.chroma-dark{color:#f8f8f2;background-color:#272822}.chroma-dark .err{color:#960050;background-color:#1e0010}.chroma-dark .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma-dark .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma-dark .hl{display:block;width:100%;background-color:#ffffcc}.chroma-dark .lnt{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma-dark .ln{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma-dark .k{color:#66d9ef}.chroma-dark .kc{color:#66d9ef}.chroma-dark .kd{color:#66d9ef}.chroma-dark .kn{color:#f92672}.chroma-dark .kp{color:#66d9ef}.chroma-dark .kr{color:#66d9ef}.chroma-dark .kt{color:#66d9ef}.chroma-dark .na{color:#a6e22e}.chroma-dark .nc{color:#a6e22e}.chroma-dark .no{color:#66d9ef}.chroma-dark .nd{color:#a6e22e}.chroma-dark .ne{color:#a6e22e}.chroma-dark .nf{color:#a6e22e}.chroma-dark .nx{color:#a6e22e}.chroma-dark .nt{color:#f92672}.chroma-dark .l{color:#ae81ff}.chroma-dark .ld{color:#e6db74}.chroma-dark .s{color:#e6db74}.chroma-dark .sa{color:#e6db74}.chroma-dark .sb{color:#e6db74}.chroma-dark .sc{color:#e6db74}.chroma-dark .dl{color:#e6db74}.chroma-dark .sd{color:#e6db74}.chroma-dark .s2{color:#e6db74}.chroma-dark .se{color:#ae81ff}.chroma-dark .sh{color:#e6db74}.chroma-dark .si{color:#e6db74}.chroma-dark .sx{color:#e6db74}.chroma-dark .sr{color:#e6db74}.chroma-dark .s1{color:#e6db74}.chroma-dark .ss{color:#e6db74}.chroma-dark .m{color:#ae81ff}.chroma-dark .mb{color:#ae81ff}.chroma-dark .mf{color:#ae81ff}.chroma-dark .mh{color:#ae81ff}.chroma-dark .mi{color:#ae81ff}.chroma-dark .il{color:#ae81ff}.chroma-dark .mo{color:#ae81ff}.chroma-dark .o{color:#f92672}.chroma-dark .ow{color:#f92672}.chroma-dark .c{color:#75715e}.chroma-dark .ch{color:#75715e}.chroma-dark .cm{color:#75715e}.chroma-dark .c1{color:#75715e}.chroma-dark .cs{color:#75715e}.chroma-dark .cp{color:#75715e}.chroma-dark .cpf{color:#75715e}.chroma-dark .gd{color:#f92672}.chroma-dark .gi{color:#a6e22e}.chroma-dark .gu{color:#75715e}.chroma-dark{color:var(--color-contrast-high);background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5)}@media (max-width: 740px){.main-inner{width:auto !important}.anchor-link{position:relative;transform:none;float:right}.menu{display:flex;justify-content:space-around;word-break:break-all}.menu-item{margin:0}}
+:root{--color-primary:hsl(220, 90%, 56%);--color-primary-h:220;--color-primary-s:90%;--color-primary-l:56%;--color-bg:hsl(0, 0%, 100%);--color-bg-h:0;--color-bg-s:0%;--color-bg-l:100%;--color-contrast-lower:hsl(0, 0%, 95%);--color-contrast-lower-h:0;--color-contrast-lower-s:0%;--color-contrast-lower-l:95%;--color-contrast-low:hsl(240, 1%, 83%);--color-contrast-low-h:240;--color-contrast-low-s:1%;--color-contrast-low-l:83%;--color-contrast-medium:hsl(240, 1%, 48%);--color-contrast-medium-h:240;--color-contrast-medium-s:1%;--color-contrast-medium-l:48%;--color-contrast-high:hsl(240, 4%, 20%);--color-contrast-high-h:240;--color-contrast-high-s:4%;--color-contrast-high-l:20%;--color-contrast-higher:hsl(240, 8%, 12%);--color-contrast-higher-h:240;--color-contrast-higher-s:8%;--color-contrast-higher-l:12%}[data-theme="dark"]{--color-primary:hsl(201, 65%, 62%);--color-primary-h:201;--color-primary-s:65%;--color-primary-l:62%;--color-bg:hsl(240, 8%, 12%);--color-bg-h:240;--color-bg-s:8%;--color-bg-l:12%;--color-contrast-lower:hsl(240, 6%, 19%);--color-contrast-lower-h:240;--color-contrast-lower-s:6%;--color-contrast-lower-l:19%;--color-contrast-low:hsl(240, 3%, 27%);--color-contrast-low-h:240;--color-contrast-low-s:3%;--color-contrast-low-l:27%;--color-contrast-medium:hsl(240, 1%, 57%);--color-contrast-medium-h:240;--color-contrast-medium-s:1%;--color-contrast-medium-l:57%;--color-contrast-high:hsl(0, 0%, 89%);--color-contrast-high-h:0;--color-contrast-high-s:0%;--color-contrast-high-l:89%;--color-contrast-higher:hsl(0, 0%, 100%);--color-contrast-higher-h:0;--color-contrast-higher-s:0%;--color-contrast-higher-l:100%}#theme-toggle{padding:1em;cursor:pointer;float:right;position:relative;z-index:4}[data-theme="dark"] img{filter:brightness(50%)}html,body{margin:0;width:100%;height:100%}body{font-size:20px;color:var(--color-contrast-high);background-color:var(--color-bg);overflow-wrap:break-word;word-wrap:break-word;line-height:1.618}.container{min-height:100%;min-width:100%;position:relative}.main{padding:2em 1em 15em;display:block}.main-inner{margin:0 auto;display:block}.icon{width:1em;height:1em;fill:currentColor;display:inline-block}svg{vertical-align:middle}h1,h2,h3,h4,h5,h6{margin:1.618em 0 1em;color:var(--color-contrast-higher)}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{text-decoration:none !important;color:var(--color-contrast-higher)}h1{font-size:2em}h2{font-size:1.8em}h3{font-size:1.6em}h4{font-size:1.4em}h5{font-size:1.2em}h6{font-size:1em}a{color:var(--color-contrast-high);text-decoration:none;transition:color .5s}a:hover{color:var(--color-primary)}::selection{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.3)}::-webkit-scrollbar{width:0.4em;height:0.2em}::-webkit-scrollbar-track{background-color:var(--color-bg)}::-webkit-scrollbar-thumb{background-color:var(--color-contrast-low)}::-webkit-scrollbar-thumb:hover{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5)}::-webkit-scrollbar-thumb:active{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.75)}[data-hide="true"]{display:none}[data-small-caps="true"] .post-body h1,[data-small-caps="true"] .post-body h2,[data-small-caps="true"] .post-body h3,[data-small-caps="true"] .post-body h4,[data-small-caps="true"] .post-body h5,[data-small-caps="true"] .post-body h6{font-variant:small-caps}[data-small-caps="true"] .contents-title{font-variant:small-caps}[data-align="justify"] .post-body p{text-align:justify;text-justify:distribute}[data-align="center"] .post-body p{text-align:center}[data-type="poetry"] .post-body{display:table;margin:0 auto}.list-title,.term-title,.list-year,.list-month,.post-title,.post-subtitle,.related-title,.post-nav,thead,dt{font-family:Comfortaa,sans-serif}.post-body h1,.post-body h2,.post-body h3,.post-body h4,.post-body h5,.post-body h6{font-family:Comfortaa,sans-serif}.contents-title{font-family:Comfortaa,sans-serif}code,pre,sup,.post-meta,.updated-badge,.post-gitinfo,.minimal-footer,.minimal-footer-about,.busuanzi-site-uv-and-pv{font-family:"Source Code Pro",monospace}body{font-family:"IBM Plex Serif",serif}.header{z-index:3;position:relative}.site-brand{text-align:center}.site-brand{background-image:linear-gradient(90deg, #f79533 0, #f37055 15%, #ef4e7b 30%, #a166ab 44%, #5073b8 58%, #1098ad 72%, #07b39b 86%, #6dba82 100%)}.brand{width:250px;height:100px;fill:#fff}.nav{z-index:3;position:relative}.menu{padding:0;margin:0;list-style:none;text-align:center;background:var(--color-contrast-lower);line-height:1.5;font-weight:500}.menu-item{display:inline-block;margin:0 1em}.menu-item a{color:var(--color-contrast-medium)}.menu-item a:hover{color:var(--color-primary)}.active a{color:var(--color-primary)}.menu-item-name{display:flex}.post-meta{color:var(--color-contrast-medium);font-size:80%;text-align:center;margin:20px 0}.post-meta a{color:var(--color-contrast-medium)}.post-meta a:hover{color:var(--color-primary)}.home .post-meta{margin:20px 0}.post-meta-item{margin:0.5em;display:inline-block}.post-meta-icon{fill:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.5);margin-bottom:0.3em}.single .main-inner{width:32em}.post-title{text-align:center}.post-subtitle{font-size:1.8em;text-align:center;font-weight:700;margin-top:-0.618em}.post-description{text-align:center;margin:20px 0;font-size:90%}.post-body{margin-top:5em !important}.post-body a{text-decoration:underline}.post p{margin:0 0 1em;line-height:1.618}.post img{display:block;margin:2em auto;max-width:100%;border:1px solid var(--color-contrast-lower);clear:both}.post video{display:block;max-width:100%;margin:2em auto;clear:both}.post sup{font-size:70%;vertical-align:super}.post sup a{text-decoration:none}.post ol,.post ul{padding-left:2em;line-height:1.618}.post hr{border:none;margin:2.427em 0 1.5em;text-align:center}.post hr::after{content:"···";letter-spacing:2em;padding-left:2em}blockquote{margin:2em 0;padding:0 1em;color:var(--color-contrast-medium);border-left:3px solid var(--color-contrast-low)}blockquote p{text-align:left !important}blockquote a{color:var(--color-contrast-medium)}blockquote a:hover{color:var(--color-primary)}.emphasis-point{font-weight:normal;text-emphasis:'•';-webkit-text-emphasis:'•';-moz-text-emphasis:'•';text-emphasis-position:under;-webkit-text-emphasis-position:under;-moz-text-emphasis-position:under}.drop-cap{float:left;font-size:62px;margin-right:12.36px;margin-top:10px;line-height:32.36px}.caption{display:block;text-align:center;margin:-1em 0 0;font-size:90%;color:var(--color-contrast-medium)}.contents{margin-top:5em}.contents ol{list-style:none;counter-reset:item}.contents ol li::before{content:counters(item, ".") ". ";counter-increment:item}ol.toc{padding:0;overflow:auto hidden;white-space:nowrap}.footnotes{font-size:90%;margin-top:100px}.footnotes hr{margin:0;height:1px;border:none;background-color:var(--color-contrast-medium)}.footnotes hr::after{content:none}.footnotes ol{margin:32.36px 0 0;padding:0 20px 0 40px}.anchor-link{position:absolute;transform:translate(-150%)}.anchor-icon{width:0.75em;height:0.75em;vertical-align:baseline}table{width:100%;border-collapse:collapse;border-spacing:0;border:1px solid var(--color-contrast-lower);margin:2em 0}thead{font-weight:700}th,td{font-size:0.9em;padding:0.4em;border:1px solid var(--color-contrast-lower)}table>tbody>tr:nth-of-type(odd){background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5)}table>tbody>tr:hover{background-color:var(--color-contrast-lower)}dt{font-weight:700}dd{margin-left:2em;text-align:left}code{padding:2.5px 5px;background-color:var(--color-contrast-lower);border-radius:3px;font-size:80%}pre{overflow:auto hidden;font-size:16px;margin:40px 0;padding:1em;line-height:1.618;background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.75)}pre code{background-color:unset;font-size:inherit;padding:0}.highlight{font-size:0.8em;margin:40px 0}.highlight pre{margin:0 !important;overflow:auto hidden;background-color:unset}.highlight th,.highlight td{font-size:inherit}.highlight table>tbody>tr:nth-of-type(odd){background-color:inherit}.highlight table>tbody>tr:hover{background-color:inherit}span.lnt{user-select:none;display:block;margin-right:-1em !important;padding:0 !important}.katex-display,mjx-container[jax="CHTML"][display="true"]{overflow:auto hidden;text-indent:0}:root{--anchor-opacity: 0}.anchor-link{opacity:var(--anchor-opacity);transition:all .25s}.post h1:hover,.post h2:hover,.post h3:hover,.post h4:hover,.post h5:hover,.post h6:hover,.post .anchor-link:hover{--anchor-opacity: 1}.footnote-icon{fill:hsla(var(--color-contrast-high-h), var(--color-contrast-high-s), var(--color-contrast-high-l), 0.5);transition:fill .5s}.footnote-icon:hover{fill:var(--color-primary)}[data-indent="true"] .contents-title{text-align:center}[data-indent="true"] .post-body p{text-indent:2em;margin:0}[data-indent="true"] .post-body .caption{text-indent:0;margin:0 0 1em}[data-indent="true"] .post-body blockquote{margin:1em 0;padding:0;border:none}[data-indent="true"] .post-body img,[data-indent="true"] .post-body video{margin:1em auto}[data-indent="true"] .post-body table{margin:1em 0}[data-indent="true"] .post-body pre,[data-indent="true"] .post-body .highlight{margin:20px 0}[data-indent="true"] .post-body h1,[data-indent="true"] .post-body h2,[data-indent="true"] .post-body h3,[data-indent="true"] .post-body h4,[data-indent="true"] .post-body h5,[data-indent="true"] .post-body h6{text-align:center}[data-indent="true"] .post-body .anchor-link{position:relative;transform:none;display:block;float:none}[data-indent="true"] .post-body ol,[data-indent="true"] .post-body ul{margin:0;list-style-position:inside}[data-indent="true"] .post-body ol p,[data-indent="true"] .post-body ul p{text-indent:0;display:inline-block}[data-indent="true"] .post-body .footnotes ol{margin:32.36px 0 0;list-style-position:outside}[data-indent="true"] .post-body .footnotes ol p{display:block}[data-indent="true"] .post-body dl{text-indent:2em}[data-indent="true"] .post-body dl dd{text-indent:0;margin-left:4em}[data-indent="true"] .post-body dl p{text-indent:0}.post-copyright{margin:0;list-style:none;margin-top:5em;padding:0.5em 1em;background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5);border-left:3px solid hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5);line-height:2}.copyright-item{line-height:1.5;margin:0.5em 0}.updated-badge-container{margin-top:5em;text-align:center}.updated-badge-left{fill:var(--color-contrast-low)}.updated-badge-right{fill:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5)}.related-posts{text-align:left;border:1px solid var(--color-contrast-lower);padding:0.6em 1em;line-height:2em;margin-top:5em}.related-title{font-size:1em;margin:0}.related-icon{float:right;margin-top:0.4em}.related-list{margin:0;padding:0;list-style:none}.related-link{line-height:1.5;display:inline-block}.post-tags{margin-top:100px;text-align:center;font-size:90%}.post-tags-link{color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.9);margin:0 0.5em;line-height:2;display:inline-block}.tag-icon{margin-right:0.3em;font-size:80%}.post-nav{list-style:none;padding:0;display:flex;justify-content:space-between;border-top:1px solid var(--color-contrast-lower);font-weight:700;margin-top:5em;padding-top:0.618em}.post-nav-prev{margin-right:auto;max-width:42%}.post-nav-next{margin-left:auto;text-align:right;max-width:42%}.list .main-inner{width:30em}.list-title{text-align:center}.list ul{list-style:none;padding:0}.list-item{line-height:2;position:relative;transition:border .5s;border-bottom:1px dashed var(--color-contrast-low);margin-top:1em;padding-bottom:0.5em;display:flex;align-items:baseline}.list-item:hover{border-bottom-color:var(--color-primary)}.list-item:hover ::before{background:var(--color-primary)}.list-item ::before{content:" ";position:absolute;left:0.618em;top:0.618em;width:6.66666667px;height:6.66666667px;background:var(--color-contrast-low);border-radius:50%;border:1px solid var(--color-bg);transition:background .5s;font-size:20px}.list-item-title{margin:0 0.618em 0 2em;font-size:1.2em;line-height:1.5}.list-item-time{margin:0 0.618em 0 2em;color:var(--color-contrast-medium);line-height:1.5}.list-year{display:flex;justify-content:space-between;align-items:baseline}.term-count{color:var(--color-contrast-medium);font-size:0.7em}.tree{margin-left:-2em;overflow:auto hidden;white-space:nowrap}.category-item{color:blue;font-size:1.2em}.category-item:hover{color:blueviolet}.category-count{color:var(--color-contrast-medium)}.tag-cloud{text-align:center}.tag-cloud-item{margin:10px;display:inline-block}.list-item-title{flex:1}.list-item-time{text-align:right;margin-left:1em}.back-to-top{position:fixed;right:0;z-index:1}.back-to-top a{display:block;padding:1em;color:var(--color-contrast-medium)}.back-to-top a:hover{color:var(--color-primary)}.back-to-top{bottom:-5em;transition:bottom 0.3s ease-in-out}.back-to-top.show{bottom:0}.footer{position:absolute;bottom:0;width:100%;font-size:90%;color:var(--color-contrast-medium)}.footer a{color:var(--color-contrast-medium)}.footer a:hover{color:var(--color-primary)}.footer-inner{padding:1em;text-align:center}.footer-icon{margin:0 0.25em 0.3em}.footer-icon{fill:#f06292}@keyframes heartbeat{0%,100%{transform:scale(1)}10%,30%{transform:scale(0.9)}20%,40%,50%,60%,70%,80%{transform:scale(1.1)}}.footer-icon{animation:heartbeat 1.33s ease-in-out infinite}.summary-title-link{color:var(--color-contrast-higher)}.summary{line-height:1.618;display:block}.read-more-container{text-align:center;margin-top:1.618em}.read-more-link{display:inline-block}.pagination{list-style:none;margin:5em 0 0;padding:0;display:flex;justify-content:space-between}.pagination-prev{margin-right:auto}.pagination-next{margin-left:auto;text-align:right}.fof::before{background-repeat:no-repeat;background-size:cover;background-position:50% 50%;content:" ";position:fixed;width:100%;height:100%;top:0;left:0;z-index:1}.fof .main-inner{background:rgba(0,0,0,0.25);min-height:100%;min-width:100%;position:absolute;z-index:3}.fof video{position:fixed;top:50%;left:50%;min-width:100%;min-height:100%;width:auto;height:auto;z-index:2;transform:translateX(-50%) translateY(-50%)}.fof h1{font-size:3rem;text-transform:uppercase;letter-spacing:0.3rem;text-align:center;top:15%;left:5%;right:5%;position:absolute;color:#fff;margin:0.67em 0}.fof .fof-footer{font-size:2rem;position:absolute;bottom:15%;left:10%;right:10%;text-align:center}.fof a{color:#eee}.fof a:hover{color:#fff}@media only screen and (max-device-width: 1024px){.fof #bgvid{display:none}}.fof::before{background-image:url()}.chroma{background-color:#ffffff}.chroma .err{color:#ff0000;background-color:#ffaaaa}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl{display:block;width:100%;background-color:#ffffcc}.chroma .lnt{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma .ln{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma .k{color:#0000aa}.chroma .kc{color:#0000aa}.chroma .kd{color:#0000aa}.chroma .kn{color:#0000aa}.chroma .kp{color:#0000aa}.chroma .kr{color:#0000aa}.chroma .kt{color:#00aaaa}.chroma .na{color:#1e90ff}.chroma .nb{color:#00aaaa}.chroma .nc{color:#00aa00}.chroma .no{color:#aa0000}.chroma .nd{color:#888888}.chroma .ni{color:#880000}.chroma .nf{color:#00aa00}.chroma .nn{color:#00aaaa}.chroma .nt{color:#1e90ff}.chroma .nv{color:#aa0000}.chroma .s{color:#aa5500}.chroma .sa{color:#aa5500}.chroma .sb{color:#aa5500}.chroma .sc{color:#aa5500}.chroma .dl{color:#aa5500}.chroma .sd{color:#aa5500}.chroma .s2{color:#aa5500}.chroma .se{color:#aa5500}.chroma .sh{color:#aa5500}.chroma .si{color:#aa5500}.chroma .sx{color:#aa5500}.chroma .sr{color:#009999}.chroma .s1{color:#aa5500}.chroma .ss{color:#0000aa}.chroma .m{color:#009999}.chroma .mb{color:#009999}.chroma .mf{color:#009999}.chroma .mh{color:#009999}.chroma .mi{color:#009999}.chroma .il{color:#009999}.chroma .mo{color:#009999}.chroma .ow{color:#0000aa}.chroma .c{color:#888888}.chroma .ch{color:#888888}.chroma .cm{color:#888888}.chroma .c1{color:#888888}.chroma .cs{color:#0000aa}.chroma .cp{color:#4c8317}.chroma .cpf{color:#4c8317}.chroma .gd{color:#aa0000}.chroma .gr{color:#aa0000}.chroma .gh{color:#000080}.chroma .gi{color:#00aa00}.chroma .go{color:#666666}.chroma .gp{color:#454545}.chroma .gu{color:#800080}.chroma .gt{color:#aa0000}.chroma .w{color:#999999}.chroma{color:var(--color-contrast-high);background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5)}.chroma-dark{color:#f8f8f2;background-color:#272822}.chroma-dark .err{color:#960050;background-color:#1e0010}.chroma-dark .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma-dark .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma-dark .hl{display:block;width:100%;background-color:#ffffcc}.chroma-dark .lnt{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma-dark .ln{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma-dark .k{color:#66d9ef}.chroma-dark .kc{color:#66d9ef}.chroma-dark .kd{color:#66d9ef}.chroma-dark .kn{color:#f92672}.chroma-dark .kp{color:#66d9ef}.chroma-dark .kr{color:#66d9ef}.chroma-dark .kt{color:#66d9ef}.chroma-dark .na{color:#a6e22e}.chroma-dark .nc{color:#a6e22e}.chroma-dark .no{color:#66d9ef}.chroma-dark .nd{color:#a6e22e}.chroma-dark .ne{color:#a6e22e}.chroma-dark .nf{color:#a6e22e}.chroma-dark .nx{color:#a6e22e}.chroma-dark .nt{color:#f92672}.chroma-dark .l{color:#ae81ff}.chroma-dark .ld{color:#e6db74}.chroma-dark .s{color:#e6db74}.chroma-dark .sa{color:#e6db74}.chroma-dark .sb{color:#e6db74}.chroma-dark .sc{color:#e6db74}.chroma-dark .dl{color:#e6db74}.chroma-dark .sd{color:#e6db74}.chroma-dark .s2{color:#e6db74}.chroma-dark .se{color:#ae81ff}.chroma-dark .sh{color:#e6db74}.chroma-dark .si{color:#e6db74}.chroma-dark .sx{color:#e6db74}.chroma-dark .sr{color:#e6db74}.chroma-dark .s1{color:#e6db74}.chroma-dark .ss{color:#e6db74}.chroma-dark .m{color:#ae81ff}.chroma-dark .mb{color:#ae81ff}.chroma-dark .mf{color:#ae81ff}.chroma-dark .mh{color:#ae81ff}.chroma-dark .mi{color:#ae81ff}.chroma-dark .il{color:#ae81ff}.chroma-dark .mo{color:#ae81ff}.chroma-dark .o{color:#f92672}.chroma-dark .ow{color:#f92672}.chroma-dark .c{color:#75715e}.chroma-dark .ch{color:#75715e}.chroma-dark .cm{color:#75715e}.chroma-dark .c1{color:#75715e}.chroma-dark .cs{color:#75715e}.chroma-dark .cp{color:#75715e}.chroma-dark .cpf{color:#75715e}.chroma-dark .gd{color:#f92672}.chroma-dark .gi{color:#a6e22e}.chroma-dark .gu{color:#75715e}.chroma-dark{color:var(--color-contrast-high);background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5)}@media (max-width: 740px){.main-inner{width:auto !important}.anchor-link{position:relative;transform:none;float:right}.menu{display:flex;justify-content:space-around;word-break:break-all}.menu-item{margin:0}}
diff --git a/exampleSite/resources/_gen/assets/scss/scss/main.scss_b04c21e44835e7dcdc8cb03d103b5ef1.json b/exampleSite/resources/_gen/assets/scss/scss/main.scss_b04c21e44835e7dcdc8cb03d103b5ef1.json
index 3c52d0e..8240817 100644
--- a/exampleSite/resources/_gen/assets/scss/scss/main.scss_b04c21e44835e7dcdc8cb03d103b5ef1.json
+++ b/exampleSite/resources/_gen/assets/scss/scss/main.scss_b04c21e44835e7dcdc8cb03d103b5ef1.json
@@ -1 +1 @@
-{"Target":"css/meme.min.4b148ff5a3ef5b23cc4b3535a90689d12e6a69919d40258fc65e3a9c4c5697a9.css","MediaType":"text/css","Data":{"Integrity":"sha256-SxSP9aPvWyPMSzU1qQaJ0S5qaZGdQCWPxl46nExWl6k="}} \ No newline at end of file
+{"Target":"css/meme.min.ede3a5876aeee960ad67eb4ca39c46022b533542ba2769cedf49996a1566ff1f.css","MediaType":"text/css","Data":{"Integrity":"sha256-7eOlh2ru6WCtZ+tMo5xGAitTNUK6J2nO30mZahVm/x8="}} \ No newline at end of file
diff --git a/layouts/index.sectionsatom.xml b/layouts/index.sectionsatom.xml
index 8adee4e..e97c68a 100644
--- a/layouts/index.sectionsatom.xml
+++ b/layouts/index.sectionsatom.xml
@@ -57,7 +57,10 @@
{{- end }}
{{- partial "components/summary.html" $page -}}
{{- $summary := .Description | default ($page.Scratch.Get "summary" | plainify | replaceRE `\n……` ``) -}}
- {{ printf `<summary type="html"><![CDATA[%s]]></summary>` ($summary | markdownify | htmlUnescape) | safeHTML }}
+ {{- $raw := $summary -}}
+ {{- partial "components/markdownify.html" (dict "Deliver" $page "raw" $raw) -}}
+ {{- $summary := $page.Scratch.Get "Content" -}}
+ {{ printf `<summary type="html"><![CDATA[%s]]></summary>` ($summary | htmlUnescape) | safeHTML }}
{{ if $.Site.Params.includeContent }}
{{ printf `<content type="html"><![CDATA[%s]]></content>` .Content | safeHTML }}
{{ end }}
diff --git a/layouts/index.sectionsrss.xml b/layouts/index.sectionsrss.xml
index d5ac9c6..7891ef4 100644
--- a/layouts/index.sectionsrss.xml
+++ b/layouts/index.sectionsrss.xml
@@ -52,7 +52,10 @@
{{ else }}
{{- partial "components/summary.html" $page -}}
{{- $summary := .Description | default ($page.Scratch.Get "summary" | plainify | replaceRE `\n……` ``) -}}
- {{ printf `<description><![CDATA[%s]]></description>` ($summary | markdownify | htmlUnescape) | safeHTML }}
+ {{- $raw := $summary -}}
+ {{- partial "components/markdownify.html" (dict "Deliver" $page "raw" $raw) -}}
+ {{- $summary := $page.Scratch.Get "Content" -}}
+ {{ printf `<description><![CDATA[%s]]></description>` ($summary | htmlUnescape) | safeHTML }}
{{ end }}
<!-- Sections -->
{{ if eq $.Site.Params.categoryBy "sections" }}
diff --git a/layouts/partials/components/auto-detect-images.html b/layouts/partials/components/auto-detect-images.html
index 808404e..9091118 100644
--- a/layouts/partials/components/auto-detect-images.html
+++ b/layouts/partials/components/auto-detect-images.html
@@ -2,7 +2,7 @@
<!-- https://gohugo.io/functions/replacere/ -->
<!-- https://regex101.com/ -->
{{- if and .IsPage (in .Site.Params.mainSections .Section) -}}
- {{- $imgs := findRE `<img src="/?([^"]+)` .Content -}}
+ {{- $imgs := findRE `<img src="/?([^"]+)` .Content | uniq -}}
{{- with $imgs -}}
{{- $.Scratch.Delete "imgsURL" -}}
{{- range . -}}
diff --git a/layouts/partials/components/content.html b/layouts/partials/components/content.html
index 797745c..f9e4862 100644
--- a/layouts/partials/components/content.html
+++ b/layouts/partials/components/content.html
@@ -1,5 +1,6 @@
-{{- $Content := .Content -}}
-{{- .Scratch.Set "Content" $Content -}}
+{{- $Deliver := . -}}
+{{- $raw := .RawContent -}}
+{{- partial "components/markdownify.html" (dict "Deliver" . "raw" $raw) -}}
<!-- Link Headings to TOC -->
{{- $Content := .Scratch.Get "Content" -}}
@@ -67,34 +68,25 @@
{{- if ne .Type "poetry" -}}
{{- if and .Site.Params.enableDropCap (.Params.dropCapAfterHr | default .Site.Params.enableDropCapAfterHr) -}}
{{- if .Params.deleteHrBeforeDropCap | default .Site.Params.deleteHrBeforeDropCap -}}
- {{- $replacement := `$2 style="text-indent:0"$3<span class="drop-cap">$4</span>$5` -}}
+ {{- $replacement := `$3 style="text-indent:0"$4<span class="drop-cap">$5</span>$6` -}}
{{- $.Scratch.Set "replacement" $replacement -}}
{{- else -}}
- {{- $replacement := `$1$2 style="text-indent:0"$3<span class="drop-cap">$4</span>$5` -}}
+ {{- $replacement := `$1$3 style="text-indent:0"$4<span class="drop-cap">$5</span>$6` -}}
{{- $.Scratch.Set "replacement" $replacement -}}
{{- end -}}
{{- $replacement := .Scratch.Get "replacement" -}}
- {{- $regexPatternDropCapAfterHr := `(\n<hr />\n)(\n<p)(>)([^<])(.+(</p>|\n))` -}}
+ {{- $regexPatternDropCapAfterHr := `(\n(<hr />|<hr>))(\n\n?<p)(>)([^<])(.+(</p>|\n))` -}}
{{- $regexReplacementDropCapAfterHr := $replacement -}}
{{- $Content := $Content | replaceRE $regexPatternDropCapAfterHr $regexReplacementDropCapAfterHr | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
{{- end -}}
-<!-- New Markdown Syntax: Emphasis Point `..text..` -->
-{{- $Content := .Scratch.Get "Content" -}}
-{{- if .Site.Params.enableEmphasisPoint -}}
- {{- $regexPatternEmphasisPoint := `([^\.\x60])\.\.([^\.\s\n\/\\]+)\.\.([^\.\x60])` -}}
- {{- $regexReplacementEmphasisPoint := `$1<strong class="emphasis-point">$2</strong>$3` -}}
- {{- $Content := $Content | replaceRE $regexPatternEmphasisPoint $regexReplacementEmphasisPoint | safeHTML -}}
- {{- .Scratch.Set "Content" $Content -}}
-{{- end -}}
-
<!-- Footnote Ref with Square Brackets `[]` -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if .Site.Params.squareBrackets -}}
- {{- $regexPatternFootnoteRef := `(<sup class="footnote-ref" id="fnref:\d+"><a href="#fn:\d+">)(\d+)(</a></sup>)` -}}
+ {{- $regexPatternFootnoteRef := `(<sup id="fnref:\d+"><a href="#fn:\d+"[^>]+>)(\d+)(</a></sup>)` -}}
{{- $regexReplacementFootnoteRef := `$1[$2]$3` -}}
{{- $Content := $Content | replaceRE $regexPatternFootnoteRef $regexReplacementFootnoteRef | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
@@ -110,8 +102,8 @@
<!-- Delete Footnote `<hr />` -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if .Site.Params.insertHrBySelf -}}
- {{- $regexPatternDeleteHr := `<hr />\n(<div class="footnotes">)` -}}
- {{- $regexReplacementDeleteHr := `$1` -}}
+ {{- $regexPatternDeleteHr := `(<hr />|<hr>)\n(<section class="footnotes" role="doc-endnotes">)` -}}
+ {{- $regexReplacementDeleteHr := `$2` -}}
{{- $Content := $Content | replaceRE $regexPatternDeleteHr $regexReplacementDeleteHr | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
@@ -120,9 +112,9 @@
{{- $Content := .Scratch.Get "Content" -}}
{{- with .Site.Params.footnoteReturnLinkIcon -}}
{{- $icon := (replace (index $.Site.Data.SVG .) "icon" "icon footnote-icon") -}}
- {{- $replacement := (printf `${1}%v</$3` $icon) | safeHTML -}}
+ {{- $replacement := (printf `${1}%s$3` $icon) | safeHTML -}}
- {{- $regexPatternfootnoteReturnLinkIcon := `(href="#fnref[^>]+>)([^a]+)(.+)` -}}
+ {{- $regexPatternfootnoteReturnLinkIcon := `(href="#fnref[^>]+>)([^<]+)(.+)` -}}
{{- $regexReplacementfootnoteReturnLinkIcon := $replacement -}}
{{- $Content := $Content | replaceRE $regexPatternfootnoteReturnLinkIcon $regexReplacementfootnoteReturnLinkIcon | safeHTML -}}
{{- $.Scratch.Set "Content" $Content -}}
@@ -149,7 +141,7 @@
{{- $Content := .Scratch.Get "Content" -}}
{{- if and .Site.Params.enableImageHost (eq hugo.Environment "production") -}}
{{- $hostURL := .Site.Params.imageHostURL -}}
- {{- $temps := findRE `<(img) src="/?([^":]+)` $Content -}}
+ {{- $temps := findRE `<(img) src="/?([^":]+)` $Content | uniq -}}
{{- with $temps -}}
{{- range . -}}
{{- if not (in (slice "http" "ttps") (substr . -1 4)) -}}
@@ -167,7 +159,7 @@
{{- $Content := .Scratch.Get "Content" -}}
{{- if and .Site.Params.enableVideoHost (eq hugo.Environment "production") -}}
{{- $hostURL := .Site.Params.videoHostURL -}}
- {{- $temps := findRE `<(video) src="/?([^":]+)` $Content -}}
+ {{- $temps := findRE `<(video) src="/?([^":]+)` $Content | uniq -}}
{{- with $temps -}}
{{- range . -}}
{{- if not (in (slice "http" "ttps") (substr . -1 4)) -}}
@@ -181,18 +173,11 @@
{{- end -}}
{{- end -}}
-<!-- Task List -->
-{{- $Content := .Scratch.Get "Content" -}}
-{{- $regexPatternTaskList := `(<ol |<ul )(class="task-list">\n<li><label>)` -}}
-{{- $regexReplacementTaskList := `${1}style="list-style:none" $2` -}}
-{{- $Content := $Content | replaceRE $regexPatternTaskList $regexReplacementTaskList | safeHTML -}}
-{{- .Scratch.Set "Content" $Content -}}
-
<!-- Paragraph Indent -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if ne .Type "poetry" -}}
{{- if (and .Site.Params.enableParagraphIndent .Params.indent) | default (and .Site.Params.enableParagraphIndent (eq .Site.Params.paragraphStyle "indent")) -}}
- {{- $regexPatternIndent := `(<p)(>)(.+<br />)` -}}
+ {{- $regexPatternIndent := `(</p>\n<p)(>)(.+(<br />|<br>))` -}}
{{- $regexReplacementIndent := `$1 style="text-indent:0;padding-left:2em;margin:1em 0"$2$3` -}}
{{- $Content := $Content | replaceRE $regexPatternIndent $regexReplacementIndent | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
diff --git a/layouts/partials/components/markdownify.html b/layouts/partials/components/markdownify.html
new file mode 100644
index 0000000..f31a0b1
--- /dev/null
+++ b/layouts/partials/components/markdownify.html
@@ -0,0 +1,59 @@
+{{- $Deliver := .Deliver -}}
+{{- $raw := .raw -}}
+
+{{- $Deliver.Scratch.Set "Content" $raw -}}
+
+{{- $enableEmoji := replaceRE `enableEmoji = (.+)` `$1` (delimit (readFile "config.toml" | findRE `enableEmoji = (.+)` | uniq) "") -}}
+
+<!-- Emoji -->
+{{- $Content := $Deliver.Scratch.Get "Content" -}}
+{{- if eq $enableEmoji "true" -}}
+ {{- $Content := $Content | emojify -}}
+ {{- $Deliver.Scratch.Set "Content" $Content -}}
+{{- end -}}
+
+<!-- LaTeX -->
+{{- $Content := $Deliver.Scratch.Get "Content" -}}
+{{- if $Deliver.Site.Params.compatibleWithLaTeX -}}
+ {{- if or ($Deliver.Params.katex | default $Deliver.Site.Params.enableKaTeX) ($Deliver.Params.mathjax | default $Deliver.Site.Params.enableMathJax) -}}
+ {{- $regexLaTeX := `([^\$]|\n)\$(.+)\$` -}}
+ {{- $replacementLaTeX := `$1<span>$$${2}$$</span>` -}}
+ {{- $Content := $Content | replaceRE $regexLaTeX $replacementLaTeX -}}
+
+ {{- $regexLaTeX := `\$\$((.|\s)[^\$]+)\$\$` -}}
+ {{- $replacementLaTeX := `<div>$$$$${1}$$$$</div>` -}}
+ {{- $Content := $Content | replaceRE $regexLaTeX $replacementLaTeX -}}
+
+ {{- $Deliver.Scratch.Set "Content" $Content -}}
+ {{- end -}}
+{{- end -}}
+
+<!-- New Markdown Syntax: Emphasis Point `..text..` -->
+{{- $Content := $Deliver.Scratch.Get "Content" -}}
+{{- if $Deliver.Site.Params.enableEmphasisPoint -}}
+ {{- $regexPatternEmphasisPoint := `([^\.\x60])\.\.([^\.\s\n\/\\]+)\.\.([^\.\x60])` -}}
+ {{- $regexReplacementEmphasisPoint := `$1<strong class="emphasis-point">$2</strong>$3` -}}
+ {{- $Content := $Content | replaceRE $regexPatternEmphasisPoint $regexReplacementEmphasisPoint | safeHTML -}}
+ {{- $Deliver.Scratch.Set "Content" $Content -}}
+{{- end -}}
+
+<!-- Markdown -->
+{{- $Content := $Deliver.Scratch.Get "Content" -}}
+{{- $Content := $Content | markdownify -}}
+{{- $Deliver.Scratch.Set "Content" $Content -}}
+
+<!-- External Links -->
+{{- $Content := $Deliver.Scratch.Get "Content" -}}
+{{- if $Deliver.Site.Params.hrefTargetBlank -}}
+ {{- $temps := findRE `(<a href="[^"]+")` $Content | uniq -}}
+ {{- with $temps -}}
+ {{- range . -}}
+ {{- if eq (substr . 9 4) "http" -}}
+ {{- $raw := replaceRE `(<a href="[^"]+")` `$1` . -}}
+ {{- $replacement := printf `%s target="_blank" rel="noopener"` $raw -}}
+ {{- $Content := ($Deliver.Scratch.Get "Content") | replaceRE . $replacement | safeHTML -}}
+ {{- $Deliver.Scratch.Set "Content" $Content -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+{{- end -}} \ No newline at end of file
diff --git a/layouts/partials/components/open-graph.html b/layouts/partials/components/open-graph.html
index b4d5240..1545f1c 100644
--- a/layouts/partials/components/open-graph.html
+++ b/layouts/partials/components/open-graph.html
@@ -32,7 +32,7 @@
{{- $author := ($Deliver.Scratch.Get "author") -}}
<!-- languageCode -->
{{- if $Deliver.Site.IsMultiLingual -}}
- {{- $languageCode := readFile "config.toml" | findRE `languageCode = "([^"]+)` -}}
+ {{- $languageCode := readFile "config.toml" | findRE `languageCode = "([^"]+)` | uniq -}}
{{- with $languageCode -}}
{{- $Deliver.Scratch.Delete "languageCode" -}}
{{- range . -}}
diff --git a/layouts/partials/components/toc.html b/layouts/partials/components/toc.html
index 9e3398c..ffbed6f 100644
--- a/layouts/partials/components/toc.html
+++ b/layouts/partials/components/toc.html
@@ -1,19 +1,18 @@
{{- $toc := .TableOfContents -}}
-{{- $regexPatternTOC := `<nav id="TableOfContents">((.|\s)+)</nav>` -}}
-{{- $regexReplacementTOC := `<nav class="contents">$1</nav>` -}}
+<!-- Change TOC Attribute -->
+{{- $regexPatternTOC := `<nav id="TableOfContents">` -}}
+{{- $regexReplacementTOC := `<nav class="contents">` -}}
{{- $toc := $toc | replaceRE $regexPatternTOC $regexReplacementTOC | safeHTML -}}
-{{- $regexPatternTOC := `(</?)ul>` -}}
-{{- $regexReplacementTOC := `${1}ol>` -}}
-{{- $toc := $toc | replaceRE $regexPatternTOC $regexReplacementTOC | safeHTML -}}
-
-{{- $regexPatternTOC := `(<nav class="contents">\n)<ol>` -}}
+<!-- Inject Class Attribute -->
+{{- $regexPatternTOC := `(<nav class="contents">\n.+)<ol>` -}}
{{- $regexReplacementTOC := `$1<ol class="toc">` -}}
{{- $toc := $toc | replaceRE $regexPatternTOC $regexReplacementTOC | safeHTML -}}
+<!-- Inject TOC Title -->
{{- if .Site.Params.displayTOCTitle -}}
- {{- $regexPatternTOC := `(<nav class="contents">\n)(<ol class="toc">)` -}}
+ {{- $regexPatternTOC := `(<nav class="contents">\n.+)(<ol class="toc">)` -}}
{{- $regexReplacementTOC := (printf `$1<h2 id="contents" class="contents-title">%s</h2>$2` (i18n "tocTitle")) -}}
{{- $toc := $toc | replaceRE $regexPatternTOC $regexReplacementTOC | safeHTML -}}
{{- .Scratch.Set "toc" $toc -}}
@@ -28,12 +27,5 @@
{{- .Scratch.Set "toc" $toc -}}
{{ end }}
-<!-- Delete Useless First Level When Post is Not Start With Heading 1 -->
{{- $toc := .Scratch.Get "toc" | default $toc -}}
-{{- $regexPatternTOC := `(<ol class="toc">)\n<li>\n<ol>(([\n].+)*)\n</ol></li>(\n</ol>)` -}}
-{{- $regexReplacementTOC := `$1$2$4` -}}
-{{- $toc := $toc | replaceRE $regexPatternTOC $regexReplacementTOC | safeHTML -}}
-{{- .Scratch.Set "toc" $toc -}}
-
-{{- $toc := .Scratch.Get "toc" -}}
{{- .Scratch.Set "toc" $toc -}} \ No newline at end of file
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
index 7c1e760..6abb8fe 100644
--- a/layouts/partials/footer.html
+++ b/layouts/partials/footer.html
@@ -1,3 +1,4 @@
+{{- $Deliver := . -}}
{{ if and .Site.Params.enableFooter (not (and .IsHome (in (slice "poetry" "footage") .Site.Params.homeLayout))) }}
<footer id="footer" class="footer">
<div class="footer-inner">
@@ -25,15 +26,24 @@
<div class="site-info">{{ printf `%s%s%s%s` $siteInfoCopyright $siteInfoCreatedYear $siteInfoIcon .Site.Author.name | safeHTML }}</div>
{{- if .Site.Params.displayPoweredBy }}
- <div class="powered-by">{{ printf `Powered by [Hugo](https://github.com/gohugoio/hugo) | Theme is [MemE](https://github.com/reuixiy/hugo-theme-meme)` | markdownify | safeHTML }}</div>
+ {{- $raw := `Powered by [Hugo](https://github.com/gohugoio/hugo) | Theme is [MemE](https://github.com/reuixiy/hugo-theme-meme)` -}}
+ {{- partial "components/markdownify.html" (dict "Deliver" $Deliver "raw" $raw) -}}
+ {{- $Content := .Scratch.Get "Content" -}}
+ <div class="powered-by">{{ $Content | safeHTML }}</div>
{{- end }}
{{- if .Site.Params.displaySiteCopyright }}
- <div class="site-copyright">{{ .Site.Copyright | markdownify | safeHTML }}</div>
+ {{- $raw := .Site.Copyright -}}
+ {{- partial "components/markdownify.html" (dict "Deliver" $Deliver "raw" $raw) -}}
+ {{- $Content := .Scratch.Get "Content" -}}
+ <div class="site-copyright">{{ $Content | safeHTML }}</div>
{{- end }}
{{- with .Site.Params.customFooter }}
- <div class="custom-footer">{{ . | markdownify | safeHTML }}</div>
+ {{- $raw := . -}}
+ {{- partial "components/markdownify.html" (dict "Deliver" $Deliver "raw" $raw) -}}
+ {{- $Content := $Deliver.Scratch.Get "Content" -}}
+ <div class="custom-footer">{{ $Content | safeHTML }}</div>
{{- end }}
{{- if and .Site.Params.displayBusuanziSiteUVAndPV (eq hugo.Environment "production") }}
diff --git a/layouts/partials/menu.html b/layouts/partials/menu.html
index 0b55340..e233001 100644
--- a/layouts/partials/menu.html
+++ b/layouts/partials/menu.html
@@ -10,7 +10,7 @@
{{ range .Site.Menus.main }}
<li class="menu-item{{ if or ($currentPage.IsMenuCurrent "main" .) ($currentPage.HasMenuCurrent "main" .) }} active{{ end }}">
{{- $linkType := (string .Pre) -}}
- <a href="{{ .URL }}"{{ if eq $linkType "external" }} target="_blank" rel="external"{{ end }}>
+ <a href="{{ .URL }}"{{ if eq $linkType "external" }} target="_blank" rel="external noopener"{{ end }}>
{{- $iconName := (string .Post) -}}
{{- $icon := (index $.Site.Data.SVG $iconName) -}}
{{- printf `%s` (replace $icon "icon" "icon menu-item-icon") | safeHTML -}}
diff --git a/layouts/partials/minimal-footer-about.html b/layouts/partials/minimal-footer-about.html
index 95c6751..91e20e8 100644
--- a/layouts/partials/minimal-footer-about.html
+++ b/layouts/partials/minimal-footer-about.html
@@ -7,7 +7,7 @@
{{- $linkType := (string .Pre) -}}
{{- $iconName := (string .Post) -}}
{{- $icon := (index $.Site.Data.SVG $iconName) -}}
- <a href="{{ .URL }}"{{ if eq $linkType "external" }} target="_blank" rel="external"{{ end }}>{{ replace $icon "icon" (printf `icon %s` .Identifier) | safeHTML }}{{ .Name }}</a>
+ <a href="{{ .URL }}"{{ if eq $linkType "external" }} target="_blank" rel="external noopener"{{ end }}>{{ replace $icon "icon" (printf `icon %s` .Identifier) | safeHTML }}{{ .Name }}</a>
{{- if lt $index $length -}}
{{- print " " -}}
{{- end -}}
@@ -21,7 +21,7 @@
{{- $linkType := (string .Pre) -}}
{{- $iconName := (string .Post) -}}
{{- $icon := (index $.Site.Data.SVG $iconName) -}}
- <a href="{{ .URL }}"{{ if eq $linkType "external" }} target="_blank" rel="external"{{ end }}>{{ replace $icon "icon" (printf `icon %s` .Identifier) | safeHTML }}{{ .Name }}</a>
+ <a href="{{ .URL }}"{{ if eq $linkType "external" }} target="_blank" rel="external noopener"{{ end }}>{{ replace $icon "icon" (printf `icon %s` .Identifier) | safeHTML }}{{ .Name }}</a>
{{- if lt $index $length -}}
{{- print " " -}}
{{- end -}}
diff --git a/layouts/partials/page/home-footage.html b/layouts/partials/page/home-footage.html
index 7cc7a60..1b3682f 100644
--- a/layouts/partials/page/home-footage.html
+++ b/layouts/partials/page/home-footage.html
@@ -26,7 +26,7 @@
{{- $linkType := (string .Pre) -}}
{{- $iconName := (string .Post) -}}
{{- $icon := (index $.Site.Data.SVG $iconName) -}}
- <a href="{{ .URL }}"{{ if eq $linkType "external" }} target="_blank" rel="external"{{ end }}>{{ replace $icon "icon" (printf `icon %s` .Identifier) | safeHTML }}{{ .Name }}</a>
+ <a href="{{ .URL }}"{{ if eq $linkType "external" }} target="_blank" rel="external noopener"{{ end }}>{{ replace $icon "icon" (printf `icon %s` .Identifier) | safeHTML }}{{ .Name }}</a>
{{- if lt $index $length -}}
{{- $.Site.Params.homeLinksDelimiter -}}
{{- end -}}
diff --git a/layouts/partials/page/home-poetry.html b/layouts/partials/page/home-poetry.html
index a6381a0..e71681a 100644
--- a/layouts/partials/page/home-poetry.html
+++ b/layouts/partials/page/home-poetry.html
@@ -1,7 +1,11 @@
+{{- $Deliver := . -}}
<main class="home">
<div class="poetry">
{{ range .Site.Params.homePoetry }}
- <p>{{ . | markdownify }}</p>
+ {{- $raw := . -}}
+ {{- partial "components/markdownify.html" (dict "Deliver" $Deliver "raw" $raw) -}}
+ {{- $Content := $Deliver.Scratch.Get "Content" -}}
+ <p>{{ $Content | safeHTML }}</p>
{{ end }}
</div>
<div class="links">
diff --git a/layouts/partials/post-copyright.html b/layouts/partials/post-copyright.html
index 9ae2615..a66e17e 100644
--- a/layouts/partials/post-copyright.html
+++ b/layouts/partials/post-copyright.html
@@ -1,22 +1,26 @@
+{{- $Deliver := . -}}
{{ if and .Site.Params.enablePostCopyright (.Params.displayCopyright | default .Site.Params.displayPostCopyright) }}
{{ partial "components/author.html" . }}
{{ $author := .Scratch.Get "author" }}
{{ with $author.name }}
<ul class="post-copyright">
- <li class="copyright-item author">{{ with $author.website }}{{ printf `%s<a href="%s" target="_blank">%s</a>` (i18n "copyrightAuthor") . $author.name | safeHTML }}{{ else }}{{ printf `%s%s` (i18n "copyrightAuthor") $author.name }}{{ end }}</li>
+ <li class="copyright-item author">{{ with $author.website }}{{ printf `%s<a href="%s" target="_blank" rel="noopener">%s</a>` (i18n "copyrightAuthor") . $author.name | safeHTML }}{{ else }}{{ printf `%s%s` (i18n "copyrightAuthor") $author.name }}{{ end }}</li>
{{ if $.Params.original | default $.Site.Params.original }}
{{ $url := urls.Parse $.Permalink }}
{{ $decodedPath := $url.Path }}
{{ $baseURLWithLangFix := (strings.TrimSuffix "/" (print `/` | absLangURL)) }}
{{ $decodedPermalink := (printf `%s%s` $baseURLWithLangFix $decodedPath) }}
- <li class="copyright-item link">{{ printf `%s<a href="%s" target="_blank">%s</a>` (i18n "copyrightLink") $.RelPermalink $decodedPermalink | safeHTML }}</li>
+ <li class="copyright-item link">{{ printf `%s<a href="%s" target="_blank" rel="noopener">%s</a>` (i18n "copyrightLink") $.RelPermalink $decodedPermalink | safeHTML }}</li>
{{ else }}
{{ with $.Params.link }}
- <li class="copyright-item link">{{ printf `%s<a href="%s" target="_blank">%s</a>` (i18n "copyrightLink") . . | safeHTML }}</li>
+ <li class="copyright-item link">{{ printf `%s<a href="%s" target="_blank" rel="noopener">%s</a>` (i18n "copyrightLink") . . | safeHTML }}</li>
{{ end }}
{{ end }}
{{ with $author.copyright }}
- <li class="copyright-item license">{{ printf `%s%s` (i18n "copyrightLicense") (. | markdownify) | safeHTML }}</li>
+ {{- $raw := . -}}
+ {{- partial "components/markdownify.html" (dict "Deliver" $Deliver "raw" $raw) -}}
+ {{- $Content := $Deliver.Scratch.Get "Content" -}}
+ <li class="copyright-item license">{{ printf `%s%s` (i18n "copyrightLicense") $Content | safeHTML }}</li>
{{ end }}
</ul>
{{ end }}
diff --git a/layouts/partials/post-gitinfo.html b/layouts/partials/post-gitinfo.html
index 53d692d..c08fe20 100644
--- a/layouts/partials/post-gitinfo.html
+++ b/layouts/partials/post-gitinfo.html
@@ -7,7 +7,7 @@
{{ $icon := (replace (index .Site.Data.SVG .Site.Params.gitIcon) "icon" "icon git-icon") }}
<div class="gitinfo-item commit">
{{- with .Site.Params.repoURL -}}
- {{- $commit := (printf `<a href="%s/commit/%s" target="_blank">%s%s</a>` . $.GitInfo.Hash $icon $.GitInfo.AbbreviatedHash) -}}
+ {{- $commit := (printf `<a href="%s/commit/%s" target="_blank" rel="noopener">%s%s</a>` . $.GitInfo.Hash $icon $.GitInfo.AbbreviatedHash) -}}
{{- $.Scratch.Set "commit" $commit -}}
{{- else -}}
{{- $.Scratch.Set "commit" $.GitInfo.AbbreviatedHash -}}
@@ -29,7 +29,7 @@
{{ if .Site.Params.displayFeedback }}
{{ with .Site.Params.repoURL }}
{{ $icon := (replace (index $.Site.Data.SVG $.Site.Params.feedbackIcon) "icon" "icon feedback-icon") }}
- <div class="gitinfo-item feedback">{{ printf `<a href="%s/issues" target="_blank">%s%s</a>` . $icon $.Site.Params.feedbackText | safeHTML }}</div>
+ <div class="gitinfo-item feedback">{{ printf `<a href="%s/issues" target="_blank" rel="noopener">%s%s</a>` . $icon $.Site.Params.feedbackText | safeHTML }}</div>
{{ end }}
{{ end }}
{{ if .Site.Params.displayEditLink }}
@@ -37,7 +37,7 @@
{{ $icon := (replace (index $.Site.Data.SVG $.Site.Params.editIcon) "icon" "icon edit-icon") }}
{{ $contentDir := $.Site.Params.contentDir }}
{{ $content := (cond $.Site.IsMultiLingual (printf `/%s/` $contentDir) (printf `/content/`)) }}
- <div class="gitinfo-item edit">{{ printf `<a href="%s%s%s" target="_blank">%s%s</a>` . $content $.Path $icon $.Site.Params.editText | safeHTML }}</div>
+ <div class="gitinfo-item edit">{{ printf `<a href="%s%s%s" target="_blank" rel="noopener">%s%s</a>` . $content $.Path $icon $.Site.Params.editText | safeHTML }}</div>
{{ end }}
{{ end }}
</div>
diff --git a/layouts/partials/post.html b/layouts/partials/post.html
index 330420d..cdb6604 100644
--- a/layouts/partials/post.html
+++ b/layouts/partials/post.html
@@ -1,3 +1,4 @@
+{{- $Deliver := . -}}
<main class="main single" id="main">
<div class="main-inner">
@@ -13,12 +14,18 @@
<h1 class="post-title">{{ .Title }}</h1>
{{ with .Params.subtitle }}
- <div class="post-subtitle">{{ . | markdownify | safeHTML }}</div>
+ {{- $raw := . -}}
+ {{- partial "components/markdownify.html" (dict "Deliver" $Deliver "raw" $raw) -}}
+ {{- $Content := $Deliver.Scratch.Get "Content" -}}
+ <div class="post-subtitle">{{ $Content | safeHTML }}</div>
{{ end }}
{{ if .Site.Params.displayPostDescription }}
{{ with .Params.description }}
- <div class="post-description">{{ . | markdownify | safeHTML }}</div>
+ {{- $raw := . -}}
+ {{- partial "components/markdownify.html" (dict "Deliver" $Deliver "raw" $raw) -}}
+ {{- $Content := $Deliver.Scratch.Get "Content" -}}
+ <div class="post-description">{{ $Content | safeHTML }}</div>
{{ end }}
{{ end }}
diff --git a/theme.toml b/theme.toml
index 9d4f26a..5930b20 100644
--- a/theme.toml
+++ b/theme.toml
@@ -8,7 +8,7 @@ description = "MemE is a powerful and highly customizable GoHugo theme for perso
homepage = "https://github.com/reuixiy/hugo-theme-meme/"
tags = ["Blog", "Minimal", "Clean", "Typography", "Multilingual"]
features = ["Dark Mode", "InstantClick", "KaTeX", "JSON-LD", "Drop Cap", "PWA", "TOC"]
-min_version = "0.57.0"
+min_version = "0.62.2"
[author]
name = "reuixiy"