Yet another start

This commit is contained in:
Francesco Vezzoli 2022-09-27 22:58:13 +02:00
commit 17b549c3b8
85 changed files with 25171 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
/public/*
!/public/.gitkeep
resources/_gen
node_modules/
hugo_stats.json
.hugo_build.lock

6
archetypes/default.md Normal file
View File

@ -0,0 +1,6 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

45
config.toml Normal file
View File

@ -0,0 +1,45 @@
baseURL = "https://fvezzoli.villavasco.ovh/"
title = "IZ2VTW's board"
copyright = "©2021 Francesco IZ2VTW Vezzoli. This work is licensed under a <a rel=\"license\" href=\"http://creativecommons.org/licenses/by-sa/4.0/\"><img alt=\"CC-BY-SA\" style=\"display:inline-block\" src=\"https://i.creativecommons.org/l/by-sa/4.0/80x15.png\" /></a>"
theme = "cleanwasteland"
#enableGitInfo = true
enableEmoji = true
enableRobotsTXT = true
## Languages
DefaultContentLanguage = "it"
[languages.en]
languageName = "English"
description = "This is a disorderly place to save things: notes and ideas for various project, solutions to my daily problems."
[languages.it]
languageName = "Italiano"
description = "Questo è un luogo disordinato per salvare cose: appunti e idee per vari progetti, soluzioni ai miei problemi quotidiani."
[permalinks]
post = "/:sections/:year/:month/:slug/"
[Params]
editURL = "https://code.villavasco.ovh/fvezzoli/fvezzoli.villavasco.ovh/_edit/master/content/"
commitURL = "https://code.villavasco.ovh/fvezzoli/fvezzoli.villavasco.ovh/commit/"
showReadingTime = true
[Author]
name = "Francesco Vezzoli"
gravatar = "fvezzoli@villavasco.ovh"
# social icons
email = "fvezzoli@villavasco.ovh"
facebook="francescovezzoli85"
github = "fvezzoli"
twitter = "fvezzoli"
mastodon = "https://mastodon.uno/@fvezzoli"
[sitemap]
changefreq = "monthly"
filename = "sitemap.xml"
priority = 0.5
[build]
writeStats = true

12
content/_index.en.md Normal file
View File

@ -0,0 +1,12 @@
---
title: "Personal Home Page"
date: 2022-09-27T22:58:13+02:00
draft: false
---
This small personal space is a collection of different ideas, inspirations and solutions for various projects or problems.
It is in no way meant to be the perfect collection of information and absolute truths, but rather a haphazard collection of what is on my mind or what has come in handy to solve difficulties I have encountered.
So don't expect a place where I will post regularly, but rather on a spot basis to jot down what I have found useful and what might be useful to others as well.
If you want to know more about me go to the [dedicated page]({{< ref "/about" >}} "About Me")

12
content/_index.it.md Normal file
View File

@ -0,0 +1,12 @@
---
title: "Personal Home Page"
date: 2022-09-27T22:58:13+02:00
draft: false
---
Questo piccolo spazio personale è la raccolta di diverse idee, spunti e soluzioni per progetti o problemi vari.
Non vuole essere in nessun modo la raccolta perfetta di informazioni e verità assolute, ma piuttosto una raccolta disordinata di quello che mi passa per la mente o quello che mi è tornato utile per risolvere le difficoltà che ho incontrato.
Non aspettarti quindi un posto in cui pubblicherò regolarmente, ma piuttosto a spot per appuntarmi quello che io ho trovato utile e che potrebbe essere utile anche per altri.
Se vuoi sapere qualcosa in più su di me vai nella [pagina apposita]({{< ref "/about" >}} "About Me")

View File

@ -0,0 +1,10 @@
---
title: "About ME"
date: 2022-09-27T22:58:13+02:00
draft: false
weight: 1000
menu:
main:
---
Here are a few pages about me, maybe they are not useful to you, but I put them.

View File

@ -0,0 +1,10 @@
---
title: "Qualcosa di Me"
date: 2018-09-09T22:55:04+02:00
draft: false
weight: 1000
menu:
main:
---
Qui ci sono qualche pagine su di me, magari non ti sono utili, però le ho messe.

View File

@ -0,0 +1,7 @@
---
title: "The pin board"
date: 2022-09-27T22:58:13+02:00
draft: false
menu:
main:
---

View File

@ -0,0 +1,7 @@
---
title: "The pin board"
date: 2022-09-27T22:58:13+02:00
draft: false
menu:
main:
---

14
content/wiki/_index.en.md Normal file
View File

@ -0,0 +1,14 @@
---
title: "Wiki Pages"
date: 2022-09-27T22:58:13+02:00
draft: false
menu:
main:
---
Here you should find descriptions and material on various projects I am working on.
In this binder you can find everything a little bit: from projects that will never come to life, to those that I thought about but abandoned to (maybe :sweat_smile:) those that I have actually made.
Especially for uncompleted projects you might find a lot of material (notes, photos, sketches, links...) and very little explanation. Those should come as the project progresses.
The idea, however, is to start from the idea and work through the documentation to the realization (hopefully :memo:)

14
content/wiki/_index.it.md Normal file
View File

@ -0,0 +1,14 @@
---
title: "Wiki Pages"
date: 2022-09-27T22:58:13+02:00
draft: false
menu:
main:
---
Qui dovresti trovare descrizioni e materiale su progetti vari che sto portando avanti.
In questo raccoglitore si può trovare di tutto un po': dai progetti che non prenderanno mai vita, a quelli che ho pensato ma ho abbandonato a (forse :sweat_smile:) quelli che ho effettivamente realizzato.
Soprattutto per i progetti non completi potresti trovare tanto materiale (appunti, foto, schizzi, link...) e molte poche spiegazioni. Quelle dovrebbero arrivare man mano il progetto avanza.
L'idea comunque è quella di partire dall'idea per arrivare alla realizzazione passando per la documentazione (speriamo :memo:)

2525
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

29
package.json Normal file
View File

@ -0,0 +1,29 @@
{
"name": "fvezzoli.villavasco.ovh",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "Francesco Vezzoli <fvezzoli@villavasco.ovh>",
"license": "MIT",
"browserslist": [
"last 1 version",
"> 1%",
"maintained node versions",
"not dead"
],
"devDependencies": {
"@fullhuman/postcss-purgecss": "^5.0.0",
"@tailwindcss/aspect-ratio": "^0.4.2",
"@tailwindcss/forms": "^0.5.3",
"@tailwindcss/line-clamp": "^0.4.2",
"@tailwindcss/typography": "^0.5.7",
"autoprefixer": "^10.4.12",
"postcss": "^8.4.17",
"postcss-cli": "^10.0.0",
"tailwindcss": "^3.1.8"
}
}

View File

@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2022 Francesco Vezzoli
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.

View File

@ -0,0 +1,2 @@
+++
+++

View File

@ -0,0 +1,23 @@
const themeDir = __dirname + '/../../';
const purgecss = require('@fullhuman/postcss-purgecss')({
// see https://gohugo.io/hugo-pipes/postprocess/#css-purging-with-postcss
content: [
'./hugo_stats.json'
],
//safelist : [ /type/ ],
defaultExtractor: (content) => {
let els = JSON.parse(content).htmlElements;
return els.tags.concat(els.classes, els.ids);
}
})
module.exports = {
plugins: [
require('tailwindcss')(themeDir + 'assets/css/tailwind.config.js'),
require('autoprefixer')({
path: [themeDir]
}),
...(process.env.HUGO_ENVIRONMENT === 'production' ? [purgecss] : [])
]
}

View File

@ -0,0 +1,124 @@
/* TailwindCSS base styles */
/* see https://tailwindcss.com/docs/functions-and-directives#tailwind */
@tailwind base;
@tailwind components;
@tailwind utilities;
@tailwind variants;
/* put site specific css styles here using the @layer directive */
/* see https://tailwindcss.com/docs/functions-and-directives#layer */
@layer components {
a {
@apply text-blue-700 underline;
}
a:hover {
@apply text-black no-underline;
}
h1 {
@apply font-bold text-4xl pb-3 pt-4;
}
h2 {
@apply font-semibold text-2xl pb-2 pt-4;
}
h3 {
@apply font-semibold text-xl pb-1 pt-3;
}
p {
@apply my-2;
}
ul {
@apply list-disc pl-8;
}
ol {
@apply list-decimal pl-8;
}
}
div:not(.highlight) > pre {
/* purgecss ignore current */
@apply overflow-x-auto border rounded-lg p-2;
}
main.kind-404 {
@apply bg-red-100
}
div#notFoundBox p.notFoundTop {
font-size: 10rem;
}
div#home-content p {
@apply text-justify
}
div.notice-content {
@apply p-2
}
div.notice-box {
@apply border border-2 rounded-lg my-3 border-gray-400 bg-gray-100
}
div.notice-tip {
@apply border-green-400 bg-green-100
}
div.notice-info {
@apply border-blue-400 bg-blue-100
}
div.notice-warning {
@apply border-yellow-500 bg-yellow-100
}
div.notice-attention {
@apply border-red-400 bg-red-100
}
div.notice-title {
@apply bg-gray-400 rounded-t text-white font-bold px-4 py-2
}
div.notice-title-tip {
@apply bg-green-400
}
div.notice-title-info {
@apply bg-blue-400
}
div.notice-title-warning {
@apply bg-yellow-500
}
div.notice-title-attention {
@apply bg-red-400
}
#TableOfContents {
@apply border-2 border-blue-500 rounded-lg
}
#TableOfContents * {
@apply pl-1
}
#TableOfContents li {
@apply list-none text-lg font-bold py-1
}
#TableOfContents>ul>li>ul>li>ul li {
@apply text-base pl-2 font-semibold
}
#TableOfContents>ul>li>ul>li>ul>li>ul li {
@apply text-sm font-normal
}
div.myfigure {
@apply text-center
}
div.myfigure figure {
@apply inline-block border-2 border-gray-400 bg-gray-100 rounded-lg shadow-lg my-3
}
div.myfigure figure img {
@apply p-4
}
div.myfigure figure figcaption {
@apply text-center text-gray-600 p-1 border-t-2 border-gray-400
}
div.myfigure figure figcaption h4 {
@apply font-bold text-lg
}
div.myfigure figure figcaption p.caption {
@apply text-base
}
div.myfigure figure figcaption p.attr {
@apply text-xs text-right m-0 mr-4
}

