use jinja to statically build website
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
/dist
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import contextlib
|
||||||
|
from io import BufferedWriter, FileIO
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import git
|
||||||
|
from jinja2 import Environment, FileSystemLoader
|
||||||
|
|
||||||
|
SOURCES_DIR = "src"
|
||||||
|
DIST_DIR = "dist"
|
||||||
|
|
||||||
|
def latest_git_commit_year() -> int:
|
||||||
|
return git.Repo(".").head.commit.authored_datetime.year
|
||||||
|
|
||||||
|
def build_template(env: Environment, src_path: str):
|
||||||
|
rel_path = os.path.relpath(src_path, SOURCES_DIR)
|
||||||
|
dist_path = os.path.splitext(os.path.join(DIST_DIR, rel_path))[0]
|
||||||
|
|
||||||
|
template = env.get_template(rel_path)
|
||||||
|
rendered_text = template.render(copyright_year = latest_git_commit_year())
|
||||||
|
|
||||||
|
with BufferedWriter(FileIO(dist_path, "wb")) as writer:
|
||||||
|
for line in rendered_text.splitlines():
|
||||||
|
line = line.strip()
|
||||||
|
if len(line) > 0:
|
||||||
|
writer.write(line.encode())
|
||||||
|
writer.write(b"\n")
|
||||||
|
|
||||||
|
env = Environment(
|
||||||
|
loader=FileSystemLoader(SOURCES_DIR),
|
||||||
|
autoescape=True
|
||||||
|
)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
with contextlib.suppress(FileNotFoundError):
|
||||||
|
shutil.rmtree(DIST_DIR)
|
||||||
|
|
||||||
|
for root, _, files in os.walk(SOURCES_DIR):
|
||||||
|
rel_dir_path = os.path.relpath(root, SOURCES_DIR)
|
||||||
|
dist_root = os.path.join(DIST_DIR, rel_dir_path)
|
||||||
|
os.makedirs(dist_root, exist_ok=True)
|
||||||
|
|
||||||
|
for src_name in files:
|
||||||
|
src_path = os.path.join(root, src_name)
|
||||||
|
|
||||||
|
if src_name.endswith(".jinja"):
|
||||||
|
if not src_name.startswith("_"):
|
||||||
|
build_template(env, src_path)
|
||||||
|
|
||||||
|
else:
|
||||||
|
dist_path = os.path.join(dist_root, src_name)
|
||||||
|
shutil.copy(src_path, dist_path)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<!-- Copyright © 2026 Niklas Elsbrock -->
|
|
||||||
|
|
||||||
<html lang="de">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<title>Niklas Elsbrock – Open-Source-Lizenzen</title>
|
|
||||||
<meta name="description" content="Persönliche Website von Niklas Elsbrock." />
|
|
||||||
<meta name="copyright" content="Niklas Elsbrock" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=0.75" />
|
|
||||||
<link rel="stylesheet" href="/resources/style.css" />
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div class="viewstretch">
|
|
||||||
<main>
|
|
||||||
<h1>Open-Source-Lizenzen</h1>
|
|
||||||
|
|
||||||
<h2>Schriftarten:</h2>
|
|
||||||
|
|
||||||
<h3>Überschriften: <a href="https://fontsarena.com/metropolis-by-chris-simpson/">Metropolis</a></h3>
|
|
||||||
<p>Public Domain (<a href="https://unlicense.org/">Unlicense</a>)</p>
|
|
||||||
|
|
||||||
<h3>Text: <a href="https://github.com/rsms/inter">Inter</a></h3>
|
|
||||||
<p>
|
|
||||||
Copyright (c) 2016-2020 The Inter Project Authors.<br />
|
|
||||||
"Inter" is trademark of Rasmus Andersson.<br />
|
|
||||||
Licensed under the <a href="https://scripts.sil.org/OFL">SIL Open Font License, Version 1.1</a>.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h3>Icons: <a href="https://fontawesome.com/">Font Awesome Free</a></h3>
|
|
||||||
<p>
|
|
||||||
Copyright (c) 2024 Fonticons, Inc.<br />
|
|
||||||
with Reserved Font Name: "Font Awesome".<br />
|
|
||||||
Licensed under the <a href="https://scripts.sil.org/OFL">SIL Open Font License, Version 1.1</a>.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<a href="/" data-icon="">Zurück zur Hauptseite</a>
|
|
||||||
</p>
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
<footer>
|
|
||||||
<p>
|
|
||||||
© 2026 Niklas Elsbrock
|
|
||||||
· <a href="/privacy.html">Datenschutz</a>
|
|
||||||
· <a href="/licenses.html">Open-Source-Lizenzen</a>
|
|
||||||
</p>
|
|
||||||
<p>Geeignet für Allergiker: Diese Website enthält kein JavaScript.</p>
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<!-- Copyright © 2026 Niklas Elsbrock -->
|
|
||||||
|
|
||||||
<html lang="de">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<title>Niklas Elsbrock – Datenschutz</title>
|
|
||||||
<meta name="description" content="Persönliche Website von Niklas Elsbrock." />
|
|
||||||
<meta name="copyright" content="Niklas Elsbrock" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=0.75" />
|
|
||||||
<link rel="stylesheet" href="/resources/style.css" />
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div class="viewstretch">
|
|
||||||
<main>
|
|
||||||
<h1>Datenschutz</h1>
|
|
||||||
<p>Verantwortlich für diese Website ist</p>
|
|
||||||
<address>
|
|
||||||
Niklas Elsbrock<br />
|
|
||||||
<a href="mailto:mail@nelsbrock.de">mail@nelsbrock.de</a>
|
|
||||||
</address>
|
|
||||||
|
|
||||||
<h2>Keine Erfassung von Besucherinformationen</h2>
|
|
||||||
<p>
|
|
||||||
Beim Besuch der Website unter www.nelsbrock.de werden keine
|
|
||||||
personenbezogenen Daten verarbeitet. Zugriffsprotokolle sind
|
|
||||||
deaktiviert.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<a href="/" data-icon="">Zurück zur Hauptseite</a>
|
|
||||||
</p>
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
<footer>
|
|
||||||
<p>
|
|
||||||
© 2026 Niklas Elsbrock
|
|
||||||
· <a href="/privacy.html">Datenschutz</a>
|
|
||||||
· <a href="/licenses.html">Open-Source-Lizenzen</a>
|
|
||||||
</p>
|
|
||||||
<p>Geeignet für Allergiker: Diese Website enthält kein JavaScript.</p>
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|
||||||
<!-- Copyright © 2026 Niklas Elsbrock -->
|
|
||||||
|
|
||||||
<html lang="de">
|
<html lang="de">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<title>Niklas Elsbrock</title>
|
<title>{% block title %}{% endblock %}</title>
|
||||||
<meta name="description" content="Persönliche Website von Niklas Elsbrock." />
|
<meta name="description" content="Persönliche Website von Niklas Elsbrock." />
|
||||||
<meta name="copyright" content="Niklas Elsbrock" />
|
<meta name="copyright" content="Niklas Elsbrock" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
@@ -14,24 +12,11 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="viewstretch">
|
<div class="viewstretch">
|
||||||
<main class="card">
|
{% block main %}{% endblock %}
|
||||||
<div class="main-info">
|
|
||||||
<h1>Niklas Elsbrock</h1>
|
|
||||||
<p>Softwareentwickler und Informatikstudent</p>
|
|
||||||
</div>
|
|
||||||
<hr />
|
|
||||||
<nav>
|
|
||||||
<ul>
|
|
||||||
<li><a class="link-github" href="https://github.com/nelsbrock">GitHub</a></li>
|
|
||||||
<li><a class="link-email" href="mailto:mail@nelsbrock.de">E-Mail</a></li>
|
|
||||||
<li><a class="link-pgp-key" href="/niklas_elsbrock.asc">PGP</a></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</main>
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
<p>
|
<p>
|
||||||
© 2026 Niklas Elsbrock
|
© {{ copyright_year }} Niklas Elsbrock
|
||||||
· <a href="/privacy.html">Datenschutz</a>
|
· <a href="/privacy.html">Datenschutz</a>
|
||||||
· <a href="/licenses.html">Open-Source-Lizenzen</a>
|
· <a href="/licenses.html">Open-Source-Lizenzen</a>
|
||||||
</p>
|
</p>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{% extends "_base.html.jinja" %}
|
||||||
|
|
||||||
|
{% block title %}Niklas Elsbrock{% endblock %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
<main class="card">
|
||||||
|
<div class="main-info">
|
||||||
|
<h1>Niklas Elsbrock</h1>
|
||||||
|
<p>Softwareentwickler und Informatikstudent</p>
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
<li><a class="link-github" href="https://github.com/nelsbrock">GitHub</a></li>
|
||||||
|
<li><a class="link-email" href="mailto:mail@nelsbrock.de">E-Mail</a></li>
|
||||||
|
<li><a class="link-pgp-key" href="/niklas_elsbrock.asc">PGP</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</main>
|
||||||
|
{% endblock %}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{% extends "_base.html.jinja" %}
|
||||||
|
|
||||||
|
{% block title %}Open-Source-Lizenzen – Niklas Elsbrock{% endblock %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
<main>
|
||||||
|
<h1>Open-Source-Lizenzen</h1>
|
||||||
|
|
||||||
|
<h2>Schriftarten:</h2>
|
||||||
|
|
||||||
|
<h3>Überschriften: <a href="https://fontsarena.com/metropolis-by-chris-simpson/">Metropolis</a></h3>
|
||||||
|
<p>Public Domain (<a href="https://unlicense.org/">Unlicense</a>)</p>
|
||||||
|
|
||||||
|
<h3>Text: <a href="https://github.com/rsms/inter">Inter</a></h3>
|
||||||
|
<p>
|
||||||
|
Copyright (c) 2016-2020 The Inter Project Authors.<br />
|
||||||
|
"Inter" is trademark of Rasmus Andersson.<br />
|
||||||
|
Licensed under the <a href="https://scripts.sil.org/OFL">SIL Open Font License, Version 1.1</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Icons: <a href="https://fontawesome.com/">Font Awesome Free</a></h3>
|
||||||
|
<p>
|
||||||
|
Copyright (c) 2024 Fonticons, Inc.<br />
|
||||||
|
with Reserved Font Name: "Font Awesome".<br />
|
||||||
|
Licensed under the <a href="https://scripts.sil.org/OFL">SIL Open Font License, Version 1.1</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="/" data-icon="">Zurück zur Hauptseite</a>
|
||||||
|
</p>
|
||||||
|
</main>
|
||||||
|
{% endblock %}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
{% extends "_base.html.jinja" %}
|
||||||
|
|
||||||
|
{% block title %}Datenschutz – Niklas Elsbrock{% endblock %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
<main>
|
||||||
|
<h1>Datenschutz</h1>
|
||||||
|
<p>Verantwortlich für diese Website ist</p>
|
||||||
|
<address>
|
||||||
|
Niklas Elsbrock<br />
|
||||||
|
<a href="mailto:mail@nelsbrock.de">mail@nelsbrock.de</a>
|
||||||
|
</address>
|
||||||
|
|
||||||
|
<h2>Keine Erfassung von Besucherinformationen</h2>
|
||||||
|
<p>
|
||||||
|
Beim Besuch der Website unter www.nelsbrock.de werden keine
|
||||||
|
personenbezogenen Daten verarbeitet. Zugriffsprotokolle sind
|
||||||
|
deaktiviert.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="/" data-icon="">Zurück zur Hauptseite</a>
|
||||||
|
</p>
|
||||||
|
</main>
|
||||||
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user