use jinja to statically build website
This commit is contained in:
24 files changed
+141
-121
No files matched your search
@@ -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>
|
|
||||||
File renamed without changes.
File renamed without changes.
@@ -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 %}
|
||||||
File renamed without changes.
@@ -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 %}
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Reference in new issue
Block a user