View File

@ -0,0 +1,17 @@
module.exports = {
content: [
"./themes/**/layouts/**/*.html",
"./content/**/layouts/**/*.html",
"./layouts/**/*.html",
"./content/**/*.html"
],
theme: {
extend: {},
},
plugins: [
require('@tailwindcss/typography'),
require('@tailwindcss/forms'),
require('@tailwindcss/aspect-ratio'),
require('@tailwindcss/line-clamp'),
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,19 @@
/*!
* Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2022 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Free';
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; }
@font-face {
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 400;
font-display: block;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
.far,
.fa-regular {
font-weight: 400; }

View File

@ -0,0 +1,6 @@
/*!
* Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2022 Fonticons, Inc.
*/
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}

View File

@ -0,0 +1,19 @@
/*!
* Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2022 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Free';
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
@font-face {
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 900;
font-display: block;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
.fas,
.fa-solid {
font-weight: 900; }

View File

@ -0,0 +1,6 @@
/*!
* Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2022 Fonticons, Inc.
*/
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}

View File

@ -0,0 +1,635 @@
/*!
* Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2022 Fonticons, Inc.
*/
:root, :host {
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Solid';
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Regular';
--fa-font-light: normal 300 1em/1 'Font Awesome 6 Light';
--fa-font-thin: normal 100 1em/1 'Font Awesome 6 Thin';
--fa-font-duotone: normal 900 1em/1 'Font Awesome 6 Duotone';
--fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 6 Sharp';
--fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; }
svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
overflow: visible;
box-sizing: content-box; }
.svg-inline--fa {
display: var(--fa-display, inline-block);
height: 1em;
overflow: visible;
vertical-align: -.125em; }
.svg-inline--fa.fa-2xs {
vertical-align: 0.1em; }
.svg-inline--fa.fa-xs {
vertical-align: 0em; }
.svg-inline--fa.fa-sm {
vertical-align: -0.07143em; }
.svg-inline--fa.fa-lg {
vertical-align: -0.2em; }
.svg-inline--fa.fa-xl {
vertical-align: -0.25em; }
.svg-inline--fa.fa-2xl {
vertical-align: -0.3125em; }
.svg-inline--fa.fa-pull-left {
margin-right: var(--fa-pull-margin, 0.3em);
width: auto; }
.svg-inline--fa.fa-pull-right {
margin-left: var(--fa-pull-margin, 0.3em);
width: auto; }
.svg-inline--fa.fa-li {
width: var(--fa-li-width, 2em);
top: 0.25em; }
.svg-inline--fa.fa-fw {
width: var(--fa-fw-width, 1.25em); }
.fa-layers svg.svg-inline--fa {
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0; }
.fa-layers-text, .fa-layers-counter {
display: inline-block;
position: absolute;
text-align: center; }
.fa-layers {
display: inline-block;
height: 1em;
position: relative;
text-align: center;
vertical-align: -.125em;
width: 1em; }
.fa-layers svg.svg-inline--fa {
-webkit-transform-origin: center center;
transform-origin: center center; }
.fa-layers-text {
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
-webkit-transform-origin: center center;
transform-origin: center center; }
.fa-layers-counter {
background-color: var(--fa-counter-background-color, #ff253a);
border-radius: var(--fa-counter-border-radius, 1em);
box-sizing: border-box;
color: var(--fa-inverse, #fff);
line-height: var(--fa-counter-line-height, 1);
max-width: var(--fa-counter-max-width, 5em);
min-width: var(--fa-counter-min-width, 1.5em);
overflow: hidden;
padding: var(--fa-counter-padding, 0.25em 0.5em);
right: var(--fa-right, 0);
text-overflow: ellipsis;
top: var(--fa-top, 0);
-webkit-transform: scale(var(--fa-counter-scale, 0.25));
transform: scale(var(--fa-counter-scale, 0.25));
-webkit-transform-origin: top right;
transform-origin: top right; }
.fa-layers-bottom-right {
bottom: var(--fa-bottom, 0);
right: var(--fa-right, 0);
top: auto;
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(var(--fa-layers-scale, 0.25));
-webkit-transform-origin: bottom right;
transform-origin: bottom right; }
.fa-layers-bottom-left {
bottom: var(--fa-bottom, 0);
left: var(--fa-left, 0);
right: auto;
top: auto;
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(var(--fa-layers-scale, 0.25));
-webkit-transform-origin: bottom left;
transform-origin: bottom left; }
.fa-layers-top-right {
top: var(--fa-top, 0);
right: var(--fa-right, 0);
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(var(--fa-layers-scale, 0.25));
-webkit-transform-origin: top right;
transform-origin: top right; }
.fa-layers-top-left {
left: var(--fa-left, 0);
right: auto;
top: var(--fa-top, 0);
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(var(--fa-layers-scale, 0.25));
-webkit-transform-origin: top left;
transform-origin: top left; }
.fa-1x {
font-size: 1em; }
.fa-2x {
font-size: 2em; }
.fa-3x {
font-size: 3em; }
.fa-4x {
font-size: 4em; }
.fa-5x {
font-size: 5em; }
.fa-6x {
font-size: 6em; }
.fa-7x {
font-size: 7em; }
.fa-8x {
font-size: 8em; }
.fa-9x {
font-size: 9em; }
.fa-10x {
font-size: 10em; }
.fa-2xs {
font-size: 0.625em;
line-height: 0.1em;
vertical-align: 0.225em; }
.fa-xs {
font-size: 0.75em;
line-height: 0.08333em;
vertical-align: 0.125em; }
.fa-sm {
font-size: 0.875em;
line-height: 0.07143em;
vertical-align: 0.05357em; }
.fa-lg {
font-size: 1.25em;
line-height: 0.05em;
vertical-align: -0.075em; }
.fa-xl {
font-size: 1.5em;
line-height: 0.04167em;
vertical-align: -0.125em; }
.fa-2xl {
font-size: 2em;
line-height: 0.03125em;
vertical-align: -0.1875em; }
.fa-fw {
text-align: center;
width: 1.25em; }
.fa-ul {
list-style-type: none;
margin-left: var(--fa-li-margin, 2.5em);
padding-left: 0; }
.fa-ul > li {
position: relative; }
.fa-li {
left: calc(var(--fa-li-width, 2em) * -1);
position: absolute;
text-align: center;
width: var(--fa-li-width, 2em);
line-height: inherit; }
.fa-border {
border-color: var(--fa-border-color, #eee);
border-radius: var(--fa-border-radius, 0.1em);
border-style: var(--fa-border-style, solid);
border-width: var(--fa-border-width, 0.08em);
padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
.fa-pull-left {
float: left;
margin-right: var(--fa-pull-margin, 0.3em); }
.fa-pull-right {
float: right;
margin-left: var(--fa-pull-margin, 0.3em); }
.fa-beat {
-webkit-animation-name: fa-beat;
animation-name: fa-beat;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
.fa-bounce {
-webkit-animation-name: fa-bounce;
animation-name: fa-bounce;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
.fa-fade {
-webkit-animation-name: fa-fade;
animation-name: fa-fade;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
.fa-beat-fade {
-webkit-animation-name: fa-beat-fade;
animation-name: fa-beat-fade;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
.fa-flip {
-webkit-animation-name: fa-flip;
animation-name: fa-flip;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
.fa-shake {
-webkit-animation-name: fa-shake;
animation-name: fa-shake;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, linear);
animation-timing-function: var(--fa-animation-timing, linear); }
.fa-spin {
-webkit-animation-name: fa-spin;
animation-name: fa-spin;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 2s);
animation-duration: var(--fa-animation-duration, 2s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, linear);
animation-timing-function: var(--fa-animation-timing, linear); }
.fa-spin-reverse {
--fa-animation-direction: reverse; }
.fa-pulse,
.fa-spin-pulse {
-webkit-animation-name: fa-spin;
animation-name: fa-spin;
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, steps(8));
animation-timing-function: var(--fa-animation-timing, steps(8)); }
@media (prefers-reduced-motion: reduce) {
.fa-beat,
.fa-bounce,
.fa-fade,
.fa-beat-fade,
.fa-flip,
.fa-pulse,
.fa-shake,
.fa-spin,
.fa-spin-pulse {
-webkit-animation-delay: -1ms;
animation-delay: -1ms;
-webkit-animation-duration: 1ms;
animation-duration: 1ms;
-webkit-animation-iteration-count: 1;
animation-iteration-count: 1;
transition-delay: 0s;
transition-duration: 0s; } }
@-webkit-keyframes fa-beat {
0%, 90% {
-webkit-transform: scale(1);
transform: scale(1); }
45% {
-webkit-transform: scale(var(--fa-beat-scale, 1.25));
transform: scale(var(--fa-beat-scale, 1.25)); } }
@keyframes fa-beat {
0%, 90% {
-webkit-transform: scale(1);
transform: scale(1); }
45% {
-webkit-transform: scale(var(--fa-beat-scale, 1.25));
transform: scale(var(--fa-beat-scale, 1.25)); } }
@-webkit-keyframes fa-bounce {
0% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); }
10% {
-webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
30% {
-webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
50% {
-webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
57% {
-webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
64% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); }
100% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); } }
@keyframes fa-bounce {
0% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); }
10% {
-webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
30% {
-webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
50% {
-webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
57% {
-webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
64% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); }
100% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); } }
@-webkit-keyframes fa-fade {
50% {
opacity: var(--fa-fade-opacity, 0.4); } }
@keyframes fa-fade {
50% {
opacity: var(--fa-fade-opacity, 0.4); } }
@-webkit-keyframes fa-beat-fade {
0%, 100% {
opacity: var(--fa-beat-fade-opacity, 0.4);
-webkit-transform: scale(1);
transform: scale(1); }
50% {
opacity: 1;
-webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
@keyframes fa-beat-fade {
0%, 100% {
opacity: var(--fa-beat-fade-opacity, 0.4);
-webkit-transform: scale(1);
transform: scale(1); }
50% {
opacity: 1;
-webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
@-webkit-keyframes fa-flip {
50% {
-webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
@keyframes fa-flip {
50% {
-webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
@-webkit-keyframes fa-shake {
0% {
-webkit-transform: rotate(-15deg);
transform: rotate(-15deg); }
4% {
-webkit-transform: rotate(15deg);
transform: rotate(15deg); }
8%, 24% {
-webkit-transform: rotate(-18deg);
transform: rotate(-18deg); }
12%, 28% {
-webkit-transform: rotate(18deg);
transform: rotate(18deg); }
16% {
-webkit-transform: rotate(-22deg);
transform: rotate(-22deg); }
20% {
-webkit-transform: rotate(22deg);
transform: rotate(22deg); }
32% {
-webkit-transform: rotate(-12deg);
transform: rotate(-12deg); }
36% {
-webkit-transform: rotate(12deg);
transform: rotate(12deg); }
40%, 100% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); } }
@keyframes fa-shake {
0% {
-webkit-transform: rotate(-15deg);
transform: rotate(-15deg); }
4% {
-webkit-transform: rotate(15deg);
transform: rotate(15deg); }
8%, 24% {
-webkit-transform: rotate(-18deg);
transform: rotate(-18deg); }
12%, 28% {
-webkit-transform: rotate(18deg);
transform: rotate(18deg); }
16% {
-webkit-transform: rotate(-22deg);
transform: rotate(-22deg); }
20% {
-webkit-transform: rotate(22deg);
transform: rotate(22deg); }
32% {
-webkit-transform: rotate(-12deg);
transform: rotate(-12deg); }
36% {
-webkit-transform: rotate(12deg);
transform: rotate(12deg); }
40%, 100% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); } }
@-webkit-keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
@keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
.fa-rotate-90 {
-webkit-transform: rotate(90deg);
transform: rotate(90deg); }
.fa-rotate-180 {
-webkit-transform: rotate(180deg);
transform: rotate(180deg); }
.fa-rotate-270 {
-webkit-transform: rotate(270deg);
transform: rotate(270deg); }
.fa-flip-horizontal {
-webkit-transform: scale(-1, 1);
transform: scale(-1, 1); }
.fa-flip-vertical {
-webkit-transform: scale(1, -1);
transform: scale(1, -1); }
.fa-flip-both,
.fa-flip-horizontal.fa-flip-vertical {
-webkit-transform: scale(-1, -1);
transform: scale(-1, -1); }
.fa-rotate-by {
-webkit-transform: rotate(var(--fa-rotate-angle, none));
transform: rotate(var(--fa-rotate-angle, none)); }
.fa-stack {
display: inline-block;
vertical-align: middle;
height: 2em;
position: relative;
width: 2.5em; }
.fa-stack-1x,
.fa-stack-2x {
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0;
z-index: var(--fa-stack-z-index, auto); }
.svg-inline--fa.fa-stack-1x {
height: 1em;
width: 1.25em; }
.svg-inline--fa.fa-stack-2x {
height: 2em;
width: 2.5em; }
.fa-inverse {
color: var(--fa-inverse, #fff); }
.sr-only,
.fa-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0; }
.sr-only-focusable:not(:focus),
.fa-sr-only-focusable:not(:focus) {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0; }
.svg-inline--fa .fa-primary {
fill: var(--fa-primary-color, currentColor);
opacity: var(--fa-primary-opacity, 1); }
.svg-inline--fa .fa-secondary {
fill: var(--fa-secondary-color, currentColor);
opacity: var(--fa-secondary-opacity, 0.4); }
.svg-inline--fa.fa-swap-opacity .fa-primary {
opacity: var(--fa-secondary-opacity, 0.4); }
.svg-inline--fa.fa-swap-opacity .fa-secondary {
opacity: var(--fa-primary-opacity, 1); }
.svg-inline--fa mask .fa-primary,
.svg-inline--fa mask .fa-secondary {
fill: black; }
.fad.fa-inverse,
.fa-duotone.fa-inverse {
color: var(--fa-inverse, #fff); }

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,26 @@
/*!
* Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2022 Fonticons, Inc.
*/
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype");
unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype");
unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; }

View File

@ -0,0 +1,6 @@
/*!
* Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2022 Fonticons, Inc.
*/
@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,22 @@
/*!
* Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2022 Fonticons, Inc.
*/
@font-face {
font-family: 'Font Awesome 5 Brands';
font-display: block;
font-weight: 400;
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
@font-face {
font-family: 'Font Awesome 5 Free';
font-display: block;
font-weight: 900;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
@font-face {
font-family: 'Font Awesome 5 Free';
font-display: block;
font-weight: 400;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }

View File

@ -0,0 +1,6 @@
/*!
* Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2022 Fonticons, Inc.
*/
@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
document.addEventListener('DOMContentLoaded', () => {
// Get all "navbar-burger" elements
const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);
// Check if there are any navbar burgers
if ($navbarBurgers.length > 0) {
// Add a click event on each of them
$navbarBurgers.forEach( el => {
el.addEventListener('click', () => {
const svgOpen = el.querySelector('.is-open');
const svgClosed = el.querySelector('.is-closed');
const targetMenu = document.getElementById(el.dataset.target);
targetMenu.classList.remove('hidden', 'block');
if (svgOpen.getAttribute('visibility') == 'visible')
{
svgOpen.setAttribute('visibility', 'hidden');
svgClosed.setAttribute('visibility', 'visible');
targetMenu.classList.add('hidden');
}
else
{
svgOpen.setAttribute('visibility', 'visible');
svgClosed.setAttribute('visibility', 'hidden');
targetMenu.classList.add('block');
}
});
});
}
});

View File

@ -0,0 +1,41 @@
[[icons]]
id = "email"
url = "mailto:%s"
title = "Email me"
icon = "fas fa-at"
attribute = ""
[[icons]]
id = "facebook"
url = "https://www.facebook.com/%s"
title = "Facebook"
icon = "fab fa-facebook-f"
attribute = ""
[[icons]]
id = "github"
url = "https://github.com/%s"
title = "GitHub"
icon = "fab fa-github"
attribute = ""
[[icons]]
id = "twitter"
url = "https://twitter.com/%s"
title = "Twitter"
icon = "fab fa-twitter"
attribute = ""
[[icons]]
id = "keybase"
url = "https://keybase.io/%s"
title = "Keybase"
icon = "fab fa-keybase"
attribute = ""
[[icons]]
id = "mastodon"
url = "%s"
title = "Mastodon"
icon = "fab fa-mastodon"
attribute = "rel=\"me\""

View File

@ -0,0 +1,38 @@
## ENGLISH LANGUAGE ##
[404]
other = "Non è possibile trovare la pagina richiesta"
[404_link]
other = "Torna alla pagina precedente"
[AuthorGravatar]
other = "Site author avatar"
[translations]
other = "Read site also in: "
[wordCount]
one = "1 word"
other = "{{.Count}} words"
[readingTime]
one = "1 min read"
other = "{{.Count}} min read"
[previousPost]
other = "Previous Post"
[nextPost]
other = "Next Post"
[binder]
other = "Binders project list"
[notebook]
other = "Notebook list"
[discussion]
other = "There is a discussion pages <a href=\"{{ .Permalink }}\">here</a>"
[editThisPage]
other = "Improve this page"

View File

@ -0,0 +1,38 @@
## ITALIAN LANGUAGE ##
[notFoundPage]
other = "Non è possibile trovare la pagina richiesta"
[notFoundPageGoBack]
other = "Torna alla pagina precedente"
[AuthorGravatar]
other = "Avatar dell'autore del sito"
[translations]
other = "Leggi il sito anche in: "
[wordCount]
one = "1 word"
other = "{{.Count}} words"
[readingTime]
one = "1 min read"
other = "{{.Count}} min read"
[previousPost]
other = "Previous Post"
[nextPost]
other = "Next Post"
[binder]
other = "Lista raccoglitori progetti"
[notebook]
other = "Lista quaderni"
[discussion]
other = "C'è una discussione su questa pagina <a href=\"{{ .Permalink }}\">qui</a>"
[editThisPage]
other = "Modifica la pagina"

View File

@ -0,0 +1,7 @@
{{ define "main" }}
<div id="notFoundBox" class="text-center">
<p class="notFoundTop">404</p>
<p class="text-2xl">{{ i18n "notFoundPage" }}</p>
<a href="#" onclick="history.go(-1)">{{ i18n "notFoundPageGoBack" }}</a>
</div>
{{ end }}

View File

@ -0,0 +1,34 @@
<!DOCTYPE html>
<html lang="{{ .Lang }}" prefix="og: https://ogp.me/ns#" class="h-full">
<head>
<meta charset="utf-8">
{{- hugo.Generator -}}
{{- partial "head.html" . -}}
{{- partial "head_custom.html" . -}}
</head>
<body class="flex flex-col h-full">
{{- partial "dev/dev-tools.html" . -}}
<header class="w-full border-b border-grey p-4">
{{- partial "header.html" . -}}
</header>
<main id="content" class="flex-1 container {{ if .IsHome }}max-w-5xl {{ end }}mx-auto p-8 kind-{{ .Kind | lower }}">
{{ if not .IsHome }}
{{ if not .Parent.IsHome }}
{{ partial "breadcrumb.html" . }}
{{ end }}
{{ end }}
{{ block "main" . }}{{ end }}
{{ if not .IsHome }}
{{ if .Content }}
{{ partial "gitinfo.html" . }}
{{ end }}
{{ end }}
</main>
<footer class="w-full text-center border-t border-grey p-2 pin-b text-xs">
{{- block "footer" . }}{{- partial "footer.html" . -}}{{ end -}}
</footer>
<!--{{- partial "footer_scripts.html" . -}}-->
{{- partial "footer_custom.html" . -}}
{{ template "_internal/google_analytics.html" . }}
</body>
</html>

View File

@ -0,0 +1,16 @@
{{ define "main" }}
{{ if .Content }}
{{ partial "list_content.html" . }}
{{ end }}
{{- range $i,$p := .Paginator.Pages -}}
<div class="w-full notice-box notice-info my-5">
<a href="{{ .Permalink }}" class="text-center">
<h2 class="notice-title">{{ .Title }}</h2>
</a>
{{ if .Params.description }}
<div class="m-2">{{ .Params.description }}</div>
{{ end }}
</div>
{{- end -}}
{{ partial "paginator.html" . }}
{{ end }}

View File

@ -0,0 +1,11 @@
{{ define "main" }}
{{- if .Content -}}
<article class="my-2">
<h1 class="py-1">{{ .Title }}</h1>
{{ if .Params.subtitle }}
<h2 class="py-1 text-gray-600">{{ .Params.subtitle }}</h2>
{{ end }}
<div class="border-t pt-5">{{ .Content }}</div>
</article>
{{- end -}}
{{- end -}}

View File

@ -0,0 +1,42 @@
{{ define "main" }}
<div class="">
<figure class="block w-full">
{{ $imgSrc := "images/homeAvatar.jpg" | relURL }}
{{- if .Site.Author.gravatar -}}
{{ $hash := trim .Site.Author.gravatar " " | lower | md5 }}
{{ $imgSrc = delimit (slice "https://www.gravatar.com/avatar/" $hash "?s=256&d=mp") "" }}
{{- else if .Site.Author.avatar -}}
{{ $imgSrc = .Site.Author.avatar }}
{{- end -}}
<img class="rounded-full mx-auto" width="200px" height="200px" src="{{ $imgSrc }}" alt="{{ i18n "AuthorGravatar" }}">
<figcaption class="w-full text-center font-medium text-4xl">{{ .Site.Author.name }}</figcaption>
</figure>
<div class="w-full flex justify-center my-8">
{{- range .Site.Data.cleanwasteland.social.icons -}}
{{- if isset $.Site.Author .id -}}
<a href="{{ printf .url (index $.Site.Author .id) }}" {{ .attribute | safeHTMLAttr }} title="{{ .title }}">
<span class="fa-stack fa-lg">
<i class="fas fa-circle fa-stack-2x"></i>
<i class="{{ .icon }} fa-stack-1x fa-inverse"></i>
</span>
</a>
{{- end -}}
{{- end -}}
</div>
{{ if .IsTranslated }}
<article class="container max-w-2xl my-3 mx-auto p-2 shadow border rounded text-center">
{{ i18n "translations" }} {{ range $i, $lang := .Translations }}{{ if $i }}, {{ end }} <a href="{{ $lang.Permalink }}">{{ $lang.Language.LanguageName }}</a> {{ end }}
</article>
{{ end }}
{{- if or $.Site.Params.description .Content -}}
<article class="container max-w-2xl mx-auto shadow-md border rounded">
{{- if $.Site.Params.description -}}
<div class="text-xl font-medium p-3{{ if and $.Site.Params.description .Content }} bg-gray-100 border-b border-gray{{ end }}">{{ $.Site.Params.description }}</div>
{{- end -}}
{{- if .Content -}}
<div id="home-content" class="p-3">{{ .Content }}</div>
{{- end -}}
</article>
{{- end -}}
</div>
{{ end }}

View File

@ -0,0 +1,20 @@
<nav class="w-full mb-4">
<ol class="list-reset list-none flex text-grey-dark">
{{ template "breadcrumbnav" (dict "p1" . "p2" .) }}
</ol>
</nav>
{{ define "breadcrumbnav" }}
{{- if .p1.Parent -}}
{{ template "breadcrumbnav" (dict "p1" .p1.Parent "p2" .p2 ) }}
<li><span class="mx-2">></span></li>
{{- else if not .p1.IsHome -}}
{{ template "breadcrumbnav" (dict "p1" .p1.Site.Home "p2" .p2 ) }}
{{- end -}}
<li class="{{ if eq .p1 .p2 }}font-bold{{ end }}">
<a href="{{ .p1.RelPermalink }}">{{- if not .p1.IsHome -}}
{{ .p1.Title }}
{{- else -}}
<span class=""><i class="fas fa-home"></i></span>
{{- end -}}</a>
</li>
{{ end }}

View File

@ -0,0 +1,37 @@
{{ if .Site.IsServer }}
<button id="container-menu" onclick="changeContainerVisibility()"
class="w-8 h-8 mb-2 block rounded-full text-gray-700 text-sm bg-gray-200 uppercase pointer-events-auto">
<span>C</span>
</button>
<div id="container-area"
class="fixed inset-0 top-0 -z-50 container mx-auto h-full bg-red-200 bg-opacity-25 pointer-events-none hidden">
<p></p>
</div>
<script>
function setContainerVisibility(data) {
var showContainer = data;
var e = document.querySelector("#container-area");
if (e.classList.contains("hidden") == showContainer) {
e.classList.toggle("hidden");
}
sessionStorage.setItem("showContainer", showContainer);
}
function changeContainerVisibility() {
var e = document.querySelector("#container-area");
var showContainer = e.classList.contains("hidden") ? true : false;
setContainerVisibility(showContainer);
}
function setupContainerIndicator() {
/* load variables from session storage */
var showContainer = sessionStorage.getItem("showContainer") === "true";
setContainerVisibility(showContainer);
}
window.onload = setupContainerIndicator;
</script>
{{ end }}

View File

@ -0,0 +1,7 @@
{{ if .Site.IsServer }}
<div class="fixed top-0 right-0 mt-40 mr-8 z-50">
{{- partial "dev/size-indicator.html" . -}}
{{- partial "dev/container-indicator.html" . -}}
{{- partial "dev/parameters.html" . -}}
</div>
{{ end }}

View File

@ -0,0 +1,47 @@
{{ if .Site.IsServer }}
<button id="grid-menu" onclick="changeGridVisibility()"
class="w-8 h-8 mb-2 block rounded-full text-gray-700 text-sm bg-gray-200 uppercase pointer-events-auto">
<span>G</span>
</button>
<div id="grid-area" class="container w-screen h-screen mx-auto px-8 grid grid-cols-12 gap-4">
<div class="bg-blue-200 bg-opacity-25"></div>
</div>
<script>
const padOptions = ["0", "1", "2", "3", "4", "5", "6", "8", "10", "12", "16", "20", "24", "32", "40", "48", "56", "64"];
const colOptions = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"];
const gapOptions = ["0", "1", "2", "3", "4", "5", "6", "8", "10", "12", "16"];
/* helper function to remove a class attribute from an element */
function removeClassWith(e, part) {
var regx = new RegExp('(^|\\s)\\S*' + part + '\\S*', 'g');
e.className = e.className.replace(regx, '');
}
function setGridVisibility(data) {
var showGrid = data;
var e = document.querySelector("#grid-area");
if (e.classList.contains("hidden") == showGrid) {
e.classList.toggle("hidden");
}
sessionStorage.setItem("showGrid", showGrid);
}
function changeGridVisibility() {
var e = document.querySelector("#grid-area");
var showGrid = e.classList.contains("hidden") ? true : false;
setGridVisibility(showGrid);
}
function setupGridIndicator() {
/* load variables from local storage */
var showGrid = sessionStorage.getItem("showGrid") === "true";
setGridVisibility(showGrid);
}
window.onload = setupGridIndicator;
</script>
{{ end }}

View File

@ -0,0 +1,126 @@
{{ if .Site.IsServer }}
<button id="parameter-menu" onclick="changeParameterVisibility()"
class="w-8 h-8 mb-2 rounded-full text-gray-700 text-sm bg-gray-200 uppercase pointer-events-auto">
<span>P</span>
</button>
<div id="parameter-area"
class="fixed w-full z-50 right-0 bottom-0 h-1/3 p-4 overflow-y-auto scroll-auto scroll-py-4 touch-auto bg-white/[.95] border-y-8 border-white/50 hidden">
<table class="w-full text-left table-auto table-collapse border-gray-200">
<caption class="text-left pb-2">Hugo Variables for the current page.</caption>
<thead>
<tr class="p-2 font-semibold bg-gray-100 border-t ">
<th>Variable</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr class="p-2 border-t">
<td>.Name</td>
<td>{{ printf "%#v" .Name }}</td>
</tr>
<tr class="p-2 border-t">
<td>.Title</td>
<td>{{ printf "%#v" .Title }}</td>
</tr>
<tr class="p-2 border-t">
<td>.Kind</td>
<td>{{ printf "%#v" .Kind }}</td>
</tr>
<tr class="p-2 border-t">
<td>.Type</td>
<td>{{ printf "%#v" .Type }}</td>
</tr>
<tr class="p-2 border-t">
<td>.IsPage</td>
<td>{{ printf "%#v" .IsPage }}</td>
</tr>
<tr class="p-2 border-t">
<td>.IsHome</td>
<td>{{ printf "%#v" .IsHome }}</td>
</tr>
<tr class="p-2 border-t">
<td>.Next</td>
<td>{{ printf "%v" .Next }}</td>
</tr>
<tr class="p-2 border-t">
<td>.Prev</td>
<td>{{ printf "%v" .Prev }}</td>
</tr>
<tr class="p-2 border-t">
<td>.Params</td>
<td>
<table>
{{ range $k,$v := .Params }}
<tr>
<td class="text-right italic pr-2">{{ printf "%#v:" $k }}</td>
<td>{{ printf "%#v" $v }}</td>
</tr>
{{ end }}
</table>
</td>
</tr>
<tr class="p-2 border-t">
<td>.Section</td>
<td>{{ printf "%#v" .Section }}</td>
</tr>
<tr class="p-2 border-t">
<td>.CurrentSection</td>
<td>{{ printf "%v" .CurrentSection }}</td>
</tr>
<tr class="p-2 border-t">
<td>.Pages</td>
<td>
{{ printf "%v" .Pages }}
<table>
{{- range $k,$v := .Pages }}
<tr>
<td class="text-right italic pr-2">{{ printf "%#v:" $k }}</td>
<td>{{ printf "%v" $v }}</td>
</tr>
{{ end -}}
</table>
</td>
</tr>
<tr class="p-2 border-t">
<td>.Resources</td>
<td>{{ printf "%v" .Resources }}</td>
</tr>
<tr class="p-2 border-t">
<td>.File</td>
<td>{{ if .File }}{{ printf "%v" .File }}{{ else}}""{{ end }}</td>
</tr>
<tr class="p-2 border-t">
<td>.File.Dir</td>
<td>{{ if .File }}{{ printf "%#v" .File.Dir }}{{ else}}""{{ end }}</td>
</tr>
</tbody>
</table>
</div>
<script>
function setParameterVisibility(data) {
var showParameter = data;
var e = document.querySelector("#parameter-area");
if (e.classList.contains("hidden") == showParameter) {
e.classList.toggle("hidden");
}
sessionStorage.setItem("showParameter", showParameter);
}
function changeParameterVisibility() {
var e = document.querySelector("#parameter-area");
var showParameter = e.classList.contains("hidden") ? true : false;
setParameterVisibility(showParameter);
}
function setupParameterIndicator() {
/* load variables from session storage */
var showParameter = sessionStorage.getItem("showParameter") === "true";
setParameterVisibility(showParameter);
}
window.onload = setupParameterIndicator;
</script>
{{ end }}

View File

@ -0,0 +1,11 @@
{{ if .Site.IsServer }}
<div id="size-indicator"
class="flex items-center justify-center w-8 h-8 mb-2 text-sm text-gray-700 uppercase bg-gray-200 rounded-full sm:bg-red-200 md:bg-yellow-200 lg:bg-green-200 xl:bg-blue-200 2xl:bg-pink-200">
<span class="block sm:hidden">all</span>
<span class="hidden sm:block md:hidden">sm</span>
<span class="hidden md:block lg:hidden">md</span>
<span class="hidden lg:block xl:hidden">lg</span>
<span class="hidden xl:block 2xl:hidden">xl</span>
<span class="hidden 2xl:block">2xl</span>
</div>
{{ end }}

View File

@ -0,0 +1,8 @@
<p>
{{- if .Site.Copyright -}}
{{ safeHTML .Site.Copyright }}
{{- else -}}
©{{ now.Format "2006" }} {{ $.Site.Author.name }}
{{- end -}}
</p>
<p>Proudly made with <a href="https://gohugo.io" rel="noopener">Hugo {{ hugo.Version }}</a></p>

View File

@ -0,0 +1,4 @@
<!--
If you want to include any custom html just before </body>, put it in /layouts/partials/footer_custom.html
Do not put anything in this file - it's only here so that hugo won't throw an error if /layouts/partials/footer_custom.html doesn't exist.
-->

View File

@ -0,0 +1,6 @@
{{ if .Site.IsServer }}
{{ $script := resources.Get "scripts/fa_5.15.4.js" }}
<script src="{{ $script.Permalink }}"></script>
{{ else }}
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/js/all.min.js" integrity="sha512-Tn2m0TIpgVyTzzvmxLNuqbSJH3JP8jm+Cy3hvHrW7ndTDcJ1w5mBiksqDBb8GpE2ksktFvDB/ykZ0mDpsZj20w==" crossorigin="anonymous"></script>
{{ end }}

View File

@ -0,0 +1,11 @@
<div class="text-right text-xs text-gray-500 mt-10">
{{ $path := "" }}
{{ with .File }}
{{ $path = .Path }}
{{ else }}
{{ $path = .Path }}
{{ end }}
Updated: {{ .Page.Lastmod }} - <a href="{{ $.Site.Params.editURL }}{{ replace $path "\\" "/" }}" target="blank">{{ i18n "editThisPage" }}</a><br/>
Commit: "<i>{{ with .GitInfo }}{{ .Subject }}{{ end }}</i>" [<a href="{{ .Site.Params.commitURL }}{{ with .GitInfo }}{{ .Hash }}{{ end }}" target="blank">{{ with .GitInfo }}{{ .AbbreviatedHash }}{{ end }}</a>]<br/>
By: {{ with .GitInfo }}{{ .AuthorName }}{{ end }} <{{ with .GitInfo }}{{ .AuthorEmail }}{{ end }}>
</div>

View File

@ -0,0 +1,40 @@
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>{{ block "title" . }}{{ .Title }} :: {{ .Site.Title }}{{ end }}</title>
{{ with .Site.Author }}<meta name="author" content="{{ .name }} <{{ .email }}>">{{ end }}
{{ with .Site.Params.description }}<meta name="description" content="{{ . }}">{{ end }}
{{ with .Site.Params.keywords }}<meta name="keywords" content="{{ . }}">{{ end }}
{{ template "_internal/twitter_cards.html" . }}
{{ template "_internal/opengraph.html" . }}
{{ if .Permalink -}}
<base href="{{ .Permalink }}">
<link rel="canonical" href="{{ .Permalink }}">
{{- end }}
<!-- Icon -->
<link rel="icon"
{{ if .Site.Params.favicon }}
href="{{ .Site.Params.favicon | relURL }}"
{{ else }}
href='{{ "/favicon.ico" | relURL }}'
{{ end }}
type="image/x-icon"/>
<!-- Styles -->
{{ $styles := resources.Get "css/styles.css" | postCSS (dict "config" "./assets/css/postcss.config.js") }}
{{ if .Site.IsServer }}
<link rel="stylesheet" href="{{ $styles.RelPermalink }}">
{{ else }}
{{ $styles := $styles| minify | fingerprint | resources.PostProcess }}
<link rel="stylesheet" href="{{ $styles.Permalink }}" integrity="{{ $styles.Data.Integrity }}">
{{ end }}
{{ $styles := resources.Get "fontawesome/css/fontawesome.css" | minify | fingerprint }}
<link rel="stylesheet" href="{{ $styles.Permalink }}" integrity="{{ $styles.Data.Integrity }}">
{{ $styles := resources.Get "fontawesome/css/brands.css" | minify | fingerprint }}
<link rel="stylesheet" href="{{ $styles.Permalink }}" integrity="{{ $styles.Data.Integrity }}">
{{ $styles := resources.Get "fontawesome/css/solid.css" | minify | fingerprint }}
<link rel="stylesheet" href="{{ $styles.Permalink }}" integrity="{{ $styles.Data.Integrity }}">

View File

@ -0,0 +1,4 @@
<!--
If you want to include any custom html just before </head>, put it in /layouts/partials/head_custom.html
Do not put anything in this file - it's only here so that hugo won't throw an error if /layouts/partials/head_custom.html doesn't exist.
-->

View File

@ -0,0 +1,60 @@
<div class="flex items-center justify-between flex-wrap">
<a class="text-xl font-semibold text-black" href="{{ .Site.BaseURL | relLangURL }}">{{ block "logo" . }}{{ .Site.Title }}{{ end }}</a>
{{ if or .Site.Menus.shortcuts .Site.Menus.main }}
{{/* CSS functionality for menu toggle */}}
<style type="text/css">
input#nav-toggle:checked~label#show-button {
display: none;
}
input#nav-toggle:checked~label#hide-button {
display: flex;
}
input#nav-toggle:checked~#nav-menu {
display: block;
}
</style>
<input id="nav-toggle" type=checkbox class="hidden">
<label id="show-button" for="nav-toggle"
class="flex items-center sm:hidden text-gray-500 hover:text-blue-500">
<svg class="fill-current h-4 w-4" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<title>Menu Open</title>
<path d="M0 3h20v2H0V3z m0 6h20v2H0V9z m0 6h20v2H0V0z" />
</svg>
</label>
<label id="hide-button" for="nav-toggle" class="items-center hidden text-gray-700 hover:text-blue-500">
<svg class="fill-current h-4 w-4" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<title>Menu Close</title>
<polygon points="11 9 22 9 22 11 11 11 11 22 9 22 9 11 -2 11 -2 9 9 9 9 -2 11 -2"
transform="rotate(45 10 10)" />
</svg>
</label>
<nav id="nav-menu" class="sm:flex w-full sm:w-auto hidden mt-2 sm:mt-0 sm:space-x-2">
{{ $currentPage := . }}
{{- with .Site.Menus.shortcuts -}}
{{- range sort . "Weight" -}}
{{ template "menu_entry" dict "menuEntry" . "currentPage" $currentPage }}
{{- end -}}
{{- end -}}
{{- range .Site.Menus.main -}}
{{ template "menu_entry" dict "menuEntry" . "currentPage" $currentPage }}
{{- end -}}
{{- if not .IsHome -}}
{{ partial "lang_list.html" . }}
{{- end -}}
</nav>
{{ end }}
</div>
{{- define "menu_entry" -}}
<a class="text-lg sm:text-sm mt-1 block px-2 py-1 sm:mt-0 sm:ml-2 {{if or ($.currentPage.IsMenuCurrent "main" $.menuEntry) ($.currentPage.HasMenuCurrent "main" $.menuEntry) }}font-semibold text-gray-700{{else}}hover:text-gray-700{{ end }}" href="{{ $.menuEntry.URL }}" rel="noopener">
{{- if $.menuEntry.Pre -}}
<span class="icon is-medium"><i class="fa-fw {{ $.menuEntry.Pre }}"></i></span>
{{- end -}}
<span>{{ $.menuEntry.Name }}</span>
</a>
{{- end -}}

View File

@ -0,0 +1,42 @@
{{- if gt (len .Site.Languages) 1 }}
{{ $currentPage := . }}
{{ $.Scratch.Add "langList" (slice .Lang) }}
{{ $.Scratch.Add "pageTran" (slice .) }}
{{ range .Translations }}
{{ $.Scratch.Set "langList" (union ($.Scratch.Get "langList") (slice .Lang)) }}
{{ $.Scratch.Set "pageTran" (union ($.Scratch.Get "pageTran") (slice .)) }}
{{ end }}
<div class="inline-flex sm:text-sm mt-2 sm:mt-0 sm:ml-2">
{{ $.Scratch.Set "langLastIdx" (sub (len $.Site.Home.AllTranslations) 1) }}
{{- range $i, $lang := $.Site.Home.AllTranslations -}}
{{ $url := "#" }}
{{- if in ($.Scratch.Get "langList") $lang.Language.Lang -}}
{{ $translatedContent := where ($.Scratch.Get "pageTran") "Lang" "eq" $lang.Language.Lang }}
{{ $translatedContent := index $translatedContent 0 }}
{{ $url = $translatedContent.RelPermalink }}
{{- end -}}
{{ $color := "bg-transparent text-blue-700" }}
{{ $hoverColor := "hover:bg-blue-700 hover:text-white"}}
{{- if (eq $lang.Language.Lang $currentPage.Lang) -}}
{{ $color = "bg-blue-400 text-white" }}
{{- end -}}
{{ $cursor := "" }}
{{- if eq $url "#" -}}
{{ $cursor = "cursor-not-allowed" }}
{{ $color = "bg-gray-400 text-white" }}
{{- end -}}
{{ $rounded := "border" }}
{{- if (eq ($.Scratch.Get "langLastIdx") $i) -}}
{{ $rounded = "border-r border-t border-b rounded-r" }}
{{- end -}}
{{- if (eq $i 0) -}}
{{ $rounded = "border rounded-l" }}
{{- end -}}
<a href="{{ $url }}">
<button class="{{ $color }} {{ $hoverColor }} font-semibold py-1 px-2 border-blue-700 hover:border-transparent {{ $rounded }} {{ $cursor }}">
{{ $lang.Language.Lang | upper }}
</button>
</a>
{{- end -}}
</div>
{{- end -}}

View File

@ -0,0 +1,6 @@
{{- if .Content -}}
<article class="container mx-auto shadow-md border rounded-lg mb-10">
<h1 class="text-3xl font-bold px-4 py-2 bg-gray-100 border-b border-gray">{{ .Title }}</h1>
<div class="p-3">{{ .Content }}</div>
</article>
{{- end -}}

View File

@ -0,0 +1,32 @@
{{ $pag := $.Paginator }}
{{ if gt $pag.TotalPages 1 }}
<nav class="flex mt-10" role="navigation" aria-label="pagination">
{{ if $pag.HasPrev }}
<div class="flex-auto text-center"><a href="{{ $pag.Prev.URL | relLangURL }}" class="bg-blue-200 rounded-full h-8 w-8 flex items-center justify-center"><i class="fas fa-chevron-left"></i></a></div>
{{ end }}
{{ $.Scratch.Set "__paginator.ellipsed" false }}
{{ if not (eq .Site.Params.pagination.showPageNumbers false) }}
{{ range $pag.Pagers }}
{{ $right := sub .TotalPages .PageNumber }}
{{ $showNumber := or (le .PageNumber 1) (eq $right 0) }}
{{ $showNumber := or $showNumber (and (gt .PageNumber (sub $pag.PageNumber ( $.Site.Params.pagination.pagesBetweenActive | default 3 ))) (lt .PageNumber (add $pag.PageNumber ( $.Site.Params.pagination.pagesBetweenActive | default 3 )))) }}
{{ if $showNumber }}
{{ $.Scratch.Set "__paginator.ellipsed" false }}
{{ $.Scratch.Set "__paginator.shouldEllipse" false }}
{{ else }}
{{ $.Scratch.Set "__paginator.shouldEllipse" (not ($.Scratch.Get "__paginator.ellipsed") ) }}
{{ $.Scratch.Set "__paginator.ellipsed" true }}
{{ end }}
{{ if $showNumber }}
<div class="flex-auto text-center h-8 flex items-center justify-center"><a href="{{ .URL | relLangURL }}" class="{{ if eq . $pag }} font-bold text-gray-500{{ end }}" aria-label="Goto page {{ .PageNumber }}">{{ .PageNumber }}</a></div>
{{ else if ($.Scratch.Get "__paginator.shouldEllipse") }}
<div class="flex-auto text-center h-8 flex items-center justify-center"><span class="">&hellip;</span></div>
{{ end }}
{{ end }}
{{ end }}
{{ if $pag.HasNext }}
<div class="flex-auto text-center"><a href="{{ $pag.Next.URL | relLangURL }}" class="bg-blue-200 rounded-full h-8 w-8 flex items-center justify-center"><i class="fas fa-chevron-right"></i></a></div>
{{ end }}
</nav>
{{ end }}

View File

@ -0,0 +1,22 @@
{{ partial "list_content.html" . }}
{{- range $i,$p := .Paginator.Pages -}}
<div class="my-2 bg-blue{{ if gt $i 0 }} border-blue-200 border-t{{ end }}">
<div class="whitespace-no-wrap text-sm text-gray-500 pt-3"><time datetime="{{ .Date.UTC | dateFormat "2006-01-02T15:04:05Z" }}">{{ .Date | time.Format ":date_long" }}</time></div>
<div class="w-full p-2">
<a href="{{ .Permalink }}" class="">
<h2>{{ .Title }}</h2>
{{ if .Params.subtitle }}
<h3 class="text-sm text-gray-500">{{ .Params.subtitle }}</h3>
{{ end }}
</a>
</div>
{{- with .Params.tags -}}
<div class="w-full flex justify-end py-1">
{{- range . -}}
<a class="bg-blue-100 hover:bg-blue-500 hover:underline hover:text-white text-xs rounded-full py-1 px-2 mr-1" href="{{ $.Site.LanguagePrefix | absURL }}tags/{{ . | urlize }}/">{{ . }}</a>
{{- end -}}
</div>
{{- end -}}
</div>
{{- end -}}
{{ partial "paginator.html" . }}

View File

@ -0,0 +1,34 @@
{{ $wikiPages := where .Pages "Type" "wiki"}}
{{ $discussionPages := first 1 (where .Pages "Type" "post") }}
<article class="">
<h1 class="text-4xl font-bold px-4 py-2 border-b border-gray">{{ .Title }}</h1>
{{ range $discussionPages }}
<span class="text-gray-500 text-sm">{{ i18n "discussion" . | safeHTML }}</span>
{{ end }}
{{ if .Content }}
<div class="p-3">
<aside class="m-0 mb-2 sm:pl-2 sm:float-right">
{{ .TableOfContents }}
</aside>
{{ .Content }}
</div>
{{ end }}
<article>
{{ if $wikiPages }}
<div class="w-full border-blue-400 border-r-2 border-l-2 rounded-lg my-5">
<div class="text-white bg-blue-400 font-bold px-4 py-2 rounded-t text-2xl">
{{ if .Parent.IsHome }}{{ i18n "binder" }}{{ else }}{{ i18n "notebook" }}{{ end }}
</div>
{{- range $i,$p := $wikiPages -}}
<div class="p-2 {{ if gt $i 0 }}border-blue-400 border-t-2{{ end }} hover:bg-blue-200">
<a href="{{ .Permalink }}" class="no-underline">
<h2 class="p-0 pb-1 text-3xl underline">{{ .Title }}</h2>
{{ if .Params.description }}
<div class="text-black">{{ .Params.description }}</div>
{{ end }}
</a>
</div>
{{- end -}}
<div class="bg-blue-400 py-2 rounded-b"></div>
</div>
{{ end }}

View File

@ -0,0 +1,3 @@
{{ define "main" }}
{{ partial "post_list.html" . }}
{{- end -}}

View File

@ -0,0 +1,36 @@
{{ define "main" }}
{{- if .Content -}}
<article class="my-2">
<h1 class="py-1">{{ .Title }}</h1>
{{ if .Params.subtitle }}
<h2 class="py-1 text-gray-600">{{ .Params.subtitle }}</h2>
{{ end }}
{{ if (.Site.Params.showReadingTime | default false ) }}
<span class="text-gray-500 text-xs">{{ i18n "wordCount" .FuzzyWordCount }} - {{ i18n "readingTime" .ReadingTime }}</span>
{{ end }}
<div class="flex flex-col sm:flex-row-reverse items-center border-t pt-2 mb-8">
<div class="text-gray-700 text-center text-sm text-gray-500"><time datetime="{{ dateFormat "2006-01-02T15:04:05Z" .Date.UTC }}">{{ .Date | time.Format ":date_long" }}</time></div>
<div class="text-gray-700 flex-auto block">
{{- with .Params.tags -}}
{{- range . -}}
<a class="bg-blue-100 hover:bg-blue-500 hover:underline hover:text-white text-xs rounded-full py-1 px-2 mr-1" href="{{ $.Site.LanguagePrefix | absURL }}tags/{{ . | urlize }}/">{{ . }}</a>
{{- end -}}
{{- end -}}
</div>
</div>
<div class="">{{ .Content }}</div>
</article>
{{- end -}}
<nav class="py-5 flex relative w-full" role="navigation">
{{ if .PrevInSection }}<a href="{{ .PrevInSection.Permalink }}" title="{{ .PrevInSection.Title }}">{{ end }}
<button class="absolute left-0 inline-block bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-full{{ if not .PrevInSection }} opacity-50 cursor-not-allowed{{ end }}">
<i class="mr-2 fas fa-chevron-left"></i>{{ i18n "previousPost" }}
</button>
{{ if .PrevInSection }}</a>{{ end }}
{{ if .NextInSection }}<a href="{{ .NextInSection.Permalink }}" title="{{ .NextInSection.Title }}">{{ end }}
<button class="absolute right-0 inline-block bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-full{{ if not .NextInSection }} opacity-50 cursor-not-allowed{{ end }}">
{{ i18n "nextPost" }}<i class="ml-2 fas fa-chevron-right"></i>
</button>
{{ if .NextInSection }}</a>{{ end }}
</nav>
{{- end -}}

View File

@ -0,0 +1,49 @@
{{ $.Scratch.Set "imgs" ( split ( .Get "src" ) "," ) }}
{{ $.Scratch.Set "alts" ( split ( .Get "alt" ) "," ) }}
{{ $.Scratch.Set "nums" ( len ( $.Scratch.Get "imgs" ) ) }}
<div class="myfigure {{ with ( $.Scratch.Get "nums" ) }}{{ if gt . 1 }}multi{{ else }}single{{ end }}{{ end }}figure">
<figure>
{{- if .Get "link" -}}
<a href="{{ .Get "link" }}"{{ with .Get "target" }} target="{{ . }}"{{ end }}{{ with .Get "rel" }} rel="{{ . }}"{{ end }}>
{{- end }}
{{ if gt ( $.Scratch.Get "nums" ) 1 -}}
<div class="grid grid-cols-{{- with ( $.Scratch.Get "nums" ) }}{{ if lt . 3 }}{{ . }}{{ else }}1 sm:grid-cols-3{{ end }}{{ end }}">
{{- range $index, $img := ( $.Scratch.Get "imgs" ) -}}
<div><img src="{{ $img }}"
{{- if ( $.Scratch.Get "alts" ) }}
alt="{{ if gt ( len ( $.Scratch.Get "alts" ) ) 1 -}}
{{ with ( $.Scratch.Get "alts" ) }}{{ index . $index }}{{ end }}
{{- else -}}
{{ with ( $.Scratch.Get "alts" ) }}{{ index . 0 }}{{ end }}
{{- end -}}"
{{- end -}}
/> <!-- Closing img tag --></div>
{{- end -}}
</div>
{{- else -}}
<img src="{{ .Get "src" }}"
{{- if or (.Get "alt") (.Get "caption") }}
alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "caption" | markdownify| plainify }}{{ end }}"
{{- end -}}
/> <!-- Closing img tag -->
{{- end -}}
{{- if .Get "link" }}</a>{{ end -}}
{{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}}
<figcaption>
{{ with (.Get "title") -}}
<h4>{{ . }}</h4>
{{- end -}}
{{- if (.Get "caption") -}}
<p class="caption">{{- .Get "caption" | markdownify -}}</p>
{{- end }}
{{- if (.Get "attr") -}}<p class="attr">
{{- with .Get "attrlink" }}
<a href="{{ . }}">
{{- end -}}
{{- .Get "attr" | markdownify -}}
{{- if .Get "attrlink" }}</a>{{ end }}</p>
{{- end }}
</figcaption>
{{- end }}
</figure>
</div>

View File

@ -0,0 +1,31 @@
{{ $.Scratch.Set "title" (.Get 0 | upper ) }}
{{ if (.Get 1) }}
{{ $.Scratch.Set "title" (.Get 1 | upper ) }}
{{ end }}
{{ $.Scratch.Set "icon" "fas fa-pencil-alt" }}
{{ $.Scratch.Set "theme" (.Get 0 | default "notice" | lower ) }}
{{ with (.Get 0) }}
{{ if eq . "info" }}
{{ $.Scratch.Set "icon" "fas fa-info-circle" }}
{{ else if eq . "tip" }}
{{ $.Scratch.Set "icon" "fas fa-lightbulb" }}
{{ else if eq . "warning" }}
{{ $.Scratch.Set "icon" "fas fa-exclamation-circle" }}
{{ else if eq . "attention" }}
{{ $.Scratch.Set "icon" "fas fa-exclamation-triangle" }}
{{ end }}
{{ end }}
<div class="w-full notice-box notice-{{ $.Scratch.Get "theme" }}">
{{- if $.Scratch.Get "title" -}}
<div class="notice-title notice-title-{{ $.Scratch.Get "theme" }}">
{{ $.Scratch.Get "title" }}
</div>
{{- end -}}
<div class="flex items-center notice-content">
<i class="m-2 fa-3x fa-fw {{ $.Scratch.Get "icon" }}"></i>
<div class="m-2">
{{ .Inner | markdownify }}
</div>
</div>
</div>

View File

@ -0,0 +1,3 @@
{{- with $.Page.Resources.GetMatch (.Get 0) -}}
<a href="{{ .Permalink }}">{{ .Title }}</a>
{{- end -}}

View File

@ -0,0 +1,3 @@
{{ define "main" }}
{{ partial "post_list.html" . }}
{{- end -}}

View File

@ -0,0 +1,22 @@
{{ define "main" }}
{{ if not (eq (len $.Site.Taxonomies.tags) 0) }}
{{ $fontUnit := "rem" }}
{{ $largestFontSize := 3 }}
{{ $smallestFontSize := 1.0 }}
{{ $fontSpread := sub $largestFontSize $smallestFontSize }}
{{ $max := add (len (index $.Site.Taxonomies.tags.ByCount 0).Pages) 1 }}
{{ $min := len (index $.Site.Taxonomies.tags.ByCount.Reverse 0).Pages }}
{{ $spread := sub $max $min }}
{{ $fontStep := div $fontSpread $spread }}
<div style="py-5">
{{ range $name, $taxonomy := $.Site.Taxonomies.tags }}
{{ $currentTagCount := len $taxonomy.Pages }}
{{ $currentFontSize := (add $smallestFontSize (mul (sub $currentTagCount $min) $fontStep) ) }}
{{ $count := len $taxonomy.Pages }}
{{ $weigth := div (sub (math.Log $count) (math.Log $min)) (sub (math.Log $max) (math.Log $min)) }}
{{ $currentFontSize := (add $smallestFontSize (mul (sub $largestFontSize $smallestFontSize) $weigth) ) }}
<a href="{{ "/tags/" | relLangURL }}{{ $name | urlize }}/" class="m-1" style="font-size:{{$currentFontSize}}{{$fontUnit}}">{{ $name }}</a>
{{ end }}
</div>
{{ end }}
{{- end -}}

View File

@ -0,0 +1,3 @@
{{ define "main" }}
{{ partial "wiki_page.html" . }}
{{ end }}

View File

@ -0,0 +1,3 @@
{{ define "main" }}
{{ partial "wiki_page.html" . }}
{{ end }}

2525
themes/cleanwasteland/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,29 @@
{
"name": "fvezzoli.villavasco.ovh",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "Francesco Vezzoli <fvezzoli@villavasco.ovh>",
"license": "MIT",
"browserslist": [
"last 1 version",
"> 1%",
"maintained node versions",
"not dead"
],
"devDependencies": {
"@fullhuman/postcss-purgecss": "^5.0.0",
"@tailwindcss/aspect-ratio": "^0.4.2",
"@tailwindcss/forms": "^0.5.3",
"@tailwindcss/line-clamp": "^0.4.2",
"@tailwindcss/typography": "^0.5.7",
"autoprefixer": "^10.4.12",
"postcss": "^8.4.17",
"postcss-cli": "^10.0.0",
"tailwindcss": "^3.1.8"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,21 @@
# theme.toml template for a Hugo theme
# See https://github.com/gohugoio/hugoThemes#themetoml for an example
name = "Cleanwasteland"
license = "MIT"
licenselink = "https://github.com/yourname/yourtheme/blob/master/LICENSE"
description = ""
homepage = "http://example.com/"
tags = []
features = []
min_version = "0.41.0"
[author]
name = ""
homepage = ""
# If porting an existing theme
[original]
name = ""
homepage = ""
repo = ""