66 Commits

Author SHA1 Message Date
凡梦星尘
1cb9973dbb Merge branch 'release_v4.3.0'
Some checks failed
sync-2-gitee / sync-2-gitee (push) Failing after 3s
2022-09-30 21:05:02 +08:00
凡梦星尘
4be573b5d3 💄 Add version info of Hugo & NexT theme in footer. 2022-09-30 21:04:25 +08:00
凡梦星尘
7592b211c1 🔧 Upgrade the release version to 4.3.0. 2022-09-30 21:01:34 +08:00
凡梦星尘
28a3d36f88 💄 Add list number before table of content and article's head outline. 2022-09-29 10:24:41 +08:00
凡梦星尘
70cba4cc6a 💄 Remove background color of tool buttons & reduce this zindex level. 2022-09-28 21:06:30 +08:00
凡梦星尘
dc1c68d5c9 💄 Add comments active dark & light model. 2022-09-27 11:01:43 +08:00
凡梦星尘
d4730f89d2 💄 Add switch theme button function. 2022-09-26 21:54:03 +08:00
凡梦星尘
4037ea0d68 💄 Add new tool buttons in page side. 2022-09-25 21:40:36 +08:00
凡梦星尘
523c12f0ec 📝 Update the mermaid code style. 2022-09-19 22:46:06 +08:00
凡梦星尘
d994042131 :lipstick:🚩 Add mermaid support. Close #56 2022-09-19 21:57:23 +08:00
凡梦星尘
56166c7e76 🐛 Fixed menu active action match error item that it could not use cached function. 2022-09-18 09:00:00 +08:00
凡梦星尘
f1fafdc587 🐛 Fixed the local search engine can't find indexes file & repose error link of article. 2022-09-17 21:54:36 +08:00
凡梦星尘
9bde077b0b 💄 🐛 Fixed the 51la widget not init error & format busuanzi value. 2022-09-13 20:15:43 +08:00
凡梦星尘
e0c4a0ecd4 🔧 Use busuanzi as analytics plugin & close comment by default. 2022-09-13 19:29:00 +08:00
凡梦星尘
f41c3c0a73 🐛 Fixed the 51la id replace with user defined. 2022-09-12 16:53:44 +08:00
凡梦星尘
f3fc99ac03 💄 Add 51la analytics widget plug-in in sidebar. 2022-09-12 16:43:24 +08:00
凡梦星尘
20aadcf9ac 💄 Update the read times label of Chinese. 2022-09-12 11:36:17 +08:00
凡梦星尘
2cc8f302d3 🐛 Fixed some error about the run times , words and read times logic when calculate. 2022-09-12 11:28:55 +08:00
凡梦星尘
5634c20a02 Improve the site information display things. 2022-09-12 10:22:22 +08:00
凡梦星尘
e79234935b 🐛 Fixed the border-radius not working in Muse & Mist theme. 2022-09-11 23:18:28 +08:00
凡梦星尘
39058e897d 🐛 Fixed the box-shadow not working in Muse & Mist theme. 2022-09-11 23:14:16 +08:00
凡梦星尘
568ef4ecc6 🐛 Fixed the home page not show run times & last push date. 2022-09-11 22:55:01 +08:00
凡梦星尘
6542375766 🔥 Remove unuse the post view style code. 2022-09-11 22:49:32 +08:00
凡梦星尘
6f03209e93 💄 Support site information widget. close #30, #34 2022-09-11 22:40:38 +08:00
凡梦星尘
2a7fd9f8fb 💄 Support more of analytics engine such as baidu, google, busuanzi and so on, then add new web information widget. close #19 2022-09-11 18:33:41 +08:00
凡梦星尘
c38a439171 💄 Support render math formula by mathjax & katex framework. close #27 2022-09-11 11:14:54 +08:00
凡梦星尘
dc66bc1a05 💄 Make a sample demo of custom files, close #33 2022-09-11 09:06:05 +08:00
凡梦星尘
fb007e57e5 Merge branch 'develop' of github.com:hugo-next/hugo-theme-next into develop 2022-09-10 21:41:47 +08:00
凡梦星尘
df09cbe4c0 💄 Add custom files support just enjoy by yourself. 2022-09-10 21:41:33 +08:00
凡梦星尘
2276aae127 🐛 Fixed the highlight code block auto scroll when overflow x. 2022-09-10 21:30:24 +08:00
凡梦星尘
71844813bb Merge pull request #48 from finisky/tagoriginal
Preserve the original tag/category name in tags/categories page
2022-08-28 12:04:11 +08:00
finisky
784869832e Preserve the original tag/category name in tags/categories page 2022-08-28 11:46:58 +08:00
凡梦星尘
423d4c0ef9 🐛 Fixed the menu items text & icon align display, Close #37. 2022-08-27 10:01:28 +08:00
凡梦星尘
086ce454ff Merge branch 'release_v4.2.0' into develop 2022-08-27 09:44:39 +08:00
凡梦星尘
02ba198cfa 💡 Update the Waline client version to 2.6.3. 2022-08-26 14:24:18 +08:00
凡梦星尘
0db1dac57f Merge branch 'release_v4.2.0'
Some checks failed
sync-2-gitee / sync-2-gitee (push) Failing after 3s
2022-08-15 21:58:03 +08:00
凡梦星尘
c9d4a00120 🔖 Start for release v4.2.0. 2022-08-15 21:53:45 +08:00
凡梦星尘
9c102f9695 💄 Auto scroll to show overflow code block content. 2022-08-15 21:51:31 +08:00
凡梦星尘
5fb6618bd3 💄 Use scroll to show overflow code block content. 2022-08-15 21:36:22 +08:00
凡梦星尘
3de3e1de4d 💄 Make flinks page support note short code. 2022-08-13 16:27:15 +08:00
凡梦星尘
51eea3acc0 💄 Update the flinks show style in mobile driver. 2022-08-13 16:10:35 +08:00
凡梦星尘
be3bf4e1f2 🔧 Enable the robots file. 2022-08-13 14:32:56 +08:00
凡梦星尘
cbc39591d2 💄 Fixed the SVG image fixed width pixes over the div DOM. 2022-08-13 14:31:43 +08:00
凡梦星尘
3965c0c108 💄 Udpate sub folder archive page title with i18n support. 2022-08-10 22:07:03 +08:00
凡梦星尘
fc44e79ddd 🐛 Fixed the sidebar posts link with 404 error. 2022-08-09 17:56:07 +08:00
凡梦星尘
d3eb723e24 💄 Make note short code support without icon style. 2022-08-09 09:37:59 +08:00
凡梦星尘
b739434f8d 💄 🐛 Fixed code block line number background color style. 2022-08-09 09:23:37 +08:00
凡梦星尘
36b428f1d9 💄 🐛 Code block layout add more word break rules. 2022-08-08 14:33:09 +08:00
凡梦星尘
678b92c0a7 💄 🐛 Try to fixed the highlight code block over layout issue. 2022-08-08 12:56:01 +08:00
凡梦星尘
aa8a60d852 🎨 Use more standard parameter name which call avatar in flinks page. 2022-08-07 16:59:38 +08:00
凡梦星尘
30d161b1e2 💄 Fixed the highlight code block margin bottom pixels. 2022-08-07 11:48:05 +08:00
凡梦星尘
96ba605026 🐛 Fixed some configuration & display scripts. 2022-08-06 16:15:15 +08:00
凡梦星尘
1677648167 💄 Add quote & note shortcodes. Close #29 2022-08-06 15:18:13 +08:00
凡梦星尘
6cf961d392 💄 Implement the special page for friend's links show. Close #26 2022-08-05 15:18:52 +08:00
凡梦星尘
97799aaaa8 🐛 Fixed the archives list page permalink visit. 2022-08-02 18:42:33 +08:00
凡梦星尘
1f668be6fa 🐛 Fixed the build error due to about the syntax error 2022-08-02 18:34:55 +08:00
凡梦星尘
bb70f5b6a5 🔧 Try to fixed the Pre in section. 2022-08-02 18:18:26 +08:00
凡梦星尘
fdd49ab3cb 💄 Mark the search result of algolia search. 2022-08-02 15:12:49 +08:00
凡梦星尘
1917055634 🐛 Fixed the algolia search script find result in content. 2022-08-02 11:22:19 +08:00
凡梦星尘
7ed095d42c 🐛 Fixed the aloglia index content . 2022-08-01 17:18:56 +08:00
凡梦星尘
ac844e4e8c 🔧 Add algolia search indexes content. 2022-08-01 17:14:22 +08:00
凡梦星尘
34faa6f6f3 💄 Add algolia logo flag in search result. 2022-07-31 18:21:42 +08:00
凡梦星尘
c1e7e59646 🔧 🌱 Complete the algolia search feature, Close #9. 2022-07-31 18:01:57 +08:00
凡梦星尘
9a4883832f 🔧 🌱 Complete the local search feature. 2022-07-31 11:02:55 +08:00
凡梦星尘
6cbffe48b7 🔧 Re Change default section display not use archive page. 2022-07-30 17:39:57 +08:00
凡梦星尘
832953372a Merge branch 'release_v4.1.0' into develop 2022-07-27 21:42:45 +08:00
106 changed files with 3782 additions and 910 deletions

13
.gitignore vendored
View File

@@ -3,11 +3,18 @@
exampleSite/* exampleSite/*
# Exclude special files in content folder # Exclude special files in content folder
exampleSite/content/**/
!exampleSite/content !exampleSite/content
exampleSite/content/* !exmapleSite/content/about.md
!exampleSite/content/archives !exampleSite/content/archives
!exampleSite/content/post !exampleSite/content/post
# Exclude special files in data folder
!exampleSite/data
# Exclude special files in layouts folder
!exampleSite/layouts
# Exclude special files in static folder # Exclude special files in static folder
!exampleSite/static !exampleSite/static
@@ -15,3 +22,7 @@ exampleSite/content/*
!exampleSite/config.yaml !exampleSite/config.yaml
!exampleSite/start.sh !exampleSite/start.sh
data/*
!data/config.yaml
!data/resources.yaml

View File

@@ -1 +1 @@
4.1.0 4.3.0

View File

@@ -29,48 +29,44 @@
color-scheme: light; color-scheme: light;
} }
@if $darkmode { :root[data-theme="dark"] {
@media (prefers-color-scheme: dark) { --body-bg-color: #{$body-bg-color-dark};
:root { --content-bg-color: #{$content-bg-color-dark};
--body-bg-color: #{$body-bg-color-dark}; --card-bg-color: #{$card-bg-color-dark};
--content-bg-color: #{$content-bg-color-dark}; --text-color: #{$text-color-dark};
--card-bg-color: #{$card-bg-color-dark}; --blockquote-color: #{$blockquote-color-dark};
--text-color: #{$text-color-dark}; --link-color: #{$link-color-dark};
--blockquote-color: #{$blockquote-color-dark}; --link-hover-color: #{$link-hover-color-dark};
--link-color: #{$link-color-dark}; --brand-color: #{$brand-color-dark};
--link-hover-color: #{$link-hover-color-dark}; --brand-hover-color: #{$brand-hover-color-dark};
--brand-color: #{$brand-color-dark}; --table-row-odd-bg-color: #{$table-row-odd-bg-color-dark};
--brand-hover-color: #{$brand-hover-color-dark}; --table-row-hover-bg-color: #{$table-row-hover-bg-color-dark};
--table-row-odd-bg-color: #{$table-row-odd-bg-color-dark}; --menu-item-bg-color: #{$menu-item-bg-color-dark};
--table-row-hover-bg-color: #{$table-row-hover-bg-color-dark}; --theme-color: #{$theme-color-dark};
--menu-item-bg-color: #{$menu-item-bg-color-dark};
--theme-color: #{$theme-color-dark};
--btn-default-bg: #{$btn-default-bg-dark}; --btn-default-bg: #{$btn-default-bg-dark};
--btn-default-color: #{$btn-default-color-dark}; --btn-default-color: #{$btn-default-color-dark};
--btn-default-border-color: #{$btn-default-border-color-dark}; --btn-default-border-color: #{$btn-default-border-color-dark};
--btn-default-hover-bg: #{$btn-default-hover-bg-dark}; --btn-default-hover-bg: #{$btn-default-hover-bg-dark};
--btn-default-hover-color: #{$btn-default-hover-color-dark}; --btn-default-hover-color: #{$btn-default-hover-color-dark};
--btn-default-hover-border-color: #{$btn-default-hover-border-color-dark}; --btn-default-hover-border-color: #{$btn-default-hover-border-color-dark};
--highlight-background: #{$highlight-background-dark}; --highlight-background: #{$highlight-background-dark};
--highlight-foreground: #{$highlight-foreground-dark}; --highlight-foreground: #{$highlight-foreground-dark};
--highlight-gutter-background: #{$highlight-gutter-background-dark}; --highlight-gutter-background: #{$highlight-gutter-background-dark};
--highlight-gutter-foreground: #{$highlight-gutter-foreground-dark}; --highlight-gutter-foreground: #{$highlight-gutter-foreground-dark};
color-scheme: dark; color-scheme: dark;
} }
img { img[data-theme="dark"] {
opacity: .75; opacity: .75;
&:hover { &:hover {
opacity: .9; opacity: .9;
}
}
iframe {
color-scheme: light;
}
} }
} }
iframe[data-theme="dark"] {
color-scheme: light;
}

View File

@@ -12,7 +12,7 @@
z-index: $zindex-5; z-index: $zindex-5;
} }
@import 'back-to-top'; @import 'tool-buttons';
@import 'reading-progress'; @import 'reading-progress';
@import 'post'; @import 'post';

View File

@@ -0,0 +1,141 @@
.flinks-block {
.flinks-block-title {
text-align: center;
font-weight: bold;
}
.flinks-list-title {
font-size: 1.25em;
font-weight: bold;
}
.flinks-lists > div:not(:first-child) {
margin-top: 40px;
}
.flinks-list-desc {
font-style: italic;
}
.flinks-list-items {
overflow: auto;
padding: 10px 10px 0;
text-align: center;
.flinks-list-item {
@include mobile() {
display: flex;
justify-content: center;
align-items: center;
}
position: relative;
float: left;
overflow: hidden;
margin: 15px 7px;
width: calc(100% / 3 - 18px);
height: 90px;
border-radius: 8px;
line-height: 17px;
-webkit-transform: translateZ(0);
border: groove 1px var(--highlight-foreground);
box-shadow: .6rem .5rem 0.3rem var(--body-bg-color);
&:hover:before,
&:focus:before,
&:active:before {
-webkit-transform:scale(1);
-moz-transform:scale(1);
-o-transform:scale(1);
-ms-transform:scale(1);
transform: scale(1);
}
&:hover .flinks-item-icon {
margin-left:-10px;
width:0;
}
&:before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: -1;
background: var(--body-bg-color);
content: ' ';
transition: transform .3s ease-out;
transform: scale(0);
}
a {
//color: var(--font-color);
text-decoration: none;
}
.flinks-item-icon {
float: left;
overflow: hidden;
margin: 15px 10px;
width: 60px;
height: 60px;
border-radius: 35px;
border: solid 1px var(--body-bg-color);
-webkit-transition: width .3s ease-out;
-moz-transition: width .3s ease-out;
-o-transition: width .3s ease-out;
-ms-transition: width .3s ease-out;
transition: width .3s ease-out;
img {
width: 100%;
height: 100%;
-webkit-transition: filter 375ms ease-in .2s,-webkit-transform .3s;
-moz-transition: filter 375ms ease-in .2s,-moz-transform .3s;
-o-transition: filter 375ms ease-in .2s,-o-transform .3s;
-ms-transition: filter 375ms ease-in .2s,-ms-transform .3s;
transition: filter 375ms ease-in .2s,transform .3s;
object-fit: cover;
}
}
.flinks-item-name, .flinks-item-desc {
overflow:hidden;
-o-text-overflow:ellipsis;
text-overflow:ellipsis;
white-space:nowrap
}
.flinks-item-name {
padding: 20px 0 0 0;
height: 20px;
font-weight: 700;
font-size: 1em;
font-weight: bold;
@include mobile() {
display: none;
}
}
.flinks-item-desc {
padding: 10px 0;
font-size: .92em;
@include mobile() {
display: none;
}
}
}
}
.flinks-page-desc {
margin-top: 20px;
}
}

View File

@@ -3,3 +3,4 @@
@import 'schedule'; @import 'schedule';
@import 'breadcrumb'; @import 'breadcrumb';
@import 'tag-cloud'; @import 'tag-cloud';
@import 'flinks';

View File

@@ -18,7 +18,7 @@
.use-motion { .use-motion {
@if $motion_trans_post_block { @if $motion_trans_post_block {
.post-block, .pagination, .comments, .post-comments { .post-block, .flinks-block, .pagination, .comments, .post-comments {
visibility: hidden; visibility: hidden;
} }
} }
@@ -42,6 +42,32 @@
} }
} }
.autonumber {
h2 {
counter-reset: h3;
&:before{
counter-increment: h2;
content: counter(h2) ". ";
}
}
h3 {
counter-reset: h4;
&:before{
counter-increment: h3;
content: counter(h2) ". " counter(h3) ". ";
}
}
h4 {
counter-reset: h5;
&:before{
counter-increment: h4;
content: counter(h2) "." counter(h3) "." counter(h4) ". ";
}
}
}
@import 'post-collapse'; @import 'post-collapse';
@import 'post-body'; @import 'post-body';
@import 'post-gallery'; @import 'post-gallery';

View File

@@ -76,4 +76,8 @@
width: 100%; width: 100%;
} }
} }
svg {
max-width: 98%;
}
} }

View File

@@ -3,7 +3,7 @@
// Fix issue #16 // Fix issue #16
// To do: use `gap` instead of `margin` // To do: use `gap` instead of `margin`
// See https://caniuse.com/flexbox-gap // See https://caniuse.com/flexbox-gap
.post-footer { .post-footer, .flinks-list-footer {
@include flex-column(); @include flex-column();
hr{ hr{

View File

@@ -113,9 +113,3 @@
flex-basis: 100%; flex-basis: 100%;
height: 0; height: 0;
} }
@if $busuanzi_post_views {
#busuanzi_container_page_pv {
display: inline-block;
}
}

View File

@@ -3,10 +3,10 @@
@import 'utterances'; @import 'utterances';
@import 'search'; @import 'search';
@import 'related-posts'; @import 'related-posts';
@import 'math';
@import 'gitter'; @import 'gitter';
@import 'livere'; @import 'livere';
@import 'waline'; @import 'waline';
@import 'mermaid';
.use-motion .animated { .use-motion .animated {
// Fix issue #48 #55 // Fix issue #48 #55

View File

@@ -1,9 +0,0 @@
@if $math_mathjax_enable {
mjx-container[jax='CHTML'][display='true'], .has-jax {
overflow: auto hidden;
}
mjx-container[display='true'] + br {
display: none;
}
}

View File

@@ -0,0 +1,3 @@
.post-block .post-body .mermaid {
background: var(--highlight-foreground);
}

View File

@@ -106,6 +106,13 @@
padding: 5px 0; padding: 5px 0;
} }
} }
mark.search-keyword {
background: transparent;
border-bottom: 1px dashed $red;
color: $red;
font-weight: bold;
}
} }
@if $algolia_search_enable { @if $algolia_search_enable {
@@ -169,11 +176,4 @@
margin: auto; margin: auto;
} }
} }
mark.search-keyword {
background: transparent;
border-bottom: 1px dashed $red;
color: $red;
font-weight: bold;
}
} }

View File

@@ -1,6 +1,48 @@
.tool-buttons {
@include sidebar-toggle();
background: none;
bottom: 55px;
filter: alpha(opacity=0);
font-size: 12px;
.button {
display: block;
margin-bottom: 5px;
width: 36px;
height: 36px;
border-radius: 5px;
background-color: $tool-btn-bg;
color: $tool-btn-color;
text-align: center;
font-size: $font-size-larger;
line-height: 35px;
padding: 0;
outline: 0;
border: none;
text-transform: none;
cursor: pointer;
opacity: $tool-btn-opacity;
touch-action: manipulation;
&:hover {
color: $tool-btn-hover-fore-color;
opacity: $tool-btn-opacity-hover;
}
}
.goto-comments {
display: none;
}
.goto-comments-on {
display: block;
}
}
@if $back2top_enable { @if $back2top_enable {
.back-to-top { .back-to-top {
font-size: $b2t-font-size; font-size: $font-size-smaller;
@if not $back2top_scrollpercent { @if not $back2top_scrollpercent {
span { span {

View File

@@ -29,6 +29,16 @@
font-size: $font-size-smallest; font-size: $font-size-smallest;
} }
.google-translate {
display: flex;
justify-content: center;
i {
font-size: $font-size-larger;
margin: auto 0;
}
}
@if $footer_vendors_enable { @if $footer_vendors_enable {
.vendors-list { .vendors-list {
a { a {
@@ -97,16 +107,3 @@
vertical-align: middle; vertical-align: middle;
} }
} }
.busuanzi-count {
@if $busuanzi_visitors {
#busuanzi_container_site_uv {
display: none;
}
}
@if $busuanzi_views {
#busuanzi_container_site_pv {
display: none;
}
}
}

View File

@@ -33,6 +33,8 @@
.fa, .fab, .far, .fas { .fa, .fab, .far, .fas {
margin-right: 8px; margin-right: 8px;
width: 16px;
text-align: center;
} }
.badge { .badge {

View File

@@ -1,4 +1,4 @@
.sidebar-inner { .sidebar-inner, .sidebar-card-widget {
color: $grey-dark; color: $grey-dark;
// Init Sidebar & TOC inner dimensions on all pages and for all schemes. // Init Sidebar & TOC inner dimensions on all pages and for all schemes.
$offset : if(($scheme == 'Pisces') or ($scheme == 'Gemini'), $sidebar-offset, $sidebar-padding); $offset : if(($scheme == 'Pisces') or ($scheme == 'Gemini'), $sidebar-offset, $sidebar-padding);
@@ -39,3 +39,4 @@
@import 'sidebar-toggle'; @import 'sidebar-toggle';
@import 'sidebar-toc'; @import 'sidebar-toc';
@import 'site-state'; @import 'site-state';
@import 'sidebar-card-widget';

View File

@@ -0,0 +1,60 @@
.sidebar-card-widget {
background: var(--content-bg-color);
@if ($scheme == 'Pisces') or ($scheme == 'Gemini'){
border-radius: $border-radius;
box-shadow: $box-shadow;
}
box-sizing: border-box;
color: var(--text-color);
margin-top: $sidebar-offset;
.item-headline {
text-align: left;
font-size: $font-size-small;
font-weight: bold;
span {
margin-left: 8px;
}
}
.siteinfo {
font-size: $font-size-small;
text-align: left;
.siteinfo-item {
display: flex;
-webkit-box-align: center;
align-items: center;
padding: 2px 10px 0;
i {
width: 16px;
height: 16px;
text-align: center;
margin-right: 4px;
}
div:first-child {
-webkit-box-flex: 1;
-moz-box-flex: 1;
-o-box-flex: 1;
box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
padding-right: 20px;
}
}
}
}
.back-to-top-card {
margin: 0;
padding: 0;
div:first-child {
margin: 0;
}
}

View File

@@ -1,62 +1,67 @@
@if $toc_enable {
.post-toc {
font-size: $font-size-small;
padding: 0 8px;
ul { .post-toc {
list-style: none; font-size: $font-size-small;
margin: 0; padding: 0 8px;
padding: 0 2px 5px 10px;
text-align: left;
> li { ul {
padding-left: 0; list-style: none;
margin: 0;
padding: 0 2px 5px 10px;
text-align: left;
counter-reset: item;
> li {
padding-left: 0;
}
a {
transition: all $transition-ease;
&:before {
content: counters(item, ".") ". ";
counter-increment: item;
} }
}
}
a { .nav-item {
transition: all $transition-ease; line-height: 1.8;
overflow: hidden;
text-overflow: ellipsis;
@if not $toc_wrap {
white-space: nowrap;
}
}
.nav {
.nav-child {
display: if($toc_expand_all, block, none);
}
.active > .nav-child {
display: block;
}
.active-current > .nav-child {
display: block;
> .nav-item {
display: block;
} }
} }
.nav-item { .active > a {
line-height: 1.8; border-bottom-color: $sidebar-highlight;
overflow: hidden; color: $sidebar-highlight;
text-overflow: ellipsis;
@if not $toc_wrap {
white-space: nowrap;
}
} }
.nav { .active-current > a {
.nav-child { color: $sidebar-highlight;
display: if($toc_expand_all, block, none);
}
.active > .nav-child { &:hover {
display: block;
}
.active-current > .nav-child {
display: block;
> .nav-item {
display: block;
}
}
.active > a {
border-bottom-color: $sidebar-highlight;
color: $sidebar-highlight; color: $sidebar-highlight;
} }
.active-current > a {
color: $sidebar-highlight;
&:hover {
color: $sidebar-highlight;
}
}
} }
} }
} }

View File

@@ -2,14 +2,30 @@
.highlight { .highlight {
background: var(--highlight-background); background: var(--highlight-background);
margin-bottom: 26px;
.table-container, pre { //TODO Need fixed the copy button show position.
div:first-child {
overflow-x: auto;
}
pre {
position: relative; position: relative;
overflow-x: auto;
} }
.table-container table tbody tr { table tbody tr {
background: none; //TODO Fixed the too long code line over
// layout background color.
background: #272822;
} }
/* pre > code span {
white-space: break-spaces;
overflow: hidden;
word-break: break-all;
word-wrap: break-word;
} */
} }
@if $codeblock_copy_btn_enable { @if $codeblock_copy_btn_enable {

View File

@@ -6,7 +6,7 @@
} }
pre { pre {
padding: 10px; padding: 18px;
margin: 0; margin: 0;
} }

