Compare commits

..

No commits in common. "ac03834fbb987b202eb5486187ee844bb370378e" and "d7d6b817bdd7c46d0631753283bf710ee4daab85" have entirely different histories.

12 changed files with 135 additions and 201 deletions

111
README.md
View file

@ -1,26 +1,16 @@
# hermit-V2 -: The Minimal Hugo Theme # Hugo theme Hermit - V2
> OG : [Hermit Theme](https://github.com/Track3/hermit) by [Track3](https://github.com/Track3) Initially, when I started my Blog journey, I was enthralled by this very theme and I am using it since. However, original developer has ceased maintaining the theme and it is riddled with many bugs. Hence, I have taken upon myself to maintain this theme.
Hermit-V2 is a minimal and fast theme for Hugo, built for bloggers who want a simple and focused website. This is a maintained fork of [Hermit](https://github.com/Track3/hermit), which iterates over the original work to have a almost-stable experience with bug fixes and new features. I fully intend to keep the essence of the theme as-it-is and only add minor updates and squash bugs which may arise.
![](https://github.com/1bl4z3r/hermit-V2/blob/main/images/screenshot.png) > Let's make __Hermit__ great again
### History DEMO : [Hermit-V2](https://1bl4z3r.github.io/hermit-V2/)
When I had switched from jekyll to Hugo, I was in a need of a theme. I was enthralled by this very theme and I am using it since in my own personal blog. However, it looks like [OP]((https://github.com/Track3)) has stopped maintaining this theme and as a result, it is riddled with bugs and code breaks. Hence, I have taken upon myself to maintain this theme. Intention of this project is to keep the essence of the theme as-it-is and only add minor updates and squash bugs which may arise. GoHugo Theme Page : [https://themes.gohugo.io/themes/hermit-v2/](https://themes.gohugo.io/themes/hermit-v2/)
> GoHugo Theme Page : [https://themes.gohugo.io/themes/hermit-v2/](https://themes.gohugo.io/themes/hermit-v2/) ### Installation
## Demo
Demo page [https://1bl4z3r.github.io/hermit-V2](https://1bl4z3r.github.io/hermit-V2), which is both demo as well as documentation for the theme, is located in [Staging Branch](https://github.com/1bl4z3r/hermit-V2/tree/staging)
## Configuration Guide
Configuration Guide is present in [Explaining Configs](https://1bl4z3r.github.io/hermit-V2/en/posts/explaining-configs/)
## Installation
Run this command from the root of your Hugo directory: Run this command from the root of your Hugo directory:
@ -34,9 +24,36 @@ Or, if your Hugo site is already in git, you can include this repository as a [g
git submodule add https://github.com/1bl4z3r/hermit-V2 themes/hermit-v2 git submodule add https://github.com/1bl4z3r/hermit-V2 themes/hermit-v2
``` ```
## GOOD-TO-KNOW LIST ### Custom CSS and JS
### Features Inherited from Original Theme I have found that there are some requirement where custom CSS and JS should be supplied to a page to make it work. This custom files are not required for whole of the site, but is restricted to a page or few particular pages. E.g. If you make contact form.
To provision for the same, I have added custom css and js. Please add this to page frontmatter as required.
```
custom_css = ["css/foo.css","css/bar.css"]
custom_js = ["js/custom-about.js"]
```
The files itself will reside in `static/css` for CSS files and `static/js` for JS files. Refer to [Staging Branch](https://github.com/1bl4z3r/hermit-V2/tree/staging) to have a feel on how [this](https://github.com/1bl4z3r/hermit-V2/blob/staging/content/about-hugo.md) is implemented.
### Demo
Demo page [https://1bl4z3r.github.io/hermit-V2/](https://1bl4z3r.github.io/hermit-V2/), which is both demo as well as documentation for the theme, is located in [Staging Branch](https://github.com/1bl4z3r/hermit-V2/tree/staging)
### Configuration Guide
Configuration Guide is present in [Explaining Configs](https://1bl4z3r.github.io/hermit-V2/en/posts/explaining-configs/)
---
# Original README
Hermit is a minimal and fast theme for Hugo. It's built for bloggers who want a simple and focused website.
![](https://github.com/1bl4z3r/hermit-V2/blob/main/images/screenshot.png)
## Features
* A single-column layout and carefully crafted typography offers a great reading experience. * A single-column layout and carefully crafted typography offers a great reading experience.
* Navigations and functions are placed in the bottom bar which will hide when you scroll down. * Navigations and functions are placed in the bottom bar which will hide when you scroll down.
@ -48,24 +65,31 @@ git submodule add https://github.com/1bl4z3r/hermit-V2 themes/hermit-v2
![](https://github.com/1bl4z3r/hermit-V2/blob/main/images/hermit.png) ![](https://github.com/1bl4z3r/hermit-V2/blob/main/images/hermit.png)
## Getting started
### Installation
Run this command from the root of your Hugo directory:
```bash
$ git clone https://github.com/Track3/hermit.git themes/hermit
```
Or, if your Hugo site is already in git, you can include this repository as a [git submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules). This makes it easier to update this theme. For this you need to run:
```bash
$ git submodule add https://github.com/Track3/hermit.git themes/hermit
```
Alternatively, if you are not familiar with git, you can download the theme as a `.zip` file, unzip the theme contents, and then move the unzipped source into your `themes` directory.
For more information, read the official [documentation](https://gohugo.io/themes/installing-and-using-themes/) of Hugo.
### Configuration ### Configuration
Site Configuration is done through `hugo.toml` or `hugo.yaml` file in root directory of your Hugo Site. To aid you, there is a [hugo.toml.example](https://github.com/1bl4z3r/hermit-V2/blob/main/hugo.toml.example) file located in theme folder. See this configuration in action [here](https://github.com/1bl4z3r/hermit-V2/blob/staging/hugo.toml). See what each configuration does [here](https://1bl4z3r.github.io/hermit-V2/en/posts/explaining-configs/#configuation-in-hugotoml). The example config file can be found in the theme's `exampleSite` folder. You can just copy the `config.toml` to the root directory of your Hugo site. There are instructions in the example config file, feel free to change strings as you like to customize your website.
### Custom CSS and JS #### Favicon
I have found that there are some requirement where custom CSS and JS should be supplied to a page to make it work. This custom files are not required for whole of the site, but is restricted to a page or few particular pages. E.g. If you make contact form.
To make use of custom CSS and JS, add the below section to page frontmatter. If there is any folder structure, that should be mentioned as well.
```
custom_css = ["custom_css/foo.css","custom_css/bar.css"]
custom_js = ["custom_js/custom-about.js"]
```
The files itself will reside in `assets` directory. Refer to [Staging Branch](https://github.com/1bl4z3r/hermit-V2/tree/staging) to have a feel on how [this](https://github.com/1bl4z3r/hermit-V2/blob/staging/content/about-hugo.md) is implemented.
### Favicon
Use [RealFaviconGenerator](https://realfavicongenerator.net/) to generate these files, put them into your site's `static` folder: Use [RealFaviconGenerator](https://realfavicongenerator.net/) to generate these files, put them into your site's `static` folder:
@ -79,7 +103,7 @@ Use [RealFaviconGenerator](https://realfavicongenerator.net/) to generate these
* safari-pinned-tab.svg * safari-pinned-tab.svg
* site.webmanifest * site.webmanifest
### Social icons #### Social icons
The following icons are supported, please make sure the `name` filed is exactly one of these: The following icons are supported, please make sure the `name` filed is exactly one of these:
@ -99,24 +123,26 @@ If that's not enough, you can see [Overriding templates](#overriding-templates)
* Keep your regular pages in the `content` folder. To create a new page, run `hugo new page-title.md` * Keep your regular pages in the `content` folder. To create a new page, run `hugo new page-title.md`
* Keep your blog posts in the `content/posts` folder. To create a new post, run `hugo new posts/post-title.md` * Keep your blog posts in the `content/posts` folder. To create a new post, run `hugo new posts/post-title.md`
### Overriding templates ### More customizations
#### Overriding templates
In Hugo, layouts can live in either the projects (root) or the themes layout folders, any template inside the root layout folder will override theme's layout that relative to it, for example: `layouts/_default/baseof.html` will override `themes/hermit/layouts/_default/baseof.html`. So, you can easily customize the theme without edit it directly, which makes updating the theme easier. Here's some common customizations: In Hugo, layouts can live in either the projects (root) or the themes layout folders, any template inside the root layout folder will override theme's layout that relative to it, for example: `layouts/_default/baseof.html` will override `themes/hermit/layouts/_default/baseof.html`. So, you can easily customize the theme without edit it directly, which makes updating the theme easier. Here's some common customizations:
### Customize social icons ##### Customize social icons
You can modify or add any svg icons in site's `layouts/partials/svg.html`. You can modify or add any svg icons in site's `layouts/partials/svg.html`.
### Customize comment system ##### Customize comment system
We only have built-in support for Disqus at the moment, if that doesn't fit your needs, you can just add html to site's `layouts/partials/comments.html`. We only have built-in support for Disqus at the moment, if that doesn't fit your needs, you can just add html to site's `layouts/partials/comments.html`.
### Add custom analytics ##### Add custom analytics
If you prefer to use different analytics system other than google analytics, then add them inside `layouts/partials/analytics.html`. If you prefer to use different analytics system other than google analytics, then add them inside `layouts/partials/analytics.html`.
### Customize CSS #### Customize CSS
If you'd like to customize theme color or fonts, you can simply override `assets/scss/_predefined.scss`, by simply copy it to site's root (keep the same relative path) then edit those variables. But keep in mind, you'll need **Hugo extended version** which has the ability to rebuild SCSS. You don't have to use extended version in production but in this case it's necessary to make sure the `resources` folder is committed and "up to date" (by running `hugo` or `hugo server` locally using the extended version). But anyway, always use the extended version if you can. If you'd like to customize theme color or fonts, you can simply override `assets/scss/_predefined.scss`, by simply copy it to site's root (keep the same relative path) then edit those variables. But keep in mind, you'll need **Hugo extended version** which has the ability to rebuild SCSS. You don't have to use extended version in production but in this case it's necessary to make sure the `resources` folder is committed and "up to date" (by running `hugo` or `hugo server` locally using the extended version). But anyway, always use the extended version if you can.
### Code injection #### Code injection
You can inject any html code to every page's document head or right above the closing body tag. This makes it easier to add any html meta data, custom css/js, dns-prefetch etc. To do this you simply need to create a file at site's `layouts/partials/extra-head.html` or `layouts/partials/extra-foot.html`, code inside will be injected to every page. You can inject any html code to every page's document head or right above the closing body tag. This makes it easier to add any html meta data, custom css/js, dns-prefetch etc. To do this you simply need to create a file at site's `layouts/partials/extra-head.html` or `layouts/partials/extra-foot.html`, code inside will be injected to every page.
@ -126,4 +152,5 @@ You can inject any html code to every page's document head or right above the cl
* [animate.css](https://daneden.github.io/animate.css/) - [MIT](https://github.com/daneden/animate.css/blob/master/LICENSE) * [animate.css](https://daneden.github.io/animate.css/) - [MIT](https://github.com/daneden/animate.css/blob/master/LICENSE)
* [feather](https://feathericons.com/) - [MIT](https://github.com/feathericons/feather/blob/master/LICENSE) * [feather](https://feathericons.com/) - [MIT](https://github.com/feathericons/feather/blob/master/LICENSE)
* [code-copy.js](assets/js/code-copy.js) - [Tom Spencer](https://www.fiznool.com/blog/2018/09/14/adding-click-to-copy-buttons-to-a-hugo-powered-blog/) * [code-copy.js](assets/js/code-copy.js) - [Tom Spencer](https://www.fiznool.com/blog/2018/09/14/adding-click-to-copy-buttons-to-a-hugo-powered-blog/)
* [Everyone, who has submitted a PR](https://github.com/1bl4z3r/hermit-V2/pulls?q=is%3Apr+is%3Aclosed)
Thanks!

View file

@ -920,7 +920,7 @@ a.footnote-ref {
white-space: nowrap; /* Keeps the content on a single line */ white-space: nowrap; /* Keeps the content on a single line */
margin: 0 auto 1.5em auto; /* Gives that scrolling effect as the typing happens */ margin: 0 auto 1.5em auto; /* Gives that scrolling effect as the typing happens */
// letter-spacing: .100em; /* Adjust as needed */ // letter-spacing: .100em; /* Adjust as needed */
animation: typing 5s steps({{ strings.RuneCount .Site.Params.homeSubtitle }}, end),blink-caret .75s linear 5.1s infinite; animation: typing 5s steps({{ strings.RuneCount .Site.Params.homeSubtitle }}, end),blink-caret .75s step-end infinite;
} }
/* The typing effect */ /* The typing effect */

View file

@ -7,7 +7,6 @@
baseURL = "CHANGE BASE URL" baseURL = "CHANGE BASE URL"
defaultContentLanguage = "en" defaultContentLanguage = "en"
defaultContentLanguageInSubdir = true defaultContentLanguageInSubdir = true
#theme = "hermit-v2"
#[languages] #[languages]
# [languages.en] # [languages.en]
@ -83,7 +82,6 @@ enableEmoji = true
readTimeSeparator = "CHANGE ME READ TIME" readTimeSeparator = "CHANGE ME READ TIME"
# legacyLayout = false # legacyLayout = false
shareSocial = true shareSocial = true
# googleTagManager = "GTM-XXXXXXXX"
[[params.socialLinks]] [[params.socialLinks]]
name = "mastodon" name = "mastodon"

View file

@ -1,55 +1,52 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="{{.Site.LanguageCode}}"> <html lang="{{.Site.LanguageCode}}">
<head> <head>
{{- if .Site.Params.googleTagManager -}}{{- partial "googleTagManager_head.html" . -}}{{- end -}}
{{- partial "analytics.html" . -}} {{- partial "analytics.html" . -}}
{{- partial "site-meta.html" -}} <meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="robots" content="index, follow">
<meta name="revisit-after" content="15 days">
{{ $author := (.Params.author | default .Site.Params.author.name) -}} {{ $author := (.Params.author | default .Site.Params.author.name) -}}
<meta name="author" content="{{ $author }}"> <meta name="author" content="{{ $author }}">
{{ with .Site.Params.themeColor -}} {{ with .Site.Params.themeColor -}}
<meta name="theme-color" content="{{.}}"> <meta name="theme-color" content="{{.}}">
<meta name="msapplication-TileColor" content="{{.}}"> <meta name="msapplication-TileColor" content="{{.}}">
<link rel="mask-icon" href="{{"safari-pinned-tab.svg" | relURL}}" color="{{.}}">
{{- end -}} {{- end -}}
{{- with .Page.Params.description | default .Site.Params.description -}}<meta name="description" content="{{.}}">{{- end -}} {{- with .Params.description -}}<meta name="description" content="{{.}}">{{- end -}}
{{- partial "structured-data.html" . -}} {{- partial "structured-data.html" . -}}
{{- partial "favicons.html" -}}
<title>{{.Title}}</title> <title>{{.Title}}</title>
{{ range .AlternativeOutputFormats -}} {{ range .AlternativeOutputFormats -}}
{{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Title | safeHTML }} {{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Title | safeHTML }}
{{ end -}} {{ end -}}
{{ $style := resources.Get "scss/style.scss" | resources.ExecuteAsTemplate "css/style.css" . | toCSS | minify | fingerprint -}} {{ $style := resources.Get "scss/style.scss" | resources.ExecuteAsTemplate "css/style.css" . | toCSS | minify | fingerprint -}}
<link rel="stylesheet dns-prefetch preconnect preload prefetch" as="style" href="{{ $style.Permalink }}" {{ printf "integrity=%q" $style.Data.Integrity | safeHTMLAttr }} crossorigin="anonymous"> <link rel="stylesheet" href="{{ $style.Permalink }}" {{ printf "integrity=%q" $style.Data.Integrity | safeHTMLAttr }} crossorigin="anonymous">
{{- range .Params.custom_css -}} {{- range .Params.custom_css -}}<link rel="stylesheet" href="{{ . | absURL }}">{{- end -}}
{{ $c_css := resources.Get . | resources.ExecuteAsTemplate "css/style.css" . | toCSS | minify | fingerprint -}}
<link rel="stylesheet preload prefetch" as="style" href="{{ $c_css.Permalink }}" {{ printf "integrity=%q" $c_css.Data.Integrity | safeHTMLAttr }} crossorigin="anonymous">
{{- end -}}
{{- block "head" . -}}{{- end -}} {{- block "head" . -}}{{- end -}}
{{- if templates.Exists "partials/extra-head.html" -}}{{- partial "extra-head.html" . -}}{{- end -}}</head> {{- if templates.Exists "partials/extra-head.html" -}}{{- partial "extra-head.html" . -}}{{- end -}}</head>
<body id="page"> <body id="page">
{{- if .Site.Params.googleTagManager -}}{{- partial "googleTagManager_body.html" . -}}{{- end -}} {{- block "header" . -}}{{ end -}}
{{- block "header" . -}}{{ end -}} {{- block "main" . -}}{{ end -}}
{{- block "main" . -}}{{ end -}} {{- block "footer" . -}}{{ end }}
{{- block "footer" . -}}{{ end }} {{- partial "scroll-to-top.html" . }}
{{- partial "scroll-to-top.html" . }} {{- $main := resources.Get "js/main.js" -}}
{{- $main := resources.Get "js/main.js" -}} {{- if .Site.Params.code_copy_button | default true -}}
{{- if .Site.Params.code_copy_button | default true -}}
{{ $codeCopy := resources.Get "js/code-copy.js" -}} {{ $codeCopy := resources.Get "js/code-copy.js" -}}
{{ $script := slice $main $codeCopy | resources.Concat "js/bundle.js" | minify | fingerprint -}} {{ $script := slice $main $codeCopy | resources.Concat "js/bundle.js" | minify | fingerprint -}}
<script async src="{{ $script.Permalink }}" {{ printf "integrity=%q" $script.Data.Integrity | safeHTMLAttr }} crossorigin="anonymous"></script> <script async src="{{ $script.Permalink }}" {{ printf "integrity=%q" $script.Data.Integrity | safeHTMLAttr }} crossorigin="anonymous"></script>
{{- else -}} {{- else -}}
{{ $script := $main | minify | fingerprint -}} {{ $script := $main | minify | fingerprint -}}
<script async src="{{ $script.Permalink }}" {{ printf "integrity=%q" $script.Data.Integrity | safeHTMLAttr }} crossorigin="anonymous"></script> <script async src="{{ $script.Permalink }}" {{ printf "integrity=%q" $script.Data.Integrity | safeHTMLAttr }} crossorigin="anonymous"></script>
{{- end -}} {{- end -}}
{{- if and (not (eq .Site.Params.shareSocial nil)) (.Site.Params.shareSocial) -}} {{- if and (not (eq .Site.Params.shareSocial nil)) (.Site.Params.shareSocial) -}}
{{ $linkshare := resources.Get "js/link-share.js" | minify | fingerprint -}} {{ $linkshare := resources.Get "js/link-share.js" | minify | fingerprint -}}
<script async src="{{ $linkshare.Permalink }}" {{ printf "integrity=%q" $linkshare.Data.Integrity | safeHTMLAttr }} crossorigin="anonymous"></script> <script async src="{{ $linkshare.Permalink }}" {{ printf "integrity=%q" $linkshare.Data.Integrity | safeHTMLAttr }} crossorigin="anonymous"></script>
{{- end -}} {{- end -}}
{{- range .Params.custom_js -}} {{- range .Params.custom_js -}}<script type="text/javascript" src="{{ . | absURL }}"></script>{{- end }}
{{ $c_js := resources.Get . | minify | fingerprint -}} {{- partial "mathjax.html" . -}}
<script defer src="{{ $c_js.Permalink }}" {{ printf "integrity=%q" $c_js.Data.Integrity | safeHTMLAttr }} crossorigin="anonymous"></script> {{- if templates.Exists "partials/extra-foot.html" -}}{{- partial "extra-foot.html" . -}}{{- end }}
{{- end }}
{{- partial "mathjax.html" . -}}
{{- if templates.Exists "partials/extra-foot.html" -}}{{- partial "extra-foot.html" . -}}{{- end }}
</body> </body>
</html> </html>

View file

@ -19,7 +19,7 @@
<main class="site-main section-inner thin animated fadeIn faster"> <main class="site-main section-inner thin animated fadeIn faster">
<h1>{{ .Title }}</h1> <h1>{{ .Title }}</h1>
<div class="content"> <div class="content">
{{ .Content | replaceRE "(<h[1-6] id=\"([^\"]+)\".+)(</h[1-6]+>)" `${1}<a href="#${2}" class="anchor" aria-hidden="true"><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"><path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path><line x1="8" y1="12" x2="16" y2="12"></line></svg></a>${3}` | safeHTML }} {{ .Content | replaceRE "(<h[1-6] id=\"([^\"]+)\".+)(</h[1-6]+>)" `${1}<a href="#${2}" class="anchor" aria-hidden="true">{{- partial "svg.html" (dict "context" . "name" "content-anchor") -}}</a>${3}` | safeHTML }}
</div> </div>
{{- if .Params.comments }} {{- if .Params.comments }}
<div id="comments" class="thin"> <div id="comments" class="thin">

View file

@ -1 +0,0 @@
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id={{ .Site.Params.googleTagManager }}" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>

View file

@ -1 +0,0 @@
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','{{ .Site.Params.googleTagManager }}');</script>

View file

@ -1,5 +1,5 @@
<p> <p>
&copy; {{ now.Format "2006" }} <a href="{{ .Site.BaseURL }}">{{ .Site.Params.author.name }}</a> &#183; {{ .Site.Params.footerCopyright | safeHTML }} &copy; {{ now.Format "2006" }} <a href="{{ .Site.BaseURL }}">{{ .Site.Params.author.name }}</a> &#183;{{ .Site.Params.footerCopyright | safeHTML }}
{{/*{{- with (not (in (.Site.Language.Get "disableKinds") "RSS")) }}*/}} {{/*{{- with (not (in (.Site.Language.Get "disableKinds") "RSS")) }}*/}}
&#183; <a href="{{ "posts/index.xml" | absLangURL }}" target="_blank" title="rss">{{ partial "svg.html" (dict "context" . "name" "rss") }}</a> &#183; <a href="{{ "posts/index.xml" | absLangURL }}" target="_blank" title="rss">{{ partial "svg.html" (dict "context" . "name" "rss") }}</a>
{{/*{{ end }}*/}} {{/*{{ end }}*/}}

View file

@ -1,13 +0,0 @@
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="robots" content="index, follow">
<meta name="revisit-after" content="15 days">
<link rel="author" href="{{"humans.txt" | relURL}}">
<link rel="apple-touch-icon" sizes="180x180" href="{{"apple-touch-icon.png" | relURL}}">
<link rel="icon" type="image/png" sizes="32x32" href="{{"favicon-32x32.png" | relURL}}">
<link rel="icon" type="image/png" sizes="16x16" href="{{"favicon-16x16.png" | relURL}}">
<link rel="manifest" href="{{"site.webmanifest" | relURL}}">
<meta name="msapplication-TileImage" content="{{"mstile-144x144.png" | relURL}}">
<link rel="shortcut icon" href="{{"favicon.ico" | relURL}}">

View file

@ -24,7 +24,7 @@
<h1>{{ .Title }}</h1> <h1>{{ .Title }}</h1>
</header> </header>
<div class="content"> <div class="content">
{{ .Content | replaceRE "(<h[1-6] id=\"([^\"]+)\".+)(</h[1-6]+>)" `${1}<a href="#${2}" class="anchor" aria-hidden="true"><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"><path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path><line x1="8" y1="12" x2="16" y2="12"></line></svg></a>${3}` | safeHTML }} {{ .Content | replaceRE "(<h[1-6] id=\"([^\"]+)\".+)(</h[1-6]+>)" `${1}<a href="#${2}" class="anchor" aria-hidden="true">{{- partial "svg.html" (dict "context" . "name" "content-anchor") -}}</a>${3}` | safeHTML }}
</div> </div>
{{- if .Site.Params.relatedPosts }} {{- if .Site.Params.relatedPosts }}
{{- partial "related-posts.html" . -}} {{- partial "related-posts.html" . -}}
@ -41,7 +41,7 @@
<div class="post-info">{{- partial "posts_single_info.html" . -}}</div> <div class="post-info">{{- partial "posts_single_info.html" . -}}</div>
<hr class="post-end"> <hr class="post-end">
<div class="content"> <div class="content">
{{ .Content | replaceRE "(<h[1-6] id=\"([^\"]+)\".+)(</h[1-6]+>)" `${1}<a href="#${2}" class="anchor" aria-hidden="true"><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"><path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path><line x1="8" y1="12" x2="16" y2="12"></line></svg></a>${3}` | safeHTML }} {{ .Content | replaceRE "(<h[1-6] id=\"([^\"]+)\".+)(</h[1-6]+>)" `${1}<a href="#${2}" class="anchor" aria-hidden="true">{{- partial "svg.html" (dict "context" . "name" "content-anchor") -}}</a>${3}` | safeHTML }}
</div> </div>
{{- if .Site.Params.relatedPosts }} {{- if .Site.Params.relatedPosts }}
{{- partial "related-posts.html" . -}} {{- partial "related-posts.html" . -}}

View file

@ -1,103 +1,30 @@
{{/* Extending upon [https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/shortcodes/figure.html] */}} <figure{{ with .Get "class" }} class="{{ . }}"{{ end }}>
{{/* Help from [https://discourse.gohugo.io/t/has-anyone-a-webp-shortcode/35391] */}} {{- if .Get "link" -}}
{{- $path := .Get "src" -}} <a href="{{ .Get "link" }}"{{ with .Get "target" }} target="{{ . }}"{{ end }}{{ with .Get "rel" }} rel="{{ . }}"{{ end }}>
{{- $link := .Get "link" -}}
{{- $target := .Get "target" -}}
{{- $rel := .Get "rel" -}}
{{- $class := .Get "class" -}}
{{- $alt := .Get "alt" -}}
{{- $attr := .Get "attr" -}}
{{- $attrlink := .Get "attrlink" -}}
{{- $title := .Get "title" -}}
{{- $width := .Get "width" -}}
{{- $height := .Get "height" -}}
{{- $caption := .Get "caption" -}}
{{- $loading := .Get "loading" -}}
{{- $jpg := "" -}}
{{- $webp := "" -}}
{{- $fitOptionstojpg := printf "%vx%v jpg" $width $height -}}
{{- $fitOptionstowebp := printf "%vx%v webp" $width $height -}}
{{- $msg1 := "The %q shortcode requires a parameter named %q. See %s" -}}
{{- $msg2 := "The resource %q passed to the %q shortcode is not an image. See %s" -}}
{{- $msg3 := "The resource %q passed to the %q shortcode could not be found. See %s" -}}
{{- if not (findRE `http[s]{0,1}://` $path 1) -}}
{{ if not $path }}
{{ errorf $msg1 .Name "path" .Position }}
{{ end }}
{{- with $i := resources.Get $path -}}
{{- if eq $i.MediaType.MainType "image" -}}
{{- if not $width -}}{{- $width = $i.Width -}}{{- end -}}
{{- if not $height -}}{{- $height = $i.Height -}}{{- end -}}
{{- if eq $i.MediaType "image/webp" -}}
{{- $jpg = $i.Fit $fitOptionstojpg -}}
{{- $webp = $i -}}
{{- else if eq $i.MediaType "image/jpeg" -}}
{{- $webp = $i.Fit $fitOptionstowebp -}}
{{- $jpg = $i -}}
{{- else -}}
{{- $fitOptions := printf "%vx%v jpg" $width $height -}}{{- $jpg = $i.Fit $fitOptions -}}
{{- $fitOptions = printf "%vx%v webp" $width $height -}}{{- $webp = $i.Fit $fitOptions -}}
{{- end -}} {{- end -}}
<img src="{{ .Get "src" }}"
<figure{{ with $class }} class="{{ . }}" {{ end }}> {{- if or (.Get "alt") (.Get "caption") }}
{{- if $link -}} alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "caption" | markdownify| plainify }}{{ end }}"
<a href="{{ $link }}"{{ with $target }} target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end }}>
{{- end -}} {{- end -}}
<picture> {{- with .Get "width" }} width="{{ . }}"{{ end -}}
<source srcset="{{ $webp.RelPermalink }}" type="image/webp"> {{- with .Get "height" }} height="{{ . }}"{{ end -}}
<source srcset="{{ $jpg.RelPermalink }}" type="image/jpeg"> {{- with .Get "loading" }} loading="{{ . }}"{{ end -}}
<img src="{{ $webp.RelPermalink }}" loading="lazy"
/><!-- Closing img tag -->
{{- if or $alt $caption -}} alt="{{ with $alt }}{{ . }}{{ else }}{{ $caption | markdownify| plainify }}{{ end }}" {{- end -}} {{- if .Get "link" }}</a>{{ end -}}
{{- with $jpg.Width }} width="{{ . }}" {{ end -}} {{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}}
{{- with $jpg.Height }} height="{{ . }}" {{ end -}}
{{- with $loading }} loading="{{ . }}" {{ end -}} />
</picture>
{{- if $link }}</a>{{ end -}}
{{- if or (or $title $caption) $attr -}}
<figcaption> <figcaption>
{{ with $title -}}<h4>{{ . }}</h4>{{- end -}} {{ with (.Get "title") -}}
{{- if or $caption $attr -}}<p> <h4>{{ . }}</h4>
{{- $caption | markdownify -}} {{- end -}}
{{- with $attrlink }}<a href="{{ . }}">{{- end -}} {{- if or (.Get "caption") (.Get "attr") -}}<p>
{{- $attr | markdownify -}} {{- .Get "caption" | markdownify -}}
{{- if $attrlink }}</a>{{ end }}</p> {{- with .Get "attrlink" }}
<a href="{{ . }}">
{{- end -}}
{{- .Get "attr" | markdownify -}}
{{- if .Get "attrlink" }}</a>{{ end }}</p>
{{- end }} {{- end }}
</figcaption> </figcaption>
{{- end -}}
</figure>
{{- else -}}
{{- errorf $msg2 $path $.Name $.Position -}}
{{- end -}}
{{- else -}}
{{- errorf $msg3 $path .Name .Position -}}
{{- end -}}
{{- else -}}
<figure{{ with $class }} class="{{ . }}" {{ end }}>
{{- if $link -}}<a href="{{ $link }}"{{ with $target }} target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end }}>{{- end -}}
<img src="{{ $path }}"
{{- if or $alt $caption -}} alt="{{ with $alt }}{{ . }}{{ else }}{{ $caption | markdownify| plainify }}{{ end }}" {{- end -}}
{{- with $width }} width="{{ . }}" {{ end -}}
{{- with $height }} height="{{ . }}" {{ end -}}
{{- with $loading }} loading="{{ . }}" {{ end -}} />
{{- if $link }}</a>{{ end -}}
{{- if or (or $title $caption) $attr -}}
<figcaption>
{{ with $title -}}<h4>{{ . }}</h4>{{- end -}}
{{- if or $caption $attr -}}<p>
{{- $caption | markdownify -}}
{{- with $attrlink }}<a href="{{ . }}">{{- end -}}
{{- $attr | markdownify -}}
{{- if $attrlink }}</a>{{ end }}</p>
{{- end }} {{- end }}
</figcaption> </figure>
{{- end -}}
</figure>
{{- end -}}

View file

@ -4,7 +4,7 @@ licenselink = "https://github.com/1bl4z3r/hermit-V2/blob/main/LICENSE"
description = "Continuing Hermit's legacy to be minimal and fast theme" description = "Continuing Hermit's legacy to be minimal and fast theme"
homepage = "https://github.com/1bl4z3r/hermit-V2" homepage = "https://github.com/1bl4z3r/hermit-V2"
demosite = "https://1bl4z3r.github.io/hermit-V2/" demosite = "https://1bl4z3r.github.io/hermit-V2/"
tags = ["blog", "minimal", "dark", "responsive", "landing", "dark mode"] tags = ["blog", "minimal", "dark", "responsive", "fast"]
features = [ features = [
"single column", "single column",
"featured image", "featured image",