Compare commits

...
17 Commits
Author SHA1 Message Date
Jimmy CaiandGitHub b3088be62d feat: add default parameters to config.yaml (#394)
This will avoid those ugly errors caused by forgetting to copy exampleSite/config.yaml to the site folder
2021-10-16 10:14:06 +02:00
Jimmy CaiandGitHub 9859ea3f8b feat: add theme config.yaml (#393)
Add Hugo version requirement
2021-10-16 09:53:44 +02:00
WingLimandGitHub d8c9468c68 feat(comments): add Cusdis support (#372)
* feat: add cusdis support

* docs: add cusdis example config
2021-10-01 16:38:37 +02:00
zhixuanandGitHub 57bfea8338 fix(shortcodes): mixed content error with bilibili and tencent video (#365) 2021-09-24 20:32:53 +02:00
QIN2DIMandGitHub 7845f5dfe7 feat(config): add hasCJKLanguage parameter (#360) 2021-09-24 20:22:58 +02:00
CookiekiraandGitHub 66bd8a2997 feat(comments): add Gitalk support (#351) 2021-09-18 10:03:08 +02:00
Christopher John JacksonandGitHub 00c8616931 fix(article/comments): accept boolean true in .Params.comments (#352) 2021-09-17 21:29:19 +02:00
Jimmy CaiandGitHub 5693c4bf7a doc: add markup.goldmark.renderer.unsafe option in config.yaml 2021-09-03 19:05:10 +02:00
Jimmy CaiandGitHub 5bf8bdcde2 chore: change demo site link 2021-08-31 11:08:36 +02:00
Matthias ThymandGitHub 9b75823f68 refactor(i18n): Suggest improvements English translation (#329)
No need to shorten minutes
Remove period from subtitle on 404 page
2021-08-30 15:52:29 +02:00
zhixuanandGitHub 9c7e73646c feat(article): add positional parameter for video shortcode (#331) 2021-08-26 18:50:03 +02:00
Matthias ThymandGitHub 080c86ec79 feat(i18n): add German and Spanish translations for new features and refactor (#328)
* feat(i18n): add German translations for new features and refactor

add translation for feature `back`
add translation for feature `tableOfContents`
add translation for feature `readingTime`
fix translation for feature `resultTitle`
add newlines according to i18n en config

* feat(i18n): add Spanish translations for new features and refactor

add translation for feature `back`
add translation for feature `tableOfContents`
add translation for feature `readingTime`
add newlines according to i18n en config
2021-08-26 18:23:55 +02:00
Jimmy CaiandGitHub e24f5672c3 release: 3.2.0 2021-08-25 12:25:11 +02:00
MikDal002andGitHub 2013c50abe feat(i18n): add PL translation for reading time (#325) 2021-08-25 12:23:50 +02:00
Jimmy CaiandGitHub 626265bcfd refactor(article): better support for svg and external images (#326) 2021-08-25 12:20:15 +02:00
Franziskus KieferandGitHub fe94466ec4 fix(config): doc link (#323) 2021-08-24 12:16:27 +02:00
9f734a0647 feat(comments): DisqusJS integration (#307)
* add comment provider: DisqusJS

* Simplify `if` condition, and format code

* Load disqusjs.scss only when it's enabled

* Use `let` instead of `var`

Co-authored-by: sspirits <[email protected]>
Co-authored-by: Jimmy Cai <[email protected]>
2021-08-15 19:19:51 +02:00
19 changed files with 787 additions and 46 deletions
+394
View File
@@ -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)
}
}
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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 }}
+4
View File
@@ -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
+42 -26
View File
@@ -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>
+1 -1
View File
@@ -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 -1
View File
@@ -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">
&copy; &copy;
+1 -1
View File
@@ -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 -1
View File
@@ -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"
+3 -2
View File
@@ -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
View File
@@ -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"