View File

@@ -17,6 +17,7 @@ html {
*/ */
body { body {
margin: 0; margin: 0;
counter-reset: h2;
} }
/** /**

View File

@@ -1,7 +1,7 @@
//@use 'sass:map'; //@use 'sass:map';
@if $note_style != 'disabled' { @if $note_style != 'disabled' {
.post-body .note { .main .note {
$note-icons : $note_icons; $note-icons : $note_icons;
$note-style : $note_style; $note-style : $note_style;

View File

@@ -25,7 +25,7 @@
// ================================================== // ==================================================
// Post blocks. // Post blocks.
.main-inner > { .main-inner > {
.sub-menu, .post-block, .tabs-comment, .comments, .post-comments, .pagination { .sub-menu, .post-block, .flinks-block, .tabs-comment, .comments, .post-comments, .pagination {
background: var(--content-bg-color); background: var(--content-bg-color);
border-radius: $border-radius-inner; border-radius: $border-radius-inner;
box-shadow: $box-shadow-inner; box-shadow: $box-shadow-inner;
@@ -47,7 +47,7 @@
} }
// Post & Comments blocks. // Post & Comments blocks.
.post-block, .comments, .post-comments { .post-block, .flinks-block, .comments, .post-comments {
padding: $content-desktop-padding; padding: $content-desktop-padding;
} }
@@ -91,7 +91,7 @@
} }
} }
.post-block { .post-block, .flinks-block {
// Inside posts blocks content padding (default 40px). // Inside posts blocks content padding (default 40px).
padding: ($content-tablet-padding * 2); padding: ($content-tablet-padding * 2);
} }
@@ -119,7 +119,7 @@
} }
} }
.post-block { .post-block, .flinks-block {
// Inside posts blocks content padding (default 40px). // Inside posts blocks content padding (default 40px).
padding: $sidebar-offset; padding: $sidebar-offset;
} }

View File

@@ -283,6 +283,13 @@ $site-state-item-name-color : inherit;
// Components // Components
// -------------------------------------------------- // --------------------------------------------------
// Tool buttons
$tool-btn-bg : $black-deep;
$tool-btn-color : white;
$tool-btn-hover-fore-color : $orange;
$tool-btn-opacity : .8;
$tool-btn-opacity-hover : 1;
// Back to top // Back to top
$b2t-opacity : .8; $b2t-opacity : .8;
$b2t-opacity-hover : 1; $b2t-opacity-hover : 1;

View File

@@ -1,176 +0,0 @@
/** User-defined style. **/
{{ $P := .Site.Params -}}
{{- with $P.sidebar -}}
{{- $width := (int (math.Max .width 240)) -}}
{{- $offset := (int (math.Max .offset 12)) -}}
{{- $padding := (int (math.Max .padding 18)) -}}
{{- $positPad := (add $width $offset) }}
.main {
{{ if eq .position "right" }}
flex-direction: row-reverse;
{{- end }}
}
.header-inner {
width: {{ $width }}px;
}
.main-inner {
width: calc(100% - {{ $positPad }}px);
}
.sidebar {
width: {{ $width }}px;
visibility: inherit;
}
.sidebar-inner {
padding: {{ $padding }}px 10px;
}
.footer-inner {
padding-{{ .position }}: {{ $positPad }}px;
}
{{- end }}
.site-author-image {
{{- if $P.avatar.rounded }}
border-radius:50%;
{{- end }}
{{- if $P.avatar.rotated }}
transition: transform 1s ease-out;
{{- end }}
}
.site-author-image:hover {
transform: rotateZ(360deg);
}
.site-state-item {
border-left: 1px solid #eee;
}
.site-state-item:first-child {
border-left: none;
}
.rss-link {
border-top: 1px dotted #ccc;
border-bottom: 1px dotted #ccc;
text-align: center;
margin: 10px 0 0 0;
}
.rss-link a {
display: block;
color: #fc6423;
border-bottom: none;
}
.rss-link a:hover {
animation-name: wobble-vertical;
animation-duration: 2s;
animation-timing-function: ease-in-out;
animation-iteration-count: 1;
}
.rss-link a:hover > i {
-webkit-transform: scaleY(-1);
transform: scaleY(-1);
}
.links-of-social a {
font-size: 0.8125em;
}
.links-of-social .fa,
.links-of-social .fab,
.links-of-social .far,
.links-of-social .fas {
margin-right: 2px;
}
.links-of-social {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
.links-of-social-item {
margin: 5px 0 0;
{{- if and $P.socialIcons.enable (not $P.socialIcons.iconsOnly) }}
width: 50%;
{{- end }}
}
.links-of-social-item a {
box-sizing: border-box;
display: inline-block;
max-width: 100%;
overflow: hidden;
padding: 0 5px;
text-overflow: ellipsis;
white-space: nowrap;
}
.links-of-social-item a {
border-bottom: 0;
border-radius: 4px;
display: block;
}
.links-of-social-item a:hover {
background: var(--body-bg-color);
}
.cc-license {
{{ if eq $P.creativeCommons.size "big" }}
margin-top: 10px;
{{ else }}
margin-top: 5px;
{{- end }}
}
.back-to-top {
bottom: 30px;
}
.posts-expand .post-meta-container {
margin: 10px auto;
}
.post-meta-item-icon {
margin: 0 0 0 -5px;
}
:not(.post-meta-break) + .post-meta-item::before {
content: '|';
margin: 0 0.3em;
}
.post-meta-catg:not(:last-child)::after {
content: ';';
margin: 0px;
}
.posts-expand .post-header {
margin: 0;
}
.posts-expand .post-body {
margin: 28px 0;
}
.post-footer-btn {
text-align: center;
}
.beian img {
display: inline-block;
margin: 0 3px;
vertical-align: middle;
}
.with-love {
{{- with $P.footer.icon.color }}
color: {{ $P.footer.icon.color }};
{{- end }}
{{- if $P.footer.icon.animated }}
animation: icon-animate 1.33s ease-in-out infinite;
{{- end }}
}
/* Font Awesome */
.fa-spin {
-webkit-animation: fa-spin .8s infinite linear;
animation: fa-spin .8s infinite linear;
}

892
assets/css/gt.scss Normal file
View File

@@ -0,0 +1,892 @@
:root {
--gt-blue: #2640b2;
--gt-border: #d1d5db;
}
@keyframes "goog-te-spinner-rotator" {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(270deg);
}
}
@keyframes "goog-te-spinner-dash" {
0% {
stroke-dashoffset: 187;
}
50% {
stroke-dashoffset: 46.75;
transform: rotate(135deg);
}
100% {
stroke-dashoffset: 187;
transform: rotate(450deg);
}
}
.goog-te-banner-frame {
left: 0px;
top: 0px;
height: 39px;
width: 100%;
z-index: 10000001;
position: fixed;
border: none;
border-bottom: 1px solid #6b90da;
margin: 0;
box-shadow: 0 0 8px 1px #999999;
_position: absolute;
}
.goog-te-menu-frame {
z-index: 10000002;
position: fixed;
box-shadow: 0.5rem 0.875rem 2.375rem rgba(39, 44, 49, 0.06), 0.0625rem 0.1875rem 0.5rem rgba(39, 44, 49, 0.03);
_position: absolute;
}
.goog-te-ftab-frame {
z-index: 10000000;
border: none;
margin: 0;
}
.goog-te-gadget {
font-family: arial;
font-size: 11px;
color: #666;
white-space: nowrap;
display: inline-flex;
img {
vertical-align: middle;
border: none;
display: inline-block;
}
.goog-te-combo {
margin: 4px 0;
}
div:first-child {
margin: 0 10px;
}
}
.goog-te-gadget-simple {
background-color: #fff;
border-left: 1px solid #d5d5d5;
border-top: 1px solid #9b9b9b;
border-bottom: 1px solid #e8e8e8;
border-right: 1px solid #d5d5d5;
font-size: 10pt;
display: inline-block;
padding-top: 1px;
padding-bottom: 2px;
cursor: pointer;
zoom: 1;
*display: inline;
.goog-te-menu-value {
color: #000;
span {
text-decoration: none;
}
}
}
.goog-te-gadget-icon {
margin-left: 2px;
margin-right: 2px;
width: 19px;
height: 19px;
border: none;
vertical-align: middle;
}
.goog-te-combo {
margin-left: 4px;
margin-right: 4px;
vertical-align: baseline;
*vertical-align: middle;
font-family: arial;
font-size: 10pt;
}
.goog-logo-link {
font-size: 12px;
font-weight: bold;
color: #444;
text-decoration: none;
margin: 0 5px;
border-bottom: 0;
&:link {
font-size: 12px;
font-weight: bold;
color: #444;
text-decoration: none;
}
&:visited {
font-size: 12px;
font-weight: bold;
color: #444;
text-decoration: none;
}
&:hover {
font-size: 12px;
font-weight: bold;
color: #444;
text-decoration: none;
}
&:active {
font-size: 12px;
font-weight: bold;
color: #444;
text-decoration: none;
}
}
.goog-te-banner {
.goog-logo-link {
display: block;
margin: 0px 10px;
padding-top: 2px;
padding-left: 4px;
}
* {
font-family: arial;
font-size: 10pt;
}
margin: 0;
background-color: #fff;
overflow: hidden;
img {
border: none;
}
table {
tbody {
tr {
td {
&:nth-child(2) {
display: none;
}
}
}
}
}
}
.goog-close-link {
display: block;
margin: 0px 10px;
}
.goog-te-ftab {
* {
font-family: arial;
font-size: 10pt;
}
margin: 0px;
background-color: #fff;
white-space: nowrap;
}
.goog-te-menu {
* {
font-family: arial;
font-size: 10pt;
}
background-color: #ffffff;
text-decoration: none;
border: 2px solid #c3d9ff;
overflow-y: scroll;
overflow-x: hidden;
position: absolute;
left: 0;
top: 0;
}
.goog-te-menu2 {
* {
font-family: arial;
font-size: 10pt;
}
background-color: #ffffff;
text-decoration: none;
overflow: hidden;
padding: 4px;
border: 1px solid var(--gt-border);
border-radius: 4px;
}
.goog-te-balloon {
* {
font-family: arial;
font-size: 10pt;
}
background-color: #ffffff;
overflow: hidden;
padding: 8px;
border: none;
border-radius: 10px;
img {
border: none;
}
}
.goog-te-banner-content {
color: #000;
img {
vertical-align: middle;
}
}
.goog-te-banner-info {
color: #666;
vertical-align: top;
margin-top: 0px;
font-size: 7pt;
}
.goog-te-banner-margin {
width: 8px;
}
.goog-te-button {
div {
border: 1px solid var(--gt-border);
height: 20px;
}
button {
background: transparent;
border: none;
cursor: pointer;
height: 20px;
overflow: hidden;
margin: 0;
vertical-align: top;
white-space: nowrap;
&:active {
background: none repeat scroll 0 0 #cccccc;
}
}
}
.goog-te-ftab-link {
text-decoration: none;
font-weight: bold;
font-size: 10pt;
border: 1px outset #888;
padding: 6px 10px;
white-space: nowrap;
position: absolute;
left: 0px;
top: 0px;
img {
margin-left: 2px;
margin-right: 2px;
width: 19px;
height: 19px;
border: none;
vertical-align: middle;
}
span {
text-decoration: underline;
margin-left: 2px;
margin-right: 2px;
vertical-align: middle;
}
}
.goog-float-top {
.goog-te-ftab-link {
padding: 2px 2px;
border-top-width: 0px;
}
}
.goog-float-bottom {
.goog-te-ftab-link {
padding: 2px 2px;
border-bottom-width: 0px;
}
}
.goog-te-menu-value {
text-decoration: none;
color: var(--gt-blue);
white-space: nowrap;
margin-left: 4px;
margin-right: 4px;
span {
text-decoration: underline;
&::after {
content: "";
}
}
img {
margin-left: 2px;
margin-right: 2px;
display: none;
}
}
.goog-te-menu-item {
padding: 3px;
text-decoration: none;
color: var(--gt-blue);
background: #ffffff;
&:link {
color: var(--gt-blue);
background: #ffffff;
}
&:visited {
color: #551a8b;
}
&:hover {
background: #c3d9ff;
}
&:active {
color: var(--gt-blue);
}
}
.goog-te-menu2-colpad {
width: 16px;
}
.goog-te-menu2-separator {
margin: 6px 0;
height: 1px;
background-color: var(--gt-border);
overflow: hidden;
}
.goog-te-menu2-item {
div {
padding: 4px;
color: var(--gt-blue);
background: #ffffff;
}
.indicator {
display: none;
}
text-decoration: none;
&:link {
div {
color: var(--gt-blue);
background: #ffffff;
}
}
&:visited {
div {
color: var(--gt-blue);
background: #ffffff;
}
}
&:active {
div {
color: var(--gt-blue);
background: #ffffff;
}
}
&:hover {
div {
color: #ffffff;
background: #3366cc;
border-radius: 2px;
}
}
}
.goog-te-menu2-item-selected {
div {
padding: 4px;
color: #000;
font-weight: bold;
}
.indicator {
display: auto;
}
.text {
padding-left: 4px;
padding-right: 4px;
}
text-decoration: none;
&:link {
div {
color: #000;
font-weight: bold;
}
}
&:visited {
div {
color: #000;
font-weight: bold;
}
}
&:hover {
div {
color: #000;
font-weight: bold;
}
}
&:active {
div {
color: #000;
font-weight: bold;
}
}
}
.goog-te-balloon-frame {
background-color: #ffffff;
border: 1px solid #6b90da;
box-shadow: 0.5rem 0.875rem 2.375rem rgba(39, 44, 49, 0.06), 0.0625rem 0.1875rem 0.5rem rgba(39, 44, 49, 0.03);
border-radius: 8px;
}
.goog-te-balloon-text {
margin-top: 6px;
}
.goog-te-balloon-zippy {
margin-top: 6px;
white-space: nowrap;
* {
vertical-align: middle;
}
.minus {
background-image: url(//www.google.com/images/zippy_minus_sm.gif);
}
.plus {
background-image: url(//www.google.com/images/zippy_plus_sm.gif);
}
span {
color: #00c;
text-decoration: underline;
cursor: pointer;
margin: 0 4px;
}
}
.goog-te-balloon-form {
margin: 6px 0 0 0;
form {
margin: 0;
textarea {
margin-bottom: 4px;
width: 100%;
}
}
}
.goog-te-balloon-footer {
margin: 6px 0 4px 0;
}
.goog-te-spinner-pos {
z-index: 1000;
position: fixed;
transition-delay: 0.6s;
left: -1000px;
top: -1000px;
}
.goog-te-spinner-animation {
background: #ccc;
display: flex;
align-items: center;
justify-content: center;
width: 104px;
height: 104px;
border-radius: 50px;
background: #fff url(//www.gstatic.com/images/branding/product/2x/translate_24dp.png) 50% 50% no-repeat;
transition: all 0.6s ease-in-out;
transform: scale(0.4);
opacity: 0;
}
.goog-te-spinner-animation-show {
transform: scale(0.5);
opacity: 1;
}
.goog-te-spinner {
margin: 2px 0 0 2px;
animation: goog-te-spinner-rotator 1.4s linear infinite;
}
.goog-te-spinner-path {
stroke-dasharray: 187;
stroke-dashoffset: 0;
stroke: #4285f4;
transform-origin: center;
animation: goog-te-spinner-dash 1.4s ease-in-out infinite;
}
#goog-gt-tt {
color: #222;
background-color: #ffffff;
border: 1px solid #eee;
box-shadow: 0 4px 16px rgba(0,0,0,.2);
display: none;
font-family: arial;
font-size: 10pt;
width: 420px;
padding: 12px;
position: absolute;
z-index: 10000;
.original-text {
clear: both;
font-size: 10pt;
position: relative;
text-align: justify;
width: 100%;
}
.title {
color: #999;
font-family: arial,sans-serif;
margin: 4px 0;
text-align: left;
}
.close-button {
display: none;
}
.logo {
float: left;
margin: 0px;
}
.activity-links {
display: inline-block;
}
.started-activity-container {
display: none;
width: 100%;
}
.activity-root {
margin-top: 20px;
}
.left {
float: left;
}
.right {
float: right;
}
.bottom {
min-height: 15px;
position: relative;
height: 1%;
}
.status-message {
background: linear-gradient(top,#29910d 0%,#20af0e 100%);
background: #29910d;
border-radius: 4px;
box-shadow: inset 0px 2px 2px #1e6609;
color: white;
font-size: 9pt;
font-weight: bolder;
margin-top: 12px;
padding: 6px;
text-shadow: 1px 1px 1px #1e6609;
}
.activity-link {
color: #1155cc;
cursor: pointer;
font-family: arial;
font-size: 11px;
margin-right: 15px;
text-decoration: none;
}
textarea {
font-family: arial;
resize: vertical;
width: 100%;
margin-bottom: 10px;
border-radius: 1px;
border: 1px solid #d9d9d9;
border-top: 1px solid silver;
font-size: 13px;
height: auto;
overflow-y: auto;
padding: 1px;
&:focus {
box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);
border: 1px solid #4d90fe;
outline: none;
}
}
.activity-cancel {
margin-right: 10px;
}
.translate-form {
min-height: 25px;
vertical-align: middle;
padding-top: 8px;
.activity-form {
margin-bottom: 5px;
margin-bottom: 0px;
input {
display: inline-block;
min-width: 54px;
*min-width: 70px;
border: 1px solid #dcdcdc;
border: 1px solid rgba(0,0,0,0.1);
text-align: center;
color: #444;
font-size: 11px;
font-weight: bold;
height: 27px;
outline: 0;
padding: 0 8px;
vertical-align: middle;
line-height: 27px;
margin: 0 16px 0 0;
box-shadow: 0 1px 2px rgba(0,0,0,.1);
border-radius: 2px;
transition: all 0.218s;
background-color: #f5f5f5;
background-image: linear-gradient(top,#f5f5f5,#f1f1f1);
-webkit-user-select: none;
-moz-user-select: none;
cursor: default;
&:hover {
border: 1px solid #c6c6c6;
color: #222;
transition: all 0.0s;
background-color: #f8f8f8;
background-image: linear-gradient(top,#f8f8f8,#f1f1f1);
border-color: #3079ed;
}
&:active {
border: 1px solid #c6c6c6;
color: #333;
background-color: #f6f6f6;
background-image: linear-gradient(top,#f6f6f6,#f1f1f1);
border-color: #3079ed;
}
&:focus {
#goog-gt-tt {
.translate-form {
.activity-form {
input.focus {
#goog-gt-tt {
.translate-form {
.activity-form {
input {
&:active {
box-shadow: inset 0 0 0 1px rgba(255,255,255,0.5);
}
}
}
}
}
}
}
}
}
&:active {
box-shadow: inset 0 0 0 1px rgba(255,255,255,0.5);
}
outline: none;
border: 1px solid #4d90fe;
z-index: 4 !important;
border-color: #3079ed;
}
&.focus {
&:active {
box-shadow: inset 0 0 0 1px rgba(255,255,255,0.5);
}
}
}
input.focus {
outline: none;
border: 1px solid #4d90fe;
z-index: 4 !important;
border-color: #3079ed;
}
input.selected {
background-color: #eeeeee;
background-image: linear-gradient(top,#eeeeee,#e0e0e0);
box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
border: 1px solid #ccc;
color: #333;
}
input.activity-submit {
color: white;
border-color: #3079ed;
background-color: #4d90fe;
background-image: linear-gradient(top,#4d90fe,#4787ed);
&:hover {
#goog-gt-tt {
.translate-form {
.activity-form {
input.activity-submit {
&:focus {
border-color: #3079ed;
background-color: #357ae8;
background-image: linear-gradient(top,#4d90fe,#357ae8);
}
}
}
}
}
box-shadow: inset 0 0 0 1px #fff,0px 1px 1px rgba(0,0,0,0.1);
border-color: #3079ed;
}
&:focus {
border-color: #3079ed;
}
&:active {
border-color: #3079ed;
}
}
input.activity-submit.focus {
#goog-gt-tt {
.translate-form {
.activity-form {
input.activity-submit {
&:active {
border-color: #3079ed;
background-color: #357ae8;
background-image: linear-gradient(top,#4d90fe,#357ae8);
}
}
}
}
}
border-color: #3079ed;
}
}
}
.gray {
color: #999;
font-family: arial,sans-serif;
}
.alt-helper-text {
color: #999;
font-size: 11px;
font-family: arial,sans-serif;
margin: 15px 0px 5px 0px;
}
.alt-error-text {
color: #800;
display: none;
font-size: 9pt;
}
.alt-menu.goog-menu {
background: #ffffff;
border: 1px solid #dddddd;
box-shadow: 0px 2px 4px #99a;
min-width: 0;
outline: none;
padding: 0;
position: absolute;
z-index: 2000;
}
.alt-menu {
.goog-menuitem {
cursor: pointer;
padding: 2px 5px 5px;
margin-right: 0px;
border-style: none;
h1 {
font-size: 100%;
font-weight: bold;
margin: 4px 0px;
}
strong {
color: #345aad;
}
}
div.goog-menuitem {
&:hover {
background: #ddd;
}
}
}
.goog-submenu-arrow {
text-align: right;
position: absolute;
right: 0;
left: auto;
}
.goog-menuitem-rtl {
.goog-submenu-arrow {
text-align: left;
position: absolute;
left: 0;
right: auto;
}
}
.gt-hl-text {
background-color: #f1ea00;
border-radius: 4px;
box-shadow: rgba(0,0,0,.5) 3px 3px 4px;
box-sizing: border-box;
color: #f1ea00;
cursor: pointer;
margin: -2px -2px -2px -3px;
padding: 2px 2px 2px 3px;
position: relative;
}
.trans-target-highlight {
background-color: #f1ea00;
border-radius: 4px;
box-shadow: rgba(0,0,0,.5) 3px 3px 4px;
box-sizing: border-box;
color: #f1ea00;
cursor: pointer;
margin: -2px -2px -2px -3px;
padding: 2px 2px 2px 3px;
position: relative;
color: #222;
}
.gt-hl-layer {
color: white;
position: absolute !important;
}
.trans-target {
background-color: #c9d7f1;
border-radius: 4px 4px 0px 0px;
box-shadow: rgba(0,0,0,.5) 3px 3px 4px;
box-sizing: border-box;
cursor: pointer;
margin: -2px -2px -2px -3px;
padding: 2px 2px 3px 3px;
position: relative;
.trans-target-highlight {
background-color: #c9d7f1;
border-radius: 4px 4px 0px 0px;
box-shadow: rgba(0,0,0,.5) 3px 3px 4px;
box-sizing: border-box;
cursor: pointer;
margin: -2px -2px -2px -3px;
padding: 2px 2px 3px 3px;
position: relative;
}
}
.trans-edit {
background-color: transparent;
border: 1px solid #4d90fe;
border-radius: 0em;
margin: -2px;
padding: 1px;
}
.gt-trans-highlight-l {
border-left: 2px solid red;
margin-left: -2px;
}
.gt-trans-highlight-r {
border-right: 2px solid red;
margin-right: -2px;
}
#alt-input {
padding: 2px;
}
#alt-input-text {
font-size: 11px;
padding: 2px 2px 3px;
margin: 0;
background-color: #fff;
color: #333;
border: 1px solid #d9d9d9;
border-top: 1px solid #c0c0c0;
display: inline-block;
vertical-align: top;
height: 21px;
box-sizing: border-box;
&:hover {
border: 1px solid #b9b9b9;
border-top: 1px solid #a0a0a0;
box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
}
&:focus {
box-shadow: inset 0px 1px 2px rgba(0,0,0,0.3);
outline: none;
border: 1px solid #4d90fe;
}
}
#alt-input-submit {
font-size: 11px;
padding: 2px 6px 3px;
margin: 0 0 0 2px;
height: 21px;
}
}
div#goog-gt-tt {
padding: 10px 14px;
}
.gt-hl-layer {
clear: both;
font-size: 10pt;
position: relative;
text-align: justify;
width: 100%;
}
.goog-text-highlight {
background-color: #c9d7f1;
box-shadow: 2px 2px 4px #9999aa;
box-sizing: border-box;
position: relative;
}

View File

@@ -33,11 +33,6 @@ $footer_vendors_enable : {{ isset $P.footer "vendors" }};
{{ printf "$footer_vendors_imgs_width:%s;" (delimit (after 1 $width) ", ") }} {{ printf "$footer_vendors_imgs_width:%s;" (delimit (after 1 $width) ", ") }}
{{ end }} {{ end }}
// Counter
$busuanzi_visitors : {{ $P.busuanzi.visitors }};
$busuanzi_views : {{ $P.busuanzi.views }};
$busuanzi_post_views : {{ $P.busuanzi.postViews }};
// Font // Font
$font_enable : {{ $P.font.enable }}; $font_enable : {{ $P.font.enable }};
$font_global_size : {{ default $P.font.global.size 1 }}; $font_global_size : {{ default $P.font.global.size 1 }};
@@ -70,7 +65,7 @@ $back2top_sidebar : {{ $P.backTop.sidebar }};
$avatar_rotated : {{ $P.avatar.rotated }}; $avatar_rotated : {{ $P.avatar.rotated }};
$avatar_rounded : {{ $P.avatar.rounded }}; $avatar_rounded : {{ $P.avatar.rounded }};
$avatar_rounded : {{ $P.avatar.rounded }}; $avatar_rounded : {{ $P.avatar.rounded }};
$site_state : {{ $P.siteState }}; $site_state : {{ $P.siteState.basic }};
$social_icons_only : {{ $P.socialIcons.iconsOnly }}; $social_icons_only : {{ $P.socialIcons.iconsOnly }};
$social_icons_transition : {{ $P.socialIcons.transition }}; $social_icons_transition : {{ $P.socialIcons.transition }};
$links_settings_layout : {{ $P.linksSets.layout }}; $links_settings_layout : {{ $P.linksSets.layout }};
@@ -112,7 +107,6 @@ $reading_progress_position : {{ $P.readingProgress.position }};
$reading_progress_reversed : {{ $P.readingProgress.reversed }}; $reading_progress_reversed : {{ $P.readingProgress.reversed }};
// Thirdparty // Thirdparty
$math_mathjax_enable : {{ $P.math.mathjax.enable }};
// TODO // TODO
//$related_posts_enable : {{ $P.relatedPosts.enable }}; //$related_posts_enable : {{ $P.relatedPosts.enable }};
$related_posts_enable : false; $related_posts_enable : false;

View File

@@ -95,7 +95,7 @@ NexT.motion.middleWares = {
}); });
} }
animate(postblock, '.post-block, .pagination, .post-comments'); animate(postblock, '.post-block,.flinks-block, .pagination, .post-comments');
animate(collheader, '.collection-header'); animate(collheader, '.collection-header');
animate(postheader, '.post-header'); animate(postheader, '.post-header');
animate(postbody, '.post-body'); animate(postbody, '.post-body');

