Tweaks and formatting with prettier
This commit is contained in:
parent
ef81b60aae
commit
4bdbf2a598
12 changed files with 371 additions and 357 deletions
|
@ -2,32 +2,32 @@ variables:
|
||||||
GIT_SUBMODULE_STRATEGY: recursive
|
GIT_SUBMODULE_STRATEGY: recursive
|
||||||
|
|
||||||
pages:
|
pages:
|
||||||
image: archlinux:latest
|
image: archlinux:latest
|
||||||
interruptible: true
|
interruptible: true
|
||||||
timeout: 5m
|
timeout: 5m
|
||||||
rules:
|
rules:
|
||||||
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH'
|
- if: "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH"
|
||||||
when: always
|
when: always
|
||||||
before_script:
|
before_script:
|
||||||
- pacman --needed --noconfirm --sync --refresh --sysupgrade zola
|
- pacman --needed --noconfirm --sync --refresh --sysupgrade zola
|
||||||
script:
|
script:
|
||||||
- zola --version
|
- zola --version
|
||||||
- zola build
|
- zola build
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- public
|
- public
|
||||||
exclude:
|
exclude:
|
||||||
- public/404.html
|
- public/404.html
|
||||||
|
|
||||||
merge-request-testing:
|
merge-request-testing:
|
||||||
image: archlinux:latest
|
image: archlinux:latest
|
||||||
interruptible: true
|
interruptible: true
|
||||||
timeout: 5m
|
timeout: 5m
|
||||||
rules:
|
rules:
|
||||||
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
||||||
when: always
|
when: always
|
||||||
before_script:
|
before_script:
|
||||||
- pacman --needed --noconfirm --sync --refresh --sysupgrade zola
|
- pacman --needed --noconfirm --sync --refresh --sysupgrade zola
|
||||||
script:
|
script:
|
||||||
- zola --version
|
- zola --version
|
||||||
- zola build
|
- zola build
|
||||||
|
|
|
@ -10,7 +10,7 @@ Hello visitor,
|
||||||
|
|
||||||
I am Jonas (Tobias) Hopusch, usually known online as by my username "jotoho".
|
I am Jonas (Tobias) Hopusch, usually known online as by my username "jotoho".
|
||||||
|
|
||||||
I am male, German, currently <span id="age-display">*javascript failed*</span> years old
|
I am male, German, currently <span id="age-display">_javascript failed_</span> years old
|
||||||
and a student of computer science at the [South Westphalia University of Applied
|
and a student of computer science at the [South Westphalia University of Applied
|
||||||
Sciences](https://fh-swf.de) working towards earning a Bachelor degree.
|
Sciences](https://fh-swf.de) working towards earning a Bachelor degree.
|
||||||
|
|
||||||
|
@ -32,13 +32,13 @@ trouble concretely defining the genres I listen to.
|
||||||
|
|
||||||
### My Desktop-PC
|
### My Desktop-PC
|
||||||
|
|
||||||
|PC Part|Installed Component|
|
| PC Part | Installed Component |
|
||||||
|:-|:-:|
|
| :------------ | :--------------------------------------------------------------------------------------------------------------------------------: |
|
||||||
|CPU|[AMD Ryzen 7 5800X (8 cores, 16 threads)](https://www.amd.com/en/products/cpu/amd-ryzen-7-5800x)|
|
| CPU | [AMD Ryzen 7 5800X (8 cores, 16 threads)](https://www.amd.com/en/products/cpu/amd-ryzen-7-5800x) |
|
||||||
|Motherboard|[ASRock X570M Pro4](https://www.asrock.com/MB/AMD/X570M%20Pro4/)|
|
| Motherboard | [ASRock X570M Pro4](https://www.asrock.com/MB/AMD/X570M%20Pro4/) |
|
||||||
|Graphics Card|[ASUS Dual Radeon RX 6750XT 12GB OC Edition](https://www.asus.com/motherboards-components/graphics-cards/dual/dual-rx6750xt-o12g/)|
|
| Graphics Card | [ASUS Dual Radeon RX 6750XT 12GB OC Edition](https://www.asus.com/motherboards-components/graphics-cards/dual/dual-rx6750xt-o12g/) |
|
||||||
|Memory|20GiB (2*8G+4G) DDR4 2133MHz|
|
| Memory | 20GiB (2\*8G+4G) DDR4 2133MHz |
|
||||||
|Monitors|2 1920x1080 32" 60Hz screens|
|
| Monitors | 2 1920x1080 32" 60Hz screens |
|
||||||
|Storage|1TB SATA-SSD + 1TB SATA-HDD|
|
| Storage | 1TB SATA-SSD + 1TB SATA-HDD |
|
||||||
|
|
||||||
<script style="display: none;" src="/scripts/calcage.js" defer></script>
|
<script style="display: none;" src="/scripts/calcage.js" defer></script>
|
||||||
|
|
|
@ -12,9 +12,9 @@ but hopefully even a list with only the less sensitive profiles and contact info
|
||||||
|
|
||||||
The following list is probably not complete and will change over time.
|
The following list is probably not complete and will change over time.
|
||||||
|
|
||||||
| Service/Protocol | Hyperlink | Notes |
|
| Service/Protocol | Hyperlink | Notes |
|
||||||
|-|-|-|
|
| ------------------ | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| E-Mail | [contact@jotoho.de](mailto:contact@jotoho.de) | [OpenPGP keys here](https://downloads.jotoho.de/openpgp/) and [via WKD](https://datatracker.ietf.org/doc/draft-koch-openpgp-webkey-service/) |
|
| E-Mail | [contact@jotoho.de](mailto:contact@jotoho.de) | [OpenPGP keys here](https://downloads.jotoho.de/openpgp/) and [via WKD](https://datatracker.ietf.org/doc/draft-koch-openpgp-webkey-service/) |
|
||||||
| Mastodon/Fediverse | [@jotoho@ruhr.social](https://ruhr.social/@jotoho) | |
|
| Mastodon/Fediverse | [@jotoho@ruhr.social](https://ruhr.social/@jotoho) | |
|
||||||
| GitLab | [@jotoho](https://gitlab.com/jotoho) | Preferred Git hosting platform |
|
| GitLab | [@jotoho](https://gitlab.com/jotoho) | Preferred Git hosting platform |
|
||||||
| GitHub | [@jotoho](https://github.com/jotoho) | |
|
| GitHub | [@jotoho](https://github.com/jotoho) | |
|
||||||
|
|
|
@ -7,38 +7,41 @@ updated = "2023-03-02T16:57:24+01:00"
|
||||||
|
|
||||||
Besides this website, my domain also has a number of other services/servers running that are set up for learning purposes or for personal use by myself, family and acquaintances. The list only contains services available from the public internet.
|
Besides this website, my domain also has a number of other services/servers running that are set up for learning purposes or for personal use by myself, family and acquaintances. The list only contains services available from the public internet.
|
||||||
|
|
||||||
-----
|
---
|
||||||
|
|
||||||
### Publicly accessible services
|
### Publicly accessible services
|
||||||
|
|
||||||
* [**This website**](https://www.jotoho.de): www.jotoho.de is currently being self-hosted using
|
- [**This website**](https://www.jotoho.de): www.jotoho.de is currently being self-hosted using
|
||||||
[a customized Caddy docker image](https://gitea.jotoho.de/jotoho/site-deployer)
|
[a customized Caddy docker image](https://gitea.jotoho.de/jotoho/site-deployer)
|
||||||
* [**Personal Nextcloud**](https://nextcloud.jotoho.de): This Nextcloud instance is set up for use by myself and those I have invited to store, conveniently access and exchange files and other information.
|
- [**Personal Nextcloud**](https://nextcloud.jotoho.de): This Nextcloud instance is set up for use by myself and those I have invited to store, conveniently access and exchange files and other information.
|
||||||
* [**Forgejo**](https://gitea.jotoho.de): This git server was migrated from Gitea to Forgejo on 2023-01-17 as an emergency measure due to the potentially hostile takeover
|
- [**Forgejo**](https://gitea.jotoho.de): This git server was migrated from Gitea to Forgejo on 2023-01-17 as an emergency measure due to the potentially hostile takeover
|
||||||
of the Gitea project.
|
of the Gitea project.
|
||||||
Account Registration is limited to whitelisted email domains and accounts need to manually be confirmed by me before becoming active.
|
Account Registration is limited to whitelisted email domains and accounts need to manually be confirmed by me before becoming active.
|
||||||
* [**Vaultwarden**](https://bitwarden.jotoho.de): Instance of this Bitwarden server implementation for storing and synchronizing my access credentials
|
- [**Vaultwarden**](https://bitwarden.jotoho.de): Instance of this Bitwarden server implementation for storing and synchronizing my access credentials
|
||||||
and other secrets on my own infrastructure.
|
and other secrets on my own infrastructure.
|
||||||
* [**Caddy public fileserver**](https://downloads.jotoho.de): For holding and serving public files directly via HTTPS without needing to go through Nextcloud.
|
- [**Caddy public fileserver**](https://downloads.jotoho.de): For holding and serving public files directly via HTTPS without needing to go through Nextcloud.
|
||||||
Has increased compatibility for use-cases like embedding images or media on this website.
|
Has increased compatibility for use-cases like embedding images or media on this website.
|
||||||
* [**Vikunja Task Management**](https://tasks.jotoho.de): Online To-Do list and Tasks management. Family and Friends can request accounts to be created for them
|
- [**Vikunja Task Management**](https://tasks.jotoho.de): Online To-Do list and Tasks management. Family and Friends can request accounts to be created for them
|
||||||
in order to be able to share to-do lists.
|
in order to be able to share to-do lists.
|
||||||
It supports CalDAV synchronization with client devices.
|
It supports CalDAV synchronization with client devices.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
-----
|
|
||||||
### Special Purpose Subdomains
|
### Special Purpose Subdomains
|
||||||
|
|
||||||
* **lab.jotoho.de**: Delegated to DigitalOcean Nameservers for quick configuration of droplets and other testing projects hosted there.
|
- **lab.jotoho.de**: Delegated to DigitalOcean Nameservers for quick configuration of droplets and other testing projects hosted there.
|
||||||
Do not expect anything hosted under this subdomain or one of it's subdomains to live for more than a few hours or days.
|
Do not expect anything hosted under this subdomain or one of it's subdomains to live for more than a few hours or days.
|
||||||
Security issues, Anomalies or detected abuse of this subdomain [should be immediately reported to me via email](mailto:security@jotoho.de),
|
Security issues, Anomalies or detected abuse of this subdomain [should be immediately reported to me via email](mailto:security@jotoho.de),
|
||||||
so I can investigate and implement corrective measures, if necessary.
|
so I can investigate and implement corrective measures, if necessary.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
-----
|
|
||||||
### Potential future additions or experiments
|
### Potential future additions or experiments
|
||||||
|
|
||||||
When I bought this domain, it became clear to me how very versatile and useful it can be to have a publicly listed internet namespace so I am always trying to find and learn new ways to put the domain to good use and try out new technologies & server-side software that I view as interesting or useful.
|
When I bought this domain, it became clear to me how very versatile and useful it can be to have a publicly listed internet namespace so I am always trying to find and learn new ways to put the domain to good use and try out new technologies & server-side software that I view as interesting or useful.
|
||||||
|
|
||||||
Things I may set up and play with in the future:
|
Things I may set up and play with in the future:
|
||||||
|
|
||||||
* personal mastodon or activitypub-compatible server
|
- personal mastodon or activitypub-compatible server
|
||||||
* outgoing SMTP server for service notifications
|
- outgoing SMTP server for service notifications
|
||||||
* Apache Guacamole for remote control of devices
|
- Apache Guacamole for remote control of devices
|
||||||
|
|
|
@ -1,200 +1,233 @@
|
||||||
* {
|
* {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
border: none;
|
border: none;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box !important;
|
||||||
overflow-wrap: anywhere;
|
overflow-wrap: anywhere;
|
||||||
}
|
}
|
||||||
|
|
||||||
html, body {
|
html,
|
||||||
max-width: 100%;
|
body {
|
||||||
overflow-x: clip;
|
max-width: 100%;
|
||||||
|
overflow-x: clip;
|
||||||
}
|
}
|
||||||
|
|
||||||
#root {
|
#root {
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
#root > * {
|
#root > * {
|
||||||
flex-grow: 0;
|
flex-grow: 0;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
header, footer {
|
header,
|
||||||
text-align: center;
|
footer {
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
#header-title {
|
#header-title {
|
||||||
display: block;
|
display: block;
|
||||||
padding: 0.5rem 0;
|
padding-top: 0.5rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
footer {
|
footer {
|
||||||
padding-top: 0.5rem;
|
padding-top: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
#header-delimiter {
|
#header-delimiter {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#footer-delimiter {
|
#footer-delimiter {
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.globalnav{
|
.globalnav {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
gap: 2px;
|
gap: 2px;
|
||||||
height: max-content;
|
height: max-content;
|
||||||
}
|
}
|
||||||
|
|
||||||
.globalnav-element {
|
.globalnav-element {
|
||||||
display: block;
|
display: block;
|
||||||
background-color: #ddd;
|
background-color: #ddd;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
flex-basis: 0;
|
flex-basis: 0;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
min-width: fit-content;
|
min-width: fit-content;
|
||||||
padding-top: 0.5rem;
|
padding-top: 0.5rem;
|
||||||
padding-bottom: 0.5rem;
|
padding-bottom: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Code Blocks */
|
/* Code Blocks */
|
||||||
pre {
|
pre {
|
||||||
padding: 0.75rem;
|
display: block;
|
||||||
margin-top: 1.5rem;
|
padding: 0.75rem;
|
||||||
margin-bottom: 1.5rem;
|
margin-top: 1.5rem;
|
||||||
margin-left: auto;
|
margin-bottom: 1.5rem;
|
||||||
margin-right: auto;
|
margin-left: auto;
|
||||||
width: fit-content;
|
margin-right: auto;
|
||||||
overflow-x: auto;
|
width: fit-content;
|
||||||
line-break: strict;
|
max-width: 100%;
|
||||||
|
overflow-x: auto;
|
||||||
|
line-break: strict;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Inline keywords/code */
|
/* Inline keywords/code */
|
||||||
code {
|
code {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
color: green;
|
color: green;
|
||||||
line-break: strict;
|
line-break: strict;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
margin-top: 0.5rem;
|
margin-top: 0.5rem;
|
||||||
margin-bottom: 0.5rem;
|
margin-bottom: 0.5rem;
|
||||||
}
|
|
||||||
|
|
||||||
article {
|
|
||||||
padding: 0.5rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
#mainarticle {
|
#mainarticle {
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
max-width: min(100%, 60rem);
|
max-width: min(100%, 60rem);
|
||||||
margin: 0 auto;
|
margin-left: auto;
|
||||||
flex-grow: 1;
|
margin-right: auto;
|
||||||
|
flex-grow: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#mainarticle h3 {
|
#mainarticle h3 {
|
||||||
margin: 1rem 0;
|
margin-top: 1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
li, ul, ol {
|
ul > li,
|
||||||
margin: 1rem;
|
ol > li {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
li::marker {
|
||||||
|
width: 1rem;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-inline-start: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
border-style: inset;
|
border-style: inset;
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
margin: 0.5rem 0;
|
margin-top: 0.5rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
table {
|
table {
|
||||||
display: block;
|
display: block;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
margin: 1rem auto;
|
margin: 1rem auto;
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr {
|
tr {
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
}
|
}
|
||||||
|
|
||||||
td, th {
|
td,
|
||||||
border-style: solid;
|
th {
|
||||||
border-color: black;
|
border-style: solid;
|
||||||
border-collapse: collapse;
|
border-color: black;
|
||||||
padding: 0.5rem;
|
border-collapse: collapse;
|
||||||
|
padding: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
#licenseimg {
|
#licenseimg {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
height: inherit;
|
height: inherit;
|
||||||
width: auto;
|
width: auto;
|
||||||
display: inline;
|
display: inline;
|
||||||
}
|
|
||||||
|
|
||||||
#article-missinglicense {
|
|
||||||
font-size: small;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#last-article-metadata {
|
#last-article-metadata {
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.visible-article-metadata {
|
||||||
|
display: contents;
|
||||||
|
font-size: small;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-metadata-label {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-missinglicense {
|
||||||
|
font-size: xx-small;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
@media (prefers-color-scheme: dark) {
|
||||||
html {
|
html {
|
||||||
background-color: #111;
|
background-color: #111;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.globalnav-element {
|
.globalnav-element {
|
||||||
background-color: #222;
|
background-color: #222;
|
||||||
}
|
}
|
||||||
|
|
||||||
code {
|
code {
|
||||||
color: lawngreen;
|
color: lawngreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: lightskyblue;
|
color: lightskyblue;
|
||||||
}
|
}
|
||||||
|
|
||||||
table, td, th {
|
table,
|
||||||
border-color: white;
|
td,
|
||||||
}
|
th {
|
||||||
|
border-color: white;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: light) {
|
@media (prefers-color-scheme: light) {
|
||||||
html {
|
html {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
|
|
||||||
.globalnav-element {
|
.globalnav-element {
|
||||||
background-color: #ddd;
|
background-color: #ddd;
|
||||||
}
|
}
|
||||||
|
|
||||||
code {
|
code {
|
||||||
color: green;
|
color: green;
|
||||||
}
|
}
|
||||||
|
|
||||||
table, td, th {
|
table,
|
||||||
border-color: black;
|
td,
|
||||||
}
|
th {
|
||||||
|
border-color: black;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"homepage": "https://gitlab.com/jotoho/mc-testingmod",
|
"homepage": "https://gitlab.com/jotoho/mc-testingmod",
|
||||||
"1.16.5": {
|
"1.16.5": {
|
||||||
"prealpha": "This 'version' has no changelog"
|
"prealpha": "This 'version' has no changelog"
|
||||||
},
|
},
|
||||||
"promos": {
|
"promos": {
|
||||||
"1.16.5-latest": "prealpha"
|
"1.16.5-latest": "prealpha"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +1,19 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
{
|
{
|
||||||
// Month index must be two because counting begins at 0 (for January)
|
// Month index must be two because counting begins at 0 (for January)
|
||||||
const myBirthDate = new Date(2001, 2, 29);
|
const myBirthDate = new Date(2001, 2, 29);
|
||||||
const today = new Date();
|
const today = new Date();
|
||||||
|
|
||||||
let yearsSinceBirth = today.getFullYear() - myBirthDate.getFullYear();
|
let yearsSinceBirth = today.getFullYear() - myBirthDate.getFullYear();
|
||||||
|
|
||||||
// Correct yearsSinceBirth if between New Year and my birthday
|
// Correct yearsSinceBirth if between New Year and my birthday
|
||||||
if (today.getMonth() < myBirthDate.getMonth())
|
if (today.getMonth() < myBirthDate.getMonth()) yearsSinceBirth--;
|
||||||
yearsSinceBirth--;
|
else if (
|
||||||
else if (today.getMonth() == myBirthDate.getMonth()
|
today.getMonth() == myBirthDate.getMonth() &&
|
||||||
&& today.getDate() < myBirthDate.getDate())
|
today.getDate() < myBirthDate.getDate()
|
||||||
yearsSinceBirth--;
|
)
|
||||||
|
yearsSinceBirth--;
|
||||||
|
|
||||||
document.getElementById('age-display').innerText = yearsSinceBirth.toString();
|
document.getElementById("age-display").innerText = yearsSinceBirth.toString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
{
|
{
|
||||||
const copyrightYearElement = document.getElementById("footer-copyrightyear");
|
const copyrightYearElement = document.getElementById("footer-copyrightyear");
|
||||||
|
|
||||||
if (copyrightYearElement) {
|
if (copyrightYearElement) {
|
||||||
const currentYearAsStr = new Date().getFullYear().toString();
|
const currentYearAsStr = new Date().getFullYear().toString();
|
||||||
|
|
||||||
copyrightYearElement.innerText = currentYearAsStr;
|
copyrightYearElement.innerText = currentYearAsStr;
|
||||||
copyrightYearElement.dateTime = currentYearAsStr;
|
copyrightYearElement.dateTime = currentYearAsStr;
|
||||||
}
|
} else
|
||||||
else
|
console.error(
|
||||||
console.error("Could not find the footer entry for the year of the copyright notice.");
|
"Could not find the footer entry for the year of the copyright notice."
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,68 +1,66 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<link
|
<link
|
||||||
type="text/css"
|
type="text/css"
|
||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
href="{{ get_url(path='css/general.css') }}"
|
href="{{ get_url(path='css/general.css') }}"
|
||||||
/>
|
/>
|
||||||
<meta name="color-scheme" content="dark light" />
|
<meta name="color-scheme" content="dark light" />
|
||||||
<meta name="author" content="Jonas Tobias Hopusch" />
|
<meta name="author" content="Jonas Tobias Hopusch" />
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
<meta name="robots" content="all, index, follow" />
|
<meta name="robots" content="all, index, follow" />
|
||||||
<link rel="canonical" href="{{ current_url }}" />
|
<link rel="canonical" href="{{ current_url }}" />
|
||||||
<link
|
<link
|
||||||
rel="alternate"
|
rel="alternate"
|
||||||
type="application/atom+xml"
|
type="application/atom+xml"
|
||||||
href="{{ get_url(path='atom.xml') }}"
|
href="{{ get_url(path='atom.xml') }}"
|
||||||
/>
|
/>
|
||||||
<!--Mastodon account ownership verification-->
|
<!--Mastodon account ownership verification-->
|
||||||
<link rel="me" href="https://ruhr.social/@jotoho" />
|
<link rel="me" href="https://ruhr.social/@jotoho" />
|
||||||
<script defer src="/scripts/updatecopyrightyear.js"></script>
|
<script defer src="/scripts/updatecopyrightyear.js"></script>
|
||||||
<title>jotoho.de - A personal website</title>
|
<title>jotoho.de - A personal website</title>
|
||||||
{% block metadata %} {% endblock %}
|
{% block metadata %} {% endblock %}
|
||||||
</head>
|
</head>
|
||||||
<body id="root">
|
<body id="root">
|
||||||
<header>
|
<header>
|
||||||
<a id="header-title"
|
<a id="header-title" href="{{ config.base_url }}">
|
||||||
href="{{ config.base_url }}">
|
<h1>jotoho.de - My personal website</h1>
|
||||||
<h1>jotoho.de - My personal website</h1>
|
</a>
|
||||||
</a>
|
<nav class="globalnav">
|
||||||
<nav class="globalnav">
|
<!--<a class="globalnav-element" href="{{ get_url(path='@/blog/_index.md') }}"> Blog </a>-->
|
||||||
<!--<a class="globalnav-element" href="{{ get_url(path='@/blog/_index.md') }}"> Blog </a>-->
|
<a
|
||||||
<a
|
class="globalnav-element"
|
||||||
class="globalnav-element"
|
href="{{ get_url(path='@/servers/index.md') }}"
|
||||||
href="{{ get_url(path='@/servers/index.md') }}"
|
>
|
||||||
>
|
Servers
|
||||||
Servers
|
</a>
|
||||||
</a>
|
<a
|
||||||
<a
|
class="globalnav-element"
|
||||||
class="globalnav-element"
|
href="{{ get_url(path='@/profiles/index.md') }}"
|
||||||
href="{{ get_url(path='@/profiles/index.md') }}"
|
>
|
||||||
>
|
Profiles
|
||||||
Profiles
|
</a>
|
||||||
</a>
|
</nav>
|
||||||
</nav>
|
</header>
|
||||||
</header>
|
<hr id="header-delimiter" />
|
||||||
<hr id="header-delimiter" />
|
|
||||||
|
|
||||||
<article id="mainarticle">{% block content %} {% endblock %}</article>
|
<article id="mainarticle">{% block content %} {% endblock %}</article>
|
||||||
|
|
||||||
<hr id="footer-delimiter" />
|
<hr id="footer-delimiter" />
|
||||||
<footer>
|
<footer>
|
||||||
<p>
|
<p>
|
||||||
<!--{% set current_year = now() | date(format="%Y",
|
<!--{% set current_year = now() | date(format="%Y",
|
||||||
timezone="Europe/Berlin") %} -->
|
timezone="Europe/Berlin") %} -->
|
||||||
|
|
||||||
Copyright
|
Copyright
|
||||||
<time id="footer-copyrightyear"
|
<time id="footer-copyrightyear" datetime="{{ current_year }}">
|
||||||
datetime="{{ current_year }}">
|
{{ current_year }}
|
||||||
{{ current_year }}
|
</time>
|
||||||
</time>
|
Jonas Tobias Hopusch (@jotoho)
|
||||||
Jonas Tobias Hopusch (@jotoho)
|
<!--
|
||||||
<!--
|
|
||||||
<br />
|
<br />
|
||||||
Licensed under
|
Licensed under
|
||||||
<a href="https://creativecommons.org/licenses/by-nc-nd/4.0/"
|
<a href="https://creativecommons.org/licenses/by-nc-nd/4.0/"
|
||||||
|
@ -74,26 +72,24 @@
|
||||||
/></a>
|
/></a>
|
||||||
(unless otherwise specified)
|
(unless otherwise specified)
|
||||||
-->
|
-->
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<a href="https://gitea.jotoho.de/jotoho/my-website"
|
<a href="https://gitea.jotoho.de/jotoho/my-website">This page</a>
|
||||||
>This page</a
|
is being served using
|
||||||
>
|
<a rel="noreferer" href="https://caddyserver.com/">Caddy</a>
|
||||||
is being served using
|
and was generated using
|
||||||
<a rel="noreferer" href="https://caddyserver.com/">Caddy</a>
|
<a rel="noreferer" href="https://www.getzola.org/">Zola</a>.
|
||||||
and was generated using
|
<br />
|
||||||
<a rel="noreferer" href="https://www.getzola.org/">Zola</a>.
|
You may contact me via
|
||||||
<br />
|
<a href="mailto:webmaster@jotoho.de">email</a>
|
||||||
You may contact me via
|
regarding any issues with this website.
|
||||||
<a href="mailto:webmaster@jotoho.de">email</a>
|
</p>
|
||||||
regarding any issues with this website.
|
<p>
|
||||||
</p>
|
You can
|
||||||
<p>
|
<a href="https://downloads.jotoho.de/openpgp/"
|
||||||
You can
|
>download my OpenPGP public keys here</a
|
||||||
<a href="https://downloads.jotoho.de/openpgp/"
|
>.
|
||||||
>download my OpenPGP public keys here</a
|
</p>
|
||||||
>.
|
</footer>
|
||||||
</p>
|
</body>
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %} {% block metadata %}
|
||||||
|
<meta
|
||||||
{% block metadata %}
|
name="description"
|
||||||
<meta name="description" content="This is the personal website of Jonas Tobias Hopusch (@jotoho)" />
|
content="This is the personal website of Jonas Tobias Hopusch (@jotoho)"
|
||||||
{% endblock metadata %}
|
/>
|
||||||
|
{% endblock metadata %} {% block content %}
|
||||||
{% block content %}
|
<p>This is some placeholder text because I don't know what to put here, yet.</p>
|
||||||
<p>
|
|
||||||
This is some placeholder text because I don't know what to put here, yet.
|
|
||||||
</p>
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
|
@ -4,58 +4,43 @@
|
||||||
|
|
||||||
{% endblock %} {% block content %}
|
{% endblock %} {% block content %}
|
||||||
<h2>{{ page.title }}</h2>
|
<h2>{{ page.title }}</h2>
|
||||||
{% if page.date and page.date is defined %}
|
<div class="visible-article-metadata">
|
||||||
<p>
|
{% if page.date and page.date is defined %}
|
||||||
<em
|
<p>
|
||||||
><strong>Published on</strong>:
|
<span class="article-metadata-label">First published</span>:
|
||||||
<time datetime="{{page.date}}"
|
<time datetime="{{page.date}}"
|
||||||
>{{ page.date | date(format="%A, %e %B %Y %R %Z",
|
>{{ page.date | date(format="%F %R (%Z)", timezone="Europe/Berlin")
|
||||||
timezone="Europe/Berlin") }}</time
|
}}</time
|
||||||
></em
|
|
||||||
>
|
>
|
||||||
</p>
|
</p>
|
||||||
{% endif %} {% if page.updated and page.updated != page.date %}
|
{% endif %} {% if page.updated and page.updated != page.date %}
|
||||||
<p>
|
<p>
|
||||||
<em
|
<span class="article-metadata-label">Last updated on</span>:
|
||||||
><strong>Last updated on</strong>:
|
<time datetime="{{page.updated}}"
|
||||||
<time datetime="{{page.updated}}"
|
>{{ page.updated | date(format="%F %R (%Z)", timezone="Europe/Berlin")
|
||||||
>{{ page.updated | date(format="%A, %e %B %Y %R %Z",
|
}}</time
|
||||||
timezone="Europe/Berlin") }}</time
|
|
||||||
></em
|
|
||||||
>
|
>
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %} {% if page.extra.author and page.extra.author != "" %}
|
||||||
{% if page.extra.author and page.extra.author != "" %}
|
<p>
|
||||||
<p>
|
<span class="article-metadata-label">Author(s)</span>: {{page.extra.author}}
|
||||||
<em>
|
</p>
|
||||||
<strong>Author(s)</strong>:
|
{% else %}
|
||||||
{{page.extra.author}}
|
<p>
|
||||||
</em>
|
<span class="article-metadata-label">Author</span>: Jonas Tobias Hopusch
|
||||||
</p>
|
</p>
|
||||||
{% else %}
|
{% endif %} {% if page.extra.license and page.extra.license != "" %}
|
||||||
<p>
|
<p id="article-license">
|
||||||
<em>
|
<span class="article-metadata-label"
|
||||||
<strong>Author</strong>:
|
>Article is provided under the following license</span
|
||||||
Jonas Tobias Hopusch
|
>: {{page.extra.license}}
|
||||||
</em>
|
</p>
|
||||||
</p>
|
{% else %}
|
||||||
{% endif %}
|
<p class="article-missinglicense">
|
||||||
{% if page.extra.license and page.extra.license != "" %}
|
No license is granted for this article. All rights reserved.
|
||||||
<p id="article-license">
|
</p>
|
||||||
<em>
|
{% endif %}
|
||||||
<strong>Article is provided under the following license</strong>:
|
</div>
|
||||||
{{page.extra.license}}
|
|
||||||
</em>
|
|
||||||
</p>
|
|
||||||
{% else %}
|
|
||||||
<p id="article-missinglicense">
|
|
||||||
<em>
|
|
||||||
This article is copyright-protected
|
|
||||||
and may not be used or replicated without permission.
|
|
||||||
(All rights reserved)
|
|
||||||
</em>
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
|
||||||
<hr id="last-article-metadata" />
|
<hr id="last-article-metadata" />
|
||||||
<div>{{ page.content | safe }}</div>
|
<div>{{ page.content | safe }}</div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
{% extends "base.html" %} {% block content %}
|
{% extends "base.html" %} {% block content %}
|
||||||
<h2>{{ section.title }}</h2>
|
<h2>{{ section.title }}</h2>
|
||||||
<ul>
|
<ul>
|
||||||
{% for page in section.pages %}
|
{% for page in section.pages %}
|
||||||
<li><a href="{{ page.permalink | safe }}">{{ page.title }}</a></li>
|
<li><a href="{{ page.permalink | safe }}">{{ page.title }}</a></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
<div>
|
<div>{{ section.content | safe }}</div>
|
||||||
{{ section.content | safe }}
|
|
||||||
</div>
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
Loading…
Reference in a new issue