Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b3088be62d | ||
|
|
9859ea3f8b | ||
|
|
d8c9468c68 | ||
|
|
57bfea8338 | ||
|
|
7845f5dfe7 | ||
|
|
66bd8a2997 | ||
|
|
00c8616931 | ||
|
|
5693c4bf7a | ||
|
|
5bf8bdcde2 | ||
|
|
9b75823f68 | ||
|
|
9c7e73646c | ||
|
|
080c86ec79 | ||
|
|
e24f5672c3 | ||
|
|
2013c50abe | ||
|
|
626265bcfd | ||
|
|
fe94466ec4 | ||
|
|
9f734a0647 |
@@ -0,0 +1,394 @@
|
|||||||
|
.disqus-container {
|
||||||
|
background-color: var(--card-background);
|
||||||
|
border-radius: var(--card-border-radius);
|
||||||
|
box-shadow: var(--shadow-l1);
|
||||||
|
padding: var(--card-padding);
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs * {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #076dd0
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-hide {
|
||||||
|
display: none!important
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-disabled {
|
||||||
|
cursor: not-allowed;
|
||||||
|
opacity: .5
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs #dsqjs-msg {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 4px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
font-size: 14px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs #dsqjs-msg .dsqjs-msg-btn {
|
||||||
|
cursor: pointer
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-bullet {
|
||||||
|
line-height: 1.4;
|
||||||
|
margin: 0 2px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-bullet:after {
|
||||||
|
color: #c2c6cc;
|
||||||
|
content: "·";
|
||||||
|
font-weight: 700
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-clearfix:after,#dsqjs .dsqjs-clearfix:before {
|
||||||
|
display: table;
|
||||||
|
content: "";
|
||||||
|
line-height: 0;
|
||||||
|
clear: both
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-nav {
|
||||||
|
position: relative;
|
||||||
|
margin: 0 0 20px;
|
||||||
|
border-bottom: 2px solid #e7e9ee
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs ol,#dsqjs ul {
|
||||||
|
list-style: none;
|
||||||
|
list-style-type: none
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-no-comment {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.5;
|
||||||
|
word-wrap: break-word;
|
||||||
|
overflow: hidden;
|
||||||
|
color: #2a2e2e;
|
||||||
|
margin-bottom: 6px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-nav-tab {
|
||||||
|
float: left;
|
||||||
|
text-transform: capitalize;
|
||||||
|
font-size: 15px;
|
||||||
|
padding: 12px 8px;
|
||||||
|
color: #656c7a;
|
||||||
|
display: block;
|
||||||
|
margin: 0 15px 0 0;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 1;
|
||||||
|
position: relative;
|
||||||
|
transition: all .2s ease-in-out
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-nav-tab:last-child {
|
||||||
|
margin: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-tab-active {
|
||||||
|
color: #2a2e2e
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-tab-active>span:after {
|
||||||
|
content: " ";
|
||||||
|
display: block;
|
||||||
|
height: 2px;
|
||||||
|
background-color: #076dd0!important;
|
||||||
|
position: absolute;
|
||||||
|
bottom: -5px;
|
||||||
|
left: 0;
|
||||||
|
right: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-list .dsqjs-post-item {
|
||||||
|
position: relative;
|
||||||
|
margin-bottom: 16px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-list .dsqjs-post-avatar {
|
||||||
|
float: left;
|
||||||
|
margin-right: 10px;
|
||||||
|
position: relative;
|
||||||
|
background: #dbdfe4;
|
||||||
|
padding: 0;
|
||||||
|
display: block;
|
||||||
|
border-radius: 4px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-list .dsqjs-post-avatar img {
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
display: block;
|
||||||
|
border-radius: 4px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-list .dsqjs-post-header {
|
||||||
|
line-height: 1;
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 3px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-list .dsqjs-post-header .dsqjs-post-author {
|
||||||
|
color: #656c7a;
|
||||||
|
font-weight: 700
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-list .dsqjs-post-header .dsqjs-admin-badge {
|
||||||
|
color: #fff;
|
||||||
|
background: #687a86;
|
||||||
|
padding: 1px 3px;
|
||||||
|
margin-left: 4px;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 1;
|
||||||
|
font-weight: 700;
|
||||||
|
border-radius: 3px;
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
top: -1px;
|
||||||
|
left: 1px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-list .dsqjs-post-header .dsqjs-meta {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #656c7a
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-body {
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 1.5;
|
||||||
|
word-wrap: break-word;
|
||||||
|
overflow: hidden;
|
||||||
|
color: #2a2e2e
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-body code {
|
||||||
|
padding: .2em .4em;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 85%;
|
||||||
|
background: #f5f5f5;
|
||||||
|
color: inherit;
|
||||||
|
border-radius: 3px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-body pre {
|
||||||
|
padding: .5em;
|
||||||
|
overflow: auto;
|
||||||
|
font-size: 85%;
|
||||||
|
line-height: 1.45;
|
||||||
|
border-radius: 3px;
|
||||||
|
background: #f5f5f5;
|
||||||
|
margin: .5em 0
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-body blockquote {
|
||||||
|
padding: 0 .8em;
|
||||||
|
margin: .5em 0;
|
||||||
|
color: #6a737d;
|
||||||
|
border-left: .25em solid #dfe2e5
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-body p:last-child {
|
||||||
|
margin: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-list.dsqjs-children>li {
|
||||||
|
margin-left: 30px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-list.dsqjs-children .dsqjs-post-avatar img {
|
||||||
|
width: 38px;
|
||||||
|
height: 38px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-load-more {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
padding: 11px 14px;
|
||||||
|
margin: 0 0 24px;
|
||||||
|
background: #687a86;
|
||||||
|
color: #fff;
|
||||||
|
cursor: pointer
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-load-more:hover {
|
||||||
|
opacity: .8
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs footer {
|
||||||
|
text-align: right;
|
||||||
|
line-height: 1.5;
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
border-top: 2px solid #e7e9ee;
|
||||||
|
margin-top: 12px;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #555
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-disqus-logo {
|
||||||
|
background-image: url(https://c.disquscdn.com/next/embed/assets/img/sprite.654110a9206fd22f08cca0798e34a65e.png);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
display: inline-block;
|
||||||
|
background-size: 86px 40.5px;
|
||||||
|
height: 16.5px;
|
||||||
|
width: 86px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-order {
|
||||||
|
display: flex;
|
||||||
|
float: right;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 12px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-order-radio {
|
||||||
|
display: none
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-order-radio:checked+.dsqjs-order-label {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #888
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-order-label {
|
||||||
|
display: block;
|
||||||
|
height: 20px;
|
||||||
|
line-height: 20px;
|
||||||
|
margin-right: 10px;
|
||||||
|
font-size: 12px;
|
||||||
|
border-radius: 2px;
|
||||||
|
padding: 0 5px;
|
||||||
|
background-color: #dcdcdc;
|
||||||
|
cursor: pointer
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs p.dsqjs-has-more {
|
||||||
|
margin-bottom: 24px;
|
||||||
|
margin-left: 48px;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 15px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs p.dsqjs-has-more a.dsqjs-has-more-btn {
|
||||||
|
color: #656c7a;
|
||||||
|
text-decoration: underline;
|
||||||
|
cursor: pointer
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
#dsqjs .dsqjs-post-list.dsqjs-children>li {
|
||||||
|
margin-left:48px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-list .dsqjs-post-avatar {
|
||||||
|
margin-right: 12px
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-list .dsqjs-post-item {
|
||||||
|
margin-bottom: 20px
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1024px) {
|
||||||
|
#dsqjs .dsqjs-post-list.dsqjs-children>li {
|
||||||
|
margin-left:60px
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:root[data-scheme="light"] {
|
||||||
|
#dsqjs .dsqjs-disqus-logo {
|
||||||
|
background-position: 0 -7px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:root[data-scheme="dark"] {
|
||||||
|
#dsqjs {
|
||||||
|
--t-s: rgba(255,255,255,0.9);
|
||||||
|
--alt: #3e4b5e;
|
||||||
|
--link-hover: #47a2e0;
|
||||||
|
--hover-bg: #3e4b5e;
|
||||||
|
--tag: #3e4b5e;
|
||||||
|
--border: #435266;
|
||||||
|
--pre: #3c495b;
|
||||||
|
--c-bg: #2f3947;
|
||||||
|
--code: #c3c7cb;
|
||||||
|
--kbd: #4e5f77;
|
||||||
|
--hl: #abb2bf;
|
||||||
|
--hlc: #808895;
|
||||||
|
--hlk: #c678dd;
|
||||||
|
--hln: #e06c75;
|
||||||
|
--hll: #56b6c2;
|
||||||
|
--hls: #98c379;
|
||||||
|
--hlt: #e6c07b;
|
||||||
|
--hlv: #d19a66;
|
||||||
|
--bg: #181c27;
|
||||||
|
--main: #252d38;
|
||||||
|
--t: rgba(255,255,255,0.86);
|
||||||
|
--t-l: rgba(255,255,255,0.66);
|
||||||
|
--logo: #fff;
|
||||||
|
--link: #38a3fd;
|
||||||
|
--title: rgba(255,255,255,0.92);
|
||||||
|
--fab: #364151;
|
||||||
|
--shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#disqus_thread {
|
||||||
|
color: var(--body-text-color)
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs #dsqjs-msg {
|
||||||
|
color: var(--t)
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs a {
|
||||||
|
color:var(--link)
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs a:focus,#dsqjs a:hover {
|
||||||
|
color: var(--link-hover)
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-disqus-logo {
|
||||||
|
background-position: 0 -24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-nav,#dsqjs footer {
|
||||||
|
border-color: var(--hlc)
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-load-more,#dsqjs .dsqjs-load-more:hover,#dsqjs .dsqjs-nav-tab,#dsqjs .dsqjs-no-comment,#dsqjs .dsqjs-post-content {
|
||||||
|
color: var(--t)
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-order-label {
|
||||||
|
background-color: var(--hlc)
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-order-radio:checked+.dsqjs-order-label {
|
||||||
|
background-color: var(--kbd)
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-tab-active>span:after {
|
||||||
|
background-color: #2e9fff
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-footer,#dsqjs .dsqjs-meta {
|
||||||
|
color: var(--t-l)
|
||||||
|
}
|
||||||
|
|
||||||
|
#dsqjs .dsqjs-post-body blockquote {
|
||||||
|
border-color: var(--border)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -34,7 +34,7 @@ class StackGallery {
|
|||||||
private loadItems(container: HTMLElement) {
|
private loadItems(container: HTMLElement) {
|
||||||
this.items = [];
|
this.items = [];
|
||||||
|
|
||||||
const figures = container.querySelectorAll('figure');
|
const figures = container.querySelectorAll('figure.gallery-image');
|
||||||
|
|
||||||
for (const el of figures) {
|
for (const el of figures) {
|
||||||
const figcaption = el.querySelector('figcaption'),
|
const figcaption = el.querySelector('figcaption'),
|
||||||
@@ -57,7 +57,7 @@ class StackGallery {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static createGallery(container: HTMLElement) {
|
public static createGallery(container: HTMLElement) {
|
||||||
const figuresEl = container.querySelectorAll('figure');
|
const figuresEl = container.querySelectorAll('figure.gallery-image');
|
||||||
|
|
||||||
let currentGallery = [];
|
let currentGallery = [];
|
||||||
|
|
||||||
|
|||||||
+147
@@ -0,0 +1,147 @@
|
|||||||
|
module:
|
||||||
|
hugoVersion:
|
||||||
|
extended: true
|
||||||
|
min: "0.87.0"
|
||||||
|
|
||||||
|
params:
|
||||||
|
mainSections:
|
||||||
|
- post
|
||||||
|
featuredImageField: image
|
||||||
|
rssFullContent: true
|
||||||
|
favicon:
|
||||||
|
|
||||||
|
footer:
|
||||||
|
since:
|
||||||
|
customText:
|
||||||
|
|
||||||
|
dateFormat:
|
||||||
|
published: Jan 02, 2006
|
||||||
|
lastUpdated: Jan 02, 2006 15:04 MST
|
||||||
|
|
||||||
|
sidebar:
|
||||||
|
emoji:
|
||||||
|
subtitle:
|
||||||
|
avatar:
|
||||||
|
enabled: true
|
||||||
|
local: true
|
||||||
|
src: img/avatar.png
|
||||||
|
|
||||||
|
article:
|
||||||
|
math: false
|
||||||
|
toc: true
|
||||||
|
readingTime: true
|
||||||
|
license:
|
||||||
|
enabled: false
|
||||||
|
default: Licensed under CC BY-NC-SA 4.0
|
||||||
|
|
||||||
|
comments:
|
||||||
|
enabled: false
|
||||||
|
provider: disqus
|
||||||
|
|
||||||
|
disqusjs:
|
||||||
|
shortname:
|
||||||
|
apiUrl:
|
||||||
|
apiKey:
|
||||||
|
admin:
|
||||||
|
adminLabel:
|
||||||
|
|
||||||
|
utterances:
|
||||||
|
repo:
|
||||||
|
issueTerm: pathname
|
||||||
|
label:
|
||||||
|
|
||||||
|
remark42:
|
||||||
|
host:
|
||||||
|
site:
|
||||||
|
locale:
|
||||||
|
|
||||||
|
vssue:
|
||||||
|
platform:
|
||||||
|
owner:
|
||||||
|
repo:
|
||||||
|
clientId:
|
||||||
|
clientSecret:
|
||||||
|
autoCreateIssue: false
|
||||||
|
|
||||||
|
# Waline client configuration see: https://waline.js.org/en/reference/client.html
|
||||||
|
waline:
|
||||||
|
serverURL:
|
||||||
|
lang:
|
||||||
|
visitor:
|
||||||
|
avatar:
|
||||||
|
emoji:
|
||||||
|
- https://cdn.jsdelivr.net/gh/walinejs/emojis/weibo
|
||||||
|
requiredMeta:
|
||||||
|
- name
|
||||||
|
- email
|
||||||
|
- url
|
||||||
|
placeholder:
|
||||||
|
locale:
|
||||||
|
admin: Admin
|
||||||
|
|
||||||
|
twikoo:
|
||||||
|
envId:
|
||||||
|
region:
|
||||||
|
path:
|
||||||
|
lang:
|
||||||
|
|
||||||
|
giscus:
|
||||||
|
repo:
|
||||||
|
repoID:
|
||||||
|
category:
|
||||||
|
categoryID:
|
||||||
|
mapping:
|
||||||
|
lightTheme:
|
||||||
|
darkTheme:
|
||||||
|
reactionsEnabled: 1
|
||||||
|
emitMetadata: 0
|
||||||
|
|
||||||
|
gitalk:
|
||||||
|
owner:
|
||||||
|
admin:
|
||||||
|
repo:
|
||||||
|
clientID:
|
||||||
|
clientSecret:
|
||||||
|
|
||||||
|
cusdis:
|
||||||
|
host:
|
||||||
|
id:
|
||||||
|
|
||||||
|
widgets:
|
||||||
|
enabled:
|
||||||
|
- search
|
||||||
|
- archives
|
||||||
|
- tag-cloud
|
||||||
|
|
||||||
|
archives:
|
||||||
|
limit: 5
|
||||||
|
|
||||||
|
tagCloud:
|
||||||
|
limit: 10
|
||||||
|
|
||||||
|
opengraph:
|
||||||
|
twitter:
|
||||||
|
# Your Twitter username
|
||||||
|
site:
|
||||||
|
|
||||||
|
# Available values: summary, summary_large_image
|
||||||
|
card: summary_large_image
|
||||||
|
|
||||||
|
defaultImage:
|
||||||
|
opengraph:
|
||||||
|
enabled: false
|
||||||
|
local: false
|
||||||
|
src:
|
||||||
|
|
||||||
|
colorScheme:
|
||||||
|
# Display toggle
|
||||||
|
toggle: true
|
||||||
|
|
||||||
|
# Available values: auto, light, dark
|
||||||
|
default: auto
|
||||||
|
|
||||||
|
imageProcessing:
|
||||||
|
cover:
|
||||||
|
enabled: true
|
||||||
|
content:
|
||||||
|
enabled: true
|
||||||
+27
-1
@@ -14,6 +14,10 @@ googleAnalytics:
|
|||||||
# Available values: en, fr, id, ja, ko, pt-br, zh-cn, es, de, nl, it
|
# Available values: en, fr, id, ja, ko, pt-br, zh-cn, es, de, nl, it
|
||||||
DefaultContentLanguage: en
|
DefaultContentLanguage: en
|
||||||
|
|
||||||
|
# Set hasCJKLanguage to true if DefaultContentLanguage is in [zh-cn ja ko]
|
||||||
|
# This will make .Summary and .WordCount behave correctly for CJK languages.
|
||||||
|
hasCJKLanguage: false
|
||||||
|
|
||||||
permalinks:
|
permalinks:
|
||||||
post: /p/:slug/
|
post: /p/:slug/
|
||||||
page: /:slug/
|
page: /:slug/
|
||||||
@@ -53,6 +57,13 @@ params:
|
|||||||
enabled: true
|
enabled: true
|
||||||
provider: disqus
|
provider: disqus
|
||||||
|
|
||||||
|
disqusjs:
|
||||||
|
shortname:
|
||||||
|
apiUrl:
|
||||||
|
apiKey:
|
||||||
|
admin:
|
||||||
|
adminLabel:
|
||||||
|
|
||||||
utterances:
|
utterances:
|
||||||
repo:
|
repo:
|
||||||
issueTerm: pathname
|
issueTerm: pathname
|
||||||
@@ -104,6 +115,17 @@ params:
|
|||||||
reactionsEnabled: 1
|
reactionsEnabled: 1
|
||||||
emitMetadata: 0
|
emitMetadata: 0
|
||||||
|
|
||||||
|
gitalk:
|
||||||
|
owner:
|
||||||
|
admin:
|
||||||
|
repo:
|
||||||
|
clientID:
|
||||||
|
clientSecret:
|
||||||
|
|
||||||
|
cusdis:
|
||||||
|
host:
|
||||||
|
id:
|
||||||
|
|
||||||
widgets:
|
widgets:
|
||||||
enabled:
|
enabled:
|
||||||
- search
|
- search
|
||||||
@@ -144,7 +166,7 @@ params:
|
|||||||
enabled: true
|
enabled: true
|
||||||
|
|
||||||
### Custom menu
|
### Custom menu
|
||||||
### See https://docs.stack.jimmycai.com/configuration/custom-menu
|
### See https://docs.stack.jimmycai.com/configuration/custom-menu.html
|
||||||
### To remove about, archive and search page menu item, remove `menu` field from their FrontMatter
|
### To remove about, archive and search page menu item, remove `menu` field from their FrontMatter
|
||||||
menu:
|
menu:
|
||||||
main:
|
main:
|
||||||
@@ -169,6 +191,10 @@ related:
|
|||||||
weight: 200
|
weight: 200
|
||||||
|
|
||||||
markup:
|
markup:
|
||||||
|
goldmark:
|
||||||
|
renderer:
|
||||||
|
## Set to true if you have HTML content inside Markdown
|
||||||
|
unsafe: false
|
||||||
tableOfContents:
|
tableOfContents:
|
||||||
endLevel: 4
|
endLevel: 4
|
||||||
ordered: true
|
ordered: true
|
||||||
|
|||||||
@@ -32,3 +32,7 @@ Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-manageme
|
|||||||
## Vimeo Simple Shortcode
|
## Vimeo Simple Shortcode
|
||||||
|
|
||||||
{{< vimeo_simple 48912912 >}}
|
{{< vimeo_simple 48912912 >}}
|
||||||
|
|
||||||
|
## bilibilibi Shortcode
|
||||||
|
|
||||||
|
{{< bilibili av498363026 >}}
|
||||||
|
|||||||
+19
-2
@@ -17,23 +17,37 @@ list:
|
|||||||
other: Unterabschnitte
|
other: Unterabschnitte
|
||||||
|
|
||||||
article:
|
article:
|
||||||
|
back:
|
||||||
|
other: Zurück
|
||||||
|
|
||||||
|
tableOfContents:
|
||||||
|
other: Inhaltsverzeichnis
|
||||||
|
|
||||||
relatedContents:
|
relatedContents:
|
||||||
other: Verwandte Inhalte
|
other: Verwandte Inhalte
|
||||||
|
|
||||||
lastUpdatedOn:
|
lastUpdatedOn:
|
||||||
other: Zuletzt aktualisiert am
|
other: Zuletzt aktualisiert am
|
||||||
|
|
||||||
|
readingTime:
|
||||||
|
one: "{{ .Count }} Minute Lesezeit"
|
||||||
|
other: "{{ .Count }} Minuten Lesezeit"
|
||||||
|
|
||||||
notFound:
|
notFound:
|
||||||
title:
|
title:
|
||||||
other: Seite nicht gefunden
|
other: Seite nicht gefunden
|
||||||
|
|
||||||
subtitle:
|
subtitle:
|
||||||
other: Diese Seite existiert nicht.
|
other: Diese Seite existiert nicht
|
||||||
|
|
||||||
widget:
|
widget:
|
||||||
archives:
|
archives:
|
||||||
title:
|
title:
|
||||||
other: Archiv
|
other: Archiv
|
||||||
|
|
||||||
more:
|
more:
|
||||||
other: Weitere
|
other: Weitere
|
||||||
|
|
||||||
tagCloud:
|
tagCloud:
|
||||||
title:
|
title:
|
||||||
other: Schlagwörter
|
other: Schlagwörter
|
||||||
@@ -41,13 +55,16 @@ widget:
|
|||||||
search:
|
search:
|
||||||
title:
|
title:
|
||||||
other: Suche
|
other: Suche
|
||||||
|
|
||||||
placeholder:
|
placeholder:
|
||||||
other: Etwas tippen...
|
other: Etwas tippen...
|
||||||
|
|
||||||
resultTitle:
|
resultTitle:
|
||||||
other: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
|
other: "#PAGES_COUNT Seiten (#TIME_SECONDS Sekunden)"
|
||||||
|
|
||||||
footer:
|
footer:
|
||||||
builtWith:
|
builtWith:
|
||||||
other: Erstellt mit {{ .Generator }}
|
other: Erstellt mit {{ .Generator }}
|
||||||
|
|
||||||
designedBy:
|
designedBy:
|
||||||
other: Theme {{ .Theme }} gestaltet von {{ .DesignedBy }}
|
other: Theme {{ .Theme }} gestaltet von {{ .DesignedBy }}
|
||||||
|
|||||||
+4
-4
@@ -30,15 +30,15 @@ article:
|
|||||||
other: Last updated on
|
other: Last updated on
|
||||||
|
|
||||||
readingTime:
|
readingTime:
|
||||||
one: "{{ .Count }} min read"
|
one: "{{ .Count }} minute read"
|
||||||
### Seems that there's no need to add 's' even if it's plural in English
|
other: "{{ .Count }} minute read"
|
||||||
other: "{{ .Count }} min read"
|
|
||||||
|
|
||||||
notFound:
|
notFound:
|
||||||
title:
|
title:
|
||||||
other: Not Found
|
other: Not Found
|
||||||
|
|
||||||
subtitle:
|
subtitle:
|
||||||
other: This page does not exist.
|
other: This page does not exist
|
||||||
|
|
||||||
widget:
|
widget:
|
||||||
archives:
|
archives:
|
||||||
|
|||||||
@@ -17,14 +17,26 @@ list:
|
|||||||
other: Subsecciones
|
other: Subsecciones
|
||||||
|
|
||||||
article:
|
article:
|
||||||
|
back:
|
||||||
|
other: Volver
|
||||||
|
|
||||||
|
tableOfContents:
|
||||||
|
other: Tabla de contenido
|
||||||
|
|
||||||
relatedContents:
|
relatedContents:
|
||||||
other: Contenidos relacionados
|
other: Contenidos relacionados
|
||||||
|
|
||||||
lastUpdatedOn:
|
lastUpdatedOn:
|
||||||
other: Última vez actualizado
|
other: Última vez actualizado
|
||||||
|
|
||||||
|
readingTime:
|
||||||
|
one: "{{ .Count }} minuto a leer"
|
||||||
|
other: "{{ .Count }} minutos a leer"
|
||||||
|
|
||||||
notFound:
|
notFound:
|
||||||
title:
|
title:
|
||||||
other: No Encontrado
|
other: No Encontrado
|
||||||
|
|
||||||
subtitle:
|
subtitle:
|
||||||
other: Esta página no existe
|
other: Esta página no existe
|
||||||
|
|
||||||
@@ -32,8 +44,10 @@ widget:
|
|||||||
archives:
|
archives:
|
||||||
title:
|
title:
|
||||||
other: Archivo
|
other: Archivo
|
||||||
|
|
||||||
more:
|
more:
|
||||||
other: Más
|
other: Más
|
||||||
|
|
||||||
tagCloud:
|
tagCloud:
|
||||||
title:
|
title:
|
||||||
other: Etiquetas
|
other: Etiquetas
|
||||||
@@ -41,13 +55,16 @@ widget:
|
|||||||
search:
|
search:
|
||||||
title:
|
title:
|
||||||
other: Búsqueda
|
other: Búsqueda
|
||||||
|
|
||||||
placeholder:
|
placeholder:
|
||||||
other: Teclea algo...
|
other: Teclea algo...
|
||||||
|
|
||||||
resultTitle:
|
resultTitle:
|
||||||
other: "#PAGES_COUNT páginas en (#TIME_SECONDS segundos)"
|
other: "#PAGES_COUNT páginas en (#TIME_SECONDS segundos)"
|
||||||
|
|
||||||
footer:
|
footer:
|
||||||
builtWith:
|
builtWith:
|
||||||
other: Creado con {{ .Generator }}
|
other: Creado con {{ .Generator }}
|
||||||
|
|
||||||
designedBy:
|
designedBy:
|
||||||
other: Tema {{ .Theme }} diseñado por {{ .DesignedBy }}
|
other: Tema {{ .Theme }} diseñado por {{ .DesignedBy }}
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ article:
|
|||||||
lastUpdatedOn:
|
lastUpdatedOn:
|
||||||
other: Ostatnio zaktualizowany
|
other: Ostatnio zaktualizowany
|
||||||
|
|
||||||
|
readingTime:
|
||||||
|
one: "Przeczytasz w {{ .Count }} minutę"
|
||||||
|
other: "Przeczytasz w {{ .Count }} minut"
|
||||||
|
|
||||||
notFound:
|
notFound:
|
||||||
title:
|
title:
|
||||||
other: Nie znaleziono
|
other: Nie znaleziono
|
||||||
|
|||||||
@@ -1,30 +1,46 @@
|
|||||||
{{- $image := .Page.Resources.GetMatch (printf "%s" (.Destination | safeURL)) -}}
|
{{- $image := .Page.Resources.GetMatch (printf "%s" (.Destination | safeURL)) -}}
|
||||||
{{- if and $image (ne (path.Ext .Destination) ".svg") -}}
|
{{- $Permalink := .Destination | relURL | safeURL -}}
|
||||||
{{- $alt := .PlainText | safeHTML -}}
|
{{- $alt := .PlainText | safeHTML -}}
|
||||||
<figure style="flex-grow: {{ div (mul $image.Width 100) $image.Height }}; flex-basis: {{ div (mul $image.Width 240) $image.Height }}px">
|
{{- $Width := 0 -}}
|
||||||
<a href="{{ $image.RelPermalink }}" data-size="{{ $image.Width }}x{{ $image.Height }}">
|
{{- $Height := 0 -}}
|
||||||
{{- $Permalink := $image.RelPermalink -}}
|
{{- $Srcset := "" -}}
|
||||||
{{- $Width := $image.Width -}}
|
|
||||||
{{- $Height := $image.Height -}}
|
|
||||||
{{- $Srcset := "" -}}
|
|
||||||
|
|
||||||
{{- if (default true .Page.Site.Params.imageProcessing.content.enabled) -}}
|
{{/* SVG and external images won't work with gallery layout, because their width and height attributes are unknown */}}
|
||||||
{{- $small := $image.Resize "480x" -}}
|
{{- $galleryImage := false -}}
|
||||||
{{- $big := $image.Resize "1024x" -}}
|
|
||||||
{{- $Srcset = printf "%s 480w, %s 1024w" $small.RelPermalink $big.RelPermalink -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
<img src="{{ $Permalink }}"
|
{{- if $image -}}
|
||||||
{{ with $Srcset }}srcset="{{ . }}"{{ end }}
|
{{- $notSVG := ne (path.Ext .Destination) ".svg" -}}
|
||||||
width="{{ $Width }}"
|
{{- $Permalink = $image.RelPermalink -}}
|
||||||
height="{{ $Height }}"
|
|
||||||
loading="lazy"
|
{{- if $notSVG -}}
|
||||||
{{ with $alt }}alt="{{ . }}"{{ end }}>
|
{{- $Width = $image.Width -}}
|
||||||
</a>
|
{{- $Height = $image.Height -}}
|
||||||
{{ with $alt }}
|
{{- $galleryImage = true -}}
|
||||||
<figcaption>{{ . | markdownify }}</figcaption>
|
|
||||||
{{ end }}
|
{{- if (default true .Page.Site.Params.imageProcessing.content.enabled) -}}
|
||||||
</figure>
|
{{- $small := $image.Resize `480x` -}}
|
||||||
{{- else -}}
|
{{- $big := $image.Resize `1024x` -}}
|
||||||
<img src="{{ .Destination | relURL | safeURL }}" alt="{{ .Text }}" {{ with .Title }} title="{{ . }}"{{ end }} />
|
{{- $Srcset = printf `%s 480w, %s 1024w` $small.RelPermalink $big.RelPermalink -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
<figure
|
||||||
|
{{ if $galleryImage }}
|
||||||
|
class="gallery-image"
|
||||||
|
style="
|
||||||
|
flex-grow: {{ div (mul $image.Width 100) $image.Height }};
|
||||||
|
flex-basis: {{ div (mul $image.Width 240) $image.Height }}px"
|
||||||
|
{{ end }}>
|
||||||
|
<a href="{{ $Permalink }}" {{ if $galleryImage }}data-size="{{ $image.Width }}x{{ $image.Height }}"{{ end }}>
|
||||||
|
<img src="{{ $Permalink }}"
|
||||||
|
{{ with $Width }}width="{{ . }}"{{ end }}
|
||||||
|
{{ with $Height }}height="{{ . }}"{{ end }}
|
||||||
|
{{ with $Srcset }}srcset="{{ . }}"{{ end }}
|
||||||
|
loading="lazy"
|
||||||
|
{{ with $alt }}alt="{{ . }}"{{ end }}>
|
||||||
|
</a>
|
||||||
|
{{ with $alt }}
|
||||||
|
<figcaption>{{ . | markdownify }}</figcaption>
|
||||||
|
{{ end }}
|
||||||
|
</figure>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
{{ partial "article/components/related-contents" . }}
|
{{ partial "article/components/related-contents" . }}
|
||||||
|
|
||||||
{{ if or (not (isset .Params "comments")) (eq .Params.comments "true")}}
|
{{ if not (eq .Params.comments false) }}
|
||||||
{{ partial "comments/include" . }}
|
{{ partial "comments/include" . }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<div id="cusdis_thread"
|
||||||
|
{{ if .Site.Params.comments.cusdis.host }}
|
||||||
|
data-host="{{ .Site.Params.comments.cusdis.host }}"
|
||||||
|
{{ else }}
|
||||||
|
data-host="https://cusdis.com"
|
||||||
|
{{ end }}
|
||||||
|
data-app-id="{{ .Site.Params.comments.cusdis.id }}"
|
||||||
|
data-page-id="{{ .File.UniqueID }}"
|
||||||
|
data-page-url="{{ .Permalink }}"
|
||||||
|
data-page-title="{{ .Title }}"></div>
|
||||||
|
<script async defer src="https://cusdis.com/js/cusdis.es.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function setCusdisTheme(theme) {
|
||||||
|
let cusdis = document.querySelector('#cusdis_thread iframe');
|
||||||
|
if (cusdis) {
|
||||||
|
window.CUSDIS.setTheme(theme)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener('onColorSchemeChange', (e) => {
|
||||||
|
setCusdisTheme(e.detail)
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
{{- $pc := .Site.Config.Privacy.Disqus -}}
|
||||||
|
{{- $disqusjs := .Site.Params.Comments.disqusjs -}}
|
||||||
|
{{- if and (not $pc.Disable) (and $disqusjs.Shortname $disqusjs.ApiKey) -}}
|
||||||
|
|
||||||
|
{{- $style := resources.Get "scss/partials/comments/disqusjs.scss" | resources.ToCSS | minify -}}
|
||||||
|
<link rel="stylesheet" href="{{ $style.RelPermalink }}">
|
||||||
|
|
||||||
|
<div class="disqus-container">
|
||||||
|
<div id="disqus_thread"></div>
|
||||||
|
<script type="application/javascript">
|
||||||
|
let disqusjs;
|
||||||
|
function loadDisqusJS() {
|
||||||
|
disqusjs = new DisqusJS({
|
||||||
|
shortname: {{ $disqusjs.Shortname }},
|
||||||
|
siteName: {{ .Site.Title }},
|
||||||
|
apikey: {{ $disqusjs.ApiKey }},
|
||||||
|
{{ with $disqusjs.ApiUrl }}api: {{ . }},{{ end }}
|
||||||
|
{{ with $disqusjs.Admin }}admin: {{ . }},{{ end }}
|
||||||
|
{{ with $disqusjs.AdminLabel }}adminLabel: {{ . }}{{ end }}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function lazyLoadDisqusJS() {
|
||||||
|
if (["localhost", "127.0.0.1"].indexOf(window.location.hostname) != -1) {
|
||||||
|
document.getElementById('disqus_thread').innerHTML = 'Disqus comments not available by default when the website is previewed locally.';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let d = document.createElement('script');
|
||||||
|
d.src = 'https://cdn.jsdelivr.net/npm/[email protected]/dist/disqus.js';
|
||||||
|
d.async = false;
|
||||||
|
document.body.appendChild(d);
|
||||||
|
d.onload = () => {
|
||||||
|
loadDisqusJS();
|
||||||
|
window.addEventListener('onColorSchemeChange', (e) => {
|
||||||
|
if (disqusjs) {
|
||||||
|
loadDisqusJS();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let runningOnBrowser = typeof window !== "undefined";
|
||||||
|
let isBot = runningOnBrowser && !("onscroll" in window) || typeof navigator !== "undefined" && /(gle|ing|ro|msn)bot|crawl|spider|yand|duckgo/i.test(navigator.userAgent);
|
||||||
|
let supportsIntersectionObserver = runningOnBrowser && "IntersectionObserver" in window;
|
||||||
|
|
||||||
|
if (!isBot && supportsIntersectionObserver) {
|
||||||
|
let disqus_observer = new IntersectionObserver(function(entries) {
|
||||||
|
if (entries[0].isIntersecting) {
|
||||||
|
lazyLoadDisqusJS();
|
||||||
|
disqus_observer.disconnect();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
disqus_observer.observe(document.getElementById('disqus_thread'));
|
||||||
|
} else {
|
||||||
|
lazyLoadDisqusJS();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
|
||||||
|
</div>
|
||||||
|
{{- end -}}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
{{- with .Site.Params.comments.gitalk -}}
|
||||||
|
<div id="gitalk-container"></div>
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://cdn.jsdelivr.net/npm/[email protected]/dist/gitalk.css"
|
||||||
|
/>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/gitalk.min.js"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/[email protected]/js/md5.min.js"></script>
|
||||||
|
<script>
|
||||||
|
const gitalk = new Gitalk({
|
||||||
|
clientID: "{{- .clientID -}}",
|
||||||
|
clientSecret: "{{- .clientSecret -}}",
|
||||||
|
repo: "{{- .repo -}}",
|
||||||
|
owner: "{{- .owner -}}",
|
||||||
|
admin: ["{{- .admin -}}"],
|
||||||
|
distractionFreeMode: false, // Facebook-like distraction free mode
|
||||||
|
id: md5(location.pathname), // Max Location.pathname Legth:75 https://github.com/gitalk/gitalk/issues/102
|
||||||
|
});
|
||||||
|
(function () {
|
||||||
|
if (
|
||||||
|
["localhost", "127.0.0.1"].indexOf(window.location.hostname) != -1
|
||||||
|
) {
|
||||||
|
document.getElementById("gitalk-container").innerHTML =
|
||||||
|
"Gitalk comments not available by default when the website is previewed locally.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
gitalk.render("gitalk-container");
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
{{ end }}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{{- $ThemeVersion := "3.1.0" -}}
|
{{- $ThemeVersion := "3.2.0" -}}
|
||||||
<footer class="site-footer">
|
<footer class="site-footer">
|
||||||
<section class="copyright">
|
<section class="copyright">
|
||||||
©
|
©
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<div class="video-wrapper">
|
<div class="video-wrapper">
|
||||||
<iframe src="//player.bilibili.com/player.html?{{ $basicQuery | safeURL }}&{{ $videoQuery | safeURL }}"
|
<iframe src="https://player.bilibili.com/player.html?{{ $basicQuery | safeURL }}&{{ $videoQuery | safeURL }}"
|
||||||
scrolling="no"
|
scrolling="no"
|
||||||
frameborder="no"
|
frameborder="no"
|
||||||
framespacing="0"
|
framespacing="0"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{{ $vid := .Get 0 }}
|
{{ $vid := .Get 0 }}
|
||||||
<div class="video-wrapper">
|
<div class="video-wrapper">
|
||||||
<iframe src="http://v.qq.com/txp/iframe/player.html?vid={{ $vid }}&auto=0"
|
<iframe src="https://v.qq.com/txp/iframe/player.html?vid={{ $vid }}&auto=0"
|
||||||
scrolling="no"
|
scrolling="no"
|
||||||
frameborder="no"
|
frameborder="no"
|
||||||
framespacing="0"
|
framespacing="0"
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
|
{{- $src := .Get "src" | default (.Get 0) -}}
|
||||||
<div class="video-wrapper">
|
<div class="video-wrapper">
|
||||||
<video
|
<video
|
||||||
controls
|
controls
|
||||||
|
src="{{- $src -}}"
|
||||||
{{ with .Get "poster" }}poster="{{- . -}}"{{ end }}
|
{{ with .Get "poster" }}poster="{{- . -}}"{{ end }}
|
||||||
{{ with .Get "src" }}src="{{- . -}}"{{ end }}
|
|
||||||
{{ with .Get "autoplay" }}autoplay{{ end }}
|
{{ with .Get "autoplay" }}autoplay{{ end }}
|
||||||
>
|
>
|
||||||
<p>
|
<p>
|
||||||
Your browser doesn't support HTML5 video. Here is a
|
Your browser doesn't support HTML5 video. Here is a
|
||||||
<a href="{{ with .Get "src" }}{{- . -}}{{ end }}">link to the video</a> instead.
|
<a href="{{- $src -}}">link to the video</a> instead.
|
||||||
</p>
|
</p>
|
||||||
</video>
|
</video>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+2
-2
@@ -6,7 +6,7 @@ license = "GPL-3.0-only"
|
|||||||
licenselink = "https://github.com/CaiJimmy/hugo-theme-stack/blob/master/LICENSE"
|
licenselink = "https://github.com/CaiJimmy/hugo-theme-stack/blob/master/LICENSE"
|
||||||
description = "Card-style Hugo theme designed for bloggers"
|
description = "Card-style Hugo theme designed for bloggers"
|
||||||
homepage = "https://github.com/CaiJimmy/hugo-theme-stack"
|
homepage = "https://github.com/CaiJimmy/hugo-theme-stack"
|
||||||
demosite = "https://theme-stack.jimmycai.com"
|
demosite = "https://demo.stack.jimmycai.com"
|
||||||
|
|
||||||
tags = ["blog", "responsive", "clean", "light", "dark", "personal"]
|
tags = ["blog", "responsive", "clean", "light", "dark", "personal"]
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ features = [
|
|||||||
"search",
|
"search",
|
||||||
]
|
]
|
||||||
|
|
||||||
min_version = "0.78.0"
|
min_version = "0.87.0"
|
||||||
|
|
||||||
[author]
|
[author]
|
||||||
name = "Jimmy Cai"
|
name = "Jimmy Cai"
|
||||||
|
|||||||
Reference in New Issue
Block a user