website

Personal website
git clone https://github.com/michaelneuper/website.git
README | Files | Log | Refs

commit 039357b6886ddf8cda93b275c7e43b2fd15c7649
parent 6392b4acb8ef43c526596c6df1e1832540bbef05
Author: Michael Neuper <michael@michaelneuper.com>
Date:   Mon, 30 Oct 2023 14:13:51 +0200

Add new layouts

Diffstat:
Alayouts/_default/_markup/render-codeblock-mermaid.html | 4++++
Alayouts/_default/baseof.html | 94+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlayouts/_default/list.html | 57+++++++++++++++++++++++----------------------------------
Mlayouts/_default/rss.xml | 59++++++++++++++++++++++++++++++++++++-----------------------
Mlayouts/_default/single.html | 91++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Alayouts/index.html | 60++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Alayouts/partials/footer.html | 5+++++
Dlayouts/partials/head_custom.html | 26--------------------------
Mlayouts/partials/header.html | 56+++++++++++++++++++++++---------------------------------
Alayouts/robots.txt | 2++
10 files changed, 309 insertions(+), 145 deletions(-)

diff --git a/layouts/_default/_markup/render-codeblock-mermaid.html b/layouts/_default/_markup/render-codeblock-mermaid.html @@ -0,0 +1,4 @@ +<div class="mermaid"> + {{- .Inner | safeHTML }} +</div> +{{ .Page.Store.Set "hasMermaid" true }} diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html @@ -0,0 +1,94 @@ +<!DOCTYPE html> +<html lang="{{ .Site.LanguageCode }}" style="font-size: {{ .Site.Params.rootFontSize | default "100%" }}"> + +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <!-- author --> + <meta name="author" content="{{ .Site.Author.name }}"> + + <!-- description --> + {{ if .Description }} + <meta name="description" content="{{ .Description }}"> + {{ else if and .IsPage .Summary }} + <meta name="description" content="{{ .Summary }}"> + {{ else }} + <meta name="description" content="{{ .Site.Params.description }}"> + {{ end }} + + <!-- favicon --> + <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> + <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> + <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> + + <!-- keywords --> + {{ if .Keywords }} + <meta name="keywords" content="{{ delimit .Keywords " " }} {{ delimit .Site.Params.keywords " " }}"> + {{ else }} + <meta name="keywords" content="{{ delimit .Site.Params.keywords " " }}"> + {{ end }} + + <!-- math --> + {{ if .Site.Params.math }} + {{ partial "math.html" . }} + {{ end }} + + <!-- buymeacoffee --> + {{ .Site.Params.buymeacoffee.code | safeHTML }} + + <!-- opengraph --> + {{ template "_internal/opengraph.html" . }} + + <!-- permalink --> + <link rel="canonical" href="{{ .Permalink }}"> + + <!-- rss --> + {{ range .AlternativeOutputFormats -}} + {{ printf ` + <link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }} + {{ end -}} + + <!-- schema --> + {{ template "_internal/schema.html" . }} + + <!-- style --> + <link media="screen" rel="stylesheet" href='{{ "css/common.css" | absURL }}'> + <link media="screen" rel="stylesheet" href='{{ "css/content.css" | absURL }}'> + + <!-- title --> + {{ if .IsHome }} + <title>{{ .Site.Title }}</title> + {{ else }} + <title>{{ .Title }} - {{ .Site.Title }}</title> + {{ end }} + + <!-- twitter --> + {{ template "_internal/twitter_cards.html" . }} + + {{ block "head" . }}{{ end }} +</head> + +<body> + <div id="wrapper"> + {{ partial "header.html" . }} + {{ block "main" . }}{{ end }} + {{ partial "footer.html" . }} + </div> + + <!-- custom css --> + {{ range .Site.Params.customCSS }} + <link media="screen" rel="stylesheet" href="{{ . | absURL }}" /> + {{ end }} + + <!-- custom js --> + {{ range .Site.Params.customJS }} + <script src="{{ . | absURL }}"></script> + {{ end }} + + <!-- google analytics --> + {{ template "_internal/google_analytics.html" . }} + +</body> + +</html> diff --git a/layouts/_default/list.html b/layouts/_default/list.html @@ -1,36 +1,25 @@ -{{ partial "header.html" . }} +{{ define "head" }} +<link rel="stylesheet" href='{{ "css/list.css" | absURL }}'> +{{ end }} -<div class="content-wrapper"> - {{if not .IsHome }} - <h1>{{ .Title | markdownify }}</h1> +{{ define "main" }} +<main id="main" class="archive"> + {{ $pages := where .Data.Pages "Type" "post" }} + {{ range $pages.GroupByDate "2006-01" }} + <div class="post-group"> + <h2>{{ dateFormat "January 2006" (printf "%s-01" .Key) }}</h2> + <ul> + {{ range .Pages }} + <li> + <a class="link" href="{{ .RelPermalink }}">{{ .Title }}</a> + <time>{{ .PublishDate.Format .Site.Params.dateFormat }}</time> + </li> + {{ end }} + </ul> + </div> {{ end }} - - {{ .Content }} - - <ul> - {{ $pages := .Pages }} - {{ if .IsHome }}{{ $pages = first 5 .Site.RegularPages }}{{ end }} - {{ range (where $pages "Section" "!=" "") }} - <li> - <span class="date">{{ .Date.Format "2006 Jan 02" }}</span> - - <a href="{{ .RelPermalink }}">{{ .Title | markdownify }}</a> - </li> - {{ end }} - </ul> - {{ if .IsHome }} - <a href="/posts/">See All</a> - {{ end }} - - <!-- <p> --> - <!-- <img align="left" src="/images/badges/gnu.gif"> --> - <!-- <img align="left" src="/images/badges/javascript.gif"> --> - <!-- <img align="left" src="/images/badges/suckless.gif"> --> - <!-- <img align="left" src="/images/badges/libreboot.gif"> --> - <!-- <img align="left" src="/images/badges/tor.gif"> --> - <!-- <img align="left" src="/images/badges/wiby.org.gif"> --> - <!-- <img align="left" src="/images/badges/created-with-emacs.jpg"> --> - <!-- </p> --> -</div> - - -{{ partial "footer.html" . }} + <div class="post-group"> + <h2>...</h2> + </div> +</main> +{{ end }} diff --git a/layouts/_default/rss.xml b/layouts/_default/rss.xml @@ -1,26 +1,39 @@ +{{- $pctx := . -}} +{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}} +{{- $pages := slice -}} +{{- if or $.IsHome $.IsSection -}} +{{- $pages = (where (where $pctx.RegularPages ".Section" "post") "Kind" "page") -}} +{{- else -}} +{{- $pages = (where (where $pctx.Pages ".Section" "post") "Kind" "page") -}} +{{- end -}} +{{- $limit := .Site.Config.Services.RSS.Limit -}} +{{- if ge $limit 1 -}} +{{- $pages = $pages | first $limit -}} +{{- end -}} +{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }} <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <channel> - <title>{{ .Site.Title }}</title> - <link>{{ .Permalink }}</link> - <description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description> - <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }} - <language>{{.}}</language>{{end}}{{ with .Site.Author.email }} - <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }} - <webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }} - <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }} - <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }} - {{ with .OutputFormats.Get "RSS" }} - {{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }} - {{ end }} - {{ range .Site.RegularPages }} - <item> - <title>{{ .Title }}</title> - <link>{{ .Permalink }}</link> - <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate> - {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}} - <guid>{{ .Permalink }}</guid> - <description>{{- .Content | html -}}</description> - </item> - {{ end }} - </channel> + <title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title> + <link>{{ .Permalink }}</link> + <description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description> + <generator>Hugo -- gohugo.io</generator> + <language>{{ site.Language.LanguageCode }}</language>{{ with .Site.Author.email }} + <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }} + <webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }} + <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }} + <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }} + {{- with .OutputFormats.Get "RSS" -}} + {{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }} + {{- end -}} + {{ range $pages }} + <item> + <title>{{ .Title }}</title> + <link>{{ .Permalink }}</link> + <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate> + {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}} + <guid>{{ .Permalink }}</guid> + <description>{{ .Summary | html }}</description> + </item> + {{ end }} + </channel> </rss> diff --git a/layouts/_default/single.html b/layouts/_default/single.html @@ -1,33 +1,66 @@ -{{ partial "header.html" . }} -<div class="article-meta"> -<h1><span class="title">{{ .Title | markdownify }}</span></h1> -{{ with .Params.author }}<h2 class="author">{{ . }}</h2>{{ end }} -{{ if .Params.date }}<h2 id= "date" class="date">{{ .Date.Format "2 January 2006" }}</h2>{{ end }} -<p class="terms"> - {{ range $i := (slice "categories" "tags") }} - {{ with ($.Param $i) }} - {{ $i | title }}: {{ range $k := . }}<a href="{{ relURL (print "/" $i "/" $k | urlize) }}">{{$k}}</a> {{ end }} +{{ define "head" }} +<link rel="stylesheet" href='{{ "css/single.css" | absURL }}'> +<link rel="stylesheet" href='{{ "css/sharingbuttons.css" | absURL }}'> +{{ end }} + +{{ define "main" }} +<main id="main" class="post"> + {{ if ne .Section "post"}} + <article class="content {{ if .Site.Params.numberedSubtitles }}numbered-subtitles{{ end }}"> + {{ .Content }} + </article> + + {{ else }} + <h1>{{ .Title }}</h1> + {{ if ne .Params.tags nil }} + <div> + {{ range .Params.tags }} + <a class="link" href='{{ "tags" | absURL }}/{{ . | urlize }}'>#{{ . }}</a> + {{ end }} + </div> {{ end }} + {{ if cond (ne .Params.toc nil) .Params.toc .Site.Params.toc }} + {{ if ne .TableOfContents "<nav id=\"TableOfContents\"></nav>" }} + <details> + <summary> + <b>Table of Contents</b> + </summary> + <div class="toc {{ if .Site.Params.numberedSubtitles }}numbered-subtitles{{ end }}">{{ .TableOfContents }}</div> + </details> {{ end }} -</p> -</div> - -{{ if .Params.toc }} -{{ .TableOfContents }} -{{ end }} -<div class="content-wrapper"> - <main> + {{ end }} + <article class="content {{ if .Site.Params.numberedSubtitles }}numbered-subtitles{{ end }}"> + {{ if .Site.Params.emphasisWithDots }} + {{ .Content | replaceRE "<strong>(\\p{Han}+?)</strong>" "<strong class=chinese>$1</strong>" | safeHTML }} + {{ else }} {{ .Content }} - {{ if .Type | eq "posts" }} - <div class="navbuttons"> - {{- with .Prev }} - <a href="{{ .RelPermalink }}"><div class="prev">Previous:<br>{{ .Title }}</div></a> - {{ end -}} - {{- with .Next -}} - <a href="{{ .RelPermalink }}"><div class="next">Next:<br>{{ .Title }}</div></a> - {{ end -}} - </div> {{ end }} - </main> -</div> -{{ partial "footer.html" . }} + </article> + {{ partial "sharingbuttons.html" . }} + <div class="paginator"> + {{ if .PrevInSection }} + <a class="link" href="{{ .PrevInSection.Permalink }}">← prev</a> + {{ else }} + <a></a> + {{ end }} + {{ if .NextInSection }} + <a class="link" href="{{ .NextInSection.Permalink }}">next →</a> + {{ else }} + <a></a> + {{ end }} + </div> + <div class="comment"> + <!-- disqus --> + {{ template "_internal/disqus.html" . }} + <!-- generic engine --> + {{ .Site.Params.commentEngine.code | safeHTML }} + </div> + {{ end }} +{{ if .Page.Store.Get "hasMermaid" }} + <script type="module"> + import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs'; + mermaid.initialize({ startOnLoad: true }); + </script> +{{ end }} +</main> +{{ end }} diff --git a/layouts/index.html b/layouts/index.html @@ -0,0 +1,60 @@ +{{ define "head" }} +<link rel="stylesheet" href='{{ "css/index.css" | absURL }}'> +{{ end }} + +{{ define "main" }} +<main id="main" class="index"> + {{ $paginator := .Paginate (where .Site.RegularPages "Type" "==" "post") }} + {{ range $paginator.Pages }} + <div class="post"> + <h2> + <a href="{{ .Permalink }}">{{ .Title }}</a> + <div> + {{ if .Site.Params.showWordCount }} + <span>{{ .WordCount }} words</span> + {{ end }} + + {{ if gt .ReadingTime 1 }} + {{ .Scratch.Set "timeUnit" "mins" }} + {{ else }} + {{ .Scratch.Set "timeUnit" "min" }} + {{ end }} + {{ if .Site.Params.showReadingTime }} + <span>~{{.ReadingTime}} {{ .Scratch.Get "timeUnit" }}</span> + {{ end }} + + <time>{{ .PublishDate.Format .Site.Params.dateFormat }}</time> + </div> + </h2> + {{ if ne .Params.tags nil }} + <div> + {{ range .Params.tags }} + <a class="link" href='{{ "tags" | absURL }}/{{ . | urlize }}'>#{{ . }}</a> + {{ end }} + </div> + {{ end }} + <div class="content"> + {{ if .Site.Params.emphasisWithDots }} + {{ .Summary | replaceRE "<strong>(\\p{Han}+?)</strong>" "<strong class=chinese>$1</strong>" | safeHTML }} + {{ else }} + {{ .Summary }} + {{ end }} + </div> + </div> + {{ end }} + {{ if or $paginator.HasPrev $paginator.HasNext}} + <div class="paginator"> + {{ if $paginator.HasPrev }} + <a class="link" href="{{ $paginator.Prev.URL }}">← prev</a> + {{ else }} + <a></a> + {{ end }} + {{ if $paginator.HasNext }} + <a class="link" href="{{ $paginator.Next.URL }}">next →</a> + {{ else }} + <a></a> + {{ end }} + </div> + {{ end }} +</main> +{{ end }} diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html @@ -0,0 +1,5 @@ +<footer id="footer"> + <div> + <span>{{ .Site.Params.footnote | safeHTML }} | © {{ .Site.Params.since }}</span> - <span>{{ now.Format "2006"}}</span> + </div> +</footer> diff --git a/layouts/partials/head_custom.html b/layouts/partials/head_custom.html @@ -1,26 +0,0 @@ -<header> - - <nav> - <ul> - {{ $title := lower .Title }} - {{ $section := lower .Section }} - <li class="pull-left {{ if .IsHome }}current{{ end }}"> - <a href="{{ .Site.BaseURL }}">/home/</a> - </li> - {{ range .Site.Menus.main }} - {{ $name := lower .Name }} - <li class="pull-left {{ if eq $name $title }}current{{ else if eq $section $name }}current{{ else if eq $title (pluralize $name) }}current{{ end }}"> - <a href="{{ .URL }}">/{{ lower .Name }}/</a> - </li> - {{end}} - - {{ range .Site.Menus.feed }} - {{ $name := lower .Name}} - <li class="pull-right"> - <a href="{{ .URL }}">{{ lower .Name }}</a> - </li> - {{end}} - - </ul> - </nav> -</header> diff --git a/layouts/partials/header.html b/layouts/partials/header.html @@ -1,34 +1,24 @@ -<!DOCTYPE html> -<html lang="{{ .Site.LanguageCode }}"> - <head> - - <!-- Google tag (gtag.js) --> - <script async src="https://www.googletagmanager.com/gtag/js?id=G-BLX24KP7CS"></script> - <script> - window.dataLayer = window.dataLayer || []; - function gtag(){dataLayer.push(arguments);} - gtag('js', new Date()); +{{ $parsedUrl := urls.Parse .Site.BaseURL }} +{{ $domain := $parsedUrl.Host }} +{{ $domainWithoutWWW := replace $domain "www." "" }} +<header id="header"> + <h1> + <a href="{{ .Site.BaseURL }}">{{ .Site.Params.title | default .Site.Title }}</a> + </h1> - gtag('config', 'G-BLX24KP7CS'); - </script> - - - <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png"> - <link rel="manifest" href="/images/site.webmanifest"> - - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <meta name="description" content="{{ if .Description }}{{ .Description }}{{ else }}{{ .Site.Params.Description }}{{ end }}"> - <title>{{ .Title }} | {{ .Site.Title }}</title> - <link rel="stylesheet" href="{{ "/css/style.css" | relURL }}" /> - <link rel="stylesheet" href="{{ "/css/fonts.css" | relURL }}" /> - {{ range .Site.Params.custom_css -}} - <link rel="stylesheet" href="{{ . | absURL }}"> - {{- end }} - {{ partial "head_custom.html" . }} - </head> - - <body> - <br/> + <nav> + {{ range .Site.Menus.main }} + <span class="nav-bar-item"> + <a class="link" href="{{ .URL | safeURL }}">{{ .Name }}</a> + </span> + {{ end }} + </nav> + {{ if .Site.Params.enableDuckDuckGoSearchBox }} + <div id="searchbox"> + <form method="get" id="search" target="_blank" action="https://duckduckgo.com/"> + <input type="hidden" name="sites" value="{{ $domainWithoutWWW }}"> + <input type="text" name="q" placeholder="Search..."> + </form> + </div> + {{ end }} +</header> diff --git a/layouts/robots.txt b/layouts/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Sitemap: {{ "sitemap.xml" | absURL }}