feat(website): vendor PaperMod theme, remove git submodule (#125)
Replace the git submodule with directly tracked files so that `git commit .` no longer fails with 'does not have a commit checked out'. Removed .github/ from the vendored copy since upstream CI workflows are not needed here.
This commit is contained in:
@@ -1,3 +0,0 @@
|
|||||||
[submodule "website/themes/PaperMod"]
|
|
||||||
path = website/themes/PaperMod
|
|
||||||
url = https://github.com/adityatelange/hugo-PaperMod.git
|
|
||||||
Submodule website/themes/PaperMod deleted from 154d006e01
@@ -0,0 +1,22 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 nanxiaobei and adityatelange
|
||||||
|
Copyright (c) 2021-2026 adityatelange
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
# Hugo PaperMod
|
||||||
|
|
||||||
|
**A fast, clean, and responsive theme for [Hugo](https://gohugo.io/).**
|
||||||
|
|
||||||
|
[](https://themes.gohugo.io/themes/hugo-papermod/)
|
||||||
|
[](https://github.com/gohugoio/hugo/releases/tag/v0.146.0)
|
||||||
|
[](https://discord.gg/ahpmTvhVmp)
|
||||||
|
|
||||||
|
> Based on [hugo-paper](https://github.com/nanxiaobei/hugo-paper/tree/4330c8b12aa48bfdecbcad6ad66145f679a430b3), with additional features and customization options.
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Live Demo</td>
|
||||||
|
<td><a href="https://adityatelange.github.io/hugo-PaperMod/">adityatelange.github.io/hugo-PaperMod</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Documentation 📚</td>
|
||||||
|
<td><a href="https://github.com/adityatelange/hugo-PaperMod/wiki">Github Wiki</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Example Site Source</td>
|
||||||
|
<td><a href="https://github.com/adityatelange/hugo-PaperMod/tree/exampleSite">exampleSite branch</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="https://www.star-history.com/adityatelange/hugo-papermod"><img src="https://api.star-history.com/badge?repo=adityatelange/hugo-PaperMod&theme=dark" alt="Star History Rank" /></a></td>
|
||||||
|
<td><a href="https://ko-fi.com/H2H229ZWH"><img src="https://ko-fi.com/img/githubbutton_sm.svg" alt="ko-fi" /></a></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="https://user-images.githubusercontent.com/21258296/114303440-bfc0ae80-9aeb-11eb-8cfa-48a4bb385a6d.png" alt="Mockup image" title="Mockup"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Features 💥
|
||||||
|
|
||||||
|
`☄️ Fast | ☁️ Fluent | 🌙 Smooth | 📱 Responsive`
|
||||||
|
|
||||||
|
- **Asset pipeline** -- Hugo's built-in asset generator with fingerprinting, bundling, and minification.
|
||||||
|
- **Three layout modes** -- [Regular](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#regular-mode-default-mode), [Home-Info](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#home-info-mode), and [Profile](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#profile-mode).
|
||||||
|
- **Light and dark themes** -- Automatic switching based on browser preference, plus a manual toggle.
|
||||||
|
- **Multilingual support** -- Includes a built-in language selector.
|
||||||
|
- **Search** -- Client-side search powered by Fuse.js.
|
||||||
|
- **SEO optimized** -- Open Graph, Twitter Cards, and Schema.org structured data out of the box.
|
||||||
|
- **Cover images** -- Per-post cover images with responsive image support.
|
||||||
|
- **Table of contents** -- Auto-generated from heading structure.
|
||||||
|
- **Multiple authors** -- Native support for multi-author sites.
|
||||||
|
- **Social icons and share buttons** -- Configurable social links and per-post sharing.
|
||||||
|
- **Breadcrumb navigation**
|
||||||
|
- **Post archives and taxonomies**
|
||||||
|
- **Code block copy buttons** -- One-click copying with Chroma syntax highlighting.
|
||||||
|
- **Related post suggestions**
|
||||||
|
- **Zero JS build dependencies** -- No webpack, Node.js, or other tooling required.
|
||||||
|
|
||||||
|
| Topic | Description |
|
||||||
|
| ------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
|
||||||
|
| **[Installation guide](https://github.com/adityatelange/hugo-PaperMod/wiki/Installation)** | Detailed installation and update instructions |
|
||||||
|
| **[Features wiki page](https://github.com/adityatelange/hugo-PaperMod/wiki/Features)** | In-depth explanations of all features |
|
||||||
|
| **[FAQ wiki](https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs)** | Common questions and configuration walkthroughs |
|
||||||
|
| **[Icons wiki](https://github.com/adityatelange/hugo-PaperMod/wiki/Icons)** | Documentation for social icons and share icons |
|
||||||
|
| **[Variables wiki](https://github.com/adityatelange/hugo-PaperMod/wiki/Variables)** | List of all available template variables |
|
||||||
|
| **[Overiding templates](https://github.com/adityatelange/hugo-PaperMod/wiki/Template_Overrides)** | Guide to customizing templates without forking |
|
||||||
|
| **[Releases](https://github.com/adityatelange/hugo-PaperMod/releases)** | Detailed history of releases |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Performance ☄️
|
||||||
|
|
||||||
|
PaperMod consistently scores near-perfect results on [Pagespeed Insights](https://pagespeed.web.dev/report?url=https://adityatelange.github.io/hugo-PaperMod/).
|
||||||
|
|
||||||
|
<img width="481" height="116" alt="image" src="https://github.com/user-attachments/assets/497d831b-d143-4a46-bc11-b1d7f8ef4a83" />
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Support 🫶
|
||||||
|
|
||||||
|
- Star this repository to show your support.
|
||||||
|
- Share PaperMod with others who might find it useful.
|
||||||
|
- Sponsor the project on [GitHub Sponsors](https://github.com/sponsors/adityatelange) or [Ko-Fi](https://ko-fi.com/adityatelange).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Special Thanks 🌟
|
||||||
|
|
||||||
|
- [Highlight.js](https://github.com/highlightjs/highlight.js)
|
||||||
|
- [Fuse.js](https://github.com/krisk/fuse)
|
||||||
|
- [Feather Icons](https://github.com/feathericons/feather)
|
||||||
|
- [Simple Icons](https://github.com/simple-icons/simple-icons)
|
||||||
|
- All contributors and supporters
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Stargazers 📈
|
||||||
|
|
||||||
|
[](https://starchart.cc/adityatelange/hugo-PaperMod)
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
.not-found {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 80%;
|
||||||
|
font-size: 160px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
.archive-posts {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-year {
|
||||||
|
margin-top: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-year:not(:last-of-type) {
|
||||||
|
border-bottom: 2px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-month {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-month-header {
|
||||||
|
margin: 25px 0;
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-month:not(:last-of-type) {
|
||||||
|
border-bottom: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-entry {
|
||||||
|
position: relative;
|
||||||
|
padding: 5px;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-entry-title {
|
||||||
|
margin: 5px 0;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-count,
|
||||||
|
.archive-meta {
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
.footer,
|
||||||
|
.top-link {
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
max-width: calc(var(--main-width) + var(--gap) * 2);
|
||||||
|
margin: auto;
|
||||||
|
padding: calc((var(--footer-height) - var(--gap)) / 2) var(--gap);
|
||||||
|
text-align: center;
|
||||||
|
line-height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer span {
|
||||||
|
margin-inline-start: 1px;
|
||||||
|
margin-inline-end: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer span:last-child {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer a {
|
||||||
|
color: inherit;
|
||||||
|
text-underline-offset: 0.25rem;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-link {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 4rem;
|
||||||
|
right: 2rem;
|
||||||
|
z-index: 99;
|
||||||
|
background: var(--tertiary);
|
||||||
|
width: 2.5rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 64px;
|
||||||
|
transition: visibility .3s, opacity .3s cubic-bezier(0.4, 0, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
visibility: hidden;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-link,
|
||||||
|
.top-link svg {
|
||||||
|
filter: drop-shadow(0px 0px 0px var(--theme));
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer a:hover,
|
||||||
|
.top-link:hover {
|
||||||
|
color: var(--primary);
|
||||||
|
}
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
.header-nav {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
max-width: calc(var(--nav-width) + var(--gap) * 2);
|
||||||
|
margin: auto;
|
||||||
|
line-height: var(--header-height);
|
||||||
|
padding: 0 var(--gap);
|
||||||
|
column-gap: var(--gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-nav a {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo,
|
||||||
|
.menu {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: 0.55rem;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo a {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 700;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
column-gap: 0.55rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo a img,
|
||||||
|
.logo a svg {
|
||||||
|
pointer-events: none;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-toggle {
|
||||||
|
padding: 0 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] .moon {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="light"] .sun {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo-switches {
|
||||||
|
display: inline-flex;
|
||||||
|
gap: 0.4rem;
|
||||||
|
align-items: inherit;
|
||||||
|
min-height: stretch;
|
||||||
|
flex-wrap: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo-switches>* {
|
||||||
|
min-height: inherit;
|
||||||
|
align-items: center;
|
||||||
|
display: inline-flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-sep {
|
||||||
|
color: var(--secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.lang-menu * {
|
||||||
|
display: inherit;
|
||||||
|
min-height: inherit;
|
||||||
|
align-items: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lang-menu a {
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 500;
|
||||||
|
padding: 0 0.4rem;
|
||||||
|
display: inline-flex
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu {
|
||||||
|
list-style: none;
|
||||||
|
word-break: keep-all;
|
||||||
|
overflow-x: auto;
|
||||||
|
white-space: nowrap;
|
||||||
|
column-gap: var(--gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu a {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu .active {
|
||||||
|
font-weight: 500;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-underline-offset: 0.3rem;
|
||||||
|
text-decoration-thickness: 2px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
.main {
|
||||||
|
position: relative;
|
||||||
|
min-height: calc(100vh - var(--header-height) - var(--footer-height));
|
||||||
|
max-width: calc(var(--main-width) + var(--gap) * 2);
|
||||||
|
margin: auto;
|
||||||
|
padding: var(--gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-header h1 {
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination a {
|
||||||
|
color: var(--theme);
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 36px;
|
||||||
|
background: var(--primary);
|
||||||
|
border-radius: calc(36px / 2);
|
||||||
|
padding: 0 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination .next {
|
||||||
|
margin-inline-start: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.social-icons a {
|
||||||
|
display: inline-flex;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.social-icons a svg {
|
||||||
|
height: 26px;
|
||||||
|
width: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
direction: ltr;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.highlight,
|
||||||
|
pre {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.copy-code {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 4px;
|
||||||
|
right: 4px;
|
||||||
|
color: rgba(255, 255, 255, 0.8);
|
||||||
|
background: rgba(78, 78, 78, 0.8);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 0 5px;
|
||||||
|
font-size: 14px;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.highlight:hover .copy-code,
|
||||||
|
pre:hover .copy-code {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
@@ -0,0 +1,253 @@
|
|||||||
|
.md-content h3,
|
||||||
|
.md-content h4,
|
||||||
|
.md-content h5,
|
||||||
|
.md-content h6 {
|
||||||
|
margin: 24px 0 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content h1 {
|
||||||
|
margin: 40px auto 32px;
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content h2 {
|
||||||
|
margin: 32px auto 24px;
|
||||||
|
font-size: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content h3 {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content h4 {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content h5 {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content h6 {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content a:not(.anchor) {
|
||||||
|
text-underline-offset: 0.3rem;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content del {
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content dl:not(:last-child),
|
||||||
|
.md-content ol:not(:last-child),
|
||||||
|
.md-content p:not(:last-child),
|
||||||
|
.md-content figure:not(:last-child),
|
||||||
|
.md-content ul:not(:last-child) {
|
||||||
|
margin-bottom: var(--content-gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content ol,
|
||||||
|
.md-content ul {
|
||||||
|
padding-inline-start: 1.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content li {
|
||||||
|
margin-top: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content li p {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content dl {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content dt {
|
||||||
|
width: 25%;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content dd {
|
||||||
|
width: 75%;
|
||||||
|
margin-inline-start: 0;
|
||||||
|
padding-inline-start: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content dd~dd,
|
||||||
|
.md-content dt~dt {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content table {
|
||||||
|
margin-bottom: var(--content-gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content table th,
|
||||||
|
.md-content table:not(.highlighttable, .highlight table, .gist .highlight) td {
|
||||||
|
min-width: 80px;
|
||||||
|
padding: 6px 13px;
|
||||||
|
line-height: 1.5;
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content table th {
|
||||||
|
text-align: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content table:not(.highlighttable) td code:only-child {
|
||||||
|
margin: auto 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content .highlight table {
|
||||||
|
border-radius: var(--radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content .highlight:not(table) {
|
||||||
|
margin-bottom: var(--content-gap);
|
||||||
|
background: var(--code-block-bg) !important;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
direction: ltr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content li>.highlight {
|
||||||
|
margin-inline-end: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content ul pre {
|
||||||
|
margin-inline-start: calc(var(--gap) * -2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content .highlight pre {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content .highlighttable {
|
||||||
|
table-layout: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content .highlighttable td:first-child {
|
||||||
|
width: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content .highlighttable td .linenodiv {
|
||||||
|
padding-inline-end: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content .highlighttable td .highlight,
|
||||||
|
.md-content .highlighttable td .linenodiv pre {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content code {
|
||||||
|
padding: 0.2rem 0.3rem;
|
||||||
|
font-size: 0.78em;
|
||||||
|
line-height: 1.5;
|
||||||
|
background: var(--code-bg);
|
||||||
|
border-radius: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content pre code {
|
||||||
|
display: grid;
|
||||||
|
margin: auto 0;
|
||||||
|
padding: 10px;
|
||||||
|
color: rgb(213, 213, 214);
|
||||||
|
background: var(--code-block-bg) !important;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
overflow-x: auto;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content blockquote {
|
||||||
|
margin: 1rem 0;
|
||||||
|
padding-inline-start: 1rem;
|
||||||
|
border-inline-start: 0.3rem solid var(--content);
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content hr {
|
||||||
|
margin: 30px 0;
|
||||||
|
height: 2px;
|
||||||
|
background: var(--tertiary);
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content iframe {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content img {
|
||||||
|
border-radius: var(--radius);
|
||||||
|
margin: 1rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content img[src*="#center"] {
|
||||||
|
margin: 1rem auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content figure.align-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content figure>figcaption {
|
||||||
|
color: var(--primary);
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 8px 0 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content figure>figcaption>p {
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content h1:hover .anchor,
|
||||||
|
.md-content h2:hover .anchor,
|
||||||
|
.md-content h3:hover .anchor,
|
||||||
|
.md-content h4:hover .anchor,
|
||||||
|
.md-content h5:hover .anchor,
|
||||||
|
.md-content h6:hover .anchor {
|
||||||
|
display: inline-flex;
|
||||||
|
color: var(--secondary);
|
||||||
|
margin-inline-start: 0.5em;
|
||||||
|
font-weight: 500;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.anchor:hover {
|
||||||
|
color: var(--content) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-content img.in-text {
|
||||||
|
display: inline;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
mark {
|
||||||
|
border-radius: 2px;
|
||||||
|
padding: 0 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
audio {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
overflow: hidden;
|
||||||
|
height: 2.5rem;
|
||||||
|
margin-bottom: var(--content-gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
audio::-webkit-media-controls-enclosure {
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
video {
|
||||||
|
border: 1px solid var(--code-bg);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
.first-entry {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
min-height: 320px;
|
||||||
|
margin: var(--gap) 0 calc(var(--gap) * 2) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first-entry .entry-header {
|
||||||
|
overflow: hidden;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first-entry .entry-header h1 {
|
||||||
|
font-size: 34px;
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first-entry .entry-header h2 {
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first-entry .entry-content {
|
||||||
|
margin: 14px 0;
|
||||||
|
font-size: 16px;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first-entry .entry-footer {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-info .entry-content {
|
||||||
|
--content-gap: 0.5rem;
|
||||||
|
-webkit-line-clamp: unset;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-info .social-icons a:first-of-type {
|
||||||
|
padding-inline-start: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.post-entry {
|
||||||
|
position: relative;
|
||||||
|
margin-bottom: var(--gap);
|
||||||
|
padding: var(--gap);
|
||||||
|
background: var(--entry);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
transition: transform 0.25s ease;
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-entry:hover,
|
||||||
|
.post-entry:focus-within {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
border-color: var(--tertiary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag-entry .entry-cover {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-header h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-content {
|
||||||
|
margin: 8px 0;
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.6;
|
||||||
|
overflow: hidden;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-info .entry-content p {
|
||||||
|
margin-block-start: 1em;
|
||||||
|
margin-block-end: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-footer {
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-link {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-hint {
|
||||||
|
color: var(--secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-hint-parent {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-cover {
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: var(--gap);
|
||||||
|
text-align: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-cover img {
|
||||||
|
border-radius: var(--radius);
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-cover a {
|
||||||
|
text-underline-offset: 0.3rem;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
@@ -0,0 +1,215 @@
|
|||||||
|
.page-header,
|
||||||
|
.post-header {
|
||||||
|
margin: 24px auto var(--content-gap) auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-title {
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-description {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-meta {
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-meta,
|
||||||
|
.breadcrumbs {
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumbs {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumbs a {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumbs svg {
|
||||||
|
height: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.i18n_list {
|
||||||
|
display: inline-flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-meta .i18n_list li {
|
||||||
|
list-style: none;
|
||||||
|
margin: auto 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-meta a,
|
||||||
|
.toc a:hover {
|
||||||
|
text-underline-offset: 0.3rem;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-meta a {
|
||||||
|
color: var(--secondary);
|
||||||
|
text-decoration-style: dotted;
|
||||||
|
}
|
||||||
|
|
||||||
|
details.toc {
|
||||||
|
margin-bottom: var(--content-gap);
|
||||||
|
background: var(--code-bg);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] details.toc {
|
||||||
|
background: var(--entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
details.toc summary {
|
||||||
|
padding: 0.3rem 1.2rem;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
details summary {
|
||||||
|
cursor: pointer;
|
||||||
|
display: list-item;
|
||||||
|
width: 100%;
|
||||||
|
margin-inline-start: 0;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
details .title {
|
||||||
|
display: inline;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-inline-start: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
details {
|
||||||
|
interpolate-size: allow-keywords;
|
||||||
|
}
|
||||||
|
|
||||||
|
details::details-content {
|
||||||
|
height: 0;
|
||||||
|
opacity: 0;
|
||||||
|
overflow: clip;
|
||||||
|
transition: height 150ms ease,
|
||||||
|
opacity 150ms ease,
|
||||||
|
content-visibility 150ms allow-discrete;
|
||||||
|
}
|
||||||
|
|
||||||
|
details[open]::details-content {
|
||||||
|
height: auto;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
details .inner {
|
||||||
|
margin: 0 2.4rem;
|
||||||
|
padding-bottom: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
details li ul {
|
||||||
|
margin-inline-start: var(--gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content {
|
||||||
|
color: var(--content);
|
||||||
|
margin: 30px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-footer {
|
||||||
|
margin-top: var(--content-gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-footer>* {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-tags {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-tags li {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-tags a,
|
||||||
|
.share-buttons,
|
||||||
|
.paginav {
|
||||||
|
border-radius: var(--radius);
|
||||||
|
background: var(--code-bg);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-tags a {
|
||||||
|
display: block;
|
||||||
|
padding: 0 14px;
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 34px;
|
||||||
|
background: var(--code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-tags a:hover,
|
||||||
|
.paginav a:hover {
|
||||||
|
background: var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.share-buttons {
|
||||||
|
padding: 10px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
overflow-x: auto;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.share-buttons li,
|
||||||
|
.share-buttons a {
|
||||||
|
display: inline-flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.share-buttons a:not(:last-of-type) {
|
||||||
|
margin-inline-end: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginav {
|
||||||
|
display: flex;
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginav .title {
|
||||||
|
letter-spacing: 1px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: var(--secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginav a {
|
||||||
|
width: 50%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.5rem;
|
||||||
|
padding: 0.8rem;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginav span:hover:not(.title) {
|
||||||
|
text-underline-offset: 0.2rem;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginav .next {
|
||||||
|
margin-inline-start: auto;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .paginav .next {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1>a>svg {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
.buttons,
|
||||||
|
.main .profile {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main .profile {
|
||||||
|
align-items: center;
|
||||||
|
min-height: calc(100vh - var(--header-height) - var(--footer-height) - (var(--gap) * 2));
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.profile .profile_inner {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.profile img {
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttons {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
max-width: 400px;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
background: var(--tertiary);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 0.4rem 0.8rem;
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
.searchbox input {
|
||||||
|
padding: 4px 10px;
|
||||||
|
width: 100%;
|
||||||
|
color: var(--primary);
|
||||||
|
font-weight: bold;
|
||||||
|
border: 2px solid var(--tertiary);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchResults li {
|
||||||
|
list-style: none;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 10px 15px;
|
||||||
|
position: relative;
|
||||||
|
font-weight: 500;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
background: var(--entry);
|
||||||
|
transition: transform .25s ease;
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchResults {
|
||||||
|
margin: var(--content-gap) 0;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchResults li:hover,
|
||||||
|
.searchResults li:focus-within {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
border-color: var(--tertiary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchResults li .entry-link:focus {
|
||||||
|
outline: 2px solid var(--secondary);
|
||||||
|
outline-offset: -2px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
.terms-tags {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 1em;
|
||||||
|
margin-top: var(--content-gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.terms-tags li {
|
||||||
|
display: inline-block;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.terms-tags a {
|
||||||
|
display: block;
|
||||||
|
padding: 4px 10px;
|
||||||
|
background: var(--tertiary);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
transition: transform 0.1s;
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
/*
|
||||||
|
PaperMod v8+
|
||||||
|
License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE
|
||||||
|
Copyright (c) 2020 nanxiaobei and adityatelange
|
||||||
|
Copyright (c) 2021-2026 adityatelange
|
||||||
|
*/
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
*,
|
||||||
|
::after,
|
||||||
|
::before {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
overflow-y: scroll;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
text-size-adjust: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
a,
|
||||||
|
button,
|
||||||
|
body,
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
color: var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||||
|
font-size: 18px;
|
||||||
|
line-height: 1.6;
|
||||||
|
word-break: break-word;
|
||||||
|
background: var(--theme);
|
||||||
|
}
|
||||||
|
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
figcaption,
|
||||||
|
figure,
|
||||||
|
footer,
|
||||||
|
header,
|
||||||
|
hgroup,
|
||||||
|
main,
|
||||||
|
nav,
|
||||||
|
section,
|
||||||
|
table {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6,
|
||||||
|
p {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body,
|
||||||
|
figure,
|
||||||
|
ul {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
overflow-x: auto;
|
||||||
|
word-break: keep-all;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
textarea {
|
||||||
|
padding: 0;
|
||||||
|
font: inherit;
|
||||||
|
background: 0 0;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input,
|
||||||
|
textarea {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input[type=button],
|
||||||
|
input[type=submit] {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:-webkit-autofill,
|
||||||
|
textarea:-webkit-autofill {
|
||||||
|
box-shadow: 0 0 0 50px var(--theme) inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
display: block;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
:root {
|
||||||
|
--gap: 24px;
|
||||||
|
--content-gap: 20px;
|
||||||
|
--nav-width: 1024px;
|
||||||
|
--main-width: 720px;
|
||||||
|
--header-height: 60px;
|
||||||
|
--footer-height: 60px;
|
||||||
|
--radius: 8px;
|
||||||
|
--theme: rgb(255, 255, 255);
|
||||||
|
--entry: rgb(255, 255, 255);
|
||||||
|
--primary: rgb(30, 30, 30);
|
||||||
|
--secondary: rgb(108, 108, 108);
|
||||||
|
--tertiary: rgb(214, 214, 214);
|
||||||
|
--content: rgb(31, 31, 31);
|
||||||
|
--code-block-bg: rgb(28, 29, 33);
|
||||||
|
--code-bg: rgb(245, 245, 245);
|
||||||
|
--border: rgb(238, 238, 238);
|
||||||
|
color-scheme: light;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root[data-theme="dark"] {
|
||||||
|
--theme: rgb(29, 30, 32);
|
||||||
|
--entry: rgb(46, 46, 51);
|
||||||
|
--primary: rgb(218, 218, 219);
|
||||||
|
--secondary: rgb(155, 156, 157);
|
||||||
|
--tertiary: rgb(65, 66, 68);
|
||||||
|
--content: rgb(196, 196, 197);
|
||||||
|
--code-block-bg: rgb(46, 46, 51);
|
||||||
|
--code-bg: rgb(55, 56, 62);
|
||||||
|
--border: rgb(51, 51, 51);
|
||||||
|
color-scheme: dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list {
|
||||||
|
background: var(--code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] .list {
|
||||||
|
background: var(--theme);
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
@media screen and (max-width: 768px) {
|
||||||
|
/* theme-vars */
|
||||||
|
:root {
|
||||||
|
--gap: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* profile-mode */
|
||||||
|
.profile img {
|
||||||
|
transform: scale(0.85);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* post-entry */
|
||||||
|
.first-entry {
|
||||||
|
min-height: 260px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* archive */
|
||||||
|
.archive-month {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-year {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* footer */
|
||||||
|
.footer {
|
||||||
|
padding: calc((var(--footer-height) - var(--gap) - 10px) / 2) var(--gap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* footer */
|
||||||
|
@media screen and (max-width: 900px) {
|
||||||
|
.list .top-link {
|
||||||
|
transform: translateY(-5rem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 340px) {
|
||||||
|
.share-buttons {
|
||||||
|
justify-content: unset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion) {
|
||||||
|
/* terms; profile-mode; post-single; post-entry; post-entry; search; search */
|
||||||
|
.terms-tags a:active,
|
||||||
|
.button:active,
|
||||||
|
.post-entry:active,
|
||||||
|
.top-link,
|
||||||
|
.searchResults .focus,
|
||||||
|
.searchResults li:active {
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
/*
|
||||||
|
This is just a placeholder blank stylesheet so as to support adding custom styles budled with theme's default styles
|
||||||
|
|
||||||
|
Read https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#bundling-custom-css-with-themes-assets for more info
|
||||||
|
*/
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
.chroma {
|
||||||
|
background-color: unset !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chroma .hl {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chroma .lnt {
|
||||||
|
padding: 0 0 0 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight pre.chroma code {
|
||||||
|
padding: 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight pre.chroma .line .cl,
|
||||||
|
.chroma .ln {
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chroma .lntd:last-of-type {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
/* Background */ .bg { color: #cad3f5; background-color: #24273a; }
|
||||||
|
/* PreWrapper */ .chroma { color: #cad3f5; background-color: #24273a; }
|
||||||
|
/* Other */ .chroma .x { }
|
||||||
|
/* Error */ .chroma .err { color: #ed8796 }
|
||||||
|
/* CodeLine */ .chroma .cl { }
|
||||||
|
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
|
||||||
|
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
|
||||||
|
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
|
||||||
|
/* LineHighlight */ .chroma .hl { background-color: #474733 }
|
||||||
|
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #8087a2 }
|
||||||
|
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #8087a2 }
|
||||||
|
/* Line */ .chroma .line { display: flex; }
|
||||||
|
/* Keyword */ .chroma .k { color: #c6a0f6 }
|
||||||
|
/* KeywordConstant */ .chroma .kc { color: #f5a97f }
|
||||||
|
/* KeywordDeclaration */ .chroma .kd { color: #ed8796 }
|
||||||
|
/* KeywordNamespace */ .chroma .kn { color: #8bd5ca }
|
||||||
|
/* KeywordPseudo */ .chroma .kp { color: #c6a0f6 }
|
||||||
|
/* KeywordReserved */ .chroma .kr { color: #c6a0f6 }
|
||||||
|
/* KeywordType */ .chroma .kt { color: #ed8796 }
|
||||||
|
/* Name */ .chroma .n { }
|
||||||
|
/* NameAttribute */ .chroma .na { color: #8aadf4 }
|
||||||
|
/* NameBuiltin */ .chroma .nb { color: #91d7e3 }
|
||||||
|
/* NameBuiltinPseudo */ .chroma .bp { color: #91d7e3 }
|
||||||
|
/* NameClass */ .chroma .nc { color: #eed49f }
|
||||||
|
/* NameConstant */ .chroma .no { color: #eed49f }
|
||||||
|
/* NameDecorator */ .chroma .nd { color: #8aadf4; font-weight: bold }
|
||||||
|
/* NameEntity */ .chroma .ni { color: #8bd5ca }
|
||||||
|
/* NameException */ .chroma .ne { color: #f5a97f }
|
||||||
|
/* NameFunction */ .chroma .nf { color: #8aadf4 }
|
||||||
|
/* NameFunctionMagic */ .chroma .fm { color: #8aadf4 }
|
||||||
|
/* NameLabel */ .chroma .nl { color: #91d7e3 }
|
||||||
|
/* NameNamespace */ .chroma .nn { color: #f5a97f }
|
||||||
|
/* NameOther */ .chroma .nx { }
|
||||||
|
/* NameProperty */ .chroma .py { color: #f5a97f }
|
||||||
|
/* NameTag */ .chroma .nt { color: #c6a0f6 }
|
||||||
|
/* NameVariable */ .chroma .nv { color: #f4dbd6 }
|
||||||
|
/* NameVariableClass */ .chroma .vc { color: #f4dbd6 }
|
||||||
|
/* NameVariableGlobal */ .chroma .vg { color: #f4dbd6 }
|
||||||
|
/* NameVariableInstance */ .chroma .vi { color: #f4dbd6 }
|
||||||
|
/* NameVariableMagic */ .chroma .vm { color: #f4dbd6 }
|
||||||
|
/* Literal */ .chroma .l { }
|
||||||
|
/* LiteralDate */ .chroma .ld { }
|
||||||
|
/* LiteralString */ .chroma .s { color: #a6da95 }
|
||||||
|
/* LiteralStringAffix */ .chroma .sa { color: #ed8796 }
|
||||||
|
/* LiteralStringBacktick */ .chroma .sb { color: #a6da95 }
|
||||||
|
/* LiteralStringChar */ .chroma .sc { color: #a6da95 }
|
||||||
|
/* LiteralStringDelimiter */ .chroma .dl { color: #8aadf4 }
|
||||||
|
/* LiteralStringDoc */ .chroma .sd { color: #6e738d }
|
||||||
|
/* LiteralStringDouble */ .chroma .s2 { color: #a6da95 }
|
||||||
|
/* LiteralStringEscape */ .chroma .se { color: #8aadf4 }
|
||||||
|
/* LiteralStringHeredoc */ .chroma .sh { color: #6e738d }
|
||||||
|
/* LiteralStringInterpol */ .chroma .si { color: #a6da95 }
|
||||||
|
/* LiteralStringOther */ .chroma .sx { color: #a6da95 }
|
||||||
|
/* LiteralStringRegex */ .chroma .sr { color: #8bd5ca }
|
||||||
|
/* LiteralStringSingle */ .chroma .s1 { color: #a6da95 }
|
||||||
|
/* LiteralStringSymbol */ .chroma .ss { color: #a6da95 }
|
||||||
|
/* LiteralNumber */ .chroma .m { color: #f5a97f }
|
||||||
|
/* LiteralNumberBin */ .chroma .mb { color: #f5a97f }
|
||||||
|
/* LiteralNumberFloat */ .chroma .mf { color: #f5a97f }
|
||||||
|
/* LiteralNumberHex */ .chroma .mh { color: #f5a97f }
|
||||||
|
/* LiteralNumberInteger */ .chroma .mi { color: #f5a97f }
|
||||||
|
/* LiteralNumberIntegerLong */ .chroma .il { color: #f5a97f }
|
||||||
|
/* LiteralNumberOct */ .chroma .mo { color: #f5a97f }
|
||||||
|
/* Operator */ .chroma .o { color: #91d7e3; font-weight: bold }
|
||||||
|
/* OperatorWord */ .chroma .ow { color: #91d7e3; font-weight: bold }
|
||||||
|
/* Punctuation */ .chroma .p { }
|
||||||
|
/* Comment */ .chroma .c { color: #6e738d; font-style: italic }
|
||||||
|
/* CommentHashbang */ .chroma .ch { color: #6e738d; font-style: italic }
|
||||||
|
/* CommentMultiline */ .chroma .cm { color: #6e738d; font-style: italic }
|
||||||
|
/* CommentSingle */ .chroma .c1 { color: #6e738d; font-style: italic }
|
||||||
|
/* CommentSpecial */ .chroma .cs { color: #6e738d; font-style: italic }
|
||||||
|
/* CommentPreproc */ .chroma .cp { color: #6e738d; font-style: italic }
|
||||||
|
/* CommentPreprocFile */ .chroma .cpf { color: #6e738d; font-weight: bold; font-style: italic }
|
||||||
|
/* Generic */ .chroma .g { }
|
||||||
|
/* GenericDeleted */ .chroma .gd { color: #ed8796; background-color: #363a4f }
|
||||||
|
/* GenericEmph */ .chroma .ge { font-style: italic }
|
||||||
|
/* GenericError */ .chroma .gr { color: #ed8796 }
|
||||||
|
/* GenericHeading */ .chroma .gh { color: #f5a97f; font-weight: bold }
|
||||||
|
/* GenericInserted */ .chroma .gi { color: #a6da95; background-color: #363a4f }
|
||||||
|
/* GenericOutput */ .chroma .go { }
|
||||||
|
/* GenericPrompt */ .chroma .gp { }
|
||||||
|
/* GenericStrong */ .chroma .gs { font-weight: bold }
|
||||||
|
/* GenericSubheading */ .chroma .gu { color: #f5a97f; font-weight: bold }
|
||||||
|
/* GenericTraceback */ .chroma .gt { color: #ed8796 }
|
||||||
|
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
|
||||||
|
/* TextWhitespace */ .chroma .w { }
|
||||||
@@ -0,0 +1,194 @@
|
|||||||
|
import * as params from '@params';
|
||||||
|
|
||||||
|
const resList = document.getElementById('searchResults');
|
||||||
|
const sInput = document.getElementById('searchInput');
|
||||||
|
const searchBox = document.getElementById('searchbox');
|
||||||
|
|
||||||
|
let fuse;
|
||||||
|
let currentElement = null;
|
||||||
|
let firstResult = null;
|
||||||
|
let lastResult = null;
|
||||||
|
|
||||||
|
const defaultFuseOptions = {
|
||||||
|
distance: 100,
|
||||||
|
threshold: 0.4,
|
||||||
|
ignoreLocation: true,
|
||||||
|
keys: ['title', 'permalink', 'summary', 'content']
|
||||||
|
};
|
||||||
|
|
||||||
|
const buildFuseOptions = () => {
|
||||||
|
if (!params.fuseOpts) {
|
||||||
|
return defaultFuseOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
isCaseSensitive: params.fuseOpts.iscasesensitive ?? false,
|
||||||
|
includeScore: params.fuseOpts.includescore ?? false,
|
||||||
|
includeMatches: params.fuseOpts.includematches ?? false,
|
||||||
|
minMatchCharLength: params.fuseOpts.minmatchcharlength ?? 1,
|
||||||
|
shouldSort: params.fuseOpts.shouldsort ?? true,
|
||||||
|
findAllMatches: params.fuseOpts.findallmatches ?? false,
|
||||||
|
keys: params.fuseOpts.keys ?? defaultFuseOptions.keys,
|
||||||
|
location: params.fuseOpts.location ?? 0,
|
||||||
|
threshold: params.fuseOpts.threshold ?? defaultFuseOptions.threshold,
|
||||||
|
distance: params.fuseOpts.distance ?? defaultFuseOptions.distance,
|
||||||
|
ignoreLocation: params.fuseOpts.ignorelocation ?? defaultFuseOptions.ignoreLocation
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const debounce = (fn, delay) => {
|
||||||
|
let timeout;
|
||||||
|
return (...args) => {
|
||||||
|
clearTimeout(timeout);
|
||||||
|
timeout = window.setTimeout(() => fn(...args), delay);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const reset = () => {
|
||||||
|
currentElement = null;
|
||||||
|
firstResult = null;
|
||||||
|
lastResult = null;
|
||||||
|
resList.innerHTML = '';
|
||||||
|
sInput.value = '';
|
||||||
|
sInput.focus();
|
||||||
|
};
|
||||||
|
|
||||||
|
const setActiveResult = (element) => {
|
||||||
|
document.querySelectorAll('.focus').forEach((item) => item.classList.remove('focus'));
|
||||||
|
|
||||||
|
if (!element) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
element.focus();
|
||||||
|
element.parentElement?.classList.add('focus');
|
||||||
|
currentElement = element;
|
||||||
|
};
|
||||||
|
|
||||||
|
const renderResults = (results) => {
|
||||||
|
if (!Array.isArray(results) || results.length === 0) {
|
||||||
|
resList.innerHTML = '';
|
||||||
|
firstResult = lastResult = currentElement = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const fragment = document.createDocumentFragment();
|
||||||
|
|
||||||
|
for (const result of results) {
|
||||||
|
const li = document.createElement('li');
|
||||||
|
const titleText = document.createTextNode(result.item.title);
|
||||||
|
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
||||||
|
svg.setAttribute('width', '24');
|
||||||
|
svg.setAttribute('height', '24');
|
||||||
|
svg.setAttribute('viewBox', '0 0 24 24');
|
||||||
|
svg.setAttribute('fill', 'none');
|
||||||
|
svg.setAttribute('stroke', 'currentColor');
|
||||||
|
svg.setAttribute('stroke-width', '2');
|
||||||
|
svg.setAttribute('stroke-linecap', 'round');
|
||||||
|
svg.setAttribute('stroke-linejoin', 'round');
|
||||||
|
svg.classList.add('feather', 'feather-chevrons-right');
|
||||||
|
|
||||||
|
svg.innerHTML = '<polyline points="13 17 18 12 13 7"></polyline><polyline points="6 17 11 12 6 7"></polyline>';
|
||||||
|
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.className = 'entry-link';
|
||||||
|
link.href = result.item.permalink;
|
||||||
|
link.setAttribute('aria-label', result.item.title);
|
||||||
|
|
||||||
|
li.appendChild(titleText);
|
||||||
|
li.appendChild(svg);
|
||||||
|
li.appendChild(link);
|
||||||
|
fragment.appendChild(li);
|
||||||
|
}
|
||||||
|
|
||||||
|
resList.innerHTML = '';
|
||||||
|
resList.appendChild(fragment);
|
||||||
|
firstResult = resList.firstElementChild;
|
||||||
|
lastResult = resList.lastElementChild;
|
||||||
|
};
|
||||||
|
|
||||||
|
const performSearch = () => {
|
||||||
|
if (!fuse) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const query = sInput.value.trim();
|
||||||
|
if (!query) {
|
||||||
|
renderResults([]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const searchOptions = params.fuseOpts?.limit ? { limit: params.fuseOpts.limit } : undefined;
|
||||||
|
const results = searchOptions ? fuse.search(query, searchOptions) : fuse.search(query);
|
||||||
|
renderResults(results);
|
||||||
|
};
|
||||||
|
|
||||||
|
const initSearch = async () => {
|
||||||
|
if (!sInput || !resList) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sInput.disabled = false;
|
||||||
|
sInput.focus();
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await fetch('../index.json');
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`Search index load failed: ${response.status}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await response.json();
|
||||||
|
if (data) {
|
||||||
|
fuse = new Fuse(data, buildFuseOptions());
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener('load', initSearch);
|
||||||
|
|
||||||
|
sInput?.addEventListener('input', debounce(performSearch, 150));
|
||||||
|
|
||||||
|
sInput?.addEventListener('search', () => {
|
||||||
|
if (!sInput.value) {
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('keydown', (event) => {
|
||||||
|
const { key } = event;
|
||||||
|
const active = document.activeElement;
|
||||||
|
const isInSearchBox = searchBox?.contains(active);
|
||||||
|
|
||||||
|
if (key === 'Escape') {
|
||||||
|
reset();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!firstResult || !isInSearchBox) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key === 'ArrowDown') {
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
if (active === sInput) {
|
||||||
|
setActiveResult(firstResult.querySelector('.entry-link'));
|
||||||
|
} else if (active?.parentElement !== lastResult) {
|
||||||
|
setActiveResult(active?.parentElement?.nextElementSibling?.querySelector('.entry-link'));
|
||||||
|
}
|
||||||
|
} else if (key === 'ArrowUp') {
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
if (active?.parentElement === firstResult) {
|
||||||
|
setActiveResult(sInput);
|
||||||
|
} else if (active !== sInput) {
|
||||||
|
setActiveResult(active?.parentElement?.previousElementSibling?.querySelector('.entry-link'));
|
||||||
|
}
|
||||||
|
} else if (key === 'ArrowRight') {
|
||||||
|
if (active?.matches?.('.entry-link')) {
|
||||||
|
active.click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,6 @@
|
|||||||
|
/*
|
||||||
|
PaperMod v8+
|
||||||
|
License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE
|
||||||
|
Copyright (c) 2020 nanxiaobei and adityatelange
|
||||||
|
Copyright (c) 2021-2026 adityatelange
|
||||||
|
*/
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
module github.com/adityatelange/hugo-PaperMod
|
||||||
|
|
||||||
|
go 1.16
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "السابق"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "التالي"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "دقيقة واحدة"
|
||||||
|
two: "دقيقتان"
|
||||||
|
few: "بضع ثوان"
|
||||||
|
zero: "الآن"
|
||||||
|
other: "دقائق {{ .Count }}"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "فهرس المحتوى"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "ترجمات أخرى"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "الصفحة الرئيسية"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "تم النسخ!"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "نسخ الكود"
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Папярэдняя"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Наступная"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
zero: "0 хвілін"
|
||||||
|
one: "1 хвіліна"
|
||||||
|
few: "{{ .Count }} хвіліны"
|
||||||
|
many: "{{ .Count }} хвілін"
|
||||||
|
other: "{{ .Count }} хвілін"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
zero: "няма слоў"
|
||||||
|
one: "1 слова"
|
||||||
|
few: "{{ .Count }} слова"
|
||||||
|
many: "{{ .Count }} слоў"
|
||||||
|
other: "{{ .Count }} слова"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Змест"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Пераклады"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Галоўная"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Рэдагаваць"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "капіяваць"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "скапіявана!"
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Предишна страница"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Следваща страница"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 мин"
|
||||||
|
other: "{{ .Count }} мин"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Съдържание"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Преводи"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "পূর্ববর্তী"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "পরবর্তী"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "১ মিনিট"
|
||||||
|
other: "{{ .Count }} মিনিট"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "১ টি শব্দ"
|
||||||
|
other: "{{ .Count }} টি শব্দ"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "সূচিপত্র"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "অনুবাদসমূহ"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "হোম"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "সম্পাদনা করুন"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "কপি করুন"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "কপি হয়েছে!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Pàgina anterior"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Pàgina següent"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 minut"
|
||||||
|
other: "{{ .Count }} minuts"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "paraula"
|
||||||
|
other: "{{ .Count }} paraules"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Taula de Continguts"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Traduccions"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Inici"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Editar"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "copiar"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "copiat!"
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "پەڕەی پێشتر"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "پەڕەی دواتر"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 خولەک"
|
||||||
|
other: "{{ .Count }} خولەک"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "پێڕست"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "وەرگێڕانەکان"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "ماڵەوە"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "لەبەری بگرەوە"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "لەبەر گیرایەوە!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Předchozí"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Další"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "slovo"
|
||||||
|
other: "{{ .Count }} slov"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Obsah"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Překlady"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Domů"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Upravit"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "kopírovat"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "zkopírováno!"
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Forrige Side"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Næste Side"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Indholdsfortegnelse"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Oversættelser"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Start"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Rediger"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "kopier"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "kopieret!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Vorherige"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Nächste"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 Minute"
|
||||||
|
other: "{{ .Count }} Minuten"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "Wort"
|
||||||
|
other: "{{ .Count }} Wörter"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Inhaltsverzeichnis"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Übersetzungen"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Home"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Bearbeiten"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Kopieren"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Kopiert!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Προηγούμενο"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Επόμενο"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 λεπτό"
|
||||||
|
other: "{{ .Count }} λεπτά"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one: "λέξη"
|
||||||
|
other: "{{ .Count }} λέξεις"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Πίνακας Περιεχομένων"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Μεταφράσεις"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Αρχική"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Επεξεργασία"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "αντιγραφή"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "αντιγράφηκε!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Prev"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Next"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "word"
|
||||||
|
other: "{{ .Count }} words"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Table of Contents"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Translations"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Home"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Edit"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "copy"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "copied!"
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "antaŭa paĝo"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "sekva paĝo"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Enhavo"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "tradukoj"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "ĉefpaĝo"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "kopii"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "kopiite!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Anterior"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Siguiente"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "palabra"
|
||||||
|
other: "{{ .Count }} palabras"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Tabla de Contenidos"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Traducciones"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Inicio"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Editar"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "copiar"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "¡copiado!"
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "صفحه قبلی"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "صفحه بعدی"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "۱ دقیقه"
|
||||||
|
other: "{{ .Count }} دقیقه"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "فهرست مطالب"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "ترجمه ها"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "خانه"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "ویرایش"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "کپی"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "کپی شد!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Edellinen"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Seuraava"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} minuuttia"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "sana"
|
||||||
|
other: "{{ .Count }} sanaa"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Sisällysluettelo"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Käännökset"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Etusivu"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Muokkaa"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Kopioi"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Kopioitu!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Précédent"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Suivant"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "mot"
|
||||||
|
other: "{{ .Count }} mots"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Table des matières"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Traductions"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Accueil"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Modifier"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Copier"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Copié !"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "הקודם"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "הבא"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "דקה אחת"
|
||||||
|
other: "{{ .Count }} דקות"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one: "מילה אחת"
|
||||||
|
other: "{{ .Count }} מילים"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "תוכן עניינים"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "תרגומים"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "בית"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "ערוך"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "העתק"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "הועתק!"
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "पिछला"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "अगला"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "एक मिनट"
|
||||||
|
other: "{{ .Count }} मिनट"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "सुधारें"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "विषय - सूची"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "अनुवाद"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Prethodna stranica"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Sljedeća stranica"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 minuta"
|
||||||
|
other: "{{ .Count }} minute"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "riječ"
|
||||||
|
other: "{{ .Count }} riječi"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Tablica Sadržaja"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Prijevodi"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Početna stranica"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Promjeni"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "kopiraj"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "kopirano!"
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Előző oldal"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Következő oldal"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 perc"
|
||||||
|
other: "{{ .Count }} perc"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Tartalomjegyzék"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Fordítások"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Sebelumnya"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Selanjutnya"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 menit"
|
||||||
|
other: "{{ .Count }} menit"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "kata"
|
||||||
|
other: "{{ .Count }} kata"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Daftar isi"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Terjemahan"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Beranda"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Sunting"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "salin"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "disalin!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Precedente"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Successivo"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 minuto"
|
||||||
|
other: "{{ .Count }} minuti"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "parola"
|
||||||
|
other: "{{ .Count }} parole"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Indice contenuti"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Traduzioni"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Home"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Modifica"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "copia"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "copiato!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "前へ"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "次へ"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 分"
|
||||||
|
other: "{{ .Count }} 分"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one: "文字"
|
||||||
|
other: "{{ .Count }} 文字"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "目次"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "言語"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "ホーム"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "編集"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "コピー"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "コピーされました!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "이전 페이지"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "다음 페이지"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 분"
|
||||||
|
other: "{{ .Count }} 분"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "단어"
|
||||||
|
other: "{{ .Count }} 단어"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "목차"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "번역"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "홈"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "편집"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "복사"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "복사 완료!"
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Rûpela Paş"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Rûpela Pêş"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 xulek"
|
||||||
|
other: "{{ .Count }} xulek"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Pêrist"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Wergeran"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Xanî"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Jê bigire"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Hat jêgirtin!"
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Ѳмнѳх"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Дараах"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 МИН"
|
||||||
|
other: "{{ .Count }} МИН"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Агуулга"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Орчуулга"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Нүүр"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "хуулах"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "хуулсан!"
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Halaman Sebelumnya"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Halaman Seterusnya"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 minit"
|
||||||
|
other: "{{ .Count }} minit"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Isi Kandungan"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Terjemahan"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Home"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Sunting"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Salin"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Disalin!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Vorige"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Volgende"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "woord"
|
||||||
|
other: "{{ .Count }} woorden"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Inhoudsopgave"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Vertalingen"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Startpagina"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Bewerk"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "kopieer"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "gekopieerd!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Forrige Side"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Neste Side"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one: "ord"
|
||||||
|
other: "{{ .Count }} ord"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Innholdsfortegnelse"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Oversettelser"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Hjem"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Rediger"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Kopier"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Kopiert!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Prec."
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Seg."
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "mot"
|
||||||
|
other: "{{ .Count }} motss"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Taula de contengut"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Traduccions"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Acuèlh"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Modificar"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "copiar"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "copiat !"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "ਪਿਛਲਾ"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "ਅਗਲਾ"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 ਮਿੰਟ"
|
||||||
|
other: "{{ .Count }} ਮਿੰਟ"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one: "ਸ਼ਬਦ"
|
||||||
|
other: "{{ .Count }} ਸ਼ਬਦ"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "ਤਤਕਰਾ"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "ਅਨੁਵਾਦ"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "ਘਰ"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "ਸੋਧ"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "ਕਾਪੀ"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "ਕਾਪੀ ਕੀਤੀ ਗਈ!!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Poprzednia"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Następna"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "słowo"
|
||||||
|
other: "{{ .Count }} słów"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Spis treści"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Tłumaczenia"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Strona Główna"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Edytuj"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Kopiuj"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Skopiowano!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "پِچھلا"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "اگلا"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "ایک منٹ"
|
||||||
|
other: "مِنٹ {{ .Count }}"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one: "لفظ"
|
||||||
|
other: "لفظ {{ .Count }}"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "تتکرا"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "انوواد"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "گھر"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "سودھ"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "کاپی"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "کاپی کیتی گئی!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Página Anterior"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Próxima Página"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 minuto"
|
||||||
|
other: "{{ .Count }} minutos"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "palavra"
|
||||||
|
other: "{{ .Count }} palavras"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Conteúdo"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Traduções"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Início"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Editar"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "copiar"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "copiado!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Înapoi"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Înainte"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 minut"
|
||||||
|
other: "{{ .Count }} minute"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "cuvânt"
|
||||||
|
other: "{{ .Count }} cuvinte"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Sumar"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Traduceri"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Acasă"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Editează"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "copiază"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "copiat!"
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Предыдущая"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Следующая"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
zero: "0 минут"
|
||||||
|
one: "1 минута"
|
||||||
|
few: "{{ .Count }} минуты"
|
||||||
|
many: "{{ .Count }} минут"
|
||||||
|
other: "{{ .Count }} минута"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
zero: "0 слов"
|
||||||
|
one: "1 слово"
|
||||||
|
few: "{{ .Count }} слова"
|
||||||
|
many: "{{ .Count }} слов"
|
||||||
|
other: "{{ .Count }} слово"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Оглавление"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Переводы"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Главная"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Редактировать"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "копировать"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "скопировано!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Predch"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Ďaľší"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "slovo"
|
||||||
|
other: "{{ .Count }} slov"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Obsah"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Preklady"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Domov"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Upraviť"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "kopírovať"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "skopírované!"
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Förra Sidan"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Nästa Sida"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Innehållsförteckning"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Översättningar"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Hem"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Redigera"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "kopiera"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "kopierad!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Uliopita"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Ujao"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "dakika 1"
|
||||||
|
other: "dakika {{ .Count }}"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "neno"
|
||||||
|
other: "maneno {{ .Count }}"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Jedwali la Yaliyomo"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Tafsiri"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Mwanzo"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Hariri"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "nakili"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "nakiliwa!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "ก่อนหน้า"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "ถัดไป"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 นาที"
|
||||||
|
other: "{{ .Count }} นาที"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "คำ"
|
||||||
|
other: "{{ .Count }} คำ"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "สารบัญ"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "การแปล"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "หน้าหลัก"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "แก้ไข"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "คัดลอก"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "คัดลอกแล้ว!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Önceki"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Sonraki"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 dk"
|
||||||
|
other: "{{ .Count }} dk"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "sözcük"
|
||||||
|
other: "{{ .Count }} sözcük"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "İçindekiler"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Çeviriler"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Ana Sayfa"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Düzenle"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Kopyala"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Kopyalandı!"
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Попередня"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Наступна"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 хвилина"
|
||||||
|
other: "{{ .Count }} хвилин"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Зміст"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Переклади"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Головна"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "копіювати"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "скопійовано!"
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Oldingi sahifa"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Keyingi sahifa"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "Bir daqiqa"
|
||||||
|
other: "{{ .Count }} daqiqa"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Mundarija"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Tarjimalar"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Bosh sahifa"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Trang trước"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Trang tiếp theo"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 phút"
|
||||||
|
other: "{{ .Count }} phút"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one: "từ"
|
||||||
|
other: "{{ .Count }} từ"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Mục lục"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Bản dịch"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Trang chủ"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Chỉnh sửa"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Sao chép"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Đã sao chép!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "上一頁"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "下一頁"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 分鐘"
|
||||||
|
other: "{{ .Count }} 分鐘"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one: "字"
|
||||||
|
other: "{{ .Count }} 字"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "目錄"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "語言"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "首頁"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "編輯"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "複製"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "已複製!"
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "上一页"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "下一页"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 分钟"
|
||||||
|
other: "{{ .Count }} 分钟"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one: "字"
|
||||||
|
other: "{{ .Count }} 字"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "目录"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "语言"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "主页"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "编辑"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "复制"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "已复制!"
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 138 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
{{- define "main" }}
|
||||||
|
<div class="not-found">404</div>
|
||||||
|
{{- end }}{{/* end main */ -}}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{{- $u := urls.Parse .Destination -}}
|
||||||
|
{{- $src := $u.String -}}
|
||||||
|
{{- if not $u.IsAbs -}}
|
||||||
|
{{- $path := strings.TrimPrefix "./" $u.Path }}
|
||||||
|
{{- with or (.PageInner.Resources.Get $path) (resources.Get $path) -}}
|
||||||
|
{{- $src = .RelPermalink -}}
|
||||||
|
{{- with $u.RawQuery -}}
|
||||||
|
{{- $src = printf "%s?%s" $src . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $u.Fragment -}}
|
||||||
|
{{- $src = printf "%s#%s" $src . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $attributes := merge .Attributes (dict "alt" .Text "src" $src "title" (.Title | transform.HTMLEscape) "loading" "lazy") -}}
|
||||||
|
<img
|
||||||
|
{{- range $k, $v := $attributes -}}
|
||||||
|
{{- if $v -}}
|
||||||
|
{{- printf " %s=%q" $k $v | safeHTMLAttr -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}>
|
||||||
|
{{- /**/ -}}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{{- /* formats .Content headings by adding an anchor */ -}}
|
||||||
|
{{ . | replaceRE
|
||||||
|
"(<h[1-6] id=\"([^\"]+)\".+)(</h[1-6]+>)"
|
||||||
|
"${1}<a hidden class=\"anchor\" aria-hidden=\"true\" href=\"#${2}\">#</a>${3}"
|
||||||
|
| safeHTML
|
||||||
|
}}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{{- if or .Params.author site.Params.author }}
|
||||||
|
{{- $author := (.Params.author | default site.Params.author) }}
|
||||||
|
{{- $author_type := (printf "%T" $author) }}
|
||||||
|
|
||||||
|
{{- if (or (eq $author_type "[]string") (eq $author_type "[]interface {}")) }}
|
||||||
|
{{- (delimit $author ", " ) }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $author }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{{- if (.Param "ShowBreadCrumbs") -}}
|
||||||
|
<nav class="breadcrumbs" role="navigation" aria-label="Breadcrumb">
|
||||||
|
{{- $ancestors := .Ancestors.Reverse -}}
|
||||||
|
{{- range $i, $bc := $ancestors }}
|
||||||
|
{{- if eq $i 0 }}
|
||||||
|
<a href="{{ $bc.RelPermalink }}">{{ i18n "home" | default "Home" }}</a>
|
||||||
|
{{- else }}
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||||||
|
stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
<a href="{{ $bc.RelPermalink }}">{{ $bc.Title }}</a>
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||||||
|
stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</nav>
|
||||||
|
{{- end -}}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{{- /* Comments area start */ -}}
|
||||||
|
{{- /* to add comments read => https://gohugo.io/content-management/comments/ */ -}}
|
||||||
|
{{- /* Comments area end */ -}}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
{{- with .cxt}} {{/* Apply proper context from dict */}}
|
||||||
|
{{- if (and .Params.cover.image (not $.isHidden)) }}
|
||||||
|
<figure class="entry-cover">
|
||||||
|
{{- $loading := cond $.IsSingle "eager" "lazy" }}
|
||||||
|
{{- $addLink := (and site.Params.cover.linkFullImages $.IsSingle) }}
|
||||||
|
{{- $prod := (hugo.IsProduction | or (eq site.Params.env "production")) }}
|
||||||
|
{{- $alt := (.Params.cover.alt | default .Params.cover.caption | plainify) }}
|
||||||
|
{{- $responsiveImages := (.Params.cover.responsiveImages | default site.Params.cover.responsiveImages) | default true }}
|
||||||
|
|
||||||
|
{{- $pageBundleCover := (.Resources.ByType "image").GetMatch (printf "*%s*" (.Params.cover.image)) }}
|
||||||
|
{{- $globalResourcesCover := (resources.ByType "image").GetMatch (printf "*%s*" (.Params.cover.image)) }}
|
||||||
|
{{- $cover := (or $pageBundleCover $globalResourcesCover)}}
|
||||||
|
{{- /* We are not using the .Param.cover.relative to decide the location of image */}}
|
||||||
|
{{- /* If we have the image in pageBundle or globalResources we can process the image */}}
|
||||||
|
|
||||||
|
{{- $sizes := (slice "360" "480" "720" "1080" "1500") }}
|
||||||
|
{{- $processableFormats := (slice "jpg" "jpeg" "png" "tif" "bmp" "gif") -}}
|
||||||
|
{{- if hugo.IsExtended -}}
|
||||||
|
{{- $processableFormats = $processableFormats | append "webp" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $imgdl := (.Params.cover.image) | absURL }}
|
||||||
|
{{- if $cover -}}
|
||||||
|
{{- $imgdl = $cover.Permalink }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if $addLink }}
|
||||||
|
<a href="{{ $imgdl }}" target="_blank" rel="noopener noreferrer">
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if $cover -}}
|
||||||
|
{{/* i.e it is present in page bundle */}}
|
||||||
|
{{- if (and (in $processableFormats $cover.MediaType.SubType) ($responsiveImages) (eq $prod true)) }}
|
||||||
|
<img loading="{{$loading}}"
|
||||||
|
srcset='{{- range $size := $sizes -}}
|
||||||
|
{{- if (ge $cover.Width $size) }}
|
||||||
|
{{- printf "%s %s" (($cover.Resize (printf "%sx" $size)).Permalink) (printf "%sw," $size) }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- printf "%s %dw" ($cover.Permalink) ($cover.Width) }}'
|
||||||
|
src="{{ $cover.Permalink }}"
|
||||||
|
sizes="(min-width: 768px) 720px, 100vw"
|
||||||
|
width="{{ $cover.Width }}" height="{{ $cover.Height }}"
|
||||||
|
alt="{{ $alt }}">
|
||||||
|
{{- else }}{{/* Unprocessable image or responsive images disabled */}}
|
||||||
|
<img loading="{{ $loading }}" src="{{ $imgdl }}" alt="{{ $alt }}">
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
{{- /* For absolute urls and external links, no img processing here */}}
|
||||||
|
<img loading="{{ $loading }}" src="{{ $imgdl }}" alt="{{ $alt }}">
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if $addLink }}
|
||||||
|
</a>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- /* Display Caption */}}
|
||||||
|
{{- if $.IsSingle }}
|
||||||
|
{{ with .Params.cover.caption -}}
|
||||||
|
<figcaption>{{ . | markdownify }}</figcaption>
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
</figure>
|
||||||
|
{{- end }}{{/* End image */}}
|
||||||
|
{{- end -}}{{/* End context */ -}}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{{- if and (.Param "editPost.URL") (not (.Param "editPost.disabled")) -}}
|
||||||
|
{{- if or (.Param "author") (.Param "ShowReadingTime") (not .Date.IsZero) .IsTranslated }}
|
||||||
|
{{- printf " | " | safeHTML -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $editURL := .Param "editPost.URL" }}
|
||||||
|
{{- $appendFilePath := .Param "editPost.appendFilePath" | default false }}
|
||||||
|
{{- $editText := .Param "editPost.Text" | default (i18n "edit_post" ) -}}
|
||||||
|
|
||||||
|
{{- if $appendFilePath -}}
|
||||||
|
{{- $fileUrlPath := path.Join .File.Path }}
|
||||||
|
{{- $editURL = printf "%s/%s" $editURL $fileUrlPath -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<span>
|
||||||
|
<a href="{{ $editURL }}" rel="noopener noreferrer edit" target="_blank">
|
||||||
|
{{- $editText -}}
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{{- /* Footer custom content area start */ -}}
|
||||||
|
{{- /* Insert any custom code web-analytics, resources, etc. here */ -}}
|
||||||
|
{{- /* Footer custom content area end */ -}}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{{- /* Head custom content area start */ -}}
|
||||||
|
{{- /* Insert any custom code (web-analytics, resources, etc.) - it will appear in the <head></head> section of every page. */ -}}
|
||||||
|
{{- /* Can be overwritten by partial with the same name in the global layouts. */ -}}
|
||||||
|
{{- /* Head custom content area end */ -}}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{{- /* Post content custom area start */ -}}
|
||||||
|
{{- /* Insert any custom code after post content - it will appear after the post body, before the footer. */ -}}
|
||||||
|
{{- /* Can be overwritten by partial with the same name in the global layouts. */ -}}
|
||||||
|
{{- /* Post content custom area end */ -}}
|
||||||
@@ -0,0 +1,158 @@
|
|||||||
|
{{- if not (.Param "hideFooter") }}
|
||||||
|
<footer class="footer">
|
||||||
|
{{- if not site.Params.footer.hideCopyright }}
|
||||||
|
{{- if site.Copyright }}
|
||||||
|
<span>{{ site.Copyright | markdownify }}</span>
|
||||||
|
{{- else }}
|
||||||
|
<span>© {{ now.Year }} <a href="{{ "" | absLangURL }}">{{ site.Title }}</a></span>
|
||||||
|
{{- end }}
|
||||||
|
{{- print " · "}}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with site.Params.footer.text }}
|
||||||
|
{{ . | markdownify }}
|
||||||
|
{{- print " · "}}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
- The "Powered by Hugo" text is intentionally left at the end of the footer to give it more prominence.
|
||||||
|
- We kindly encourage you to keep this line. Keeping this credit helps open source projects like PaperMod and Hugo reach more people, supports the open source ecosystem, and shows appreciation for the work that goes into these tools.
|
||||||
|
- If you choose to remove it, please consider adding a link to the PaperMod GitHub repository somewhere on your site to give credit to the project and its contributors.
|
||||||
|
- Support us by sponsoring the project on GitHub Sponsors: https://github.com/sponsors/adityatelange
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
<span>
|
||||||
|
Powered by
|
||||||
|
<a href="https://gohugo.io/?utm_source=papermod" rel="noopener" target="_blank">Hugo</a> &
|
||||||
|
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
|
||||||
|
</span>
|
||||||
|
</footer>
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if (not site.Params.disableScrollToTop) }}
|
||||||
|
<a href="#top" id="top-link" class="top-link hidden" aria-label="go to top" title="Go to Top (Alt + G)" accesskey="g">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||||||
|
stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevrons-up">
|
||||||
|
<polyline points="17 11 12 6 7 11"></polyline>
|
||||||
|
<polyline points="17 18 12 13 7 18"></polyline>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- partial "extend_footer.html" . }}
|
||||||
|
|
||||||
|
<script>
|
||||||
|
let menu = document.getElementById('menu');
|
||||||
|
if (menu) {
|
||||||
|
// Set the scroll position
|
||||||
|
const scrollPosition = localStorage.getItem("menu-scroll-position");
|
||||||
|
if (scrollPosition) {
|
||||||
|
menu.scrollLeft = parseInt(scrollPosition, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu.onscroll = function () {
|
||||||
|
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||||||
|
anchor.addEventListener("click", function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var id = this.getAttribute("href").substr(1);
|
||||||
|
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
||||||
|
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
|
||||||
|
behavior: "smooth"
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
|
||||||
|
}
|
||||||
|
if (id === "top") {
|
||||||
|
history.replaceState(null, null, " ");
|
||||||
|
} else {
|
||||||
|
history.pushState(null, null, `#${id}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{{- if (not site.Params.disableScrollToTop) }}
|
||||||
|
<script>
|
||||||
|
var toplink = document.getElementById("top-link");
|
||||||
|
window.onscroll = function () {
|
||||||
|
const scrollThreshold = window.innerHeight;
|
||||||
|
if (document.body.scrollTop > scrollThreshold || document.documentElement.scrollTop > scrollThreshold) {
|
||||||
|
toplink.classList.remove("hidden");
|
||||||
|
} else {
|
||||||
|
toplink.classList.add("hidden");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if (not site.Params.disableThemeToggle) }}
|
||||||
|
<script>
|
||||||
|
document.getElementById("theme-toggle").addEventListener("click", () => {
|
||||||
|
const html = document.querySelector("html");
|
||||||
|
if (html.dataset.theme === "dark") {
|
||||||
|
html.dataset.theme = 'light';
|
||||||
|
localStorage.setItem("pref-theme", 'light');
|
||||||
|
} else {
|
||||||
|
html.dataset.theme = 'dark';
|
||||||
|
localStorage.setItem("pref-theme", 'dark');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if (and (eq .Kind "page") (ne .Layout "archives") (ne .Layout "search") (.Param "ShowCodeCopyButtons")) }}
|
||||||
|
<script>
|
||||||
|
document.querySelectorAll('pre > code').forEach((codeblock) => {
|
||||||
|
const container = codeblock.parentNode.parentNode;
|
||||||
|
|
||||||
|
const copybutton = document.createElement('button');
|
||||||
|
copybutton.classList.add('copy-code');
|
||||||
|
copybutton.innerHTML = '{{- i18n "code_copy" | default "copy" }}';
|
||||||
|
|
||||||
|
function copyingDone() {
|
||||||
|
copybutton.innerHTML = '{{- i18n "code_copied" | default "copied!" }}';
|
||||||
|
setTimeout(() => {
|
||||||
|
copybutton.innerHTML = '{{- i18n "code_copy" | default "copy" }}';
|
||||||
|
}, 2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
copybutton.addEventListener('click', (cb) => {
|
||||||
|
if ('clipboard' in navigator) {
|
||||||
|
navigator.clipboard.writeText(codeblock.textContent);
|
||||||
|
copyingDone();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const range = document.createRange();
|
||||||
|
range.selectNodeContents(codeblock);
|
||||||
|
const selection = window.getSelection();
|
||||||
|
selection.removeAllRanges();
|
||||||
|
selection.addRange(range);
|
||||||
|
try {
|
||||||
|
document.execCommand('copy');
|
||||||
|
copyingDone();
|
||||||
|
} catch (e) { };
|
||||||
|
selection.removeRange(range);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (container.classList.contains("highlight")) {
|
||||||
|
container.appendChild(copybutton);
|
||||||
|
} else if (container.parentNode.firstChild == container) {
|
||||||
|
// td containing LineNos
|
||||||
|
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
|
||||||
|
// table containing LineNos and code
|
||||||
|
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
|
||||||
|
} else {
|
||||||
|
// code blocks not having highlight as parent class
|
||||||
|
codeblock.parentNode.appendChild(copybutton);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,194 @@
|
|||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
{{- if hugo.IsProduction | or (eq site.Params.env "production") | and (ne .Params.robotsNoIndex true) }}
|
||||||
|
<meta name="robots" content="index, follow">
|
||||||
|
{{- else }}
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- /* Title */}}
|
||||||
|
<title>{{ if .IsHome }}{{ else }}{{ if .Title }}{{ .Title }} | {{ end }}{{ end }}{{ site.Title }}</title>
|
||||||
|
|
||||||
|
{{- /* Meta */}}
|
||||||
|
{{- if .IsHome }}
|
||||||
|
{{ with site.Params.keywords -}}<meta name="keywords" content="{{- range $i, $e := . }}{{ if $i }}, {{ end }}{{ $e }}{{ end }}">{{ end }}
|
||||||
|
{{- else }}
|
||||||
|
<meta name="keywords" content="{{ if .Params.keywords -}}
|
||||||
|
{{- range $i, $e := .Params.keywords }}{{ if $i }}, {{ end }}{{ $e }}{{ end }} {{- else }}
|
||||||
|
{{- range $i, $e := .Params.tags }}{{ if $i }}, {{ end }}{{ $e }}{{ end }} {{- end -}}">
|
||||||
|
{{- end }}
|
||||||
|
<meta name="description" content="{{- with .Description }}{{ . }}{{- else }}{{- if or .IsPage .IsSection}}
|
||||||
|
{{- .Summary | default (printf "%s - %s" .Title site.Title) }}{{- else }}
|
||||||
|
{{- with site.Params.description }}{{ . }}{{- end }}{{- end }}{{- end -}}">
|
||||||
|
<meta name="author" content="{{ (partial "author.html" . ) }}">
|
||||||
|
<link rel="canonical" href="{{ if .Params.canonicalURL -}} {{ trim .Params.canonicalURL " " }} {{- else -}} {{ .Permalink }} {{- end }}">
|
||||||
|
{{- if site.Params.analytics.google.SiteVerificationTag }}
|
||||||
|
<meta name="google-site-verification" content="{{ site.Params.analytics.google.SiteVerificationTag }}">
|
||||||
|
{{- end }}
|
||||||
|
{{- if site.Params.analytics.yandex.SiteVerificationTag }}
|
||||||
|
<meta name="yandex-verification" content="{{ site.Params.analytics.yandex.SiteVerificationTag }}">
|
||||||
|
{{- end }}
|
||||||
|
{{- if site.Params.analytics.bing.SiteVerificationTag }}
|
||||||
|
<meta name="msvalidate.01" content="{{ site.Params.analytics.bing.SiteVerificationTag }}">
|
||||||
|
{{- end }}
|
||||||
|
{{- if site.Params.analytics.naver.SiteVerificationTag }}
|
||||||
|
<meta name="naver-site-verification" content="{{ site.Params.analytics.naver.SiteVerificationTag }}">
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- /* Styles */}}
|
||||||
|
|
||||||
|
{{- /* includes */}}
|
||||||
|
{{- $includes := slice }}
|
||||||
|
{{- $includes = $includes | append (" " | resources.FromString "assets/css/includes-blank.css")}}
|
||||||
|
|
||||||
|
{{- $includes_all := $includes | resources.Concat "assets/css/includes.css" }}
|
||||||
|
|
||||||
|
{{- $theme_vars := (resources.Get "css/core/theme-vars.css") }}
|
||||||
|
{{- $reset := (resources.Get "css/core/reset.css") }}
|
||||||
|
{{- $media := (resources.Get "css/core/zmedia.css") }}
|
||||||
|
{{- $license_css := (resources.Get "css/core/license.css") }}
|
||||||
|
{{- $common := (resources.Match "css/common/*.css") | resources.Concat "assets/css/common.css" }}
|
||||||
|
|
||||||
|
{{- /* markup.highlight.noClasses should be set to `false` */}}
|
||||||
|
{{- $chroma_styles := (resources.Get "css/includes/chroma-styles.css") }}
|
||||||
|
{{- $chroma_mod := (resources.Get "css/includes/chroma-mod.css") }}
|
||||||
|
|
||||||
|
{{- /* order is important */}}
|
||||||
|
{{- $core := (slice $theme_vars $reset $common $chroma_styles $chroma_mod $includes_all $media) | resources.Concat "assets/css/core.css" | resources.Minify }}
|
||||||
|
{{- $extended := (resources.Match "css/extended/*.css") | resources.Concat "assets/css/extended.css" | resources.Minify }}
|
||||||
|
|
||||||
|
{{- /* bundle all required css */}}
|
||||||
|
{{- /* Add extended css after theme style */ -}}
|
||||||
|
{{- $stylesheet := (slice $license_css $core $extended) | resources.Concat "assets/css/stylesheet.css" }}
|
||||||
|
|
||||||
|
{{- if not site.Params.assets.disableFingerprinting }}
|
||||||
|
{{- $stylesheet := $stylesheet | fingerprint }}
|
||||||
|
<link crossorigin="anonymous" href="{{ $stylesheet.RelPermalink }}" integrity="{{ $stylesheet.Data.Integrity }}" rel="preload stylesheet" as="style">
|
||||||
|
{{- else }}
|
||||||
|
<link crossorigin="anonymous" href="{{ $stylesheet.RelPermalink }}" rel="preload stylesheet" as="style">
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- /* Search */}}
|
||||||
|
{{- if (eq .Layout `search`) -}}
|
||||||
|
<link crossorigin="anonymous" rel="preload" as="fetch" href="../index.json">
|
||||||
|
{{- $fastsearch := resources.Get "js/fastsearch.js" | js.Build (dict "params" (dict "fuseOpts" site.Params.fuseOpts)) | resources.Minify }}
|
||||||
|
{{- $fusejs := resources.Get "js/fuse.basic.min.js" }}
|
||||||
|
{{- $license_js := resources.Get "js/license.js" }}
|
||||||
|
{{- if not site.Params.assets.disableFingerprinting }}
|
||||||
|
{{- $search := (slice $fusejs $license_js $fastsearch ) | resources.Concat "assets/js/search.js" | fingerprint }}
|
||||||
|
<script defer crossorigin="anonymous" src="{{ $search.RelPermalink }}" integrity="{{ $search.Data.Integrity }}"></script>
|
||||||
|
{{- else }}
|
||||||
|
{{- $search := (slice $fusejs $fastsearch ) | resources.Concat "assets/js/search.js" }}
|
||||||
|
<script defer crossorigin="anonymous" src="{{ $search.RelPermalink }}"></script>
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- /* Favicons */}}
|
||||||
|
<link rel="icon" href="{{ site.Params.assets.favicon | default "favicon.ico" | absURL }}">
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="{{ site.Params.assets.favicon16x16 | default "favicon-16x16.png" | absURL }}">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="{{ site.Params.assets.favicon32x32 | default "favicon-32x32.png" | absURL }}">
|
||||||
|
<link rel="apple-touch-icon" href="{{ site.Params.assets.apple_touch_icon | default "apple-touch-icon.png" | absURL }}">
|
||||||
|
<link rel="mask-icon" href="{{ site.Params.assets.safari_pinned_tab | default "safari-pinned-tab.svg" | absURL }}">
|
||||||
|
<meta name="theme-color" content="{{ site.Params.assets.theme_color | default "#2e2e33" }}">
|
||||||
|
<meta name="msapplication-TileColor" content="{{ site.Params.assets.msapplication_TileColor | default "#2e2e33" }}">
|
||||||
|
|
||||||
|
{{- /* RSS */}}
|
||||||
|
{{ range .AlternativeOutputFormats -}}
|
||||||
|
<link rel="{{ .Rel }}" type="{{ .MediaType.Type | html }}" href="{{ .Permalink | safeURL }}" title="{{ .Name }}">
|
||||||
|
{{ end -}}
|
||||||
|
{{- range .AllTranslations -}}
|
||||||
|
<link rel="alternate" hreflang="{{ .Lang }}" href="{{ .Permalink }}">
|
||||||
|
{{ end -}}
|
||||||
|
|
||||||
|
<noscript>
|
||||||
|
<style>
|
||||||
|
#theme-toggle,
|
||||||
|
.top-link {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
{{- if (and (ne site.Params.defaultTheme "light") (ne site.Params.defaultTheme "dark")) }}
|
||||||
|
<style>
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
--theme: rgb(29, 30, 32);
|
||||||
|
--entry: rgb(46, 46, 51);
|
||||||
|
--primary: rgb(218, 218, 219);
|
||||||
|
--secondary: rgb(155, 156, 157);
|
||||||
|
--tertiary: rgb(65, 66, 68);
|
||||||
|
--content: rgb(196, 196, 197);
|
||||||
|
--code-block-bg: rgb(46, 46, 51);
|
||||||
|
--code-bg: rgb(55, 56, 62);
|
||||||
|
--border: rgb(51, 51, 51);
|
||||||
|
color-scheme: dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list {
|
||||||
|
background: var(--theme);
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc {
|
||||||
|
background: var(--entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
{{- end }}
|
||||||
|
</noscript>
|
||||||
|
|
||||||
|
{{- /* theme-toggle is enabled */}}
|
||||||
|
{{- if (not site.Params.disableThemeToggle) }}
|
||||||
|
{{- /* theme is light */}}
|
||||||
|
{{- if (eq site.Params.defaultTheme "light") }}
|
||||||
|
<script>
|
||||||
|
if (localStorage.getItem("pref-theme") === "dark") {
|
||||||
|
document.querySelector("html").dataset.theme = 'dark';
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{{- /* theme is dark */}}
|
||||||
|
{{- else if (eq site.Params.defaultTheme "dark") }}
|
||||||
|
<script>
|
||||||
|
if (localStorage.getItem("pref-theme") === "light") {
|
||||||
|
document.querySelector("html").dataset.theme = 'light';
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{{- else }}
|
||||||
|
{{- /* theme is auto */}}
|
||||||
|
<script>
|
||||||
|
if (localStorage.getItem("pref-theme") === "dark") {
|
||||||
|
document.querySelector("html").dataset.theme = 'dark';
|
||||||
|
} else if (localStorage.getItem("pref-theme") === "light") {
|
||||||
|
document.querySelector("html").dataset.theme = 'light';
|
||||||
|
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||||
|
document.querySelector("html").dataset.theme = 'dark';
|
||||||
|
} else {
|
||||||
|
document.querySelector("html").dataset.theme = 'light';
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{{- end }}
|
||||||
|
{{- /* theme-toggle is disabled and theme is auto */}}
|
||||||
|
{{- else if (and (ne site.Params.defaultTheme "light") (ne site.Params.defaultTheme "dark"))}}
|
||||||
|
<script>
|
||||||
|
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||||
|
document.querySelector("html").dataset.theme = 'dark';
|
||||||
|
} else {
|
||||||
|
document.querySelector("html").dataset.theme = 'light';
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- partial "extend_head.html" . -}}
|
||||||
|
|
||||||
|
{{- /* Misc */}}
|
||||||
|
{{- if hugo.IsProduction | or (eq site.Params.env "production") }}
|
||||||
|
{{- partial "google_analytics.html" . }}
|
||||||
|
{{- partial "templates/opengraph.html" . }}
|
||||||
|
{{- partial "templates/twitter_cards.html" . }}
|
||||||
|
{{- partial "templates/schema_json.html" . }}
|
||||||
|
{{- end -}}
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
<header class="header">
|
||||||
|
<nav class="header-nav">
|
||||||
|
<div class="logo">
|
||||||
|
{{- $label_text := (site.Params.label.text | default site.Title) }}
|
||||||
|
{{- if site.Title }}
|
||||||
|
<a href="{{ "" | absLangURL }}" accesskey="h" title="{{ $label_text }} (Alt + H)">
|
||||||
|
{{- if site.Params.label.icon }}
|
||||||
|
{{- $img := resources.Get site.Params.label.icon }}
|
||||||
|
{{- if $img }}
|
||||||
|
{{- $processableFormats := (slice "jpg" "jpeg" "png" "tif" "bmp" "gif") -}}
|
||||||
|
{{- if hugo.IsExtended -}}
|
||||||
|
{{- $processableFormats = $processableFormats | append "webp" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $prod := (hugo.IsProduction | or (eq site.Params.env "production")) }}
|
||||||
|
{{- if and (in $processableFormats $img.MediaType.SubType) (eq $prod true)}}
|
||||||
|
{{- if site.Params.label.iconHeight }}
|
||||||
|
{{- $img = $img.Resize (printf "x%d" site.Params.label.iconHeight) }}
|
||||||
|
{{ else }}
|
||||||
|
{{- $img = $img.Resize "x30" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
<img src="{{ $img.Permalink }}" alt="" aria-label="logo"
|
||||||
|
height="{{- site.Params.label.iconHeight | default "30" -}}">
|
||||||
|
{{- else }}
|
||||||
|
<img src="{{- site.Params.label.icon | absURL -}}" alt="" aria-label="logo"
|
||||||
|
height="{{- site.Params.label.iconHeight | default "30" -}}">
|
||||||
|
{{- end -}}
|
||||||
|
{{- else if hasPrefix site.Params.label.iconSVG "<svg" }}
|
||||||
|
{{ site.Params.label.iconSVG | safeHTML }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $label_text -}}
|
||||||
|
</a>
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- $lsenabled := (or (not site.Params.disableThemeToggle) (and (not site.Params.disableLangToggle) (hugo.IsMultilingual))) }}
|
||||||
|
{{- if $lsenabled }}
|
||||||
|
<div class="logo-switches">
|
||||||
|
{{- if (not site.Params.disableThemeToggle) }}
|
||||||
|
<button id="theme-toggle" class="theme-toggle" accesskey="t" title="(Alt + T)" aria-label="Toggle theme">
|
||||||
|
<svg class="moon" xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24"
|
||||||
|
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round">
|
||||||
|
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
|
||||||
|
</svg>
|
||||||
|
<svg class="sun" xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24"
|
||||||
|
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if (not site.Params.disableLangToggle) }}
|
||||||
|
{{- $lang := .Lang}}
|
||||||
|
{{- with site.Home.Translations }}
|
||||||
|
{{- $separator := or $label_text (not site.Params.disableThemeToggle)}}
|
||||||
|
{{- if $separator }}<span class="nav-sep">|</span>{{ end }}
|
||||||
|
<ul class="lang-menu">
|
||||||
|
{{- range . -}}
|
||||||
|
{{- if ne $lang .Lang }}
|
||||||
|
<li>
|
||||||
|
<a href="{{- .Permalink -}}" title="{{ .Language.Params.languageAltTitle | default (.Language.LanguageName | emojify) | default (.Lang | title) }}"
|
||||||
|
aria-label="{{ .Language.LanguageName | default (.Lang | title) }}">
|
||||||
|
{{- if (and site.Params.displayFullLangName (.Language.LanguageName)) }}
|
||||||
|
{{- .Language.LanguageName | emojify -}}
|
||||||
|
{{- else }}
|
||||||
|
{{- .Lang | title -}}
|
||||||
|
{{- end -}}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end}}
|
||||||
|
</ul>
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
</div>
|
||||||
|
{{- end }}
|
||||||
|
</div>
|
||||||
|
{{- $currentPage := . }}
|
||||||
|
<ul id="menu" class="menu">
|
||||||
|
{{- range site.Menus.main }}
|
||||||
|
{{- $menu_item_url := (cond (strings.HasSuffix .URL "/") .URL (printf "%s/" .URL) ) | absLangURL }}
|
||||||
|
{{- $page_url:= $currentPage.Permalink | absLangURL }}
|
||||||
|
{{- $is_search := eq (site.GetPage .KeyName).Layout `search` }}
|
||||||
|
<li>
|
||||||
|
<a href="{{ .URL | absLangURL }}" title="{{ .Title | default .Name }} {{- cond $is_search (" (Alt + /)" | safeHTMLAttr) ("" | safeHTMLAttr ) }}"
|
||||||
|
{{- cond $is_search (" accesskey=/" | safeHTMLAttr) ("" | safeHTMLAttr ) }}>
|
||||||
|
<span {{- if eq $menu_item_url $page_url }} class="active" {{- end }}>
|
||||||
|
{{- .Pre }}
|
||||||
|
{{- .Name -}}
|
||||||
|
{{ .Post -}}
|
||||||
|
</span>
|
||||||
|
{{- if (findRE "://" .URL) }}
|
||||||
|
<svg fill="none" shape-rendering="geometricPrecision" stroke="currentColor" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" stroke-width="2.5" viewBox="0 0 24 24" height="12" width="12">
|
||||||
|
<path d="M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6"></path>
|
||||||
|
<path d="M15 3h6v6"></path>
|
||||||
|
<path d="M10 14L21 3"></path>
|
||||||
|
</svg>
|
||||||
|
{{- end }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{- end }}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{{- with site.Params.homeInfoParams }}
|
||||||
|
<article class="first-entry home-info">
|
||||||
|
<header class="entry-header">
|
||||||
|
<h1>{{ .Title | markdownify }}</h1>
|
||||||
|
</header>
|
||||||
|
<div class="entry-content md-content">
|
||||||
|
{{ $opts := dict "display" "block" }}
|
||||||
|
{{ .Content | $.Page.RenderString $opts }}
|
||||||
|
</div>
|
||||||
|
<footer class="entry-footer">
|
||||||
|
{{ partial "social_icons.html" (dict "align" site.Params.homeInfoParams.AlignSocialIconsTo) }}
|
||||||
|
</footer>
|
||||||
|
</article>
|
||||||
|
{{- end -}}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
<div class="profile">
|
||||||
|
{{- with site.Params.profileMode }}
|
||||||
|
<div class="profile_inner">
|
||||||
|
{{- if .imageUrl -}}
|
||||||
|
{{- $img := "" }}
|
||||||
|
{{- if not (urls.Parse .imageUrl).IsAbs }}
|
||||||
|
{{- $img = resources.Get .imageUrl }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $img }}
|
||||||
|
{{- $processableFormats := (slice "jpg" "jpeg" "png" "tif" "bmp" "gif") -}}
|
||||||
|
{{- if hugo.IsExtended -}}
|
||||||
|
{{- $processableFormats = $processableFormats | append "webp" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $prod := (hugo.IsProduction | or (eq site.Params.env "production")) }}
|
||||||
|
{{- if and (in $processableFormats $img.MediaType.SubType) (eq $prod true)}}
|
||||||
|
{{- if (not (and (not .imageHeight) (not .imageWidth))) }}
|
||||||
|
{{- $img = $img.Resize (printf "%dx%d" .imageWidth .imageHeight) }}
|
||||||
|
{{- else if .imageHeight }}
|
||||||
|
{{- $img = $img.Resize (printf "x%d" .imageHeight) }}
|
||||||
|
{{ else if .imageWidth }}
|
||||||
|
{{- $img = $img.Resize (printf "%dx" .imageWidth) }}
|
||||||
|
{{ else }}
|
||||||
|
{{- $img = $img.Resize "150x150" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
<img draggable="false" src="{{ $img.Permalink }}" alt="{{ .imageTitle | default "profile image" }}" title="{{ .imageTitle }}"
|
||||||
|
height="{{ .imageHeight | default 150 }}" width="{{ .imageWidth | default 150 }}" />
|
||||||
|
{{- else }}
|
||||||
|
<img draggable="false" src="{{ .imageUrl | absURL }}" alt="{{ .imageTitle | default "profile image" }}" title="{{ .imageTitle }}"
|
||||||
|
height="{{ .imageHeight | default 150 }}" width="{{ .imageWidth | default 150 }}" />
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
<h1>{{ .title | default site.Title | markdownify }}</h1>
|
||||||
|
<span>{{ .subtitle | markdownify }}</span>
|
||||||
|
{{- partial "social_icons.html" -}}
|
||||||
|
|
||||||
|
{{- with .buttons }}
|
||||||
|
<div class="buttons">
|
||||||
|
{{- range . }}
|
||||||
|
<a class="button" href="{{ trim .url " " }}" rel="noopener" title="{{ .name }}">
|
||||||
|
<span class="button-inner">
|
||||||
|
{{ .name }}
|
||||||
|
{{- if (findRE "://" .url) }}
|
||||||
|
<svg fill="none" shape-rendering="geometricPrecision" stroke="currentColor" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" stroke-width="2.5" viewBox="0 0 24 24" height="14" width="14">
|
||||||
|
<path d="M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6"></path>
|
||||||
|
<path d="M15 3h6v6"></path>
|
||||||
|
<path d="M10 14L21 3"></path>
|
||||||
|
</svg>
|
||||||
|
{{- end }}
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
{{- end }}
|
||||||
|
</div>
|
||||||
|
{{- end }}
|
||||||
|
</div>
|
||||||
|
{{- end}}
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{{ if and (.Params.canonicalURL) (.Params.ShowCanonicalLink ) -}}
|
||||||
|
{{ $url := urls.Parse .Params.canonicalURL }}
|
||||||
|
|
||||||
|
{{- if or .Params.author site.Params.author (.Param "ShowReadingTime") (not .Date.IsZero) .IsTranslated (or .Params.editPost.URL site.Params.editPost.URL) }} | {{- end -}}
|
||||||
|
<span>
|
||||||
|
{{- (site.Params.CanonicalLinkText | default .Params.CanonicalLinkText) | default "Originally published at" -}}
|
||||||
|
<a href="{{ trim .Params.canonicalURL " " }}" title="{{ trim .Params.canonicalURL " " }}" target="_blank" rel="noopener noreferrer">{{ $url.Host }}</a>
|
||||||
|
</span>
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{{- $scratch := newScratch }}
|
||||||
|
|
||||||
|
{{- if not .Date.IsZero -}}
|
||||||
|
{{- $scratch.Add "meta" (slice (printf "<span title='%s'>%s</span>" (.Date) (.Date | time.Format (default ":date_long" site.Params.DateFormat)))) }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if (.Param "ShowReadingTime") -}}
|
||||||
|
{{- $scratch.Add "meta" (slice (printf "<span>%s</span>" (i18n "read_time" .ReadingTime | default (printf "%d min" .ReadingTime)))) }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if (.Param "ShowWordCount") -}}
|
||||||
|
{{- $scratch.Add "meta" (slice (printf "<span>%s</span>" (i18n "words" .WordCount | default (printf "%d words" .WordCount)))) }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if not (.Param "hideAuthor") -}}
|
||||||
|
{{- with (partial "author.html" .) }}
|
||||||
|
{{- $scratch.Add "meta" (slice (printf "<span>%s</span>" .)) }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Combine all meta information into a single string with separators and render it as HTML.*/}}
|
||||||
|
|
||||||
|
{{- with ($scratch.Get "meta") }}
|
||||||
|
{{- delimit . " · " | safeHTML -}}
|
||||||
|
{{- end -}}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{{- $pages := where site.RegularPages "Type" "in" site.Params.mainSections }}
|
||||||
|
{{- if and (gt (len $pages) 1) (in $pages . ) }}
|
||||||
|
<nav class="paginav">
|
||||||
|
{{- with $pages.Next . }}
|
||||||
|
<a class="prev" href="{{ .Permalink }}">
|
||||||
|
<span class="title">« {{ i18n "prev_page" }}</span>
|
||||||
|
<span>{{- .Name -}}</span>
|
||||||
|
</a>
|
||||||
|
{{- end }}
|
||||||
|
{{- with $pages.Prev . }}
|
||||||
|
<a class="next" href="{{ .Permalink }}">
|
||||||
|
<span class="title">{{ i18n "next_page" }} »</span>
|
||||||
|
<span>{{- .Name -}}</span>
|
||||||
|
</a>
|
||||||
|
{{- end }}
|
||||||
|
</nav>
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
{{- $pageurl := .Permalink }}
|
||||||
|
{{- $title := .Title }}
|
||||||
|
|
||||||
|
{{- $.Scratch.Set "tags" ""}}
|
||||||
|
|
||||||
|
{{- with .Params.Tags }}
|
||||||
|
{{- $hashtags := newScratch}}
|
||||||
|
{{- range . }}{{ $hashtags.Add "tags" (slice (replaceRE "(\\s)" "" . ))}}{{end}}
|
||||||
|
{{- $.Scratch.Set "tags" (delimit ($hashtags.Get "tags") ",") }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $custom := false }}
|
||||||
|
{{- $ShareButtons := (.Param "ShareButtons")}}
|
||||||
|
{{- with $ShareButtons }}{{ $custom = true }}{{ end }}
|
||||||
|
|
||||||
|
<ul class="share-buttons">
|
||||||
|
{{- if (or (cond ($custom) (in $ShareButtons "x") (true)) (cond ($custom) (in $ShareButtons "twitter") (true))) }}
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" aria-label="share {{ $title | plainify }} on x"
|
||||||
|
href="https://x.com/intent/tweet/?text={{ $title }}&url={{ $pageurl }}&hashtags={{- $.Scratch.Get "tags" -}}">
|
||||||
|
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
|
||||||
|
<path
|
||||||
|
d="M512 62.554 L 512 449.446 C 512 483.97 483.97 512 449.446 512 L 62.554 512 C 28.03 512 0 483.97 0 449.446 L 0 62.554 C 0 28.03 28.029 0 62.554 0 L 449.446 0 C 483.971 0 512 28.03 512 62.554 Z M 269.951 190.75 L 182.567 75.216 L 56 75.216 L 207.216 272.95 L 63.9 436.783 L 125.266 436.783 L 235.9 310.383 L 332.567 436.783 L 456 436.783 L 298.367 228.367 L 432.367 75.216 L 371.033 75.216 Z M 127.633 110 L 164.101 110 L 383.481 400.065 L 349.5 400.065 Z" />
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{- end }}
|
||||||
|
{{- if (cond ($custom) (in $ShareButtons "linkedin") (true)) }}
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" aria-label="share {{ $title | plainify }} on linkedin"
|
||||||
|
href="https://www.linkedin.com/shareArticle?mini=true&url={{ $pageurl }}&title={{ $title }}&summary={{ $title }}&source={{ $pageurl }}">
|
||||||
|
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
|
||||||
|
<path
|
||||||
|
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-288.985,423.278l0,-225.717l-75.04,0l0,225.717l75.04,0Zm270.539,0l0,-129.439c0,-69.333 -37.018,-101.586 -86.381,-101.586c-39.804,0 -57.634,21.891 -67.617,37.266l0,-31.958l-75.021,0c0.995,21.181 0,225.717 0,225.717l75.02,0l0,-126.056c0,-6.748 0.486,-13.492 2.474,-18.315c5.414,-13.475 17.767,-27.434 38.494,-27.434c27.135,0 38.007,20.707 38.007,51.037l0,120.768l75.024,0Zm-307.552,-334.556c-25.674,0 -42.448,16.879 -42.448,39.002c0,21.658 16.264,39.002 41.455,39.002l0.484,0c26.165,0 42.452,-17.344 42.452,-39.002c-0.485,-22.092 -16.241,-38.954 -41.943,-39.002Z" />
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{- end }}
|
||||||
|
{{- if (cond ($custom) (in $ShareButtons "reddit") (true)) }}
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" aria-label="share {{ $title | plainify }} on reddit"
|
||||||
|
href="https://reddit.com/submit?url={{ $pageurl }}&title={{ $title }}">
|
||||||
|
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
|
||||||
|
<path
|
||||||
|
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-3.446,265.638c0,-22.964 -18.616,-41.58 -41.58,-41.58c-11.211,0 -21.361,4.457 -28.841,11.666c-28.424,-20.508 -67.586,-33.757 -111.204,-35.278l18.941,-89.121l61.884,13.157c0.756,15.734 13.642,28.29 29.56,28.29c16.407,0 29.706,-13.299 29.706,-29.701c0,-16.403 -13.299,-29.702 -29.706,-29.702c-11.666,0 -21.657,6.792 -26.515,16.578l-69.105,-14.69c-1.922,-0.418 -3.939,-0.042 -5.585,1.036c-1.658,1.073 -2.811,2.761 -3.224,4.686l-21.152,99.438c-44.258,1.228 -84.046,14.494 -112.837,35.232c-7.468,-7.164 -17.589,-11.591 -28.757,-11.591c-22.965,0 -41.585,18.616 -41.585,41.58c0,16.896 10.095,31.41 24.568,37.918c-0.639,4.135 -0.99,8.328 -0.99,12.576c0,63.977 74.469,115.836 166.33,115.836c91.861,0 166.334,-51.859 166.334,-115.836c0,-4.218 -0.347,-8.387 -0.977,-12.493c14.564,-6.47 24.735,-21.034 24.735,-38.001Zm-119.474,108.193c-20.27,20.241 -59.115,21.816 -70.534,21.816c-11.428,0 -50.277,-1.575 -70.522,-21.82c-3.007,-3.008 -3.007,-7.882 0,-10.889c3.003,-2.999 7.882,-3.003 10.885,0c12.777,12.781 40.11,17.317 59.637,17.317c19.522,0 46.86,-4.536 59.657,-17.321c3.016,-2.999 7.886,-2.995 10.885,0.008c3.008,3.011 3.003,7.882 -0.008,10.889Zm-5.23,-48.781c-16.373,0 -29.701,-13.324 -29.701,-29.698c0,-16.381 13.328,-29.714 29.701,-29.714c16.378,0 29.706,13.333 29.706,29.714c0,16.374 -13.328,29.698 -29.706,29.698Zm-160.386,-29.702c0,-16.381 13.328,-29.71 29.714,-29.71c16.369,0 29.689,13.329 29.689,29.71c0,16.373 -13.32,29.693 -29.689,29.693c-16.386,0 -29.714,-13.32 -29.714,-29.693Z" />
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{- end }}
|
||||||
|
{{- if (cond ($custom) (in $ShareButtons "facebook") (true)) }}
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" aria-label="share {{ $title | plainify }} on facebook"
|
||||||
|
href="https://facebook.com/sharer/sharer.php?u={{ $pageurl }}">
|
||||||
|
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
|
||||||
|
<path
|
||||||
|
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-106.468,0l0,-192.915l66.6,0l12.672,-82.621l-79.272,0l0,-53.617c0,-22.603 11.073,-44.636 46.58,-44.636l36.042,0l0,-70.34c0,0 -32.71,-5.582 -63.982,-5.582c-65.288,0 -107.96,39.569 -107.96,111.204l0,62.971l-72.573,0l0,82.621l72.573,0l0,192.915l-191.104,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Z" />
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{- end }}
|
||||||
|
{{- if (cond ($custom) (in $ShareButtons "whatsapp") (true)) }}
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" aria-label="share {{ $title | plainify }} on whatsapp"
|
||||||
|
href="https://api.whatsapp.com/send?text={{ $title }}%20-%20{{ $pageurl }}">
|
||||||
|
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
|
||||||
|
<path
|
||||||
|
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-58.673,127.703c-33.842,-33.881 -78.847,-52.548 -126.798,-52.568c-98.799,0 -179.21,80.405 -179.249,179.234c-0.013,31.593 8.241,62.428 23.927,89.612l-25.429,92.884l95.021,-24.925c26.181,14.28 55.659,21.807 85.658,21.816l0.074,0c98.789,0 179.206,-80.413 179.247,-179.243c0.018,-47.895 -18.61,-92.93 -52.451,-126.81Zm-126.797,275.782l-0.06,0c-26.734,-0.01 -52.954,-7.193 -75.828,-20.767l-5.441,-3.229l-56.386,14.792l15.05,-54.977l-3.542,-5.637c-14.913,-23.72 -22.791,-51.136 -22.779,-79.287c0.033,-82.142 66.867,-148.971 149.046,-148.971c39.793,0.014 77.199,15.531 105.329,43.692c28.128,28.16 43.609,65.592 43.594,105.4c-0.034,82.149 -66.866,148.983 -148.983,148.984Zm81.721,-111.581c-4.479,-2.242 -26.499,-13.075 -30.604,-14.571c-4.105,-1.495 -7.091,-2.241 -10.077,2.241c-2.986,4.483 -11.569,14.572 -14.182,17.562c-2.612,2.988 -5.225,3.364 -9.703,1.12c-4.479,-2.241 -18.91,-6.97 -36.017,-22.23c-13.314,-11.876 -22.304,-26.542 -24.916,-31.026c-2.612,-4.484 -0.279,-6.908 1.963,-9.14c2.016,-2.007 4.48,-5.232 6.719,-7.847c2.24,-2.615 2.986,-4.484 4.479,-7.472c1.493,-2.99 0.747,-5.604 -0.374,-7.846c-1.119,-2.241 -10.077,-24.288 -13.809,-33.256c-3.635,-8.733 -7.327,-7.55 -10.077,-7.688c-2.609,-0.13 -5.598,-0.158 -8.583,-0.158c-2.986,0 -7.839,1.121 -11.944,5.604c-4.105,4.484 -15.675,15.32 -15.675,37.364c0,22.046 16.048,43.342 18.287,46.332c2.24,2.99 31.582,48.227 76.511,67.627c10.685,4.615 19.028,7.371 25.533,9.434c10.728,3.41 20.492,2.929 28.209,1.775c8.605,-1.285 26.499,-10.833 30.231,-21.295c3.732,-10.464 3.732,-19.431 2.612,-21.298c-1.119,-1.869 -4.105,-2.99 -8.583,-5.232Z" />
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{- end }}
|
||||||
|
{{- if (cond ($custom) (in $ShareButtons "telegram") (true)) }}
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" aria-label="share {{ $title | plainify }} on telegram"
|
||||||
|
href="https://telegram.me/share/url?text={{ $title }}&url={{ $pageurl }}">
|
||||||
|
<svg version="1.1" xml:space="preserve" viewBox="2 2 28 28" height="30px" width="30px" fill="currentColor">
|
||||||
|
<path
|
||||||
|
d="M26.49,29.86H5.5a3.37,3.37,0,0,1-2.47-1,3.35,3.35,0,0,1-1-2.47V5.48A3.36,3.36,0,0,1,3,3,3.37,3.37,0,0,1,5.5,2h21A3.38,3.38,0,0,1,29,3a3.36,3.36,0,0,1,1,2.46V26.37a3.35,3.35,0,0,1-1,2.47A3.38,3.38,0,0,1,26.49,29.86Zm-5.38-6.71a.79.79,0,0,0,.85-.66L24.73,9.24a.55.55,0,0,0-.18-.46.62.62,0,0,0-.41-.17q-.08,0-16.53,6.11a.59.59,0,0,0-.41.59.57.57,0,0,0,.43.52l4,1.24,1.61,4.83a.62.62,0,0,0,.63.43.56.56,0,0,0,.4-.17L16.54,20l4.09,3A.9.9,0,0,0,21.11,23.15ZM13.8,20.71l-1.21-4q8.72-5.55,8.78-5.55c.15,0,.23,0,.23.16a.18.18,0,0,1,0,.06s-2.51,2.3-7.52,6.8Z" />
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{- end }}
|
||||||
|
{{- if (cond ($custom) (in $ShareButtons "ycombinator") (true)) }}
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" aria-label="share {{ $title | plainify }} on ycombinator"
|
||||||
|
href="https://news.ycombinator.com/submitlink?t={{ $title }}&u={{ $pageurl }}">
|
||||||
|
<svg version="1.1" xml:space="preserve" width="30px" height="30px" viewBox="0 0 512 512" fill="currentColor"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
|
||||||
|
<path
|
||||||
|
d="M449.446 0C483.971 0 512 28.03 512 62.554L512 449.446C512 483.97 483.97 512 449.446 512L62.554 512C28.03 512 0 483.97 0 449.446L0 62.554C0 28.03 28.029 0 62.554 0L449.446 0ZM183.8767 87.9921H121.8427L230.6673 292.4508V424.0079H281.3328V292.4508L390.1575 87.9921H328.1233L256 238.2489z" />
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{- end }}
|
||||||
|
</ul>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<div class="social-icons" {{ with .align}}align="{{.}}" {{- end }}>
|
||||||
|
{{- range site.Params.socialIcons }}
|
||||||
|
<a href="{{ trim .url " " | safeURL }}" target="_blank" rel="noopener noreferrer me"
|
||||||
|
title="{{ (.title | default .name) | title }}">
|
||||||
|
{{ partial "svg.html" . }}
|
||||||
|
</a>
|
||||||
|
{{- end }}
|
||||||
|
</div>
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,47 @@
|
|||||||
|
{{- $imgs := slice }}
|
||||||
|
{{- $imgParams := .Params.images }}
|
||||||
|
{{- $resources := .Resources.ByType "image" -}}
|
||||||
|
{{/* Find featured image resources if the images parameter is empty. */}}
|
||||||
|
{{- if not $imgParams }}
|
||||||
|
{{- $featured := $resources.GetMatch "*feature*" -}}
|
||||||
|
{{- if not $featured }}{{ $featured = $resources.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}}
|
||||||
|
{{- with $featured }}
|
||||||
|
{{- $imgs = $imgs | append (dict
|
||||||
|
"Image" .
|
||||||
|
"RelPermalink" .RelPermalink
|
||||||
|
"Permalink" .Permalink) }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{/* Use the first one of site images as the fallback. */}}
|
||||||
|
{{- if and (not $imgParams) (not $imgs) }}
|
||||||
|
{{- with site.Params.images }}
|
||||||
|
{{- $imgParams = first 1 . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{/* Parse page's images parameter. */}}
|
||||||
|
{{- range $imgParams }}
|
||||||
|
{{- $img := . }}
|
||||||
|
{{- $url := urls.Parse $img }}
|
||||||
|
{{- if eq $url.Scheme "" }}
|
||||||
|
{{/* Internal image. */}}
|
||||||
|
{{- with $resources.GetMatch $img -}}
|
||||||
|
{{/* Image resource. */}}
|
||||||
|
{{- $imgs = $imgs | append (dict
|
||||||
|
"Image" .
|
||||||
|
"RelPermalink" .RelPermalink
|
||||||
|
"Permalink" .Permalink) }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $imgs = $imgs | append (dict
|
||||||
|
"RelPermalink" (relURL $img)
|
||||||
|
"Permalink" (absURL $img)
|
||||||
|
) }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
{{/* External image */}}
|
||||||
|
{{- $imgs = $imgs | append (dict
|
||||||
|
"RelPermalink" $img
|
||||||
|
"Permalink" $img
|
||||||
|
) }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- return $imgs }}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
<meta property="og:url" content="{{ .Permalink }}">
|
||||||
|
|
||||||
|
{{- with or site.Title site.Params.title | plainify }}
|
||||||
|
<meta property="og:site_name" content="{{ . }}">
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with or .Title site.Title site.Params.title | plainify }}
|
||||||
|
<meta property="og:title" content="{{ . }}">
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with or .Description .Summary site.Params.description | plainify | htmlUnescape }}
|
||||||
|
<meta property="og:description" content="{{ trim . "\n\r\t " }}">
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with or .Params.locale site.Language.LanguageCode }}
|
||||||
|
<meta property="og:locale" content="{{ replace . `-` `_` }}">
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .IsPage }}
|
||||||
|
<meta property="og:type" content="article">
|
||||||
|
{{- with .Section }}
|
||||||
|
<meta property="article:section" content="{{ . }}">
|
||||||
|
{{- end }}
|
||||||
|
{{- $ISO8601 := "2006-01-02T15:04:05-07:00" }}
|
||||||
|
{{- with .PublishDate }}
|
||||||
|
<meta property="article:published_time" {{ .Format $ISO8601 | printf "content=%q" | safeHTMLAttr }}>
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Lastmod }}
|
||||||
|
<meta property="article:modified_time" {{ .Format $ISO8601 | printf "content=%q" | safeHTMLAttr }}>
|
||||||
|
{{- end }}
|
||||||
|
{{- range .GetTerms "tags" | first 6 }}
|
||||||
|
<meta property="article:tag" content="{{ .Page.Title | plainify }}">
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Params.cover.image -}}
|
||||||
|
{{- if (ne .Params.cover.relative true) }}
|
||||||
|
<meta property="og:image" content="{{ .Params.cover.image | absURL }}">
|
||||||
|
{{- else}}
|
||||||
|
<meta property="og:image" content="{{ (path.Join .RelPermalink .Params.cover.image ) | absURL }}">
|
||||||
|
{{- end}}
|
||||||
|
{{- else }}
|
||||||
|
{{- with partial "_funcs/get-page-images" . }}
|
||||||
|
{{- range . | first 6 }}
|
||||||
|
<meta property="og:image" content="{{ .Permalink }}">
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .Params.audio }}
|
||||||
|
{{- range . | first 6 }}
|
||||||
|
<meta property="og:audio" content="{{ . | absURL }}">
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .Params.videos }}
|
||||||
|
{{- range . | first 6 }}
|
||||||
|
<meta property="og:video" content="{{ . | absURL }}">
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- range .GetTerms "series" }}
|
||||||
|
{{- range .Pages | first 7 }}
|
||||||
|
{{- if ne $ . }}
|
||||||
|
<meta property="og:see_also" content="{{ .Permalink }}">
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with site.Params.social }}
|
||||||
|
{{- if reflect.IsMap . }}
|
||||||
|
{{- with .facebook_app_id }}
|
||||||
|
<meta property="fb:app_id" content="{{ . }}">
|
||||||
|
{{- else }}
|
||||||
|
{{- with .facebook_admin }}
|
||||||
|
<meta property="fb:admins" content="{{ . }}">
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with (.Param "social.fediverse_creator") }}
|
||||||
|
<meta name="fediverse:creator" content="{{ . }}">
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
{{ if .IsHome }}
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "{{- ( site.Params.schema.publisherType | default "Organization") | title -}}",
|
||||||
|
"name": {{ site.Title }},
|
||||||
|
"url": {{ site.Home.Permalink }},
|
||||||
|
"description": {{ site.Params.description | plainify | truncate 180 | safeHTML }},
|
||||||
|
{{- if (eq site.Params.schema.publisherType "Person") }}
|
||||||
|
"image": {{ site.Params.assets.favicon | default "favicon.ico" | absURL }},
|
||||||
|
{{- else }}
|
||||||
|
"logo": {{ site.Params.assets.favicon | default "favicon.ico" | absURL }},
|
||||||
|
{{- end }}
|
||||||
|
"sameAs": [
|
||||||
|
{{- if site.Params.schema.sameAs }}
|
||||||
|
{{ range $i, $e := site.Params.schema.sameAs }}{{ if $i }}, {{ end }}{{ trim $e " " }}{{ end }}
|
||||||
|
{{- else}}
|
||||||
|
{{ range $i, $e := site.Params.SocialIcons }}{{ if $i }}, {{ end }}{{ trim $e.url " " | safeURL }}{{ end }}
|
||||||
|
{{- end}}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
{{- else if (or .IsPage .IsSection) }}
|
||||||
|
{{/* BreadcrumbList */}}
|
||||||
|
{{- $url := replace .Parent.Permalink ( printf "%s" site.Home.Permalink) "" }}
|
||||||
|
{{- $lang_url := strings.TrimPrefix ( printf "%s/" .Lang) $url }}
|
||||||
|
{{- $bc_list := (split $lang_url "/")}}
|
||||||
|
|
||||||
|
{{- $scratch := newScratch }}
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "BreadcrumbList",
|
||||||
|
"itemListElement": [
|
||||||
|
{{- range $index, $element := $bc_list }}
|
||||||
|
|
||||||
|
{{- $scratch.Add "path" (printf "%s/" $element ) | safeJS }}
|
||||||
|
{{- $bc_pg := site.GetPage ($scratch.Get "path") -}}
|
||||||
|
|
||||||
|
{{- if (and ($bc_pg) (gt (len . ) 0))}}
|
||||||
|
{{- if (and $index)}}, {{end }}
|
||||||
|
{
|
||||||
|
"@type": "ListItem",
|
||||||
|
"position": {{ add 1 $index }},
|
||||||
|
"name": {{ $bc_pg.Name }},
|
||||||
|
"item": {{ $bc_pg.Permalink | safeHTML }}
|
||||||
|
}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end }}
|
||||||
|
{{- /* self-page addition */ -}}
|
||||||
|
{{- if (ge (len $bc_list) 2) }}, {{end }}
|
||||||
|
{
|
||||||
|
"@type": "ListItem",
|
||||||
|
"position": {{len $bc_list}},
|
||||||
|
"name": {{ .Name }},
|
||||||
|
"item": {{ .Permalink | safeHTML }}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
{{- if .IsPage }}
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "BlogPosting",
|
||||||
|
"headline": {{ .Title | plainify}},
|
||||||
|
"name": "{{ .Title | plainify }}",
|
||||||
|
"description": {{ with .Description | plainify }}{{ . }}{{ else }}{{ .Summary | plainify }}{{ end -}},
|
||||||
|
"keywords": [
|
||||||
|
{{- if .Params.keywords }}
|
||||||
|
{{ range $i, $e := .Params.keywords }}{{ if $i }}, {{ end }}{{ $e }}{{ end }}
|
||||||
|
{{- else }}
|
||||||
|
{{ range $i, $e := .Params.tags }}{{ if $i }}, {{ end }}{{ $e }}{{ end }}
|
||||||
|
{{- end }}
|
||||||
|
],
|
||||||
|
"articleBody": {{ .Content | safeJS | htmlUnescape | plainify }},
|
||||||
|
"wordCount" : "{{ .WordCount }}",
|
||||||
|
"inLanguage": {{ .Language.Lang | default "en-us" }},
|
||||||
|
{{ if .Params.cover.image -}}
|
||||||
|
"image":
|
||||||
|
{{- if (ne .Params.cover.relative true) -}}
|
||||||
|
{{ .Params.cover.image | absURL }},
|
||||||
|
{{- else -}}
|
||||||
|
{{ (path.Join .RelPermalink .Params.cover.image ) | absURL }},
|
||||||
|
{{- end}}
|
||||||
|
{{- else }}
|
||||||
|
{{- $images := partial "templates/_funcs/get-page-images" . -}}
|
||||||
|
{{- with index $images 0 -}}
|
||||||
|
"image": {{ .Permalink }},
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
|
"datePublished": {{ .PublishDate }},
|
||||||
|
"dateModified": {{ .Lastmod }},
|
||||||
|
{{- with (.Params.author | default site.Params.author) }}
|
||||||
|
"author":
|
||||||
|
{{- if (or (eq (printf "%T" .) "[]string") (eq (printf "%T" .) "[]interface {}")) -}}
|
||||||
|
[{{- range $i, $v := . -}}
|
||||||
|
{{- if $i }}, {{end -}}
|
||||||
|
{
|
||||||
|
"@type": "Person",
|
||||||
|
"name": {{ $v }}
|
||||||
|
}
|
||||||
|
{{- end }}],
|
||||||
|
{{- else -}}
|
||||||
|
{
|
||||||
|
"@type": "Person",
|
||||||
|
"name": {{ . }}
|
||||||
|
},
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
|
"mainEntityOfPage": {
|
||||||
|
"@type": "WebPage",
|
||||||
|
"@id": {{ .Permalink | safeHTML }}
|
||||||
|
},
|
||||||
|
"publisher": {
|
||||||
|
"@type": "{{- ( site.Params.schema.publisherType | default "Organization") | title -}}",
|
||||||
|
"name": {{ site.Title }},
|
||||||
|
"logo": {
|
||||||
|
"@type": "ImageObject",
|
||||||
|
"url": {{ site.Params.assets.favicon | default "favicon.ico" | absURL }}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
{{- end }}{{/* .IsPage end */}}
|
||||||
|
|
||||||
|
{{- end -}}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
{{- if .Params.cover.image -}}
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
{{- if (ne $.Params.cover.relative true) }}
|
||||||
|
<meta name="twitter:image" content="{{ .Params.cover.image | absURL }}">
|
||||||
|
{{- else }}
|
||||||
|
<meta name="twitter:image" content="{{ (path.Join .RelPermalink .Params.cover.image ) | absURL }}">
|
||||||
|
{{- end}}
|
||||||
|
{{- else }}
|
||||||
|
{{- $images := partial "templates/_funcs/get-page-images" . }}
|
||||||
|
{{- with index $images 0 }}
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<meta name="twitter:image" content="{{ .Permalink }}">
|
||||||
|
{{- else }}
|
||||||
|
<meta name="twitter:card" content="summary">
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with or .Title site.Title site.Params.title | plainify }}
|
||||||
|
<meta name="twitter:title" content="{{ . }}">
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with or .Description .Summary site.Params.description | plainify | htmlUnescape }}
|
||||||
|
<meta name="twitter:description" content="{{ trim . "\n\r\t " }}">
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- $twitterSite := "" }}
|
||||||
|
{{- with site.Params.social }}
|
||||||
|
{{- if reflect.IsMap . }}
|
||||||
|
{{- with .twitter }}
|
||||||
|
{{- $content := . }}
|
||||||
|
{{- if not (strings.HasPrefix . "@") }}
|
||||||
|
{{- $content = printf "@%v" . }}
|
||||||
|
{{- end }}
|
||||||
|
<meta name="twitter:site" content="{{ $content }}">
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user