View File

@@ -2,9 +2,13 @@
NexT.boot = {}; NexT.boot = {};
NexT.boot.activeThemeMode = function(){
NexT.utils.activeThemeMode();
};
NexT.boot.registerEvents = function() { NexT.boot.registerEvents = function() {
// NexT.utils.registerScrollPercent(); NexT.utils.registerScrollPercent();
// NexT.utils.registerCanIUseTag(); // NexT.utils.registerCanIUseTag();
// Mobile top menu bar. // Mobile top menu bar.
@@ -33,15 +37,20 @@ NexT.boot.registerEvents = function() {
NexT.boot.refresh = function() { NexT.boot.refresh = function() {
NexT.utils.calSiteInfo();
NexT.utils.regSwitchThemeBtn();
if (!NexT.CONFIG.page.isPage) return; if (!NexT.CONFIG.page.isPage) return;
NexT.utils.registerSidebarTOC(); NexT.utils.registerSidebarTOC();
NexT.utils.replacePostCRLink(); NexT.utils.replacePostCRLink();
NexT.utils.registerCopyCode(); NexT.utils.registerCopyCode();
NexT.utils.registerPostReward(); NexT.utils.registerPostReward();
if(NexT.CONFIG.page.comments) { if(NexT.CONFIG.page.comments) {
NexT.utils.initCommontesDispaly(); NexT.utils.initCommontesDispaly();
NexT.utils.registerCommonSwitch(); NexT.utils.registerCommonSwitch();
NexT.utils.domAddClass('#goto-comments', 'goto-comments-on');
} else { } else {
NexT.utils.hideCommontes(); NexT.utils.hideCommontes();
} }
@@ -79,6 +88,7 @@ NexT.boot.motion = function() {
}; };
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
NexT.boot.activeThemeMode();
NexT.boot.registerEvents(); NexT.boot.registerEvents();
NexT.boot.motion(); NexT.boot.motion();
NexT.boot.refresh(); NexT.boot.refresh();

View File

@@ -40,7 +40,7 @@ document.addEventListener('DOMContentLoaded', () => {
requiredMeta : requiredmeta, requiredMeta : requiredmeta,
serverURL : serverurl, serverURL : serverurl,
lang : NexT.CONFIG.lang, lang : NexT.CONFIG.lang,
dark : "auto" dark : 'html[data-theme="dark"]'
}); });
NexT.utils.hiddeLodingCmp(element); NexT.utils.hiddeLodingCmp(element);

View File

@@ -0,0 +1,173 @@
(function () {
var gtConstEvalStartTime = new Date();
var h = this || self,
l = /^[\w+/_-]+[=]{0,2}$/,
m = null;
function n(a) {
return (a = a.querySelector && a.querySelector("script[nonce]")) && (a = a.nonce || a.getAttribute("nonce")) &&
l.test(a) ? a : ""
}
function p(a, b) {
function c() {}
c.prototype = b.prototype;
a.i = b.prototype;
a.prototype = new c;
a.prototype.constructor = a;
a.h = function (g, f, k) {
for (var e = Array(arguments.length - 2), d = 2; d < arguments.length; d++) e[d - 2] = arguments[d];
return b.prototype[f].apply(g, e)
}
}
function q(a) {
return a
};
function r(a) {
if (Error.captureStackTrace) Error.captureStackTrace(this, r);
else {
var b = Error().stack;
b && (this.stack = b)
}
a && (this.message = String(a))
}
p(r, Error);
r.prototype.name = "CustomError";
function u(a, b) {
a = a.split("%s");
for (var c = "", g = a.length - 1, f = 0; f < g; f++) c += a[f] + (f < b.length ? b[f] : "%s");
r.call(this, c + a[g])
}
p(u, r);
u.prototype.name = "AssertionError";
function v(a, b) {
throw new u("Failure" + (a ? ": " + a : ""), Array.prototype.slice.call(arguments, 1));
};
var w;
function x(a, b) {
this.g = b === y ? a : ""
}
x.prototype.toString = function () {
return this.g + ""
};
var y = {};
function z(a) {
var b = document.getElementsByTagName("head")[0];
b || (b = document.body.parentNode.appendChild(document.createElement("head")));
b.appendChild(a)
}
function _loadJs(a) {
var b = document;
var c = "SCRIPT";
"application/xhtml+xml" === b.contentType && (c = c.toLowerCase());
c = b.createElement(c);
c.type = "text/javascript";
c.charset = "UTF-8";
if (void 0 === w) {
b = null;
var g = h.trustedTypes;
if (g && g.createPolicy) {
try {
b = g.createPolicy("goog#html", {
createHTML: q,
createScript: q,
createScriptURL: q
})
} catch (t) {
h.console && h.console.error(t.message)
}
w = b
} else w = b
}
a = (b = w) ? b.createScriptURL(a) : a;
a = new x(a, y);
a: {
try {
var f = c && c.ownerDocument,
k = f && (f.defaultView || f.parentWindow);
k = k || h;
if (k.Element && k.Location) {
var e = k;
break a
}
} catch (t) {}
e = null
}
if (e && "undefined" != typeof e.HTMLScriptElement && (!c || !(c instanceof e.HTMLScriptElement) && (c instanceof e
.Location || c instanceof e.Element))) {
e = typeof c;
if ("object" == e && null != c || "function" == e) try {
var d = c.constructor.displayName || c.constructor.name || Object.prototype.toString.call(c)
} catch (t) {
d = "<object could not be stringified>"
} else d = void 0 === c ? "undefined" : null === c ? "null" : typeof c;
v("Argument is not a %s (or a non-Element, non-Location mock); got: %s",
"HTMLScriptElement", d)
}
a instanceof x && a.constructor === x ? d = a.g : (d = typeof a, v(
"expected object of type TrustedResourceUrl, got '" + a + "' of type " + ("object" != d ? d : a ?
Array.isArray(a) ? "array" : d : "null")), d = "type_error:TrustedResourceUrl");
c.src = d;
(d = c.ownerDocument && c.ownerDocument.defaultView) && d != h ? d = n(d.document) : (null === m && (m = n(
h.document)), d = m);
d && c.setAttribute("nonce", d);
z(c)
}
function _loadCss(a) {
var b = document.createElement("link");
b.type = "text/css";
b.rel = "stylesheet";
b.charset = "UTF-8";
b.href = a;
z(b)
}
function _isNS(a) {
a = a.split(".");
for (var b = window, c = 0; c < a.length; ++c)
if (!(b = b[a[c]])) return !1;
return !0
}
function _setupNS(a) {
a = a.split(".");
for (var b = window, c = 0; c < a.length; ++c) b.hasOwnProperty ? b.hasOwnProperty(a[c]) ? b = b[a[c]] : b =
b[a[c]] = {} : b = b[a[c]] || (b[a[c]] = {});
return b
}
window.addEventListener && "undefined" == typeof document.readyState && window.addEventListener(
"DOMContentLoaded",
function () {
document.readyState = "complete"
}, !1);
if (_isNS('google.translate.Element')) {
return
}(function () {
var c = _setupNS('google.translate._const');
c._cest = gtConstEvalStartTime;
gtConstEvalStartTime = undefined;
c._cl = navigator.language || navigator.userLanguage;
c._cuc = 'googleTranslateElementInit';
c._cac = '';
c._cam = '';
c._ctkk = '449649.3822363247';
var h = 'translate.googleapis.com';
var s = (true ? 'https' : window.location.protocol == 'https:' ? 'https' : 'http') + '://';
var b = s + h;
c._pah = h;
c._pas = s;
// c._pbi = b + '/translate_static/img/te_bk.gif';
c._pbi = '';
c._pci = b + '/translate_static/img/te_ctrl3.gif';
c._pli = b + '/translate_static/img/loading.gif';
c._plla = h + '/translate_a/l';
c._pmi = b + '/translate_static/img/mini_google.png';
c._ps = window.translateelement_styles;
c._puh = 'translate.google.cn';
_loadCss(c._ps);
_loadJs(b + `/translate_static/js/element/main_${navigator.language || navigator.userLanguage}.js`);
})();
})();
function googleTranslateElementInit(){
new google.translate.TranslateElement({
includedLanguages: 'zh-CN,zh-TW,en,ru',
autoDisplay:false
},'google_translate_element');
}

144
assets/js/third-party/search/algolia.js vendored Normal file
View File

@@ -0,0 +1,144 @@
/* global instantsearch, algoliasearch, CONFIG, pjax */
document.addEventListener('DOMContentLoaded', () => {
const algoiajs = NexT.utils.getCDNResource(NexT.CONFIG.algolia.js);
const instantschjs = NexT.utils.getCDNResource(NexT.CONFIG.algolia.instantjs);
NexT.utils.getScript(algoiajs, {});
NexT.utils.getScript(instantschjs, {}).then(() => {
const { indexname, appid, apikey, hits } = NexT.CONFIG.algolia.cfg;
const indexName = indexname;
const search = instantsearch({
indexName,
searchClient: algoliasearch(appid, apikey),
searchFunction: helper => {
if (document.querySelector('.search-input').value) {
helper.search();
}
}
});
const markKeyWords = function(content) {
return content.replaceAll("<mark>", '<mark class="search-keyword">');
};
if (typeof pjax === 'object') {
search.on('render', () => {
pjax.refresh(document.querySelector('.algolia-hits'));
});
}
// Registering Widgets
search.addWidgets([
instantsearch.widgets.configure({
hitsPerPage: hits.perpage || 10
}),
instantsearch.widgets.searchBox({
container: '.search-input-container',
placeholder: NexT.CONFIG.i18n.placeholder,
// Hide default icons of algolia search
showReset: false,
showSubmit: false,
showLoadingIndicator: true,
cssClasses: {
input: 'search-input'
}
}),
instantsearch.widgets.stats({
container: '.algolia-stats',
templates: {
text: data => {
const stats = NexT.CONFIG.i18n.hits_time
.replace('${hits}', data.nbHits)
.replace('${time}', data.processingTimeMS);
return `<span>${stats}</span><img src="/imgs/algolia-logo.svg" alt="Algolia">`;
}
},
cssClasses: {
text: 'search-stats'
}
}),
instantsearch.widgets.hits({
container: '.algolia-hits',
escapeHTML: true,
templates: {
item: data => {
const { title, content } = data._highlightResult;
let result = `<a href="${data.permalink}" class="search-result-title">${markKeyWords(title.value)}</a>`;
//const content = excerpt || excerptStrip || content;
if (content && content.value) {
const div = document.createElement('div');
div.innerHTML = markKeyWords(content.value);
result += `<a href="${data.permalink}"><p class="search-result">${div.innerHTML.substring(0, 200)}...</p></a>`;
}
return result;
},
empty: data => {
return `<div class="algolia-hits-empty">
${NexT.CONFIG.i18n.empty.replace('${query}', data.query)}
</div>`;
}
},
cssClasses: {
list: 'search-result-list'
}
}),
instantsearch.widgets.pagination({
container: '.algolia-pagination',
scrollTo: false,
showFirst: true,
showLast: true,
templates: {
first: '<i class="fa fa-angle-double-left"></i>',
last: '<i class="fa fa-angle-double-right"></i>',
previous: '<i class="fa fa-angle-left"></i>',
next: '<i class="fa fa-angle-right"></i>'
},
cssClasses: {
list: ['pagination', 'algolia-pagination'],
item: 'pagination-item',
link: 'page-number',
selectedItem: 'current',
disabledItem: 'disabled-item'
}
})
]);
search.start();
// Handle and trigger popup window
document.querySelectorAll('.popup-trigger').forEach(element => {
element.addEventListener('click', () => {
document.body.classList.add('search-active');
setTimeout(() => document.querySelector('.search-input').focus(), 500);
});
});
// Monitor main search box
const onPopupClose = () => {
document.body.classList.remove('search-active');
};
document.querySelector('.search-pop-overlay').addEventListener('click', event => {
if (event.target === document.querySelector('.search-pop-overlay')) {
onPopupClose();
}
});
document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose);
document.addEventListener('pjax:success', onPopupClose);
window.addEventListener('keyup', event => {
if (event.key === 'Escape') {
onPopupClose();
}
});
});;
});

326
assets/js/third-party/search/local.js vendored Normal file
View File

@@ -0,0 +1,326 @@
/* global CONFIG, pjax, LocalSearch */
class LocalSearch {
constructor({
path = '',
unescape = false,
top_n_per_article = 1
}) {
this.path = path;
this.unescape = unescape;
this.top_n_per_article = top_n_per_article;
this.isfetched = false;
this.datas = null;
}
getIndexByWord(words, text, caseSensitive = false) {
const index = [];
const included = new Set();
if (!caseSensitive) {
text = text.toLowerCase();
}
words.forEach(word => {
if (this.unescape) {
const div = document.createElement('div');
div.innerText = word;
word = div.innerHTML;
}
const wordLen = word.length;
if (wordLen === 0) return;
let startPosition = 0;
let position = -1;
if (!caseSensitive) {
word = word.toLowerCase();
}
while ((position = text.indexOf(word, startPosition)) > -1) {
index.push({ position, word });
included.add(word);
startPosition = position + wordLen;
}
});
// Sort index by position of keyword
index.sort((left, right) => {
if (left.position !== right.position) {
return left.position - right.position;
}
return right.word.length - left.word.length;
});
return [index, included];
}
// Merge hits into slices
mergeIntoSlice(start, end, index) {
let item = index[0];
let { position, word } = item;
const hits = [];
const count = new Set();
while (position + word.length <= end && index.length !== 0) {
count.add(word);
hits.push({
position,
length: word.length
});
const wordEnd = position + word.length;
// Move to next position of hit
index.shift();
while (index.length !== 0) {
item = index[0];
position = item.position;
word = item.word;
if (wordEnd > position) {
index.shift();
} else {
break;
}
}
}
return {
hits,
start,
end,
count: count.size
};
}
// Highlight title and content
highlightKeyword(val, slice) {
let result = '';
let index = slice.start;
for (const { position, length } of slice.hits) {
result += val.substring(index, position);
index = position + length;
result += `<mark class="search-keyword">${val.substr(position, length)}</mark>`;
}
result += val.substring(index, slice.end);
return result;
}
getResultItems(keywords) {
const resultItems = [];
this.datas.forEach(({ title, content, url }) => {
// The number of different keywords included in the article.
const [indexOfTitle, keysOfTitle] = this.getIndexByWord(keywords, title);
const [indexOfContent, keysOfContent] = this.getIndexByWord(keywords, content);
const includedCount = new Set([...keysOfTitle, ...keysOfContent]).size;
// Show search results
const hitCount = indexOfTitle.length + indexOfContent.length;
if (hitCount === 0) return;
const slicesOfTitle = [];
if (indexOfTitle.length !== 0) {
slicesOfTitle.push(this.mergeIntoSlice(0, title.length, indexOfTitle));
}
let slicesOfContent = [];
while (indexOfContent.length !== 0) {
const item = indexOfContent[0];
const { position } = item;
// Cut out 100 characters. The maxlength of .search-input is 80.
const start = Math.max(0, position - 20);
const end = Math.min(content.length, position + 80);
slicesOfContent.push(this.mergeIntoSlice(start, end, indexOfContent));
}
// Sort slices in content by included keywords' count and hits' count
slicesOfContent.sort((left, right) => {
if (left.count !== right.count) {
return right.count - left.count;
} else if (left.hits.length !== right.hits.length) {
return right.hits.length - left.hits.length;
}
return left.start - right.start;
});
// Select top N slices in content
const upperBound = parseInt(this.top_n_per_article, 10);
if (upperBound >= 0) {
slicesOfContent = slicesOfContent.slice(0, upperBound);
}
let resultItem = '';
url = new URL(url, location.origin);
url.searchParams.append('highlight', keywords.join(' '));
if (slicesOfTitle.length !== 0) {
resultItem += `<li><a href="${url.href}" class="search-result-title">${this.highlightKeyword(title, slicesOfTitle[0])}</a>`;
} else {
resultItem += `<li><a href="${url.href}" class="search-result-title">${title}</a>`;
}
slicesOfContent.forEach(slice => {
resultItem += `<a href="${url.href}"><p class="search-result">${this.highlightKeyword(content, slice)}...</p></a>`;
});
resultItem += '</li>';
resultItems.push({
item: resultItem,
id : resultItems.length,
hitCount,
includedCount
});
});
return resultItems;
}
fetchData() {
const isXml = !this.path.endsWith('json');
fetch(this.path)
.then(response => response.text())
.then(res => {
// Get the contents from search data
this.isfetched = true;
this.datas = isXml ? [...new DOMParser().parseFromString(res, 'text/xml').querySelectorAll('entry')].map(element => ({
title : element.querySelector('title').textContent,
content: element.querySelector('content').textContent,
url : element.querySelector('url').textContent
})) : JSON.parse(res);
// Only match articles with non-empty titles
this.datas = this.datas.filter(data => data.title).map(data => {
data.title = data.title.trim();
data.content = data.content ? data.content.trim().replace(/<[^>]+>/g, '') : '';
data.url = decodeURIComponent(data.url).replace(/\/{2,}/g, '/');
return data;
});
// Remove loading animation
window.dispatchEvent(new Event('search:loaded'));
});
}
// Highlight by wrapping node in mark elements with the given class name
highlightText(node, slice, className) {
const val = node.nodeValue;
let index = slice.start;
const children = [];
for (const { position, length } of slice.hits) {
const text = document.createTextNode(val.substring(index, position));
index = position + length;
const mark = document.createElement('mark');
mark.className = className;
mark.appendChild(document.createTextNode(val.substr(position, length)));
children.push(text, mark);
}
node.nodeValue = val.substring(index, slice.end);
children.forEach(element => {
node.parentNode.insertBefore(element, node);
});
}
// Highlight the search words provided in the url in the text
highlightSearchWords(body) {
const params = new URL(location.href).searchParams.get('highlight');
const keywords = params ? params.split(' ') : [];
if (!keywords.length || !body) return;
const walk = document.createTreeWalker(body, NodeFilter.SHOW_TEXT, null);
const allNodes = [];
while (walk.nextNode()) {
if (!walk.currentNode.parentNode.matches('button, select, textarea')) allNodes.push(walk.currentNode);
}
allNodes.forEach(node => {
const [indexOfNode] = this.getIndexByWord(keywords, node.nodeValue);
if (!indexOfNode.length) return;
const slice = this.mergeIntoSlice(0, node.nodeValue.length, indexOfNode);
this.highlightText(node, slice, 'search-keyword');
});
}
}
document.addEventListener('DOMContentLoaded', () => {
if (! NexT.CONFIG.localSearch.path) {
// Search DB path
console.warn('`search indexes file` is not configurate!');
return;
}
const localSearch = new LocalSearch({
path : NexT.CONFIG.localSearch.path,
top_n_per_article: NexT.CONFIG.localSearch.topnperarticle,
unescape : NexT.CONFIG.localSearch.unescape
});
const input = document.querySelector('.search-input');
const inputEventFunction = () => {
if (!localSearch.isfetched) return;
const searchText = input.value.trim().toLowerCase();
const keywords = searchText.split(/[-\s]+/);
const container = document.querySelector('.search-result-container');
let resultItems = [];
if (searchText.length > 0) {
// Perform local searching
resultItems = localSearch.getResultItems(keywords);
}
if (keywords.length === 1 && keywords[0] === '') {
container.classList.add('no-result');
container.innerHTML = '<div class="search-result-icon"><i class="fa fa-search fa-5x"></i></div>';
} else if (resultItems.length === 0) {
container.classList.add('no-result');
container.innerHTML = '<div class="search-result-icon"><i class="far fa-frown fa-5x"></i></div>';
} else {
resultItems.sort((left, right) => {
if (left.includedCount !== right.includedCount) {
return right.includedCount - left.includedCount;
} else if (left.hitCount !== right.hitCount) {
return right.hitCount - left.hitCount;
}
return right.id - left.id;
});
const stats = NexT.CONFIG.i18n.hits.replace('${hits}', resultItems.length);
container.classList.remove('no-result');
container.innerHTML = `<div class="search-stats">${stats}</div>
<hr>
<ul class="search-result-list">${resultItems.map(result => result.item).join('')}</ul>`;
if (typeof pjax === 'object') pjax.refresh(container);
}
};
localSearch.highlightSearchWords(document.querySelector('.post-body'));
if (NexT.CONFIG.localSearch.preload) {
localSearch.fetchData();
}
if (NexT.CONFIG.localSearch.trigger === 'auto') {
input.addEventListener('input', inputEventFunction);
} else {
document.querySelector('.search-icon').addEventListener('click', inputEventFunction);
input.addEventListener('keypress', event => {
if (event.key === 'Enter') {
inputEventFunction();
}
});
}
window.addEventListener('search:loaded', inputEventFunction);
// Handle and trigger popup window
document.querySelectorAll('.popup-trigger').forEach(element => {
element.addEventListener('click', () => {
document.body.classList.add('search-active');
// Wait for search-popup animation to complete
setTimeout(() => input.focus(), 500);
if (!localSearch.isfetched) localSearch.fetchData();
});
});
// Monitor main search box
const onPopupClose = () => {
document.body.classList.remove('search-active');
};
document.querySelector('.search-pop-overlay').addEventListener('click', event => {
if (event.target === document.querySelector('.search-pop-overlay')) {
onPopupClose();
}
});
document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose);
document.addEventListener('pjax:success', () => {
localSearch.highlightSearchWords(document.querySelector('.post-body'));
onPopupClose();
});
window.addEventListener('keyup', event => {
if (event.key === 'Escape') {
onPopupClose();
}
});
});

