mirror of https://github.com/lxndrblz/anatole.git

Alexander Bilz
08.14.2021 675cacac8408403a907e2937b3e485eeefe05b1c
Merge branch 'master' into pr/72
1 files deleted
13 files added
26 files modified
1123 ■■■■ changed files
README.md 200 ●●●● patch | view | raw | blame | history
assets/css/markupHighlight.css 215 ●●●●● patch | view | raw | blame | history
assets/css/style.css 109 ●●●●● patch | view | raw | blame | history
assets/js/anatole-header.js 52 ●●●●● patch | view | raw | blame | history
assets/js/anatole-theme-switcher.js 51 ●●●●● patch | view | raw | blame | history
exampleSite/config.toml 35 ●●●● patch | view | raw | blame | history
exampleSite/content/_index.md 21 ●●●●● patch | view | raw | blame | history
exampleSite/content/about.md 2 ●●● patch | view | raw | blame | history
exampleSite/content/contact.md 7 ●●●●● patch | view | raw | blame | history
exampleSite/content/post/_index.md patch | view | raw | blame | history
exampleSite/content/post/emoji-support.md 3 ●●●● patch | view | raw | blame | history
exampleSite/content/post/markdown-syntax.md 26 ●●●● patch | view | raw | blame | history
exampleSite/content/post/math-typesetting.md 14 ●●●● patch | view | raw | blame | history
exampleSite/content/post/placeholder-text.md 23 ●●●● patch | view | raw | blame | history
exampleSite/content/post/rich-content.md 10 ●●●● patch | view | raw | blame | history
i18n/ch-zn.toml 21 ●●●●● patch | view | raw | blame | history
i18n/de.toml 3 ●●●●● patch | view | raw | blame | history
i18n/dk.toml 24 ●●●●● patch | view | raw | blame | history
i18n/en.toml 3 ●●●●● patch | view | raw | blame | history
i18n/es.toml 24 ●●●●● patch | view | raw | blame | history
i18n/fa.toml 3 ●●●●● patch | view | raw | blame | history
i18n/fi.toml 24 ●●●●● patch | view | raw | blame | history
i18n/fr.toml 24 ●●●●● patch | view | raw | blame | history
i18n/it.toml 3 ●●●●● patch | view | raw | blame | history
i18n/pt-br.toml 24 ●●●●● patch | view | raw | blame | history
i18n/zh-cn.toml 24 ●●●●● patch | view | raw | blame | history
i18n/zh-tw.toml 24 ●●●●● patch | view | raw | blame | history
images/screenshot.png patch | view | raw | blame | history
images/screenshot_dark.png patch | view | raw | blame | history
images/tn.png patch | view | raw | blame | history
layouts/_default/baseof.html 3 ●●●●● patch | view | raw | blame | history
layouts/_default/list.html 7 ●●●● patch | view | raw | blame | history
layouts/_default/single.html 23 ●●●● patch | view | raw | blame | history
layouts/index.html 31 ●●●●● patch | view | raw | blame | history
layouts/partials/analytics/simpleanalytics.html 7 ●●●●● patch | view | raw | blame | history
layouts/partials/comments/utterances.html 10 ●●●●● patch | view | raw | blame | history
layouts/partials/contact.html 19 ●●●●● patch | view | raw | blame | history
layouts/partials/head.html 42 ●●●● patch | view | raw | blame | history
layouts/partials/navbar.html 6 ●●●●● patch | view | raw | blame | history
layouts/partials/sidebar.html 6 ●●●● patch | view | raw | blame | history
README.md
@@ -1,4 +1,4 @@
# Anatole ![](https://img.shields.io/badge/license-MIT-blue.svg) [![Netlify Status](https://api.netlify.com/api/v1/badges/ee7a5df4-b944-4e03-853d-39219c96d484/deploy-status)](https://alexbilz.com/)
# Anatole ![LICENSE](https://img.shields.io/badge/license-MIT-blue.svg) [![Netlify Status](https://api.netlify.com/api/v1/badges/ee7a5df4-b944-4e03-853d-39219c96d484/deploy-status)](https://alexbilz.com/)
Anatole is a beautiful minimalist two-column [hugo](https://gohugo.io/) theme based on farbox-theme-Anatole.
@@ -6,9 +6,10 @@
![Screenshot Anatole Theme (dark)](https://raw.githubusercontent.com/lxndrblz/anatole/master/images/screenshot_dark.png)
## Features
Anatole's aims to be minimalistic and sleek, but still brings some great functionality.
### Features include:
### Features include
- Profile picture and slogan
- Dark mode
@@ -17,11 +18,13 @@
- Multilingual
- 100⁄100 Google Lighthouse score
- Google Analytics (optional)
- Comments powered by Disqus (optional)
- Comments powered by Disqus or Utteranc.es (optional)
- SimpleAnalytics (optional)
- Katex support (optional)
- Formspree Contact Form (optional)
- Twitter Cards support
- MIT License
- Fontawesome icons
- Fontawesome 5.15.1 icons
- Custom CSS (optional)
- Custom JavaScript (optional)
- Medium like zoom for images
@@ -30,27 +33,33 @@
- Uses Hugo pipes to process assets
## Preview the exampleSite
```
```shell
git clone https://github.com/lxndrblz/anatole.git anatole
cd anatole/exampleSite
hugo server --themesDir ../..
```
## Quick Start
1. Add the repository into your Hugo Project repository as a submodule: `git submodule add https://github.com/lxndrblz/anatole.git themes/anatole`.
2. Configure your `config.toml`. Feel free to copy the demo `config.toml` and some content from the exampleSite. 
3. Build your site with `hugo serve` and admire the result at `http://localhost:1313/`.
## Update your installation
If you want to get the latest update of the `Anatole` theme please execute this command:
```
```shell
git submodule update --remote --merge
```
## Modifying the config.toml
Ìn this section I'll discuss the custom parameters available within the `config.toml`. The complete [sample](https://github.com/lxndrblz/anatole/blob/master/exampleSite/config.toml) can be found in the exampleSite folder. 
### Profile picture and slogan
```toml
[params]
title = "I'm Jane Doe"
@@ -60,10 +69,19 @@
```
### Favicon
Add you own favicon in `static/favicons/favicon.ico`.
### Copyright
By default the copyright, will show the current year, but you can change this by configuring the `copyright` parameter.
```toml
copyright = "2020-2021"
```
### Navigation items
Non-content entries can be added right from the `config.toml` file.
```toml
[menu]
@@ -85,17 +103,53 @@
  identifier = "about"
  url = "/about/"
```
### Prefer dark theme
You can easily enable the dark mode from the `config.toml` all you have to do is to set the parameter `displayMode` to `dark`. If you dont specify any displayMode, then the light version will be loaded.
Please also note that returning visitors will see the theme that was last displayed to them on your site. If your user has his system configured to dark mode, then this will also take presendence over the displayMode set in the `config.toml`.
### Prefer dark theme
You can easily enable the dark mode from the `config.toml` all you have to do is to set the parameter `displayMode` to `dark`. If you don't specify any displayMode, then the light version will be loaded.
Please also note that returning visitors will see the theme that was last displayed to them on your site. If your user has his system configured to dark mode, then this will also take precedence over the `displayMode` set in the `config.toml`.
```toml
[params]
displayMode = "dark"
``` 
### Disable Theme Switcher
You can easily disable the theme switcher from the `config.toml`. All you have to do is to set the parameter `disableThemeSwitcher` to `true`.
```toml
[params]
disableThemeSwitcher = true # Theme switcher is enabled by default
```
### Disable Animations
You can easily disable the animations from the `config.toml`. All you have to do is to set the parameter `doNotLoadAnimations` to `true`.
```toml
[params]
doNotLoadAnimations = true # Animations are loaded by default
```
### Control the date Format
You can change the default date formating for the `list.html`, the `single.html` and the `index.html`. Simply configure the matching parameters.
```toml
[params]
singleDateFormat = "Mon, Jan 2, 2006"
indexDateFormat = "Mon, Jan 2, 2006"
listDateFormat = "Jan 2"
```
### Have a static page as a home page
If you prefer having a static page as your home page rather than a listing of the latest posts, then make sure you leave the `mainSections` parameter blank:
```toml
[params]
  mainSections = []
```
Put any content into the `_index.md` file located in the content directory. If you want, you can also have some static text and the posts below. In such case, simply keep the `mainSections = ["post"]` and put any static content in the `_index.md`.
### Multilingual support
Anatole supports multilingual page setups. All you need to do is to add the languages to your 'config.toml'. For each Language you can set the custom options like title or description. It's important to include a `LanguageName`, as it will be displayed in the main menu.  
```toml
[Languages]
  [Languages.en]
@@ -109,7 +163,9 @@
  weight = 2
  LanguageName = "DE"
```
There are two ways of translating your content either by adding a suffix in the filename eg. `mypost.de.md` or by setting a contentDir (a certain directory) for each language. [Link to the Hugo documentation](https://gohugo.io/content-management/multilingual/). If you want to use the option with the `contentDir`, you will have to add the `contentDir` parameter for each language:
```toml
[languages]
  [languages.en]
@@ -117,7 +173,9 @@
    languageName = "EN"
    weight = 1
```
To make sure your menu is linking to the correct localized content, make sure that you customize the menu items to inlude the language prefix. Your menu might look like the following:
To make sure your menu is linking to the correct localized content, make sure that you customize the menu items to include the language prefix. Your menu might look like the following:
```toml
[[Languages.de.menu.main]]
url    = "/de/"
@@ -137,58 +195,107 @@
identifier = "about"
url = "/de/about/"
```
Anatole currently ships with support for some basic languages. Contributions for other language translations are welcome.
### :100: Google Lighthouse score
The theme is optimized to adhere to the requirements checked for in the Lighthouse Audit. On my [personal site](https://www.alexbilz.com) I was able to reach a perfect 100⁄100 score.
![Google Lighthouse Score](https://raw.githubusercontent.com/lxndrblz/anatole/master/images/lighthouse.png)
### Comments powered by Disqus
No comment section is shown on the `single.html`, unless a disqus code is specified in the `config.toml` file.
No comment section is shown on the `single.html`, unless a Disqus code is specified in the `config.toml` file.
```toml
disqusShortname = "XXX"
```
### Comments powered by Utteranc.es
No comment section is shown on the `single.html` unless a `repo` is specified in the `config.toml` file. If uncertain how parameter to configure, check out the official [documentation}(https://utteranc.es/).
```toml
[params.utterances]
repo = "githubuser/reponame"
issueTerm = "pathname"
theme= "preferred-color-scheme"
# label =
```
Two notes on the security of Utteranc.es
- If you are using a strict CSP, you'll have to add the domain to it.
- The script currently has no built-in integrity check, due to limitations of [Utterances](https://github.com/utterance/utterances/issues/40).
### Google Analytics
To use Google Analytics, a valid tracking code has to be added. If you don't want to load the code, then commend out the parameter.
```toml
googleAnalytics = "UA-123-45"
```
### Google Site Verification
To use Google Site Verification, add the following line to the `[params]`:
### Simple Analytics
To use Simple Analytics, it has to be enabled by setting the parameter to true. If you are using a custom subdomain to evade Adblockers, then specify the URL without a trailing slash.
```toml
[params.simpleAnalytics]
enable = true
# customurl = "https://analytics.example.com"
```
### Google Site Verification
To use Google Site Verification, add the following line to the `[params]`:
```toml
[params]
googleSiteVerify = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
```
Replace the hash with the one Google provided you.
### Beautiful math functions
```toml
## Math settings
[params.math]
enable = false  # options: true, false. Enable math support globally, default: false. You can always enable math on per page.
use = "katex"  # options: "katex", "mathjax". default is "katex".
```
### Formspree Contact Form on the Contact page
Step 1: Configure the `contactFormAction` in the `config.toml`
```toml
[params]
#contactFormAction = "https://formspree.io/f/your-form-hash-here"
```
Step 2: Activate the `contact: true` or  `contact=true` in the frontmatter of a page. See `exampleSite/content/contact.html` as an example.
### Twitter Cards support
In order to use the full functionality of Twitter cards, you will have to define a couple of settings in the `config.toml` and the frontmatter of a page.
In the `config.toml` you can configure a site feature image. This image will be displayed, if no image is defined in the frontmatter of a page.
```toml
[params]
  images = ["images/site-feature-image.png"]
```
To define a custom image of a page, you might want to add the following to the frontmatter of a post.
```toml
images = ["post-cover.png"]
```
### Custom CSS
You can add your custom CSS files with the `customCss` parameter of the configuration file. Put your files into the `assets/css` directory.
```toml
customCss = ["css/custom.css", "css/styles.css"]
```
On the user-side it will look like this:
```text
.
└── assets
@@ -196,13 +303,18 @@
        ├── custom.css
        └── styles.css
```
### Custom JavaScript
You can add your custom JS files with the `customJs` parameter of the configuration file. Put your files into the `assets/js` directory.
```toml
[params]
customJs = ["js/hello.js", "js/world.js"]
```
On the user-side it will look like this:
```text
.
└── assets
@@ -210,73 +322,94 @@
        ├── hello.js
        └── world.js
```
`hello.js` and `world.js` will be bundled into a `custom.min.js`.
You can also include links to remote javascript files (hosted on CDNs for example). But be aware, that integrity settings and minification won't be applied. Further make sure to adjust your CSP. You can load a remote script like this:
```toml
[params]
customJs = ["http://cdn.exmple.org/fancyscript.js"]
```
Both approaches can even be mixed:
```toml
[params]
customJs = ["https://cdn.exmple.org/fancyscript.js", "js/world.js"]
```
### Content Security Policy
The theme is compliant with most strict CSP policies out of the box. A sample CSP for an Anatole-based site would look something like this:
```
```text
Content-Security-Policy "
  base-uri 'self';
  connect-src 'self';
  default-src 'self';
  frame-ancestors 'none';
  font-src 'self' stackpath.bootstrapcdn.com;
  font-src 'self' cdnjs.cloudflare.com;
  img-src 'self';
  object-src 'none';
  script-src 'self';
  style-src 'self' stackpath.bootstrapcdn.com;
  style-src 'self' cdnjs.cloudflare.com;
"
```
If you want to configure the security headers for a site running on Netlify, you want to make sure you create a special `_headers` file in your sites static folder. The content might look like the following:
```
```text
/*
  X-Frame-Options: DENY
  X-Clacks-Overhead: "GNU Terry Pratchett"
  X-XSS-Protection: 1; mode=block
  X-Content-Type-Options: nosniff
  Referrer-Policy: same-origin
  Content-Security-Policy:  base-uri 'self'; connect-src 'self'; default-src 'self'; frame-ancestors 'none'; font-src 'self' stackpath.bootstrapcdn.com; img-src 'self'; object-src 'none'; script-src 'self'; style-src 'self' stackpath.bootstrapcdn.com;
  Content-Security-Policy:  base-uri 'self'; connect-src 'self'; default-src 'self'; frame-ancestors 'none'; font-src 'self' cdnjs.cloudflare.com; img-src 'self'; object-src 'none'; script-src 'self'; style-src 'self' cdnjs.cloudflare.com;
  Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
```
### Configurable pagination section
You can configure the pages shown on the front page by altering the `mainSections` parameter:
```toml
[params]
  mainSections = ["post", "docs"]
```
### Robots.txt
If you want Hugo to generate a robots.txt, you will have to set the `enableRobotsTXT` in the `config.toml` to `true`. By default a robots.txt, which allows search engine crawlers to access to any page, will be generated. It will look like this:
```
```text
User-agent: *
```
If certain sites shoud be excluded from being accessed, you might want to setup a custom robots.txt file within your `static` folder of your site.
If certain sites should be excluded from being accessed, you might want to setup a custom robots.txt file within your `static` folder of your site.
### Syntax highlighting
This theme has support for either Hugo's lightning fast Chroma code highlighting. See the [Hugo docs](https://gohugo.io/content-management/syntax-highlighting/) for more information.
This theme has support for either Hugo's lightning-fast Chroma code highlighting. See the [Hugo docs](https://gohugo.io/content-management/syntax-highlighting/) for more information.
To enable Chroma, add the following to your site parameters:
```
```toml
pygmentsCodeFences = true
pygmentsUseClasses = true
```
Then, you can generate a different style by running:
```
```shell
hugo gen chromastyles --style=monokailight > assets/css/syntax.css
```
If you get any errors, make sure the `assets/css/` directory exists within your sites root folder.
Include the newly generated `syntax.css` like a standard custom css script:
```
Include the newly generated `syntax.css` like a standard custom CSS script:
```toml
[params]
customCss = ["css/syntax.css"]
```
@@ -287,9 +420,16 @@
## Maintenance
This theme is maintained by its author [Alexander Bilz](https://github.com/lxndrblz). Please open an issue/pull request if you want to contribute in making this theme better and more feature-complete.
This theme is maintained by its author [Alexander Bilz](https://github.com/lxndrblz) and with the help from these awesome [contributors](https://github.com/lxndrblz/anatole/graphs/contributors). Please open an issue/pull request if you want to contribute to making this theme better and more feature-complete. For PRs please make sure that they align with theme's goals: minimalism, speed and elegance.
## Sponsoring
If you like this theme, give it a star on GitHub, and consider supporting its development:
[![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/lxndrblz/)
## Special Thanks 🎁
* Go to [Cai Cai](https://github.com/hi-caicai), for the great Anatole Farbox theme that formed the foundation for this theme.
* Go to [Kareya Saleh](https://unsplash.com/photos/tLKOj6cNwe0) for providing the profile picture in the exampleSite.
- Go to [Cai Cai](https://github.com/hi-caicai), for the great Anatole Farbox theme that formed the foundation for this theme.
- Go to [Kareya Saleh](https://unsplash.com/photos/tLKOj6cNwe0) for providing the profile picture in the exampleSite.
assets/css/markupHighlight.css
New file
@@ -0,0 +1,215 @@
:root {
  /* Light -> monokailight */
  --chr-def-color: #272822;
  --chr-def-bg-color: #fafafa;
  --chr-err-color: #960050;
  --chr-err-bg-color: #960050;
  --chr-hl-bg-color: #ffffcc;
  --chr-lnt-color: #7f7f7f;
  --chr-ln-color: #7f7f7f;
  --chr-k-color: #00a8c8;
  --chr-kc-color: #00a8c8;
  --chr-kd-color: #00a8c8;
  --chr-kn-color: #f92672;
  --chr-kp-color: #00a8c8;
  --chr-kr-color: #00a8c8;
  --chr-kt-color: #00a8c8;
  --chr-n-color: #111111;
  --chr-na-color: #75af00;
  --chr-nb-color: #111111;
  --chr-bp-color: #111111;
  --chr-nc-color: #75af00;
  --chr-no-color: #00a8c8;
  --chr-nd-color: #75af00;
  --chr-ni-color: #111111;
  --chr-ne-color: #75af00;
  --chr-nf-color: #75af00;
  --chr-fm-color: #111111;
  --chr-nl-color: #111111;
  --chr-nn-color: #111111;
  --chr-nx-color: #75af00;
  --chr-py-color: #111111;
  --chr-nt-color: #f92672;
  --chr-nv-color: #111111;
  --chr-vc-color: #111111;
  --chr-vg-color: #111111;
  --chr-vi-color: #111111;
  --chr-vm-color: #111111;
  --chr-l-color: #ae81ff;
  --chr-ld-color: #d88200;
  --chr-s-color: #d88200;
  --chr-sa-color: #d88200;
  --chr-sb-color: #d88200;
  --chr-sc-color: #d88200;
  --chr-dl-color: #d88200;
  --chr-sd-color: #d88200;
  --chr-s2-color: #d88200;
  --chr-se-color: #8045ff;
  --chr-sh-color: #d88200;
  --chr-si-color: #d88200;
  --chr-sx-color: #d88200;
  --chr-sr-color: #d88200;
  --chr-s1-color: #d88200;
  --chr-ss-color: #d88200;
  --chr-m-color: #ae81ff;
  --chr-mb-color: #ae81ff;
  --chr-mf-color: #ae81ff;
  --chr-mh-color: #ae81ff;
  --chr-mi-color: #ae81ff;
  --chr-il-color: #ae81ff;
  --chr-mo-color: #ae81ff;
  --chr-o-color: #f92672;
  --chr-ow-color: #f92672;
  --chr-p-color: #111111;
  --chr-c-color: #75715e;
  --chr-ch-color: #75715e;
  --chr-cm-color: #75715e;
  --chr-c1-color: #75715e;
  --chr-cs-color: #75715e;
  --chr-cp-color: #75715e;
  --chr-cpf-color: #75715e;
}
html[data-theme='dark'] {
  /* Dark -> monokai */
  --chr-def-color: #f8f8f2;
  --chr-def-bg-color: #272822;
  --chr-err-color: #960050;
  --chr-err-bg-color: #1e0010;
  --chr-hl-bg-color: #ffffcc;
  --chr-lnt-color: #7f7f7f;
  --chr-ln-color: #7f7f7f;
  --chr-k-color: #66d9ef;
  --chr-kc-color: #66d9ef;
  --chr-kd-color: #66d9ef;
  --chr-kn-color: #f92672;
  --chr-kp-color: #66d9ef;
  --chr-kr-color: #66d9ef;
  --chr-kt-color: #66d9ef;
  --chr-na-color: #a6e22e;
  --chr-nc-color: #a6e22e;
  --chr-no-color: #66d9ef;
  --chr-nd-color: #a6e22e;
  --chr-ne-color: #a6e22e;
  --chr-nf-color: #a6e22e;
  --chr-nx-color: #a6e22e;
  --chr-nt-color: #f92672;
  --chr-l-color: #ae81ff;
  --chr-ld-color: #e6db74;
  --chr-s-color: #e6db74;
  --chr-sa-color: #e6db74;
  --chr-sb-color: #e6db74;
  --chr-sc-color: #e6db74;
  --chr-dl-color: #e6db74;
  --chr-sd-color: #e6db74;
  --chr-s2-color: #e6db74;
  --chr-se-color: #ae81ff;
  --chr-sh-color: #e6db74;
  --chr-si-color: #e6db74;
  --chr-sx-color: #e6db74;
  --chr-sr-color: #e6db74;
  --chr-s1-color: #e6db74;
  --chr-ss-color: #e6db74;
  --chr-m-color: #ae81ff;
  --chr-mb-color: #ae81ff;
  --chr-mf-color: #ae81ff;
  --chr-mh-color: #ae81ff;
  --chr-mi-color: #ae81ff;
  --chr-il-color: #ae81ff;
  --chr-mo-color: #ae81ff;
  --chr-o-color: #f92672;
  --chr-ow-color: #f92672;
  --chr-c-color: #75715e;
  --chr-ch-color: #75715e;
  --chr-cm-color: #75715e;
  --chr-c1-color: #75715e;
  --chr-cs-color: #75715e;
  --chr-cp-color: #75715e;
  --chr-cpf-color: #75715e;
  --chr-gd-color: #f92672;
  --chr-gi-color: #a6e22e;
  --chr-gu-color: #75715e;
}
/* Background */ .chroma { color: var(--chr-def-color); background-color: var(--chr-def-bg-color) }
/* Other */ .chroma .x {  }
/* Error */ .chroma .err { color: var(--chr-err-color); background-color: var(--chr-err-bg-color) }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: var(--chr-hl-bg-color) }
/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: var(--chr-lnt-color) }
/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: var(--chr-ln-color) }
/* Keyword */ .chroma .k { color: var(--chr-k-color) }
/* KeywordConstant */ .chroma .kc { color: var(--chr-kc-color) }
/* KeywordDeclaration */ .chroma .kd { color: var(--chr-kd-color) }
/* KeywordNamespace */ .chroma .kn { color: var(--chr-kn-color) }
/* KeywordPseudo */ .chroma .kp { color: var(--chr-kp-color) }
/* KeywordReserved */ .chroma .kr { color: var(--chr-kr-color) }
/* KeywordType */ .chroma .kt { color: var(--chr-kt-color) }
/* Name */ .chroma .n { color: var(--chr-n-color) }
/* NameAttribute */ .chroma .na { color: var(--chr-na-color) }
/* NameBuiltin */ .chroma .nb { color: var(--chr-nb-color) }
/* NameBuiltinPseudo */ .chroma .bp { color: var(--chr-bp-color) }
/* NameClass */ .chroma .nc { color: var(--chr-nc-color) }
/* NameConstant */ .chroma .no { color: var(--chr-no-color) }
/* NameDecorator */ .chroma .nd { color: var(--chr-nd-color) }
/* NameEntity */ .chroma .ni { color: var(--chr-ni-color) }
/* NameException */ .chroma .ne { color: var(--chr-ne-color) }
/* NameFunction */ .chroma .nf { color: var(--chr-nf-color) }
/* NameFunctionMagic */ .chroma .fm { color: var(--chr-fm-color) }
/* NameLabel */ .chroma .nl { color: var(--chr-nl-color) }
/* NameNamespace */ .chroma .nn { color: var(--chr-nn-color) }
/* NameOther */ .chroma .nx { color: var(--chr-nx-color) }
/* NameProperty */ .chroma .py { color: var(--chr-py-color) }
/* NameTag */ .chroma .nt { color: var(--chr-nt-color) }
/* NameVariable */ .chroma .nv { color: var(--chr-nv-color) }
/* NameVariableClass */ .chroma .vc { color: var(--chr-vc-color) }
/* NameVariableGlobal */ .chroma .vg { color: var(--chr-vg-color) }
/* NameVariableInstance */ .chroma .vi { color: var(--chr-vi-color) }
/* NameVariableMagic */ .chroma .vm { color: var(--chr-vm-color) }
/* Literal */ .chroma .l { color: var(--chr-l-color) }
/* LiteralDate */ .chroma .ld { color: var(--chr-ld-color) }
/* LiteralString */ .chroma .s { color: var(--chr-s-color) }
/* LiteralStringAffix */ .chroma .sa { color: var(--chr-sa-color) }
/* LiteralStringBacktick */ .chroma .sb { color: var(--chr-sb-color) }
/* LiteralStringChar */ .chroma .sc { color: var(--chr-sc-color) }
/* LiteralStringDelimiter */ .chroma .dl { color: var(--chr-dl-color) }
/* LiteralStringDoc */ .chroma .sd { color: var(--chr-sd-color) }
/* LiteralStringDouble */ .chroma .s2 { color: var(--chr-s2-color) }
/* LiteralStringEscape */ .chroma .se { color: var(--chr-se-color) }
/* LiteralStringHeredoc */ .chroma .sh { color: var(--chr-sh-color) }
/* LiteralStringInterpol */ .chroma .si { color: var(--chr-si-color) }
/* LiteralStringOther */ .chroma .sx { color: var(--chr-sx-color) }
/* LiteralStringRegex */ .chroma .sr { color: var(--chr-sr-color) }
/* LiteralStringSingle */ .chroma .s1 { color: var(--chr-s1-color) }
/* LiteralStringSymbol */ .chroma .ss { color: var(--chr-ss-color) }
/* LiteralNumber */ .chroma .m { color: var(--chr-m-color) }
/* LiteralNumberBin */ .chroma .mb { color: var(--chr-mb-color) }
/* LiteralNumberFloat */ .chroma .mf { color: var(--chr-mf-color) }
/* LiteralNumberHex */ .chroma .mh { color: var(--chr-mh-color) }
/* LiteralNumberInteger */ .chroma .mi { color: var(--chr-mi-color) }
/* LiteralNumberIntegerLong */ .chroma .il { color: var(--chr-il-color) }
/* LiteralNumberOct */ .chroma .mo { color: var(--chr-mo-color) }
/* Operator */ .chroma .o { color: var(--chr-o-color) }
/* OperatorWord */ .chroma .ow { color: var(--chr-ow-color) }
/* Punctuation */ .chroma .p { color: var(--chr-p-color) }
/* Comment */ .chroma .c { color: var(--chr-c-color) }
/* CommentHashbang */ .chroma .ch { color: var(--chr-ch-color) }
/* CommentMultiline */ .chroma .cm { color: var(--chr-cm-color) }
/* CommentSingle */ .chroma .c1 { color: var(--chr-c1-color) }
/* CommentSpecial */ .chroma .cs { color: var(--chr-cs-color) }
/* CommentPreproc */ .chroma .cp { color: var(--chr-cp-color) }
/* CommentPreprocFile */ .chroma .cpf { color: var(--chr-cpf-color) }
/* Generic */ .chroma .g {  }
/* GenericDeleted */ .chroma .gd {  }
/* GenericEmph */ .chroma .ge { font-style: italic }
/* GenericError */ .chroma .gr {  }
/* GenericHeading */ .chroma .gh {  }
/* GenericInserted */ .chroma .gi {  }
/* GenericOutput */ .chroma .go {  }
/* GenericPrompt */ .chroma .gp {  }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu {  }
/* GenericTraceback */ .chroma .gt {  }
/* GenericUnderline */ .chroma .gl {  }
/* TextWhitespace */ .chroma .w {  }
assets/css/style.css
@@ -7,6 +7,8 @@
    --body-color: rgba(0, 0, 0, 0.7);
    --post-color: rgba(0, 0, 0, 0.44);
    --border-color: rgba(0, 0, 0, 0.15);
    --form-border-color: #9f9f9f;
    --form-button-hover-border-color: #000;
    --pre-bg-color: #f9f9fd;
    --nav-text-color: #5a5a5a;
    --tag-color: #424242;
