diff --git a/.github/workflows/sync-2-gitee.yml b/.github/workflows/sync-2-gitee.yml
index ee2814a..67e50cc 100644
--- a/.github/workflows/sync-2-gitee.yml
+++ b/.github/workflows/sync-2-gitee.yml
@@ -1,8 +1,7 @@
name: sync-2-gitee
on:
- push:
- branches: [main]
+ push
jobs:
sync-2-gitee:
diff --git a/.gitignore b/.gitignore
index da8ae60..470f243 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,6 @@
-exampleSite/*
-!exampleSite/config.yaml
\ No newline at end of file
+# Ignore files in Hugo NexT theme
+
+.hugo_build.lock
+
+exampleSite/public
+exampleSite/resources
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index a7e79bc..807bb9e 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2022 lisenhui
+Copyright (c) 2022 hugo-next
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
@@ -17,4 +17,4 @@ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/archetypes/default.md b/archetypes/default.md
index dffea9f..de95136 100644
--- a/archetypes/default.md
+++ b/archetypes/default.md
@@ -1,20 +1,47 @@
---
-title: '{{ replace .Name "-" " " | title }}'
-description: '文章简要概述不超过65个汉字'
-keywords: '文章关键词1,文章关键词2,文章关键词3'
-isCJKLanguage: true
+title: "{{ replace .Name "-" " " | title }}"
+description: "{{ .Name }}"
+keywords: "{{replace .Name "-" ","}}"
-author: '文章作者'
-lastmod: '{{ .Date }}'
-publishDate: '{{ .Date }}'
+date: {{ .Date }}
+lastmod: {{ .Date }}
categories:
- -
+ -
tags:
- -
- -
+ -
+ -
-toc: false
-draft: true
-url: '{{ lower .Name }}.html'
+# 原文作者
+# Post's origin author name
+#author:
+# 原文链接
+# Post's origin link URL
+#link:
+# 图片链接,用在open graph和twitter卡片上
+# Image source link that will use in open graph and twitter card
+#imgs:
+# 在首页展开内容
+# Expand content on the home page
+#expand: true
+# 外部链接地址,访问时直接跳转
+# It's means that will redirecting to external links
+#extlink:
+# 在当前页面开启或关闭评论功能
+# Switch to enabled or disabled comment plugins in this post
+#comment:
+# enable: false
+# 开启文章目录功能
+# Enable table of content
+#toc: false
+# 绝对访问路径
+# Absolute link for visit
+#url: "{{ lower .Name }}.html"
+# 开启文章置顶,数字越小越靠前
+# Sticky post set-top in home page and the smaller nubmer will more forward.
+#weight: 1
---
+
+{{ .Name }}
+
+
diff --git a/assets/css/_colors.scss b/assets/css/_colors.scss
index a43346d..7ab1126 100644
--- a/assets/css/_colors.scss
+++ b/assets/css/_colors.scss
@@ -29,7 +29,6 @@
color-scheme: light;
}
-@if $cfg_darkmode {
@media (prefers-color-scheme: dark) {
:root {
--body-bg-color: #{$body-bg-color-dark};
diff --git a/assets/css/_common/components/back-to-top.scss b/assets/css/_common/components/back-to-top.scss
new file mode 100644
index 0000000..e777bcf
--- /dev/null
+++ b/assets/css/_common/components/back-to-top.scss
@@ -0,0 +1,45 @@
+@if $back2top_enable {
+ .back-to-top {
+ font-size: $b2t-font-size;
+
+ @if not $back2top_scrollpercent {
+ span {
+ display: none;
+ }
+ }
+
+ @if $back2top_sidebar {
+ margin: 20px - $sidebar-offset -10px -20px;
+ opacity: 0;
+ transition: opacity $transition-ease;
+
+ &.back-to-top-on {
+ cursor: pointer;
+ opacity: $b2t-opacity;
+
+ &:hover {
+ opacity: $b2t-opacity-hover;
+ }
+ }
+ } @else {
+ bottom: $b2t-position-bottom;
+ box-sizing: border-box;
+ color: $b2t-color;
+ padding: 0 6px;
+ transition: bottom $transition-ease;
+ @include sidebar-toggle();
+
+ @if not $back2top_scrollpercent {
+ width: 24px;
+ }
+
+ &:hover {
+ color: $sidebar-highlight;
+ }
+
+ &.back-to-top-on {
+ bottom: $b2t-position-bottom-on;
+ }
+ }
+ }
+}
diff --git a/assets/css/_common/components/index.scss b/assets/css/_common/components/index.scss
new file mode 100644
index 0000000..77f5cd3
--- /dev/null
+++ b/assets/css/_common/components/index.scss
@@ -0,0 +1,20 @@
+.noscript-warning {
+ background-color: lighten($red, 20%);
+ color: white;
+ font-family: sans-serif;
+ font-size: 1rem;
+ font-weight: bold;
+ left: 0;
+ position: fixed;
+ text-align: center;
+ top: 0;
+ width: 100%;
+ z-index: $zindex-5;
+}
+
+@import 'back-to-top';
+@import 'reading-progress';
+
+@import 'post';
+@import 'pages';
+@import 'third-party';
diff --git a/assets/css/_common/components/pages/breadcrumb.scss b/assets/css/_common/components/pages/breadcrumb.scss
new file mode 100644
index 0000000..c0b6f7a
--- /dev/null
+++ b/assets/css/_common/components/pages/breadcrumb.scss
@@ -0,0 +1,21 @@
+ul.breadcrumb {
+ font-size: $font-size-smallest;
+ list-style: none;
+ margin: 1em 0;
+ padding: 0 2em;
+ text-align: center;
+
+ li {
+ display: inline;
+ }
+
+ li:not(:first-child)::before {
+ content: '/\00a0';
+ font-weight: normal;
+ padding: .5em;
+ }
+
+ li:last-child {
+ font-weight: bold;
+ }
+}
diff --git a/assets/css/_common/components/pages/categories.scss b/assets/css/_common/components/pages/categories.scss
new file mode 100644
index 0000000..b79ac03
--- /dev/null
+++ b/assets/css/_common/components/pages/categories.scss
@@ -0,0 +1,39 @@
+.category-all-page {
+
+ min-height: 700px;
+
+ .category-all-title {
+ font-size: 1.35em;
+ text-align: center;
+ }
+
+ .category-all {
+ margin-top: 40px;
+ }
+
+ .category-list {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ }
+
+ .category-list-item {
+ margin: 5px 10px;
+ }
+
+ .category-list-count {
+ color: $grey;
+
+ &::before {
+ content: ' (';
+ }
+
+ &::after {
+ content: ') ';
+ }
+ }
+
+ .category-list-child {
+ padding-left: 10px;
+ }
+}
diff --git a/assets/css/_common/components/pages/index.scss b/assets/css/_common/components/pages/index.scss
new file mode 100644
index 0000000..ee55922
--- /dev/null
+++ b/assets/css/_common/components/pages/index.scss
@@ -0,0 +1,5 @@
+// Page specific styles
+@import 'categories';
+@import 'schedule';
+@import 'breadcrumb';
+@import 'tag-cloud';
diff --git a/assets/css/_common/components/pages/schedule.scss b/assets/css/_common/components/pages/schedule.scss
new file mode 100644
index 0000000..808b69d
--- /dev/null
+++ b/assets/css/_common/components/pages/schedule.scss
@@ -0,0 +1,102 @@
+@keyframes dot-flash {
+ from {
+ opacity: 1;
+ transform: scale(1);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale(.8);
+ }
+}
+
+.event-list {
+ hr {
+ background: $black-deep;
+ margin: 20px 0 45px;
+
+ &::after {
+ background: $black-deep;
+ color: white;
+ content: 'NOW';
+ display: inline-block;
+ font-weight: bold;
+ padding: 0 5px;
+ }
+ }
+
+ .event {
+ --event-background: #{$black-deep};
+ --event-foreground: #{$grey};
+ --event-title: white;
+ background: var(--event-background);
+ padding: 15px;
+
+ .event-summary {
+ border-bottom: 0;
+ color: var(--event-title);
+ margin: 0;
+ padding: 0 0 0 35px;
+ position: relative;
+
+ &::before {
+ animation: dot-flash 1s alternate infinite ease-in-out;
+ background: var(--event-title);
+ left: 0;
+ margin-top: -6px;
+ position: absolute;
+ top: 50%;
+ @include round-icon(12px);
+ }
+ }
+
+ &:nth-of-type(odd) .event-summary::before {
+ animation-delay: .5s;
+ }
+
+ &:not(:last-child) {
+ margin-bottom: 20px;
+ }
+
+ .event-relative-time {
+ color: var(--event-foreground);
+ display: inline-block;
+ font-size: 12px;
+ font-weight: normal;
+ padding-left: 12px;
+ }
+
+ .event-details {
+ color: var(--event-foreground);
+ display: block;
+ line-height: 18px;
+ padding: 6px 0 6px 35px;
+
+ &::before {
+ color: var(--event-foreground);
+ display: inline-block;
+ margin-right: 9px;
+ width: 14px;
+ @include font-family-icons();
+ }
+
+ &.event-location::before {
+ content: '\f041';
+ }
+
+ &.event-duration::before {
+ content: '\f017';
+ }
+
+ &.event-description::before {
+ content: '\f024';
+ }
+ }
+ }
+
+ .event-past {
+ --event-background: #{$whitesmoke};
+ --event-foreground: #{$grey-dark};
+ --event-title: #{$black-deep};
+ }
+}
diff --git a/assets/css/_common/components/pages/tag-cloud.scss b/assets/css/_common/components/pages/tag-cloud.scss
new file mode 100644
index 0000000..71bc6ad
--- /dev/null
+++ b/assets/css/_common/components/pages/tag-cloud.scss
@@ -0,0 +1,43 @@
+.tag-cloud {
+ text-align: center;
+ min-height: 700px;
+
+ .tag-cloud-title {
+ text-align: center;
+ font-size: 1.35em;
+
+ .tag-list-count {
+ font-size: 0.56em;
+ }
+ }
+
+ .tag-cloud-tags {
+ margin-top: 40px;
+ }
+
+ a {
+ display: inline-block;
+ margin: 10px;
+ }
+}
+
+@for $tag-cloud from 0 through 10 {
+ $tag-cloud-color : mix($tag-cloud-end, $tag-cloud-start, $tag-cloud * 10);
+ .tag-cloud-#{$tag-cloud} {
+ border-bottom-color: $tag-cloud-color;
+ color: $tag-cloud-color;
+ font-size: #{0.85+($tag-cloud * 0.05)}em
+ }
+}
+
+@if $darkmode {
+ @media (prefers-color-scheme: dark) {
+ @for $tag-cloud from 0 through 10 {
+ $tag-cloud-color : mix($tag-cloud-end-dark, $tag-cloud-start-dark, $tag-cloud * 10);
+ .tag-cloud-#{$tag-cloud} {
+ border-bottom-color: $tag-cloud-color;
+ color: $tag-cloud-color;
+ }
+ }
+ }
+}
diff --git a/assets/css/_common/components/post/index.scss b/assets/css/_common/components/post/index.scss
new file mode 100644
index 0000000..b8c55d9
--- /dev/null
+++ b/assets/css/_common/components/post/index.scss
@@ -0,0 +1,53 @@
+.rtl {
+ &.post-body {
+ p, a, h1, h2, h3, h4, h5, h6, li, ul, ol {
+ direction: rtl;
+ font-family: UKIJ Ekran;
+ }
+ }
+
+ &.post-title {
+ font-family: UKIJ Ekran;
+ }
+}
+
+.post-button {
+ margin-top: 40px;
+ text-align: center;
+}
+
+.use-motion {
+ @if $motion_trans_post_block {
+ .post-block, .pagination, .comments, .post-comments {
+ visibility: hidden;
+ }
+ }
+
+ @if $motion_trans_post_header {
+ .post-header {
+ visibility: hidden;
+ }
+ }
+
+ @if $motion_trans_post_body {
+ .post-body {
+ visibility: hidden;
+ }
+ }
+
+ @if $motion_trans_coll_header {
+ .collection-header {
+ visibility: hidden;
+ }
+ }
+}
+
+@import 'post-collapse';
+@import 'post-body';
+@import 'post-gallery';
+@import 'post-header';
+@import 'post-nav';
+@import 'post-footer';
+@import 'post-widgets';
+@import 'post-reward';
+@import 'post-followme';
diff --git a/assets/css/_common/components/post/post-body.scss b/assets/css/_common/components/post/post-body.scss
new file mode 100644
index 0000000..062d816
--- /dev/null
+++ b/assets/css/_common/components/post/post-body.scss
@@ -0,0 +1,79 @@
+.post-body {
+ font-family: $font-family-posts;
+ @include word-wrap();
+
+ @include desktop-large() {
+ font-size: $font-size-large;
+ }
+
+ @include desktop() {
+ text-align: unquote($text_align_desktop);
+ }
+
+ @include tablet-mobile() {
+ text-align: unquote($text_align_mobile);
+ }
+
+ h1, h2, h3, h4, h5, h6 {
+ // Supported plugins: hexo-renderer-markdown-it hexo-renderer-marked
+ .header-anchor, .headerlink {
+ border-bottom-style: none;
+ color: inherit;
+ float: right;
+ font-size: $font-size-small;
+ margin-left: 10px;
+ opacity: 0;
+
+ &::before {
+ @include font-family-icons('\f0c1');
+ }
+ }
+
+ &:hover {
+ .header-anchor, .headerlink {
+ opacity: .5;
+
+ &:hover {
+ opacity: 1;
+ }
+ }
+ }
+ }
+
+ .exturl .fa {
+ font-size: $font-size-small;
+ margin-left: 4px;
+ }
+
+ // For fancybox and pandoc
+ .image-caption, img + figcaption, .fancybox + figcaption {
+ color: $grey-dark;
+ font-size: $font-size-small;
+ font-weight: bold;
+ line-height: 1;
+ margin: -15px auto 15px;
+ text-align: center;
+ }
+
+ iframe, img, video, embed {
+ margin-bottom: 20px;
+ }
+
+ .video-container {
+ height: 0;
+ margin-bottom: 20px;
+ overflow: hidden;
+ padding-top: 75%;
+ position: relative;
+ width: 100%;
+
+ iframe, object, embed {
+ height: 100%;
+ left: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+ }
+}
diff --git a/assets/css/_common/components/post/post-collapse.scss b/assets/css/_common/components/post/post-collapse.scss
new file mode 100644
index 0000000..607a778
--- /dev/null
+++ b/assets/css/_common/components/post/post-collapse.scss
@@ -0,0 +1,109 @@
+.posts-collapse .post-content {
+ margin-bottom: $posts-collapse-margin;
+ margin-left: $posts-collapse-margin;
+ position: relative;
+
+ @include mobile() {
+ margin-left: $posts-collapse-margin-mobile;
+ margin-right: $posts-collapse-margin-mobile;
+ }
+
+ .collection-title {
+ font-size: $font-size-large;
+ position: relative;
+
+ &::before {
+ background: $grey-dark;
+ border: 1px solid white;
+ margin-left: -6px;
+ margin-top: -4px;
+ position: absolute;
+ top: 50%;
+ @include round-icon(10px);
+ }
+ }
+
+ .collection-year {
+ font-size: $font-size-largest;
+ font-weight: bold;
+ margin: 60px 0;
+ position: relative;
+
+ &::before {
+ background: $grey;
+ margin-left: -4px;
+ margin-top: -4px;
+ position: absolute;
+ top: 50%;
+ @include round-icon(8px);
+ }
+ }
+
+ .collection-header {
+ display: block;
+ margin-left: 20px;
+
+ small {
+ color: $grey;
+ margin-left: 5px;
+ }
+ }
+
+ .post-header {
+ border-bottom: 1px dashed $grey-light;
+ // 2px is equal to half the width of .posts-collapse::before
+ margin: 30px 2px 0;
+ padding-left: 15px;
+ position: relative;
+ transition: border $transition-ease;
+
+ &::before {
+ background: $grey;
+ border: 1px solid white;
+ left: -6px;
+ position: absolute;
+ top: $font-size-smallest;
+ transition: background $transition-ease;
+ @include round-icon(6px);
+ }
+
+ &:hover {
+ border-bottom-color: $grey-dim;
+
+ &::before {
+ background: $black-deep;
+ }
+ }
+ }
+
+ .post-meta-container {
+ display: inline;
+ font-size: $font-size-smallest;
+ margin-right: 10px;
+ }
+
+ .post-title {
+ display: inline;
+
+ a {
+ border-bottom: 0;
+ color: var(--link-color);
+ }
+
+ .fa-external-link-alt {
+ font-size: $font-size-small;
+ margin-left: 5px;
+ }
+ }
+
+ &::before {
+ background: $whitesmoke;
+ content: ' ';
+ height: 100%;
+ margin-left: -2px;
+ position: absolute;
+ // To do: 1.25em is inaccurate when .collection-title has line breaks on mobile
+ top: 1.25em;
+ width: 4px;
+ }
+}
diff --git a/assets/css/_common/components/post/post-followme.scss b/assets/css/_common/components/post/post-followme.scss
new file mode 100644
index 0000000..1461877
--- /dev/null
+++ b/assets/css/_common/components/post/post-followme.scss
@@ -0,0 +1,41 @@
+@if $follow_me {
+ .followme {
+ color: $grey;
+ /* padding: 1em 1.5em; */
+ text-align: center;
+ @include post-card();
+ border-left: none;
+ border-bottom: #46b404 solid 5px;
+
+ .social-list {
+ @include flex-wrap();
+
+ .social-item {
+ margin: .5em 2em;
+
+ a:hover {
+ font-weight: bold;
+ }
+
+ @include tablet-mobile() {
+ margin: .5em .75em;
+ }
+ }
+
+ .social-link {
+ border: 0;
+ display: inline-block;
+ text-align: center;
+
+ .icon {
+ font-size: 1.75em;
+ }
+
+ .label {
+ display: block;
+ font-size: 14px;
+ }
+ }
+ }
+ }
+}
diff --git a/assets/css/_common/components/post/post-footer.scss b/assets/css/_common/components/post/post-footer.scss
new file mode 100644
index 0000000..be39fda
--- /dev/null
+++ b/assets/css/_common/components/post/post-footer.scss
@@ -0,0 +1,90 @@
+// Flexbox layout makes it possible to reorder the child
+// elements of .post-footer through the `order` CSS property
+// Fix issue #16
+// To do: use `gap` instead of `margin`
+// See https://caniuse.com/flexbox-gap
+.post-footer {
+ @include flex-column();
+
+ hr{
+ text-align:center;
+ line-height:0px;
+ height: 0px;
+ background-image: none;
+ border-bottom: .125em dashed #999;
+ margin: 24px 0 12px 0;
+
+ &:after{
+ content: $post_end_line_tip;
+ font-size: .9em;
+ font-weight: bold;
+ background: #fff;
+ padding: 0 5px;
+ z-index:2;
+ }
+}
+
+}
+
+.post-eof {
+ background: $grey-light;
+ height: 1px;
+ margin: $post-eof-margin-top auto $post-eof-margin-bottom;
+ width: 8%;
+
+ .post-block:last-of-type & {
+ display: none;
+ }
+}
+
+@if $creative_commons_post {
+
+ .post-copyright {
+ border-left: 3px solid #ff2a2a;
+ background: var(--card-bg-color);
+
+ img {
+ margin: 8px;
+ opacity: .8;
+ filter: blur(.08em);
+ -webkit-transform: rotate(320deg);
+ -moz-transform: rotate(320deg);
+ -ms-transform: rotate(320deg);
+ -o-transform: rotate(320deg);
+ transform: rotate(320deg);
+ }
+
+ ul {
+ list-style: none;
+ padding: .5em 1em;
+ @include post-card();
+ border: none;
+ background: none;
+ }
+ }
+
+}
+
+.post-tags {
+ margin-bottom: 20px;
+ text-align: center;
+
+ a {
+ display: inline-block;
+ font-size: $font-size-smaller;
+
+ &:before {
+ @if $post_end_tag_icon {
+ content: "🔖";
+ font-size: 1.25em;
+ }
+ @else {
+ content: "#";
+ }
+ }
+
+ &:not(:last-child) {
+ margin-right: 10px;
+ }
+ }
+}
diff --git a/assets/css/_common/components/post/post-gallery.scss b/assets/css/_common/components/post/post-gallery.scss
new file mode 100644
index 0000000..a4240d7
--- /dev/null
+++ b/assets/css/_common/components/post/post-gallery.scss
@@ -0,0 +1,33 @@
+.post-gallery {
+ display: flex;
+ min-height: 200px;
+
+ .post-gallery-image {
+ flex: 1;
+
+ &:not(:first-child) {
+ clip-path: polygon(40px 0, 100% 0, 100% 100%, 0 100%);
+ margin-left: -20px;
+ }
+
+ &:not(:last-child) {
+ margin-right: -20px;
+ }
+
+ img {
+ height: 100%;
+ object-fit: cover;
+ // Override darkmode image opacity.
+ opacity: 1;
+ width: 100%;
+ }
+ }
+}
+
+.posts-expand .post-gallery {
+ margin-bottom: 60px;
+}
+
+.posts-collapse .post-gallery {
+ margin: 15px 0;
+}
diff --git a/assets/css/_common/components/post/post-header.scss b/assets/css/_common/components/post/post-header.scss
new file mode 100644
index 0000000..8be25e6
--- /dev/null
+++ b/assets/css/_common/components/post/post-header.scss
@@ -0,0 +1,121 @@
+.posts-expand .post-header {
+ font-size: $font-size-large;
+ margin-bottom: 40px;
+ text-align: center;
+}
+
+.posts-expand .post-title {
+ font-size: $font-size-largest;
+ font-weight: normal;
+ margin: initial;
+ @include word-wrap();
+
+ @if $post_edit_enable {
+ .post-edit-link {
+ border-bottom: 0;
+ color: $grey;
+ float: right;
+ font-size: $font-size-larger;
+ margin-left: -1.2em;
+ transition: color $transition-ease-in;
+
+ @include mobile-small() {
+ margin-left: initial;
+ }
+
+ &:hover {
+ color: $sidebar-highlight;
+ }
+ }
+ }
+}
+
+.posts-expand .post-title-link {
+ border-bottom: 0;
+ color: var(--link-color);
+ display: inline-block;
+ position: relative;
+
+ &::before {
+ background: var(--link-color);
+ bottom: 0;
+ content: '';
+ height: 2px;
+ // Fix issue #75
+ left: 0;
+ position: absolute;
+ transform: scaleX(0);
+ transition: transform $transition-ease;
+ width: 100%;
+ }
+
+ &:hover::before {
+ transform: scaleX(1);
+ }
+
+ .fa-external-link-alt {
+ font-size: $font-size-small;
+ margin-left: 5px;
+ }
+}
+
+.post-sticky-flag {
+ display: inline-block;
+ // Fix issue #80 #140
+ margin-right: 8px;
+ transform: rotate(30deg);
+}
+
+.posts-expand .post-meta-container {
+ color: $grey-dark;
+ font-family: $font-family-posts;
+ font-size: $font-size-smallest;
+ margin-top: 3px;
+
+ .post-description {
+ font-size: $font-size-small;
+ margin-top: 2px;
+ }
+
+ time {
+ border-bottom: 1px dashed $grey-dark;
+ }
+}
+
+// Flexbox layout makes it possible to reorder the child
+// elements of .post-meta through the `order` CSS property
+.post-meta {
+ @include flex-wrap();
+}
+
+// .post-meta-item exists in .post-meta and footer
+:not(.post-meta-break) + .post-meta-item::before {
+ content: '|';
+ margin: 0 .5em;
+}
+
+/* Make post meta dislay in oneline
+.post-meta-item-icon {
+ margin-right: 3px;
+} */
+
+.post-meta-item-text {
+ @if not $post_meta_item_text {
+ display: none;
+ }
+
+ @include tablet-mobile() {
+ display: none;
+ }
+}
+
+.post-meta-break {
+ flex-basis: 100%;
+ height: 0;
+}
+
+@if $busuanzi_enable and $busuanzi_post_views {
+ #busuanzi_container_page_pv {
+ display: inline-block;
+ }
+}
diff --git a/assets/css/_common/components/post/post-nav.scss b/assets/css/_common/components/post/post-nav.scss
new file mode 100644
index 0000000..1f14593
--- /dev/null
+++ b/assets/css/_common/components/post/post-nav.scss
@@ -0,0 +1,41 @@
+.post-nav {
+ border-top: 1px solid $gainsboro;
+ display: flex;
+ gap: 30px;
+ justify-content: space-between;
+ margin-top: 1em;
+ padding: 10px 5px 0;
+}
+
+.post-nav-item {
+ flex: 1;
+
+ a {
+ border-bottom: 0;
+ display: block;
+ font-size: $font-size-small;
+ line-height: 1.6;
+
+ &:active {
+ top: 2px;
+ }
+ }
+
+ .fa {
+ font-size: $font-size-smallest;
+ }
+
+ &:first-child {
+ .fa {
+ margin-right: 5px;
+ }
+ }
+
+ &:last-child {
+ text-align: right;
+
+ .fa {
+ margin-left: 5px;
+ }
+ }
+}
diff --git a/assets/css/_common/components/post/post-reward.scss b/assets/css/_common/components/post/post-reward.scss
new file mode 100644
index 0000000..ca7d163
--- /dev/null
+++ b/assets/css/_common/components/post/post-reward.scss
@@ -0,0 +1,65 @@
+.reward-container {
+ margin: $post-card-margin;
+ /* padding: 1em 0; */
+ text-align: center;
+
+ div>i {
+ font-size: 1.85em;
+ margin-right: 4px;
+ }
+
+ button {
+ @include button($sidebar-highlight);
+ border: 2px solid $sidebar-highlight;
+ border-radius: 2px;
+ outline: 0;
+ transition: all $transition-ease;
+ vertical-align: text-top;
+ }
+}
+
+.post-reward {
+ display: none;
+ padding-top: 20px;
+
+ &.active {
+ display: block;
+ }
+
+ .post-reward-item {
+ display: inline-block;
+
+ span {
+ display: block;
+ }
+
+ @if $reward_settings_animation {
+
+ &:hover span {
+ animation: next-roll .1s infinite linear;
+ // The animation may affect :hover of img in dark mode
+ pointer-events: none;
+ }
+
+ }
+ }
+
+ img {
+ display: inline-block;
+ margin: .8em 1.2em;
+ max-width: 100%;
+ width: 180px;
+ border: #eee 1px solid;
+ box-shadow:rgba(0,0,0,0.2) 0 1px 5px 0px;
+ }
+}
+
+@keyframes next-roll {
+ from {
+ transform: rotateZ(30deg);
+ }
+
+ to {
+ transform: rotateZ(-30deg);
+ }
+}
diff --git a/assets/css/_common/components/post/post-widgets.scss b/assets/css/_common/components/post/post-widgets.scss
new file mode 100644
index 0000000..eea67c8
--- /dev/null
+++ b/assets/css/_common/components/post/post-widgets.scss
@@ -0,0 +1,20 @@
+.post-widgets {
+ border-top: 1px solid $gainsboro;
+ margin-top: 15px;
+ text-align: center;
+}
+
+.wpac-rating-container {
+ height: 20px;
+ line-height: 20px;
+ margin-top: 10px;
+ padding-top: 6px;
+ text-align: center;
+}
+
+.social-like {
+ display: flex;
+ font-size: $font-size-small;
+ justify-content: center;
+ text-align: center;
+}
diff --git a/assets/css/_common/components/reading-progress.scss b/assets/css/_common/components/reading-progress.scss
new file mode 100644
index 0000000..b85cdbf
--- /dev/null
+++ b/assets/css/_common/components/reading-progress.scss
@@ -0,0 +1,27 @@
+@if $reading_progress_enable {
+ .reading-progress-bar {
+ --progress: 0;
+ background: $reading_progress_color;
+ height: $reading_progress_height;
+ position: fixed;
+ z-index: $zindex-5;
+
+ @if $reading_progress_reversed {
+ width: calc(100% - var(--progress));
+ } @else {
+ width: var(--progress);
+ }
+
+ @if $reading_progress_start == 'right' {
+ right: 0;
+ } @else {
+ left: 0;
+ }
+
+ @if $reading_progress_position == 'bottom' {
+ bottom: 0;
+ } @else {
+ top: 0;
+ }
+ }
+}
diff --git a/assets/css/_common/components/third-party/disqusjs.scss b/assets/css/_common/components/third-party/disqusjs.scss
new file mode 100644
index 0000000..2c38803
--- /dev/null
+++ b/assets/css/_common/components/third-party/disqusjs.scss
@@ -0,0 +1,39 @@
+@if $disqusjs_enable and $darkmode {
+ @media (prefers-color-scheme:dark) {
+ html #dsqjs a {
+ color: var(--link-color)
+ }
+
+ html #dsqjs a:focus,html #dsqjs a:hover {
+ color: var(--link-hover-color)
+ }
+
+ html #dsqjs .dsqjs-nav,html #dsqjs footer {
+ border-color: var(--card-bg-color)
+ }
+
+ html #dsqjs .dsqjs-load-more,html #dsqjs .dsqjs-load-more:hover,html #dsqjs .dsqjs-nav-tab,html #dsqjs .dsqjs-no-comment,html #dsqjs .dsqjs-post-content {
+ color: var(--text-color)
+ }
+
+ html #dsqjs .dsqjs-order-label {
+ background-color: #3e4b5e
+ }
+
+ html #dsqjs .dsqjs-order-radio:checked+.dsqjs-order-label {
+ background-color: var(--content-bg-color)
+ }
+
+ html #dsqjs .dsqjs-tab-active>span:after {
+ background-color: #2e9fff!important
+ }
+
+ html #dsqjs .dsqjs-footer,html #dsqjs .dsqjs-meta {
+ color: var(--text-color)
+ }
+
+ html #dsqjs .dsqjs-post-body blockquote {
+ border-color: var(--content-bg-color)
+ }
+ }
+}
diff --git a/assets/css/_common/components/third-party/gitalk.scss b/assets/css/_common/components/third-party/gitalk.scss
new file mode 100644
index 0000000..735c9d5
--- /dev/null
+++ b/assets/css/_common/components/third-party/gitalk.scss
@@ -0,0 +1,9 @@
+@if $gitalk_enable {
+ .gt-header a, .gt-comments a, .gt-popup a {
+ border-bottom: 0;
+ }
+
+ .gt-container .gt-popup .gt-action.is--active::before {
+ top: .7em;
+ }
+}
diff --git a/assets/css/_common/components/third-party/gitter.scss b/assets/css/_common/components/third-party/gitter.scss
new file mode 100644
index 0000000..8a1986e
--- /dev/null
+++ b/assets/css/_common/components/third-party/gitter.scss
@@ -0,0 +1,7 @@
+@if $gitter_enable {
+ .gitter-open-chat-button {
+ $alignment : sidebar-toggle-alignment(false);
+ #{$alignment[0]}: auto !important;
+ #{$alignment[1]}: 10px !important;
+ }
+}
diff --git a/assets/css/_common/components/third-party/index.scss b/assets/css/_common/components/third-party/index.scss
new file mode 100644
index 0000000..d6b6a2a
--- /dev/null
+++ b/assets/css/_common/components/third-party/index.scss
@@ -0,0 +1,20 @@
+@import 'disqusjs';
+@import 'gitalk';
+@import 'utterances';
+@import 'search';
+@import 'related-posts';
+@import 'math';
+@import 'gitter';
+@import 'livere';
+@import 'waline';
+
+.use-motion .animated {
+ // Fix issue #48 #55
+ animation-fill-mode: none;
+ // Fix issue #46 .animated in .sidebar
+ visibility: inherit;
+}
+
+.use-motion .sidebar .animated {
+ animation-fill-mode: both;
+}
diff --git a/assets/css/_common/components/third-party/livere.scss b/assets/css/_common/components/third-party/livere.scss
new file mode 100644
index 0000000..23a0170
--- /dev/null
+++ b/assets/css/_common/components/third-party/livere.scss
@@ -0,0 +1,5 @@
+ @if $livere_enable {
+ #livereAdWrapper, #taboola-livere {
+ display: none;
+ }
+ }
diff --git a/assets/css/_common/components/third-party/math.scss b/assets/css/_common/components/third-party/math.scss
new file mode 100644
index 0000000..46883b2
--- /dev/null
+++ b/assets/css/_common/components/third-party/math.scss
@@ -0,0 +1,9 @@
+@if $math_mathjax_enable {
+ mjx-container[jax='CHTML'][display='true'], .has-jax {
+ overflow: auto hidden;
+ }
+
+ mjx-container[display='true'] + br {
+ display: none;
+ }
+}
diff --git a/assets/css/_common/components/third-party/related-posts.scss b/assets/css/_common/components/third-party/related-posts.scss
new file mode 100644
index 0000000..1ce37f1
--- /dev/null
+++ b/assets/css/_common/components/third-party/related-posts.scss
@@ -0,0 +1,23 @@
+@if $related_posts_enable {
+ .popular-posts-header {
+ border-bottom: 1px solid $gainsboro;
+ font-size: $font-size-large;
+ margin-bottom: 10px;
+ margin-top: $post-eof-margin-bottom;
+ }
+
+ .popular-posts {
+ padding: 0;
+
+ .popular-posts-item {
+ margin-left: 2em;
+
+ .popular-posts-title {
+ font-size: $font-size-small;
+ font-weight: normal;
+ line-height: $line-height-base * 1.2;
+ margin: 0;
+ }
+ }
+ }
+}
diff --git a/assets/css/_common/components/third-party/search.scss b/assets/css/_common/components/third-party/search.scss
new file mode 100644
index 0000000..ca5e9a5
--- /dev/null
+++ b/assets/css/_common/components/third-party/search.scss
@@ -0,0 +1,179 @@
+@if $local_search_enable or $algolia_search_enable {
+ .search-active {
+ overflow: hidden;
+ }
+
+ .search-pop-overlay {
+ background: rgba(0, 0, 0, 0);
+ display: flex;
+ height: 100%;
+ left: 0;
+ position: fixed;
+ top: 0;
+ transition: visibility .4s, background .4s;
+ visibility: hidden;
+ width: 100%;
+ z-index: $zindex-4;
+
+ .search-active & {
+ background: rgba(0, 0, 0, .3);
+ visibility: visible;
+ }
+ }
+
+ .search-popup {
+ background: var(--card-bg-color);
+ border-radius: 5px;
+ height: 80%;
+ margin: auto;
+ transform: scale(0);
+ transition: transform .4s;
+ width: 700px;
+
+ .search-active & {
+ transform: scale(1);
+ }
+
+ @include mobile() {
+ border-radius: 0;
+ height: 100%;
+ width: 100%;
+ }
+
+ .search-icon, .popup-btn-close {
+ color: $grey-dark;
+ font-size: 18px;
+ padding: 0 10px;
+ }
+
+ .popup-btn-close {
+ cursor: pointer;
+
+ &:hover .fa {
+ color: $black-deep;
+ }
+ }
+
+ .search-header {
+ background: $gainsboro;
+ @if $darkmode {
+ @media (prefers-color-scheme: dark) {
+ background: $grey-dim;
+ }
+ }
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ display: flex;
+ padding: 5px;
+ }
+
+ input.search-input {
+ background: transparent;
+ border: 0;
+ outline: 0;
+ width: 100%;
+
+ &::-webkit-search-cancel-button {
+ display: none;
+ }
+ }
+
+ .search-result-container {
+ height: calc(100% - 55px);
+ overflow: auto;
+ padding: 5px 25px;
+
+ hr {
+ margin: 5px 0 10px;
+
+ &:first-child {
+ display: none;
+ }
+ }
+ }
+
+ .search-result-list {
+ margin: 0 5px;
+ padding: 0;
+ }
+
+ a.search-result-title {
+ font-weight: bold;
+ }
+
+ p.search-result {
+ border-bottom: 1px dashed $grey-light;
+ padding: 5px 0;
+ }
+ }
+}
+
+@if $algolia_search_enable {
+ .search-input-container {
+ flex-grow: 1;
+
+ form {
+ padding: 2px;
+ }
+ }
+
+ .search-stats {
+ align-items: center;
+ display: flex;
+ justify-content: space-between;
+
+ img {
+ height: 1em;
+ margin: 0;
+ }
+ }
+
+ .algolia-pagination {
+ // Override default style of ul
+ margin: 40px 0;
+ opacity: 1;
+ padding: 0;
+
+ .pagination-item {
+ display: inline-block;
+ }
+
+ .current .page-number {
+ @extend %page-number-current;
+ cursor: default;
+ }
+
+ .disabled-item {
+ visibility: hidden;
+ }
+ }
+}
+
+@if $local_search_enable {
+ .search-popup {
+ .search-input-container {
+ flex-grow: 1;
+ padding: 2px;
+ }
+
+ .no-result {
+ display: flex;
+ }
+
+ .search-result-list {
+ width: 100%;
+ }
+
+ .search-result-icon {
+ color: $grey-light;
+ margin: auto;
+ }
+ }
+
+ mark.search-keyword {
+ background: transparent;
+ border-bottom: 1px dashed $red;
+ color: $red;
+ font-weight: bold;
+ }
+}
diff --git a/assets/css/_common/components/third-party/utterances.scss b/assets/css/_common/components/third-party/utterances.scss
new file mode 100644
index 0000000..d324d55
--- /dev/null
+++ b/assets/css/_common/components/third-party/utterances.scss
@@ -0,0 +1,5 @@
+@if $utterances_enable {
+ .utterances {
+ max-width: unset;
+ }
+}
diff --git a/assets/css/_common/components/third-party/waline.scss b/assets/css/_common/components/third-party/waline.scss
new file mode 100644
index 0000000..dc2b87c
--- /dev/null
+++ b/assets/css/_common/components/third-party/waline.scss
@@ -0,0 +1,5 @@
+@if $waline_enable {
+ .wl-actions>button:nth-child(3) {
+ display: none
+ }
+}
\ No newline at end of file
diff --git a/assets/css/_common/outline/footer/index.scss b/assets/css/_common/outline/footer/index.scss
index b7a2d9b..9e5250c 100644
--- a/assets/css/_common/outline/footer/index.scss
+++ b/assets/css/_common/outline/footer/index.scss
@@ -20,6 +20,18 @@
text-align: center;
@include flex-column();
@include main-container();
+
+ @if $footer_vendors_enable {
+ .vendors-list {
+ a {
+ margin-right: 5px;
+ }
+
+ img {
+ display: inline-block;
+ }
+ }
+ }
}
.use-motion {
@@ -66,16 +78,13 @@
}
.with-love {
- color: $cfg_footer_icon_color;
display: inline-block;
margin: 0 5px;
- @if $cfg_footer_icon_animated {
animation: icon-animate 1.33s ease-in-out infinite;
}
}
-@if $cfg_footer_beian_enable {
.beian img {
display: inline-block;
margin: 0 3px;
@@ -83,15 +92,12 @@
}
}
-@if $cfg_busuanzi_enable {
.busuanzi-count {
- @if $cfg_busuanzi_visitors {
#busuanzi_container_site_uv {
display: none;
}
}
- @if $cfg_busuanzi_views {
#busuanzi_container_site_pv {
display: none;
}
diff --git a/assets/css/_common/outline/header/bookmark.scss b/assets/css/_common/outline/header/bookmark.scss
index 32816a1..1401168 100644
--- a/assets/css/_common/outline/header/bookmark.scss
+++ b/assets/css/_common/outline/header/bookmark.scss
@@ -1,17 +1,26 @@
-@if $cfg_bookmark_enable {
+@if $bookmark_enable {
.book-mark-link {
border-bottom: 0;
position: fixed;
top: -10px;
+
transition: top .3s;
- @include sidebar-toggle-position(true);
+ -moz-transition:top .3s;
+ -webkit-transition:top .3s;
+ -o-transition:top .3s;
+
+ @if not $github_banner_enable {
+ @include sidebar-toggle-position(true);
+ } @else {
+ left: 30px;
+ }
@include tablet-mobile() {
display: none;
}
&::before {
- color: convert($cfg_bookmark_color);
+ color: $bookmark_color;
font-size: 32px;
line-height: 1;
@include font-family-icons('\f02e');
diff --git a/assets/css/_common/outline/header/github-banner.scss b/assets/css/_common/outline/header/github-banner.scss
index 9c17380..918384b 100644
--- a/assets/css/_common/outline/header/github-banner.scss
+++ b/assets/css/_common/outline/header/github-banner.scss
@@ -1,4 +1,4 @@
-@if $cfg_github_banner_enable {
+@if $github_banner_enable {
@keyframes octocat-wave {
0%, 100% {
transform: rotate(0);
@@ -28,7 +28,7 @@
}
@include tablet-mobile() {
- @if $cfg_local_search_enable or $cfg_algolia_search_enable {
+ @if $local_search_enable or $algolia_search_enable {
display: none;
}
diff --git a/assets/css/_common/outline/mobile.scss b/assets/css/_common/outline/mobile.scss
index 64abd37..fb52f56 100644
--- a/assets/css/_common/outline/mobile.scss
+++ b/assets/css/_common/outline/mobile.scss
@@ -5,7 +5,7 @@
}
*/
-@if $cfg_mobile_layout_economy {
+@if $mobile_layout_economy {
@include mobile-small() {
// For Pisces & Gemini schemes only wider width (remove main blocks in Gemini).
.main-inner {
@@ -56,7 +56,6 @@
margin-bottom: 10px !important;
padding: 10px !important;
- @if $cfg_note_icons {
&:not(.no-icon) {
padding-left: 35px !important;
}
diff --git a/assets/css/_common/outline/sidebar/index.scss b/assets/css/_common/outline/sidebar/index.scss
index d74ca3f..0fe80e5 100644
--- a/assets/css/_common/outline/sidebar/index.scss
+++ b/assets/css/_common/outline/sidebar/index.scss
@@ -13,6 +13,9 @@
}
.cc-license {
+
+ margin-top: 6px;
+
.cc-opacity {
border-bottom: 0;
opacity: .7;
diff --git a/assets/css/_common/outline/sidebar/sidebar-author-links.scss b/assets/css/_common/outline/sidebar/sidebar-author-links.scss
index 8796cea..f065881 100644
--- a/assets/css/_common/outline/sidebar/sidebar-author-links.scss
+++ b/assets/css/_common/outline/sidebar/sidebar-author-links.scss
@@ -1,9 +1,9 @@
-.links-of-author {
+.links-of-author, .links-of-social {
a {
font-size: $font-size-smaller;
}
- @if not $cfg_social_icons_only {
+ @if not $social_icons_only {
.fa, .fab, .far, .fas {
margin-right: 2px;
}
diff --git a/assets/css/_common/outline/sidebar/sidebar-author.scss b/assets/css/_common/outline/sidebar/sidebar-author.scss
index ca0fd99..b903716 100644
--- a/assets/css/_common/outline/sidebar/sidebar-author.scss
+++ b/assets/css/_common/outline/sidebar/sidebar-author.scss
@@ -3,11 +3,11 @@
max-width: $site-author-image-width;
padding: 2px;
- @if $cfg_avatar_rounded {
+ @if $avatar_rounded {
border-radius: 50%;
}
- @if $cfg_avatar_rotated {
+ @if $avatar_rotated {
transition: transform 1s ease-out;
&:hover {
diff --git a/assets/css/_common/outline/sidebar/sidebar-toc.scss b/assets/css/_common/outline/sidebar/sidebar-toc.scss
index c65ac64..90d1633 100644
--- a/assets/css/_common/outline/sidebar/sidebar-toc.scss
+++ b/assets/css/_common/outline/sidebar/sidebar-toc.scss
@@ -1,14 +1,14 @@
-@if $cfg_toc_enable {
.post-toc {
font-size: $font-size-small;
+ padding: 0 8px;
- ol {
+ ul {
list-style: none;
margin: 0;
padding: 0 2px 5px 10px;
text-align: left;
- > ol {
+ > li {
padding-left: 0;
}
@@ -22,14 +22,14 @@
overflow: hidden;
text-overflow: ellipsis;
- @if not $cfg_toc_wrap {
+ @if not $toc_wrap {
white-space: nowrap;
}
}
.nav {
.nav-child {
- display: if($cfg_toc_expand_all, block, none);
+ display: if($toc_expand_all, block, none);
}
.active > .nav-child {
diff --git a/assets/css/_common/outline/sidebar/sidebar-toggle.scss b/assets/css/_common/outline/sidebar/sidebar-toggle.scss
index 68a4e31..80e6511 100644
--- a/assets/css/_common/outline/sidebar/sidebar-toggle.scss
+++ b/assets/css/_common/outline/sidebar/sidebar-toggle.scss
@@ -12,10 +12,8 @@
@media (any-hover: hover) {
body:not(.sidebar-active) .sidebar-toggle:hover {
- @include toggle-arrow($cfg_sidebar_position);
}
}
.sidebar-active .sidebar-toggle {
- @include toggle-close($cfg_sidebar_position);
}
diff --git a/assets/css/_common/outline/sidebar/site-state.scss b/assets/css/_common/outline/sidebar/site-state.scss
index cf22a19..691f7b9 100644
--- a/assets/css/_common/outline/sidebar/site-state.scss
+++ b/assets/css/_common/outline/sidebar/site-state.scss
@@ -1,4 +1,3 @@
-@if $cfg_site_state {
.site-state {
@include flex-wrap();
line-height: 1.4;
@@ -8,6 +7,11 @@
// Fix issue #103
// The click area of the link becomes smaller
padding: 0 15px;
+ border-left: 1px solid #eee;
+
+ &:first-child {
+ border-left: none;
+ }
a {
border-bottom: 0;
@@ -15,6 +19,8 @@
}
}
+
+
.site-state-item-count {
display: block;
font-size: $site-state-item-count-font-size;
diff --git a/assets/css/_common/scaffolding/base.scss b/assets/css/_common/scaffolding/base.scss
index 1a60de0..c3e38aa 100644
--- a/assets/css/_common/scaffolding/base.scss
+++ b/assets/css/_common/scaffolding/base.scss
@@ -18,7 +18,6 @@ body {
position: relative;
transition: padding $transition-ease;
- @if $cfg_bd_scrollbar_overlay {
overflow-x: hidden;
@supports (overflow-x: clip) {
overflow-x: clip;
@@ -26,7 +25,6 @@ body {
width: 100vw;
}
- @if $cfg_bd_scrollbar_stable {
overflow-y: scroll;
}
}
diff --git a/assets/css/_common/scaffolding/comments.scss b/assets/css/_common/scaffolding/comments.scss
index 8ace888..a0402cd 100644
--- a/assets/css/_common/scaffolding/comments.scss
+++ b/assets/css/_common/scaffolding/comments.scss
@@ -37,3 +37,119 @@
padding-top: 0;
}
}
+
+.post-comments {
+ @if $scheme !='Gemini' {
+ margin-top: 60px;
+ }
+
+ overflow: hidden;
+
+ .comment-head {
+ margin-bottom: 20px;
+
+ .comment-headline {
+ display: inline-block;
+ vertical-align: middle;
+ font-weight: 700;
+ font-size: 1.4em;
+ }
+
+ @if $two_comments_enable {
+ .comment-switch {
+ display: inline-block;
+ float: right;
+ margin: 2px auto;
+ padding: 4px 16px;
+ width: max-content;
+ border-radius: 8px;
+ background: #eee;
+
+ .first-comment {
+ color: $first_comment_color;
+
+ @if $two_comments_actived==$first_comment_name {
+ font-weight: bold;
+ }
+ }
+
+ .second-comment {
+ color: $second_comment_color;
+
+ @if $two_comments_actived==$second_comment_name {
+ font-weight: bold;
+ }
+ }
+
+ $switch_btn_bg_color: $first_comment_color;
+
+ .switch-btn {
+ position: relative;
+ display: inline-block;
+ margin: -4px 8px 0;
+ width: 42px;
+ height: 22px;
+ border-radius: 34px;
+ vertical-align: middle;
+ cursor: pointer;
+ -webkit-transition: .4s;
+ -moz-transition: .4s;
+ -o-transition: .4s;
+ -ms-transition: .4s;
+ transition: .4s;
+
+ @if $two_comments_actived==$second_comment_name {
+ $switch_btn_bg_color: $second_comment_color;
+ }
+
+ background-color: $switch_btn_bg_color;
+
+ &:before {
+ position: absolute;
+ bottom: 4px;
+ left: 4px;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ content: '';
+ background-color: #fff;
+ -webkit-transition: .4s;
+ -moz-transition: .4s;
+ -o-transition: .4s;
+ -ms-transition: .4s;
+ transition: .4s
+ }
+
+ &.move:before {
+ -webkit-transform: translateX(20px);
+ -moz-transform: translateX(20px);
+ -o-transform: translateX(20px);
+ -ms-transform: translateX(20px);
+ transform: translateX(20px);
+ }
+ }
+ }
+ }
+ }
+
+ @if $two_comments_enable {
+ $first_comment_display: none;
+ $second_comment_display: none;
+
+ @if $two_comments_actived==$first_comment_name {
+ $first_comment_display: block;
+ }
+
+ @if $two_comments_actived==$second_comment_name {
+ $second_comment_display: block;
+ }
+
+ .comment-wrap>div:nth-child(1) {
+ display: $first_comment_display;
+ }
+
+ .comment-wrap>div:nth-child(2) {
+ display: $second_comment_display;
+ }
+ }
+}
\ No newline at end of file
diff --git a/assets/css/_common/scaffolding/fontawesome/animation.scss b/assets/css/_common/scaffolding/fontawesome/animation.scss
new file mode 100644
index 0000000..cedac48
--- /dev/null
+++ b/assets/css/_common/scaffolding/fontawesome/animation.scss
@@ -0,0 +1,4 @@
+.fa-spin {
+ -webkit-animation: fa-spin .8s infinite linear;
+ animation: fa-spin .8s infinite linear;
+}
\ No newline at end of file
diff --git a/assets/css/_common/scaffolding/fontawesome/index.scss b/assets/css/_common/scaffolding/fontawesome/index.scss
new file mode 100644
index 0000000..ed88f4c
--- /dev/null
+++ b/assets/css/_common/scaffolding/fontawesome/index.scss
@@ -0,0 +1 @@
+@import 'animation';
\ No newline at end of file
diff --git a/assets/css/_common/scaffolding/highlight/copy-code.scss b/assets/css/_common/scaffolding/highlight/copy-code.scss
index d0a1c83..72e2e7c 100644
--- a/assets/css/_common/scaffolding/highlight/copy-code.scss
+++ b/assets/css/_common/scaffolding/highlight/copy-code.scss
@@ -11,13 +11,11 @@
position: absolute;
transition: opacity $transition-ease;
- @if $cfg_codeblock_copy_btn_style == 'flat' {
background: white;
border: 0;
font-size: $font-size-smaller;
right: 0;
top: 0;
- } @else if $cfg_codeblock_copy_btn_style == 'mac' {
color: var(--highlight-foreground);
font-size: 14px;
right: 0;
@@ -33,7 +31,6 @@
}
}
-@if $cfg_codeblock_copy_btn_style == 'mac' {
figure.highlight {
border-radius: 5px;
box-shadow: 0 10px 30px 0 rgba(0, 0, 0, .4);
diff --git a/assets/css/_common/scaffolding/highlight/index.scss b/assets/css/_common/scaffolding/highlight/index.scss
index b373751..173d5b0 100644
--- a/assets/css/_common/scaffolding/highlight/index.scss
+++ b/assets/css/_common/scaffolding/highlight/index.scss
@@ -1,13 +1,8 @@
// Use `@use` to fix issue #67
-// TODO Not understand how to import dymatic variable
// @import '(theme.highlight.enable && theme.highlight.light.file) ? theme.highlight.light.file : null';
// @import '(theme.prism.enable && theme.prism.light) ? theme.prism.light : null';
// @import '(theme.prism.enable && theme.prism.number) ? theme.prism.number : null';
-// @media (prefers-color-scheme: dark) {
- // @import '(theme.darkmode && theme.highlight.enable && theme.highlight.dark.file) ? theme.highlight.dark.file : null';
- // @import '(theme.darkmode && theme.prism.enable && theme.prism.dark) ? theme.prism.dark : null';
-// }
// @import 'theme.codeblock.copy_button.enable ? "copy-code" : null';
@@ -43,6 +38,7 @@
pre, code {
font-family: $code-font-family;
+ color: #fff;
}
code {
@@ -61,6 +57,7 @@ kbd {
font-family: inherit;
padding: .1em .3em;
white-space: nowrap;
+ color: #fff;
}
// `highlight.line_number: false` and `highlight.wrap: false`
diff --git a/assets/css/_common/scaffolding/index.scss b/assets/css/_common/scaffolding/index.scss
index aec7a8d..5cd24ed 100644
--- a/assets/css/_common/scaffolding/index.scss
+++ b/assets/css/_common/scaffolding/index.scss
@@ -10,3 +10,4 @@
@import 'tags';
@import 'pagination';
@import 'comments';
+@import 'fontawesome';
diff --git a/assets/css/_common/scaffolding/tags/mermaid.scss b/assets/css/_common/scaffolding/tags/mermaid.scss
index 4e20812..ab8b522 100644
--- a/assets/css/_common/scaffolding/tags/mermaid.scss
+++ b/assets/css/_common/scaffolding/tags/mermaid.scss
@@ -1,4 +1,4 @@
-@if $cfg_mermaid_enable {
+@if $mermaid_enable {
.mermaid {
margin-bottom: 20px;
text-align: center;
diff --git a/assets/css/_common/scaffolding/tags/note.scss b/assets/css/_common/scaffolding/tags/note.scss
index 8a119ed..d29d8cd 100644
--- a/assets/css/_common/scaffolding/tags/note.scss
+++ b/assets/css/_common/scaffolding/tags/note.scss
@@ -1,9 +1,9 @@
//@use 'sass:map';
-@if $cfg_note_style != 'disabled' {
+@if $note_style != 'disabled' {
.post-body .note {
- $note-icons : $cfg_note_icons;
- $note-style : $cfg_note_style;
+ $note-icons : $note_icons;
+ $note-style : $note_style;
border-radius: $note-border-radius;
margin-bottom: 20px;
@@ -68,7 +68,6 @@
&.#{$type} {
@if $note-style == 'flat' {
background: map-get($note-bg, $type);
- @if $cfg_darkmode {
@media (prefers-color-scheme: dark) {
background: mix(map-get($note-bg, $type), $body-bg-color-dark, 10%);
}
diff --git a/assets/css/_common/scaffolding/tags/pdf.scss b/assets/css/_common/scaffolding/tags/pdf.scss
index 2505369..b873a21 100644
--- a/assets/css/_common/scaffolding/tags/pdf.scss
+++ b/assets/css/_common/scaffolding/tags/pdf.scss
@@ -1,7 +1,7 @@
-@if $cfg_pdf_enable {
+@if $pdf_enable {
.pdfobject-container {
iframe, embed {
- height: convert($cfg_pdf_height);
+ height: $pdf_height;
width: 100%;
}
}
diff --git a/assets/css/_common/scaffolding/tags/tabs.scss b/assets/css/_common/scaffolding/tags/tabs.scss
index 156ce27..3cfafd1 100644
--- a/assets/css/_common/scaffolding/tags/tabs.scss
+++ b/assets/css/_common/scaffolding/tags/tabs.scss
@@ -42,7 +42,6 @@
border-radius: $tbr;
}
- @if $cfg_tabs_trans_tabs {
transition: all $transition-ease-out;
}
@@ -57,7 +56,6 @@
width: (18em / 14);
}
- @if $cfg_tabs_trans_labels {
transition: all $transition-ease-out;
}
}
diff --git a/assets/css/_common/scaffolding/toggles.scss b/assets/css/_common/scaffolding/toggles.scss
index 7683386..c54669a 100644
--- a/assets/css/_common/scaffolding/toggles.scss
+++ b/assets/css/_common/scaffolding/toggles.scss
@@ -18,9 +18,7 @@
}
.toggle.toggle-arrow {
- @include toggle-arrow($cfg_sidebar_position);
}
.toggle.toggle-close {
- @include toggle-close($cfg_sidebar_position);
}
diff --git a/assets/css/_mixins.scss b/assets/css/_mixins.scss
new file mode 100644
index 0000000..9e435a8
--- /dev/null
+++ b/assets/css/_mixins.scss
@@ -0,0 +1,243 @@
+@mixin mobile-smallest() {
+ @media (max-width: 413px) {
+ @content;;
+ }
+}
+
+@mixin mobile-small() {
+ @media (max-width: 567px) {
+ @content;
+ }
+}
+
+@mixin mobile() {
+ @media (max-width: 767px) {
+ @content;
+ }
+}
+
+@mixin tablet-mobile() {
+ @media (max-width: 991px) {
+ @content;
+ }
+}
+
+@mixin tablet-desktop() {
+ @media (min-width: 768px) {
+ @content;
+ }
+}
+
+@mixin tablet() {
+ @media (min-width: 768px) and (max-width: 991px) {
+ @content;
+ }
+}
+
+@mixin desktop() {
+ @media (min-width: 992px) {
+ @content;
+ }
+}
+
+@mixin desktop-large() {
+ @media (min-width: 1200px) {
+ @content;
+ }
+}
+
+@mixin desktop-largest() {
+ @media (min-width: 1600px) {
+ @content;
+ }
+}
+
+@mixin word-wrap() {
+ overflow-wrap: break-word;
+}
+
+@mixin disable-user-select() {
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+@mixin sidebar-inline-links-item() {
+ margin: 5px 0 0;
+
+ a {
+ box-sizing: border-box;
+ display: inline-block;
+ max-width: 100%;
+ overflow: hidden;
+ padding: 0 5px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+}
+
+@mixin flex-wrap() {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+}
+
+@mixin flex-column() {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+}
+
+@mixin post-card() {
+ background: var(--card-bg-color);
+ border-left: 3px solid $red;
+ margin: $post-card-margin;
+}
+
+@mixin font-family-icons($icon : '') {
+ @if $icon {
+ content: $icon;
+ }
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 900;
+}
+
+@mixin main-container() {
+ margin: 0 auto;
+ width: $content-desktop;
+
+ @include desktop-large() {
+ width: $content-desktop-large;
+ }
+
+ @include desktop-largest() {
+ width: $content-desktop-largest;
+ }
+}
+
+@function sidebar-toggle-alignment($reverse) {
+ $condition : $sidebar_position == 'right';
+ @if ($scheme == 'Muse') or ($scheme == 'Mist') {
+ $condition : $condition == $reverse;
+ }
+ @return if($condition, ('left' 'right'), ('right' 'left'));
+}
+
+@mixin sidebar-toggle-position($reverse) {
+ $alignment : nth(sidebar-toggle-alignment($reverse), 1);
+ #{$alignment}: $b2t-position-right;
+ @include tablet-mobile() {
+ #{$alignment}: $b2t-position-right-mobile;
+ }
+}
+
+@mixin sidebar-toggle() {
+ background: $b2t-bg-color;
+ cursor: pointer;
+ opacity: $b2t-opacity;
+ position: fixed;
+ z-index: $zindex-3;
+ @include sidebar-toggle-position(false);
+
+ &:hover {
+ opacity: $b2t-opacity-hover;
+ }
+
+ @include tablet-mobile() {
+ opacity: $b2t-opacity-hover;
+ }
+}
+
+@mixin round-icon($diameter) {
+ border-radius: 50%;
+ content: ' ';
+ height: $diameter;
+ width: $diameter;
+}
+
+@mixin toggle-arrow($position) {
+ @if $position == 'right' {
+ .toggle-line:first-child {
+ top: 2px;
+ transform: rotate(-45deg);
+ width: 50%;
+ }
+
+ .toggle-line:last-child {
+ top: -2px;
+ transform: rotate(45deg);
+ width: 50%;
+ }
+ } @else {
+ .toggle-line:first-child {
+ left: 50%;
+ top: 2px;
+ transform: rotate(45deg);
+ width: 50%;
+ }
+
+ .toggle-line:last-child {
+ left: 50%;
+ top: -2px;
+ transform: rotate(-45deg);
+ width: 50%;
+ }
+ }
+}
+
+@mixin toggle-close($position) {
+ .toggle-line:nth-child(2) {
+ opacity: 0;
+ }
+
+ @if $position == 'right' {
+ .toggle-line:first-child {
+ top: 5px;
+ transform: rotate(-45deg);
+ }
+
+ .toggle-line:last-child {
+ top: -5px;
+ transform: rotate(45deg);
+ }
+ } @else {
+ .toggle-line:first-child {
+ top: 5px;
+ transform: rotate(45deg);
+ }
+
+ .toggle-line:last-child {
+ top: -5px;
+ transform: rotate(-45deg);
+ }
+ }
+}
+
+@mixin site-nav-hide-by-default() {
+ --scroll-height: 0;
+ height: 0;
+ overflow: hidden;
+ transition: height $transition-ease;
+
+ body:not(.site-nav-on) & .animated {
+ animation: none;
+ }
+
+ body.site-nav-on & {
+ height: var(--scroll-height);
+ }
+}
+
+@mixin button($color) {
+ background: transparent;
+ color: $color;
+ cursor: pointer;
+ line-height: 2;
+ padding: 0 15px;
+
+ &:hover {
+ background: $color;
+ color: white;
+ }
+}
diff --git a/assets/css/_schemes/Gemini/index.scss b/assets/css/_schemes/Gemini/index.scss
new file mode 100644
index 0000000..ad88c56
--- /dev/null
+++ b/assets/css/_schemes/Gemini/index.scss
@@ -0,0 +1,130 @@
+@import '../Pisces/_layout';
+@import '../Pisces/_header';
+@import '../Pisces/_menu';
+@import '../Pisces/_sub-menu';
+@import '../Pisces/_sidebar';
+
+// ==================================================
+// Rewrite _layout.styl
+// ==================================================
+// Sidebar padding used as main desktop content padding for sidebar padding and post blocks padding too.
+
+// In `source/css/_variables/Pisces.styl` there are variable for main offset:
+// $sidebar-offset : 12px;
+// This value alse can be changed in main NexT config as `sidebar: offset: 12` option.
+
+// In `source/css/_variables/base.styl` there are variables for other resolutions:
+// $content-tablet-padding : 10px;
+// $content-mobile-padding : 8px;
+// P.S. If u want to change this paddings u may set this variables into `custom_file_path.variable` (in theme _config.yml).
+
+// So, it will 12px in Desktop, 10px in Tablets and 8px in Mobiles for all possible paddings.
+
+// ==================================================
+// Desktop layout styles.
+// ==================================================
+// Post blocks.
+.main-inner > {
+ .sub-menu, .post-block, .tabs-comment, .comments, .post-comments, .pagination {
+ background: var(--content-bg-color);
+ border-radius: $border-radius-inner;
+ box-shadow: $box-shadow-inner;
+
+ &:not(:first-child):not(.sub-menu) {
+ border-radius: $border-radius;
+ box-shadow: $box-shadow;
+ margin-top: $sidebar-offset;
+
+ @include tablet() {
+ margin-top: $content-tablet-padding;
+ }
+
+ @include mobile() {
+ margin-top: $content-mobile-padding;
+ }
+ }
+ }
+}
+
+// Post & Comments blocks.
+.post-block, .comments, .post-comments {
+ padding: $content-desktop-padding;
+}
+
+// Post delimiters.
+.post-eof {
+ display: none;
+}
+
+// Pagination.
+.pagination {
+ border-top: initial;
+ padding: 10px 0;
+}
+
+// ==================================================
+// Headers.
+// ==================================================
+.post-body {
+ h1, h2 {
+ border-bottom: 1px solid $body-bg-color;
+ }
+
+ h3 {
+ border-bottom: 1px dotted $body-bg-color;
+ }
+}
+
+// ==================================================
+// > 768px & < 991px
+// ==================================================
+@include tablet() {
+ // Posts in blocks.
+ .main-inner {
+ padding: $content-tablet-padding;
+ }
+
+ .posts-expand {
+ // Components inside Posts.
+ .post-button {
+ margin-top: ($content-tablet-padding * 2);
+ }
+ }
+
+ .post-block {
+ // Inside posts blocks content padding (default 40px).
+ padding: ($content-tablet-padding * 2);
+ }
+
+ .comments, .post-comments {
+ padding: $content-tablet-padding ($content-tablet-padding * 2);
+ // padding: initial;
+ // padding-top: $content-tablet-padding;
+ }
+}
+
+// ==================================================
+// < 767px
+// ==================================================
+@include mobile() {
+ // Posts in blocks.
+ .main-inner {
+ padding: $content-mobile-padding;
+ }
+
+ .posts-expand {
+ // Components inside Posts.
+ .post-button {
+ margin: $sidebar-offset 0;
+ }
+ }
+
+ .post-block {
+ // Inside posts blocks content padding (default 40px).
+ padding: $sidebar-offset;
+ }
+
+ .comments, .post-comments {
+ padding: 10px $sidebar-offset;
+ }
+}
diff --git a/assets/css/_schemes/Mist/_header.scss b/assets/css/_schemes/Mist/_header.scss
new file mode 100644
index 0000000..b51c36a
--- /dev/null
+++ b/assets/css/_schemes/Mist/_header.scss
@@ -0,0 +1,56 @@
+// Header
+// --------------------------------------------------
+.header-inner {
+ align-items: center;
+ display: flex;
+ padding: 20px 0;
+
+ @include mobile() {
+ display: block;
+ padding: 10px 0;
+ }
+}
+
+.site-meta {
+ line-height: normal;
+
+ .brand {
+ padding: 2px 1px;
+
+ @include mobile() {
+ display: block;
+ }
+ }
+
+ .site-title {
+ font-weight: bolder;
+ }
+}
+
+.logo-line {
+ background: var(--brand-color);
+ display: block;
+ height: 2px;
+ margin: 0 auto;
+ width: 75%;
+
+ @include mobile() {
+ display: none;
+ }
+}
+
+.use-motion {
+ .logo-line:first-of-type {
+ transform: scaleX(0);
+ transform-origin: left;
+ }
+
+ .logo-line:last-of-type {
+ transform: scaleX(0);
+ transform-origin: right;
+ }
+}
+
+.site-subtitle {
+ display: none;
+}
diff --git a/assets/css/_schemes/Mist/_layout.scss b/assets/css/_schemes/Mist/_layout.scss
new file mode 100644
index 0000000..649389c
--- /dev/null
+++ b/assets/css/_schemes/Mist/_layout.scss
@@ -0,0 +1,43 @@
+// Tags
+// --------------------------------------------------
+hr {
+ height: 2px;
+ margin: 20px 0;
+}
+
+// Components
+// --------------------------------------------------
+.btn {
+ padding: 0 10px;
+}
+
+.headband {
+ display: none;
+}
+
+// Pagination
+// --------------------------------------------------
+.pagination {
+ text-align: left;
+
+ @include mobile() {
+ margin: 80px 0 0;
+ text-align: center;
+ }
+}
+
+// Footer
+// --------------------------------------------------
+.footer {
+ background: var(--content-bg-color);
+ color: var(--text-color);
+ padding: 10px 0;
+}
+
+.footer-inner {
+ text-align: left;
+
+ @include mobile() {
+ text-align: center;
+ }
+}
diff --git a/assets/css/_schemes/Mist/_menu.scss b/assets/css/_schemes/Mist/_menu.scss
new file mode 100644
index 0000000..6f4ae85
--- /dev/null
+++ b/assets/css/_schemes/Mist/_menu.scss
@@ -0,0 +1,45 @@
+// Menu
+// --------------------------------------------------
+.site-nav {
+ flex-grow: 1;
+
+ @include mobile() {
+ padding: 0 10px 0;
+ }
+}
+
+.main-menu {
+ @include mobile() {
+ padding-top: 10px;
+ }
+}
+
+.menu {
+ padding: 0;
+
+ .menu-item {
+ margin: 0;
+
+ @include mobile() {
+ margin-top: 5px;
+ }
+
+ a {
+ border-radius: 2px;
+ padding: 0 10px;
+ transition-property: background;
+
+ @include mobile() {
+ text-align: left;
+ }
+ }
+
+ .badge {
+ background: white;
+ border-radius: 10px;
+ color: $black-light;
+ padding: 1px 4px;
+ text-shadow: 1px 1px 0 rgba(0, 0, 0, .1);
+ }
+ }
+}
diff --git a/assets/css/_schemes/Mist/_posts-expand.scss b/assets/css/_schemes/Mist/_posts-expand.scss
new file mode 100644
index 0000000..14a1940
--- /dev/null
+++ b/assets/css/_schemes/Mist/_posts-expand.scss
@@ -0,0 +1,72 @@
+// Post Expand
+// --------------------------------------------------
+.posts-expand {
+ &.index {
+ .post-header {
+ text-align: left;
+
+ @include mobile() {
+ text-align: center;
+ }
+ }
+
+ .post-meta-container {
+ margin-top: 5px;
+ }
+
+ .post-meta {
+ justify-content: flex-start;
+
+ @include mobile() {
+ justify-content: center;
+ }
+ }
+ }
+
+ .post-eof {
+ display: none;
+ }
+
+ .post-block:not(:first-of-type) {
+ margin-top: 120px;
+ }
+
+ .post-header {
+ margin-bottom: 20px;
+ }
+
+ .post-tags {
+ text-align: left;
+
+ a {
+ background: var(--content-bg-color);
+ border-bottom: 0;
+ padding: 1px 5px;
+
+ &:hover {
+ background: var(--menu-item-bg-color);
+ }
+ }
+ }
+
+ .post-nav {
+ margin-top: 40px;
+ }
+}
+
+.post-button {
+ margin-top: 20px;
+ text-align: left;
+
+ .btn {
+ background: none;
+ border: 0;
+ border-bottom: 2px solid var(--btn-default-border-color);
+ padding: 0;
+ transition-property: border;
+
+ &:hover {
+ border-bottom-color: var(--btn-default-hover-border-color);
+ }
+ }
+}
diff --git a/assets/css/_schemes/Mist/index.scss b/assets/css/_schemes/Mist/index.scss
new file mode 100644
index 0000000..6969d77
--- /dev/null
+++ b/assets/css/_schemes/Mist/index.scss
@@ -0,0 +1,10 @@
+//
+// Mist scheme
+// ==================================================
+@import '_layout';
+@import '_header';
+@import '_menu';
+@import '_posts-expand';
+@import '../Muse/_layout';
+@import '../Muse/_sidebar';
+@import '../Muse/_sub-menu';
diff --git a/assets/css/_schemes/Muse/_header.scss b/assets/css/_schemes/Muse/_header.scss
new file mode 100644
index 0000000..d143a4b
--- /dev/null
+++ b/assets/css/_schemes/Muse/_header.scss
@@ -0,0 +1,18 @@
+.custom-logo-image {
+ background: white;
+ margin: 0 auto 10px;
+ max-width: 150px;
+ padding: 5px;
+}
+
+.brand {
+ background: var(--btn-default-bg);
+}
+
+.header-inner {
+ padding-top: 100px;
+
+ @include mobile() {
+ padding-top: 50px;
+ }
+}
diff --git a/assets/css/_schemes/Muse/_layout.scss b/assets/css/_schemes/Muse/_layout.scss
new file mode 100644
index 0000000..e8380a7
--- /dev/null
+++ b/assets/css/_schemes/Muse/_layout.scss
@@ -0,0 +1,28 @@
+.main-inner {
+ @include main-container();
+
+ @include mobile() {
+ padding-left: 20px;
+ padding-right: 20px;
+ }
+}
+
+.header-inner, .main-inner, .footer-inner {
+ @include mobile() {
+ width: auto;
+ }
+}
+
+// Page - Container
+// --------------------------------------------------
+.main-inner {
+ padding-bottom: $content-padding-bottom;
+}
+
+.post-block:first-of-type {
+ padding-top: $posts-first-padding;
+
+ @include mobile() {
+ padding-top: $posts-first-padding-mobile;
+ }
+}
diff --git a/assets/css/_schemes/Muse/_menu.scss b/assets/css/_schemes/Muse/_menu.scss
new file mode 100644
index 0000000..3cc88ac
--- /dev/null
+++ b/assets/css/_schemes/Muse/_menu.scss
@@ -0,0 +1,56 @@
+.site-nav {
+ @include mobile() {
+ padding-top: 30px;
+ }
+}
+
+.main-menu {
+ @include mobile() {
+ border-bottom: 1px solid $grey-lighter;
+ border-top: 1px solid $grey-lighter;
+ }
+}
+
+.menu {
+ @include mobile() {
+ text-align: left;
+ }
+}
+
+.menu .menu-item {
+ @include mobile() {
+ margin: 0 10px;
+ }
+
+ a {
+ border-bottom: 1px solid transparent;
+
+ @include mobile() {
+ padding: 5px 10px;
+ }
+
+ &:hover, &.menu-item-active {
+ background: transparent;
+ border-bottom: 1px solid var(--link-hover-color);
+
+ @include mobile() {
+ border-bottom: 1px dotted $grey-lighter;
+ }
+ }
+ }
+
+ .fa, .fab, .far, .fas {
+ @include tablet-desktop() {
+ display: block;
+ line-height: 2;
+ margin-right: 0;
+ width: 100%;
+ }
+ }
+
+ .badge {
+ background: $gainsboro;
+ color: $black-light;
+ padding: 1px 4px;
+ }
+}
diff --git a/assets/css/_schemes/Muse/_sidebar.scss b/assets/css/_schemes/Muse/_sidebar.scss
new file mode 100644
index 0000000..464a8c5
--- /dev/null
+++ b/assets/css/_schemes/Muse/_sidebar.scss
@@ -0,0 +1,94 @@
+@if $sidebar_position == 'right' {
+ .sidebar-active {
+ @include desktop() {
+ padding-right: $sidebar-desktop;
+ }
+ }
+
+ .sidebar {
+ right: 0 - $sidebar-desktop;
+
+ .sidebar-active & {
+ right: 0;
+ }
+ }
+} @else {
+ .sidebar-active {
+ @include desktop() {
+ padding-left: $sidebar-desktop;
+ }
+ }
+
+ .sidebar {
+ left: 0 - $sidebar-desktop;
+
+ .sidebar-active & {
+ left: 0;
+ }
+ }
+}
+
+.sidebar {
+ background: $black-deep;
+ bottom: 0;
+ @if not $back2top_sidebar {
+ box-shadow: inset 0 2px 6px black;
+ }
+ position: fixed;
+ top: 0;
+ transition: all $transition-ease-out;
+ width: $sidebar-desktop;
+ z-index: $zindex-2;
+
+ a {
+ border-bottom-color: $black-light;
+ color: $grey-dark;
+
+ &:hover {
+ border-bottom-color: $gainsboro;
+ color: $gainsboro;
+ }
+ }
+}
+
+.links-of-author, .links-of-social {
+ &:not(:first-child) {
+ margin-top: 15px;
+ }
+
+ a {
+ border-bottom-color: $black-light;
+ display: inline-block;
+ margin-bottom: 10px;
+ margin-right: 10px;
+ vertical-align: middle;
+
+ @if $social_icons_transition {
+ transition: all $transition-ease;
+ }
+
+ &::before {
+ background: rgb(random(255), random(255), random(255));
+ display: inline-block;
+ margin-right: 3px;
+ transform: translateY(-2px);
+ @include round-icon(4px);
+ }
+ }
+}
+
+.links-of-blogroll-item {
+ @if $links_settings_layout == 'inline' {
+ display: inline-block;
+ }
+ padding: 2px 10px;
+
+ a {
+ box-sizing: border-box;
+ display: inline-block;
+ max-width: 280px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+}
diff --git a/assets/css/_schemes/Muse/_sub-menu.scss b/assets/css/_schemes/Muse/_sub-menu.scss
new file mode 100644
index 0000000..59bf193
--- /dev/null
+++ b/assets/css/_schemes/Muse/_sub-menu.scss
@@ -0,0 +1,7 @@
+.sub-menu {
+ margin: 10px 0;
+
+ .menu-item {
+ display: inline-block;
+ }
+}
diff --git a/assets/css/_schemes/Muse/index.scss b/assets/css/_schemes/Muse/index.scss
new file mode 100644
index 0000000..959b7ae
--- /dev/null
+++ b/assets/css/_schemes/Muse/index.scss
@@ -0,0 +1,5 @@
+@import '_layout';
+@import '_header';
+@import '_menu';
+@import '_sub-menu';
+@import '_sidebar';
diff --git a/assets/css/_schemes/Pisces/_header.scss b/assets/css/_schemes/Pisces/_header.scss
new file mode 100644
index 0000000..82fabe7
--- /dev/null
+++ b/assets/css/_schemes/Pisces/_header.scss
@@ -0,0 +1,35 @@
+.site-brand-container {
+ background: var(--theme-color);
+
+ .site-nav-on & {
+ @include tablet-mobile() {
+ box-shadow: 0 0 16px rgba(0, 0, 0, .5);
+ }
+ }
+}
+
+.site-meta {
+ padding: 20px 0;
+}
+
+.brand {
+ padding: 0;
+}
+
+.site-subtitle {
+ margin: 10px 10px 0;
+}
+
+.site-nav-toggle, .site-nav-right {
+ @include tablet() {
+ @include flex-column();
+ }
+
+ .toggle {
+ color: white;
+
+ .toggle-line {
+ background: white;
+ }
+ }
+}
diff --git a/assets/css/_schemes/Pisces/_layout.scss b/assets/css/_schemes/Pisces/_layout.scss
new file mode 100644
index 0000000..621ee85
--- /dev/null
+++ b/assets/css/_schemes/Pisces/_layout.scss
@@ -0,0 +1,54 @@
+.header-inner {
+ background: var(--content-bg-color);
+ border-radius: $border-radius-inner;
+ box-shadow: $box-shadow-inner;
+ width: $sidebar-desktop;
+
+ @include tablet-mobile() {
+ border-radius: initial;
+ width: auto;
+ }
+}
+
+.main {
+ // Make sure that .header and .main-inner are the same height
+ // Required for .sidebar `position: sticky;`
+ align-items: stretch;
+ display: flex;
+ justify-content: space-between;
+ @include main-container();
+
+ @if $sidebar_position == 'right' {
+ flex-direction: row-reverse;
+ }
+
+ @include tablet-mobile() {
+ display: block;
+ width: auto;
+ }
+}
+
+.main-inner {
+ border-radius: $border-radius-inner;
+ box-sizing: border-box;
+ width: $content-wrap;
+
+ @include tablet-mobile() {
+ border-radius: initial;
+ width: 100%;
+ }
+}
+
+.footer-inner {
+ @if $sidebar_position == 'right' {
+ padding-right: $sidebar-desktop + $sidebar-offset;
+ } @else {
+ padding-left: $sidebar-desktop + $sidebar-offset;
+ }
+
+ @include tablet-mobile() {
+ padding-left: 0;
+ padding-right: 0;
+ width: auto;
+ }
+}
diff --git a/assets/css/_schemes/Pisces/_menu.scss b/assets/css/_schemes/Pisces/_menu.scss
new file mode 100644
index 0000000..abacc7b
--- /dev/null
+++ b/assets/css/_schemes/Pisces/_menu.scss
@@ -0,0 +1,46 @@
+.site-nav {
+ @include tablet() {
+ @include site-nav-hide-by-default();
+ }
+}
+
+.menu .menu-item {
+ display: block;
+ margin: 0;
+
+ a {
+ padding: 5px 20px;
+ position: relative;
+ text-align: left;
+ transition-property: background-color;
+ }
+
+ @include tablet-mobile() {
+ &.menu-item-search {
+ display: none;
+ }
+ }
+
+ .badge {
+ background: $grey-light;
+ border-radius: 10px;
+ color: var(--content-bg-color);
+ float: right;
+ padding: 2px 5px;
+ text-shadow: 1px 1px 0 rgba(0, 0, 0, .1);
+ }
+}
+
+@if not $menu_settings_badges {
+ .main-menu .menu-item-active::after {
+ background: $grey;
+ border-radius: 50%;
+ content: ' ';
+ height: 6px;
+ margin-top: -3px;
+ position: absolute;
+ right: 15px;
+ top: 50%;
+ width: 6px;
+ }
+}
diff --git a/assets/css/_schemes/Pisces/_sidebar.scss b/assets/css/_schemes/Pisces/_sidebar.scss
new file mode 100644
index 0000000..c8a5715
--- /dev/null
+++ b/assets/css/_schemes/Pisces/_sidebar.scss
@@ -0,0 +1,92 @@
+.sidebar {
+ margin-top: $sidebar-offset;
+ // https://caniuse.com/css-sticky
+ position: -webkit-sticky;
+ position: sticky;
+ top: $sidebar-offset;
+ width: $sidebar-desktop;
+
+ @include tablet-mobile() {
+ display: none;
+ }
+
+ @if $motion_enable and $motion_transition_sidebar {
+ visibility: hidden;
+ }
+}
+
+.sidebar-toggle {
+ display: none;
+}
+
+.sidebar-inner {
+ background: var(--content-bg-color);
+ border-radius: $border-radius;
+ box-shadow: $box-shadow;
+ box-sizing: border-box;
+ color: var(--text-color);
+}
+
+.site-state-item {
+ padding: 0 10px;
+}
+
+.sidebar .sidebar-button {
+ border-bottom: 1px dotted $grey-light;
+ border-top: 1px dotted $grey-light;
+
+ button {
+ border: 0;
+ color: $orange;
+ display: block;
+ width: 100%;
+
+ &:hover {
+ background: none;
+ border: 0;
+ color: darken($orange, 20%);
+ }
+ }
+}
+
+.links-of-author, .links-of-social {
+ @include flex-wrap();
+}
+
+.links-of-author-item, .links-of-social-item {
+ @include sidebar-inline-links-item();
+
+ @if not $social_icons_only {
+ width: 50%;
+ }
+
+ a {
+ border-bottom: 0;
+ border-radius: 4px;
+ display: block;
+
+ &:hover {
+ background: var(--body-bg-color);
+ }
+ }
+}
+
+.links-of-blogroll-item {
+ @if $links_settings_layout == 'inline' {
+ display: inline-block;
+ max-width: 100%;
+ @include sidebar-inline-links-item();
+ }
+}
+
+@if $back2top_sidebar {
+ // Only when back2top.sidebar is true, apply the following styles
+ .back-to-top {
+ background: var(--body-bg-color);
+ margin: 8px - $sidebar-offset -10px -18px;
+
+ &.back-to-top-on {
+ margin-top: 16px;
+ }
+ }
+}
diff --git a/assets/css/_schemes/Pisces/_sub-menu.scss b/assets/css/_schemes/Pisces/_sub-menu.scss
new file mode 100644
index 0000000..166f600
--- /dev/null
+++ b/assets/css/_schemes/Pisces/_sub-menu.scss
@@ -0,0 +1,28 @@
+.sub-menu {
+ margin: 0;
+ padding: 6px 0;
+
+ .menu-item {
+ display: inline-block;
+
+ a {
+ background: transparent;
+ margin: 5px 10px;
+ padding: initial;
+
+ &:hover {
+ background: transparent;
+ color: $sidebar-highlight;
+ }
+ }
+ }
+
+ .menu-item-active {
+ border-bottom-color: $sidebar-highlight;
+ color: $sidebar-highlight;
+
+ &:hover {
+ border-bottom-color: $sidebar-highlight;
+ }
+ }
+}
diff --git a/assets/css/_schemes/Pisces/index.scss b/assets/css/_schemes/Pisces/index.scss
new file mode 100644
index 0000000..c07d31b
--- /dev/null
+++ b/assets/css/_schemes/Pisces/index.scss
@@ -0,0 +1,30 @@
+@import '_layout';
+@import '_header';
+@import '_menu';
+@import '_sub-menu';
+@import '_sidebar';
+
+.main-inner {
+ background: var(--content-bg-color);
+ box-shadow: $box-shadow-inner;
+ padding: $content-desktop-padding;
+
+ @include tablet-mobile() {
+ padding: 20px;
+ }
+}
+
+// Sub-menu(s).
+.sub-menu {
+ border-bottom: 1px solid $table-border-color;
+}
+
+.post-block:first-of-type {
+ padding-top: 40px;
+}
+
+.pagination {
+ @include mobile() {
+ margin-bottom: 10px;
+ }
+}
diff --git a/assets/css/_variables/Mist.scss b/assets/css/_variables/Mist.scss
new file mode 100644
index 0000000..9049411
--- /dev/null
+++ b/assets/css/_variables/Mist.scss
@@ -0,0 +1,25 @@
+// Variables of Mist scheme
+// ==================================================
+
+@import 'Muse';
+
+$content-padding-bottom : 80px;
+$posts-first-padding : 80px;
+$posts-first-padding-mobile : 60px;
+
+$link-decoration-color : $grey-light;
+$content-bg-color : $whitesmoke;
+$menu-item-bg-color : $grey-lighter;
+
+$head-bg : var(--content-bg-color);
+$brand-color : $black-deep;
+$brand-hover-color : $brand-color;
+
+$posts-collapse-left : 0;
+
+$btn-default-bg : transparent;
+$btn-default-color : var(--link-color);
+$btn-default-hover-bg : transparent;
+$btn-default-border-color : var(--link-color);
+$btn-default-hover-color : var(--link-hover-color);
+$btn-default-hover-border-color : var(--link-hover-color);
diff --git a/assets/css/_variables/Muse.scss b/assets/css/_variables/Muse.scss
new file mode 100644
index 0000000..b0000af
--- /dev/null
+++ b/assets/css/_variables/Muse.scss
@@ -0,0 +1,9 @@
+// Variables of Muse scheme
+// ==================================================
+
+$sidebar-width : if(type-of($sidebar_width) == number, $sidebar_width, 320);
+$sidebar-desktop : $sidebar-width * 1px;
+
+$content-padding-bottom : 60px;
+$posts-first-padding : 70px;
+$posts-first-padding-mobile : 35px;
diff --git a/assets/css/_variables/Pisces.scss b/assets/css/_variables/Pisces.scss
index 85d6284..83eecbc 100644
--- a/assets/css/_variables/Pisces.scss
+++ b/assets/css/_variables/Pisces.scss
@@ -5,7 +5,7 @@
// --------------------------------------------------
$body-bg-color : #f5f7f9;
-$sidebar-width : if(type-of($cfg_sidebar_width) == number, $cfg_sidebar_width, 240);
+$sidebar-width : if(type-of($sidebar_width) == number, $sidebar_width, 240);
$sidebar-desktop : $sidebar-width * 1px;
$content-wrap : calc(100% - #{$sidebar-width + $sidebar-offset});
diff --git a/assets/css/_variables/base.scss b/assets/css/_variables/base.scss
index 568ef01..6f6973b 100644
--- a/assets/css/_variables/base.scss
+++ b/assets/css/_variables/base.scss
@@ -68,14 +68,17 @@ $card-bg-color-dark : $black-light;
$menu-item-bg-color : $whitesmoke;
$menu-item-bg-color-dark : $black-light;
-$theme-color : convert($cfg_thm_cor_light);
-$theme-color-dark : convert($cfg_thm_cor_dark);
+// TODO why there need convert
+
+$theme-color : $theme_color_light;
+$theme-color-dark : $theme_color_dark;
// Typography
// Font, line-height, and elements colors.
// --------------------------------------------------
@function get-font-family($config) {
- /* $custom-family : hexo-config('font.' + $config + '.family'); */
+ //TODO find the way daymatic variable
+ $custom-family: $config;
$custom-family: 'Microsoft YaHei';
@return if(type-of($custom-family) == string, unquote($custom-family), null);
}
@@ -110,7 +113,6 @@ $font-family-monospace : consolas, Menlo, monospace, $font-family-chinese;
// Font size
-$font-size-base : if(($cfg_font_enable and type-of($cfg_font_global_size) == number), $cfg_font_global_size * 1em, 1em);
$font-size-smallest : .75em;
$font-size-smaller : .8125em;
$font-size-small : .875em;
@@ -122,7 +124,6 @@ $font-size-largest : 1.5em;
// Headings font size
$font-size-headings-step : .125em;
-$font-size-headings-base : if(($cfg_font_enable and type-of($cfg_font_headings_size) == number), $cfg_font_headings_size * 1em, 1.625em);
// Global line height
@@ -156,13 +157,9 @@ $table-row-hover-bg-color-dark : #363636;
// --------------------------------------------------
$code-font-family : $font-family-monospace;
-$highlight-background : $cfg_hl_light_bg;
-$highlight-foreground : $cfg_hl_light_fg;
$highlight-gutter-background : mix($highlight-background, $highlight-foreground, 90%);
$highlight-gutter-foreground : mix($highlight-background, $highlight-foreground, 10%);
-$highlight-background-dark : $cfg_hl_dark_bg;
-$highlight-foreground-dark : $cfg_hl_dark_bg;
$highlight-gutter-background-dark : mix($highlight-background-dark, $highlight-foreground-dark, 90%);
$highlight-gutter-foreground-dark : mix($highlight-background-dark, $highlight-foreground-dark, 10%);
@@ -229,7 +226,6 @@ $brand-hover-color : white;
$brand-color-dark : $grey-lighter;
$brand-hover-color-dark : $grey-lighter;
-$font-size-title : if(($cfg_font_enable and type-of($cfg_font_title_size) == number), $cfg_font_title_size * 1em, 1.375em);
$font-size-subtitle : $font-size-smaller;
$subtitle-color : $grey-dark;
$site-subtitle-color : $grey-dark;
@@ -253,8 +249,6 @@ $tag-cloud-end-dark : #eee;
// Variables for sidebar section elements.
// --------------------------------------------------
-$sidebar-padding : if(type-of($cfg_sidebar_padding) == number, $cfg_sidebar_padding * 1px, 18px);
-$sidebar-offset : if(type-of($cfg_sidebar_offset) == number, $cfg_sidebar_offset * 1px, 12px);
$sidebar-nav-color : $grey-dim;
$sidebar-nav-hover-color : $whitesmoke;
$sidebar-highlight : $blue-bright;
@@ -294,13 +288,11 @@ $b2t-bg-color : $black-deep;
$post-eof-margin-top : 80px; // or 160px for more white space;
$post-eof-margin-bottom : 60px; // or 120px for less white space;
-$post-card-margin : 1em 0 0;
// Note colors
// --------------------------------------------------
// Read note light_bg_offset from NexT config and set in '$lbg%' to use it as string variable.
-$lbg : if(type-of($cfg_note_light_bg_offset) == number, $cfg_note_light_bg_offset * 1%, 0);
$note-types : 'default' 'primary' 'info' 'success' 'warning' 'danger';
$note-border-radius : 3px;
diff --git a/assets/css/main.scss b/assets/css/main.scss
index b7a6bd7..620fd7f 100644
--- a/assets/css/main.scss
+++ b/assets/css/main.scss
@@ -1,19 +1,151 @@
// CSS Style Guide: https://codeguide.co/#css
+// All variables from site's config content.
+{{- $P := .Site.Params }}
+// Base
+$scheme: {{ $P.scheme }};
+$darkmode: {{ $P.darkmode }};
+$body_scrollbar_overlay: {{ $P.bodyScrollbar.overlay }};
+$body_scrollbar_stable: {{ $P.bodyScrollbar.stable }};
+$mermaid_enable: {{ $P.mermaid.enable }};
+$mobile_layout_economy: {{ $P.mobileLayoutEconomy }};
+$theme_color_dark: {{ $P.themeColor.dark }};
+$theme_color_light: {{ $P.themeColor.light }};
-//$scheme : $cfg_scheme;
+// Header
+$bookmark_color: {{ $P.bookmark.color }};
+$bookmark_enable: {{ $P.bookmark.enable }};
+$github_banner_enable: {{ $P.githubBanner.enable }};
+$menu_settings_badges: {{ $P.menuSets.badges }};
+// Footer
+$footer_icon_color: {{ $P.footer.icon.color }};
+$footer_icon_animated: {{ $P.footer.icon.animated }};
+$footer_beian_enable: {{ $P.footer.beian.enable }};
+$footer_vendors_enable: {{ isset $P.footer "vendors" }};
+// Counter
+$busuanzi_enable: {{ $P.busuanzi.enable }};
+$busuanzi_visitors: {{ $P.busuanzi.visitors }};
+$busuanzi_views: {{ $P.busuanzi.views }};
+$busuanzi_post_views: {{ $P.busuanzi.postViews }};
+
+// Font
+$font_enable: {{ $P.font.enable }};
+$font_global_size: {{ default $P.font.global.size 1 }};
+$font_headings_size: {{ default $P.font.headings.size 1.625 }};
+$font_title_size: {{ default $P.font.title.size 1.375 }};
+
+// Code & Code blocks
+// TODO find the configure variable
+$highlight_dark_background: #000;
+$highlight_dark_foreground: #222;
+$highlight_light_background: #000;
+$highlight_light_foreground: #222;
+
+$codeblock_copy_btn_style: {{ $P.codeblock.copyBtn.style }};
+
+// Sidebar
+$sidebar_offset: {{ $P.sidebar.offset }};
+$sidebar_padding: {{ $P.sidebar.padding }};
+$sidebar_position: {{ $P.sidebar.position }};
+$sidebar_width: {{ $P.sidebar.width }};
+
+$motion_enable: {{ $P.motion.enable }};
+$motion_transition_sidebar: {{ $P.motion.transition.sidebar }};
+
+$back2top_enable: {{ $P.backTop.enable }};
+$back2top_scrollpercent: {{ $P.backTop.scrollpercent }};
+$back2top_sidebar: {{ $P.backTop.sidebar }};
+
+$avatar_rotated: {{ $P.avatar.rotated }};
+$avatar_rounded: {{ $P.avatar.rounded }};
+$avatar_rounded: {{ $P.avatar.rounded }};
+$site_state: {{ $P.siteState }};
+$social_icons_only: {{ $P.socialIcons.iconsOnly }};
+$social_icons_transition: {{ $P.socialIcons.transition }};
+$links_settings_layout: {{ $P.linksSets.layout }};
+$toc_enable: {{ $P.toc.enable }};
+$toc_expand_all: {{ $P.toc.expandAll }};
+$toc_wrap: {{ $P.toc.wrap }};
+
+// Posts
+$creative_commons_post: {{ $P.creativeCommons.post }};
+$follow_me: {{ isset $P "followme" }};
+$motion_trans_coll_header: {{ $P.motion.transition.collHeader }};
+$motion_trans_post_block: {{ $P.motion.transition.postBlock }};
+$motion_trans_post_body: {{ $P.motion.transition.postBody }};
+$motion_trans_post_header: {{ $P.motion.transition.postHeader }};
+$post_edit_enable: {{ $P.postEdit.enable }};
+$post_meta_item_text: {{ $P.postMeta.itemText }};
+$reward_settings_animation: {{ $P.rewardSets.animation }};
+$post_end_line_tip: "{{ $P.postFooter.endLineTip }}";
+$post_end_tag_icon: {{ $P.postFooter.tagIcon }};
+
+// TODO find the paramters
+$text_align_desktop: justify;
+$text_align_mobile: justify;
+
+// Note
+$note_icons: {{ $P.note.icons }};
+$note_light_bg_offset: {{ $P.note.lightBgOffset }};
+$note_style: {{ $P.note.style }};
+
+// Tabs
+$tabs_transition_labels: {{ $P.tabs.transition.labels }};
+$tabs_transition_tabs: {{ $P.tabs.transition.tabs }};
+
+// Reading progress bar
+$reading_progress_start: {{ $P.readingProgress.start }};
+$reading_progress_color: {{ $P.readingProgress.color }};
+$reading_progress_enable: {{ $P.readingProgress.enable }};
+$reading_progress_height: {{ $P.readingProgress.height }};
+$reading_progress_position: {{ $P.readingProgress.position }};
+$reading_progress_reversed: {{ $P.readingProgress.reversed }};
+
+// Thirdparty
+$math_mathjax_enable: {{ $P.math.mathjax.enable }};
+$related_posts_enable: {{ $P.relatedPosts.enable }};
+$pdf_enable: {{ $P.pdf.enable }};
+$pdf_height: {{ $P.pdf.height }};
+
+// Search engine
+$algolia_search_enable: {{ $P.algoliaSearch.enable }};
+$local_search_enable: {{ $P.localSearch.enable }};
+
+// Online IM
+$gitalk_enable: {{ $P.gitalk.enable }};
+$gitter_enable: {{ $P.gitter.enable }};
+
+// Comment
+$disqusjs_enable: {{ $P.disqusjs.enable }};
+$livere_enable: {{ $P.livere.enable }};
+$utterances_enable: {{ $P.utterances.enable }};
+$waline_enable: {{ $P.waline.enable }};
+{{- with .Site.Params.comments }}
+{{ $tce := and (isset . "nav") (and .storage (gt (len .nav) 1)) }}
+$two_comments_enable: {{ $tce }};
+{{- if $tce }}
+{{- $sortNav := sort .nav "weight" }}
+$two_comments_actived: {{ .active }};
+$first_comment_color: {{ (index $sortNav 0).color }};
+$first_comment_name: {{ lower (index $sortNav 0).name }};
+$second_comment_color: {{ (index $sortNav 1).color }};
+$second_comment_name: {{ lower (index $sortNav 1).name }};
+{{- end }}
+{{- end }}
+
+//
// Variables Layer
// --------------------------------------------------
@import '_variables/base';
-//@import '"_variables/" + theme.scheme';
-@import "_variables/Gemini";
+// TODO
// @import 'theme.injects.variable';
// Mixins Layer
// --------------------------------------------------
@import '_mixins';
+// TODO
// @import 'theme.injects.mixin';
// Dark mode colors
@@ -30,14 +162,13 @@
@import '_common/outline';
// Components
-//@import '_common/components';
// Schemes Layer
// --------------------------------------------------
-// @import '"_schemes/" + theme.scheme';
// Custom Layer
+// TODO
// --------------------------------------------------
// @import 'theme.injects.style';
diff --git a/assets/js/bookmark.js b/assets/js/bookmark.js
new file mode 100644
index 0000000..8e3ae6a
--- /dev/null
+++ b/assets/js/bookmark.js
@@ -0,0 +1,56 @@
+/* global CONFIG */
+
+document.addEventListener('DOMContentLoaded', () => {
+ 'use strict';
+
+ const doSaveScroll = () => {
+ localStorage.setItem('bookmark' + location.pathname, window.scrollY);
+ };
+
+ const scrollToMark = () => {
+ let top = localStorage.getItem('bookmark' + location.pathname);
+ top = parseInt(top, 10);
+ // If the page opens with a specific hash, just jump out
+ if (!isNaN(top) && location.hash === '') {
+ // Auto scroll to the position
+ window.anime({
+ targets : document.scrollingElement,
+ duration : 200,
+ easing : 'linear',
+ scrollTop: top
+ });
+ }
+ };
+ // Register everything
+ const init = function(trigger) {
+ // Create a link element
+ const link = document.querySelector('.book-mark-link');
+ // Scroll event
+ window.addEventListener('scroll', () => link.classList.toggle('book-mark-link-fixed', window.scrollY === 0), { passive: true });
+ // Register beforeunload event when the trigger is auto
+ if (trigger === 'auto') {
+ // Register beforeunload event
+ window.addEventListener('beforeunload', doSaveScroll);
+ document.addEventListener('pjax:send', doSaveScroll);
+ }
+ // Save the position by clicking the icon
+ link.addEventListener('click', () => {
+ doSaveScroll();
+ window.anime({
+ targets : link,
+ duration: 200,
+ easing : 'linear',
+ top : -30,
+ complete: () => {
+ setTimeout(() => {
+ link.style.top = '';
+ }, 400);
+ }
+ });
+ });
+ scrollToMark();
+ document.addEventListener('pjax:success', scrollToMark);
+ };
+
+ init(CONFIG.bookmark.save);
+});
diff --git a/assets/js/comments-buttons.js b/assets/js/comments-buttons.js
new file mode 100644
index 0000000..505c21b
--- /dev/null
+++ b/assets/js/comments-buttons.js
@@ -0,0 +1,25 @@
+/* global CONFIG */
+
+(function() {
+ const commentButton = document.querySelectorAll('.comment-button');
+ commentButton.forEach(element => {
+ const commentClass = element.classList[2];
+ element.addEventListener('click', () => {
+ commentButton.forEach(active => active.classList.toggle('active', active === element));
+ document.querySelectorAll('.comment-position').forEach(active => active.classList.toggle('active', active.classList.contains(commentClass)));
+ if (CONFIG.comments.storage) {
+ localStorage.setItem('comments_active', commentClass);
+ }
+ });
+ });
+ let { activeClass } = CONFIG.comments;
+ if (CONFIG.comments.storage) {
+ activeClass = localStorage.getItem('comments_active') || activeClass;
+ }
+ if (activeClass) {
+ const activeButton = document.querySelector(`.comment-button.${activeClass}`);
+ if (activeButton) {
+ activeButton.click();
+ }
+ }
+})();
diff --git a/assets/js/comments.js b/assets/js/comments.js
new file mode 100644
index 0000000..4045e8c
--- /dev/null
+++ b/assets/js/comments.js
@@ -0,0 +1,21 @@
+/* global CONFIG */
+
+window.addEventListener('tabs:register', () => {
+ let { activeClass } = CONFIG.comments;
+ if (CONFIG.comments.storage) {
+ activeClass = localStorage.getItem('comments_active') || activeClass;
+ }
+ if (activeClass) {
+ const activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
+ if (activeTab) {
+ activeTab.click();
+ }
+ }
+});
+if (CONFIG.comments.storage) {
+ window.addEventListener('tabs:click', event => {
+ if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
+ const commentClass = event.target.classList[1];
+ localStorage.setItem('comments_active', commentClass);
+ });
+}
diff --git a/assets/js/config.js b/assets/js/config.js
new file mode 100644
index 0000000..caa0075
--- /dev/null
+++ b/assets/js/config.js
@@ -0,0 +1,66 @@
+if (!window.NexT) window.NexT = {};
+
+(function() {
+ const className = 'next-config';
+
+ const staticConfig = {};
+ let variableConfig = {};
+
+ const parse = text => JSON.parse(text || '{}');
+
+ const update = name => {
+ const targetEle = document.querySelector(`.${className}[data-name="${name}"]`);
+ if (!targetEle) return;
+ const parsedConfig = parse(targetEle.text);
+ if (name === 'main') {
+ Object.assign(staticConfig, parsedConfig);
+ } else {
+ variableConfig[name] = parsedConfig;
+ }
+ };
+
+ update('main');
+
+ window.CONFIG = new Proxy({}, {
+ get(overrideConfig, name) {
+ let existing;
+ if (name in staticConfig) {
+ existing = staticConfig[name];
+ } else {
+ if (!(name in variableConfig)) update(name);
+ existing = variableConfig[name];
+ }
+
+ // For unset override and mixable existing
+ if (!(name in overrideConfig) && typeof existing === 'object') {
+ // Get ready to mix.
+ overrideConfig[name] = {};
+ }
+
+ if (name in overrideConfig) {
+ const override = overrideConfig[name];
+
+ // When mixable
+ if (typeof override === 'object' && typeof existing === 'object') {
+ // Mix, proxy changes to the override.
+ return new Proxy({ ...existing, ...override }, {
+ set(target, prop, value) {
+ target[prop] = value;
+ override[prop] = value;
+ return true;
+ }
+ });
+ }
+
+ return override;
+ }
+
+ // Only when not mixable and override hasn't been set.
+ return existing;
+ }
+ });
+
+ document.addEventListener('pjax:success', () => {
+ variableConfig = {};
+ });
+})();
diff --git a/assets/js/motion.js b/assets/js/motion.js
new file mode 100644
index 0000000..2f38249
--- /dev/null
+++ b/assets/js/motion.js
@@ -0,0 +1,125 @@
+/* global NexT, CONFIG */
+
+NexT.motion = {};
+
+NexT.motion.integrator = {
+ queue: [],
+ init : function() {
+ this.queue = [];
+ return this;
+ },
+ add: function(fn) {
+ const sequence = fn();
+ if (CONFIG.motion.async) this.queue.push(sequence);
+ else this.queue = this.queue.concat(sequence);
+ return this;
+ },
+ bootstrap: function() {
+ if (!CONFIG.motion.async) this.queue = [this.queue];
+ this.queue.forEach(sequence => {
+ const timeline = window.anime.timeline({
+ duration: 200,
+ easing : 'linear'
+ });
+ sequence.forEach(item => {
+ if (item.deltaT) timeline.add(item, item.deltaT);
+ else timeline.add(item);
+ });
+ });
+ }
+};
+
+NexT.motion.middleWares = {
+ header: function() {
+ const sequence = [];
+
+ function getMistLineSettings(targets) {
+ sequence.push({
+ targets,
+ scaleX : [0, 1],
+ duration: 500,
+ deltaT : '-=200'
+ });
+ }
+
+ function pushToSequence(targets, sequenceQueue = false) {
+ sequence.push({
+ targets,
+ opacity: 1,
+ top : 0,
+ deltaT : sequenceQueue ? '-=200' : '-=0'
+ });
+ }
+
+ pushToSequence('header.header');
+ CONFIG.scheme === 'Mist' && getMistLineSettings('.logo-line');
+ CONFIG.scheme === 'Muse' && pushToSequence('.custom-logo-image');
+ pushToSequence('.site-title');
+ pushToSequence('.site-brand-container .toggle', true);
+ pushToSequence('.site-subtitle');
+ (CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini') && pushToSequence('.custom-logo-image');
+
+ document.querySelectorAll('.menu-item').forEach(targets => {
+ sequence.push({
+ targets,
+ complete: () => targets.classList.add('animated', 'fadeInDown'),
+ deltaT : '-=200'
+ });
+ });
+
+ return sequence;
+ },
+
+ subMenu: function() {
+ const subMenuItem = document.querySelectorAll('.sub-menu .menu-item');
+ if (subMenuItem.length > 0) {
+ subMenuItem.forEach(element => {
+ element.classList.add('animated');
+ });
+ }
+ return [];
+ },
+
+ postList: function() {
+ const sequence = [];
+ const { post_block, post_header, post_body, coll_header } = CONFIG.motion.transition;
+
+ function animate(animation, selector) {
+ if (!animation) return;
+ document.querySelectorAll(selector).forEach(targets => {
+ sequence.push({
+ targets,
+ complete: () => targets.classList.add('animated', animation),
+ deltaT : '-=100'
+ });
+ });
+ }
+
+ animate(post_block, '.post-block, .pagination, .comments');
+ animate(coll_header, '.collection-header');
+ animate(post_header, '.post-header');
+ animate(post_body, '.post-body');
+
+ return sequence;
+ },
+
+ sidebar: function() {
+ const sidebar = document.querySelector('.sidebar');
+ const sidebarTransition = CONFIG.motion.transition.sidebar;
+ // Only for Pisces | Gemini.
+ if (sidebarTransition && (CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini')) {
+ return [{
+ targets : sidebar,
+ complete: () => sidebar.classList.add('animated', sidebarTransition)
+ }];
+ }
+ return [];
+ },
+
+ footer: function() {
+ return [{
+ targets: document.querySelector('.footer'),
+ opacity: 1
+ }];
+ }
+};
diff --git a/assets/js/next-boot.js b/assets/js/next-boot.js
new file mode 100644
index 0000000..dedb54b
--- /dev/null
+++ b/assets/js/next-boot.js
@@ -0,0 +1,75 @@
+/* global NexT, CONFIG */
+
+NexT.boot = {};
+
+NexT.boot.registerEvents = function() {
+
+ NexT.utils.registerScrollPercent();
+ NexT.utils.registerCanIUseTag();
+
+ // Mobile top menu bar.
+ document.querySelector('.site-nav-toggle .toggle').addEventListener('click', event => {
+ event.currentTarget.classList.toggle('toggle-close');
+ const siteNav = document.querySelector('.site-nav');
+ if (!siteNav) return;
+ siteNav.style.setProperty('--scroll-height', siteNav.scrollHeight + 'px');
+ document.body.classList.toggle('site-nav-on');
+ });
+
+ document.querySelectorAll('.sidebar-nav li').forEach((element, index) => {
+ element.addEventListener('click', () => {
+ NexT.utils.activateSidebarPanel(index);
+ });
+ });
+
+ window.addEventListener('hashchange', () => {
+ const tHash = location.hash;
+ if (tHash !== '' && !tHash.match(/%\S{2}/)) {
+ const target = document.querySelector(`.tabs ul.nav-tabs li a[href="${tHash}"]`);
+ target && target.click();
+ }
+ });
+};
+
+NexT.boot.refresh = function() {
+
+ /**
+ * Register JS handlers by condition option.
+ * Need to add config option in Front-End at 'scripts/helpers/next-config.js' file.
+ */
+ CONFIG.prism && window.Prism.highlightAll();
+ /*CONFIG.mediumzoom && window.mediumZoom('.post-body :not(a) > img, .post-body > img', {
+ background: 'var(--content-bg-color)'
+ });*/
+ CONFIG.lazyload && window.lozad('.post-body img').observe();
+ CONFIG.pangu && window.pangu.spacingPage();
+
+ CONFIG.exturl && NexT.utils.registerExtURL();
+ NexT.utils.registerCopyCode();
+ NexT.utils.registerTabsTag();
+ /*NexT.utils.registerActiveMenuItem();
+ NexT.utils.registerLangSelect();*/
+ NexT.utils.registerSidebarTOC();
+ NexT.utils.registerPostReward();
+ NexT.utils.wrapTableWithBox();
+ NexT.utils.registerVideoIframe();
+};
+
+NexT.boot.motion = function() {
+ // Define Motion Sequence & Bootstrap Motion.
+ if (CONFIG.motion.enable) {
+ NexT.motion.integrator
+ .add(NexT.motion.middleWares.header)
+ .add(NexT.motion.middleWares.postList)
+ .add(NexT.motion.middleWares.sidebar)
+ .add(NexT.motion.middleWares.footer)
+ .bootstrap();
+ }
+ NexT.utils.updateSidebarPosition();
+};
+
+document.addEventListener('DOMContentLoaded', () => {
+ NexT.boot.registerEvents();
+ NexT.boot.refresh();
+ NexT.boot.motion();
+});
diff --git a/assets/js/pjax.js b/assets/js/pjax.js
new file mode 100644
index 0000000..da61136
--- /dev/null
+++ b/assets/js/pjax.js
@@ -0,0 +1,34 @@
+/* global NexT, CONFIG, Pjax */
+
+const pjax = new Pjax({
+ selectors: [
+ 'head title',
+ 'script[type="application/json"]',
+ '.main-inner',
+ '.post-toc-wrap',
+ '.languages',
+ '.pjax'
+ ],
+ analytics: false,
+ cacheBust: false,
+ scrollTo : !CONFIG.bookmark.enable
+});
+
+document.addEventListener('pjax:success', () => {
+ pjax.executeScripts(document.querySelectorAll('script[data-pjax]'));
+ NexT.boot.refresh();
+ // Define Motion Sequence & Bootstrap Motion.
+ if (CONFIG.motion.enable) {
+ NexT.motion.integrator
+ .init()
+ .add(NexT.motion.middleWares.subMenu)
+ .add(NexT.motion.middleWares.postList)
+ .bootstrap();
+ }
+ if (CONFIG.sidebar.display !== 'remove') {
+ const hasTOC = document.querySelector('.post-toc');
+ document.querySelector('.sidebar-inner').classList.toggle('sidebar-nav-active', hasTOC);
+ NexT.utils.activateSidebarPanel(hasTOC ? 0 : 1);
+ NexT.utils.updateSidebarPosition();
+ }
+});
diff --git a/assets/js/schedule.js b/assets/js/schedule.js
new file mode 100644
index 0000000..8f0c26c
--- /dev/null
+++ b/assets/js/schedule.js
@@ -0,0 +1,138 @@
+/* global CONFIG */
+
+// https://developers.google.com/calendar/api/v3/reference/events/list
+(function() {
+ // Initialization
+ const calendar = {
+ orderBy : 'startTime',
+ showLocation: false,
+ offsetMax : 72,
+ offsetMin : 4,
+ showDeleted : false,
+ singleEvents: true,
+ maxResults : 250
+ };
+
+ // Read config form theme config file
+ Object.assign(calendar, CONFIG.calendar);
+
+ const now = new Date();
+ const timeMax = new Date();
+ const timeMin = new Date();
+
+ timeMax.setHours(now.getHours() + calendar.offsetMax);
+ timeMin.setHours(now.getHours() - calendar.offsetMin);
+
+ // Build URL
+ const params = {
+ key : calendar.api_key,
+ orderBy : calendar.orderBy,
+ timeMax : timeMax.toISOString(),
+ timeMin : timeMin.toISOString(),
+ showDeleted : calendar.showDeleted,
+ singleEvents: calendar.singleEvents,
+ maxResults : calendar.maxResults
+ };
+
+ const request_url = new URL(`https://www.googleapis.com/calendar/v3/calendars/${calendar.calendar_id}/events`);
+ Object.entries(params).forEach(param => request_url.searchParams.append(...param));
+
+ function getRelativeTime(current, previous) {
+ const msPerMinute = 60 * 1000;
+ const msPerHour = msPerMinute * 60;
+ const msPerDay = msPerHour * 24;
+ const msPerMonth = msPerDay * 30;
+ const msPerYear = msPerDay * 365;
+
+ let elapsed = current - previous;
+ const tense = elapsed > 0 ? ' ago' : ' later';
+
+ elapsed = Math.abs(elapsed);
+
+ if (elapsed < msPerHour) {
+ return Math.round(elapsed / msPerMinute) + ' minutes' + tense;
+ } else if (elapsed < msPerDay) {
+ return Math.round(elapsed / msPerHour) + ' hours' + tense;
+ } else if (elapsed < msPerMonth) {
+ return 'about ' + Math.round(elapsed / msPerDay) + ' days' + tense;
+ } else if (elapsed < msPerYear) {
+ return 'about ' + Math.round(elapsed / msPerMonth) + ' months' + tense;
+ }
+
+ return 'about ' + Math.round(elapsed / msPerYear) + ' years' + tense;
+ }
+
+ function buildEventDOM(tense, event, start, end) {
+ const durationFormat = {
+ weekday: 'short',
+ hour : '2-digit',
+ minute : '2-digit'
+ };
+ const relativeTime = tense === 'now' ? 'NOW' : getRelativeTime(now, start);
+ const duration = start.toLocaleTimeString([], durationFormat) + ' - ' + end.toLocaleTimeString([], durationFormat);
+
+ let location = '';
+ if (calendar.showLocation && event.location) {
+ location = `${event.location}`;
+ }
+ let description = '';
+ if (event.description) {
+ description = `${event.description}`;
+ }
+
+ const eventContent = `
+ ${event.summary}
+ ${relativeTime}
+
+ ${location}
+ ${duration}
+ ${description}
+
${imageTitle}
`); + } + // Make sure img title tag will show correctly in fancybox + $imageWrapLink.attr('title', imageTitle).attr('data-caption', imageTitle); + } + }); + + $.fancybox.defaults.hash = false; + $('.fancybox').fancybox({ + loop : true, + helpers: { + overlay: { + locked: false + } + } + }); +}); diff --git a/assets/js/third-party/math/katex.js b/assets/js/third-party/math/katex.js new file mode 100644 index 0000000..ad745b1 --- /dev/null +++ b/assets/js/third-party/math/katex.js @@ -0,0 +1,7 @@ +/* global NexT, CONFIG */ + +document.addEventListener('page:loaded', () => { + if (!CONFIG.enableMath) return; + + NexT.utils.getScript(CONFIG.katex.copy_tex_js).catch(() => {}); +}); diff --git a/assets/js/third-party/math/mathjax.js b/assets/js/third-party/math/mathjax.js new file mode 100644 index 0000000..fe4d448 --- /dev/null +++ b/assets/js/third-party/math/mathjax.js @@ -0,0 +1,36 @@ +/* global NexT, CONFIG, MathJax */ + +document.addEventListener('page:loaded', () => { + if (!CONFIG.enableMath) return; + + if (typeof MathJax === 'undefined') { + window.MathJax = { + tex: { + inlineMath: { '[+]': [['$', '$']] }, + tags : CONFIG.mathjax.tags + }, + options: { + renderActions: { + insertedScript: [200, () => { + document.querySelectorAll('mjx-container').forEach(node => { + const target = node.parentNode; + if (target.nodeName.toLowerCase() === 'li') { + target.parentNode.classList.add('has-jax'); + } + }); + }, '', false] + } + } + }; + NexT.utils.getScript(CONFIG.mathjax.js, { + attributes: { + defer: true + } + }); + } else { + MathJax.startup.document.state(0); + MathJax.typesetClear(); + MathJax.texReset(); + MathJax.typesetPromise(); + } +}); diff --git a/assets/js/third-party/pace.js b/assets/js/third-party/pace.js new file mode 100644 index 0000000..c22d59f --- /dev/null +++ b/assets/js/third-party/pace.js @@ -0,0 +1,7 @@ +/* global Pace */ + +Pace.options.restartOnPushState = false; + +document.addEventListener('pjax:send', () => { + Pace.restart(); +}); diff --git a/assets/js/third-party/quicklink.js b/assets/js/third-party/quicklink.js new file mode 100644 index 0000000..2543ad1 --- /dev/null +++ b/assets/js/third-party/quicklink.js @@ -0,0 +1,37 @@ +/* global CONFIG, quicklink */ + +(function() { + if (typeof CONFIG.quicklink.ignores === 'string') { + const ignoresStr = `[${CONFIG.quicklink.ignores}]`; + CONFIG.quicklink.ignores = JSON.parse(ignoresStr); + } + + let resetFn = null; + + const onRefresh = () => { + if (resetFn) resetFn(); + if (!CONFIG.quicklink.enable) return; + + let ignoresArr = CONFIG.quicklink.ignores || []; + if (!Array.isArray(ignoresArr)) { + ignoresArr = [ignoresArr]; + } + + resetFn = quicklink.listen({ + timeout : CONFIG.quicklink.timeout, + priority: CONFIG.quicklink.priority, + ignores : [ + uri => uri.includes('#'), + uri => uri === CONFIG.quicklink.url, + ...ignoresArr + ] + }); + }; + + if (CONFIG.quicklink.delay) { + window.addEventListener('load', onRefresh); + document.addEventListener('pjax:success', onRefresh); + } else { + document.addEventListener('page:loaded', onRefresh); + } +})(); diff --git a/assets/js/third-party/rating.js b/assets/js/third-party/rating.js new file mode 100644 index 0000000..fc61a3a --- /dev/null +++ b/assets/js/third-party/rating.js @@ -0,0 +1,22 @@ +/* global CONFIG, WPac */ + +(function() { + const widgets = [{ + widget: 'Rating', + id : CONFIG.rating.id, + el : 'wpac-rating', + color : CONFIG.rating.color + }]; + + document.addEventListener('page:loaded', () => { + if (!CONFIG.page.isPost) return; + + const newWidgets = widgets.map(widget => ({ ...widget })); + + if (window.WPac) { + WPac.init(newWidgets); + } else { + window.wpac_init = newWidgets; + } + }); +})(); diff --git a/assets/js/third-party/search/algolia-search.js b/assets/js/third-party/search/algolia-search.js new file mode 100644 index 0000000..12a554c --- /dev/null +++ b/assets/js/third-party/search/algolia-search.js @@ -0,0 +1,130 @@ +/* global instantsearch, algoliasearch, CONFIG, pjax */ + +document.addEventListener('DOMContentLoaded', () => { + const { indexName, appID, apiKey, hits } = CONFIG.algolia; + + const search = instantsearch({ + indexName, + searchClient : algoliasearch(appID, apiKey), + searchFunction: helper => { + if (document.querySelector('.search-input').value) { + helper.search(); + } + } + }); + + if (typeof pjax === 'object') { + search.on('render', () => { + pjax.refresh(document.querySelector('.algolia-hits')); + }); + } + + // Registering Widgets + search.addWidgets([ + instantsearch.widgets.configure({ + hitsPerPage: hits.per_page || 10 + }), + + instantsearch.widgets.searchBox({ + container : '.search-input-container', + placeholder : CONFIG.i18n.placeholder, + // Hide default icons of algolia search + showReset : false, + showSubmit : false, + showLoadingIndicator: false, + cssClasses : { + input: 'search-input' + } + }), + + instantsearch.widgets.stats({ + container: '.algolia-stats', + templates: { + text: data => { + const stats = CONFIG.i18n.hits_time + .replace('${hits}', data.nbHits) + .replace('${time}', data.processingTimeMS); + return `${stats} +${div.textContent.substring(0, 100)}...
`; + } + return result; + }, + empty: data => { + return ` and code blocks.
+ codes:
+ external: true
+ family:
+
+
+ # ---------------------------------------------------------------
+ # SEO Settings
+ # See: https://theme-next.js.org/docs/theme-settings/seo
+ # ---------------------------------------------------------------
+
+ # If true, site-subtitle will be added to index page.
+ # Remember to set up your site-subtitle in Hexo `_config.yml` (e.g. subtitle: Subtitle)
+ index_with_subtitle: false
+
+ # Automatically add external URL with Base64 encrypt & decrypt.
+ exturl: false
+ # If true, an icon will be attached to each external URL
+ exturl_icon: true
+
+ # Google Webmaster tools verification.
+ # See: https://developers.google.com/search
+ googleSiteVerification: 5AUIVYTbHIAuz-eQtxSfZbWW5eg9_EVZMSQycIuXrG0
+
+ # Bing Webmaster tools verification.
+ # See: https://www.bing.com/webmasters
+ bingSiteVerification:
+
+ # Yandex Webmaster tools verification.
+ # See: https://webmaster.yandex.ru
+ yandexSiteVerification:
+
+ # Baidu Webmaster tools verification.
+ # See: https://ziyuan.baidu.com/site
+ baiduSiteVerification:
+
+
+ # ---------------------------------------------------------------
+ # Third Party Plugins & Services Settings
+ # See: https://theme-next.js.org/docs/third-party-services/
+ # More plugins: https://github.com/next-theme/awesome-next
+ # You may need to install the corresponding dependency packages
+ # ---------------------------------------------------------------
+
+ # Math Formulas Render Support
+ # Warning: Please install / uninstall the relevant renderer according to the documentation.
+ # See: https://theme-next.js.org/docs/third-party-services/math-equations
+ # Server-side plugin: https://github.com/next-theme/hexo-filter-mathjax
+ math:
+ # Default (false) will load mathjax / katex script on demand.
+ # That is it only render those page which has `mathjax: true` in front-matter.
+ # If you set it to true, it will load mathjax / katex script EVERY PAGE.
+ every_page: false
+
+ mathjax:
+ enable: false
+ # Available values: none | ams | all
+ tags: none
+
+ katex:
+ enable: false
+ # See: https://github.com/KaTeX/KaTeX/tree/master/contrib/copy-tex
+ copy_tex: false
+
+ # Easily enable fast Ajax navigation on your website.
+ # For more information: https://github.com/next-theme/pjax
+ pjax: false
+
+ # FancyBox is a tool that offers a nice and elegant way to add zooming functionality for images.
+ # For more information: https://fancyapps.com/fancybox/
+ fancybox: false
+
+ # A JavaScript library for zooming images like Medium.
+ # Warning: Do not enable both `fancybox` and `mediumzoom`.
+ # For more information: https://medium-zoom.francoischalifour.com
+ mediumzoom: false
+
+ # Vanilla JavaScript plugin for lazyloading images.
+ # For more information: https://apoorv.pro/lozad.js/demo/
+ lazyload: false
+
+ # Pangu Support
+ # For more information: https://github.com/vinta/pangu.js
+ # Server-side plugin: https://github.com/next-theme/hexo-pangu
+ pangu: false
+
+ # Quicklink Support
+ # For more information: https://getquick.link
+ # Front-matter variable (nonsupport home archive).
+ quicklink:
+ enable: false
+
+ # Home page and archive page can be controlled through home and archive options below.
+ # This configuration item is independent of `enable`.
+ home: false
+ archive: false
+
+ # Default (true) will initialize quicklink after the load event fires.
+ delay: true
+ # Custom a time in milliseconds by which the browser must execute prefetching.
+ timeout: 3000
+ # Default (true) will attempt to use the fetch() API if supported (rather than link[rel=prefetch]).
+ priority: true
+
+
+ # ---------------------------------------------------------------
+ # Comments Settings
+ # See: https://theme-next.js.org/docs/third-party-services/comments
+ # ---------------------------------------------------------------
+
+ # Multiple Comment System Support
+ comments:
+ enable: true
+ # Available values: tabs | buttons
+ #style: tabs
+ # Choose a comment system to be displayed by default.
+ # Available values: disqus | disqusjs | changyan | livere | gitalk | utterances
+ active: waline
+ # Setting `true` means remembering the comment system selected by the visitor.
+ storage: true
+ # Lazyload all comment systems.
+ #lazyload: false
+ # Modify texts or order for any naves, here are some examples.
+ nav:
+ - name: Waline
+ title: Waline
+ color: "#27ae60"
+ weight: 1
+ - name: Utterances
+ title: Utters
+ color: "#494949"
+ weight: 2
+
+ waline:
+ enable: true
+ placeholder: "请文明发言"
+ emoji: false
+ imgUploader: false
+ wordLimit: 200
+ requiredMeta: ['nick', 'mail']
+ serverURL: "https://waline.js.org"
+
+ # Disqus
+ # For more information: https://disqus.com
+ disqus:
+ enable: false
+ shortname:
+ count: true
+
+ # DisqusJS
+ # For more information: https://disqusjs.skk.moe
+ disqusjs:
+ enable: false
+ # API Endpoint of Disqus API (https://disqus.com/api/docs/).
+ # Leave api empty if you are able to connect to Disqus API. Otherwise you need a reverse proxy for it.
+ # For example:
+ # api: https://disqus.skk.moe/disqus/
+ api:
+ apikey: # Register new application from https://disqus.com/api/applications/
+ shortname: # See: https://disqus.com/admin/settings/general/
+
+ # Changyan
+ # For more information: https://changyan.kuaizhan.com
+ changyan:
+ enable: false
+ appid:
+ appkey:
+
+ # LiveRe comments system
+ # You can get your uid from https://livere.com/insight/myCode (General web site)
+ livere:
+ enable: true
+ uid: MTAyMC81MTM4MC8yNzg2MQ== #
+
+ # Gitalk
+ # For more information: https://gitalk.github.io
+ gitalk:
+ enable: false
+ github_id: # GitHub repo owner
+ repo: # Repository name to store issues
+ client_id: # GitHub Application Client ID
+ client_secret: # GitHub Application Client Secret
+ admin_user: # GitHub repo owner and collaborators, only these guys can initialize gitHub issues
+ distraction_free_mode: true # Facebook-like distraction free mode
+ # When the official proxy is not available, you can change it to your own proxy address
+ proxy: https://cors-anywhere.azm.workers.dev/https://github.com/login/oauth/access_token # This is official proxy address
+ # Gitalk's display language depends on user's browser or system environment
+ # If you want everyone visiting your site to see a uniform language, you can set a force language value
+ # Available values: en | es-ES | fr | ru | zh-CN | zh-TW
+ language:
+
+ # Utterances
+ # For more information: https://utteranc.es
+ utterances:
+ enable: true
+ repo: username/repo-name # Github repository owner and name
+ # Available values: pathname | url | title | og:title
+ issueTerm: pathname
+ label: Comments
+ # Available values: github-light | github-dark | preferred-color-scheme | github-dark-orange | icy-dark | dark-blue | photon-dark | boxy-light
+ theme: github-light
+
+ # Isso
+ # For more information: https://posativ.org/isso/
+ isso: #
+
+
+ # ---------------------------------------------------------------
+ # Post Widgets & Content Sharing Services
+ # See: https://theme-next.js.org/docs/third-party-services/post-widgets
+ # ---------------------------------------------------------------
+
+ # Star rating support to each article.
+ # To get your ID visit https://widgetpack.com
+ rating:
+ enable: false
+ id: #
+ color: "#fc6423"
+
+ # AddThis Share. See: https://www.addthis.com
+ # Go to https://www.addthis.com/dashboard to customize your tools.
+ addThisId:
+
+
+ # ---------------------------------------------------------------
+ # Statistics and Analytics
+ # See: https://theme-next.js.org/docs/third-party-services/statistics-and-analytics
+ # ---------------------------------------------------------------
+
+ # 51La Analytics
+ # See: https://invite.51.la/1NUfGTS1?target=V6
+ laId: #
+
+ # Google Analytics
+ # See: https://analytics.google.com
+ google_analytics:
+ tracking_id: #
+ # By default, NexT will load an external gtag.js script on your site.
+ # If you only need the pageview feature, set the following option to true to get a better performance.
+ only_pageview: false
+
+ # Baidu Analytics
+ # See: https://tongji.baidu.com
+ baidu_analytics: #
+
+ # Growingio Analytics
+ # See: https://www.growingio.com
+ growingio_analytics: #
+
+ # Cloudflare Web Analytics
+ # See: https://www.cloudflare.com/web-analytics/
+ cloudflare_analytics:
+
+ # Microsoft Clarity Analytics
+ # See: https://clarity.microsoft.com/
+ clarity_analytics: #
+
+ # Show number of visitors of each article.
+ # You can visit https://www.leancloud.cn to get AppID and AppKey.
+ leancloudVisitors:
+ enable: false
+ appId: #
+ appKey: #
+ # Required for apps from CN region
+ serverUrl: #
+ # Dependencies: https://github.com/theme-next/hexo-leancloud-counter-security
+ # If you don't care about security in leancloud counter and just want to use it directly
+ # (without hexo-leancloud-counter-security plugin), set `security` to `false`.
+ security: true
+
+ # Another tool to show number of visitors to each article.
+ # Visit https://console.firebase.google.com/u/0/ to get apiKey and projectId.
+ # Visit https://firebase.google.com/docs/firestore/ to get more information about firestore.
+ firestore:
+ enable: false
+ collection: articles # Required, a string collection name to access firestore database
+ apiKey: # Required
+ projectId: # Required
+
+ # Show Views / Visitors of the website / page with busuanzi.
+ # For more information: http://ibruce.info/2015/04/04/busuanzi/
+ busuanzi:
+ enable: true
+ visitors: true
+ visitorsIcon: fa fa-user
+ views: true
+ viewsIcon: fa fa-eye
+ postViews: true
+ postViewsIcon: far fa-eye
+
+
+ # ---------------------------------------------------------------
+ # Search Services
+ # See: https://theme-next.js.org/docs/third-party-services/search-services
+ # ---------------------------------------------------------------
+
+ # Algolia Search
+ # For more information: https://www.algolia.com
+ algoliaSearch:
+ enable: false
+ hits:
+ per_page: 10
+
+ # Local Search
+ # Dependencies: https://github.com/next-theme/hexo-generator-searchdb
+ localSearch:
+ enable: true
+ # If auto, trigger search by changing input.
+ # If manual, trigger search by pressing enter key or search button.
+ trigger: auto
+ # Show top n results per article, show all results by setting to -1
+ top_n_per_article: 1
+ # Unescape html strings to the readable one.
+ unescape: false
+ # Preload the search data when the page loads.
+ preload: false
+
+
+ # ---------------------------------------------------------------
+ # Chat Services
+ # See: https://theme-next.js.org/docs/third-party-services/chat-services
+ # ---------------------------------------------------------------
+
+ # A button to open designated chat widget in sidebar.
+ # Firstly, you need to enable and configure the chat service.
+ chat:
+ enable: false
+ icon: fa fa-comment # Icon name in Font Awesome, set false to disable icon.
+ text: Chat # Button text, change it as you wish.
+
+ # Chatra Support
+ # For more information: https://chatra.com
+ # Dashboard: https://app.chatra.io/settings/general
+ chatra:
+ enable: false
+ async: true
+ id: # Visit Dashboard to get your ChatraID
+ #embed: # Unfinished experimental feature for developers. See: https://chatra.com/help/api/#injectto
+
+ # Tidio Support
+ # For more information: https://www.tidio.com
+ # Dashboard: https://www.tidio.com/panel/dashboard
+ tidio:
+ enable: false
+ key: # Public Key, get it from dashboard. See: https://www.tidio.com/panel/settings/developer
+
+ # Gitter Support
+ # For more information: https://gitter.im
+ gitter:
+ enable: false
+ room:
+
+
+ # ---------------------------------------------------------------
+ # Tags Settings
+ # See: https://theme-next.js.org/docs/tag-plugins/
+ # ---------------------------------------------------------------
# Note tag (bootstrap callout)
note:
@@ -289,7 +932,7 @@ params:
icons: false
# Offset lighter of background in % for modern and flat styles (modern: -12 | 12; flat: -18 | 6).
# Offset also applied to label tag variables. This option can work with disabled note tag.
- light_bg_offset: 0
+ lightBgOffset: 0
# Tabs tag
tabs:
@@ -308,44 +951,79 @@ params:
# Default height
height: 500px
- # Show Views / Visitors of the website / page with busuanzi.
- # For more information: http://ibruce.info/2015/04/04/busuanzi/
- busuanzi:
+ # Mermaid tag
+ mermaid:
enable: false
- visitors: true
- visitorsIcon: fa fa-user
- views: true
- viewsIcon: fa fa-eye
- postViews: true
- postViewsIcon: far fa-eye
+ # Available themes: default | dark | forest | neutral
+ theme:
+ light: default
+ dark: dark
+
# ---------------------------------------------------------------
- # Search Services
- # See: https://theme-next.js.org/docs/third-party-services/search-services
+ # Animation Settings
# ---------------------------------------------------------------
- # Algolia Search
- # For more information: https://www.algolia.com
- algoliaSearch:
+ # Use Animate.css to animate everything.
+ # For more information: https://animate.style
+ motion:
enable: false
- hits:
- perPage: 10
+ async: false
+ transition:
+ # All available transition variants: https://theme-next.js.org/animate/
+ postBlock: fadeIn
+ postHeader: fadeInDown
+ postBody: fadeInDown
+ collHeader: fadeInLeft
+ # Only for Pisces | Gemini.
+ sidebar: fadeInUp
- # Local Search
- # Dependencies: https://github.com/next-theme/hexo-generator-searchdb
- localSearch:
+ # Progress bar in the top during page loading.
+ # For more information: https://github.com/CodeByZach/pace
+ pace:
enable: false
- # If auto, trigger search by changing input.
- # If manual, trigger search by pressing enter key or search button.
- trigger: auto
- # Show top n results per article, show all results by setting to -1
- #top_n_per_article: 1
- # Unescape html strings to the readable one.
- unescape: false
- # Preload the search data when the page loads.
- preload: false
+ # All available colors:
+ # black | blue | green | orange | pink | purple | red | silver | white | yellow
+ color: blue
+ # All available themes:
+ # big-counter | bounce | barber-shop | center-atom | center-circle | center-radar | center-simple
+ # corner-indicator | fill-left | flat-top | flash | loading-bar | mac-osx | material | minimal
+ theme: minimal
- # Reduce padding / margin indents on devices with narrow width.
- mobileLayoutEconomy: false
+ # Canvas ribbon
+ # For more information: https://github.com/hustcc/ribbon.js
+ canvas_ribbon:
+ enable: false
+ size: 300 # The width of the ribbon
+ alpha: 0.6 # The transparency of the ribbon
+ zIndex: -1 # The display level of the ribbon
+
+
+ # ---------------------------------------------------------------
+ # CDN Settings
+ # See: https://theme-next.js.org/docs/advanced-settings/vendors
+ # ---------------------------------------------------------------
+
+ vendors:
+ # The CDN provider of NexT internal scripts.
+ # Available values: local | jsdelivr | unpkg | cdnjs | custom
+ # Warning: If you are using the latest master branch of NexT, please set `internal: local`
+ internal: local
+ # The default CDN provider of third-party plugins.
+ # Available values: local | jsdelivr | unpkg | cdnjs | custom
+ # Dependencies for `plugins: local`: https://github.com/next-theme/plugins
+ plugins: unpkg
+ # Custom CDN URL
+ # For example:
+ # custom_cdn_url: https://cdn.jsdelivr.net/npm/${npm_name}@${version}/${minified}
+ # custom_cdn_url: https://cdnjs.cloudflare.com/ajax/libs/${cdnjs_name}/${version}/${cdnjs_file}
+ custom_cdn_url:
+
+ # Assets
+ # Accelerate delivery of static files using a CDN
+ # The js option is only valid when vendors.internal is local.
+ css: css
+ js: js
+ images: imgs
diff --git a/exampleSite/content/about.md b/exampleSite/content/about.md
new file mode 100644
index 0000000..ae17cc8
--- /dev/null
+++ b/exampleSite/content/about.md
@@ -0,0 +1,19 @@
+---
+title: "关于 Hugo NexT 组织"
+description: ""
+
+date: 2022-06-09T20:12:52+08:00
+lastmod: 2022-06-09T20:12:52+08:00
+
+share: false
+followme: false
+nav: false
+copyright: false
+url: about.html
+---
+
+`Hugo NexT` 组织是由众多喜爱 `NexT` 主题及风格的世界各地友人共同组建而成,为的就是让这个主题继续在 `Hugo` 引擎中也能得到发扬光大,在此也欢迎你的加入!
+
+# 我们的愿景
+
+延续 `NexT` 经典的黑白调搭配,保持简单的易用性及强大的功能。
\ No newline at end of file
diff --git a/exampleSite/content/posts/emoji-support.md b/exampleSite/content/posts/emoji-support.md
new file mode 100644
index 0000000..bbf8a14
--- /dev/null
+++ b/exampleSite/content/posts/emoji-support.md
@@ -0,0 +1,202 @@
+---
+title: "支持 Emoji 表情"
+description: "Hugo 和 NexT 中的 Emoji 的用法指南。"
+keywords: "Hugo,NexT,Emoji"
+
+date: 2022-06-04T19:46:45+08:00
+lastmod: 2022-06-04T19:46:45+08:00
+
+categories:
+ - 示例
+tags:
+ - 表情
+ - emoji
+
+toc: false
+url: "emoji-support.html"
+---
+
+Emoji 可以通过多种方式在 Hugo 项目中启用。
+
+[`emojify`](https://gohugo.io/functions/emojify/) 方法可以直接在模板中调用, 或者使用[行内 Shortcodes](https://gohugo.io/templates/shortcode-templates#inline-shortcodes).
+
+要全局使用 emoji, 需要在你的[网站配置](https://gohugo.io/getting-started/configuration/)中设置 `enableEmoji` 为 `true`,
+然后你就可以直接在文章中输入 emoji 的代码。
+
+
+
+它们以**冒号**开头和结尾,并且包含 emoji 的 **代码**:
+
+```markdown
+去露营啦! {:}tent: 很快就回来.
+
+真开心! {:}joy:
+```
+
+呈现的输出效果如下:
+
+去露营啦! :tent: 很快就回来。
+
+真开心! :joy:
+
+以下**符号清单**是 emoji 代码的非常有用的参考。
+
+## 表情与情感
+
+### 笑脸表情
+
+| 图标 | 代码 | 图标 | 代码 |
+| :-: | - | :-: | - |
+| :grinning: | `grinning` | :smiley: | `smiley` |
+| :smile: | `smile` | :grin: | `grin` |
+| :laughing: | `laughing`
`satisfied` | :sweat_smile: | `sweat_smile` |
+| :rofl: | `rofl` | :joy: | `joy` |
+| :slightly_smiling_face: | `slightly_smiling_face` | :upside_down_face: | `upside_down_face` |
+| :wink: | `wink` | :blush: | `blush` |
+| :innocent: | `innocent` | | |
+
+### 爱意表情
+
+| 图标 | 代码 | 图标 | 代码 |
+| :-: | - | :-: | - |
+| :heart_eyes: | `heart_eyes` | :kissing_heart: | `kissing_heart` |
+| :kissing: | `kissing` | :relaxed: | `relaxed` |
+| :kissing_closed_eyes: | `kissing_closed_eyes` | :kissing_smiling_eyes: | `kissing_smiling_eyes` |
+
+### 吐舌头表情
+
+| 图标 | 代码 | 图标 | 代码 |
+| :-: | - | :-: | - |
+| :yum: | `yum` | :stuck_out_tongue: | `stuck_out_tongue` |
+| :stuck_out_tongue_winking_eye: | `stuck_out_tongue_winking_eye` | :stuck_out_tongue_closed_eyes: | `stuck_out_tongue_closed_eyes` |
+| :money_mouth_face: | `money_mouth_face` | | |
+
+
+### 国家和地区旗帜
+
+| 图标 | 代码 | 图标 | 代码 |
+| :-: | - | :-: | - |
+| :andorra: | `andorra` | :united_arab_emirates: | `united_arab_emirates` |
+| :afghanistan: | `afghanistan` | :antigua_barbuda: | `antigua_barbuda` |
+| :anguilla: | `anguilla` | :albania: | `albania` |
+| :armenia: | `armenia` | :angola: | `angola` |
+| :antarctica: | `antarctica` | :argentina: | `argentina` |
+| :american_samoa: | `american_samoa` | :austria: | `austria` |
+| :australia: | `australia` | :aruba: | `aruba` |
+| :aland_islands: | `aland_islands` | :azerbaijan: | `azerbaijan` |
+| :bosnia_herzegovina: | `bosnia_herzegovina` | :barbados: | `barbados` |
+| :bangladesh: | `bangladesh` | :belgium: | `belgium` |
+| :burkina_faso: | `burkina_faso` | :bulgaria: | `bulgaria` |
+| :bahrain: | `bahrain` | :burundi: | `burundi` |
+| :benin: | `benin` | :st_barthelemy: | `st_barthelemy` |
+| :bermuda: | `bermuda` | :brunei: | `brunei` |
+| :bolivia: | `bolivia` | :caribbean_netherlands: | `caribbean_netherlands` |
+| :brazil: | `brazil` | :bahamas: | `bahamas` |
+| :bhutan: | `bhutan` | :botswana: | `botswana` |
+| :belarus: | `belarus` | :belize: | `belize` |
+| :canada: | `canada` | :cocos_islands: | `cocos_islands` |
+| :congo_kinshasa: | `congo_kinshasa` | :central_african_republic: | `central_african_republic` |
+| :congo_brazzaville: | `congo_brazzaville` | :switzerland: | `switzerland` |
+| :cote_divoire: | `cote_divoire` | :cook_islands: | `cook_islands` |
+| :chile: | `chile` | :cameroon: | `cameroon` |
+| :cn: | `cn` | :colombia: | `colombia` |
+| :costa_rica: | `costa_rica` | :cuba: | `cuba` |
+| :cape_verde: | `cape_verde` | :curacao: | `curacao` |
+| :christmas_island: | `christmas_island` | :cyprus: | `cyprus` |
+| :czech_republic: | `czech_republic` | :de: | `de` |
+| :djibouti: | `djibouti` | :denmark: | `denmark` |
+| :dominica: | `dominica` | :dominican_republic: | `dominican_republic` |
+| :algeria: | `algeria` | :ecuador: | `ecuador` |
+| :estonia: | `estonia` | :egypt: | `egypt` |
+| :western_sahara: | `western_sahara` | :eritrea: | `eritrea` |
+| :es: | `es` | :ethiopia: | `ethiopia` |
+| :eu: | `eu`
`european_union` | :finland: | `finland` |
+| :fiji: | `fiji` | :falkland_islands: | `falkland_islands` |
+| :micronesia: | `micronesia` | :faroe_islands: | `faroe_islands` |
+| :fr: | `fr` | :gabon: | `gabon` |
+| :gb: | `gb`
`uk` | :grenada: | `grenada` |
+| :georgia: | `georgia` | :french_guiana: | `french_guiana` |
+| :guernsey: | `guernsey` | :ghana: | `ghana` |
+| :gibraltar: | `gibraltar` | :greenland: | `greenland` |
+| :gambia: | `gambia` | :guinea: | `guinea` |
+| :guadeloupe: | `guadeloupe` | :equatorial_guinea: | `equatorial_guinea` |
+| :greece: | `greece` | :south_georgia_south_sandwich_islands: | `south_georgia_south_sandwich_islands` |
+| :guatemala: | `guatemala` | :guam: | `guam` |
+| :guinea_bissau: | `guinea_bissau` | :guyana: | `guyana` |
+| :hong_kong: | `hong_kong` | :honduras: | `honduras` |
+| :croatia: | `croatia` | :haiti: | `haiti` |
+| :hungary: | `hungary` | :canary_islands: | `canary_islands` |
+| :indonesia: | `indonesia` | :ireland: | `ireland` |
+| :israel: | `israel` | :isle_of_man: | `isle_of_man` |
+| :india: | `india` | :british_indian_ocean_territory: | `british_indian_ocean_territory` |
+| :iraq: | `iraq` | :iran: | `iran` |
+| :iceland: | `iceland` | :it: | `it` |
+| :jersey: | `jersey` | :jamaica: | `jamaica` |
+| :jordan: | `jordan` | :jp: | `jp` |
+| :kenya: | `kenya` | :kyrgyzstan: | `kyrgyzstan` |
+| :cambodia: | `cambodia` | :kiribati: | `kiribati` |
+| :comoros: | `comoros` | :st_kitts_nevis: | `st_kitts_nevis` |
+| :north_korea: | `north_korea` | :kr: | `kr` |
+| :kuwait: | `kuwait` | :cayman_islands: | `cayman_islands` |
+| :kazakhstan: | `kazakhstan` | :laos: | `laos` |
+| :lebanon: | `lebanon` | :st_lucia: | `st_lucia` |
+| :liechtenstein: | `liechtenstein` | :sri_lanka: | `sri_lanka` |
+| :liberia: | `liberia` | :lesotho: | `lesotho` |
+| :lithuania: | `lithuania` | :luxembourg: | `luxembourg` |
+| :latvia: | `latvia` | :libya: | `libya` |
+| :morocco: | `morocco` | :monaco: | `monaco` |
+| :moldova: | `moldova` | :montenegro: | `montenegro` |
+| :madagascar: | `madagascar` | :marshall_islands: | `marshall_islands` |
+| :macedonia: | `macedonia` | :mali: | `mali` |
+| :myanmar: | `myanmar` | :mongolia: | `mongolia` |
+| :macau: | `macau` | :northern_mariana_islands: | `northern_mariana_islands` |
+| :martinique: | `martinique` | :mauritania: | `mauritania` |
+| :montserrat: | `montserrat` | :malta: | `malta` |
+| :mauritius: | `mauritius` | :maldives: | `maldives` |
+| :malawi: | `malawi` | :mexico: | `mexico` |
+| :malaysia: | `malaysia` | :mozambique: | `mozambique` |
+| :namibia: | `namibia` | :new_caledonia: | `new_caledonia` |
+| :niger: | `niger` | :norfolk_island: | `norfolk_island` |
+| :nigeria: | `nigeria` | :nicaragua: | `nicaragua` |
+| :netherlands: | `netherlands` | :norway: | `norway` |
+| :nepal: | `nepal` | :nauru: | `nauru` |
+| :niue: | `niue` | :new_zealand: | `new_zealand` |
+| :oman: | `oman` | :panama: | `panama` |
+| :peru: | `peru` | :french_polynesia: | `french_polynesia` |
+| :papua_new_guinea: | `papua_new_guinea` | :philippines: | `philippines` |
+| :pakistan: | `pakistan` | :poland: | `poland` |
+| :st_pierre_miquelon: | `st_pierre_miquelon` | :pitcairn_islands: | `pitcairn_islands` |
+| :puerto_rico: | `puerto_rico` | :palestinian_territories: | `palestinian_territories` |
+| :portugal: | `portugal` | :palau: | `palau` |
+| :paraguay: | `paraguay` | :qatar: | `qatar` |
+| :reunion: | `reunion` | :romania: | `romania` |
+| :serbia: | `serbia` | :ru: | `ru` |
+| :rwanda: | `rwanda` | :saudi_arabia: | `saudi_arabia` |
+| :solomon_islands: | `solomon_islands` | :seychelles: | `seychelles` |
+| :sudan: | `sudan` | :sweden: | `sweden` |
+| :singapore: | `singapore` | :st_helena: | `st_helena` |
+| :slovenia: | `slovenia` | :slovakia: | `slovakia` |
+| :sierra_leone: | `sierra_leone` | :san_marino: | `san_marino` |
+| :senegal: | `senegal` | :somalia: | `somalia` |
+| :suriname: | `suriname` | :south_sudan: | `south_sudan` |
+| :sao_tome_principe: | `sao_tome_principe` | :el_salvador: | `el_salvador` |
+| :sint_maarten: | `sint_maarten` | :syria: | `syria` |
+| :swaziland: | `swaziland` | :turks_caicos_islands: | `turks_caicos_islands` |
+| :chad: | `chad` | :french_southern_territories: | `french_southern_territories` |
+| :togo: | `togo` | :thailand: | `thailand` |
+| :tajikistan: | `tajikistan` | :tokelau: | `tokelau` |
+| :timor_leste: | `timor_leste` | :turkmenistan: | `turkmenistan` |
+| :tunisia: | `tunisia` | :tonga: | `tonga` |
+| :tr: | `tr` | :trinidad_tobago: | `trinidad_tobago` |
+| :tuvalu: | `tuvalu` | :taiwan: | `taiwan` |
+| :tanzania: | `tanzania` | :ukraine: | `ukraine` |
+| :uganda: | `uganda` | :us: | `us` |
+| :uruguay: | `uruguay` | :uzbekistan: | `uzbekistan` |
+| :vatican_city: | `vatican_city` | :st_vincent_grenadines: | `st_vincent_grenadines` |
+| :venezuela: | `venezuela` | :british_virgin_islands: | `british_virgin_islands` |
+| :us_virgin_islands: | `us_virgin_islands` | :vietnam: | `vietnam` |
+| :vanuatu: | `vanuatu` | :wallis_futuna: | `wallis_futuna` |
+| :samoa: | `samoa` | :kosovo: | `kosovo` |
+| :yemen: | `yemen` | :mayotte: | `mayotte` |
+| :south_africa: | `south_africa` | :zambia: | `zambia` |
+| :zimbabwe: | `zimbabwe` | | |
\ No newline at end of file
diff --git a/exampleSite/content/posts/external-link.md b/exampleSite/content/posts/external-link.md
new file mode 100644
index 0000000..1d64e82
--- /dev/null
+++ b/exampleSite/content/posts/external-link.md
@@ -0,0 +1,40 @@
+---
+title: "欢迎加入 Hugo NexT 组织!"
+description: "Hugo NexT 是专门为 Hugo 引擎所打造的主题,保持简单易用和强大的功能!"
+keywords: "Hugo,NexT,组织"
+
+date: 2022-06-01T15:59:41+08:00
+lastmod: 2022-06-01T15:59:41+08:00
+
+categories:
+ - 示例
+tags:
+ - Hugo
+ - NexT
+
+expand: true
+extlink: https://gitee.com/hugo-next/hugo-theme-next/
+#comment:
+# enable: false
+#toc: false
+#url: "external-link.html"
+weight: 1
+---
+
+欢迎来到 `Hugo NexT` 文档站点! 它是从 [Theme NexT](https://theme-next.js.org/) 移植过来的为 [Hugo](https://gohugo.io/)打造的高品质优雅主题,保持简单易用的特性和强大的功能。
+
+
+
+# 用户指南
+
+设置 NexT 主题很容易。只需遵循文档,就可快速创建您的个人网站!
+
+# 反馈
+
+- 访问 Awesome NexT 列表,与其他用户分享插件和教程。
+- 加入我们的 Gitter 聊天。
+- 在几秒钟内添加或改进翻译。
+- 在 GitHub Issues 中报告一个 :bug:。
+- 在 GitHub 上申请一个新特性。
+- 为最受欢迎的功能请求投票。
+
diff --git a/exampleSite/content/posts/hello-world.md b/exampleSite/content/posts/hello-world.md
new file mode 100644
index 0000000..2abc8de
--- /dev/null
+++ b/exampleSite/content/posts/hello-world.md
@@ -0,0 +1,58 @@
+---
+title: "世界,你好!"
+description: "快速的描述下有关于 Hugo 建站的基本用法。"
+
+lastmod: 2022-06-03T16:43:23+08:00
+date: 2022-06-02T11:52:03+08:00
+
+categories:
+ - 博客
+tags:
+ - Hugo
+ - 开始
+
+url: hello-world.html
+weight: 2
+---
+
+> “使用 `weight` 关键字置顶文章。”
+
+[Hugo](https://gohugo.io/) 是现今世界上最快的网站建设框架,也是最流行的开源静态站点生成器之一。 凭借其惊人的速度和灵活性,Hugo 让建设网站再次变得有趣起来。
+
+
+
+## 快速开始
+
+### 发表新文章
+
+```shell
+$ hugo new hello-world.md
+```
+
+更多信息:[内容格式](https://gohugo.io/content-management/formats/)
+
+### 启动服务
+
+```shell
+$ hugo server
+```
+
+更多信息:[Hugo 服务命令行](https://gohugo.io/commands/hugo_server/)
+
+### 生成静态文件
+
+```shell
+$ hugo
+```
+
+更多信息:[Hugo 建站](https://gohugo.io/commands/hugo/)
+
+### 部署到服务器
+
+```language
+$ hugo deploy
+```
+
+更多信息:[Hugo 发布](https://gohugo.io/commands/hugo_deploy/)
+
+祝你好运,相信你会喜欢上 Hugo 建站的旅程!
\ No newline at end of file
diff --git a/exampleSite/content/posts/markdown-syntax.md b/exampleSite/content/posts/markdown-syntax.md
new file mode 100644
index 0000000..ef223bd
--- /dev/null
+++ b/exampleSite/content/posts/markdown-syntax.md
@@ -0,0 +1,209 @@
+---
+title: "Markdown 语法支持"
+description: "描述下 NexT 主题所支持的各种 markdown 语法及效果展示。"
+isCJKLanguage: false
+
+lastmod: 2022-06-03T11:52:18+08:00
+publishDate: 2022-06-03T11:52:18+08:00
+
+author: Mainroad
+originLink: https://mainroad-demo.netlify.app/post/basic-elements/
+
+categories:
+ - 示例
+tags:
+ - Markdown
+ - 语法
+
+toc: false
+draft: false
+url: markdown-syntax.html
+---
+
+仅以此篇文章来测试下在 `NexT` 主题中在通过 `Hugo` 引擎来建站时,是否支持 `Markdown` 文件内容中所写的各种语法,并展示下实际的效果。
+
+
+
+## 标题样式
+
+让我们从所有可能的标题开始,在 HTML 中 ``-``元素分别表示六个不同级别的标题样式,其中 `` 为最大标题,``为最小标题,效果如下:
+
+# 标题 1
+## 标题 2
+### 标题 3
+#### 标题 4
+##### 标题 5
+###### 标题 6
+
+
+## 段落格式
+
+根据[ W3C ](https://www.w3.org/)定义的[ HTML5 规范](https://www.w3.org/TR/html5/dom.html#elements),**HTML 文档由元素和文本组成**。每个元素的组成都由一个[开始标记](https://www.w3.org/TR/html5/syntax.html#syntax-start-tags)表示,例如: `` ,和[结束标记](https://www.w3.org/TR/html5/syntax.html#syntax-end-tags)表示,例如: `` 。(*某些开始标记和结束标记在某些情况下可以省略,并由其他标记暗示。*)
+元素可以具有属性,这些属性控制元素的工作方式。例如:超链接是使用 `a` 元素及其 `href` 属性形成的。
+
+### Markdown 语法
+
+```markdown
+
+```
+
+
+### HTML IMG 标签
+
+```html
+
+```
+
+
+### SVG 格式
+
+```html
+
+```
+
+
+
+## 列表类型
+
+### 有序列表
+
+1. 第一个元素
+2. 第二个元素
+3. 第三个元素
+
+### 无序列表
+
+* 列表元素
+* 另一个元素
+* 和其它元素
+
+### 嵌套列表
+
+借助 HTML 的 `ul` 元素来实现。
+
+
+ - 第一项
+ - 第二项
+
+ - 第二项第一个子项目
+ - 第二项第二个子项目
+
+ - 第二项第二分项第一分项
+ - 第二项第二分项第二分项
+ - 第二项第二分项第三分项
+
+
+ - 第二项第三个子项目
+
+ - 第二项第三分项第一分项
+ - 第二项第三分项第二分项
+ - 第二项第三分项第三分项
+
+
+
+ - 第三项
+
+
+### 自定义列表
+
+通过 HTML 的 `dl` 元素还支持自定义列表(表格列表)。
+
+
+ - Hugo 目录结构
+ - assets
+ - config.toml
+ - content
+ - data
+ - theme
+ - static
+ - Hugo 模板
+ - 基础模板
+ - 列表模板
+ - 单页模板
+
+
+## 块引用
+
+`blockquote` 元素表示从另一个源引用的内容,可以选择引用必须在 `footer` 或 `cite` 元素中,也可以选择使用注释和缩写等行内更改。
+
+> 引用文本
+> 这一行也是同样的引用
+> 同样你也在 `blockquote` 中使用 **Markdown** 语法书写
+
+带有引文的 `Blockquote` 元素效果。
+
+
+ 我的目标不是赚大钱,是为了制造好的电脑。当我意识到我可以永远当工程师时,我才创办了这家公司。
+
+
+
+根据 Mozilla 的网站记录,Firefox 1.0 于 2004 年发布,并取得了巨大成功。
+
+## 表格
+
+表格并不算是 `Markdown` 的核心要素,但 `Hugo` 同样支持它。
+
+| ID | 创建者 | 模型 | 年份 |
+| --- | --------- | ------- | ---- |
+| 1 | Honda | Accord | 2009 |
+| 2 | Toyota | Camry | 2012 |
+| 3 | Hyundai | Elantra | 2010 |
+
+可以使用 : (英文格式冒号)来对表格内容进行对齐。
+
+| 表格 | 可以是 | 很酷 |
+|:----- |:-----:| ----:|
+| 左对齐 | 居中 | 右对齐 |
+| 左对齐 | 居中 | 右对齐 |
+| 左对齐 | 居中 | 右对齐 |
+
+同样也可以在表格中使用 `Markdown` 语法。
+
+| 表格 | 中 | 使用 | Markdown 语法 |
+| ------ | --------- | ---------- | ------------- |
+| *斜体* | **粗体** | ~~中划线~~ | `代码块` |
+
+## Code
+
+```html
+
+
+
+
+ Example HTML5 Document
+
+
+
Test
+
+
+```
+
+{{< highlight html >}}
+
+
+
+
+ Example HTML5 Document
+
+
+ Test
+
+
+{{< /highlight >}}
+
+## 其它元素: abbr、sub、sup、kbd等等
+
+GIF 是位图图像格式。
+
+H2O
+
+C6H12O6
+
+Xn + Yn = Zn
+
+按X获胜。或按CTRL+ALT+F显示 FPS 计数器。
+
+比特作为信息论中的信息单位,也被称为 shannon ,以信息论领域的创始人 Claude shannon 的名字命名。
+
+参考:
+- 来自 **Mainroad** 主题的 [Basic Elements](https://mainroad-demo.netlify.app/post/basic-elements/) 内容
diff --git a/exampleSite/content/posts/syntax-highlighting.md b/exampleSite/content/posts/syntax-highlighting.md
new file mode 100644
index 0000000..db5ccb6
--- /dev/null
+++ b/exampleSite/content/posts/syntax-highlighting.md
@@ -0,0 +1,146 @@
+---
+title: "Hugo 内置的 Chroma 语法高亮"
+description: "描述下 Chroma 所支持的各种语法及高亮效果展示"
+keywords: "Chroma,语法,高亮"
+
+date: 2022-06-07T19:09:52+08:00
+lastmod: 2022-06-07T19:09:52+08:00
+
+categories:
+ - 示例
+tags:
+ - 语法
+ - 高亮
+ - Chroma
+
+url: "syntax-highlighting.html"
+---
+
+Hugo 通过 Chroma 提供非常快速的语法高亮显示,现 Hugo 中使用 Chroma 作为代码块高亮支持,它内置在 Go 语言当中,速度是真的非常、非常快,而且最为重要的是它也兼容之前我们使用的 Pygments 方式。
+
+以下通过 Hugo 内置短代码 `highlight` 和 `Markdown` 代码块方式分别验证不同语言的代码块渲染效果并能正确高亮显示,有关优化语法突出显示的更多信息,请参阅 [Hugo 文档](https://gohugo.io/getting-started/configuration-markup#highlight)。
+
+
+
+# 编程语言
+
+## GO
+
+{{< highlight go "linenos=table,hl_lines=8 15-17,linenostart=199" >}}
+
+func GetTitleFunc(style string) func(s string) string {
+ switch strings.ToLower(style) {
+ case "go":
+ return strings.Title
+ case "chicago":
+ return transform.NewTitleConverter(transform.ChicagoStyle)
+ default:
+ return transform.NewTitleConverter(transform.APStyle)
+ }
+}
+
+{{< / highlight >}}
+
+## Java
+
+```java
+import javax.swing.JFrame; //Importing class JFrame
+import javax.swing.JLabel; //Importing class JLabel
+public class HelloWorld {
+ public static void main(String[] args) {
+ JFrame frame = new JFrame(); //Creating frame
+ frame.setTitle("Hi!"); //Setting title frame
+ frame.add(new JLabel("Hello, world!"));//Adding text to frame
+ frame.pack(); //Setting size to smallest
+ frame.setLocationRelativeTo(null); //Centering frame
+ frame.setVisible(true); //Showing frame
+ }
+}
+```
+
+## Python
+
+``` python
+print "Hello, world!"
+```
+
+## Git 对比
+
+``` diff {hl_lines=[4,"6-7"], linenos=true}
+*** /path/to/original ''timestamp''
+--- /path/to/new ''timestamp''
+***************
+*** 1 ****
+! This is a line.
+--- 1 ---
+! This is a replacement line.
+It is important to spell
+-removed line
++new line
+```
+
+```diff {hl_lines=[4,"6-7"], linenos=false}
+*** /path/to/original ''timestamp''
+--- /path/to/new ''timestamp''
+***************
+*** 1 ****
+! This is a line.
+--- 1 ---
+! This is a replacement line.
+It is important to spell
+-removed line
++new line
+```
+
+# 文件
+
+## Make 文件
+
+``` makefile {linenos=false}
+CC=gcc
+CFLAGS=-I.
+
+hellomake: hellomake.o hellofunc.o
+ $(CC) -o hellomake hellomake.o hellofunc.o -I.
+```
+
+## Markdown 文档
+
+``` markdown
+**bold**
+*italics*
+[link](www.example.com)
+```
+
+# 数据内容
+
+## JSON 数据
+
+``` json
+{"employees":[
+ {"firstName":"John", "lastName":"Doe"},
+]}
+```
+
+## XML 内容
+
+``` xml
+
+
+ John Doe
+
+
+```
+
+## SQL 查询
+
+{{< highlight sql >}}
+
+SELECT column_name,column_name
+FROM
+ Table
+WHERE column_name = "condition"
+{{< / highlight >}}
+
+
+除以上列举的代码高亮显示外,还支持诸如:C 语言、C++、HTML、CSS、Shell脚本等各主流的代码语言高亮显示,可自行测试效果。
\ No newline at end of file
diff --git a/exampleSite/content/posts/table-of-content.md b/exampleSite/content/posts/table-of-content.md
new file mode 100644
index 0000000..4d48a92
--- /dev/null
+++ b/exampleSite/content/posts/table-of-content.md
@@ -0,0 +1,60 @@
+---
+title: "文章目录导航"
+description: "描述下 NexT 主题下的文章目录导航效果。"
+keywords: "文章,目录,导航"
+
+date: 2022-06-08T21:12:52+08:00
+lastmod: 2022-06-08T21:12:52+08:00
+
+categories:
+ - 示例
+tags:
+ - 目录
+ - 导航
+ - 博客
+
+toc: true
+url: "table-of-content.html"
+---
+
+巴顿将军说过:“衡量一个人是否成功,不是看他站到顶峰,而是从顶峰跌落之后的反弹力”,褚时健的人生便是如此,中年发家致富,名利双收,之后又跌落到谷底,等到74岁再创业,10年后带着褚橙归来,东山再起收获亿万财富,他的发展轨迹就是反弹的过程。
+
+
+
+
+
+# 早年的故事
+
+## 起始
+
+2014年的春天,在云南省华宁县和宜良县的交界处,一座名叫矣则的小山村里,一处已经有上百年历史的古旧四合院宅子被拆掉。村委会正带领村民们进行“美丽乡村”的建设,一年以后,旧有村居将再也看不到,代之而起的是钢筋混凝土的新式民居。就像10年、20年前中国大小城市的改造一样,这个群山围绕的小村子也开始陷入“工地模式”。
+
+### 童年浪花
+
+在江河边长大的孩子几乎都有一个当仁不让的特长:善水。褚时健也不例外,他不仅从小就在南盘江和花鱼塘里扑腾出了上佳的游泳技术,五六岁已经可以一个猛子扎出老远,而且从七八岁就可以在南盘江和河滩上的鱼塘里捉鱼了。
+
+## 少年故事
+
+褚时健在乡村自由自在生活的十多年,其实正是中国社会风雨飘摇的十多年。特别是1937年卢沟桥事变后,日本人发动全面侵华战争,短短两三年间,中国的大部分国土相继沦陷
+
+# 激情的青春十年
+
+## 当上了游击队员
+
+1948年夏天,褚时健回乡,在禄丰车站小学做了一名老师,同时也和褚时仁、褚时杰一起继续保持与共产党组织的联系,做一些传递情报的工作
+
+### 战火纷飞
+
+因为战斗力相较悬殊,所以游击队只能是靠打一枪换一个地方的办法,专找敌人薄弱的地方攻击,但更多时候,都是在防御和转移阵地。
+
+# 生活的断层
+
+## 跌入生活底层
+
+“反右”运动中被打倒的人在“右派”身份确定后,只有一条路可走:下放到农场。农场名副其实,就是干农活儿的地方,必须过和农民一样的生活。
+
+# 尾声
+
+## 岁月像一条河
+
+2015年,是褚时健和马静芬结婚60周年,被称为“钻石婚”的纪念年份。这简直是一份人生的奖赏,在中国离婚率愈益升高的当下,60年的婚姻,几乎就像一个前世之梦。一个甲子的相伴相随,褚时健和马静芬共同经历了国家和个人的各种风浪,共同面对过生死。他们两人已经不仅是夫妻,更是一对战友。尽管马静芬偶尔会对褚时健年轻时候的粗心抱怨上两句,但说到最后,她会说一句:“没有我就没有他,没有他也就没有我。”
\ No newline at end of file
diff --git a/exampleSite/start.sh b/exampleSite/start.sh
new file mode 100644
index 0000000..165aa03
--- /dev/null
+++ b/exampleSite/start.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+#
+
+next() {
+ cat << EOT
+========================================
+ ███╗ ██╗███████╗██╗ ██╗████████╗
+ ████╗ ██║██╔════╝╚██╗██╔╝╚══██╔══╝
+ ██╔██╗ ██║█████╗ ╚███╔╝ ██║
+ ██║╚██╗██║██╔══╝ ██╔██╗ ██║
+ ██║ ╚████║███████╗██╔╝ ██╗ ██║
+ ╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ ╚═╝
+========================================
+NexT version $1
+Documentation: https://hugo-next.js.org
+========================================
+EOT
+}
+
+next V0.0.1
+
+hugo server -D -t ../.. --port 1414 --panicOnWarning
\ No newline at end of file
diff --git a/exampleSite/static/imgs/ali-pay.png b/exampleSite/static/imgs/ali-pay.png
new file mode 100644
index 0000000..fdd9df1
Binary files /dev/null and b/exampleSite/static/imgs/ali-pay.png differ
diff --git a/exampleSite/static/imgs/wechat-pay.png b/exampleSite/static/imgs/wechat-pay.png
new file mode 100644
index 0000000..f898b43
Binary files /dev/null and b/exampleSite/static/imgs/wechat-pay.png differ
diff --git a/i18n/en.yaml b/i18n/en.yaml
new file mode 100644
index 0000000..2c969d6
--- /dev/null
+++ b/i18n/en.yaml
@@ -0,0 +1,142 @@
+#--------------------------------------
+# English Version
+#--------------------------------------
+posts:
+ other: Posts
+tag:
+ other: Tag
+tags:
+ other: Tags
+category:
+ other: Category
+categories:
+ other: Categories
+AllSome:
+ other: "All {{ .Some }}"
+
+NavToggleLabel:
+ other: Toggle navigation bar
+
+MSearchLabel:
+ other: Search
+
+SymbolColon:
+ other: ":"
+SymbolComma:
+ other: ","
+SymbolPeriod:
+ other: "."
+
+SitePostsTitle:
+ other: "Posts"
+SiteCatesTitle:
+ other: "Categories"
+SiteTagsTitle:
+ other: "Tags"
+TableOfContents:
+ other: "TOC"
+SiteOverview:
+ other: "Overview"
+RSSTitle:
+ other: "RSS Subscribe"
+CCLinkTitle:
+ other: "Creative Commons"
+BackTopLabel:
+ other: "Top"
+
+TagsCounterTitle:
+ zero: No tags
+ one: 1 tag in total
+ other: "{{ .Count }} tags in total"
+CatesCounterTitle:
+ zero: No categories
+ one: 1 category in total
+ other: "{{ .Count }} categories in total"
+ArchiveCounterTitle:
+ zero: No posts.
+ one: 1 post.
+ other: "{{ .Count }} posts in total."
+
+PostArchiveCheersUm:
+ other: Um..
+PostArchiveCheersOk:
+ other: Ok
+PostArchiveCheersNice:
+ other: Nice
+PostArchiveCheersGood:
+ other: Good
+PostArchiveCheersGreat:
+ other: Great
+PostArchiveCheersExcellent:
+ other: Excellent
+PostArchiveKeepOn:
+ other: Keep on posting.╰(*°▽°*)╯
+
+PostStickyTitle:
+ other: Strickys
+PostPublishDate:
+ other: "Publish"
+PostPublishTime:
+ other: "Create Time"
+PostLastModDate:
+ other: "Update"
+PostLastModTime:
+ other: "Modify Time"
+PostWords:
+ other: "Words"
+PostWordCount:
+ other: "{{- .WordCount -}}"
+PostReading:
+ other: "Read"
+PostReadTime:
+ other: "{{- .ReadingTime -}}min"
+PostViews:
+ other: "Views"
+PostCatg:
+ other: "Categories"
+PostTag:
+ other: "Tags"
+PostReadMore:
+ other: "Read More"
+PostEditTitle:
+ other: Edit this post
+
+PostCRTitle:
+ other: Post Title
+PostCRAuthor:
+ other: Post Author
+PostCRLink:
+ other: Post Link
+PostCROriginAuthor:
+ other: Written By
+PostCROriginLink:
+ other: Originally From
+PostCRLicenseTitle:
+ other: Copyright Notice
+PostCRLicenseContent:
+ other: "All articles in this blog are licensed under %s unless stating additionally."
+
+PostFollowMe:
+ other: Welcome to my other publishing channels
+
+RewardDonate:
+ other: Donate
+RewardWechatpay:
+ other: Wechat Pay
+RewardAlipay:
+ other: Alipay
+RewardPaypal:
+ other: PayPal
+RewardBitcoin:
+ other: Bitcoin
+
+PostCommentTitle:
+ other: Comments
+
+VisitorsLabel:
+ other: Total Visitors
+PageViewsLabel:
+ other: Total Page Views
+
+FooterPowerby:
+ other: "Power by %s"
\ No newline at end of file
diff --git a/i18n/zh-cn.yaml b/i18n/zh-cn.yaml
new file mode 100644
index 0000000..94bf85b
--- /dev/null
+++ b/i18n/zh-cn.yaml
@@ -0,0 +1,140 @@
+#--------------------------------------
+# 中文版本
+#--------------------------------------
+
+posts:
+ other: 文章
+tag:
+ other: 标签
+tags:
+ other: 标签
+category:
+ other: 分类
+categories:
+ other: 分类
+AllSome:
+ other: "所有 {{ .Some }}"
+
+NavToggleLabel:
+ other: 切换导航栏
+
+MSearchLabel:
+ other: 搜索
+
+SymbolColon:
+ other: ":"
+SymbolComma:
+ other: ","
+SymbolPeriod:
+ other: "。"
+
+SbPostsLable:
+ other: 日志
+SbCatesTitle:
+ other: 分类
+SbTagsTitle:
+ other: 标签
+TableOfContents:
+ other: 文章目录
+SiteOverview:
+ other: 站点概览
+RSSLable:
+ other: RSS 订阅
+CCLinkTitle:
+ other: 共享知识
+BackTopLabel:
+ other: 返回顶部
+
+TagsCounterTitle:
+ zero: 暂无标签
+ other: "目前共计 {{ .Count }} 个标签"
+CatesCounterTitle:
+ zero: 暂无分类
+ other: "目前共计 {{ .Count }} 个分类"
+ArchiveCounterTitle:
+ zero: 暂无日志
+ other: "目前共计 {{ .Count }} 篇日志"
+
+PostArchiveCheersUm:
+ other: 嗯..
+PostArchiveCheersOk:
+ other: 还行
+PostArchiveCheersNice:
+ other: 不错
+PostArchiveCheersGood:
+ other: 很好
+PostArchiveCheersGreat:
+ other: 非常好
+PostArchiveCheersExcellent:
+ other: 太棒了
+PostArchiveKeepOn:
+ other: 继续努力哟。╰(*°▽°*)╯
+
+PostStickyTitle:
+ other: 置顶
+PostPublishDate:
+ other: 发表于
+PostPublishTime:
+ other: 创建时间
+PostLastModDate:
+ other: 更新于
+PostLastModTime:
+ other: 修改时间
+PostWords:
+ other: 字数
+PostWordCount:
+ other: "{{- .WordCount -}}"
+PostReading:
+ other: 阅读
+PostReadTime:
+ other: "{{- .ReadingTime -}}分钟"
+PostViews:
+ other: 浏览
+PostCatgs:
+ other: 分类
+PostTags:
+ other: 标签
+PostReadMore:
+ other: 阅读全文
+PostEditTitle:
+ other: 编辑
+
+PostCRTitle:
+ other: 文章标题
+PostCRAuthor:
+ other: 本文作者
+PostCRLink:
+ other: 本文链接
+PostCROriginAuthor:
+ other: 原文作者
+PostCROriginLink:
+ other: 原文链接
+PostCRLicenseTitle:
+ other: 版权声明
+PostCRLicenseContent:
+ other: "本博客所有文章除特别声明外,均采用 %s 许可协议。转载请注明出处!"
+
+PostFollowMe:
+ other: 欢迎关注我的其它发布渠道
+
+RewardDonate:
+ other: 赞赏
+RewardWechatpay:
+ other: 微信
+RewardAlipay:
+ other: 支付宝
+RewardPaypal:
+ other: PayPal
+RewardBitcoin:
+ other: 比特币
+
+PostCommentTitle:
+ other: 评论交流
+
+UserVistorsLabel:
+ other: 总访客量
+PageViewsLabel:
+ other: 总访问量
+
+FooterPowerby:
+ other: 由 %s 强力驱动
\ No newline at end of file
diff --git a/layouts/404.html b/layouts/404.html
index e69de29..1cb628e 100644
--- a/layouts/404.html
+++ b/layouts/404.html
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ i18n "404PageTitle" }}
+
+
+
+
+
+ 返回主页
+
+
\ No newline at end of file
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index dba76f4..9de4235 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -1,30 +1,50 @@
-{{- $langCode := replaceRE "-([a-z]+)" (upper (substr .Site.Language -3)) .Site.Language -}}
-{{- $P := .Site.Params -}}
-{{- .Scratch.Set "langCode" $langCode -}}
+{{- .Scratch.Set "postsCount" (len (where .Page.Site.RegularPages "Section" "in" .Site.Params.mainSections)) -}}
+{{- .Scratch.Set "catsCount" (len .Site.Taxonomies.categories) -}}
+{{- .Scratch.Set "tagsCount" (len .Site.Taxonomies.tags) -}}
+{{- $vendors := .Site.Data.resources.vendors -}}
+{{- $pluginVen := .Site.Params.vendors.plugins -}}
+{{- $pluginCDN := index $vendors $pluginVen -}}
+{{- .Scratch.Set "pluginCDN" $pluginCDN -}}
-
+
-
- {{- partial "partials/head.html" . }}
- {{ .Site.Title }}
+ {{ hugo.Generator }}
+
+
+
+
+
-
- {{ partial "partials/header.html" . }}
+
+
+
+ {{- if ne .Site.Params.sidebar.display "remove" }}
+ {{- partial "sidebar.html" . }}
+ {{- end }}
-
+
+ {{- partial "scripts" . }}
\ No newline at end of file
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
index 02ce795..35c4d71 100644
--- a/layouts/_default/list.html
+++ b/layouts/_default/list.html
@@ -1,2 +1,29 @@
-{{- define "main" }}
-{{- end }}
\ No newline at end of file
+{{ range .Paginator.Pages.GroupByDate "2006" }}
+
+ {{ .Key }}
+
+{{ range .Pages }}
+
+
+
+ {{- if isset .Params "extlink" }}
+
+ {{- .Title -}}
+
+
+ {{- else }}
+
+ {{ .Title }}
+
+ {{- end }}
+
+
+
+
+{{ end }}
+{{ end }}
\ No newline at end of file
diff --git a/layouts/_default/section.html b/layouts/_default/section.html
new file mode 100644
index 0000000..a9bce65
--- /dev/null
+++ b/layouts/_default/section.html
@@ -0,0 +1,36 @@
+{{- define "title" }}
+{{- .Params.Title | default (T .Section) | default .Section | dict "Some" | T "AllSome" }} - {{ .Site.Title -}}
+{{- end -}}
+{{ define "main_inner_class" }}archive posts-collapse{{ end }}
+{{- define "main" }}
+
+
+
+ {{- $cheers := "Um" }}
+ {{- $posts := .Scratch.Get "postsCount" }}
+ {{- if gt $posts 210 }}
+ {{- $cheers = "Excellent" }}
+ {{- else if gt $posts 130 }}
+ {{- $cheers = "Great" }}
+ {{- else if gt $posts 80 }}
+ {{- $cheers = "Good" }}
+ {{- else if gt $posts 50 }}
+ {{- $cheers = "Nice" }}
+ {{- else if gt $posts 30 }}
+ {{- $cheers = "Ok" }}
+ {{- end }}
+
+ {{- T (printf "PostArchiveCheers%s" $cheers) }}
+ {{- T "SymbolComma" }}
+ {{- T "ArchiveCounterTitle" $posts | safeHTML }}
+ {{- T "SymbolComma" }}
+ {{- T "PostArchiveKeepOn" }}
+
+
+
+ {{ .Render "list" }}
+
+
+
+{{- partial "pagination.html" . }}
+{{- end }}
\ No newline at end of file
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
index 02ce795..78ebdec 100644
--- a/layouts/_default/single.html
+++ b/layouts/_default/single.html
@@ -1,2 +1,7 @@
+{{- define "title" }}{{- .Title }} - {{ .Site.Title -}}{{- end }}
+
+{{- define "main_inner_class" }}post posts-expand{{- end }}
+
{{- define "main" }}
+ {{ partial "post.html" (dict "ctx" . "IsHome" false) }}
{{- end }}
\ No newline at end of file
diff --git a/layouts/_default/taxonomy.html b/layouts/_default/taxonomy.html
new file mode 100644
index 0000000..4ef68bc
--- /dev/null
+++ b/layouts/_default/taxonomy.html
@@ -0,0 +1,22 @@
+{{- define "title" -}}
+ {{- .Title }} - {{ T .Data.Singular | default .Data.Singular }} - {{ .Site.Title -}}
+{{- end -}}
+{{ define "main_inner_class" }}{{ .Data.Plural }} posts-collapse{{ end }}
+{{ define "main" }}
+
+
+
+
+
+ {{ .Title }}
+ {{ T .Data.Singular | default .Data.Singular }}
+
+
+
+
+ {{ .Render "list" }}
+
+
+
+{{- partial "pagination.html" . }}
+{{- end }}
\ No newline at end of file
diff --git a/layouts/_default/terms.html b/layouts/_default/terms.html
new file mode 100644
index 0000000..50992ab
--- /dev/null
+++ b/layouts/_default/terms.html
@@ -0,0 +1,44 @@
+{{- define "title" -}}
+{{- .Params.Title | default (T .Data.Plural) | default .Data.Plural | dict "Some" | T "AllSome" }} - {{ .Site.Title -}}
+{{- end -}}
+{{- define "main_inner_class" }}{{.Data.Plural}} posts-expand{{ end -}}
+{{- define "main" }}
+
+
+ {{- if eq .Data.Plural "categories" }}
+ {{ $cats := .Site.Taxonomies.categories }}
+
+
+ {{- T "CatesCounterTitle" (.Scratch.Get "catsCount") | safeHTML -}}
+
+
+
+ {{- range $name, $items := $cats }}
+ -
+ {{ $name }}
+ {{ len $items }}
+
+ {{- end }}
+
+
+
+ {{- end }}
+ {{- if eq .Data.Plural "tags" }}
+ {{ $tags := .Site.Taxonomies.tags }}
+
+
+ {{- T "TagsCounterTitle" (.Scratch.Get "tagsCount") | safeHTML -}}
+
+
+
+ {{- end }}
+
+
+{{- end }}
\ No newline at end of file
diff --git a/layouts/index.html b/layouts/index.html
index a87fca3..50f5ee0 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -1,32 +1,8 @@
+{{- define "main_inner_class" }}index posts-expand{{- end }}
{{- define "main" }}
-{{- $paginator := .Paginate (where .Site.RegularPages "Section" "in" .Site.Params.mainSections) }}
+{{ $paginator := .Paginate (where .Site.RegularPages "Section" "in" .Site.Params.mainSections) }}
{{- range $paginator.Pages }}
-
-
-
-
-
- {{ .Title }}
-
-
-
- {{ .Summary }}
-
-
-
+{{ partial "post.html" (dict "ctx" . "IsHome" true) }}
{{- end }}
-{{- partial "partials/pagination" . }}
+{{- partial "partials/pagination.html" . }}
{{- end }}
\ No newline at end of file
diff --git a/layouts/partials/_thirdparty/analytics/51la.html b/layouts/partials/_thirdparty/analytics/51la.html
new file mode 100644
index 0000000..f43d99d
--- /dev/null
+++ b/layouts/partials/_thirdparty/analytics/51la.html
@@ -0,0 +1,4 @@
+{{- with .Site.Params.laId }}
+
+
+{{- end }}
\ No newline at end of file
diff --git a/layouts/partials/_thirdparty/comment/livere.html b/layouts/partials/_thirdparty/comment/livere.html
new file mode 100644
index 0000000..9a2ff67
--- /dev/null
+++ b/layouts/partials/_thirdparty/comment/livere.html
@@ -0,0 +1,13 @@
+{{- with .Site.Params.LiveRe }}
+
+
+{{- end }}
\ No newline at end of file
diff --git a/layouts/partials/_thirdparty/comment/utterances.html b/layouts/partials/_thirdparty/comment/utterances.html
new file mode 100644
index 0000000..757bd02
--- /dev/null
+++ b/layouts/partials/_thirdparty/comment/utterances.html
@@ -0,0 +1,9 @@
+{{- with .Site.Params.utterances }}
+
+{{- end }}
diff --git a/layouts/partials/_thirdparty/comment/waline.html b/layouts/partials/_thirdparty/comment/waline.html
new file mode 100644
index 0000000..589d3bc
--- /dev/null
+++ b/layouts/partials/_thirdparty/comment/waline.html
@@ -0,0 +1,21 @@
+{{- with .Site.Params.waline }}
+
+
+
+
+
+{{- end }}
\ No newline at end of file
diff --git a/layouts/partials/_thirdparty/share/addthis.html b/layouts/partials/_thirdparty/share/addthis.html
new file mode 100644
index 0000000..f171c68
--- /dev/null
+++ b/layouts/partials/_thirdparty/share/addthis.html
@@ -0,0 +1,5 @@
+{{- with .Site.Params.addThisId }}
+
+
+
+{{- end }}
\ No newline at end of file
diff --git a/layouts/partials/comments.html b/layouts/partials/comments.html
new file mode 100644
index 0000000..694a149
--- /dev/null
+++ b/layouts/partials/comments.html
@@ -0,0 +1,40 @@
+{{- $root := . -}}
+{{- with .Site.Params.comments }}
+{{- if .enable }}
+{{- $tc := and .storage (gt (len .nav) 1) }}
+{{- $active := .active }}
+{{- $fc := .active }}
+{{- $sc := "" }}
+{{- $sn := "" }}
+
+
+
+
+ {{ T "PostCommentTitle" }}
+
+ {{- if $tc }}
+ {{- $sn = (sort .nav "weight") }}
+ {{- $fc = index $sn 0 }}
+ {{- $sc = index $sn 1 }}
+
+ {{ $fc.title }}
+
+ {{ $sc.title }}
+
+ {{- end }}
+
+
+ {{ $cp := "_thirdparty/comment/%s.html" }}
+ {{- if $tc }}
+ {{- range $sn }}
+
+ {{- partial (printf $cp (lower .name)) $root }}
+
+ {{- end }}
+ {{- else }}
+ {{- partial (printf $cp $fc) $root }}
+ {{- end }}
+
+
+{{- end }}
+{{- end }}
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
index 965b2da..c945940 100644
--- a/layouts/partials/footer.html
+++ b/layouts/partials/footer.html
@@ -1,38 +1,106 @@
-{{ $ft := .Site.Params.footer }}
-
-{{ partial "header/sidebar.html" . }}
\ No newline at end of file
diff --git a/layouts/partials/header/brand.html b/layouts/partials/header/brand.html
new file mode 100644
index 0000000..29d36b9
--- /dev/null
+++ b/layouts/partials/header/brand.html
@@ -0,0 +1,36 @@
+{{ $title := .Site.Title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ if or .Site.Params.algoliaSearch.enable .Site.Params.localSearch.enable }}
+
+ {{- end }}
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/header/menus.html b/layouts/partials/header/menus.html
new file mode 100644
index 0000000..b286f3e
--- /dev/null
+++ b/layouts/partials/header/menus.html
@@ -0,0 +1,26 @@
+{{- $ms := .Site.Params.menuSets }}
+{{- $curP := .Page }}
+
\ No newline at end of file
diff --git a/layouts/partials/post.html b/layouts/partials/post.html
new file mode 100644
index 0000000..a005bf4
--- /dev/null
+++ b/layouts/partials/post.html
@@ -0,0 +1,28 @@
+
+
+ {{- with .ctx }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{- end }}
+
+ {{ partial "post/header.html" (dict "ctx" .ctx "IsHome" .IsHome) }}
+
+
+ {{ partial "post/body.html" (dict "ctx" .ctx "IsHome" .IsHome) }}
+
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/post/body.html b/layouts/partials/post/body.html
new file mode 100644
index 0000000..4fb41fe
--- /dev/null
+++ b/layouts/partials/post/body.html
@@ -0,0 +1,11 @@
+{{ with .ctx }}
+{{- if $.IsHome }}
+ {{- if .Params.Expand }}
+ {{ .Content }}
+ {{- else }}
+ {{ .Summary }}
+ {{- end }}
+{{- else }}
+ {{ .Content }}
+{{- end }}
+{{ end }}
\ No newline at end of file
diff --git a/layouts/partials/post/footer.html b/layouts/partials/post/footer.html
new file mode 100644
index 0000000..34c3afc
--- /dev/null
+++ b/layouts/partials/post/footer.html
@@ -0,0 +1,44 @@
+{{ with .ctx }}
+{{- if $.IsHome }}
+{{- if and .Site.Params.readMoreBtn (not .Params.Expand) }}
+
+{{- end }}
+
+{{- else }}
+{{ partial "post/footer_meta/tags.html" . }}
+{{- if and (not (isset .Params "share")) (not .Params.share) }}
+{{ partial "_thirdparty/share/addthis.html" . }}
+{{- end }}
+
+{{ partial "post/footer_meta/reward.html" . }}
+{{- if and (not (isset .Params "copyright")) (not .Params.copyright) }}
+{{ partial "post/footer_meta/copyright.html" . }}
+{{- end }}
+{{- if and (not (isset .Params "followme")) (not .Params.followme) }}
+{{ partial "post/footer_meta/followme.html" . }}
+{{- end }}
+{{- if and (not (isset .Params "nav")) (not .Params.nav) }}
+
+{{- end }}
+{{- end }}
+{{- end }}
\ No newline at end of file
diff --git a/layouts/partials/post/footer_meta/copyright.html b/layouts/partials/post/footer_meta/copyright.html
new file mode 100644
index 0000000..e9ff1cb
--- /dev/null
+++ b/layouts/partials/post/footer_meta/copyright.html
@@ -0,0 +1,36 @@
+{{- if .Site.Params.creativeCommons.post }}
+
+
+
+ -
+ {{ print (T "PostCRTitle") (T "SymbolColon") }}
+ {{ .Title }}
+
+
+ -
+ {{- if isset .Params "link" }}
+ {{ print (T "PostCROriginLink") (T "SymbolColon") }}
+ {{ .Params.Link }}
+ {{- else }}
+ {{ print (T "PostCRLink") (T "SymbolColon") }}
+ {{ .Permalink }}
+ {{- end }}
+
+ -
+ {{ print (T "PostCRLicenseTitle") (T "SymbolColon") }}
+ {{- $ccText := .Site.Params.creativeCommons.license | upper }}
+ {{- $lang := .Scratch.Get "lang" }}
+ {{- $ccLink := printf "%s" (substr $lang 0 2) $ccText }}
+ {{ printf (T "PostCRLicenseContent") $ccLink | safeHTML }}
+
+
+
+{{- end }}
\ No newline at end of file
diff --git a/layouts/partials/post/footer_meta/followme.html b/layouts/partials/post/footer_meta/followme.html
new file mode 100644
index 0000000..ba25ed3
--- /dev/null
+++ b/layouts/partials/post/footer_meta/followme.html
@@ -0,0 +1,21 @@
+{{- with .Site.Params.followMe }}
+
+ {{ T "PostFollowMe" }}
+
+
+{{- end }}
\ No newline at end of file
diff --git a/layouts/partials/post/footer_meta/reward.html b/layouts/partials/post/footer_meta/reward.html
new file mode 100644
index 0000000..838c46e
--- /dev/null
+++ b/layouts/partials/post/footer_meta/reward.html
@@ -0,0 +1,21 @@
+{{- with .Site.Params.rewardSets }}
+{{- if .enable }}
+
+ {{- .comment | safeHTML -}}
+
+
+ {{- range $name,$img := $.Site.Params.reward }}
+ {{- $fw := substr $name 0 1 }}
+ {{- $pay := replace $name $fw ($fw | upper) 1 }}
+ {{- $payName := T (printf "Reward%s" $pay) }}
+
+
+ {{ $payName }}
+
+ {{- end }}
+
+
+{{- end }}
+{{- end }}
diff --git a/layouts/partials/post/footer_meta/tags.html b/layouts/partials/post/footer_meta/tags.html
new file mode 100644
index 0000000..a24c48e
--- /dev/null
+++ b/layouts/partials/post/footer_meta/tags.html
@@ -0,0 +1,9 @@
+{{- with .Params.tags }}
+{{- if gt (len .) 0 }}
+
+{{- end }}
+{{- end }}
diff --git a/layouts/partials/post/header.html b/layouts/partials/post/header.html
new file mode 100644
index 0000000..ca492b3
--- /dev/null
+++ b/layouts/partials/post/header.html
@@ -0,0 +1,39 @@
+{{ with .ctx }}
+{{- if $.IsHome }}
+ {{- if and .Weight (gt .Weight 0) }}
+
+
+
+ {{- end }}
+ {{- if $.IsHome }}
+ {{- if and (isset .Params "extlink") (ne .Params.Extlink "") }}
+
+ {{ .Title }}
+
+
+ {{- else }}
+ {{ .Title }}
+ {{- end }}
+ {{- else }}
+ {{- .Title }}
+ {{- if .Site.Params.postEdit.enable }}
+ {{- $editURL := printf "%s%s" .Site.Params.postEdit.url (path.Clean .File.Path) }}
+
+ {{- end }}
+ {{- end }}
+ {{- if $.IsHome }}
{{ else }}