Tweaks and formatting with prettier

This commit is contained in:
Jonas Tobias Hopusch 2023-03-10 15:08:43 +01:00
parent ef81b60aae
commit 4bdbf2a598
Signed by: jotoho
GPG Key ID: 913BDF1196DCF600
12 changed files with 371 additions and 357 deletions

View File

@ -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

View File

@ -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>

View File

@ -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) | |

View File

@ -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

View File

@ -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;
}
} }

View File

@ -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"
} }
} }

View File

@ -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();
} }

View File

@ -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."
);
} }

View File

@ -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>

View File

@ -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 %}

View File

@ -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 %}

View File

@ -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 %}