@@ -25,6 +27,8 @@
    --body-color: rgb(169, 169, 179);
    --post-color: rgba(0, 0, 0, 0.44);
    --border-color: rgb(38, 38, 38);
    --form-border-color: rgb(169, 169, 179);
    --form-button-hover-border-color: #fff;
    --pre-bg-color: rgb(33, 33, 45);
    --nav-text-color: rgb(191, 191, 191);
    --tag-color: rgb(191, 191, 191);
@@ -265,11 +269,15 @@
    position: fixed;
    z-index: 4;
    border-right: 1px solid var(--border-color);
    display: flex;
    flex-direction: column;
    min-height: 100%;
}
.sidebar .logo-title {
    text-align: center;
    padding-top: 240px;
    flex: 1;
}
.sidebar .logo-title .description {
@@ -306,6 +314,7 @@
    padding: 0;
    font-size: 14px;
    text-align: center;
    flex: 7;
}
.sidebar .social-links i {
@@ -419,6 +428,7 @@
.post .post-footer .meta .info .date {
    margin-right: 10px;
    margin-left: 5px
}
.info {
@@ -580,9 +590,10 @@
    font-size: 10px;
    margin: 0 auto;
    bottom: 0;
    position: absolute;
    width: 100%;
    padding-bottom: 20px;
    flex: 0;
    position: relative;
}
.footer a {
@@ -743,6 +754,10 @@
    margin: 30px;
}
.utterances {
    max-width: unset;
}
/* Buttons */
a.btn {
    color: #868686;
@@ -870,7 +885,8 @@
    display: none;
}
@media screen and (max-width: 960px) {
@media screen and (max-width: 960px),
print {
    .sidebar {
        width: 100%;
        position: absolute;
@@ -931,7 +947,6 @@
        display: block;
        flex-grow: 0;
        flex-shrink: 0;
        display: block;
        line-height: 2.5;
        padding: .5rem .75rem;
        position: relative;
@@ -1039,3 +1054,91 @@
    cursor: zoom-out;
    will-change: transform;
}
@media print {
    .page-top {
        display: none;
    }
}
@media (min-width: 1921px){
    .content {
        padding-right: 25%;
        width: 35%;
    }
    .sidebar {
        padding-left: 15%;
        width: 25%;
    }
}
/* (CONTACT) FORM */
.contact-form {
    margin-top: 30px;
}
.form-style{
    width: 100%;
}
.form-style ul {
    padding: 0;
    margin: 0;
    list-style: none;
}
.form-style ul li {
    display: block;
    margin-bottom: 10px;
    min-height: 35px;
}
.form-style ul li .field-style {
    box-sizing: border-box;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    font-size: 14px;
    padding: 8px;
    outline: none;
    background-color: var(--bg-color);
    border: 1px solid var(--form-border-color);
    color: var(--body-color);
}
.form-style ul li    .field-style:focus {
    box-shadow: 0 0 5px;
    border:1px solid;
}
.form-style ul li .field-split {
    width: 49%;
}
.form-style ul li .field-full {
    width: 100%;
}
.form-style ul li input.align-left {
    float:left;
}
.form-style ul li input.align-right {
    float:right;
}
.form-style ul li textarea {
    background-color: var(--bg-color);
    border: 1px solid var(--form-border-color);
    color: var(--body-color);
    width: 100%;
    height: auto;
}
.form-style ul li input[type="button"],
.form-style ul li input[type="submit"] {
    background-color: var(--bg-color);
    border: 1px solid var(--form-border-color);
    display: inline-block;
    cursor: pointer;
    color: var(--body-color);
    text-decoration: none;
    width: 100%;
}
.form-style ul li input[type="button"]:hover,
.form-style ul li input[type="submit"]:hover {
    background-color: var(--bg-color);
    border: 1px solid var(--form-button-hover-border-color);
}
/* (CONTACT) FORM END */
assets/js/anatole-header.js
@@ -1,53 +1,3 @@
// initialize default value
function getTheme() {
    return localStorage.getItem('theme') ? localStorage.getItem('theme') : null;
}
function setTheme(style) {
    document.documentElement.setAttribute('data-theme', style);
    localStorage.setItem('theme', style);
}
function init() {
    // initialize default value
    var theme = getTheme();
    // check if a prefered color theme is set for users that have never been to our site
    const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
    if (theme === null) {
        if (userPrefersDark) {
            setTheme('dark');
        } else if (!document.documentElement.getAttribute('data-theme')) {
            setTheme('light');
        } else {
            setTheme(document.documentElement.getAttribute('data-theme'));
        }
    } else {
        // load a stored theme
        if (theme == 'light') {
            document.documentElement.setAttribute('data-theme', 'light');
        } else {
            document.documentElement.setAttribute('data-theme', 'dark');
        }
    }
}
// switch themes
function switchTheme(e) {
    var theme = getTheme();
    if (theme == 'light') {
        setTheme('dark');
    } else {
        setTheme('light');
    }
}
document.addEventListener('DOMContentLoaded', function () {
    var themeSwitcher = document.querySelector('.theme-switch');
    themeSwitcher.addEventListener('click', switchTheme, false);
}, false);
document.addEventListener("DOMContentLoaded", function () {
// Get all "navbar-burger" elements
    var $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll(".navbar-burger"), 0);
@@ -64,5 +14,3 @@
        });
    }
});
init();
assets/js/anatole-theme-switcher.js
New file
@@ -0,0 +1,51 @@
// initialize default value
function getTheme() {
    return localStorage.getItem('theme') ? localStorage.getItem('theme') : null;
}
function setTheme(style) {
    document.documentElement.setAttribute('data-theme', style);
    localStorage.setItem('theme', style);
}
function init() {
    // initialize default value
    const theme = getTheme();
    // check if a preferred color theme is set for users that have never been to our site
    const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
    if (theme === null) {
        if (userPrefersDark) {
            setTheme('dark');
        } else if (!document.documentElement.getAttribute('data-theme')) {
            setTheme('light');
        } else {
            setTheme(document.documentElement.getAttribute('data-theme'));
        }
    } else {
        // load a stored theme
        if (theme === 'light') {
            document.documentElement.setAttribute('data-theme', 'light');
        } else {
            document.documentElement.setAttribute('data-theme', 'dark');
        }
    }
}
// switch themes
function switchTheme() {
    const theme = getTheme();
    if (theme === 'light') {
        setTheme('dark');
    } else {
        setTheme('light');
    }
}
document.addEventListener('DOMContentLoaded', function () {
    const themeSwitcher = document.querySelector('.theme-switch');
    themeSwitcher.addEventListener('click', switchTheme, false);
}, false);
init();
exampleSite/config.toml
@@ -13,19 +13,37 @@
# Google Analytics
#googleAnalytics = "UA-123-45"
# Syntax highlighting
pygmentsUseClasses = true
pygmentsCodeFences = true
pygmentsCodefencesGuessSyntax = true
[params]
title = "I'm Jane Doe"
author = "Jane Doe"
#copyright = "2020-2021"
description = "Call me Jane"
profilePicture = "images/profile.jpg"
keywords = ""
favicon = "favicons/"
# example ["css/custom.css"]
customCss = []
# example ["js/custom.js"]
customJs = []
mainSections = ["post"]
images = ["images/site-feature-image.png"]
# Google Site Verification
doNotLoadAnimations = false
# Form Spree Contact Form
#contactFormAction = "https://formspree.io/f/your-form-hash-here"
# Google Site Verify
#googleSiteVerify = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
# indexDateFormat = "Mon, Jan 2, 2006"
# listDateFormat = "Jan 2"
# singleDateFormat = "Mon, Jan 2, 2006"
[params.simpleAnalytics]
# enable = true
# customurl = "https://analytics.example.com"
## Math settings
[params.math]
@@ -33,23 +51,24 @@
use = "katex"  # options: "katex", "mathjax". default is "katex".
## Social links
# use 'fab' when brand icons, use 'fas' when standard solid icons.
[[params.socialIcons]]
icon = "fa-linkedin"
icon = "fab fa-linkedin"
title = "Linkedin"
url = "https://de.linkedin.com/"
[[params.socialIcons]]
icon = "fa-github"
icon = "fab fa-github"
title = "GitHub"
url = "https://github.com/lxndrblz/anatole/"
[[params.socialIcons]]
icon = "fa-instagram"
icon = "fab fa-instagram"
title = "instagram"
url = "https://www.instagram.com/"
[[params.socialIcons]]
icon = "fa-envelope"
icon = "fas fa-envelope"
title = "e-mail"
url = "mailto:mail@alexbilz.com"
@@ -74,3 +93,9 @@
  weight = 300
  identifier = "about"
  url = "/about/"
  [[menu.main]]
  name = "Contact"
  weight = 400
  identifier = "contact"
  url = "/contact/"
