First standalone version
9
CHANGELOG.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
### Added
|
||||
* Making theme standalone.
|
20
LICENSE
Normal file
|
@ -0,0 +1,20 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2020 Gregory Trolliet
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
94
README.md
Normal file
|
@ -0,0 +1,94 @@
|
|||
# Hugo theme : Snotra
|
||||
|
||||
This is a dark and classy Hugo theme.
|
||||
|
||||
## Installation
|
||||
|
||||
To install Simple-site theme, you can simply clone the repository
|
||||
to your site's theme directory.
|
||||
|
||||
```bash
|
||||
$ mkdir themes
|
||||
$ cd themes
|
||||
$ git clone https://git.vulgarisons.info/raghnarok/hugo_snotra.git snotra
|
||||
```
|
||||
|
||||
Don't forget to change the theme in your config.toml file.
|
||||
|
||||
## Configuration
|
||||
|
||||
### Base
|
||||
|
||||
```toml
|
||||
baseurl = "https://yourdoma.in" # The base url of your Hugo website
|
||||
title = "Title" # The title of your website
|
||||
author = "Author" # The author of the website
|
||||
language = "fr"
|
||||
theme = "idunn" # The Hugo theme
|
||||
```
|
||||
|
||||
### Description
|
||||
|
||||
You can use some parameters to fill meta tags and bases images:
|
||||
|
||||
```toml
|
||||
[params]
|
||||
description = "" # Description for the meta tag
|
||||
favicon = "" # Favicon URL
|
||||
logo = "" # Logo URL
|
||||
```
|
||||
|
||||
### Colors
|
||||
|
||||
It is possible to basicaly change some colors:
|
||||
|
||||
```toml
|
||||
[params.colors]
|
||||
font = "black" # General font color, default to black
|
||||
background = "white" # General background color, default to white
|
||||
main = "grey" # Theme color, used for footer among others, default to grey
|
||||
font_above = "white" # Used for font above *main* color, default to white
|
||||
```
|
||||
|
||||
### Custom CSS
|
||||
|
||||
```toml
|
||||
[params]
|
||||
custom_css = ["style.css"] # Your own css files
|
||||
```
|
||||
|
||||
### Contact footer
|
||||
|
||||
If you want to have some informations about you in the footer,
|
||||
you can set it with thoses parameters:
|
||||
|
||||
```toml
|
||||
[params.contact]
|
||||
email = "mail@serve.ur" # The mail of your company
|
||||
phone = "+41 22 123 45 67" # The phone number of your company
|
||||
address = "Your address" # The address of your company
|
||||
```
|
||||
|
||||
### Social Networks
|
||||
|
||||
You can also set some of your networks accounts.
|
||||
Thoses options are availables:
|
||||
|
||||
```toml
|
||||
[params.social]
|
||||
500px = ""
|
||||
codepen = ""
|
||||
facebook = ""
|
||||
flickr = ""
|
||||
github = ""
|
||||
gitlab = ""
|
||||
instagram = ""
|
||||
linkedin = ""
|
||||
mastodon = ""
|
||||
peertube = ""
|
||||
pinterest = ""
|
||||
pixelfed = ""
|
||||
tumblr = ""
|
||||
twitter = ""
|
||||
youtube = ""
|
||||
```
|
9
archetypes/default.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
author: "Gregory Trolliet"
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
description: ""
|
||||
categories: ["",""]
|
||||
tags: ["",""]
|
||||
draft: true
|
||||
---
|
12
data/snotra/mois.yaml
Normal file
|
@ -0,0 +1,12 @@
|
|||
1: "janvier"
|
||||
2: "février"
|
||||
3: "mars"
|
||||
4: "avril"
|
||||
5: "mai"
|
||||
6: "juin"
|
||||
7: "juillet"
|
||||
8: "août"
|
||||
9: "septembre"
|
||||
10: "octobre"
|
||||
11: "novembre"
|
||||
12: "décembre"
|
48
i18n/fr.toml
Normal file
|
@ -0,0 +1,48 @@
|
|||
[categories]
|
||||
one = "catégorie"
|
||||
other = "catégories"
|
||||
|
||||
[tags]
|
||||
one = "tag"
|
||||
other = "tags"
|
||||
|
||||
[articles]
|
||||
one = "article"
|
||||
other = "articles"
|
||||
|
||||
[reading_time]
|
||||
one = "Une minute de lecture"
|
||||
other = "{{ .Count }} minutes de lecture"
|
||||
|
||||
[previous_article]
|
||||
other = "article précédent"
|
||||
|
||||
[next_article]
|
||||
other = "article suivant"
|
||||
|
||||
[alt_image]
|
||||
other = "Image de l'article:"
|
||||
|
||||
[alt_avatar]
|
||||
other = "Avatar de {{ .Site.Params.author }}"
|
||||
|
||||
[go_home]
|
||||
other = "Retour à la page d'accueil"
|
||||
|
||||
[error_404]
|
||||
other = "Erreur 404 : Page non trouvée"
|
||||
|
||||
[error_404_title]
|
||||
other = "Title link"
|
||||
|
||||
[error_404_txt]
|
||||
other = "Désolé, la page à laquelle vous essayez d'accéder n'existe pas."
|
||||
|
||||
[error_404_reasons]
|
||||
other = """Raisons possibles :
|
||||
<ul>
|
||||
<li>La page que vous cherchez a été déplacée ou supprimée ;</li>
|
||||
<li>Vous avez peut-être utilisé un lien obsolète ou rompu ;</li>
|
||||
<li>Vous avez peut-être mal saisi l'adresse
|
||||
(<abbr title="Uniform Resource Locator">URL</abbr>).</li>
|
||||
</ul>"""
|
20
layouts/404.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
{{ define "main"}}
|
||||
<main id="wrapper">
|
||||
<section class="container error_page">
|
||||
<div>
|
||||
<h1 id="title">
|
||||
{{ with .Site.Params.error404_definitionUrl }}
|
||||
<a title="{{ i18n "error_404_title" }}" href="{{ . }}">
|
||||
{{ end }}
|
||||
{{ htmlUnescape (i18n "error_404") }}
|
||||
{{ with .Site.Params.error404_definitionUrl }}
|
||||
</a>
|
||||
{{ end }}
|
||||
</h1>
|
||||
<p>{{ i18n "error_404_txt" }}</p>
|
||||
<p>{{ i18n "error_404_reasons" | markdownify }}</p>
|
||||
</div>
|
||||
<footer><a href="{{ "/" | relURL }}">{{ i18n "go_home" }}</a></footer>
|
||||
</section>
|
||||
</main>
|
||||
{{ end }}
|
12
layouts/_default/baseof.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
{{ partial "header.html" . }}
|
||||
|
||||
<body>
|
||||
<!-- Code that all your templates share, like a header -->
|
||||
{{ block "main" . }}
|
||||
<!-- The part of the page that begins to differ between templates -->
|
||||
{{ end }}
|
||||
{{ block "footer" . }}
|
||||
<!-- More shared code, perhaps a footer but that can be overridden if need be in -->
|
||||
{{ end }}
|
||||
</body>
|
||||
</html>
|
6
layouts/_default/li.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
<li>
|
||||
<span class="date">
|
||||
{{ .Date.Day }} {{ index $.Site.Data.snotra.mois (printf "%d" .Date.Month) }} {{ .Date.Year }}
|
||||
</span>
|
||||
<a class="title" href="{{ .Params.ExternalLink | default .RelPermalink }}">{{ .Title }}</a>
|
||||
</li>
|
28
layouts/_default/list.html
Normal file
|
@ -0,0 +1,28 @@
|
|||
{{ partial "header.html" . }}
|
||||
<body>
|
||||
<main class="wrapper">
|
||||
{{ partial "navigation.html" . }}
|
||||
|
||||
<section id="blog-list" class="container liste">
|
||||
<article>
|
||||
<header>
|
||||
<h1 class="list-title">
|
||||
{{ if eq .Kind "taxonomy" }}
|
||||
{{ i18n .Data.Plural 1 | title }}: {{ .Title }}
|
||||
{{ else if eq .Kind "taxonomyTerm" }}
|
||||
{{ i18n .Data.Plural | title }}
|
||||
{{ end }}
|
||||
</h1>
|
||||
</header>
|
||||
<ul class="articles-list">
|
||||
{{- range .Paginator.Pages -}}
|
||||
{{- .Render "li" -}}
|
||||
{{- end -}}
|
||||
</ul>
|
||||
</article>
|
||||
{{ .Content }}
|
||||
{{ partial "pagination.html" . }}
|
||||
</section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
26
layouts/_default/rss.xml
Normal file
|
@ -0,0 +1,26 @@
|
|||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<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>{{ 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>
|
||||
</rss>
|
15
layouts/_default/single.html
Normal file
|
@ -0,0 +1,15 @@
|
|||
{{ partial "header.html" . }}
|
||||
<body>
|
||||
<main class="wrapper">
|
||||
{{ partial "navigation.html" . }}
|
||||
<section id="site-page" class="container page">
|
||||
<article>
|
||||
<header>
|
||||
<h1 class="site-title">{{ .Title }}</h1>
|
||||
</header>
|
||||
{{ .Content }}
|
||||
</article>
|
||||
</section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
6
layouts/blog/li.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
<li>
|
||||
<span class="date">
|
||||
{{ .Date.Day }} {{ index $.Site.Data.snotra.mois (printf "%d" .Date.Month) }} {{ .Date.Year }}
|
||||
</span>
|
||||
<a class="title" href="{{ .Params.ExternalLink | default .RelPermalink }}">{{ .Title }}</a>
|
||||
</li>
|
23
layouts/blog/list.html
Normal file
|
@ -0,0 +1,23 @@
|
|||
{{ partial "header.html" . }}
|
||||
<body>
|
||||
<main class="wrapper">
|
||||
{{ partial "navigation.html" . }}
|
||||
|
||||
<section id="blog-list" class="container liste">
|
||||
<article>
|
||||
<header>
|
||||
<h1 class="list-title">
|
||||
{{ i18n "articles" | title }}
|
||||
</h1>
|
||||
</header>
|
||||
<ul class="articles-list">
|
||||
{{- range .Paginator.Pages -}}
|
||||
{{- .Render "li" -}}
|
||||
{{- end -}}
|
||||
</ul>
|
||||
</article>
|
||||
{{ partial "pagination.html" . }}
|
||||
</section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
36
layouts/blog/single.html
Normal file
|
@ -0,0 +1,36 @@
|
|||
{{ partial "header.html" . }}
|
||||
<body>
|
||||
<main class="wrapper">
|
||||
{{ partial "navigation.html" . }}
|
||||
<section class="container article">
|
||||
<article>
|
||||
<header class="post-header">
|
||||
<h1 class="post-title">
|
||||
{{ .Title }}
|
||||
</h1>
|
||||
<div class="post-meta">
|
||||
<div class="date">
|
||||
<span class="posted-on">
|
||||
<img class="page-icon header-icon" src="/svg/calendar.svg"/>
|
||||
<time datetime='{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}'>
|
||||
Article publié le {{ .Date.Day }} {{ index $.Site.Data.snotra.mois (printf "%d" .Date.Month) }} {{ .Date.Year }}
|
||||
</time>
|
||||
</span>
|
||||
<span class="reading-time">
|
||||
<img class="page-icon header-icon" src="/svg/clock.svg"/>
|
||||
{{ i18n "reading_time" .ReadingTime }}
|
||||
</span>
|
||||
</div>
|
||||
{{ partial "categories.html" .Page.Params.Categories }}
|
||||
{{ partial "tags.html" .Page.Params.Tags }}
|
||||
</div>
|
||||
</header>
|
||||
<div class="article-body">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
{{ partial "article-footer.html" . }}
|
||||
</article>
|
||||
</section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
20
layouts/index.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
{{ partial "header.html" . }}
|
||||
<body>
|
||||
<main class="wrapper">
|
||||
{{ partial "navigation.html" . }}
|
||||
<div class="centered">
|
||||
{{ partial "author.html" . }}
|
||||
{{ if false }}
|
||||
{{ range .Site.RegularPages }}
|
||||
<header>
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
|
||||
</header>
|
||||
<article>
|
||||
{{ .Summary }}
|
||||
</article>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
21
layouts/partials/article-footer.html
Normal file
|
@ -0,0 +1,21 @@
|
|||
<footer class="article-footer">
|
||||
{{ if .PrevInSection }}
|
||||
<span class="footer-link">
|
||||
<span class="label">{{ i18n "previous_article" | humanize }}:</span>
|
||||
<a href="{{ .PrevInSection.RelPermalink }}">
|
||||
{{ .PrevInSection.Title }}
|
||||
</a>
|
||||
{{ if .NextInSection }}
|
||||
<span class="spacer"></span>
|
||||
{{ end }}
|
||||
</span>
|
||||
{{ end }}
|
||||
{{ if .NextInSection }}
|
||||
<span class="footer-link">
|
||||
<span class="label">{{ i18n "next_article" | humanize }}:</span>
|
||||
<a href="{{ .NextInSection.RelPermalink }}">
|
||||
{{ .NextInSection.Title }}
|
||||
</a>
|
||||
</span>
|
||||
{{ end }}
|
||||
</footer>
|
24
layouts/partials/author.html
Normal file
|
@ -0,0 +1,24 @@
|
|||
<div id="author">
|
||||
<div id="avatar">
|
||||
<img src="images/{{ .Site.Params.avatar }}" alt="avatar"/>
|
||||
</div>
|
||||
<div id="description">
|
||||
<h1>{{ .Site.Params.author }}</h1>
|
||||
<h2>{{ .Site.Params.info }}</h2>
|
||||
</div>
|
||||
{{ with .Site.Params.social }}
|
||||
<ul id="social">
|
||||
{{ range sort . "weight" }}
|
||||
<li class="social-element">
|
||||
{{ if eq .type "tel" }}
|
||||
<a href="tel:{{ .url }}" rel="me" aria-label="{{ .name }}" title="{{ .name }}">
|
||||
{{ else }}
|
||||
<a href="{{ .url }}" rel="me" aria-label="{{ .name }}" title="{{ .name }}">
|
||||
{{ end }}
|
||||
<img class="social-icon" src="svg/{{ .icon }}" alt="{{ .name }}" aria-hidden="true">
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{ end }}
|
13
layouts/partials/categories.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
{{ if . }}
|
||||
<div class="categories">
|
||||
<img class="page-icon header-icon" src="/svg/folder.svg"/>
|
||||
{{ range $index, $el := . }}
|
||||
{{ if gt $index 0 }}
|
||||
<span class="separator">•</span>
|
||||
{{ end }}
|
||||
<a href="{{ ( printf "categories/%s/" ( $el | urlize ) ) | relLangURL }}">
|
||||
{{ . }}
|
||||
</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
0
layouts/partials/footer.html
Normal file
0
layouts/partials/head.html
Normal file
34
layouts/partials/header.html
Normal file
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang='{{ .Site.Language.Lang }}'>
|
||||
<head>
|
||||
<title>{{ .Title }}</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
{{ if .Description }}
|
||||
<meta name="description" content="{{ .Description }}">
|
||||
{{ else }}
|
||||
<meta name="description" content="{{ .Site.Params.description }}">
|
||||
{{ end }}
|
||||
{{ if .Params.Tags }}
|
||||
<meta name="keywords" content="{{ delimit .Params.Tags ", "}}">
|
||||
{{ else }}
|
||||
<meta name="keywords" content="{{ .Site.Params.keywords }}">
|
||||
{{ end }}
|
||||
{{ if .Params.author }}
|
||||
<meta name="author" content="{{ .Params.author }}">
|
||||
{{ else }}
|
||||
<meta name="author" content="{{ .Site.Params.author }}">
|
||||
{{ end }}
|
||||
<link rel="stylesheet" href="/css/style.css">
|
||||
<link href="{{ .Site.RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}">
|
||||
<link rel="icon" type="image/gif" href="{{ .Site.BaseURL }}images/favicon_32x32.gif" sizes="32x32">
|
||||
<link rel="icon" type="image/gif" href="{{ .Site.BaseURL }}images/favicon_16x16.gif" sizes="16x16">
|
||||
|
||||
|
||||
{{ partial "opengraph.html" . }}
|
||||
|
||||
{{ range .Site.Params.custom_css }}
|
||||
<link rel="stylesheet" href="{{ . | relURL }}"/>
|
||||
{{ end }}
|
||||
{{ hugo.Generator }}
|
||||
</head>
|
25
layouts/partials/navigation.html
Normal file
|
@ -0,0 +1,25 @@
|
|||
<nav id="navigation">
|
||||
<section class="navigation-container">
|
||||
<a id="navigation-title" href="/">
|
||||
{{ .Site.Title }}
|
||||
</a>
|
||||
|
||||
<input type="checkbox" id="menu-toggle" />
|
||||
<label class="menu-button" for="menu-toggle">
|
||||
<div class="menu-button-inner">
|
||||
<div class="menu-button-image"></div>
|
||||
</div>
|
||||
</label>
|
||||
<ul id="navigation-list">
|
||||
<li class="navigation-item">
|
||||
<a href="/blog">Blog</a>
|
||||
</li>
|
||||
<li class="navigation-item">
|
||||
<a href="/projects">Projets</a>
|
||||
</li>
|
||||
<li class="navigation-item">
|
||||
<a href="/contact">Contact</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</nav>
|
45
layouts/partials/opengraph.html
Normal file
|
@ -0,0 +1,45 @@
|
|||
<meta name="twitter:card" content="summary_large_image"/>
|
||||
<meta name="twitter:site" content="@{{ .Site.Params.twitterUser }}"/>
|
||||
<meta name="twitter:creator" content="@{{ .Site.Params.twitterUser }}"/>
|
||||
|
||||
{{/*if .Params.images }}
|
||||
{{ $baseUrl := .Permalink }}
|
||||
{{ range first 1 .Params.images }}
|
||||
<meta name="twitter:image" content="{{ $baseUrl }}{{ . }}"/>
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
<meta name="twitter:image" content="{{ .Site.BaseURL }}images/{{ .Site.Params.avatar }}"/>
|
||||
{{ end */}}
|
||||
<meta name="twitter:title" content="{{ .Title }}"/>
|
||||
{{ if .Description }}
|
||||
<meta name="twitter:description" content="{{ .Description }}"/>
|
||||
{{ else }}
|
||||
<meta name="twitter:description" content="{{ .Site.Params.description }}"/>
|
||||
{{ end }}
|
||||
|
||||
<meta property="og:title" content="{{ .Title }}" />
|
||||
{{ if .Description }}
|
||||
<meta property="og:description" content="{{ .Description }}"/>
|
||||
{{ else }}
|
||||
<meta property="og:description" content="{{ .Site.Params.description }}"/>
|
||||
{{ end }}
|
||||
{{ if eq .Kind "page" }}
|
||||
<meta property="og:type" content="article" />
|
||||
{{ else }}
|
||||
<meta property="og:type" content="website" />
|
||||
{{ end }}
|
||||
<meta property="og:url" content="{{ .Permalink }}" />
|
||||
{{ $title := .Title }}
|
||||
{{if .Params.images }}
|
||||
{{ $baseUrl := .Permalink }}
|
||||
{{ $altText := i18n "alt_image" }}
|
||||
{{ range first 1 .Params.images }}
|
||||
<meta property="og:image" content="{{ $baseUrl }}{{ . }}"/>
|
||||
<meta property="og:image:alt" content="{{ $altText }} {{ $title }}"/>
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
<meta property="og:image" content="{{ .Site.BaseURL }}images/avatar.png"/>
|
||||
<meta property="og:image:alt" content="{{ i18n "alt_avatar" . }}"/>
|
||||
{{ end }}
|
||||
<meta property="og:updated_time" content="{{ .Site.LastChange }}" />
|
||||
<meta property="og:site_name" content="{{ .Site.Title }}" />
|
51
layouts/partials/pagination.html
Normal file
|
@ -0,0 +1,51 @@
|
|||
{{ $paginator := .Paginator }}
|
||||
{{ $adjacent_links := 2 }}
|
||||
{{ $max_links := (add (mul $adjacent_links 2) 1) }}
|
||||
{{ $lower_limit := (add $adjacent_links 1) }}
|
||||
{{ $upper_limit := (sub $paginator.TotalPages $adjacent_links) }}
|
||||
|
||||
{{ if gt $paginator.TotalPages 1 }}
|
||||
<ul class="pagination">
|
||||
{{ if $paginator.HasPrev }}
|
||||
{{ if ne $paginator.PageNumber 2 }}
|
||||
<li><a href="{{ $paginator.First.URL }}">«</a></li>
|
||||
{{ end }}
|
||||
<li class="hidden"><a href="{{ $paginator.Prev.URL }}">‹</a></li>
|
||||
{{ end }}
|
||||
|
||||
{{ range $paginator.Pagers }}
|
||||
{{ $.Scratch.Set "page_number_flag" false }}
|
||||
{{ if gt $paginator.TotalPages $max_links }}
|
||||
{{ if le $paginator.PageNumber $lower_limit }}
|
||||
{{ if le .PageNumber $max_links }}
|
||||
{{ $.Scratch.Set "page_number_flag" true }}
|
||||
{{ end }}
|
||||
{{ else if ge $paginator.PageNumber $upper_limit }}
|
||||
{{ if gt .PageNumber (sub $paginator.TotalPages $max_links) }}
|
||||
{{ $.Scratch.Set "page_number_flag" true }}
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
{{ if and ( ge .PageNumber (sub $paginator.PageNumber $adjacent_links) ) ( le .PageNumber (add $paginator.PageNumber $adjacent_links) ) }}
|
||||
{{ $.Scratch.Set "page_number_flag" true }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
{{ $.Scratch.Set "page_number_flag" true }}
|
||||
{{ end }}
|
||||
{{ if eq ($.Scratch.Get "page_number_flag") true }}
|
||||
{{ if eq . $paginator }}
|
||||
<li>{{ .PageNumber }}</li>
|
||||
{{ else }}
|
||||
<li><a href="{{ .URL }}">{{ .PageNumber }}</a></li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ if $paginator.HasNext }}
|
||||
<li class="hidden"><a href="{{ $paginator.Next.URL }}">›</a></li>
|
||||
{{ if ne $paginator.PageNumber (sub $paginator.TotalPages 1) }}
|
||||
<li><a href="{{ $paginator.Last.URL }}">»</a></li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ end }}
|
11
layouts/partials/tags.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
{{ if . }}
|
||||
<div class="tags">
|
||||
<img class="page-icon header-icon" src="/svg/tag.svg"/>
|
||||
{{ range $index, $el := . }}
|
||||
{{ if gt $index 0 }}
|
||||
<span class="separator">•</span>
|
||||
{{ end }}
|
||||
<a href="{{ ( printf "tags/%s/" ( $el | urlize ) ) | relLangURL }}">{{ . }}</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
1
layouts/shortcodes/abbr.html
Normal file
|
@ -0,0 +1 @@
|
|||
<abbr title="{{ .Get "title" }}">{{ .Get "text" }}</abbr>
|
4
layouts/shortcodes/details.html
Normal file
|
@ -0,0 +1,4 @@
|
|||
<details><summary>{{ .Get "title" }}</summary>
|
||||
|
||||
{{ .Inner }}
|
||||
</details>
|
21
layouts/shortcodes/img.html
Normal file
|
@ -0,0 +1,21 @@
|
|||
{{ $img := $.Page.Resources.GetMatch (.Get "src")}}
|
||||
{{ $test := $img.Permalink }}
|
||||
{{ $name_splitted := split $img.RelPermalink "." }}
|
||||
{{ $name_base := index $name_splitted 0 }}
|
||||
<figure {{ with .Get "class" }} class="{{ . }}"{{ end }}>
|
||||
{{ with .Get "link" }}
|
||||
<a href="{{ . }}">
|
||||
{{ end }}
|
||||
<picture>
|
||||
<source srcset="{{$img.RelPermalink}}" type="image/jpg">
|
||||
<img src="{{ $img.RelPermalink }}" alt="{{.Get "alt" }}" />
|
||||
</picture>
|
||||
{{ with .Get "link" }}
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ with .Get "title" }}
|
||||
<figcaption>
|
||||
<p>{{ . }}</p>
|
||||
</figcaption>
|
||||
{{ end }}
|
||||
</figure>
|
18
layouts/shortcodes/quote.html
Normal file
|
@ -0,0 +1,18 @@
|
|||
<blockquote {{ with .Get "class" }}class="{{ . }}"{{ end }}{{ with .Get "url" }} cite="{{ . }}" {{ end }}>
|
||||
{{ $s := split (trim .Inner "\t \n") "\n\n" }}
|
||||
{{ if eq ( first 1 $s) ( last 1 $s )}}
|
||||
<p>{{ .Inner | markdownify }}</p>
|
||||
{{ else }}
|
||||
{{ .Inner | markdownify }}
|
||||
{{ end }}
|
||||
{{ if .Get "author" }}
|
||||
<footer>
|
||||
<cite>
|
||||
{{ with .Get "url" }}
|
||||
<a href={{ . }} {{ with $.Get "title"}}title="{{ . }}"{{ end }}>
|
||||
{{ end }}
|
||||
{{ .Get "author" | markdownify }}
|
||||
{{ with .Get "url" }}</a>{{end}}</cite>
|
||||
</footer>
|
||||
{{ end }}
|
||||
</blockquote>
|
8
layouts/shortcodes/tabular.html
Normal file
|
@ -0,0 +1,8 @@
|
|||
<figure class="tabular {{ with .Get "class"}}{{ . }}{{ end }}">
|
||||
{{ .Inner | markdownify }}
|
||||
{{ with .Get "title" }}
|
||||
<figcaption>
|
||||
<p>{{ . }}</p>
|
||||
</figcaption>
|
||||
{{ end }}
|
||||
</figure>
|
670
static/css/style.css
Normal file
|
@ -0,0 +1,670 @@
|
|||
/******************* Constants *******************/
|
||||
:root {
|
||||
--font-color: #EFEFEF;
|
||||
--font-color-em: #8C8C8C;
|
||||
--background-color: #1C1C1C;
|
||||
--background-color-light: #252525;
|
||||
--background-color-dark: #121212;
|
||||
--avatar-background: #B6B6B6;
|
||||
}
|
||||
|
||||
/******************* Page *******************/
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
html {
|
||||
background-color: var(--background-color);
|
||||
font-family: Lato, Helvetica, sans-serif;
|
||||
font-size: medium;
|
||||
color: var(--font-color);
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
html {
|
||||
font-size: large;
|
||||
}
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
p, ul {
|
||||
line-height: 1.6em;
|
||||
}
|
||||
|
||||
/******************* Links *******************/
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: var(--font-color);
|
||||
border-bottom: 1px dotted;
|
||||
transition: box-shadow 0.2s ease, outline-offset 0.2s ease, transform 0.2s ease, background 0.4s ease;
|
||||
}
|
||||
a:visited {
|
||||
color: var(--font-color);
|
||||
}
|
||||
a:hover {
|
||||
outline: 1px solid;
|
||||
outline-offset: .3em;
|
||||
border-bottom: 1px dashed;
|
||||
}
|
||||
a:active {
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
a:focus {
|
||||
outline-offset: .3em;
|
||||
outline: 1px solid;
|
||||
}
|
||||
|
||||
/******************* Wrapper *******************/
|
||||
.wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/******************* Home Page *******************/
|
||||
.centered {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 1em;
|
||||
}
|
||||
|
||||
/******************* Navbar *******************/
|
||||
#navigation {
|
||||
height: 4em;
|
||||
width: 100%;
|
||||
line-height: 4em;
|
||||
}
|
||||
#navigation a {
|
||||
padding: 1em;
|
||||
padding-bottom: 0.75em; /* Pour éviter d'avoir un espace trop grand en bas*/
|
||||
border: none;
|
||||
border-radius: 0.5em;
|
||||
}
|
||||
#navigation a:hover {
|
||||
background-color: var(--font-color);
|
||||
text-decoration: none;
|
||||
color: var(--background-color);
|
||||
}
|
||||
#navigation a:active {
|
||||
color: var(--font-color);
|
||||
border: none;
|
||||
}
|
||||
#navigation a:focus {
|
||||
outline: none;
|
||||
}
|
||||
#navigation .navigation-container {
|
||||
margin: 0 auto;
|
||||
max-width: 90vw;
|
||||
}
|
||||
@media only screen and (max-width: 320px) {
|
||||
#navigation .navigation-container {
|
||||
max-width: 100vw;
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width: 1000px) {
|
||||
#navigation .navigation-container {
|
||||
max-width: 900px;
|
||||
}
|
||||
}
|
||||
#navigation-title {
|
||||
letter-spacing: .1rem;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/******************* Navbar Menu *******************/
|
||||
#menu-toggle {
|
||||
display: none;
|
||||
}
|
||||
#navigation .menu-button {
|
||||
float: right;
|
||||
position:relative;
|
||||
display: none;
|
||||
width: 4em;
|
||||
height: 4em;
|
||||
}
|
||||
#navigation .menu-button-inner {
|
||||
width: 3em;
|
||||
height: 3em;
|
||||
position:relative;
|
||||
top: 0.5em;
|
||||
left: 0.5em;
|
||||
text-align:center
|
||||
}
|
||||
#navigation .menu-button .menu-button-image {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
height: 20px;
|
||||
width: 24px;
|
||||
top: 14px;
|
||||
background-image: url(../svg/bars.svg);
|
||||
background-size: contain;
|
||||
margin: auto;
|
||||
vertical-align: top;
|
||||
}
|
||||
#menu-toggle:checked + .menu-button .menu-button-inner {
|
||||
background-color: var(--link-hover-background);
|
||||
border-radius: 0.5em;
|
||||
transition: background .5s, max-height .35s linear;
|
||||
}
|
||||
#menu-toggle:checked + .menu-button .menu-button-image {
|
||||
opacity: 40%;
|
||||
}
|
||||
#navigation-list {
|
||||
position: absolute;
|
||||
top: 6rem;
|
||||
right: 0;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
max-height: 0;
|
||||
width: 100%;
|
||||
font-size: 1.5em;
|
||||
background-color: var(--background-color);
|
||||
border-top: solid 2px var(--font-color);
|
||||
border-bottom: solid 2px var(--font-color);
|
||||
transition: opacity .5s, max-height .35s linear;
|
||||
padding: 0;
|
||||
}
|
||||
#navigation-list .navigation-item {
|
||||
float: none !important;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
display: block;
|
||||
}
|
||||
#navigation-list .navigation-item,
|
||||
#navigation-list .navigation-item span {
|
||||
line-height: 5rem;
|
||||
}
|
||||
#menu-toggle:checked + label + ul {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
max-height: 100rem;
|
||||
}
|
||||
#navigation .menu-button {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
#navigation-list {
|
||||
position: relative;
|
||||
float: right;
|
||||
top: 0;
|
||||
max-height: none;
|
||||
visibility: visible;
|
||||
opacity: 100;
|
||||
width: auto;
|
||||
border: none;
|
||||
list-style: none;
|
||||
font-size: 1em;
|
||||
margin-top: 0;
|
||||
}
|
||||
#navigation-list .navigation-item {
|
||||
display: inline-block;
|
||||
font-weight: bold;
|
||||
line-height: 4rem;
|
||||
}
|
||||
#navigation-list .navigation-item a,
|
||||
#navigation-list .navigation-item span {
|
||||
line-height: 1rem;
|
||||
}
|
||||
#menu-toggle:checked + label + ul {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
max-height: 100rem;
|
||||
}
|
||||
#navigation .menu-button {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
/******************* Author Infos *******************/
|
||||
#author {
|
||||
text-align: center;
|
||||
}
|
||||
#social {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
#avatar img {
|
||||
max-width: 120px;
|
||||
border-radius: 40%;
|
||||
background-color: var(--avatar-background);
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
#avatar img {
|
||||
max-width: 200px;
|
||||
}
|
||||
}
|
||||
#social .social-element {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
height: 32px;
|
||||
margin-top: 1em;
|
||||
}
|
||||
#social .social-element a {
|
||||
height: 24px;
|
||||
display: inline-block;
|
||||
margin-left: 1em;
|
||||
margin-right: 1em;
|
||||
border: none;
|
||||
}
|
||||
#social .social-element a:active {
|
||||
outline: 2px solid;
|
||||
}
|
||||
#social .social-icon {
|
||||
height: 100%;
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
#social .social-element a {
|
||||
height: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
/******************* Simple Page *******************/
|
||||
.container {
|
||||
max-width: 90vw;
|
||||
margin: 0 auto;
|
||||
width: 100%;
|
||||
}
|
||||
@media only screen and (min-width: 1000px) {
|
||||
.container {
|
||||
max-width: 900px;
|
||||
}
|
||||
}
|
||||
.page-icon {
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/******************* Error Page *******************/
|
||||
.error_page {
|
||||
width: max-content;
|
||||
}
|
||||
.error_page footer {
|
||||
padding-top: 1em;
|
||||
border-top: 1px solid var(--font-color);
|
||||
}
|
||||
|
||||
/******************* Error Page *******************/
|
||||
#blog-list .list-title,
|
||||
#site-page .site-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
/******************* Articles List *******************/
|
||||
.articles-list {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
.articles-list li {
|
||||
margin: 1em 0;
|
||||
}
|
||||
.articles-list .date {
|
||||
display: block;
|
||||
width: 15em;
|
||||
text-align: left;
|
||||
padding-right: 1.5em;
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
.articles-list .date {
|
||||
display: inline-block;
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
.articles-list .title {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/******************* Paginator *******************/
|
||||
.pagination {
|
||||
padding-left: 0;
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
}
|
||||
.pagination li {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/******************* Article *******************/
|
||||
.container article {
|
||||
margin: 0 1em;
|
||||
}
|
||||
@media only screen and (max-width: 320px) {
|
||||
.container article {
|
||||
margin: 0em;
|
||||
}
|
||||
}
|
||||
/******************* Article Header *******************/
|
||||
.container article .post-title {
|
||||
margin-bottom: 0.3em;
|
||||
}
|
||||
.container article .post-title a:hover {
|
||||
outline: none;
|
||||
}
|
||||
.container article .post-title a:active {
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.post-meta>div {
|
||||
line-height: 2em;
|
||||
}
|
||||
.post-meta .date span {
|
||||
display: inline-block;
|
||||
}
|
||||
.post-meta .posted-on {
|
||||
margin-right: 1em;
|
||||
}
|
||||
.post-meta .categories, .post-meta .tags {
|
||||
display: inline-block;
|
||||
}
|
||||
.post-meta .categories {
|
||||
margin-right: 1em;
|
||||
}
|
||||
.post-meta .header-icon {
|
||||
vertical-align: baseline;
|
||||
margin-right: 0.3em;
|
||||
}
|
||||
.post-header {
|
||||
margin-top: 3.5rem;
|
||||
margin-bottom: 1.8rem;
|
||||
}
|
||||
@media only screen and (max-width: 320px) {
|
||||
.post-header {
|
||||
margin-top: 2rem;
|
||||
margin-bottom: 1.6rem;
|
||||
}
|
||||
}
|
||||
.post-title {
|
||||
font-size: 3rem;
|
||||
margin: 0;
|
||||
}
|
||||
@media only screen and (max-width: 320px) {
|
||||
.post-title {
|
||||
font-size: 2.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
/******************* Article Body *******************/
|
||||
.article-body {
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
.article-body img {
|
||||
max-width: 100%;
|
||||
}
|
||||
.article-body h1 {
|
||||
font-size: 2.55rem;
|
||||
margin: 3.5rem 0 1.8rem;
|
||||
}
|
||||
.article-body h2 {
|
||||
font-size: 2.17rem;
|
||||
margin: 2.98rem 0 1.53rem;
|
||||
}
|
||||
.article-body h3 {
|
||||
font-size: 1.84rem;
|
||||
margin: 2.53rem 0 1.30rem;
|
||||
}
|
||||
.article-body h4 {
|
||||
font-size: 1.57rem;
|
||||
margin: 2.15rem 0 1.11rem;
|
||||
}
|
||||
.article-body h5 {
|
||||
font-size: 1.33rem;
|
||||
margin: 1.83rem 0 0.94rem;
|
||||
}
|
||||
.article-body h6 {
|
||||
font-size: 1.13rem;
|
||||
margin: 1.55rem 0 0.80rem;
|
||||
}
|
||||
@media only screen and (max-width: 320px) {
|
||||
.article-body h1 {
|
||||
font-size: 2.16rem;
|
||||
margin: 2rem 0 1.6rem;
|
||||
}
|
||||
.article-body h2 {
|
||||
font-size: 1.94rem;
|
||||
margin: 1.80rem 0 1.44rem;
|
||||
}
|
||||
.article-body h3 {
|
||||
font-size: 1.75rem;
|
||||
margin: 1.62rem 0 1.30rem;
|
||||
}
|
||||
.article-body h4 {
|
||||
font-size: 1.57rem;
|
||||
margin: 1.46rem 0 1.17rem;
|
||||
}
|
||||
.article-body h5 {
|
||||
font-size: 1.42rem;
|
||||
margin: 1.31rem 0 1.05rem;
|
||||
}
|
||||
.article-body h6 {
|
||||
font-size: 1.28rem;
|
||||
margin: 1.18rem 0 0.94rem;
|
||||
}
|
||||
}
|
||||
|
||||
/******************* Article Footer *******************/
|
||||
.article-footer {
|
||||
font-style: italic;
|
||||
font-size: 0.8rem;
|
||||
margin: 2rem 0;
|
||||
}
|
||||
.article-footer .spacer {
|
||||
display: inline-block;
|
||||
width: 1em;
|
||||
height: 1px;
|
||||
margin: 0 .5em;
|
||||
background-color: var(--font-color);
|
||||
vertical-align: middle;
|
||||
}
|
||||
.article-footer .footer-link {
|
||||
display: block;
|
||||
}
|
||||
.article-footer .footer-link .spacer {
|
||||
display: none;
|
||||
}
|
||||
.article-footer .footer-link .label {
|
||||
display: inline-block;
|
||||
width: 8em;
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
.article-footer .footer-link {
|
||||
display: inline-block;
|
||||
}
|
||||
.article-footer .footer-link .label {
|
||||
width: auto;
|
||||
}
|
||||
.article-footer .footer-link .spacer {
|
||||
display: inline-block !important;
|
||||
}
|
||||
}
|
||||
|
||||
/******************* Article Figure *******************/
|
||||
.article-body figure {
|
||||
margin: 1em 0;
|
||||
display: table;
|
||||
}
|
||||
.article-body figure picture,
|
||||
.article-body figure figcaption {
|
||||
display: table-row;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.article-body figure img {
|
||||
vertical-align: middle;
|
||||
padding-bottom: 0.3em;
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
.article-body figure {
|
||||
margin: 1em 2.5em;
|
||||
}
|
||||
.article-body figure.logo,
|
||||
.article-body figure.inline {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
.article-body figure.logo {
|
||||
display: inline-block;
|
||||
}
|
||||
.article-body figure.inline {
|
||||
display: inline-block;
|
||||
}
|
||||
.article-body figure.logo img {
|
||||
width: 100px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
.article-body figure.border img {
|
||||
padding: 0.3rem;
|
||||
border: 3px solid var(--background-color-light);
|
||||
min-width: 100%;
|
||||
}
|
||||
.article-body figure.border figcaption {
|
||||
background-color: var(--background-color-light);
|
||||
}
|
||||
.article-body figure a {
|
||||
display: block;
|
||||
min-height: 100%;
|
||||
}
|
||||
.article-body figure figcaption p,
|
||||
.article-body figure figcaption h4 {
|
||||
font-style: italic;
|
||||
font-weight: normal;
|
||||
font-size: 0.9rem;
|
||||
margin-top: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
margin-left: 1rem;
|
||||
margin-right: 1rem;
|
||||
}
|
||||
@media only screen and (max-width: 320px) {
|
||||
.article-body .footnotes ol {
|
||||
padding-left: 2em;
|
||||
}
|
||||
}
|
||||
.article-body .separator {
|
||||
margin: 0 0.2em;
|
||||
}
|
||||
/******************* Article Tabular *******************/
|
||||
.article-body .tabular.border table {
|
||||
padding: 0.3rem;
|
||||
border: 3px solid var(--background-color-light);
|
||||
min-width: 100%;
|
||||
}
|
||||
.article-body .tabular td {
|
||||
padding: 0 0.4rem;
|
||||
}
|
||||
.article-body .tabular th {
|
||||
border-bottom: 3px solid var(--background-color-light);
|
||||
}
|
||||
|
||||
/******************* Article Abbreviation *******************/
|
||||
abbr {
|
||||
text-decoration: none;
|
||||
}
|
||||
abbr[title]:after {
|
||||
content: " (" attr(title) ")";
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted var(--font-color);
|
||||
cursor:help;
|
||||
}
|
||||
abbr[title]:after {
|
||||
content: none;
|
||||
}
|
||||
}
|
||||
|
||||
/******************* Article Code *******************/
|
||||
.highlight pre {
|
||||
font-size: 0.8rem;
|
||||
white-space: pre-wrap;
|
||||
padding: 0.3rem;
|
||||
margin-top: 0.5rem;
|
||||
background: repeating-linear-gradient(28deg, #1C1C1C, #1C1C1C 20px, #121212 20px, #121212 40px);
|
||||
}
|
||||
:not(pre)>code {
|
||||
font-size: 1rem;
|
||||
color: var(--font-color-em);
|
||||
}
|
||||
|
||||
/******************* Article Details *******************/
|
||||
details[open] {
|
||||
outline: 1px solid white;
|
||||
outline-offset: .3rem;
|
||||
}
|
||||
details summary {
|
||||
transition: box-shadow 0.2s ease, outline-offset 0.2s ease, transform 0.2s ease;
|
||||
cursor: pointer;
|
||||
padding: 0.3rem;
|
||||
background: repeating-linear-gradient(28deg, #1C1C1C, #1C1C1C 20px, #252525 20px, #252525 40px);
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
details summary {
|
||||
text-decoration: 1px underline dotted;
|
||||
}
|
||||
details summary:hover {
|
||||
text-decoration: 1px underline dashed;
|
||||
}
|
||||
}
|
||||
details summary:after {
|
||||
content: "[touche pour dérouler]";
|
||||
font-size: 0.7rem;
|
||||
margin-left: 0.5em;
|
||||
font-style: italic;
|
||||
}
|
||||
details[open] summary:after {
|
||||
content: "[touche pour enrouler]";
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
details summary:after {
|
||||
content: none;
|
||||
}
|
||||
details[open] summary:after {
|
||||
content: none;
|
||||
}
|
||||
}
|
||||
details[open] summary {
|
||||
background-color: var(--background-color-light);
|
||||
}
|
||||
details summary:hover {
|
||||
outline: 1px solid !important;
|
||||
outline-offset: .3rem;
|
||||
}
|
||||
details summary:focus {
|
||||
outline: none;
|
||||
}
|
||||
details[open] summary:hover {
|
||||
outline: 1px dotted !important;
|
||||
outline-offset: .3rem;
|
||||
}
|
||||
|
||||
/******************* Article Details *******************/
|
||||
.article-body sup {
|
||||
vertical-align: top;
|
||||
position: relative;
|
||||
top: -0.5rem;
|
||||
}
|
||||
|
||||
/******************* Article Blockquote *******************/
|
||||
.bigquote {
|
||||
position: relative;
|
||||
background-color: var(--background-color-light);
|
||||
padding: 1rem;
|
||||
border-radius: 1.5rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
.bigquote p:first-of-type {
|
||||
margin-top: 0;
|
||||
}
|
||||
.bigquote footer {
|
||||
text-align: right;
|
||||
}
|
||||
.bigquote:after {
|
||||
position: absolute;
|
||||
content: "”";
|
||||
color: var(--text-color);
|
||||
font-size: 10rem;
|
||||
line-height: 0;
|
||||
top: 2rem;
|
||||
right: 1rem;
|
||||
font-family: Arial;
|
||||
}
|
1
static/svg/bars.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="13.333"><path d="M16 11.333v1.334a.671.671 0 01-.667.666H.667A.671.671 0 010 12.667v-1.334c0-.364.302-.666.667-.666h14.666c.365 0 .667.302.667.666zM16 6v1.333a.671.671 0 01-.667.667H.667A.671.671 0 010 7.333V6c0-.365.302-.667.667-.667h14.666c.365 0 .667.302.667.667zm0-5.333V2a.671.671 0 01-.667.667H.667A.671.671 0 010 2V.667C0 .302.302 0 .667 0h14.666c.365 0 .667.302.667.667z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 461 B |
1
static/svg/calendar.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="14.857" height="16"><path d="M1.143 14.857h2.571v-2.571H1.143zm3.143 0h2.857v-2.571H4.286zm-3.143-3.143h2.571V8.857H1.143zm3.143 0h2.857V8.857H4.286zM1.143 8.286h2.571V5.714H1.143zm6.571 6.571h2.857v-2.571H7.714zM4.286 8.286h2.857V5.714H4.286zm6.857 6.571h2.571v-2.571h-2.571zm-3.429-3.143h2.857V8.857H7.714zM4.571 4V1.429a.294.294 0 00-.285-.286h-.572a.294.294 0 00-.285.286V4c0 .152.134.286.285.286h.572A.294.294 0 004.57 4zm6.572 7.714h2.571V8.857h-2.571zM7.714 8.286h2.857V5.714H7.714zm3.429 0h2.571V5.714h-2.571zM11.429 4V1.429a.294.294 0 00-.286-.286h-.572a.294.294 0 00-.285.286V4c0 .152.134.286.285.286h.572A.294.294 0 0011.429 4zm3.428-.571v11.428A1.15 1.15 0 0113.714 16H1.143A1.15 1.15 0 010 14.857V3.43a1.15 1.15 0 011.143-1.143h1.143v-.857C2.286.643 2.929 0 3.714 0h.572c.785 0 1.428.643 1.428 1.429v.857h3.429v-.857C9.143.643 9.786 0 10.57 0h.572c.786 0 1.428.643 1.428 1.429v.857h1.143a1.15 1.15 0 011.143 1.143z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 998 B |
1
static/svg/clock.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M9.333 4.333V9A.329.329 0 019 9.333H5.667A.329.329 0 015.333 9v-.667c0-.187.146-.333.334-.333H8V4.333C8 4.146 8.146 4 8.333 4H9c.188 0 .333.146.333.333zM13.667 8A5.673 5.673 0 008 2.333 5.673 5.673 0 002.333 8 5.673 5.673 0 008 13.667 5.673 5.673 0 0013.667 8zM16 8c0 4.417-3.583 8-8 8s-8-3.583-8-8 3.583-8 8-8 8 3.583 8 8z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 419 B |
1
static/svg/envelope.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12.571"><path d="M14.857 11.143V4.286c-.187.214-.393.41-.616.589a122.437 122.437 0 00-3.803 3.018c-.67.562-1.5 1.25-2.43 1.25h-.017c-.928 0-1.759-.688-2.428-1.25a122.437 122.437 0 00-3.804-3.018 4.808 4.808 0 01-.616-.59v6.858c0 .152.134.286.286.286H14.57a.294.294 0 00.286-.286zm0-9.384c0-.223.054-.616-.286-.616H1.43a.294.294 0 00-.286.285c0 1.018.509 1.902 1.312 2.536 1.197.938 2.393 1.884 3.58 2.83C6.51 7.18 7.367 8 7.992 8h.018c.625 0 1.482-.822 1.955-1.205a554.619 554.619 0 013.58-2.83c.581-.456 1.313-1.447 1.313-2.206zM16 1.429v9.714c0 .785-.643 1.428-1.429 1.428H1.43A1.433 1.433 0 010 11.143V1.428C0 .643.643 0 1.429 0H14.57C15.357 0 16 .643 16 1.429z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 747 B |
1
static/svg/facebook.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="8.308" height="16"><path d="M8.308.115v2.539h-1.51c-1.183 0-1.404.567-1.404 1.385v1.817h2.818l-.375 2.846H5.394V16H2.452V8.702H0V5.856h2.452V3.76C2.452 1.327 3.942 0 6.115 0c1.039 0 1.933.077 2.193.115z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 273 B |
1
static/svg/file-text.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="13.714" height="16"><path d="M13.107 3.393c.33.33.607.99.607 1.464v10.286a.857.857 0 01-.857.857h-12A.857.857 0 010 15.143V.857C0 .384.384 0 .857 0h8c.473 0 1.134.277 1.464.607zM9.143 1.214v3.357H12.5a1.137 1.137 0 00-.196-.366L9.509 1.411a1.148 1.148 0 00-.366-.197zm3.428 13.643V5.714H8.857A.857.857 0 018 4.857V1.143H1.143v13.714zM3.43 7.143c0-.16.125-.286.285-.286H10c.16 0 .286.125.286.286v.571c0 .161-.125.286-.286.286H3.714a.282.282 0 01-.285-.286zm6.571 2c.16 0 .286.125.286.286V10c0 .16-.125.286-.286.286H3.714A.282.282 0 013.43 10v-.571c0-.161.125-.286.285-.286zm0 2.286c.16 0 .286.125.286.285v.572c0 .16-.125.285-.286.285H3.714a.282.282 0 01-.285-.285v-.572c0-.16.125-.285.285-.285z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 764 B |
1
static/svg/folder.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="13.539"><path d="M14.77 11.385v-6.77a.923.923 0 00-.924-.923h-6.77a.923.923 0 01-.922-.923v-.615a.923.923 0 00-.923-.923H2.154a.923.923 0 00-.923.923v9.23c0 .51.413.924.923.924h11.692c.51 0 .923-.414.923-.923zM16 4.615v6.77a2.163 2.163 0 01-2.154 2.154H2.154A2.163 2.163 0 010 11.385V2.154C0 .97.971 0 2.154 0H5.23c1.182 0 2.154.971 2.154 2.154v.308h6.461c1.183 0 2.154.97 2.154 2.153z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 468 B |
1
static/svg/gitea.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="9.912"><path d="M2.833 0C2.207 0 1.479.22.916.724c-.564.503-.958 1.29-.912 2.4C.075 4.85.906 5.81 1.873 6.328c.943.505 2.01.598 2.643.615.047.173.16.412.319.688.175.302.406.644.668.97.522.653 1.159 1.248 1.74 1.31h4.76c.747-.055 1.424-.707 2.005-1.632.58-.926 1.065-2.136 1.412-3.34.347-1.203.556-2.4.578-3.305.011-.452-.023-.83-.115-1.106a.842.842 0 00-.186-.331.429.429 0 00-.298-.132h-.004c-2.614.138-4.162.208-5.49.22v3.02l-.414-.206L9.488.286c-1.523 0-2.863-.08-5.411-.22L4.075.064h-.001C3.762.065 3.315.002 2.833 0zm.173 1.337h.087c.17 1.68.447 2.705.987 4.197-.682-.098-1.307-.264-1.788-.602-.506-.355-.862-.897-.974-1.77-.059-.462.016-.928.293-1.271.259-.322.697-.545 1.395-.554zm5.65 1.657c.102 0 .205.023.304.071l.495.24-.355.728a.444.444 0 00-.16.026.444.444 0 00-.267.569.444.444 0 00.073.129l-.612 1.254a.444.444 0 00-.147.026.444.444 0 00-.267.568.444.444 0 00.568.267.444.444 0 00.267-.568.444.444 0 00-.104-.163l.597-1.222a.444.444 0 00.193-.024.444.444 0 00.141-.083c.233.11.418.197.554.272.204.114.276.189.298.271.022.083-.002.24-.117.517-.088.21-.222.485-.396.842a.444.444 0 00-.166.026.444.444 0 00-.268.569.444.444 0 00.568.267.444.444 0 00.268-.568.444.444 0 00-.09-.15c.171-.353.306-.628.4-.854.124-.298.19-.521.133-.736-.057-.215-.232-.354-.463-.483-.153-.085-.34-.172-.57-.28a.444.444 0 00-.024-.178.444.444 0 00-.097-.155l.35-.716 1.933.939a.7.7 0 01.324.937L10.69 8.066a.7.7 0 01-.936.324L7.018 7.062a.7.7 0 01-.324-.937L8.023 3.39a.7.7 0 01.633-.395z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 1.5 KiB |
1
static/svg/key-modern.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M4.873 0a4.868 4.868 0 00-3.437 1.431C-.465 3.341-.481 6.411 1.402 8.3a4.813 4.813 0 004.683 1.22l1.66 1.66 2.162-1.24.405.404-1.202 2.012.405.405 2.012-1.202.405.405-1.202 2.012.405.404 2.012-1.202.405.405-1.202 2.012.404.405h2.675a.57.57 0 00.571-.571v-2.851L9.518 6.096c.448-1.623.044-3.424-1.225-4.687A4.78 4.78 0 004.873 0zM3.62 2.194a1.431 1.431 0 110 2.863 1.431 1.431 0 010-2.863z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 484 B |
1
static/svg/linkedin.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="15.292"><path d="M3.635 4.969v10.323H.198V4.969zm.22-3.188c.01.99-.74 1.781-1.938 1.781h-.021C.74 3.563 0 2.772 0 1.782 0 .77.77 0 1.938 0c1.177 0 1.906.77 1.916 1.781zM16 9.375v5.917h-3.427V9.77c0-1.386-.5-2.334-1.74-2.334-.948 0-1.51.636-1.76 1.25-.083.23-.115.532-.115.844v5.76H5.531c.042-9.354 0-10.322 0-10.322h3.427v1.5h-.02c.447-.708 1.26-1.74 3.114-1.74C14.312 4.73 16 6.21 16 9.375z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 474 B |
1
static/svg/mastodon.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="14.925" height="16"><path d="M14.607 9.592c-.22 1.128-1.965 2.364-3.97 2.603-1.045.125-2.075.24-3.172.19a18.609 18.609 0 01-3.211-.43c0 .175.01.342.032.497.233 1.772 1.757 1.878 3.2 1.927 1.456.05 2.752-.359 2.752-.359l.06 1.317s-1.019.547-2.833.647c-1 .055-2.243-.025-3.69-.408C.637 14.746.099 11.4.015 8.006c-.026-1.008-.01-1.958-.01-2.753 0-3.47 2.274-4.488 2.274-4.488C3.426.238 5.393.017 7.439 0h.05c2.045.017 4.014.238 5.16.765 0 0 2.275 1.017 2.275 4.488 0 0 .028 2.56-.317 4.339zm-2.365-4.07c0-.859-.211-1.548-.658-2.046-.453-.505-1.047-.764-1.783-.764-.852 0-1.497.327-1.924.982l-.415.696-.414-.695c-.427-.656-1.072-.983-1.924-.983-.737 0-1.33.259-1.783.764-.44.505-.658 1.187-.658 2.046v4.203h1.665v-4.08c0-.86.362-1.295 1.085-1.295.8 0 1.202.517 1.202 1.541v2.233H8.29V5.89c0-1.024.4-1.542 1.201-1.542.724 0 1.086.437 1.086 1.297v4.079h1.665V5.522z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 930 B |
1
static/svg/phone.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M16 12.636c0 .41-.182 1.205-.352 1.58-.239.557-.875.92-1.387 1.205-.67.363-1.352.579-2.113.579-1.057 0-2.012-.432-2.978-.784a10.62 10.62 0 01-1.988-.943C5.25 13.079 2.92 10.75 1.727 8.818A10.622 10.622 0 01.784 6.83C.432 5.864 0 4.91 0 3.852 0 3.091.216 2.41.58 1.74.864 1.227 1.227.59 1.784.352 2.16.182 2.954 0 3.364 0c.08 0 .159 0 .238.034.239.079.489.636.603.864.363.647.715 1.306 1.09 1.943.182.295.523.659.523 1.011 0 .693-2.057 1.705-2.057 2.318 0 .307.284.705.444.978 1.147 2.068 2.58 3.5 4.647 4.647.273.16.67.444.978.444.613 0 1.625-2.057 2.318-2.057.352 0 .716.34 1.011.522.636.375 1.296.728 1.943 1.091.228.114.784.364.864.603.034.08.034.159.034.238z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 758 B |
1
static/svg/pixelfed.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M8 16A8 8 0 118 0a8 8 0 010 16zm-.635-6.253h1.467c1.383 0 2.504-1.091 2.504-2.437 0-1.346-1.121-2.437-2.504-2.437H6.714c-.797 0-1.444.63-1.444 1.406v5.472z" fill="#efefef" fill-rule="evenodd"/></svg>
|
After Width: | Height: | Size: 271 B |
1
static/svg/rss.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="15.999"><path d="M4.363 13.817A2.182 2.182 0 110 13.816a2.182 2.182 0 014.364.001zm5.818 1.398a.735.735 0 01-.193.545.691.691 0 01-.534.239H7.92a.718.718 0 01-.716-.66A7.27 7.27 0 00.659 8.796.718.718 0 010 8.079V6.545c0-.205.08-.398.239-.534a.697.697 0 01.488-.193h.057c2.42.193 4.704 1.25 6.42 2.977 1.727 1.716 2.784 4 2.977 6.42zm5.818.023a.692.692 0 01-.205.534.696.696 0 01-.522.227h-1.625a.724.724 0 01-.728-.682C12.544 8.715 7.284 3.454.682 3.068A.721.721 0 010 2.352V.727C0 .523.08.341.227.205A.705.705 0 01.727 0h.034a15.998 15.998 0 0110.534 4.704 15.998 15.998 0 014.704 10.534z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 673 B |
1
static/svg/tag.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M4.731 3.38c0-.75-.602-1.352-1.351-1.352-.75 0-1.352.602-1.352 1.352 0 .75.602 1.351 1.352 1.351.75 0 1.351-.602 1.351-1.351zM16 9.463c0 .359-.148.707-.39.95l-5.186 5.196a1.36 1.36 0 01-1.912 0L.962 8.047C.421 7.52 0 6.495 0 5.745V1.352C0 .612.613 0 1.352 0h4.393c.75 0 1.774.422 2.313.961l7.551 7.54c.243.254.391.603.391.962z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 422 B |
1
static/svg/twitter.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12.995"><path d="M16 1.543a7.05 7.05 0 01-1.645 1.695c.01.142.01.285.01.427 0 4.335-3.299 9.33-9.33 9.33A9.266 9.266 0 010 11.523c.264.03.518.04.792.04a6.567 6.567 0 004.07-1.4 3.284 3.284 0 01-3.065-2.275 3.484 3.484 0 001.482-.06A3.28 3.28 0 01.65 4.609v-.04c.437.243.945.395 1.483.416A3.277 3.277 0 01.67 2.254c0-.61.162-1.168.447-1.655A9.32 9.32 0 007.878 4.03a3.7 3.7 0 01-.081-.75A3.278 3.278 0 0111.077 0c.943 0 1.796.396 2.395 1.036a6.453 6.453 0 002.081-.792 3.27 3.27 0 01-1.441 1.807c.66-.071 1.3-.254 1.888-.508z" fill="#efefef"/></svg>
|
After Width: | Height: | Size: 607 B |
21
theme.toml
Normal file
|
@ -0,0 +1,21 @@
|
|||
# theme.toml template for a Hugo theme
|
||||
# See https://github.com/gohugoio/hugoThemes#themetoml for an example
|
||||
|
||||
name = "Iðunn"
|
||||
license = "MIT"
|
||||
licenselink = "https://git.vulgarisons.info/raghnarok/hugo_idunn/src/branch/master/LICENSE"
|
||||
description = "Simple Hugo theme, inspired from Terrassa but way simplier"
|
||||
homepage = "https://git.vulgarisons.info/raghnarok/hugo_idunn"
|
||||
tags = ["hugo", "simple", "responsive", "no javascript", "no fontawesome", "no google", "company", "clean"]
|
||||
features = ["responsive design", "social links"]
|
||||
min_version = "0.41.0"
|
||||
|
||||
[author]
|
||||
name = "Gregory Trolliet"
|
||||
homepage = "https://trolliet.info"
|
||||
|
||||
# If porting an existing theme
|
||||
[original]
|
||||
name = "Terrassa"
|
||||
homepage = "https://github.com/danielkvist/hugo-terrassa-theme"
|
||||
repo = "https://github.com/danielkvist/hugo-terrassa-theme"
|