View File

@@ -23,6 +23,216 @@ HTMLElement.prototype.wrap = function(wrapper) {
NexT.utils = { NexT.utils = {
regSwitchThemeBtn: function() {
const switchThemeBtn = document.getElementById('switch-theme');
if (!switchThemeBtn) return;
switchThemeBtn.addEventListener('click', () => {
const colorTheme = document.documentElement.getAttribute('data-theme');
NexT.utils.toggleDarkMode(!(colorTheme == 'dark'));
});
},
activeThemeMode: function() {
const useDark = window.matchMedia("(prefers-color-scheme: dark)");
let darkModeState = useDark.matches;
const localState = NexT.utils.getLocalStorage('theme');
if (localState == 'light') {
darkModeState = false;
}
NexT.utils.toggleDarkMode(darkModeState);
useDark.addListener(function(evt) {
toggleDarkMode(evt.matches);
});
},
toggleDarkMode: function(state) {
if(state) {
document.documentElement.setAttribute('data-theme', 'dark');
NexT.utils.setLocalStorage('theme', 'dark', 2);
} else {
document.documentElement.setAttribute('data-theme', 'light');
NexT.utils.setLocalStorage('theme', 'light', 2);
}
const theme = state ? 'dark' : 'light';
NexT.utils.toggleGiscusDarkMode(theme);
},
toggleGiscusDarkMode: function(theme) {
const iframe = document.querySelector('iframe.giscus-frame');
if (iframe) {
const config = { setConfig: { theme: theme } };
iframe.contentWindow.postMessage({ giscus: config }, 'https://giscus.app');
}
},
setLocalStorage: function(key, value, ttl) {
if (ttl === 0) return;
const now = new Date();
const expiryDay = ttl * 86400000;
const item = {
value: value,
expiry: now.getTime() + expiryDay
};
localStorage.setItem(key, JSON.stringify(item));
},
getLocalStorage: function(key) {
const itemStr = localStorage.getItem(key);
if (!itemStr) {
return undefined;
}
const item = JSON.parse(itemStr);
const now = new Date();
if (now.getTime() > item.expiry) {
localStorage.removeItem(key);
return undefined;
}
return item.value;
},
domAddClass: function(selector, cls) {
const doms = document.querySelectorAll(selector);
if (doms) {
doms.forEach(dom => {
dom.classList.add(cls);
});
}
},
calSiteInfo: function() {
const runtimeCount = document.getElementById('runTimes');
if (runtimeCount) {
const publishDate = runtimeCount.getAttribute('data-publishDate');
const runTimes = NexT.utils.diffDate(publishDate, 2);
runtimeCount.innerText = runTimes;
}
const wordsCount = document.getElementById('wordsCount');
if (wordsCount) {
const words = wordsCount.getAttribute('data-count');
wordsCount.innerText = NexT.utils.numberFormat(words);
}
const readTimes = document.getElementById('readTimes');
if (readTimes) {
const times = readTimes.getAttribute('data-times');
const hour = 60;
const day = hour * 24;
const daysCount = parseInt(times / day);
const hoursCount = parseInt(times / hour);
let timesLabel;
if (daysCount >= 1) {
timesLabel = daysCount + NexT.CONFIG.i18n.ds_days + parseInt((times - daysCount * day)/hour) + NexT.CONFIG.i18n.ds_hours;
} else if (hoursCount >= 1) {
timesLabel = hoursCount + NexT.CONFIG.i18n.ds_hours + (times - hoursCount * hour) + NexT.CONFIG.i18n.ds_mins;
} else {
timesLabel = times + NexT.CONFIG.i18n.ds_mins;
}
readTimes.innerText = timesLabel;
}
const lastPushDate = document.getElementById('last-push-date');
if (lastPushDate) {
const pushDateVal = NexT.utils.diffDate(lastPushDate.getAttribute('data-lastPushDate'), 1);
lastPushDate.innerText = pushDateVal;
}
const statisWidget = document.querySelectorAll('#la-siteinfo-widget span');
if (statisWidget.length > 0) {
const valIds = [0,2,4,6];
const domIds = ['today_site_pv', 'yesterday_site_pv', 'month_site_pv', 'total_site_pv']
for (var i in valIds) {
let pv = NexT.utils.numberFormat(statisWidget[valIds[i]].innerText);
document.getElementById(domIds[i]).innerText = pv;
}
}
setTimeout(()=>{ NexT.utils.fmtBusuanzi(); }, 500);
},
fmtBusuanzi: function() {
const bszUV = document.getElementById('busuanzi_value_site_uv');
if (bszUV) {
bszUV.innerText = NexT.utils.numberFormat(bszUV.innerText);
}
const bszPV = document.getElementById('busuanzi_value_site_pv');
if (bszPV) {
bszPV.innerText = NexT.utils.numberFormat(bszPV.innerText);
}
},
numberFormat: function(number) {
let result;
if (number.indexOf(',') > 0) {
number = number.replaceAll(",", "");
}
if (number > 10000) {
result = (number / 10000.0).toFixed(2) + ' w';
} else if (number > 1000) {
result = (number / 1000.0).toFixed(2) + ' k';
} else {
result = number;
}
return result;
},
diffDate: function(date, mode = 0) {
const dateNow = new Date();
const datePost = new Date(date);
const dateDiff = dateNow.getTime() - datePost.getTime();
const minute = 1000 * 60;
const hour = minute * 60;
const day = hour * 24;
const month = day * 30;
const year = month * 12;
let result;
if (mode == 1) {
const monthCount = dateDiff / month;
const dayCount = dateDiff / day;
const hourCount = dateDiff / hour;
const minuteCount = dateDiff / minute;
if (monthCount > 12) {
result = datePost.toLocaleDateString().replace(/\//g, '-');
} else if (monthCount >= 1) {
result = parseInt(monthCount) + NexT.CONFIG.i18n.ds_month;
} else if (dayCount >= 1) {
result = parseInt(dayCount) + NexT.CONFIG.i18n.ds_day;
} else if (hourCount >= 1) {
result = parseInt(hourCount) + NexT.CONFIG.i18n.ds_hour;
} else if (minuteCount >= 1) {
result = parseInt(minuteCount) + NexT.CONFIG.i18n.ds_min;
} else {
result = NexT.CONFIG.i18n.ds_just;
}
} else if (mode == 2) {
const yearCount = parseInt(dateDiff / year);
if (yearCount >= 1) {
const dayCount = parseInt((dateDiff - (yearCount * year))/day);
result = yearCount + NexT.CONFIG.i18n.ds_years + dayCount + NexT.CONFIG.i18n.ds_days;
} else {
const dayCount = parseInt(dateDiff/day);
result = dayCount + NexT.CONFIG.i18n.ds_days;
}
} else {
result = parseInt(dateDiff / day);
}
return result;
},
checkDOMExist: function(selector) { checkDOMExist: function(selector) {
return document.querySelector(selector) != null; return document.querySelector(selector) != null;
}, },
@@ -148,8 +358,10 @@ NexT.utils = {
const contentHeight = document.body.scrollHeight - window.innerHeight; const contentHeight = document.body.scrollHeight - window.innerHeight;
const scrollPercent = contentHeight > 0 ? Math.min(100 * window.scrollY / contentHeight, 100) : 0; const scrollPercent = contentHeight > 0 ? Math.min(100 * window.scrollY / contentHeight, 100) : 0;
if (backToTop) { if (backToTop) {
backToTop.classList.toggle('back-to-top-on', Math.round(scrollPercent) >= 5); const scrollPercentRound = Math.round(scrollPercent)
backToTop.querySelector('span').innerText = Math.round(scrollPercent) + '%'; const isShow = scrollPercentRound >= 5;
backToTop.classList.toggle('back-to-top-on', isShow);
backToTop.querySelector('span').innerText = scrollPercentRound + '%';
} }
if (readingProgressBar) { if (readingProgressBar) {
readingProgressBar.style.setProperty('--progress', scrollPercent.toFixed(2) + '%'); readingProgressBar.style.setProperty('--progress', scrollPercent.toFixed(2) + '%');

View File

@@ -1,4 +1,3 @@
# Hugo NexT theme's custom config # Hugo NexT theme's custom config
#
version: 4.1.0 version: 4.3.0

View File

@@ -10,10 +10,6 @@ js:
- name: animejs - name: animejs
version: 3.2.1 version: 3.2.1
file: lib/anime.min.js file: lib/anime.min.js
# TODO
#- name: mathjax
# version: 3.2.0
# file: es5/tex-mml-chtml.js
# CSS 资源 # CSS 资源
# CSS Resources # CSS Resources
@@ -33,23 +29,27 @@ css:
# Site analytics engine # Site analytics engine
analytics: analytics:
la: https://sdk.51.la/js-sdk-pro.min.js la: https://sdk.51.la/js-sdk-pro.min.js
laWidget: https://v6-widget.51.la/v6/laId/quote.js?theme=0&col=true&f=12&display=0,0,0,1,0,1,1,1
baidu: https://hm.baidu.com/hm.js?
google: https://www.googletagmanager.com/gtag/js?id=
busuanzi: https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js
# 文章分享 # 文章分享
# Share # Share
addthis: addthis:
js: https://s7.addthis.com/js/300/addthis_widget.js js: https://s7.addthis.com/js/300/addthis_widget.js
# 评论组件资源 # 评论组件
# Comment component Resources # Comment component
waline: waline:
js: js:
name: '@waline/client' name: '@waline/client'
version: 2.6.1 version: 2.6.3
file: dist/waline.js file: dist/waline.js
alias: waline alias: waline
css: css:
name: '@waline/client' name: '@waline/client'
version: 2.6.1 version: 2.6.3
file: dist/waline.css file: dist/waline.css
alias: waline alias: waline
@@ -71,3 +71,43 @@ utterances:
livere: livere:
js: https://cdn-city.livere.com/js/embed.dist.js js: https://cdn-city.livere.com/js/embed.dist.js
# 全文搜索
# Full text search
algolia:
name: algoliasearch
version: 4.13.0
file: dist/algoliasearch-lite.umd.js
instant:
name: instantsearch.js
version: 4.40.5
file: dist/instantsearch.production.min.js
plugins:
# 数学公式渲染
mathjax:
js:
- name: mathjax
version: 3.2.0
file: es5/tex-mml-chtml.js
katex:
js:
- name: katex
version: 0.16.0
file: dist/katex.min.js
- name: auto-render
alias2: katex
version: 0.16.0
file: dist/contrib/auto-render.min.js
css:
- name: katex
version: 0.16.0
file: dist/katex.min.css
# 画图渲染
mermaid:
js:
- name: mermaid
version: 9.1.7
file: dist/mermaid.min.js

View File

@@ -39,21 +39,68 @@ markup:
renderer: renderer:
unsafe: true unsafe: true
highlight: highlight:
# codeFences: true
# lineNos: true
# lineNumbersInTable: true
# noClasses: true
# # 高亮代码的样式名称可选monokai | emacs | api | dracula | friendly
# # 更多的样式https://xyproto.github.io/splash/docs/all.html
# # Highlight style: monokai | emacs | api | dracula | friendly
# # More: https://xyproto.github.io/splash/docs/all.html
# style: "monokai"
anchorLineNos: true
codeFences: true codeFences: true
lineNos: true guessSyntax: true
lineNumbersInTable: true hl_Lines: ""
hl_inline: false
lineAnchors: ""
lineNoStart: 1
lineNos: false
lineNumbersInTable: false
noClasses: true noClasses: true
# 高亮代码的样式名称可选monokai | emacs | api | dracula | friendly noHl: false
# 更多的样式https://xyproto.github.io/splash/docs/all.html style: monokai
# Highlight style: monokai | emacs | api | dracula | friendly tabWidth: 2
# More: https://xyproto.github.io/splash/docs/all.html
style: "monokai" # 站点文章导航文件
tableOfContents: # Site map of all articles
# 开始/结束标题级别1-6 sitemap:
# Heading title level of start or end: 1-6 filename: "sitemap.xml"
startLevel: 1 changefreq: "weekly"
endLevel: 3 priority: 0.5
ordered: false
outputFormats:
RSS:
baseName: "rss"
# 自定义生成本地搜索文件
# Custom file of indexes for local search
LocalIndexes:
mediaType: application/xml
baseName: searchindexes
isPlainText: true
notAlternative: true
# 生成 Algolia 索引文件
# Build indexes of Aloglia
AlgoliaIndexes:
mediaType: application/json
baseName: algolia
isPlainText: true
notAlternative: true
# 默认使用本地搜索,如切换到 Algolia 搜索引擎,
# 请将下面的 LocalIndexes 替换成 AlgoliaIndexes
# By default use local search, before switch to Algolia engine
# Please replace LocalIndexes with AlgoliaIndexes
outputs:
home: ["HTML", "RSS", "LocalIndexes"]
# 输出 robots 文件支持爬虫扫描
# Enable robots with support crawler scan
enableRobotsTXT: true
# 强制输出时压缩文件
# Compress all files when output
minify:
#-------------------------------------- #--------------------------------------
# 菜单配置说明 # 菜单配置说明
@@ -84,16 +131,21 @@ menus:
pageref: /about.html pageref: /about.html
pre: user pre: user
weight: 2 weight: 2
- identifier: flinks
name: 站点示例
pageref: /flinks.html
pre: thumbs-up
weight: 3
- identifier: archives - identifier: archives
name: 归档 name: 归档
pageref: /archives pageref: /archives
pre: archive pre: archive
weight: 3 weight: 4
- identifier: commonweal - identifier: commonweal
name: 公益 404 name: 公益 404
url: /404.html url: /404.html
pre: heartbeat pre: heartbeat
weight: 4 weight: 5
#----------------------------------------- #-----------------------------------------
# Hugo NexT 主题参数配置 # Hugo NexT 主题参数配置
@@ -142,6 +194,13 @@ params:
# Custom Logo (Warning: Only support scheme Mist) # Custom Logo (Warning: Only support scheme Mist)
customLogo: #/imgs/hugo_next_logo.png customLogo: #/imgs/hugo_next_logo.png
# 用户自定义文件配置
# Define custom file paths.
# customFilePath:
# sidebar: custom_sidebar.html
# footer: custom_footer.html
# style: /css/custom_style.css
# 知识共享国际许可 4.0 # 知识共享国际许可 4.0
# 更多信息: https://creativecommons.org/about/cclicenses/ # 更多信息: https://creativecommons.org/about/cclicenses/
# Creative Commons 4.0 International License. # Creative Commons 4.0 International License.
@@ -231,10 +290,18 @@ params:
# 开启头像随鼠标转动动画 # 开启头像随鼠标转动动画
# If true, the avatar will be rotated with the cursor. # If true, the avatar will be rotated with the cursor.
rotated: true rotated: true
siteState:
# 是否在侧边栏显示文章、分类、标签信息 # 是否在侧边栏显示文章、分类、标签信息
# Posts / Categories / Tags in sidebar. # Posts / Categories / Tags in sidebar.
siteState: true basic: true
# 站点访问信息
# Site information
statistic:
enable: true
# 组件类型,可选值为: 51la, busuanzi
# 使用51la时需要注册账号https://invite.51.la/1NUfGTS1?target=V6
# Plguin value is: 51la, busuzazi
plugin: busuanzi
# 社交链接地址 # 社交链接地址
# 用法: `Key: 名称 || 链接地址 || 图标` # 用法: `Key: 名称 || 链接地址 || 图标`
@@ -316,6 +383,9 @@ params:
# Footer Settings # Footer Settings
# --------------------------------------------------------------- # ---------------------------------------------------------------
footer: footer:
# 启动谷歌翻译功能
# Enable google translate in footer
translate: true
# 站点开始年份,默认为当下时间的年份 # 站点开始年份,默认为当下时间的年份
# Specify the year when the site was setup. # Specify the year when the site was setup.
# If not defined, current year will be used. # If not defined, current year will be used.
@@ -652,27 +722,11 @@ params:
# Third Party Plugins & Services Settings # Third Party Plugins & Services Settings
# --------------------------------------------------------------- # ---------------------------------------------------------------
# TODO # 数学公式渲染支持,可选值: mathjax, katex
# 数学公式渲染支持(暂时未实现) # 注意这里全局配置,意味着所有页面都会加载数学公式脚本
# Math Formulas Render Support # Math Formulas Render Support, options: mathjax, katex
# Warning: Please install / uninstall the relevant renderer according to the documentation. # Warning: It's global settings then will load scripts in every page.
# See: https://theme-next.js.org/docs/third-party-services/math-equations #math: mathjax
# 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
# TODO # TODO
# FancyBox is a tool that offers a nice and elegant way # FancyBox is a tool that offers a nice and elegant way
@@ -721,7 +775,7 @@ params:
comments: comments:
# 开启评论组件 # 开启评论组件
# If true, will show comment component in post end. # If true, will show comment component in post end.
enable: true enable: false
# 设置默认使用的评论插件 # 设置默认使用的评论插件
# 可选值livere | waline | utterances | artalk | giscus # 可选值livere | waline | utterances | artalk | giscus
# Choose a comment system to be displayed by default. # Choose a comment system to be displayed by default.
@@ -862,23 +916,24 @@ params:
# 更多信息请参考https://invite.51.la/1NUfGTS1?target=V6 # 更多信息请参考https://invite.51.la/1NUfGTS1?target=V6
# 51La Analytics # 51La Analytics
# See: https://invite.51.la/1NUfGTS1?target=V6 # See: https://invite.51.la/1NUfGTS1?target=V6
laId: #<anaytics_id> #laId: #<anaytics_id>
# 百度统计
# TODO # Baidu Analytics
# Show Views / Visitors of the website / page with busuanzi. #baidu: #<anaytics_id>
# For more information: http://ibruce.info/2015/04/04/busuanzi/ # 谷歌统计
busuanzi: # Google Analytics
visitors: false #google: #<anaytics_id>
visitorsIcon: fa fa-user # 不蒜子统计
views: false # Show Views / Visitors of the website / page with busuanzi.
viewsIcon: fa fa-eye # For more information: http://ibruce.info/2015/04/04/busuanzi/
postViews: false busuanzi:
postViewsIcon: far fa-eye visitorsIcon: fa fa-user
viewsIcon: fa fa-eye
postViews: true
# --------------------------------------------------------------- # ---------------------------------------------------------------
# TODO # 内容搜索服务
# 内容搜索服务(暂时未实现)
# Search Services # Search Services
# --------------------------------------------------------------- # ---------------------------------------------------------------
@@ -886,19 +941,32 @@ params:
# For more information: https://www.algolia.com # For more information: https://www.algolia.com
algoliaSearch: algoliaSearch:
enable: false enable: false
appId: #<algolia app id>
apiKey: #<algolia api key>
indexName: #<algolia index name>
hits: hits:
perPage: 10 perPage: 10
# 本地搜索
# Local Search # Local Search
localSearch: localSearch:
# 是否开启搜索功能
# Enable search function
enable: true enable: true
# 搜索索引文件路径
# Indexes file path for search
path: /searchindexes.xml
# 是立即搜索当输入关键字时,可选值: auto | manual
# If auto, trigger search by changing input. # If auto, trigger search by changing input.
# If manual, trigger search by pressing enter key or search button. # If manual, trigger search by pressing enter key or search button.
trigger: auto trigger: auto
# 显示头部的搜索记录,-1 表示显示所有搜索结果
# Show top n results per article, show all results by setting to -1 # Show top n results per article, show all results by setting to -1
top_n_per_article: 1 topNPerArticle: -1
# 将 html 字符串转换为可读字符串
# Unescape html strings to the readable one. # Unescape html strings to the readable one.
unescape: false unescape: false
# 页面加载时是否要重新载入索引文件
# Preload the search data when the page loads. # Preload the search data when the page loads.
preload: false preload: false

View File

@@ -0,0 +1,27 @@
---
title: "关于 Hugo NexT 组织"
description: "Hugo NexT 组织介绍说明。"
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` 经典的黑白调搭配,保持简单的易用性及强大的功能。
# 使用反馈
- 加入 [GitHub Discussions](https://github.com/hugo-next/hugo-theme-next/discussions) 或 [Gitter](https://gitter.im/hugo-next/community) 在线讨论 :beers:
- [GitHub Issues](https://github.com/hugo-next/hugo-theme-next/issues/new?labels=Bug&template=bug-report.md) 提交错误报告 :bug:
- [GitHub Feature](https://github.com/hugo-next/hugo-theme-next/issues/new?labels=Feature+Request&template=feature-request.md) 表新功能的想法 :sparkles:
> 同时国内用户也可加入 QQ 群交流: 604710815

View File

@@ -0,0 +1,14 @@
---
title: "站点示例"
type: flinks
url: flinks.html
---
如想交换本站友情链接,请在评论区留下你的站点信息,格式参考如下:
```yaml
- name: Hugo-NexT
desc: Hugo NexT 官方预览网站。
avatar: https://hugo-next.eu.org/imgs/hugo_next_avatar.png
link: https://hugo-next.eu.org
```

View File

@@ -0,0 +1,82 @@
---
title: "支持用户自定义设计"
description: "用户可以通过自定义文件配置,实现对站点的样式和布局进行个性化的调整。"
keywords: "custom,files,layout"
date: 2022-09-10T21:02:32+08:00
lastmod: 2022-09-10T21:02:32+08:00
categories:
- 示例
tags:
- 自定义
- 个性化
- 布局
url: "post/custom-files.html"
toc: true
---
对于熟悉前端开发的用户来说可以通过自定义文件配置实现对站点的样式和布局进行个性化的调整。其中布局方面主要是支持左侧边栏的站点概览部分以及站点底部2个位置但样式的重置可以是整个站点的任意位置。
<!--more-->
## 打开配置参数
首先要明确在配置文件的 `params` 区域中有配置如下参数:
```yaml
customFilePath:
sidebar: custom_sidebar.html
footer: custom_footer.html
style: /css/custom_style.css
```
{{< note warning >}}
**注意:** `sidebar``footer` 的文件命名不可以与它们的参数名称相同,不然会影响系统默认的布局设计,切记!!! :smile:
{{< /note >}}
然后在站点的根目录下创建 `layouts/partials` 2个目录用于存放自定布局设计文件另外在站点根目录下创建 `statics/css` 2个目录用于存放自定义 CSS 样式文件。一切就绪后,就可以参考如下的步骤,完成自己的设计想法。
## 侧边栏设计
在前面创建 `partials` 目录中新一个后缀名为 `html` 的文件,可以在里面书写你所想表达的设计或内容,比如引入一些第三方组件内容。示例如下:
```html
<div class="mydefined animated" itemprop="custom">
<span>支持自定义CSS和Sidebar布局啦💄💄💄</span>
</div>
```
再把该文件的路径配置到相应的参数中,效果请查看左侧边栏底部的效果。
## 底部设计
在前面创建 `partials` 目录中新一个后缀名为 `html` 的文件,可以在里面书写你所想表达的设计或内容,比如引入一些第三方组件内容。示例如下:
```html
<div class="custom-footer">
Website source code <a href="https://github.com/hugo-next/hugo-theme-next/tree/develop/exampleSite/layouts/partials/custom-footer.html" target="_blank">here</a>
</div>
```
再把该文件的路径配置到相应的参数中,效果请查看站点底部的效果。
## 自定义样式
在前面创建 `css` 目录中新一个后缀名为 `css` 的文件,然后可以在里面把站点的样式进行重定义,或是增加一些自己定义的样式设计,在写文章时进行引用,示例如下:
```html
.custom-head5 {
font-size: 1.2em;
color: #ed6c24;
font-weight: bold;
}
```
再把该文件的路径配置到相应的参数中,效果参考如下:
<span class="custom-head5">我是自定义的标题样式效果!!!</span>

View File

@@ -12,7 +12,6 @@ tags:
- 表情 - 表情
- emoji - emoji
toc: false
url: "post/emoji-support.html" url: "post/emoji-support.html"
--- ---

View File

@@ -25,11 +25,11 @@ weight: 1
# 用户指南 ## 用户指南
设置 NexT 主题很容易。只需遵循文档,就可快速创建您的个人网站! 设置 NexT 主题很容易。只需遵循文档,就可快速创建您的个人网站!
# 反馈 ## 反馈
- 访问 Awesome NexT 列表,与其他用户分享插件和教程。 - 访问 Awesome NexT 列表,与其他用户分享插件和教程。
- 加入我们的 Gitter 聊天。 - 加入我们的 Gitter 聊天。

View File

@@ -12,6 +12,7 @@ tags:
- 开始 - 开始
url: post/hello-world.html url: post/hello-world.html
toc: true
weight: 2 weight: 2
--- ---

View File

@@ -0,0 +1,227 @@
---
title: "数学公式渲染"
description: "主题支持mathjs和katex两种不同插件的数学公式渲染方案。"
keywords: "math,formula"
date: 2022-09-11T10:16:02+08:00
lastmod: 2022-09-11T10:16:02+08:00
categories:
- 示例
tags:
- 数学公式
- mathjax
- katex
url: "post/math-formula.html"
math: mathjax
---
本主题支持 `mathjax``katex` 两种不的方案支持数学公式的渲染,可根据自已的需求进行选择。
<!--more-->
接下的示例中,将使用 [MathJax](https://www.mathjax.org/) 方案来展示渲染效果。
{{< note info >}}
- 使用 `hugo new` 命令创建一篇新的文章
- 可以全局启用数据公式渲染,请在项目配置参数 `math: katex``math: mathjax`
- 或是将该参数配置到需要显示数学公式的页面头部(减少不必要的加载消耗)
{{< /note >}}
**注意:** 使用[支持的TeX功能](https://docs.mathjax.org/en/latest/input/tex/index.html)的联机参考资料。
### 例子
## 重复的分数
$$
\frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} \equiv 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } }
$$
## 总和记号
$$
\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)
$$
## 几何级数之和
我把接下来的两个例子分成了几行,这样它在手机上表现得更好。这就是为什么它们包含 `\displaystyle`
$$
\displaystyle\sum_{i=1}^{k+1}i
$$
$$
\displaystyle= \left(\sum_{i=1}^{k}i\right) +(k+1)
$$
$$
\displaystyle= \frac{k(k+1)}{2}+k+1
$$
$$
\displaystyle= \frac{k(k+1)+2(k+1)}{2}
$$
$$
\displaystyle= \frac{(k+1)(k+2)}{2}
$$
$$
\displaystyle= \frac{(k+1)((k+1)+1)}{2}
$$
## 乘记号
$$
\displaystyle 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots = \displaystyle \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}, \displaystyle\text{ for }\lvert q\rvert < 1.
$$
## 随文数式
这是一些线性数学: $$ k_{n+1} = n^2 + k_n^2 - k_{n-1} $$ 然后是更多的文本。
## 希腊字母
$$
\Gamma\ \Delta\ \Theta\ \Lambda\ \Xi\ \Pi\ \Sigma\ \Upsilon\ \Phi\ \Psi\ \Omega
\alpha\ \beta\ \gamma\ \delta\ \epsilon\ \zeta\ \eta\ \theta\ \iota\ \kappa\ \lambda\ \mu\ \nu\ \xi \ \omicron\ \pi\ \rho\ \sigma\ \tau\ \upsilon\ \phi\ \chi\ \psi\ \omega\ \varepsilon\ \vartheta\ \varpi\ \varrho\ \varsigma\ \varphi
$$
## 箭头
$$
\gets\ \to\ \leftarrow\ \rightarrow\ \uparrow\ \Uparrow\ \downarrow\ \Downarrow\ \updownarrow\ \Updownarrow
$$
$$
\Leftarrow\ \Rightarrow\ \leftrightarrow\ \Leftrightarrow\ \mapsto\ \hookleftarrow
\leftharpoonup\ \leftharpoondown\ \rightleftharpoons\ \longleftarrow\ \Longleftarrow\ \longrightarrow
$$
$$
\Longrightarrow\ \longleftrightarrow\ \Longleftrightarrow\ \longmapsto\ \hookrightarrow\ \rightharpoonup
$$
$$
\rightharpoondown\ \leadsto\ \nearrow\ \searrow\ \swarrow\ \nwarrow
$$
## 符号
$$
\surd\ \barwedge\ \veebar\ \odot\ \oplus\ \otimes\ \oslash\ \circledcirc\ \boxdot\ \bigtriangleup
$$
$$
\bigtriangledown\ \dagger\ \diamond\ \star\ \triangleleft\ \triangleright\ \angle\ \infty\ \prime\ \triangle
$$
## 微积分学
$$
\int u \frac{dv}{dx}\,dx=uv-\int \frac{du}{dx}v\,dx
$$
$$
f(x) = \int_{-\infty}^\infty \hat f(\xi)\,e^{2 \pi i \xi x}
$$
$$
\oint \vec{F} \cdot d\vec{s}=0
$$
## 洛伦茨方程
$$
\begin{aligned} \dot{x} & = \sigma(y-x) \\\\ \dot{y} & = \rho x - y - xz \\\\ \dot{z} & = -\beta z + xy \end{aligned}
$$
## 交叉乘积
这在KaTeX中是可行的但在这种环境中馏分的分离不是很好。
$$
\mathbf{V}_1 \times \mathbf{V}_2 = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\\\ \frac{\partial X}{\partial u} & \frac{\partial Y}{\partial u} & 0 \\\\ \frac{\partial X}{\partial v} & \frac{\partial Y}{\partial v} & 0 \end{vmatrix}
$$
这里有一个解决方案:使用“mfrac”类(在MathJax情况下没有区别)的额外类使分数更小:
$$
\mathbf{V}_1 \times \mathbf{V}_2 = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\\\ \frac{\partial X}{\partial u} & \frac{\partial Y}{\partial u} & 0 \\\\ \frac{\partial X}{\partial v} & \frac{\partial Y}{\partial v} & 0 \end{vmatrix}
$$
## 强调
$$
\hat{x}\ \vec{x}\ \ddot{x}
$$
## 有弹性的括号
$$
\left(\frac{x^2}{y^3}\right)
$$
## 评估范围
$$
\left.\frac{x^3}{3}\right|_0^1
$$
## 诊断标准
$$
f(n) = \begin{cases} \frac{n}{2}, & \text{if } n\text{ is even} \\\\ 3n+1, & \text{if } n\text{ is odd} \end{cases}
$$
## 麦克斯韦方程组
$$
\begin{aligned} \nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\\\ \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\\\ \nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\\\ \nabla \cdot \vec{\mathbf{B}} & = 0 \end{aligned}
$$
## 统计学
固定词组:
$$
\frac{n!}{k!(n-k)!} = {^n}C_k
{n \choose k}
$$
## 分数在分数
$$
\frac{\frac{1}{x}+\frac{1}{y}}{y-z}
$$
## n次方根
$$
\sqrt[n]{1+x+x^2+x^3+\ldots}
$$
## 矩阵
$$
\begin{pmatrix} a_{11} & a_{12} & a_{13}\\\\ a_{21} & a_{22} & a_{23}\\\\ a_{31} & a_{32} & a_{33} \end{pmatrix}
\begin{bmatrix} 0 & \cdots & 0 \\\\ \vdots & \ddots & \vdots \\\\ 0 & \cdots & 0 \end{bmatrix}
$$
## 标点符号
$$
f(x) = \sqrt{1+x} \quad (x \ge -1)
f(x) \sim x^2 \quad (x\to\infty)
$$
现在用标点符号:
$$
f(x) = \sqrt{1+x}, \quad x \ge -1
f(x) \sim x^2, \quad x\to\infty
$$

View File

@@ -0,0 +1,195 @@
---
title: "Mermaid支持流程图"
description: "mermaid-flow-chart"
keywords: "mermaid,flow,chart"
date: 2022-09-18T20:58:13+08:00
lastmod: 2022-09-18T20:58:13+08:00
categories:
- 示例
tags:
- 流程图
- 时序图
url: "post/mermaid-charts.html"
mermaid: true
toc: true
---
本主题已支持 `Mermaid` 实现以纯文本的方式绘制流程图、序列图、甘特图、状态图、关系图行等等,随着 `Mermaid` 也在逐步发展,后续还会有各种各样的图被引入进来,更多的类型及使用方式可关注其官方网站:[https://mermaid-js.github.io/](https://mermaid-js.github.io/)。
<!--more-->
## 使用说明
{{< note info >}}
- 通过 `hugo new` 命令创建一篇新的文章
- 在文章头部配置 `mermaid: true`
- 使用短代码书写各种类型的图自带2个参数 align对齐 和 bc背景色可参考如下使用示例
{{< /note >}}
## 流程图
```shell
{{</* mermaid align="left" */>}}
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
{{</* /mermaid */>}}
```
{{< mermaid align="left" >}}
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
{{< /mermaid >}}
## 时序图
```shell
{{</* mermaid bc="#eee" */>}}
sequenceDiagram
participant Alice
participant Bob
Alice->>John: Hello John, how are you?
loop Healthcheck
John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts <br/>prevail!
John-->>Alice: Great!
John->>Bob: How about you?
Bob-->>John: Jolly good!
{{</* /mermaid */>}}
```
{{< mermaid bc="#eee" >}}
sequenceDiagram
participant Alice
participant Bob
Alice->>John: Hello John, how are you?
loop Healthcheck
John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts <br/>prevail!
John-->>Alice: Great!
John->>Bob: How about you?
Bob-->>John: Jolly good!
{{< /mermaid >}}
## 类图
```shell
{{</* mermaid */>}}
classDiagram
Class01 <|-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 --> C2 : Where am i?
Class09 --* C3
Class09 --|> Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
Class08 <--> C2: Cool label
{{</* /mermaid */>}}
```
{{< mermaid >}}
classDiagram
Class01 <|-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 --> C2 : Where am i?
Class09 --* C3
Class09 --|> Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
Class08 <--> C2: Cool label
{{< /mermaid >}}
## 甘特图
```shell
{{</* mermaid */>}}
gantt
dateFormat YYYY-MM-DD
title Adding GANTT diagram to mermaid
excludes weekdays 2014-01-10
section A section
Completed task :done, des1, 2014-01-06,2014-01-08
Active task :active, des2, 2014-01-09, 3d
Future task : des3, after des2, 5d
Future task2 : des4, after des3, 5d
{{</* /mermaid */>}}
```
{{< mermaid >}}
gantt
dateFormat YYYY-MM-DD
title Adding GANTT diagram to mermaid
excludes weekdays 2014-01-10
section A section
Completed task :done, des1, 2014-01-06,2014-01-08
Active task :active, des2, 2014-01-09, 3d
Future task : des3, after des2, 5d
Future task2 : des4, after des3, 5d
{{< /mermaid >}}
## 实体关系图
```shell
{{</* mermaid */>}}
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE-ITEM : contains
CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
{{</* /mermaid */>}}
```
{{< mermaid >}}
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE-ITEM : contains
CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
{{< /mermaid >}}
## 用户旅程
```shell
{{</* mermaid */>}}
journey
title My working day
section Go to work
Make tea: 5: Me
Go upstairs: 3: Me
Do work: 1: Me, Cat
section Go home
Go downstairs: 5: Me
Sit down: 5: Me
{{</* /mermaid */>}}
```
{{< mermaid >}}
journey
title My working day
section Go to work
Make tea: 5: Me
Go upstairs: 3: Me
Do work: 1: Me, Cat
section Go home
Go downstairs: 5: Me
Sit down: 5: Me
{{< /mermaid >}}

View File

@@ -0,0 +1,86 @@
---
title: "自定义短语示例"
description: "将常用的块引用、标签卡、按钮等信息设置成短代码,便于快速引用"
keywords: "shortcode,短代码"
date: 2022-08-06T14:41:50+08:00
lastmod: 2022-08-06T14:41:50+08:00
categories:
- 示例
tags:
- 短代码
- 语法
url: "post/shortcodes.html"
---
虽然 `Markdown` 语法已经非常丰富能够满足我们写文章的绝大部分需求,但是为更好的对文章内容进行更友好的排版,为引设计一套自定义的短语,便于在使用时能够快速引用。
<!--more-->
## 块引用
在引用一些经典名言名句时,可以采用此短语,语法参考如下:
```markdown
{{</* quote */>}}
### block quote
写下你想表达的话语!
{{</* /quote */>}}
```
实际效果:
{{< quote >}}
希望是无所谓有,无所谓无的,这正如地上的路。
其实地上本没有路,走的人多了,也便成了路。
**鲁迅**
{{< /quote >}}
## 信息块
支持 `default``info``success``warning``danger` 等五种不同效果的展示,语法参考如下:
```markdown
{{</* note [class] [no-icon] */>}}
书写表达的信息
支持 Markdown 语法
{{</* /note */>}}
```
实际效果:
{{< note default no-icon >}}
### Default Header without icon
**Welcome** to [Hugo NexT!](https://preview.hugo-next.eu.org)
{{< /note >}}
{{< note default >}}
### Default Header
**Welcome** to [Hugo NexT!](https://preview.hugo-next.eu.org)
{{< /note >}}
{{< note info >}}
### Info Header
**Welcome** to [Hugo NexT!](https://preview.hugo-next.eu.org)
{{< /note >}}
{{< note success >}}
### Success Header
**Welcome** to [Hugo NexT!](https://preview.hugo-next.eu.org)
{{< /note >}}
{{< note warning >}}
### Warning Header
**Welcome** to [Hugo NexT!](https://preview.hugo-next.eu.org)
{{< /note >}}
{{< note danger >}}
### Danger Header
**Welcome** to [Hugo NexT!](https://preview.hugo-next.eu.org)
{{< /note >}}

View File

@@ -22,9 +22,9 @@ Hugo 通过 Chroma 提供非常快速的语法高亮显示,现 Hugo 中使用
<!--more--> <!--more-->
# 编程语言 ## 编程语言
## GO ### GO
{{< highlight go "linenos=table,hl_lines=8 15-17,linenostart=199" >}} {{< highlight go "linenos=table,hl_lines=8 15-17,linenostart=199" >}}
@@ -41,7 +41,7 @@ func GetTitleFunc(style string) func(s string) string {
{{< / highlight >}} {{< / highlight >}}
## Java ### Java
```java ```java
import javax.swing.JFrame; //Importing class JFrame import javax.swing.JFrame; //Importing class JFrame
@@ -58,13 +58,13 @@ public class HelloWorld {
} }
``` ```
## Python ### Python
``` python ``` python
print "Hello, world!" print "Hello, world!"
``` ```
## Git 对比 ### Git 对比
``` diff {hl_lines=[4,"6-7"] linenos=true} ``` diff {hl_lines=[4,"6-7"] linenos=true}
*** /path/to/original ''timestamp'' *** /path/to/original ''timestamp''
@@ -92,9 +92,9 @@ It is important to spell
+new line +new line
``` ```
# 文件 ## 文件
## Make 文件 ### Make 文件
``` makefile {linenos=false} ``` makefile {linenos=false}
CC=gcc CC=gcc
@@ -104,7 +104,7 @@ hellomake: hellomake.o hellofunc.o
$(CC) -o hellomake hellomake.o hellofunc.o -I. $(CC) -o hellomake hellomake.o hellofunc.o -I.
``` ```
## Markdown 文档 ### Markdown 文档
``` markdown ``` markdown
**bold** **bold**
@@ -112,9 +112,9 @@ hellomake: hellomake.o hellofunc.o
[link](www.example.com) [link](www.example.com)
``` ```
# 数据内容 ## 数据内容
## JSON 数据 ### JSON 数据
``` json ``` json
{"employees":[ {"employees":[
@@ -122,7 +122,7 @@ hellomake: hellomake.o hellofunc.o
]} ]}
``` ```
## XML 内容 ### XML 内容
``` xml ``` xml
<employees> <employees>
@@ -132,7 +132,7 @@ hellomake: hellomake.o hellofunc.o
</employees> </employees>
``` ```
## SQL 查询 ### SQL 查询
{{< highlight sql >}} {{< highlight sql >}}

View File

@@ -23,38 +23,38 @@ url: post/table-of-content.html
![禇老](https://wfqqreader-1252317822.image.myqcloud.com/cover/568/814568/t6_814568.jpg) ![禇老](https://wfqqreader-1252317822.image.myqcloud.com/cover/568/814568/t6_814568.jpg)
# 早年的故事 ## 早年的故事
## 起始 ### 起始
2014年的春天在云南省华宁县和宜良县的交界处一座名叫矣则的小山村里一处已经有上百年历史的古旧四合院宅子被拆掉。村委会正带领村民们进行“美丽乡村”的建设一年以后旧有村居将再也看不到代之而起的是钢筋混凝土的新式民居。就像10年、20年前中国大小城市的改造一样这个群山围绕的小村子也开始陷入“工地模式”。 2014年的春天在云南省华宁县和宜良县的交界处一座名叫矣则的小山村里一处已经有上百年历史的古旧四合院宅子被拆掉。村委会正带领村民们进行“美丽乡村”的建设一年以后旧有村居将再也看不到代之而起的是钢筋混凝土的新式民居。就像10年、20年前中国大小城市的改造一样这个群山围绕的小村子也开始陷入“工地模式”。
### 童年浪花 #### 童年浪花
在江河边长大的孩子几乎都有一个当仁不让的特长:善水。褚时健也不例外,他不仅从小就在南盘江和花鱼塘里扑腾出了上佳的游泳技术,五六岁已经可以一个猛子扎出老远,而且从七八岁就可以在南盘江和河滩上的鱼塘里捉鱼了。 在江河边长大的孩子几乎都有一个当仁不让的特长:善水。褚时健也不例外,他不仅从小就在南盘江和花鱼塘里扑腾出了上佳的游泳技术,五六岁已经可以一个猛子扎出老远,而且从七八岁就可以在南盘江和河滩上的鱼塘里捉鱼了。
## 少年故事 ### 少年故事
褚时健在乡村自由自在生活的十多年其实正是中国社会风雨飘摇的十多年。特别是1937年卢沟桥事变后日本人发动全面侵华战争短短两三年间中国的大部分国土相继沦陷 褚时健在乡村自由自在生活的十多年其实正是中国社会风雨飘摇的十多年。特别是1937年卢沟桥事变后日本人发动全面侵华战争短短两三年间中国的大部分国土相继沦陷
# 激情的青春十年 ## 激情的青春十年
## 当上了游击队员 ### 当上了游击队员
1948年夏天褚时健回乡在禄丰车站小学做了一名老师同时也和褚时仁、褚时杰一起继续保持与共产党组织的联系做一些传递情报的工作 1948年夏天褚时健回乡在禄丰车站小学做了一名老师同时也和褚时仁、褚时杰一起继续保持与共产党组织的联系做一些传递情报的工作
### 战火纷飞 #### 战火纷飞
因为战斗力相较悬殊,所以游击队只能是靠打一枪换一个地方的办法,专找敌人薄弱的地方攻击,但更多时候,都是在防御和转移阵地。 因为战斗力相较悬殊,所以游击队只能是靠打一枪换一个地方的办法,专找敌人薄弱的地方攻击,但更多时候,都是在防御和转移阵地。
# 生活的断层 ## 生活的断层
## 跌入生活底层 ### 跌入生活底层
“反右”运动中被打倒的人在“右派”身份确定后,只有一条路可走:下放到农场。农场名副其实,就是干农活儿的地方,必须过和农民一样的生活。 “反右”运动中被打倒的人在“右派”身份确定后,只有一条路可走:下放到农场。农场名副其实,就是干农活儿的地方,必须过和农民一样的生活。
# 尾声 ## 尾声
## 岁月像一条河 ### 岁月像一条河
2015年是褚时健和马静芬结婚60周年被称为“钻石婚”的纪念年份。这简直是一份人生的奖赏,在中国离婚率愈益升高的当下60年的婚姻几乎就像一个前世之梦。一个甲子的相伴相随褚时健和马静芬共同经历了国家和个人的各种风浪共同面对过生死。他们两人已经不仅是夫妻更是一对战友。尽管马静芬偶尔会对褚时健年轻时候的粗心抱怨上两句但说到最后她会说一句“没有我就没有他没有他也就没有我。” 2015年是褚时健和马静芬结婚60周年被称为“钻石婚”的纪念年份。这简直是一份人生的奖赏,在中国离婚率愈益升高的当下60年的婚姻几乎就像一个前世之梦。一个甲子的相伴相随褚时健和马静芬共同经历了国家和个人的各种风浪共同面对过生死。他们两人已经不仅是夫妻更是一对战友。尽管马静芬偶尔会对褚时健年轻时候的粗心抱怨上两句但说到最后她会说一句“没有我就没有他没有他也就没有我。”

View File

@@ -0,0 +1,29 @@
# 友情链接
# Friend's links
- FLinksTitle: 官方示例
FLinksDesc: 来自主题官方的示例内容。
FLinksList:
- name: Hugo
desc: 世界上最快的网站建设框架!
avatar: https://gohugo.io/favicon-32x32.png
link: https://gohugo.io
- name: Hugo-NexT
desc: Hugo NexT 官方预览网站。
avatar: https://hugo-next.eu.org/imgs/hugo_next_avatar.png
link: https://hugo-next.eu.org
- name: 凡梦星尘空间站
desc: 再平凡的人也有属于他的梦想!
avatar: https://lisenhui.cn/imgs/avatar.png
link: https://lisenhui.cn
- FLinksTitle: Hugo NexT 粉丝群体
FLinksDesc: 来自 Hugo NexT 主题爱好者们的精彩呈现!
FLinksList:
- name: 阿哈吉
desc: 全网首个 Hugo NexT 忠实粉丝用户
avatar: https://a.happy2008.top/imgs/stayhome-small.png
link: https://a.happy2008.top/

View File

@@ -0,0 +1,3 @@
<div class="custom-footer">
Website source code <a href="https://github.com/hugo-next/hugo-theme-next/blob/develop/exampleSite/layouts/partials/custom_footer.html" target="_blank">here</a>
</div>

View File

@@ -0,0 +1,3 @@
<div class="mydefined animated" itemprop="custom">
<span>支持自定义CSS和Sidebar布局啦💄💄💄</span>
</div>

View File

@@ -20,4 +20,4 @@ EOT
next `cat ../VERSION` next `cat ../VERSION`
hugo server -D -t ../.. --port 1414 --panicOnWarning --config config.dev.yaml hugo server -t ../.. --port 1414 --panicOnWarning --config config.yaml

View File

@@ -0,0 +1,16 @@
/** Custom style defined file **/
.mydefined {
font-size: 0.65em;
color: #ed6c24;
}
.custom-footer {
color: #ed6c24;
}
.custom-head5 {
font-size: 1.2em;
color: #ed6c24;
font-weight: bold;
}

View File

@@ -45,8 +45,6 @@ RSSLable:
other: "RSS Subscribe" other: "RSS Subscribe"
CCLinkTitle: CCLinkTitle:
other: "Creative Commons" other: "Creative Commons"
BackTopLabel:
other: "Top"
TagsCounterTitle: TagsCounterTitle:
zero: No tags zero: No tags
@@ -134,10 +132,44 @@ RewardBitcoin:
PostCommentTitle: PostCommentTitle:
other: Comments other: Comments
VisitorsLabel: SiteInfoItems:
other: Total Visitors title: "Web Status"
PageViewsLabel: runTimes: "Running:"
other: Total Page Views words: "Words:"
readTimes: "ReadTime:"
visitors: "Visitors:"
pageViews: "Views:"
todayViews: "Today Views:"
yesterdayViews: "Yesterday Views:"
monthViews: "Month Views:"
totalViews: "Total Views"
lastUpdate: "Last Update:"
FooterPowerby: FooterPowerby:
other: "Power by %s" other: "Power by %s"
SearchPh:
other: Searching...
SearchEmpty:
other: "We didn't find any results for the search: ${query}"
SearchHits:
hits: "${hits} results found"
SearchHitsTime:
other: "${hits} results found in ${time} ms"
DateSuffix:
years: " Year "
days: " Day "
hours: " Hour "
mins: " Min"
month: " Month Ago"
day: " Day Ago"
hour: " Hour Ago"
min: " Min Ago"
just: "Just"
ToolBtns:
comment: "Go to Comment"
theme: "Change Theme"
lang: "Multilingual translation"
backTop: "Back to Top"

View File

@@ -46,8 +46,6 @@ RSSLable:
other: RSS 订阅 other: RSS 订阅
CCLinkTitle: CCLinkTitle:
other: 共享知识 other: 共享知识
BackTopLabel:
other: 返回顶部
TagsCounterTitle: TagsCounterTitle:
zero: 暂无标签 zero: 暂无标签
@@ -135,10 +133,44 @@ RewardBitcoin:
PostCommentTitle: PostCommentTitle:
other: 评论交流 other: 评论交流
VisitorsLabel: SiteInfoItems:
other: 总访客量 title: "网站资讯"
PageViewsLabel: runTimes: "已运行:"
other: 总访问量 words: "总字数:"
readTimes: "阅读约:"
visitors: "总访客数:"
pageViews: "页面浏览:"
todayViews: "今日访问:"
yesterdayViews: "昨日访问:"
monthViews: "本月访问:"
totalViews: "总访问量:"
lastUpdate: "最后更新于:"
FooterPowerby: FooterPowerby:
other: 由 %s 强力驱动 other: 由 %s 强力驱动
SearchPh:
other: 搜索...
SearchEmpty:
other: "没有找到任何搜索结果:${query}"
SearchHits:
hits: "找到 ${hits} 个搜索结果"
SearchHitsTime:
other: "找到 ${hits} 个搜索结果(用时 ${time} 毫秒)"
DateSuffix:
years: " 年 "
days: " 天 "
hours: " 小时 "
mins: " 分钟"
month: " 个月前"
day: " 天前"
hour: " 小时前"
min: " 分钟前"
just: "刚刚"
ToolBtns:
comment: "直达评论"
theme: "深浅模式切换"
lang: "多语言翻译"
backTop: "返回顶部"

View File

@@ -40,7 +40,7 @@
</div> </div>
</footer> </footer>
{{- partialCached "scripts.html" . }} {{- partial "scripts.html" . }}
</body> </body>
</html> </html>

View File

@@ -0,0 +1,12 @@
[
{{- range $index, $entry := where .Site.RegularPages "Kind" "page" }}
{{- if $index }}, {{ end }}
{
"permalink": "{{ .Permalink | relURL }}",
"title": {{ .Title | jsonify }},
"content": {{ .Plain | jsonify }},
"date": {{ .Date.Format $.Site.Params.timeFormat | jsonify }},
"updated": {{ .Lastmod.Format $.Site.Params.timeFormat | jsonify }}
}
{{- end }}
]

View File

@@ -1,7 +1,2 @@
{{- if and .Page.IsSection (eq .Section "archives") }} {{ $paginator := .Paginator.Pages.GroupByDate "2006" }}
{{- $paginator := (.Paginate (where .Page.Site.RegularPages "Section" "in" .Site.Params.mainSections)).Pages.GroupByDate "2006" }} {{ partial "list.html" $paginator }}
{{ partial "list.html" $paginator }}
{{ else }}
{{- $paginator := .Paginator.Pages.GroupByDate "2006" }}
{{ partial "list.html" $paginator }}
{{- end }}

View File

@@ -0,0 +1,18 @@
{{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>" | safeHTML }}
<search>
{{range where .Site.RegularPages "Kind" "page"}}
<entry>
<title>{{ .Title }}</title>
<url>{{ .RelPermalink | relLangURL }}</url>
<categories>
{{- range .Params.categories }}<category>{{ . }}</category>{{- end }}
</categories>
<tags>
{{- range .Params.tags }}
<tag>{{ . }}</tag>
{{- end }}
</tags>
<content type="html"><![CDATA[{{ .Content | plainify }}]]></content>
</entry>
{{ end }}
</search>

View File

@@ -1,39 +1,15 @@
{{- define "title" }} {{- define "title" }}
{{- .Params.Title | default (T .Section) | default .Section | dict "Some" | T "AllSome" }} - {{ .Site.Title -}} {{- .Params.Title | default (T .Section) | default .Section }} - {{ .Site.Title -}}
{{- end -}} {{- end -}}
{{ define "main_inner_class" }}archive posts-collapse{{ end }} {{ define "main_inner_class" }}index posts-expand{{ end }}
{{- define "main" }} {{- define "main" }}
<div class="post-block">
<div class="post-content">
<div class="collection-title">
{{- $cheers := "Um" }}
{{- $posts := .Scratch.Get "postsCount" }}
{{- if and .Page.IsSection (ne .Section "archives") }}
{{- $posts = .Scratch.Get .Section }}
{{- end }}
{{- 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 }}
<span class="collection-header">
{{- T (printf "PostArchiveCheers%s" $cheers) }}
{{- T "SymbolComma" }}
{{- T "ArchiveCounterTitle" $posts | safeHTML }}
{{- T "SymbolComma" }}
{{- T "PostArchiveKeepOn" }}
</span>
</div>
{{ .Render "list" }} {{ $paginator := .Paginate (where .Site.RegularPages "Section" "==" .Section) }}
{{- range $paginator.Pages }}
</div> {{ partial "post.html" (dict "ctx" . "IsHome" true) }}
</div> {{- end }}
{{- partial "pagination.html" . }}
{{- partial "partials/pagination.html" . }}
{{- end }} {{- end }}

View File

@@ -24,7 +24,7 @@
<ul class="category-list"> <ul class="category-list">
{{- range $name, $items := $cats }} {{- range $name, $items := $cats }}
<li class="category-list-item"> <li class="category-list-item">
<a class="category-list-link" href="{{ "/categories/" | relLangURL }}{{ $name | urlize | lower }}" data-pjax-state="">{{ $name }}</a> <a class="category-list-link" href="{{ "/categories/" | relLangURL }}{{ $name | urlize | lower }}" data-pjax-state="">{{ .Page.Title }}</a>
<span class="category-list-count">{{ len $items }}</span> <span class="category-list-count">{{ len $items }}</span>
</li> </li>
{{- end }} {{- end }}
@@ -41,7 +41,7 @@
<div class="tag-cloud-tags"> <div class="tag-cloud-tags">
{{ $randNums := (seq 10) }} {{ $randNums := (seq 10) }}
{{- range $name, $items := $tags }} {{- range $name, $items := $tags }}
<a class="tag-cloud-{{ index (shuffle $randNums) 0 }}" href="{{ "/tags/" | relLangURL }}{{ $name | urlize | lower }}">{{ $name }} <a class="tag-cloud-{{ index (shuffle $randNums) 0 }}" href="{{ "/tags/" | relLangURL }}{{ $name | urlize | lower }}">{{ .Page.Title }}
<span class="tag-list-count"> <span class="tag-list-count">
<sup>({{ len $items }})</sup> <sup>({{ len $items }})</sup>
</span> </span>

View File

@@ -0,0 +1,2 @@
{{ $paginator := (.Paginate (where .Page.Site.RegularPages "Section" "in" .Site.Params.mainSections)).Pages.GroupByDate "2006" }}
{{ partial "list.html" $paginator }}

View File

@@ -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" }}
<div class="post-block">
<div class="post-content">
<div class="collection-title">
{{- $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 }}
<span class="collection-header">
{{- T (printf "PostArchiveCheers%s" $cheers) }}
{{- T "SymbolComma" }}
{{- T "ArchiveCounterTitle" $posts | safeHTML }}
{{- T "SymbolComma" }}
{{- T "PostArchiveKeepOn" }}
</span>
</div>
{{ .Render "list" }}
</div>
</div>
{{- partial "pagination.html" . }}
{{- end }}

View File

@@ -0,0 +1,34 @@
{{- define "title" }}{{- .Title }} - {{ .Site.Title -}}{{- end }}
{{- define "main_inner_class" }}flinks posts-expand{{- end }}
{{ define "main" }}
<div class="flinks-block">
<h1 class="flinks-block-title">{{ .Title }}</h1>
<div class="flinks-lists">
{{ range .Site.Data.flinks }}
<div class="flinks-list">
<div class="flinks-list-title">{{ .FLinksTitle | safeHTML }}</div>
<div class="flinks-list-desc">{{ .FLinksDesc | safeHTML }}</div>
<div class="flinks-list-items">
{{ range .FLinksList }}
<div class="flinks-list-item">
<a href="{{ .link }}" rel="external nofollow noreferrer" title=" {{ .name }}" target="_blank">
<div class="flinks-item-icon">
<img class="no-lightbox entered loaded" src="{{ .avatar }}" alt="{{ .name }}"/>
</div>
<div class="flinks-item-name">{{ .name | safeHTML }}</div>
<div class="flinks-item-desc" title="{{ .desc }}">{{ .desc | safeHTML }}</div>
</a>
</div>
{{ end }}
</div>
</div>
{{ end }}
</div>
<div class="flinks-list-footer"><hr/></div>
<div class="flinks-page-desc">{{ .Content }}</div>
</div>
{{ end }}

View File

@@ -1,8 +1,11 @@
{{- define "main_inner_class" }}index posts-expand{{- end }} {{- define "main_inner_class" }}index posts-expand{{- end }}
{{- define "main" }} {{- 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 }} {{- range $paginator.Pages }}
{{ partial "post.html" (dict "ctx" . "IsHome" true) }} {{ partial "post.html" (dict "ctx" . "IsHome" true) }}
{{- end }} {{- end }}
{{- partial "partials/pagination.html" . }} {{- partial "partials/pagination.html" . }}
{{- end }} {{- end }}

View File

@@ -0,0 +1,16 @@
{{ $scratch := newScratch }}
{{ $pages := (where .Page.Site.RegularPages "Section" "in" .Site.Params.mainSections).ByLastmod.Reverse }}
{{ range $pages }}
{{ $scratch.Add "totalWords" .WordCount }}
{{ $scratch.Add "totalTimes" .ReadingTime }}
{{ end }}
{{ range first 1 $pages }}
{{ $scratch.Set "first" (time.Format .Site.Params.timeFormat .Date) }}
{{ end }}
{{ range last 1 $pages }}
{{ $scratch.Set "last" (time.Format .Site.Params.timeFormat .Date) }}
{{ end }}
{{ return $scratch }}

View File

@@ -0,0 +1,21 @@
{{/* Use to get resources path with vendor */}}
{{ $fmt := "%s/%s@%s/%s" }}
{{ $npm := .res.name }}
{{ with .res.alias2 }}
{{ $npm = . }}
{{ end }}
{{- $file := .res.file }}
{{- if eq .vendor "cdnjs" }}
{{- with .res.alias }}
{{- $npm = . }}
{{- end }}
{{- $file = replaceRE `(dist|lib|source\/js)\/` "" .res.file }}
{{- $fmt = "%s/%s/%s/%s" }}
{{- end }}
{{ $pluginRes := printf $fmt .router $npm .res.version $file }}
{{ return $pluginRes }}

View File

@@ -12,6 +12,6 @@
{{ end }} {{ end }}
} }
document.head.appendChild(script); document.head.appendChild(script);
}); });
</script> </script>

View File

@@ -0,0 +1,11 @@
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', () => {
var script = document.createElement('script');
script.charset = "UTF-8";
script.src = "{{ .Site.Data.resources.analytics.baidu }}{{ .Site.Params.analytics.baidu }}";
script.async = "true"
document.head.appendChild(script);
});
</script>

View File

@@ -0,0 +1,11 @@
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', () => {
var script = document.createElement('script');
script.charset = "UTF-8";
script.src = "{{ .Site.Data.resources.analytics.busuanzi }}";
script.async = "true"
document.head.appendChild(script);
});
</script>

View File

@@ -0,0 +1,18 @@
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', () => {
var script = document.createElement('script');
script.charset = "UTF-8";
script.src = "{{ .Site.Data.resources.analytics.google }}{{ .Site.Params.analytics.google }}";
script.async = "true"
script.onload = function() {
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '{{ .Site.Params.analytics.google }} ');
}
document.head.appendChild(script);
});
</script>

View File

@@ -0,0 +1,28 @@
<!-- Load math render scripts -->
{{ $math := .Params.math | default .Site.Params.math }}
{{- partial "scripts/plugins.html" (dict "vendor" (.Scratch.Get "vendor") "router" (.Scratch.Get "router") "res" .Site.Data.resources.plugins "index" $math) }}
{{ if eq $math "katex" }}
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: '$$', right: '$$', display: true},
{left: '$', right: '$', display: false},
{left: '\\(', right: '\\)', display: false},
{left: '\\[', right: '\\]', display: true}
],
throwOnError : false
});
});
</script>
{{ end }}
{{ if eq $math "mathjax" }}
<script type="text/javascript">
window.MathJax = {
tex: {
inlineMath: [["$", "$"]],
}
};
</script>
{{ end }}

View File

@@ -0,0 +1,15 @@
{{- partial "scripts/plugins.html" (dict "vendor" (.Scratch.Get "vendor") "router" (.Scratch.Get "router") "res" .Site.Data.resources.plugins "index" "mermaid") }}
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', () => {
mermaid.initialize({
sequence: {
showSequenceNumbers: true,
actorMargin: 50,
diagramMarginX:10,
diagramMarginY:10
}
});
});
</script>

View File

@@ -0,0 +1,14 @@
<div class="search-header">
<span class="search-icon">
<i class="fa fa-search"></i>
</span>
<div class="search-input-container"></div>
<span class="popup-btn-close" role="button">
<i class="fa fa-times-circle"></i>
</span>
</div>
<div class="search-result-container">
<div class="algolia-stats"><hr></div>
<div class="algolia-hits"></div>
<div class="algolia-pagination"></div>
</div>

View File

@@ -0,0 +1,18 @@
<div class="search-header">
<span class="search-icon">
<i class="fa fa-search"></i>
</span>
<div class="search-input-container">
<input autocomplete="off" autocapitalize="off" maxlength="80"
placeholder="{{ T "SearchPh" }}" spellcheck="false"
type="search" class="search-input">
</div>
<span class="popup-btn-close" role="button">
<i class="fa fa-times-circle"></i>
</span>
</div>
<div class="search-result-container no-result">
<div class="search-result-icon">
<i class="fa fa-spinner fa-pulse fa-5x"></i>
</div>
</div>

View File

@@ -5,7 +5,7 @@
{{- $fc := .active }} {{- $fc := .active }}
{{- $sc := "" }} {{- $sc := "" }}
{{- $sn := "" }} {{- $sn := "" }}
<div class="post-comments"> <div id="comments" class="post-comments">
<div class="comment-head"> <div class="comment-head">
<div class="comment-headline"> <div class="comment-headline">
<i class="fas fa-comments fa-fw"></i> <i class="fas fa-comments fa-fw"></i>

View File

@@ -1,4 +1,10 @@
{{- $ft := .Site.Params.footer }} {{- $ft := .Site.Params.footer }}
{{ if $ft.translate }}
<div class="google-translate">
<i class="fa fa-language"></i>
<div id="google_translate_element"></div>
</div>
{{ end }}
<div class="copyright"> <div class="copyright">
&copy; &copy;
<span itemprop="copyrightYear"> <span itemprop="copyrightYear">
@@ -18,36 +24,6 @@
</span> </span>
<span class="author" itemprop="copyrightHolder">{{ $ft.copyright | default .Site.Params.author }}</span> <span class="author" itemprop="copyrightHolder">{{ $ft.copyright | default .Site.Params.author }}</span>
</div> </div>
{{/* TODO
<!--
{{- if config.symbols_count_time.total_symbols or config.symbols_count_time.total_time }}
<div class="wordcount">
{{- if config.symbols_count_time.total_symbols }}
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="fa fa-chart-line"></i>
</span>
{{- if .Site.Params.symbols_count_time.item_text_total }}
<span>{{ __('symbols_count_time.count_total') + __('symbol.colon') }}</span>
{{- end }}
<span title="{{ __('symbols_count_time.count_total') }}">{{ symbolsCountTotal(site) }}</span>
</span>
{{- end }}
{{- if config.symbols_count_time.total_time }}
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="fa fa-coffee"></i>
</span>
{{- if .Site.Params.symbols_count_time.item_text_total }}
<span>{{ __('symbols_count_time.time_total') }} &asymp;</span>
{{- end }}
<span title="{{ __('symbols_count_time.time_total') }}">{{ symbolsTimeTotal(site, config.symbols_count_time.awl, config.symbols_count_time.wpm, __('symbols_count_time.time_minutes')) }}</span>
</span>
{{- end }}
</div>
{{- end }}
-->
*/}}
{{- with .Site.Params.busuanzi }} {{- with .Site.Params.busuanzi }}
{{- if .enable }} {{- if .enable }}
<div class="busuanzi-count"> <div class="busuanzi-count">
@@ -76,7 +52,7 @@
{{- end }} {{- end }}
{{- if $ft.powered }} {{- if $ft.powered }}
<div class="powered-by"> <div class="powered-by">
{{ $pb := printf "<a href='https://gohugo.io' target='_blank'>Hugo</a> &amp; <a href='https://github.com/hugo-next/hugo-theme-next' target='_blank'>Hugo NexT.%s</a>" .Site.Params.scheme }} {{ $pb := printf "<a href='https://gohugo.io' title='%s' target='_blank'>Hugo</a> &amp; <a href='https://github.com/hugo-next/hugo-theme-next' title='%s' target='_blank'>Hugo NexT.%s</a>" hugo.Version .Site.Data.config.version .Site.Params.scheme }}
{{- printf (T "FooterPowerby") $pb | safeHTML }} {{- printf (T "FooterPowerby") $pb | safeHTML }}
</div> </div>
{{- end }} {{- end }}
@@ -105,3 +81,8 @@
</div> </div>
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- $custom := .Scratch.Get "footer" }}
{{- if $custom }}
{{ partialCached $custom . }}
{{- end }}

View File

@@ -3,7 +3,7 @@
{{- partial "head/twitter.html" . }} {{- partial "head/twitter.html" . }}
{{- partial "head/googleplus.html" . }} {{- partial "head/googleplus.html" . }}
{{- partial "head/facebook.html" . }} {{- partial "head/facebook.html" . }}
{{- partial "head/verify.html" . }} {{- partialCached "head/verify.html" . }}
{{- partialCached "head/style.html" . }} {{- partialCached "head/style.html" . }}
{{- partial "head/config.html" . }} {{- partial "head/config.html" . }}
{{- partialCached "head/analytics.html" . }} {{- partialCached "head/analytics.html" . }}

View File

@@ -1,3 +1,12 @@
{{- if isset .Site.Params.analytics "laid" }} {{- if isset .Site.Params.analytics "laid" }}
{{ partial "_thirdparty/analytics/51la.html" . }} {{ partial "_thirdparty/analytics/51la.html" . }}
{{- end }} {{- end }}
{{- if isset .Site.Params.analytics "baidu" }}
{{ partial "_thirdparty/analytics/baidu.html" . }}
{{- end }}
{{- if isset .Site.Params.analytics "google" }}
{{ partial "_thirdparty/analytics/google.html" . }}
{{- end }}
{{- if isset .Site.Params.analytics "busuanzi" }}
{{ partial "_thirdparty/analytics/busuanzi.html" . }}
{{- end }}

View File

@@ -1,19 +0,0 @@
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/animate.css/3.1.1/animate.min.css">
<!-- NexT theme css style -->
{{- $scssVars := resources.Get "css/_sitevars.scss"}}
{{- $scssVars = $scssVars | resources.ExecuteAsTemplate "sitevars.scss" . }}
{{- $scssMain := resources.Get "css/main.scss" }}
{{- $scss := slice $scssVars $scssMain | resources.Concat "css/main.scss" }}
{{- $css := $scss | toCSS (dict "targetPath" "/css/main_new.css" "outputStyle" "expanded") }}
<link rel="stylesheet" href="{{ $css.RelPermalink }}">
{{- $scheme := lower .Site.Params.scheme }}
{{- $styleScheme := (printf "css/%s/style.css" $scheme) }}
<link rel="stylesheet" href="/css/{{ $scheme }}/main.css">
{{- $style := resources.Get $styleScheme | resources.ExecuteAsTemplate $styleScheme . }}
<link rel="stylesheet" href="{{ $style.RelPermalink }}">
<link rel="stylesheet" href="/css/hover.css">

View File

@@ -2,19 +2,10 @@
{{- $cssRes := .Site.Data.resources.css }} {{- $cssRes := .Site.Data.resources.css }}
{{- $vendor := .Site.Params.vendors.plugins }} {{- $vendor := .Site.Params.vendors.plugins }}
{{- $router := .Scratch.Get "router" }} {{- $router := .Scratch.Get "router" }}
{{ $cssFmt := "%s/%s@%s/%s" }}
{{- range $css := $cssRes }} {{- range $css := $cssRes }}
{{- $npm := $css.name }} {{ $pluginCss := partial "_funs/get_res.html" (dict "res" . "vendor" $vendor "router" $router) }}
{{- $file := $css.file }} <link type="text/css" rel="stylesheet" href="{{ $pluginCss }}" />
{{- if eq $vendor "cdnjs" }}
{{- with $css.alias }}
{{- $npm = . }}
{{- end }}
{{- $file = replaceRE `(dist|lib|source\/js)\/` "" $css.file }}
{{- $cssFmt = "%s/%s/%s/%s" }}
{{- end }}
{{- $pluginCSS := printf $cssFmt $router $npm $css.version $file }}
<link type="text/css" rel="stylesheet" href="{{ $pluginCSS }}" />
{{- end }} {{- end }}
<!-- Main Style file --> <!-- Main Style file -->
@@ -24,12 +15,17 @@
{{- if hugo.IsProduction }} {{- if hugo.IsProduction }}
{{- $css = $css | minify | fingerprint }} {{- $css = $css | minify | fingerprint }}
{{- end }} {{- end }}
<link rel="stylesheet" href="{{ $css.RelPermalink }}"> <link rel="stylesheet" href="{{ $css.RelPermalink }}">
{{- if .IsPage }} {{- if .IsPage }}
<style type="text/css"> <style type="text/css">
.post-footer hr:after { .post-footer, .flinks-list-footer hr:after {
content: "{{ .Site.Params.postFooter.endLineTip }}"; content: "{{ .Site.Params.postFooter.endLineTip }}";
} }
</style> </style>
{{- end }} {{- end }}
{{- $custom := .Scratch.Get "style" }}
{{- if $custom }}
<link rel="stylesheet" type="text/css" href="{{ $custom }}">
{{- end }}

View File

@@ -1,2 +1,3 @@
{{ partial "header/brand.html" . }} {{ partial "header/brand.html" . }}
{{ partial "header/menus.html" . }} {{ partial "header/menus.html" . }}
{{ partial "header/search.html" . }}

View File

@@ -0,0 +1,11 @@
{{- if or .Site.Params.algoliaSearch.enable .Site.Params.localSearch.enable }}
<div class="search-pop-overlay">
<div class="popup search-popup">
{{- if .Site.Params.algoliaSearch.enable }}
{{ partial "_thirdparty/search/algolia.html" . }}
{{- else if .Site.Params.localSearch.enable }}
{{ partial "_thirdparty/search/local.html" . }}
{{- end }}
</div>
</div>
{{- end }}

View File

@@ -1,44 +1,72 @@
{{/* Use to defind global variables */}} {{/* Use to defind global variables */}}
{{ if not hugo.IsExtended }}
{{ warnf "Hugo NexT 主题使用了 SCSS 框架,请到官方地址下载 Hugo Extended 版本https://github.com/gohugoio/hugo/releases" }}
{{ errorf "Because that use SCSS framework in Hugo NexT, Please download Hugo extended version on offical site: https://github.com/gohugoio/hugo/releases" }}
{{ end }}
{{ $version := int (index (split hugo.Version ".") 1) }} {{ $version := int (index (split hugo.Version ".") 1) }}
{{ if lt $version 89 }} {{ if lt $version 89 }}
{{ warnf "当前 Hugo 版本小于 0.89.0,请到官方地址下载 Hugo 最新版本https://github.com/gohugoio/hugo/releases" }} {{ warnf "当前 Hugo 版本小于 0.89.0,请到官方地址下载 Hugo 最新版本https://github.com/gohugoio/hugo/releases" }}
{{ errorf "Current Hugo version is less then 0.89.0, Please download Hugo latest version on offical site: https://github.com/gohugoio/hugo/releases" }} {{ errorf "Current Hugo version is less then 0.89.0, Please download Hugo latest version on offical site: https://github.com/gohugoio/hugo/releases" }}
{{ end }} {{ end }}
{{ if not hugo.IsExtended }}
{{ warnf "Hugo NexT 主题使用了 SCSS 框架,请到官方地址下载 Hugo Extended 版本https://github.com/gohugoio/hugo/releases" }}
{{ errorf "Because that use SCSS framework in Hugo NexT, Please download Hugo extended version on offical site: https://github.com/gohugoio/hugo/releases" }}
{{ end }}
{{ $globalVars := newScratch }} {{ $globalVars := newScratch }}
{{ $globalVars.Set "postsCount" (len (where .Page.Site.RegularPages "Section" "in" .Site.Params.mainSections)) }} {{ $globalVars.Set "postsCount" (len (where .Page.Site.RegularPages "Section" "in" .Site.Params.mainSections)) }}
{{ range .Site.Params.mainSections }}
{{ $globalVars.Set . (len (where $.Page.Site.RegularPages "Section" .))}}
{{ end }}
{{ $globalVars.Set "catsCount" (len .Site.Taxonomies.categories) }} {{ $globalVars.Set "catsCount" (len .Site.Taxonomies.categories) }}
{{ $globalVars.Set "tagsCount" (len .Site.Taxonomies.tags) }} {{ $globalVars.Set "tagsCount" (len .Site.Taxonomies.tags) }}
{{ $vendor := .Site.Params.vendors.plugins }} {{ $vendor := .Site.Params.vendors.plugins }}
{{ $router := index .Site.Data.resources.vendors $vendor }} {{ $router := index .Site.Data.resources.vendors $vendor }}
{{ $globalVars.Set "vendor" $vendor }}
{{ $globalVars.Set "router" $router }} {{ $globalVars.Set "router" $router }}
{{ $config := dict {{ $config := dict
"hostname" .Site.BaseURL "hostname" .Site.BaseURL
"root" "/" "root" "/"
"lang" .Site.LanguageCode "lang" .Site.LanguageCode
"vendor" (dict "plugins" $vendor "router" $router) "vendor" (dict "plugins" $vendor "router" $router)
"darkmode" .Site.Params.darkmode "darkmode" .Site.Params.darkmode
"version" .Site.Data.config.version "version" .Site.Data.config.version
"scheme" .Site.Params.scheme "scheme" .Site.Params.scheme
"sidebar" .Site.Params.sidebar "sidebar" .Site.Params.sidebar
"copybtn" .Site.Params.codeblock.copyBtn "copybtn" .Site.Params.codeblock.copyBtn
"bookmark" .Site.Params.bookmark "bookmark" .Site.Params.bookmark
"lazyload" .Site.Params.lazyload "lazyload" .Site.Params.lazyload
"motion" .Site.Params.motion "motion" .Site.Params.motion
"i18n" (dict
"placeholder" (T "SearchPh")
"empty" (T "SearchEmpty")
"hits_time" (T "SearchHitsTime")
"hits" (T "SearchHits")
"ds_years" (T "DateSuffix.years")
"ds_days" (T "DateSuffix.days")
"ds_hours" (T "DateSuffix.hours")
"ds_mins" (T "DateSuffix.mins")
"ds_month" (T "DateSuffix.month")
"ds_day" (T "DateSuffix.day")
"ds_hour" (T "DateSuffix.hour")
"ds_min" (T "DateSuffix.min")
"ds_just" (T "DateSuffix.just")
)
}} }}
{{ if .Site.Params.localSearch.enable }}
{{ $localSearch := dict "localSearch" .Site.Params.localSearch }}
{{ $config = merge $config $localSearch }}
{{ end }}
{{ if .Site.Params.algoliaSearch.enable }}
{{ $algoliaSearch := dict
"js" .Site.Data.resources.algolia
"instantjs" .Site.Data.resources.instant
"cfg" .Site.Params.algoliaSearch
}}
{{ $config = merge $config (dict "algolia" $algoliaSearch) }}
{{ end }}
{{ with .Site.Params.waline }} {{ with .Site.Params.waline }}
{{ $waline := dict {{ $waline := dict
"js" $.Site.Data.resources.waline.js "js" $.Site.Data.resources.waline.js
@@ -88,4 +116,10 @@
{{ $globalVars.Set "config" $config }} {{ $globalVars.Set "config" $config }}
{{ with .Site.Params.customFilePath }}
{{ range $k, $v := . }}
{{ $globalVars.Set $k $v }}
{{ end }}
{{ end }}
{{ return $globalVars.Values }} {{ return $globalVars.Values }}

View File

@@ -6,8 +6,8 @@
<article itemscope itemtype="http://schema.org/Article"> <article itemscope itemtype="http://schema.org/Article">
<header class="post-header"> <header class="post-header">
<div class="post-meta-container"> <div class="post-meta-container">
{{ $month := .Date.Format "01-02" }} {{ $month := .Date.Format .Site.Params.monthFormat }}
<time itemprop="dateCreated" datetime="{{ .Date.Format "2006-01-02T15:04:05-07:00" }}" content="{{ $month }}"> <time itemprop="dateCreated" datetime="{{ .Date.Format .Site.Params.timeFormat }}" content="{{ $month }}">
{{ $month }} {{ $month }}
</time> </time>
</div> </div>
@@ -18,7 +18,7 @@
<i class="fa fa-external-link-alt"></i> <i class="fa fa-external-link-alt"></i>
</a> </a>
{{- else }} {{- else }}
<a class="post-title-link" href="{{ .Permalink }}" itemprop="url"> <a class="post-title-link" href="{{ .RelPermalink | relLangURL }}" itemprop="url">
<span itemprop="name">{{ .Title }}</span> <span itemprop="name">{{ .Title }}</span>
</a> </a>
{{- end }} {{- end }}

View File

@@ -1,12 +0,0 @@
<ul class="main-menu menu">
{{- $curP := . }}
{{- range .Site.Menus.main }}
{{ $active := or ($curP.IsMenuCurrent "main" .) ($curP.HasMenuCurrent "main" .) }}
{{ $active = or $active (eq .URL "/")}}
<li class="menu-item menu-item-{{ .Identifier }}">
<a href="{{ .URL }}" class="hvr-icon-pulse{{if $active }} menu-item-active{{ end }}" rel="section">
<i class="fa fa-{{ .Pre }} hvr-icon"></i>{{- .Name }}
</a>
</li>
{{- end }}
</ul>

View File

@@ -18,7 +18,8 @@
<header class="post-header"> <header class="post-header">
{{ partial "post/header.html" (dict "ctx" .ctx "IsHome" .IsHome) }} {{ partial "post/header.html" (dict "ctx" .ctx "IsHome" .IsHome) }}
</header> </header>
<div class="post-body" itemprop="articleBody"> {{ $tocEnable := .ctx.Params.toc | default .ctx.Site.Params.toc.enable }}
<div class="post-body {{ if and $tocEnable .ctx.Site.Params.toc.number }} autonumber {{ end }}" itemprop="articleBody">
{{ partial "post/body.html" (dict "ctx" .ctx "IsHome" .IsHome) }} {{ partial "post/body.html" (dict "ctx" .ctx "IsHome" .IsHome) }}
</div> </div>
<footer class="post-footer"> <footer class="post-footer">

View File

@@ -25,15 +25,15 @@
<div class="post-nav"> <div class="post-nav">
<div class="post-nav-next post-nav-item"> <div class="post-nav-next post-nav-item">
{{- with .NextInSection }} {{- with .NextInSection }}
<a href="{{ .Permalink}}" rel="next" title="{{.Title}}"> <a href="{{ .RelPermalink | relLangURL }}" rel="next" title="{{ .Title }}">
<i class="fa fa-chevron-left"></i> {{.Title}} <i class="fa fa-chevron-left"></i> {{ .Title }}
</a> </a>
{{- end }} {{- end }}
</div> </div>
<div class="post-nav-prev post-nav-item"> <div class="post-nav-prev post-nav-item">
{{- with .PrevInSection }} {{- with .PrevInSection }}
<a href="{{ .Permalink}}" rel="prev" title="{{.Title}}"> <a href="{{ .RelPermalink | relLangURL }}" rel="prev" title="{{ .Title }}">
{{.Title}} {{ .Title }}
<i class="fa fa-chevron-right"></i> <i class="fa fa-chevron-right"></i>
</a> </a>
{{- end }} {{- end }}

View File

@@ -1,12 +1,12 @@
{{- $pageViewCls := "" }} {{- $pageViewId := "" }}
{{- if .Site.Params.leancloudVisitors.enable }} {{- if .Site.Params.leancloudVisitors.enable }}
{{- $pageViewCls = "leancloud-visitors-count" }} {{- $pageViewId = "leancloud-visitors-count" }}
{{- end }} {{- end }}
{{- if .Site.Params.waline.pageView }} {{- if .Site.Params.waline.pageView }}
{{- $pageViewCls = "waline-pageview-count" }} {{- $pageViewId = "waline-pageview-count" }}
{{- end }} {{- end }}
{{- if .Site.Params.busuanzi.postViews }} {{- if .Site.Params.analytics.busuanzi.postViews }}
{{- $pageViewCls = "busuanzi_value_page_pv" }} {{- $pageViewId = "busuanzi_value_page_pv" }}
{{- end }} {{- end }}
<span class="post-meta-item" title="{{ T "PostViews" }}"> <span class="post-meta-item" title="{{ T "PostViews" }}">
<span class="post-meta-item-icon"> <span class="post-meta-item-icon">
@@ -15,5 +15,5 @@
<span class="post-meta-item-text"> <span class="post-meta-item-text">
{{ print (T "PostViews") (T "SymbolColon") }} {{ print (T "PostViews") (T "SymbolColon") }}
</span> </span>
<span class="{{ $pageViewCls }}" data-path="{{ .RelPermalink | relLangURL }}"><i class="fa fa-sync fa-spin"></i></span> <span id="{{ $pageViewId }}" data-path="{{ .RelPermalink | relLangURL }}"><i class="fa fa-sync fa-spin"></i></span>
</span> </span>

View File

@@ -1,71 +1,15 @@
<!-- Plugin scripts files --> {{ partialCached "scripts/global.html" . }}
{{- $jsRes := .Site.Data.resources.js }}
{{- $vendor := .Site.Params.vendors.plugins }}
{{- $router := .Scratch.Get "router" }}
{{ $jsFmt := "%s/%s@%s/%s" }}
{{- range $js := $jsRes }}
{{- $npm := $js.name }}
{{- $file := $js.file }}
{{- if eq $vendor "cdnjs" }}
{{- with $js.alias }}
{{- $npm = . }}
{{- end }}
{{- $file = replaceRE `(dist|lib|source\/js)\/` "" $js.file }}
{{- $jsFmt = "%s/%s/%s/%s" }}
{{- end }}
{{- $pluginJS := printf $jsFmt $router $npm $js.version $file }}
<script type="text/javascript" src="{{ $pluginJS }}" defer></script>
{{- end }}
<script class="next-config" data-name="main" type="application/json">{{- .Scratch.Get "config" -}}</script> {{ if or .Params.math .Site.Params.math }}
{{ partialCached "_thirdparty/others/math.html" . }}
{{- $config := resources.Get "js/config.js" }}
{{- $motion := resources.Get "js/motion.js" }}
{{- $boot := resources.Get "js/next-boot.js" }}
{{- $utils := resources.Get "js/utils.js" }}
{{- $nextjs := (slice $config $utils $boot ) }}
{{- if .Site.Params.motion.enable }}
{{ $motionjs := resources.Get "js/motion.js" }}
{{ $nextjs = $nextjs | append $motionjs }}
{{- end }}
{{- if or (eq .Site.Params.shceme "Muse") (eq .Site.Params.shceme "Mist") }}
{{ $musejs := resources.Get "js/schemes/muse.js" }}
{{ $nextjs = $nextjs | append $musejs }}
{{- end }}
{{- if .Site.Params.bookmark.enable }}
{{- $bookmarkjs := resources.Get "js/bookmark.js" }}
{{- $nextjs = $nextjs | append $bookmarkjs }}
{{- end }}
{{- if .Site.Params.pjax }}
{{- $pjaxjs := resources.Get "js/pjax.js" }}
{{- $nextjs = $nextjs | append $pjaxjs }}
{{- end }}
{{- if isset .Site.Params "addthisid" }}
{{- $addthisjs := resources.Get "js/third-party/share/addthis.js" }}
{{- $nextjs = $nextjs | append $addthisjs }}
{{- end }}
{{- if isset .Site.Params "waline" }}
{{- $walinejs := resources.Get "js/third-party/comments/waline.js" }}
{{- $nextjs = $nextjs | append $walinejs }}
{{- end }}
{{- if isset .Site.Params "giscus" }}
{{- $giscusjs := resources.Get "js/third-party/comments/giscus.js" }}
{{- $nextjs = $nextjs | append $giscusjs }}
{{- end }}
{{- if isset .Site.Params "livere" }}
{{- $liverejs := resources.Get "js/third-party/comments/livere.js" }}
{{- $nextjs = $nextjs | append $liverejs }}
{{- end }}
{{- if isset .Site.Params "artalk" }}
{{- $artalkjs := resources.Get "js/third-party/comments/artalk.js" }}
{{- $nextjs = $nextjs | append $artalkjs }}
{{- end }}
{{- if isset .Site.Params "utterances" }}
{{- $utterancesjs := resources.Get "js/third-party/comments/utterances.js" }}
{{- $nextjs = $nextjs | append $utterancesjs }}
{{- end }}
{{- $nextjs = $nextjs | resources.Concat "js/main.js"}}
{{ if hugo.IsProduction }}
{{- $nextjs = $nextjs | minify | fingerprint }}
{{ end }} {{ end }}
<script type="text/javascript" src="{{ $nextjs.RelPermalink }}" defer></script>
{{ if .Params.mermaid }}
{{ partialCached "_thirdparty/others/mermaid.html" . }}
{{ end }}

View File

@@ -0,0 +1,79 @@
{{- $jsRes := .Site.Data.resources.js }}
{{- $vendor := .Site.Params.vendors.plugins }}
{{- $router := .Scratch.Get "router" }}
{{- range $jsRes }}
{{ $pluginJS := partial "_funs/get_res.html" (dict "res" . "vendor" $vendor "router" $router) }}
<script type="text/javascript" src="{{ $pluginJS }}" defer></script>
{{- end }}
<script class="next-config" data-name="main" type="application/json">{{- .Scratch.Get "config" -}}</script>
{{- $config := resources.Get "js/config.js" }}
{{- $motion := resources.Get "js/motion.js" }}
{{- $boot := resources.Get "js/next-boot.js" }}
{{- $utils := resources.Get "js/utils.js" }}
{{- $nextjs := (slice $config $utils $boot ) }}
{{- if .Site.Params.motion.enable }}
{{ $motionjs := resources.Get "js/motion.js" }}
{{ $nextjs = $nextjs | append $motionjs }}
{{- end }}
{{- if or (eq .Site.Params.shceme "Muse") (eq .Site.Params.shceme "Mist") }}
{{ $musejs := resources.Get "js/schemes/muse.js" }}
{{ $nextjs = $nextjs | append $musejs }}
{{- end }}
{{- if .Site.Params.bookmark.enable }}
{{- $bookmarkjs := resources.Get "js/bookmark.js" }}
{{- $nextjs = $nextjs | append $bookmarkjs }}
{{- end }}
{{- if .Site.Params.pjax }}
{{- $pjaxjs := resources.Get "js/pjax.js" }}
{{- $nextjs = $nextjs | append $pjaxjs }}
{{- end }}
{{- if isset .Site.Params "addthisid" }}
{{- $addthisjs := resources.Get "js/third-party/share/addthis.js" }}
{{- $nextjs = $nextjs | append $addthisjs }}
{{- end }}
{{- if isset .Site.Params "waline" }}
{{- $walinejs := resources.Get "js/third-party/comments/waline.js" }}
{{- $nextjs = $nextjs | append $walinejs }}
{{- end }}
{{- if isset .Site.Params "giscus" }}
{{- $giscusjs := resources.Get "js/third-party/comments/giscus.js" }}
{{- $nextjs = $nextjs | append $giscusjs }}
{{- end }}
{{- if isset .Site.Params "livere" }}
{{- $liverejs := resources.Get "js/third-party/comments/livere.js" }}
{{- $nextjs = $nextjs | append $liverejs }}
{{- end }}
{{- if isset .Site.Params "artalk" }}
{{- $artalkjs := resources.Get "js/third-party/comments/artalk.js" }}
{{- $nextjs = $nextjs | append $artalkjs }}
{{- end }}
{{- if isset .Site.Params "utterances" }}
{{- $utterancesjs := resources.Get "js/third-party/comments/utterances.js" }}
{{- $nextjs = $nextjs | append $utterancesjs }}
{{- end }}
{{- if .Site.Params.localSearch.enable }}
{{- $search := resources.Get "js/third-party/search/local.js" }}
{{- $nextjs = $nextjs | append $search }}
{{ end }}
{{- if .Site.Params.algoliaSearch.enable }}
{{- $search := resources.Get "js/third-party/search/algolia.js" }}
{{- $nextjs = $nextjs | append $search }}
{{ end }}
{{ if .Site.Params.footer.translate }}
{{- $gt := resources.Get "js/third-party/others/google-translate.js" }}
{{- $nextjs = $nextjs | append $gt }}
{{ $gtCss := resources.Get "css/gt.scss" }}
{{ $style := $gtCss | resources.ToCSS | minify }}
<script type="text/javascript">
window.translateelement_styles = "{{- $style.RelPermalink -}}";
</script>
{{ end }}
{{- $nextjs = $nextjs | resources.Concat "js/main.js"}}
{{ if hugo.IsProduction }}
{{- $nextjs = $nextjs | minify | fingerprint }}
{{ end }}
<script type="text/javascript" src="{{ $nextjs.RelPermalink }}" defer></script>

View File

@@ -0,0 +1,17 @@
{{- $vendor := .vendor }}
{{- $router := .router }}
{{- $res := (index .res .index) }}
{{- $cssRes := $res.css }}
{{ if $cssRes }}
{{ range $cssRes }}
{{ $css := partial "_funs/get_res.html" (dict "res" . "vendor" $vendor "router" $router) }}
<link type="text/css" rel="stylesheet" href="{{ $css }}"/>
{{ end }}
{{ end }}
{{- $jsRes := $res.js }}
{{ range $jsRes }}
{{ $js := partial "_funs/get_res.html" (dict "res" . "vendor" $vendor "router" $router) }}
<script type="text/javascript" src="{{ $js }}"></script>
{{ end }}

View File

@@ -4,8 +4,8 @@
<span class="toggle-line"></span> <span class="toggle-line"></span>
</div> </div>
<aside class="sidebar"> <aside class="sidebar">
{{- $toc := and (isset .Params "toc") .Params.toc }} {{ $tocEnable := .Params.toc | default .Site.Params.toc.enable }}
<div class="sidebar-inner {{ if $toc }}sidebar-nav-active sidebar-toc-active{{ else }}sidebar-overview-active{{ end }}"> <div class="sidebar-inner {{ if $tocEnable }}sidebar-nav-active sidebar-toc-active{{ else }}sidebar-overview-active{{ end }}">
<ul class="sidebar-nav"> <ul class="sidebar-nav">
<li class="sidebar-nav-toc"> <li class="sidebar-nav-toc">
{{ T "TableOfContents" }} {{ T "TableOfContents" }}
@@ -17,21 +17,34 @@
<div class="sidebar-panel-container"> <div class="sidebar-panel-container">
<!--noindex--> <!--noindex-->
<div class="post-toc-wrap sidebar-panel"> <div class="post-toc-wrap sidebar-panel">
{{- if $toc }} {{- if $tocEnable }}
<div class="post-toc animated">{{ .TableOfContents }}</div> <div class="post-toc animated">{{ .TableOfContents }}</div>
{{- end }} {{- end }}
</div> </div>
<!--/noindex--> <!--/noindex-->
<div class="site-overview-wrap sidebar-panel"> <div class="site-overview-wrap sidebar-panel">
{{ partial "sidebar/overview" . }} {{- partialCached "sidebar/overview.html" . -}}
{{- $custom := .Scratch.Get "sidebar" }}
{{- if $custom }}
{{ partialCached $custom . }}
{{- end }}
</div> </div>
</div> </div>
{{- if and .Site.Params.backTop.enable .Site.Params.backTop.sidebar }}
</div>
{{- if .Site.Params.siteState.statistic.enable }}
{{- partial "sidebar/siteinfo.html" . }}
{{- end }}
{{- if and .Site.Params.backTop.enable .Site.Params.backTop.sidebar }}
<div class="sidebar-card-widget back-to-top-card">
<div class="back-to-top animated" role="button" aria-label="{{ T "BackTop" }}"> <div class="back-to-top animated" role="button" aria-label="{{ T "BackTop" }}">
<i class="fa fa-arrow-up"></i> <i class="fa fa-arrow-up"></i>
<span>0%</span> <span>0%</span>
</div> </div>
{{- end }}
</div> </div>
{{- end }}
</aside> </aside>
<div class="sidebar-dimmer"></div> <div class="sidebar-dimmer"></div>

View File

@@ -1 +0,0 @@
{{ .TableOfContents }}

View File

@@ -8,11 +8,11 @@
<div class="site-description" itemprop="description">{{ .Site.Params.description }}</div> <div class="site-description" itemprop="description">{{ .Site.Params.description }}</div>
</div> </div>
{{- if .Site.Params.siteState }} {{- if .Site.Params.siteState.basic }}
<div class="site-state-wrap site-overview-item animated"> <div class="site-state-wrap site-overview-item animated">
<nav class="site-state"> <nav class="site-state">
<div class="site-state-item site-state-posts"> <div class="site-state-item site-state-posts">
<a href="{{ "/posts/" | relLangURL }}"> <a href="{{ "/archives/" | relLangURL }}">
<span class="site-state-item-count">{{ .Scratch.Get "postsCount" }}</span> <span class="site-state-item-count">{{ .Scratch.Get "postsCount" }}</span>
<span class="site-state-item-name">{{ T "SbPostsLable" }}</span> <span class="site-state-item-name">{{ T "SbPostsLable" }}</span>
</a> </a>

View File

@@ -0,0 +1,70 @@
{{ $scratch := partialCached "_funs/cal_siteinfo.html" . }}
<div class="sidebar-card-widget">
<div class="item-headline">
<i class="fas fa-chart-line"></i>
<span>{{ T "SiteInfoItems.title" }}</span>
</div>
<div class="siteinfo">
<div class="siteinfo-item">
<div class="item-name"><i class="fa-solid fa-calendar-check"></i>{{ T "SiteInfoItems.runTimes" }}</div>
<div class="item-count" id="runTimes" data-publishdate="{{ $scratch.Get "last" }}"></div>
</div>
{{- if eq .Site.Params.siteState.statistic.plugin "busuanzi" }}
{{- with .Site.Params.analytics.busuanzi }}
<div class="siteinfo-item">
<div class="item-name">
<i class="fas {{ .visitorsIcon }}"></i>{{ T "SiteInfoItems.visitors" }}
</div>
<div class="item-count" id="busuanzi_value_site_uv"></div>
</div>
<div class="siteinfo-item">
<div class="item-name">
<i class="fas {{ .viewsIcon }}"></i>{{ T "SiteInfoItems.pageViews" }}
</div>
<div class="item-count" id="busuanzi_value_site_pv"></div>
</div>
{{- end }}
{{- end }}
{{- if eq .Site.Params.siteState.statistic.plugin "51la" }}
<div id="la-siteinfo-widget" style="display: none;">
<script id="LA-DATA-WIDGET" crossorigin="anonymous" charset="UTF-8" src="{{ replace .Site.Data.resources.analytics.laWidget "laId" .Site.Params.analytics.laId }}"></script>
</div>
<div class="siteinfo-item">
<div class="item-name">
<i class="fa fa-user-plus"></i>{{ T "SiteInfoItems.todayViews" }}
</div>
<div class="item-count" id="today_site_pv"></div>
</div>
<div class="siteinfo-item">
<div class="item-name">
<i class="fa fa-user-clock"></i>{{ T "SiteInfoItems.yesterdayViews" }}
</div>
<div class="item-count" id="yesterday_site_pv"></div>
</div>
<div class="siteinfo-item">
<div class="item-name">
<i class="fa fa-arrows-down-to-people"></i>{{ T "SiteInfoItems.monthViews" }}
</div>
<div class="item-count" id="month_site_pv"></div>
</div>
<div class="siteinfo-item">
<div class="item-name">
<i class="fa fa-users"></i>{{ T "SiteInfoItems.totalViews" }}
</div>
<div class="item-count" id="total_site_pv"></div>
</div>
{{- end }}
<div class="siteinfo-item">
<div class="item-name"><i class="fa fa-font"></i>{{ T "SiteInfoItems.words" }}</div>
<div class="item-count" id="wordsCount" data-count="{{ $scratch.Get "totalWords" }}"></div>
</div>
<div class="siteinfo-item">
<div class="item-name"><i class="fa fa-mug-hot"></i>{{ T "SiteInfoItems.readTimes" }}</div>
<div class="item-count" id="readTimes" data-times="{{ $scratch.Get "totalTimes" }}"></div>
</div>
<div class="siteinfo-item">
<div class="item-name"><i class="fa fa-clock-rotate-left"></i>{{ T "SiteInfoItems.lastUpdate" }}</div>
<div class="item-count" id="last-push-date" data-lastpushdate="{{ $scratch.Get "first" }}"></div>
</div>
</div>
</div>

View File

@@ -1,9 +1,22 @@
{{- if and .Site.Params.backTop.enable (not .Site.Params.backTop.sidebar) }} <div class="tool-buttons" >
<div class="back-to-top" role="button" aria-label="{{ T "BackTopLabel" }}"> <a id="goto-comments" class="button goto-comments" href="#comments" title="{{ T "ToolBtns.comment" }}">
<i class="fas fa-comments"></i>
</a>
<div id="switch-theme" class="button" title="{{ T "ToolBtns.theme" }}">
<i class="fas fa-adjust"></i>
</div>
{{ if .Site.Params.footer.translate }}
<a class="button" href="#google_translate_element" title="{{ T "ToolBtns.lang" }}">
<i class="fas fa-globe"></i>
</a>
{{ end }}
{{- if and .Site.Params.backTop.enable (not .Site.Params.backTop.sidebar) }}
<div class="back-to-top" role="button" title="{{ T "ToolBtns.backTop" }}">
<i class="fa fa-arrow-up"></i> <i class="fa fa-arrow-up"></i>
<span>0%</span> <span>0%</span>
</div> </div>
{{- end }} {{- end }}
</div>
{{- if .Site.Params.readingProgress.enable }} {{- if .Site.Params.readingProgress.enable }}
<div class="reading-progress-bar"></div> <div class="reading-progress-bar"></div>

View File

@@ -0,0 +1,3 @@
<div class="mermaid" align="{{ .Get "align" | default "center" }}" {{ with .Get "bc" }} style="background: {{ . }}" {{ end }}>
{{ safeHTML .Inner }}
</div>

Some files were not shown because too many files have changed in this diff Show More