exampleSite/content/_index.md
@@ -1,3 +1,24 @@
+++
author = "Hugo Authors"
+++
<!--
This file is left intentionally empty by default to be backward compatible with initial theme setup.
Although the theme has advanced a little bit and it now allows to specify the content on the main page (even if the list of posts/articles is not intended).
This can be:
- with the list of posts/articles (default: `mainSections = ["post"]) or
- without the list of posts/articles (by setting `mainSections = [""]`)
Markdown supported, ie:
```
# Welcome
- Hugo :rocket:
- Hugo theme :rocket:
Don't forget to check the README.md file!
```
-->
exampleSite/content/about.md
@@ -1,6 +1,6 @@
+++
title = "About"
description = "Hugo, the world’s fastest framework for building websites"
description = "Hugo, the world's fastest framework for building websites"
date = "2019-02-28"
aliases = ["about-us","about-hugo","contact"]
author = "Hugo Authors"
exampleSite/content/contact.md
New file
@@ -0,0 +1,7 @@
---
author: Hugo Authors
title: Contact
date: 2019-03-08
description: Contact Page
contact: true
---
exampleSite/content/post/_index.md
exampleSite/content/post/emoji-support.md
@@ -15,8 +15,7 @@
<!--more-->
The [`emojify`](https://gohugo.io/functions/emojify/) function can be called directly in templates or [Inline Shortcodes](https://gohugo.io/templates/shortcode-templates/#inline-shortcodes). 
To enable emoji globally, set `enableEmoji` to `true` in your site’s [configuration](https://gohugo.io/getting-started/configuration/) and then you can type emoji shorthand codes directly in content files; e.g.
To enable emoji globally, set `enableEmoji` to `true` in your site's [configuration](https://gohugo.io/getting-started/configuration/) and then you can type emoji shorthand codes directly in content files; e.g.
<p><span class="nowrap"><span class="emojify">🙈</span> <code>:see_no_evil:</code></span>  <span class="nowrap"><span class="emojify">🙉</span> <code>:hear_no_evil:</code></span>  <span class="nowrap"><span class="emojify">🙊</span> <code>:speak_no_evil:</code></span></p>
<br>
exampleSite/content/post/markdown-syntax.md
@@ -7,7 +7,6 @@
    "markdown",
    "css",
    "html",
    "themes",
]
categories = [
    "themes",
@@ -51,10 +50,9 @@
#### Blockquote with attribution
> Don't communicate by sharing memory, share memory by communicating.</p>
> Don't communicate by sharing memory, share memory by communicating.<br>
> — <cite>Rob Pike[^1]</cite>
[^1]: The above quote is excerpted from Rob Pike's [talk](https://www.youtube.com/watch?v=PAAkCSZUG1c) during Gopherfest, November 18, 2015.
## Tables
@@ -68,20 +66,19 @@
#### Inline Markdown within tables
| Inline&nbsp;&nbsp;&nbsp;     | Markdown&nbsp;&nbsp;&nbsp;  | In&nbsp;&nbsp;&nbsp;                | Table      |
| ---------- | --------- | ----------------- | ---------- |
| *italics*  | **bold**  | ~~strikethrough~~&nbsp;&nbsp;&nbsp; | `code`     |
| Italics   | Bold     | Code   |
| --------  | -------- | ------ |
| *italics* | **bold** | `code` |
## Code Blocks
#### Code block with backticks
```
html
<!DOCTYPE html>
```html
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta charset="utf-8">
  <title>Example HTML5 Document</title>
</head>
<body>
@@ -89,12 +86,13 @@
</body>
</html>
```
#### Code block indented with four spaces
    <!DOCTYPE html>
    <!doctype html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta charset="utf-8">
      <title>Example HTML5 Document</title>
    </head>
    <body>
@@ -104,10 +102,10 @@
#### Code block with Hugo's internal highlight shortcode
{{< highlight html >}}
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta charset="utf-8">
  <title>Example HTML5 Document</title>
</head>
<body>
exampleSite/content/post/math-typesetting.md
@@ -15,15 +15,17 @@
- Within this partial reference the [Auto-render Extension](https://katex.org/docs/autorender.html) or host these scripts locally.
- Include the partial in your templates like so:  
```
```bash
{{ if or .Params.math .Site.Params.math }}
{{ partial "math.html" . }}
{{ end }}
```  
- To enable KaTex globally set the parameter `math` to `true` in a project's configuration
- To enable KaTex on a per page basis include the parameter `math: true` in content files.
- To enable KaTex on a per page basis include the parameter `math: true` in content files
**Note:** Use the online reference of [Supported TeX Functions](https://katex.org/docs/supported.html)
{{< math.inline >}}
{{ if or .Page.Params.math .Site.Params.math }}
<!-- KaTeX -->
@@ -34,11 +36,9 @@
{{</ math.inline >}}
### Examples
{{< math.inline >}}
<p>
Inline math: \(\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…\)
</p>
{{</ math.inline >}}
Inline math: \\(\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…\\)
Block math:
$$
exampleSite/content/post/placeholder-text.md
@@ -9,20 +9,14 @@
]
+++
Lorem est tota propiore conpellat pectoribus de
pectora summo. <!--more-->Redit teque digerit hominumque toris verebor lumina non cervice
subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc
caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis
lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.
Lorem est tota propiore conpellat pectoribus de pectora summo. <!--more-->Redit teque digerit hominumque toris verebor lumina non cervice subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.
1. Exierant elisi ambit vivere dedere
2. Duce pollice
3. Eris modo
4. Spargitque ferrea quos palude
Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus
silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria
tractus malis.
Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria tractus malis.
1. Comas hunc haec pietate fetum procerum dixit
2. Post torum vates letum Tiresia
@@ -38,18 +32,11 @@
## Mane refeci capiebant unda mulcebat
Victa caducifer, malo vulnere contra
dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere
furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. **Faces illo pepulere** tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.
Victa caducifer, malo vulnere contra dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. **Faces illo pepulere** tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.
Iubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli
Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare
Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert
ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae
vulnus haerentia iuste et exercebat, sui et.
Iubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae vulnus haerentia iuste et exercebat, sui et.
Eurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel **mitis temploque** vocatus, inque alis, *oculos nomen* non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem
Propoetides **parte**.
Eurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel **mitis temploque** vocatus, inque alis, *oculos nomen* non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem Propoetides **parte**.
{{< css.inline >}}
<style>
exampleSite/content/post/rich-content.md
@@ -12,18 +12,10 @@
    alt = "Thumbnail image"
+++
Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugo-s-built-in-shortcodes) for rich content, along with a [Privacy Config](https://gohugo.io/about/hugo-and-gdpr/) and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds.
Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugos-built-in-shortcodes) for rich content, along with a [Privacy Config](https://gohugo.io/about/hugo-and-gdpr/) and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds.
<!--more-->
---
## Instagram Simple Shortcode
{{< instagram_simple BGvuInzyFAe hidecaption >}}
<br>
---
## YouTube Privacy Enhanced Shortcode
{{< youtube ZJthWmvUzzc >}}
i18n/ch-zn.toml
File was deleted
i18n/de.toml
@@ -19,3 +19,6 @@
[comments]
other = "Kommentare"
[send]
other = "Senden"
i18n/dk.toml
New file
@@ -0,0 +1,24 @@
[category]
other = "Kategori"
[tag]
other = "mærkat"
[reading_time]
one = "et minuts læsetid"
other = "{{ .Count }}-minutters læsetid"
[page_not_found]
other = "Side ikke fundet"
[page_does_not_exist]
other = "Beklager, denne side eksisterer ikke"
[head_back]
other = "Returner til <a href=\"{{ . }}\">homepage</a>."
[comments]
other = "kommentar"
[send]
other = "Sende"
i18n/en.toml
@@ -19,3 +19,6 @@
[comments]
other = "comments"
[send]
other = "Send"
i18n/es.toml
New file
@@ -0,0 +1,24 @@
[category]
other = "categoría"
[tag]
other = "etiqueta"
[reading_time]
one = "1 minuto de lectura"
other = "{{ .Count }} minutos de lectura"
[page_not_found]
other = "Página no encontrada"
[page_does_not_exist]
other = "Disculpa, la página no existe."
[head_back]
other = "Puedes regresar a la <a href=\"{{ . }}\">página inicial</a>."
[comments]
other = "comentarios"
[send]
other = "Enviar"
i18n/fa.toml
@@ -19,3 +19,6 @@
[comments]
other = "نظرات"
[send]
other = "ارسال"
i18n/fi.toml
New file
@@ -0,0 +1,24 @@
[category]
other = "kategoria"
[tag]
other = "merkki"
[reading_time]
one = "Yksi lukuminuutti"
other = "{{ .Count }} lukuminuuttia"
[page_not_found]
other = "Sivua ei löydetty"
[page_does_not_exist]
other = "Valitettavasti tätä sivua ei ole olemassa."
[head_back]
other = "Voit palata takaisin <a href=\"{{ . }}\">kotisivulle</a>."
[comments]
other = "kommentit"
[send]
other = "Lähetä"
i18n/fr.toml
New file
@@ -0,0 +1,24 @@
[category]
other = "catégorie"
[tag]
other = "tag"
[reading_time]
one = "Une minute de lecture"
other = "{{ .Count }} minutes de lecture"
[page_not_found]
other = "Page Non Trouvée"
[page_does_not_exist]
other = "Désolé, cette page n'existe pas."
[head_back]
other = "Vous pouvez revenir à <a href=\"{{ . }}\">l'accueil</a>."
[comments]
other = "commentaire"
[send]
other = "Envoyer"
i18n/it.toml
@@ -19,3 +19,6 @@
[comments]
other = "commenti"
[send]
other = "Spedire"
i18n/pt-br.toml
New file
@@ -0,0 +1,24 @@
[category]
other = "categoria"
[tag]
other = "etiqueta"
[reading_time]
one = "Tempo de leitura: 1 minuto"
other = "Tempo de leitura: {{ .Count }} minutos"
[page_not_found]
other = "Página não encontrada"
[page_does_not_exist]
other = "Desculpa, esta página não existe."
[head_back]
other = "Retornar à <a href=\"{{ . }}\">página inicial</a>."
[comments]
other = "comentários"
[send]
other = "Enviar"
i18n/zh-cn.toml
New file
@@ -0,0 +1,24 @@
[category]
other = "分类"
[tag]
other = "标签"
[reading_time]
one = "阅读时间 1 分钟"
other = "阅读时间 {{ .Count }} 分钟"
[page_not_found]
other = "页面未找到"
[page_does_not_exist]
other = "抱歉,此页面不存在"
[head_back]
other = "返回<a href=\"{{ . }}\">首页</a>."
[comments]
other = "评论"
[send]
other = "发送"
i18n/zh-tw.toml
New file
@@ -0,0 +1,24 @@
[category]
other = "分類"
[tag]
other = "標籤"
[reading_time]
one = "閱讀時間 1 分鐘"
other = "閱讀時間 {{ .Count }} 分鐘"
[page_not_found]
other = "找不到頁面"
[page_does_not_exist]
other = "此頁面不存在"
[head_back]
other = "返回 <a href=\"{{ . }}\">首頁</a>."
[comments]
other = "註解"
[send]
other = "發送"
images/screenshot.png

images/screenshot_dark.png

images/tn.png

layouts/_default/baseof.html
@@ -14,6 +14,9 @@
</div>
{{- partial "footer.html" . -}}
{{- if (eq .Site.Params.simpleAnalytics.enable true) -}}
    {{- partial "analytics/simpleanalytics.html" . -}}
{{- end -}}
</body>
</html>
layouts/_default/list.html
@@ -1,5 +1,5 @@
{{ define "main" }}
    <div class="archive animated fadeInDown">
    <div class="archive {{ with .Site.Params.doNotLoadAnimations }} . {{ else }} animated fadeInDown {{ end }}">
        <ul class="list-with-title">
            {{ range .Data.Pages.GroupByDate "2006" }}
                <div class="listing-title">{{ .Key }}</div>
@@ -7,7 +7,10 @@
                    <ul class="listing">
                        <div class="listing-item">
                            <div class="listing-post"><a href="{{ .Permalink }}" title="{{ .Title }}">{{ .Title }}</a>
                                <div class="post-time"><span class="date">{{.Date.Format "Jan 2" }}</span></div>
                                <div class="post-time"><span class="date">{{ if isset .Site.Params "listdateformat" }}
                                                                            {{ .Date.Format .Site.Params.listDateFormat }}
                                                                            {{ else }} {{.Date.Format "Jan 2"}}
                                                                            {{ end }}</span></div>
                            </div>
                        </div>
                    </ul>
layouts/_default/single.html
@@ -1,20 +1,27 @@
{{ define "main" }}
    <div class="post animated fadeInDown">
    <div class="post {{ with .Site.Params.doNotLoadAnimations }} . {{ else }} animated fadeInDown {{ end }}">
        <div class="post-content">
            <div class="post-title">
                <h3>{{ .Title }}</h3>
                {{ if eq .Type "post"}}
                    <div class="info">
                        <em class="fa fa-sun-o"></em>
                        <span class="date">{{ .Date.Format "Mon, Jan 2, 2006" }}</span>
                        <em class="fa fa-clock-o"></em>
                        <em class="fas fa-calendar-day"></em>
                        <span class="date">{{ if isset .Site.Params "singledateformat" }}
                                                {{ .Date.Format .Site.Params.singleDateFormat }}
                                           {{ else }} {{.Date.Format "Mon, Jan 2, 2006"}}
                                           {{ end }}</span>
                        <em class="fas fa-stopwatch"></em>
                        <span class="reading-time">{{ i18n "reading_time" .ReadingTime }}</span>
                    </div>
                {{ end }}
            </div>
            {{ .Content }}
            {{- if (eq .Params.contact true) -}}
              {{- partial "contact.html" . -}}
            {{- end -}}
        </div>
        <div class="post-footer">
            <div class="info">
@@ -30,6 +37,12 @@
                    {{ template "_internal/disqus.html" . }}
                </div>
            {{- end }}
            {{ if .Site.Params.utterances.repo  -}}
            <div id="fb_comments_container">
                <h2>{{ i18n "comments" }}</h2>
                {{ partial "comments/utterances.html" . }}
            </div>
            {{- end }}
        {{ end }}
    </div>
layouts/index.html
@@ -1,16 +1,19 @@
{{ define "main" }}
    <div class="post {{ with .Site.Params.doNotLoadAnimations }} . {{ else }} animated fadeInDown {{ end }}">
        <!-- (Optional) Home
            -- on top of `mainSections` content (aka posts) ;
            -- as declared in content/_index.md
            One can set `mainSections = [""]` and have the content/_index.md specified here
        -->
        {{ .Content }}
    </div>
    {{ $paginator := .Paginate (where .Site.RegularPages "Type" "in" .Site.Params.mainSections) }}
    {{ range $paginator.Pages }}
        <div class="post animated fadeInDown preview">
            {{ with .Params.thumbnail }}
            <article class="has-image">
            <div class="post-thumbnail">
                <a href="{{ .RelPermalink }}">
                <img src="{{ .src | absURL }}" alt="{{ .alt | default "" }}" loading="lazy">
                </a>
            </div>
            {{ end }}
            <div class="post-text">
        <div class="post {{ with .Site.Params.doNotLoadAnimations }} . {{ else }} animated fadeInDown {{ end }}">
                <div class="post-title">
                    <h3><a href="{{ .RelPermalink }}">{{ .Title }}</a>
                    </h3>
@@ -20,8 +23,11 @@
                </div>
                <div class="post-footer">
                    <div class="meta">
                        <div class="info"><em class="fa fa-sun-o"></em><span
                                    class="date">{{ .Date.Format "Mon, Jan 2, 2006" }}</span>
                    <div class="info"><em class="fas fa-calendar-day"></em><span
                                class="date">{{ if isset .Site.Params "indexdateformat" }}
                                                 {{ .Date.Format .Site.Params.indexDateFormat }}
                                             {{ else }} {{.Date.Format "Mon, Jan 2, 2006"}}
                                             {{ end }}</span>
                            {{ with .Params.tags }}
                                {{- range $index, $el := . -}}
                                    <a class="tag"
@@ -31,7 +37,6 @@
                        </div>
                    </div>
                </div>
            </div>
            </article>
        </div>
    {{ end }}
layouts/partials/analytics/simpleanalytics.html
New file
@@ -0,0 +1,7 @@
{{ with .Site.Params.simpleAnalytics.customUrl }}
<script async defer src="{{ . | relURL }}/latest.js"></script>
<noscript><img src="{{ . | relURL }}/noscript.gif" alt=""/></noscript>
{{ else }}
<script async defer src=" https://scripts.simpleanalyticscdn.com/latest.js"></script>
<noscript><img src="https://queue.simpleanalyticscdn.com/noscript.gif" alt=""/></noscript>
{{ end }}
layouts/partials/comments/utterances.html
New file
@@ -0,0 +1,10 @@
<script src="https://utteranc.es/client.js"
        repo="{{ .Site.Params.utterances.repo }}"
        issue-term="{{ .Site.Params.utterances.issueTerm }}"
        theme="{{ .Site.Params.utterances.theme }}"
        {{ with .Site.Params.utterances.label }}
        label="{{ . }}"
        {{ end }}
        crossorigin="anonymous"
        async>
</script>
layouts/partials/contact.html
New file
@@ -0,0 +1,19 @@
<div class="contact-form">
  <form class="form-style" method="POST" action="{{ .Site.Params.contactFormAction }}" data-toggle="validator">
    <ul>
      <li>
        <input class="field-style field-full" type="text" name="username" id="username" placeholder="Name" required>
      </li>
      <li>
        <input class="field-style field-full" type="email" id="email" name="email" placeholder="Email" required>
      </li>
      <li>
        <textarea class="field-style" name="message" id="message" rows="6" placeholder="{{ i18n "message" }}"></textarea>
      </li>
      <li>
        <input class="field-style" type="submit" value="{{ i18n "send" }}"></input>
      </li>
    </ul>
  </form>
</div>
layouts/partials/head.html
@@ -17,17 +17,25 @@
          integrity="{{ $style.Data.Integrity }}"
          crossorigin="anonymous"
          type="text/css">
    {{- $css := "" -}}
    {{- range .Site.Params.customCss -}}
    {{ $css := resources.Get . | fingerprint }}
    {{ $markupHighlightStyle := resources.Get "css/markupHighlight.css" | resources.Minify | resources.Fingerprint }}
    <link rel="stylesheet"
          href="{{ $css.Permalink }}"
          integrity="{{ $css.Data.Integrity }}"
        href="{{ $markupHighlightStyle.Permalink }}"
        integrity="{{ $markupHighlightStyle.Data.Integrity }}"
          crossorigin="anonymous"
          type="text/css">
    {{- end -}}
    <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"
          integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
    {{ range .Site.Params.customCss }}
        {{ $minstyles := resources.Get . }}
        {{ $styles := $minstyles | resources.Minify | resources.Fingerprint }}
        <link rel="stylesheet"
        href="{{ $styles.Permalink }}"
        integrity="{{ $styles.Data.Integrity }}"
        crossorigin="anonymous"
        media="screen" />
    {{ end }}
    <link rel="stylesheet"
    href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css"
    integrity="sha512-+4zCK9k+qNFUR5X+cKL9EIR+ZOhtIloNl9GIKS57V1MyNsYpYcUrUeQc9vNfzsWfV28IaLL3i96P9sdNyeRssA=="
    crossorigin="anonymous" />
    <!-- Favicons -->
    <link rel="shortcut icon" href="{{ .Site.Params.favicon | absURL }}favicon.ico" type="image/x-icon">
@@ -43,13 +51,23 @@
    {{ end -}}
    <!-- JavaScript -->
    {{ $anatole := resources.Get "js/anatole-header.js" }}
    {{ $secureJS := $anatole |  resources.Minify | resources.Fingerprint }}
    {{ $anatoleHeader := resources.Get "js/anatole-header.js" }}
    {{ $secureHeaderJS := $anatoleHeader |  resources.Minify | resources.Fingerprint }}
    <script type="text/javascript"
            src="{{ $secureJS.Permalink }}"
            integrity="{{ $secureJS.Data.Integrity }}"
            src="{{ $secureHeaderJS.Permalink }}"
            integrity="{{ $secureHeaderJS.Data.Integrity }}"
            crossorigin="anonymous"></script>
    {{ if not .Site.Params.disableThemeSwitcher }}
        {{ $anatoleThemeSwitcher := resources.Get "js/anatole-theme-switcher.js" }}
        {{ $secureThemeSwitcherJS := $anatoleThemeSwitcher |  resources.Minify | resources.Fingerprint }}
        <script type="text/javascript"
                src="{{ $secureThemeSwitcherJS.Permalink }}"
                integrity="{{ $secureThemeSwitcherJS.Data.Integrity }}"
                crossorigin="anonymous"></script>
    {{ end }}
    {{- $js := "" -}}
    {{- range .Site.Params.customJs -}}
        {{- if or (in . "http://") (in . "https://") -}}
layouts/partials/navbar.html
@@ -1,4 +1,4 @@
<div class="page-top animated fadeInDown">
<div class="page-top {{ with .Site.Params.doNotLoadAnimations }} . {{ else }} animated fadeInDown {{ end }}">
    <a role="button" class="navbar-burger" data-target="navMenu" aria-label="menu" aria-expanded="false">
        <span aria-hidden="true"></span>
        <span aria-hidden="true"></span>
@@ -23,10 +23,12 @@
                </li>
            {{ end }}
        {{ end }}
        {{ if not .Site.Params.disableThemeSwitcher }}
        <li class="theme-switch-item">
            <a class="theme-switch" title="Switch Theme">
                <i class="fa fa-adjust fa-fw" aria-hidden="true"></i>
                    <i class="fas fa-adjust fa-fw" aria-hidden="true"></i>
            </a>
        </li>
        {{ end }}
    </ul>
</div>
layouts/partials/sidebar.html
@@ -1,4 +1,4 @@
<div class="sidebar animated fadeInDown">
<div class="sidebar{{ with .Site.Params.doNotLoadAnimations }} . {{ else }} animated fadeInDown {{ end }}">
    <div class="logo-title">
        <div class="title">
            <img src="{{ .Site.Params.profilePicture | absURL }}" alt="profile picture">
@@ -12,12 +12,12 @@
        {{ range $item := .Site.Params.socialIcons }}
            <li>
                <a href="{{ $item.url }}" rel="me" aria-label="{{ $item.title }}">
                    <i class="fa fa-2x {{ $item.icon }}" aria-hidden="true"></i>
                    <i class="{{ $item.icon }} fa-2x" aria-hidden="true"></i>
                </a>
            </li>
        {{ end }}
    </ul>
    <div class="footer">
        <div class="by_farbox">&copy; {{ .Site.Params.author }} {{ now.Format "2006"}} </div>
        <div class="by_farbox">&copy; {{ .Site.Params.author }} {{ if isset .Site.Params "copyright" }} {{ .Site.Params.copyright }} {{ else }} {{ now.Format "2006"}} {{end}}</div>
    </div>
</div>