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
pages:
image: archlinux:latest
interruptible: true
timeout: 5m
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH'
when: always
before_script:
- pacman --needed --noconfirm --sync --refresh --sysupgrade zola
script:
- zola --version
- zola build
artifacts:
paths:
- public
exclude:
- public/404.html
image: archlinux:latest
interruptible: true
timeout: 5m
rules:
- if: "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH"
when: always
before_script:
- pacman --needed --noconfirm --sync --refresh --sysupgrade zola
script:
- zola --version
- zola build
artifacts:
paths:
- public
exclude:
- public/404.html
merge-request-testing:
image: archlinux:latest
interruptible: true
timeout: 5m
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: always
before_script:
- pacman --needed --noconfirm --sync --refresh --sysupgrade zola
script:
- zola --version
- zola build
image: archlinux:latest
interruptible: true
timeout: 5m
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: always
before_script:
- pacman --needed --noconfirm --sync --refresh --sysupgrade zola
script:
- zola --version
- 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 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
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
|PC Part|Installed Component|
|:-|:-:|
|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/)|
|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|
|Monitors|2 1920x1080 32" 60Hz screens|
|Storage|1TB SATA-SSD + 1TB SATA-HDD|
| PC Part | Installed Component |
| :------------ | :--------------------------------------------------------------------------------------------------------------------------------: |
| 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/) |
| 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 |
| Monitors | 2 1920x1080 32" 60Hz screens |
| Storage | 1TB SATA-SSD + 1TB SATA-HDD |
<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.
| 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/) |
| Mastodon/Fediverse | [@jotoho@ruhr.social](https://ruhr.social/@jotoho) | |
| GitLab | [@jotoho](https://gitlab.com/jotoho) | Preferred Git hosting platform |
| GitHub | [@jotoho](https://github.com/jotoho) | |
| 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/) |
| Mastodon/Fediverse | [@jotoho@ruhr.social](https://ruhr.social/@jotoho) | |
| GitLab | [@jotoho](https://gitlab.com/jotoho) | Preferred Git hosting platform |
| 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.
-----
---
### Publicly accessible services
* [**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)
* [**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
of the Gitea project.
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
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.
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
in order to be able to share to-do lists.
It supports CalDAV synchronization with client devices.
- [**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)
- [**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
of the Gitea project.
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
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.
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
in order to be able to share to-do lists.
It supports CalDAV synchronization with client devices.
---
-----
### Special Purpose Subdomains
* **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.
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.
- **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.
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.
---
-----
### 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.
Things I may set up and play with in the future:
* personal mastodon or activitypub-compatible server
* outgoing SMTP server for service notifications
* Apache Guacamole for remote control of devices
- personal mastodon or activitypub-compatible server
- outgoing SMTP server for service notifications
- Apache Guacamole for remote control of devices

View file

@ -1,200 +1,233 @@
* {
padding: 0;
margin: 0;
border: none;
border-collapse: collapse;
box-sizing: border-box;
overflow-wrap: anywhere;
padding: 0;
margin: 0;
border: none;
border-collapse: collapse;
box-sizing: border-box !important;
overflow-wrap: anywhere;
}
html, body {
max-width: 100%;
overflow-x: clip;
html,
body {
max-width: 100%;
overflow-x: clip;
}
#root {
font-family: monospace;
display: flex;
flex-direction: column;
flex-wrap: nowrap;
min-height: 100vh;
font-family: monospace;
display: flex;
flex-direction: column;
flex-wrap: nowrap;
min-height: 100vh;
}
#root > * {
flex-grow: 0;
flex-shrink: 0;
flex-grow: 0;
flex-shrink: 0;
}
header, footer {
text-align: center;
header,
footer {
text-align: center;
}
#header-title {
display: block;
padding: 0.5rem 0;
display: block;
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
footer {
padding-top: 0.5rem;
padding-top: 0.5rem;
}
#header-delimiter {
padding-top: 0;
margin-top: 0;
padding-top: 0;
margin-top: 0;
}
#footer-delimiter {
padding-bottom: 0;
margin-bottom: 0;
padding-bottom: 0;
margin-bottom: 0;
}
.globalnav{
display: flex;
flex-wrap: wrap;
flex-direction: row;
text-align: center;
gap: 2px;
height: max-content;
.globalnav {
display: flex;
flex-wrap: wrap;
flex-direction: row;
text-align: center;
gap: 2px;
height: max-content;
}
.globalnav-element {
display: block;
background-color: #ddd;
text-align: center;
flex-basis: 0;
flex-grow: 1;
min-width: fit-content;
padding-top: 0.5rem;
padding-bottom: 0.5rem;
display: block;
background-color: #ddd;
text-align: center;
flex-basis: 0;
flex-grow: 1;
min-width: fit-content;
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
/* Code Blocks */
pre {
padding: 0.75rem;
margin-top: 1.5rem;
margin-bottom: 1.5rem;
margin-left: auto;
margin-right: auto;
width: fit-content;
overflow-x: auto;
line-break: strict;
display: block;
padding: 0.75rem;
margin-top: 1.5rem;
margin-bottom: 1.5rem;
margin-left: auto;
margin-right: auto;
width: fit-content;
max-width: 100%;
overflow-x: auto;
line-break: strict;
}
/* Inline keywords/code */
code {
display: inline-block;
color: green;
line-break: strict;
display: inline-block;
color: green;
line-break: strict;
}
p {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}
article {
padding: 0.5rem;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}
h2 {
margin-bottom: 1rem;
text-align: center;
margin-bottom: 1rem;
text-align: center;
}
#mainarticle {
width: fit-content;
max-width: min(100%, 60rem);
margin: 0 auto;
flex-grow: 1;
width: fit-content;
max-width: min(100%, 60rem);
margin-left: auto;
margin-right: auto;
flex-grow: 1;
}
#mainarticle h3 {
margin: 1rem 0;
margin-top: 1rem;
margin-bottom: 1rem;
}
li, ul, ol {
margin: 1rem;
ul > li,
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 {
border-style: inset;
border-width: 1px;
margin: 0.5rem 0;
border-style: inset;
border-width: 1px;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}
table {
display: block;
border-collapse: collapse;
margin: 1rem auto;
width: fit-content;
max-width: 100%;
overflow-x: auto;
display: block;
border-collapse: collapse;
margin: 1rem auto;
width: fit-content;
max-width: 100%;
overflow-x: auto;
}
tr {
width: fit-content;
width: fit-content;
}
td, th {
border-style: solid;
border-color: black;
border-collapse: collapse;
padding: 0.5rem;
td,
th {
border-style: solid;
border-color: black;
border-collapse: collapse;
padding: 0.5rem;
}
#licenseimg {
vertical-align: middle;
height: inherit;
width: auto;
display: inline;
}
#article-missinglicense {
font-size: small;
vertical-align: middle;
height: inherit;
width: auto;
display: inline;
}
#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) {
html {
background-color: #111;
color: white;
}
html {
background-color: #111;
color: white;
}
.globalnav-element {
background-color: #222;
}
.globalnav-element {
background-color: #222;
}
code {
color: lawngreen;
}
code {
color: lawngreen;
}
a {
color: lightskyblue;
}
a {
color: lightskyblue;
}
table, td, th {
border-color: white;
}
table,
td,
th {
border-color: white;
}
}
@media (prefers-color-scheme: light) {
html {
background-color: white;
color: black;
}
html {
background-color: white;
color: black;
}
.globalnav-element {
background-color: #ddd;
}
.globalnav-element {
background-color: #ddd;
}
code {
color: green;
}
code {
color: green;
}
table, td, th {
border-color: black;
}
table,
td,
th {
border-color: black;
}
}

View file

@ -1,9 +1,9 @@
{
"homepage": "https://gitlab.com/jotoho/mc-testingmod",
"1.16.5": {
"prealpha": "This 'version' has no changelog"
},
"promos": {
"1.16.5-latest": "prealpha"
}
"homepage": "https://gitlab.com/jotoho/mc-testingmod",
"1.16.5": {
"prealpha": "This 'version' has no changelog"
},
"promos": {
"1.16.5-latest": "prealpha"
}
}

View file

@ -1,18 +1,19 @@
"use strict";
{
// Month index must be two because counting begins at 0 (for January)
const myBirthDate = new Date(2001, 2, 29);
const today = new Date();
// Month index must be two because counting begins at 0 (for January)
const myBirthDate = new Date(2001, 2, 29);
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
if (today.getMonth() < myBirthDate.getMonth())
yearsSinceBirth--;
else if (today.getMonth() == myBirthDate.getMonth()
&& today.getDate() < myBirthDate.getDate())
yearsSinceBirth--;
// Correct yearsSinceBirth if between New Year and my birthday
if (today.getMonth() < myBirthDate.getMonth()) yearsSinceBirth--;
else if (
today.getMonth() == myBirthDate.getMonth() &&
today.getDate() < myBirthDate.getDate()
)
yearsSinceBirth--;
document.getElementById('age-display').innerText = yearsSinceBirth.toString();
document.getElementById("age-display").innerText = yearsSinceBirth.toString();
}

View file

@ -1,14 +1,15 @@
"use strict";
{
const copyrightYearElement = document.getElementById("footer-copyrightyear");
const copyrightYearElement = document.getElementById("footer-copyrightyear");
if (copyrightYearElement) {
const currentYearAsStr = new Date().getFullYear().toString();
if (copyrightYearElement) {
const currentYearAsStr = new Date().getFullYear().toString();
copyrightYearElement.innerText = currentYearAsStr;
copyrightYearElement.dateTime = currentYearAsStr;
}
else
console.error("Could not find the footer entry for the year of the copyright notice.");
copyrightYearElement.innerText = currentYearAsStr;
copyrightYearElement.dateTime = currentYearAsStr;
} else
console.error(
"Could not find the footer entry for the year of the copyright notice."
);
}

View file

@ -1,68 +1,66 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
type="text/css"
rel="stylesheet"
href="{{ get_url(path='css/general.css') }}"
/>
<meta name="color-scheme" content="dark light" />
<meta name="author" content="Jonas Tobias Hopusch" />
<meta name="referrer" content="no-referrer" />
<meta name="robots" content="all, index, follow" />
<link rel="canonical" href="{{ current_url }}" />
<link
rel="alternate"
type="application/atom+xml"
href="{{ get_url(path='atom.xml') }}"
/>
<!--Mastodon account ownership verification-->
<link rel="me" href="https://ruhr.social/@jotoho" />
<script defer src="/scripts/updatecopyrightyear.js"></script>
<title>jotoho.de - A personal website</title>
{% block metadata %} {% endblock %}
</head>
<body id="root">
<header>
<a id="header-title"
href="{{ config.base_url }}">
<h1>jotoho.de - My personal website</h1>
</a>
<nav class="globalnav">
<!--<a class="globalnav-element" href="{{ get_url(path='@/blog/_index.md') }}"> Blog </a>-->
<a
class="globalnav-element"
href="{{ get_url(path='@/servers/index.md') }}"
>
Servers
</a>
<a
class="globalnav-element"
href="{{ get_url(path='@/profiles/index.md') }}"
>
Profiles
</a>
</nav>
</header>
<hr id="header-delimiter" />
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
type="text/css"
rel="stylesheet"
href="{{ get_url(path='css/general.css') }}"
/>
<meta name="color-scheme" content="dark light" />
<meta name="author" content="Jonas Tobias Hopusch" />
<meta name="referrer" content="no-referrer" />
<meta name="robots" content="all, index, follow" />
<link rel="canonical" href="{{ current_url }}" />
<link
rel="alternate"
type="application/atom+xml"
href="{{ get_url(path='atom.xml') }}"
/>
<!--Mastodon account ownership verification-->
<link rel="me" href="https://ruhr.social/@jotoho" />
<script defer src="/scripts/updatecopyrightyear.js"></script>
<title>jotoho.de - A personal website</title>
{% block metadata %} {% endblock %}
</head>
<body id="root">
<header>
<a id="header-title" href="{{ config.base_url }}">
<h1>jotoho.de - My personal website</h1>
</a>
<nav class="globalnav">
<!--<a class="globalnav-element" href="{{ get_url(path='@/blog/_index.md') }}"> Blog </a>-->
<a
class="globalnav-element"
href="{{ get_url(path='@/servers/index.md') }}"
>
Servers
</a>
<a
class="globalnav-element"
href="{{ get_url(path='@/profiles/index.md') }}"
>
Profiles
</a>
</nav>
</header>
<hr id="header-delimiter" />
<article id="mainarticle">{% block content %} {% endblock %}</article>
<article id="mainarticle">{% block content %} {% endblock %}</article>
<hr id="footer-delimiter" />
<footer>
<p>
<!--{% set current_year = now() | date(format="%Y",
<hr id="footer-delimiter" />
<footer>
<p>
<!--{% set current_year = now() | date(format="%Y",
timezone="Europe/Berlin") %} -->
Copyright
<time id="footer-copyrightyear"
datetime="{{ current_year }}">
{{ current_year }}
</time>
Jonas Tobias Hopusch (@jotoho)
<!--
Copyright
<time id="footer-copyrightyear" datetime="{{ current_year }}">
{{ current_year }}
</time>
Jonas Tobias Hopusch (@jotoho)
<!--
<br />
Licensed under
<a href="https://creativecommons.org/licenses/by-nc-nd/4.0/"
@ -74,26 +72,24 @@
/></a>
(unless otherwise specified)
-->
</p>
<p>
<a href="https://gitea.jotoho.de/jotoho/my-website"
>This page</a
>
is being served using
<a rel="noreferer" href="https://caddyserver.com/">Caddy</a>
and was generated using
<a rel="noreferer" href="https://www.getzola.org/">Zola</a>.
<br />
You may contact me via
<a href="mailto:webmaster@jotoho.de">email</a>
regarding any issues with this website.
</p>
<p>
You can
<a href="https://downloads.jotoho.de/openpgp/"
>download my OpenPGP public keys here</a
>.
</p>
</footer>
</body>
</p>
<p>
<a href="https://gitea.jotoho.de/jotoho/my-website">This page</a>
is being served using
<a rel="noreferer" href="https://caddyserver.com/">Caddy</a>
and was generated using
<a rel="noreferer" href="https://www.getzola.org/">Zola</a>.
<br />
You may contact me via
<a href="mailto:webmaster@jotoho.de">email</a>
regarding any issues with this website.
</p>
<p>
You can
<a href="https://downloads.jotoho.de/openpgp/"
>download my OpenPGP public keys here</a
>.
</p>
</footer>
</body>
</html>

View file

@ -1,11 +1,8 @@
{% extends "base.html" %}
{% block metadata %}
<meta name="description" content="This is the personal website of Jonas Tobias Hopusch (@jotoho)" />
{% endblock metadata %}
{% block content %}
<p>
This is some placeholder text because I don't know what to put here, yet.
</p>
{% extends "base.html" %} {% block metadata %}
<meta
name="description"
content="This is the personal website of Jonas Tobias Hopusch (@jotoho)"
/>
{% endblock metadata %} {% block content %}
<p>This is some placeholder text because I don't know what to put here, yet.</p>
{% endblock content %}

View file

@ -4,58 +4,43 @@
{% endblock %} {% block content %}
<h2>{{ page.title }}</h2>
{% if page.date and page.date is defined %}
<p>
<em
><strong>Published on</strong>:
<time datetime="{{page.date}}"
>{{ page.date | date(format="%A, %e %B %Y %R %Z",
timezone="Europe/Berlin") }}</time
></em
<div class="visible-article-metadata">
{% if page.date and page.date is defined %}
<p>
<span class="article-metadata-label">First published</span>:
<time datetime="{{page.date}}"
>{{ page.date | date(format="%F %R (%Z)", timezone="Europe/Berlin")
}}</time
>
</p>
{% endif %} {% if page.updated and page.updated != page.date %}
<p>
<em
><strong>Last updated on</strong>:
<time datetime="{{page.updated}}"
>{{ page.updated | date(format="%A, %e %B %Y %R %Z",
timezone="Europe/Berlin") }}</time
></em
</p>
{% endif %} {% if page.updated and page.updated != page.date %}
<p>
<span class="article-metadata-label">Last updated on</span>:
<time datetime="{{page.updated}}"
>{{ page.updated | date(format="%F %R (%Z)", timezone="Europe/Berlin")
}}</time
>
</p>
{% endif %}
{% if page.extra.author and page.extra.author != "" %}
<p>
<em>
<strong>Author(s)</strong>:
{{page.extra.author}}
</em>
</p>
{% else %}
<p>
<em>
<strong>Author</strong>:
Jonas Tobias Hopusch
</em>
</p>
{% endif %}
{% if page.extra.license and page.extra.license != "" %}
<p id="article-license">
<em>
<strong>Article is provided under the following license</strong>:
{{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 %}
</p>
{% endif %} {% if page.extra.author and page.extra.author != "" %}
<p>
<span class="article-metadata-label">Author(s)</span>: {{page.extra.author}}
</p>
{% else %}
<p>
<span class="article-metadata-label">Author</span>: Jonas Tobias Hopusch
</p>
{% endif %} {% if page.extra.license and page.extra.license != "" %}
<p id="article-license">
<span class="article-metadata-label"
>Article is provided under the following license</span
>: {{page.extra.license}}
</p>
{% else %}
<p class="article-missinglicense">
No license is granted for this article. All rights reserved.
</p>
{% endif %}
</div>
<hr id="last-article-metadata" />
<div>{{ page.content | safe }}</div>
{% endblock content %}

View file

@ -1,11 +1,9 @@
{% extends "base.html" %} {% block content %}
<h2>{{ section.title }}</h2>
<ul>
{% for page in section.pages %}
<li><a href="{{ page.permalink | safe }}">{{ page.title }}</a></li>
{% endfor %}
{% for page in section.pages %}
<li><a href="{{ page.permalink | safe }}">{{ page.title }}</a></li>
{% endfor %}
</ul>
<div>
{{ section.content | safe }}
</div>
<div>{{ section.content | safe }}</div>
{% endblock content %}