summaryrefslogtreecommitdiff
path: root/views
diff options
context:
space:
mode:
Diffstat (limited to 'views')
-rw-r--r--views/404.html14
-rw-r--r--views/danke.html13
-rw-r--r--views/familie.html277
-rw-r--r--views/index.html105
-rw-r--r--views/snippets/layout.html152
-rw-r--r--views/snippets/navbar.html31
6 files changed, 592 insertions, 0 deletions
diff --git a/views/404.html b/views/404.html
new file mode 100644
index 0000000..a438fb5
--- /dev/null
+++ b/views/404.html
@@ -0,0 +1,14 @@
+{% extends "snippets/layout.html" %}
+
+{% block title "404 | Hochzeit" %}
+
+{% block main %}
+
+<div class="container">
+
+ <h1>404 - Page not Found</h1>
+ <p>Oh no! This page does not exist. Start over. Do not pass Go! Do not collect 200 dollars!</p>
+
+</div>
+
+{% endblock %}
diff --git a/views/danke.html b/views/danke.html
new file mode 100644
index 0000000..beb55e6
--- /dev/null
+++ b/views/danke.html
@@ -0,0 +1,13 @@
+{% extends "snippets/layout.html" %}
+
+{% block title "404 | Hochzeit" %}
+
+{% block main %}
+
+<div class="container">
+
+ <h1 style="color:green">Dankeschön für die Eintragung!</h1>
+
+</div>
+
+{% endblock %}
diff --git a/views/familie.html b/views/familie.html
new file mode 100644
index 0000000..83d1df7
--- /dev/null
+++ b/views/familie.html
@@ -0,0 +1,277 @@
+{% extends "snippets/layout.html" %}
+
+{% block title 'Hochzeit: f(m) { return "2023-04-01"; }' %}
+
+{% block css %}
+ .main {
+ margin-top: 4rem;
+ }
+
+ .index-list > li {
+ margin-bottom: 1rem;
+ }
+
+ body {
+ background-color: #1c1c1c;
+ }
+
+ #footer {
+ background-color: #e1e1e1;
+ }
+ .string {
+ color: #ddd277;
+ }
+ .keyword {
+ color: #cd015f;
+ }
+ .tab-over-space {
+ margin-left: 2rem;
+ }
+ @media (max-width: 490px) {
+ .tab-over-space-on-mobile {
+ margin-left: 2rem;
+ }
+ }
+ .text-muted {
+ color: #808080 !important;
+ }
+
+ fform {
+ padding: 1.5rem;
+ margin-right: 0;
+ margin-left: 0;
+ border-width: .2rem;
+ position:relative;
+ }
+
+ .btn-submit {
+ background-color: #f07206;
+ border-color: #f07206;
+ }
+ .hidden {
+ display:none;
+ }
+{% endblock %}
+
+{% block main %}
+
+<div class="container">
+
+ {% for person in data %}
+ {% if loop.first %}
+ Hallo
+ {% else %}
+ hallo
+ {% endif %}
+
+ {% if not loop.last %}
+ {{ person.name }},
+ {% else %}
+ {{ person.name }},<br>
+ {% endif %}
+ {% endfor %}
+
+ <br>
+
+ {% if data | length > 1 %}
+ <p>ihr seid herzlich zu unserer Hochzeit am <u><strong>1. April 2023</strong></u> eingeladen. Um uns unsere Planung zu erleichtern, haben wir ein paar wichtige Fragen an euch:</p>
+ {% else %}
+ <p>du bist herzlich zu unserer Hochzeit am <u><strong>1. April 2023</strong></u> eingeladen. Um uns unsere Planung zu erleichtern, haben wir ein paar wichtige Fragen an dich:</p>
+ {% endif %}
+ <br>
+
+ {% if updated %}
+ <strong style=color:green>Dankeschön für die Eintragung!</strong>
+ <br>
+ <br>
+ {% endif %}
+
+ <form method="GET" action="/submit">
+ <h2>
+ {% if data | length > 1 %}
+ Kommt ihr zu unserer Hochzeit?
+ {% else %}
+ Kommst du zu unserer Hochzeit?
+ {% endif %}
+ </h2>
+ <div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="zusage" id="zusage" value="zusage">
+ <label class="form-check-label" for="zusage">&nbsp; Ja!</label>
+ </div>
+ <div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="zusage" id="zusage_absage" value="absage">
+ <label class="form-check-label" for="zusage_absage">&nbsp;
+ {% if data | length > 1 %}
+ Leider passt uns der Termin nicht
+ {% else %}
+ Leider passt mir der Termin nicht.
+ {% endif %}
+ </label>
+ </div>
+ {% if data | length > 1 %}
+ <div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="zusage" id="zusage_teilweise" value="teilweise">
+ <label class="form-check-label" for="zusage_teilweise">&nbsp;
+ Teilweise
+ </label>
+ </div>
+ {% else %}
+ <div id="zusage_teilweise" class="hidden"></div> <!-- Javascript hasst mich -->
+ {% endif %}
+
+ <br>
+ <br>
+
+ {% if data | length > 1 %}
+ <div class="hidden" id="zusage_detail">
+ {% for person in data %}
+ {{ person.name }}:
+ <br>
+ <div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="{{ person.id }}_zusage" id="{{ person.id }}_zusage" value="zusage">
+ <label class="form-check-label" for="{{ person.id }}_zusage">&nbsp; Ja!</label>
+ </div>
+ <div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="{{ person.id }}_zusage" id="{{ person.id }}_zusage_absage" value="absage">
+ <label class="form-check-label" for="{{ person.id }}_zusage_absage">&nbsp; Nein, ich komme nicht
+ </label>
+ </div>
+
+ <br>
+ {% endfor %}
+
+ <br>
+
+ </div>
+ {% endif %}
+
+ <h2>
+ {% if data | length > 1 %}
+ Kommt ihr mit dem Auto?
+ {% else %}
+ Kommst du mit dem Auto?
+ {% endif %}
+ </h2>
+ <div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="auto" id="auto_zusage" value="zusage">
+ <label class="form-check-label" for="auto_zusage">&nbsp;
+ {% if data | length > 1 %}
+ Ja, wir kommen mit dem Atuo
+ {% else %}
+ Ja, ich kommt mit meinem Auto
+ {% endif %}
+ </label>
+ </div>
+ <div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="auto" id="auto_zusage_absage" value="absage">
+ <label class="form-check-label" for="auto_zusage_absage">&nbsp;
+ {% if data | length > 1 %}
+ Nein, wir brauchen eventuell Plätze in freien Autos
+ {% else %}
+ Nein, ich brauche eventuell einen freien Platz in einem Auto
+ {% endif %}
+ </label>
+ </div>
+ <div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="auto" id="auto_unbekannt" value="unbekannt">
+ <label class="form-check-label" for="auto_unbekannt">&nbsp;
+ {% if data | length > 1 %}
+ Wissen wir noch nicht
+ {% else %}
+ Weiß ich noch nicht
+ {% endif %}
+ </label>
+ </div>
+
+ <br>
+
+ <div class="hidden" id="auto_freie_plätze">
+ <br>
+ <h2>
+ {% if data | length > 1 %}
+ Hättet ihr noch Plätze im Auto frei? Wenn ja, wie viele?
+ {% else %}
+ Hättest du noch Plätze im Auto frei? Wenn ja, wie viele?
+ {% endif %}
+ </h2>
+ <div class="form-group">
+ <div class="form-row">
+ <div class="col-xl-2 col-12 ">
+ <input type="number" class="form-control" name="plätze" id="plätze" aria-describedby="" value=0>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <br>
+ <h2>
+ {% if data | length > 1 %}
+ Möchtet ihr vegetarisch oder mit Fleisch essen?
+ {% else %}
+ Möchtest du vegetarisch oder mit Fleisch essen?
+ {% endif %}
+ </h2>
+ {% for person in data %}
+
+ {% if data | length > 1 %}
+ {{ person.name }}:
+ <br>
+ {% endif %}
+
+ <div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="{{ person.id }}_essenwahl" id="{{ person.id }}_mit_fleisch" value="mit_fleisch">
+ <label class="form-check-label" for="{{ person.id }}_mit_fleisch">&nbsp; Mit Fleisch (Ente)</label>
+ </div>
+ <div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="{{ person.id }}_essenwahl" id="{{ person.id }}_ohne_fleisch" value="ohne_fleisch">
+ <label class="form-check-label" for="{{ person.id }}_ohne_fleisch">&nbsp; Vegetarisch
+ </label>
+ </div>
+ <!--
+ <div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="{{ person.id }}_essenwahl" id="{{ person.id }}_essen_egal" value="essen_egal">
+ <label class="form-check-label" for="{{ person.id }}_essen_egal">&nbsp; Egal
+ </label>
+ </div>
+ -->
+
+ <br>
+ {% endfor %}
+
+ <br>
+ <p><h2>Für das Abendessen steht ein Caterer bereit. Anstatt Geschenke wünschen wir uns einen Beitrag für einen Snack nach der kirchlichen Trauung, bzw. Beiträge zum Kaffee & Kuchen.
+ {% if data | length > 1 %}
+ Würdet ihr etwas mitbringen?
+ {% else %}
+ Würdest du etwas mitbringen?
+ {% endif %}
+ </h2></p>
+ <div class="form-row">
+ <textarea class="col-12" rows=3 name="buffetbeitrag"></textarea>
+ </div>
+ <br>
+
+ <p><h2>Wünsche oder Bemerkungen!</h2><span class="text-muted">(Zum Beispiel veganes Essen, gewünschte Musik oder ähnliches)</span></p>
+ <div class="form-row">
+ <textarea class="col-12" rows=3 name="bemerkungsfeld"></textarea>
+ </div>
+
+ <br>
+ <br>
+ <input type="hidden" name="familie" value="{{ data[0].familien_id }}">
+ <button type="submit" class="btn btn-submit mb-2">Abschicken!</button>
+ </form>
+</div>
+
+<script>
+window.addEventListener("load",function() {
+ document.getElementById('zusage_teilweise').addEventListener("click", function(e){
+ document.getElementById('zusage_detail').classList.remove("hidden");
+ });
+ document.getElementById('auto_zusage').addEventListener("click", function(e){
+ document.getElementById('auto_freie_plätze').classList.remove("hidden");
+ });
+});
+</script>
+
+{% endblock %}
diff --git a/views/index.html b/views/index.html
new file mode 100644
index 0000000..9744af8
--- /dev/null
+++ b/views/index.html
@@ -0,0 +1,105 @@
+{% extends "snippets/layout.html" %}
+
+{% block title "Hochzeit" %}
+
+{% block css %}
+ .main {
+ margin-top: 4rem;
+ }
+
+ .index-list > li {
+ margin-bottom: 1rem;
+ }
+
+ body {
+ background-color: #1c1c1c;
+ }
+
+ #footer {
+ background-color: #e1e1e1;
+ }
+ .string {
+ color: #ddd277;
+ }
+ .keyword {
+ color: #cd015f;
+ }
+ .tab-over-space {
+ margin-left: 2rem;
+ }
+ @media (max-width: 490px) {
+ .tab-over-space-on-mobile {
+ margin-left: 2rem;
+ }
+ }
+ .text-muted {
+ color: #808080 !important;
+ }
+{% endblock %}
+
+{% block main %}
+
+<div class="container">
+
+ <div class="quote">
+ <code>[ <span class="keyword">Wann</span> => <span class="string">1. April 2023</span> ]</code>,
+ </div>
+ <div class="quote">
+ <code>[ <span class="keyword">Wer</span> => <span class="string">Franziska &lt;3 Maximilian</span> ]</code>,
+ </div>
+ <div class="quote">
+ <code>[ <span class="keyword">Wieso</span> => <em class="string">(ノ◕ヮ◕)ノ*:・゚✧ ✧゚・: *ヽ(◕ヮ◕ヽ)</em> ]</code>
+ </div>
+ <ul class="list-unstyled text-left index-list">
+ <li>
+ <span class="text-muted"># Mehr Details folgen in Kürze.</span>
+ </li>
+ </ul>
+ <!--
+ <ul class="list-unstyled text-left index-list">
+ <li>
+ <span class="text-muted"># Stuff I spent my free time on:</span>
+ <br>
+ <code>
+ <span class="keyword">while</span> lazy; <span class="keyword">do</span>
+ <br>
+ <a class="tab-over-space" href="/projects/" title="uncaught exception">Hobby => Projects()</a>
+ <br>
+ <span class="keyword">endwhile</span>
+ </code>
+
+ </li>
+ <li>
+ <span class="text-muted"># <strike>Stupi</strike>.. serious things I needed to exist:</span>
+ <br>
+ <code>
+ <span class="keyword">while</span> crazy; <span class="keyword">do</span>
+ <br>
+ <span class="tab-over-space">eval(<span class="string">"</span><a href="/things/" title="don't eval my life. also eval is bad">my <strike>life…</strike> things</a><span class="string">"</span>)</span>
+ <br>
+ <span class="keyword">endwhile</span>
+ </code>
+ </li>
+ <li>
+ <span class="text-muted"># I have more hobbys besides sleep(10)</span>
+ <br>
+ <code>
+ <span class="keyword">if</span> interested; <span class="keyword">do</span>
+ <br>
+ <span class="tab-over-space">
+ <a class="col-12 col-md-4" href="/about/" title="me.about() makes more sense">About.Me()</a>
+ <span class="keyword">or</span>
+ <a class="col-12 col-md-4 tab-over-space-on-mobile" href="https://www.fuselkoenig.de/kontakt/" title="don't tell me I forgot the semicolons">Contact.Me()</a></span>
+ <br>
+ <span class="keyword">endif</span>
+ </code>
+ </li>
+ <li>
+ </li>
+ </ul>
+ <code class="string">" syntax error: unexpected end of file</code>
+ -->
+
+</div>
+
+{% endblock %}
diff --git a/views/snippets/layout.html b/views/snippets/layout.html
new file mode 100644
index 0000000..7a93c0b
--- /dev/null
+++ b/views/snippets/layout.html
@@ -0,0 +1,152 @@
+<!doctype html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+ <meta name="description" content="
+ {% block description %}
+ {% endblock %}
+ ">
+ <link rel='icon' href="data:image/x-icon;base64,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">
+ {% block maincss %}
+ <!--link rel="stylesheet" href="/css/bootstrap.css"-->
+ <style>{{ maincss() }}</style>
+ {% endblock %}
+ <title>
+ {% block title %}
+ Hochzeit: f(m) { return "2023-04-01"; }
+ {% endblock %}
+ </title>
+ <style>
+ html {
+ width: 100%;
+ }
+ body {
+ background-color: #262626;
+ color: #e1e1e1;
+ }
+ .main {
+ margin-top: 4rem;
+ font-size: 1.5rem;
+ margin-bottom: 4rem;
+ }
+ @media (max-width: 992px) {
+ .main {
+ margin-top: 3rem !important;
+ margin-bottom: 4rem;
+ }
+ }
+ @media (min-width: 992px) {
+ .main {
+ margin-top: 8rem;
+ font-size: 2rem;
+ }
+ }
+ .main a {
+ color: #47ccfb;
+ text-decoration: underline;
+ }
+ h1 {
+ margin-bottom: 2rem;
+ }
+ .hidden {
+ visibility: hidden;
+ }
+ #footer {
+ width: 100%;
+ height: 60px; /* Set the fixed height of the footer here */
+ line-height: 60px; /* Vertically center the text there */
+ background-color: #f5f5f5;
+ }
+ .navbar {
+ background-color: #f5f5f5;
+ }
+ .navbar-brand {
+ color: #f07206 !important;
+ }
+
+ /**
+ * ## Bottom Border Color in Navbar
+ */
+ .navbar-nav .active {
+ border-bottom: 5px solid #f07206;
+ }
+ @media (max-width: 992px) {
+ .navbar-nav .active {
+ width: 30%;
+ }
+ }
+
+ .quote {
+ margin-bottom: 3.5rem;
+ }
+ .flavor-text {
+ margin-bottom: 2rem;
+ font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;
+ font-size: 1.5rem;
+ }
+ .flavor-text > h1 {
+ margin-bottom: 0;
+ }
+ h2::before {
+ content: "# ";
+ }
+ /*
+ h1,h2 {
+ color: #f07206;
+ font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;
+ }
+ */
+ .bg-dark {
+ background-color: #171717 !important;
+ }
+ .string {
+ color: #ddd277;
+ }
+ @media (min-width: 600px) {
+ .mobile {
+ display: none;
+ }
+ }
+ </style>
+ <style>
+ {% block css %}
+ {% endblock %}
+ </style>
+</head>
+<body class="d-flex flex-column min-vh-100">
+ {% include("snippets/navbar.html") %}
+
+<main class="main">
+ {% block main %}
+ {% endblock %}
+</main>
+
+<footer id="footer" class="mt-auto bg-dark">
+ <div class="container text-right">
+ {% block footer %}
+ {% endblock %}
+ </div>
+</footer>
+
+<script defer src="/js/jquery-3.5.1.min.js"></script>
+<script defer src="/js/bootstrap.js"></script>
+
+
+<!--
+<script type="text/javascript">
+ var _paq = _paq || [];
+ /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
+ _paq.push(['trackPageView']);
+ _paq.push(['enableHeartBeatTimer', 5]);
+ _paq.push(['enableLinkTracking']);
+ (function() {
+ var u="//www.maximilianmoehring.com/";
+ _paq.push(['setTrackerUrl', u+'jsx/']);
+ _paq.push(['setSiteId', '35']);
+ var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
+ g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'jsx/'; s.parentNode.insertBefore(g,s);
+ })();
+</script>
+-->
+
+</body>
diff --git a/views/snippets/navbar.html b/views/snippets/navbar.html
new file mode 100644
index 0000000..11e043e
--- /dev/null
+++ b/views/snippets/navbar.html
@@ -0,0 +1,31 @@
+<nav class="navbar navbar-expand-md navbar-dark bg-dark shadow-sm">
+ <div class="container">
+ <code><a class="navbar-brand" href="/">Hochzeit: <span class="mobile"><br></span> f(m) { return "2023-04-01"; }</a></code>
+ <!--
+ <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ -->
+
+ <div class="collapse navbar-collapse" id="navbarSupportedContent">
+ <!-- Left Side Of Navbar -->
+ <ul class="navbar-nav mr-auto">
+ </ul>
+
+ <!-- Right Side Of Navbar -->
+ <!--
+ <ul class="navbar-nav ml-auto">
+ <li class="nav-item">
+ <a class="nav-link {{ is_active('/projects') }}" href="/projects/">/projects</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link {{ is_active('/things') }}" href="/things/">/things</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link {{ is_active('/about') }}" href="/about/">/about me</a>
+ </li>
+ </ul>
+ -->
+ </div>
+ </div>
+</nav>