Compare commits

..

22 Commits

Author SHA1 Message Date
59db1227fe Removed studium 2025-07-06 21:45:35 +02:00
12b673de9f Deleted empty index file 2025-07-06 17:02:28 +02:00
ff20858b97 FIx tools page by adjusting css var names 2025-07-05 13:51:35 +02:00
7fd35b0f36 Address sonarcube improvements 2025-07-03 14:36:15 +02:00
2e90924ce2 Cleaned up html head 2025-07-01 15:43:40 +02:00
84af125a86 Updated home page with new logo 2025-06-27 13:00:31 +02:00
082a0942a3 Deleted DS_Store file 2025-06-27 11:33:59 +02:00
46183798ee deleted DS_Store file 2025-06-27 11:33:42 +02:00
ed76674db3 Added gitignore 2025-06-27 11:24:44 +02:00
733975c7c4 Various changes 2025-06-27 11:22:13 +02:00
7f3986f098 Test commit 2025-06-26 19:05:08 +02:00
2fecb6de3d Test commit 2025-06-26 19:03:52 +02:00
6ccd33a35f colors small modification 2025-06-26 19:00:00 +02:00
e14d5db9da Updated colors with new var names, outsourced css 2025-06-26 18:56:46 +02:00
65efc3a8df Changed email on home 2025-06-26 18:51:10 +02:00
7bb6c2708a Updated html head 2025-06-26 18:51:04 +02:00
9b08a49075 Updated privacy 2025-06-26 18:50:49 +02:00
8c20fd082a Updated html head and favicon 2025-06-26 18:50:35 +02:00
f94f9136fd Removed .DS_Store 2025-06-25 18:37:59 +02:00
5eb60ab0b7 Removed static autoindex 2025-06-25 18:37:18 +02:00
4d8c504e41 Deleted README in eliasfink.de 2025-06-25 17:59:15 +02:00
cbc5b1305f Deleted README 2025-06-25 17:57:32 +02:00
78 changed files with 166 additions and 1249 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.DS_Store

View File

@@ -1,2 +0,0 @@
# Website

34
colors/colors.css Normal file
View File

@@ -0,0 +1,34 @@
* {
margin: 0;
padding: 0;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
}
#content {
top: 50%;
left: 50%;
width: 100%;
max-width: 500px;
position: absolute;
transform: translate(-50%, -50%);
}
.color-palette {
width: 100%;
max-width: 500px;
}
.single-color {
width: 20%;
float: left;
text-align: center;
}
.single-color div {
padding-top: 50%;
margin-top: 50px;
margin-bottom: 2px;
}

View File

@@ -1,104 +1,64 @@
<?php include "../html-head.php"; ?> <?php include "../html-head.php"; ?>
<link rel="stylesheet" href="colors.css">
<link rel="stylesheet" href="https://static.eliasfink.de/fonts/montserrat/montserrat.css"> <link rel="stylesheet" href="https://static.eliasfink.de/fonts/montserrat/montserrat.css">
<style> <title>Colors &ndash; Elias Fink</title>
* {
margin: 0;
padding: 0;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
}
#content {
top: 50%;
left: 50%;
width: 100%;
max-width: 500px;
position: absolute;
transform: translate(-50%, -50%);
}
.color-palette {
width: 100%;
max-width: 500px;
}
.single-color {
width: 20%;
float: left;
text-align: center;
display: inline-block;
}
.single-color div {
padding-top: 50%;
margin-top: 50px;
margin-bottom: 2px;
}
</style>
<title>Colors &ndash; eliasfink.de</title>
</head> </head>
<body> <body>
<div id="content"> <main id="content">
<div id="blue" class="color-palette"> <div id="blue" class="color-palette">
<div class="single-color"> <div class="single-color">
<div style="background-color: var(--blue-1);"></div> <div style="background-color: var(--blue-darkest);"></div>
<span>#001A33</span> <span>#001A33</span>
</div> </div>
<div class="single-color"> <div class="single-color">
<div style="background-color: var(--blue-2);"></div> <div style="background-color: var(--blue-darker);"></div>
<span>#004D99</span> <span>#004D99</span>
</div> </div>
<div class="single-color"> <div class="single-color">
<div style="background-color: var(--blue-3);"></div> <div style="background-color: var(--blue-medium);"></div>
<span>#0080FF</span> <span>#0080FF</span>
</div> </div>
<div class="single-color"> <div class="single-color">
<div style="background-color: var(--blue-4);"></div> <div style="background-color: var(--blue-lighter);"></div>
<span>#66B3FF</span> <span>#66B3FF</span>
</div> </div>
<div class="single-color"> <div class="single-color">
<div style="background-color: var(--blue-5);"></div> <div style="background-color: var(--blue-lightest);"></div>
<span>#CCE6FF</span> <span>#CCE6FF</span>
</div> </div>
</div> </div>
<div id="grey" class="color-palette"> <div id="grey" class="color-palette">
<div class="single-color"> <div class="single-color">
<div style="background-color: var(--grey-1);"></div> <div style="background-color: var(--grey-darkest);"></div>
<span>#161A1D</span> <span>#161A1D</span>
</div> </div>
<div class="single-color"> <div class="single-color">
<div style="background-color: var(--grey-2);"></div> <div style="background-color: var(--grey-darker);"></div>
<span>#434D56</span> <span>#434D56</span>
</div> </div>
<div class="single-color"> <div class="single-color">
<div style="background-color: var(--grey-3);"></div> <div style="background-color: var(--grey-medium);"></div>
<span>#708090</span> <span>#708090</span>
</div> </div>
<div class="single-color"> <div class="single-color">
<div style="background-color: var(--grey-4);"></div> <div style="background-color: var(--grey-lighter);"></div>
<span>#A9B3BC</span> <span>#A9B3BC</span>
</div> </div>
<div class="single-color"> <div class="single-color">
<div style="background-color: var(--grey-5);"></div> <div style="background-color: var(--grey-lightest);"></div>
<span>#E2E6E9</span> <span>#E2E6E9</span>
</div> </div>
</div> </div>
</div> </main>
</body> </body>

View File

@@ -1,2 +0,0 @@
# Website

View File

@@ -10,16 +10,16 @@
<div id="container"> <div id="container">
<svg id="ef-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000"> <svg id="ef-logo" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<circle cx="500" cy="500" r="500" fill="#0080FF"/> <circle cx="500" cy="500" r="500" fill="#0080FF"/>
<g fill="#FFFFFF"> <g fill="#FFFFFF">
<rect x="430" y="240" width="50" height="520"/> <rect x="425" y="250" width="50" height="500"/>
<rect x="190" y="240" width="265" height="50" /> <rect x="525" y="250" width="50" height="500"/>
<rect x="190" y="475" width="265" height="50" /> <rect x="200" y="250" width="250" height="50" />
<rect x="190" y="710" width="265" height="50" /> <rect x="200" y="475" width="250" height="50" />
<rect x="520" y="240" width="50" height="520"/> <rect x="200" y="700" width="250" height="50" />
<rect x="545" y="240" width="265" height="50" /> <rect x="550" y="250" width="250" height="50" />
<rect x="545" y="475" width="265" height="50" /> <rect x="550" y="475" width="250" height="50" />
</g> </g>
</svg> </svg>
@@ -32,7 +32,7 @@
<div id="email"> <div id="email">
<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#97;&#105;&#108;&#64;&#101;&#108;&#105;&#97;&#115;&#102;&#105;&#110;&#107;&#46;&#100;&#101;">&#109;&#97;&#105;&#108;&#64;&#101;&#108;&#105;&#97;&#115;&#102;&#105;&#110;&#107;&#46;&#100;&#101;</a> <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#x6B;&#x6F;&#x6E;&#x74;&#x61;&#x6B;&#x74;&#x40;&#x65;&#x6C;&#x69;&#x61;&#x73;&#x66;&#x69;&#x6E;&#x6B;&#x2E;&#x64;&#x65;">&#x6B;&#x6F;&#x6E;&#x74;&#x61;&#x6B;&#x74;&#x40;&#x65;&#x6C;&#x69;&#x61;&#x73;&#x66;&#x69;&#x6E;&#x6B;&#x2E;&#x64;&#x65;</a>
</div> </div>

View File

@@ -1,35 +1,32 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="de" dir="ltr"> <html lang="de">
<head> <head>
<meta charset="utf-8"> <meta charset="UTF-8">
<meta name="author" content="Elias Fink"> <meta name="author" content="Elias Fink">
<meta name="copyright" content="Copyright © <?php echo date("Y"); ?> Elias Fink"> <meta name="copyright" content="Copyright © <?php echo date("Y"); ?> Elias Fink">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex, nofollow"> <meta name="robots" content="noindex, nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="https://static.eliasfink.de/img/favicons/favicon.ico"> <link rel="icon" type="image/png" sizes="96x96" href="https://static.eliasfink.de/img/favicon/favicon-96x96.png"/>
<link rel="manifest" href="https://static.eliasfink.de/img/favicons/site.webmanifest"> <link rel="icon" type="image/svg+xml" href="https://static.eliasfink.de/img/favicon/favicon.svg"/>
<link rel="apple-touch-icon" sizes="180x180" href="https://static.eliasfink.de/img/favicons/apple-touch-icon.png"> <link rel="shortcut icon" href="https://static.eliasfink.de/img/favicon/favicon.ico"/>
<link rel="icon" type="image/png" sizes="32x32" href="https://static.eliasfink.de/img/favicons/favicon-32x32.png"> <link rel="apple-touch-icon" sizes="180x180" href="https://static.eliasfink.de/img/favicon/apple-touch-icon.png"/>
<link rel="icon" type="image/png" sizes="16x16" href="https://static.eliasfink.de/img/favicons/favicon-16x16.png"> <link rel="manifest" href="https://static.eliasfink.de/img/favicon/site.webmanifest"/>
<meta name="msapplication-config" content="https://static.eliasfink.de/img/favicons/browserconfig.xml">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="theme-color" content="#ffffff">
<style> <style>
:root { :root {
--blue-1: #001A33; --blue-darkest: #001A33;
--blue-2: #004D99; --blue-darker: #004D99;
--blue-3: #0080FF; --blue-medium: #0080FF;
--blue-4: #66B3FF; --blue-lighter: #66B3FF;
--blue-5: #CCE6FF; --blue-lightest: #CCE6FF;
--grey-1: #161A1D; --grey-darkest: #161A1D;
--grey-2: #434D56; --grey-darker: #434D56;
--grey-3: #708090; --grey-medium: #708090;
--grey-4: #A9B3BC; --grey-lighter: #A9B3BC;
--grey-5: #E2E6E9; --grey-lightest: #E2E6E9;
} }
</style> </style>

View File

@@ -1,4 +1,4 @@
<?php include "html-head.php"; ?> <?php include "../html-head.php"; ?>
<link rel="stylesheet" href="privacy.css"> <link rel="stylesheet" href="privacy.css">
@@ -8,82 +8,61 @@
<body> <body>
<div id="container"> <main id="container">
<h1>Datenschutz&shy;erkl&auml;rung</h1> <h1>Datenschutz&shy;erkl&auml;rung</h1>
<div class="space-25"></div>
<h2>1. Datenschutz auf einen Blick</h2> <h2>1. Datenschutz auf einen Blick</h2>
<div class="space-10"></div>
<h3>Allgemeine Hinweise</h3> <h3>Allgemeine Hinweise</h3>
<p>Die folgenden Hinweise geben einen einfachen &Uuml;berblick dar&uuml;ber, was mit Ihren personenbezogenen Daten passiert, wenn Sie diese Website besuchen. Personenbezogene Daten sind alle Daten, mit denen Sie pers&ouml;nlich identifiziert werden k&ouml;nnen. Ausf&uuml;hrliche Informationen zum Thema Datenschutz entnehmen Sie unserer unter diesem Text aufgef&uuml;hrten Datenschutzerkl&auml;rung.</p> <p>Die folgenden Hinweise geben einen einfachen &Uuml;berblick dar&uuml;ber, was mit Ihren personenbezogenen Daten passiert, wenn Sie diese Website besuchen. Personenbezogene Daten sind alle Daten, mit denen Sie pers&ouml;nlich identifiziert werden k&ouml;nnen. Ausf&uuml;hrliche Informationen zum Thema Datenschutz entnehmen Sie unserer unter diesem Text aufgef&uuml;hrten Datenschutzerkl&auml;rung.</p>
<div class="space-25"></div>
<h3>Datenerfassung auf dieser Website</h3> <h3>Datenerfassung auf dieser Website</h3>
<div class="space-10"></div>
<h4>Wer ist verantwortlich f&uuml;r die Datenerfassung auf dieser Website?</h4> <h4>Wer ist verantwortlich f&uuml;r die Datenerfassung auf dieser Website?</h4>
<p>Die Datenverarbeitung auf dieser Website erfolgt durch den Websitebetreiber. Dessen Kontaktdaten k&ouml;nnen Sie dem Abschnitt &bdquo;Hinweis zur Verantwortlichen Stelle&ldquo; in dieser Datenschutzerkl&auml;rung entnehmen.</p> <p>Die Datenverarbeitung auf dieser Website erfolgt durch den Websitebetreiber. Dessen Kontaktdaten k&ouml;nnen Sie dem Abschnitt &bdquo;Hinweis zur Verantwortlichen Stelle&ldquo; in dieser Datenschutzerkl&auml;rung entnehmen.</p>
<div class="space-10"></div>
<h4>Wie erfassen wir Ihre Daten?</h4> <h4>Wie erfassen wir Ihre Daten?</h4>
<p>Ihre Daten werden zum einen dadurch erhoben, dass Sie uns diese mitteilen. Hierbei kann es sich z.&nbsp;B. um Daten handeln, die Sie in ein Kontaktformular eingeben.</p> <p>Ihre Daten werden zum einen dadurch erhoben, dass Sie uns diese mitteilen. Hierbei kann es sich z.&nbsp;B. um Daten handeln, die Sie in ein Kontaktformular eingeben.</p>
<p>Andere Daten werden automatisch oder nach Ihrer Einwilligung beim Besuch der Website durch unsere IT-Systeme erfasst. Das sind vor allem technische Daten (z.&nbsp;B. Internetbrowser, Betriebssystem oder Uhrzeit des Seitenaufrufs). Die Erfassung dieser Daten erfolgt automatisch, sobald Sie diese Website betreten.</p> <p>Andere Daten werden automatisch oder nach Ihrer Einwilligung beim Besuch der Website durch unsere IT-Systeme erfasst. Das sind vor allem technische Daten (z.&nbsp;B. Internetbrowser, Betriebssystem oder Uhrzeit des Seitenaufrufs). Die Erfassung dieser Daten erfolgt automatisch, sobald Sie diese Website betreten.</p>
<div class="space-10"></div>
<h4>Wof&uuml;r nutzen wir Ihre Daten?</h4> <h4>Wof&uuml;r nutzen wir Ihre Daten?</h4>
<p>Ein Teil der Daten wird erhoben, um eine fehlerfreie Bereitstellung der Website zu gew&auml;hrleisten. Andere Daten k&ouml;nnen zur Analyse Ihres Nutzerverhaltens verwendet werden.</p> <p>Ein Teil der Daten wird erhoben, um eine fehlerfreie Bereitstellung der Website zu gew&auml;hrleisten. Andere Daten k&ouml;nnen zur Analyse Ihres Nutzerverhaltens verwendet werden.</p>
<div class="space-10"></div>
<h4>Welche Rechte haben Sie bez&uuml;glich Ihrer Daten?</h4> <h4>Welche Rechte haben Sie bez&uuml;glich Ihrer Daten?</h4>
<p>Sie haben jederzeit das Recht, unentgeltlich Auskunft &uuml;ber Herkunft, Empf&auml;nger und Zweck Ihrer gespeicherten personenbezogenen Daten zu erhalten. Sie haben au&szlig;erdem ein Recht, die Berichtigung oder L&ouml;schung dieser Daten zu verlangen. Wenn Sie eine Einwilligung zur Datenverarbeitung erteilt haben, k&ouml;nnen Sie diese Einwilligung jederzeit f&uuml;r die Zukunft widerrufen. Au&szlig;erdem haben Sie das Recht, unter bestimmten Umst&auml;nden die Einschr&auml;nkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen. Des Weiteren steht Ihnen ein Beschwerderecht bei der zust&auml;ndigen Aufsichtsbeh&ouml;rde zu.</p> <p>Sie haben jederzeit das Recht, unentgeltlich Auskunft &uuml;ber Herkunft, Empf&auml;nger und Zweck Ihrer gespeicherten personenbezogenen Daten zu erhalten. Sie haben au&szlig;erdem ein Recht, die Berichtigung oder L&ouml;schung dieser Daten zu verlangen. Wenn Sie eine Einwilligung zur Datenverarbeitung erteilt haben, k&ouml;nnen Sie diese Einwilligung jederzeit f&uuml;r die Zukunft widerrufen. Au&szlig;erdem haben Sie das Recht, unter bestimmten Umst&auml;nden die Einschr&auml;nkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen. Des Weiteren steht Ihnen ein Beschwerderecht bei der zust&auml;ndigen Aufsichtsbeh&ouml;rde zu.</p>
<p>Hierzu sowie zu weiteren Fragen zum Thema Datenschutz k&ouml;nnen Sie sich jederzeit an uns wenden.</p> <p>Hierzu sowie zu weiteren Fragen zum Thema Datenschutz k&ouml;nnen Sie sich jederzeit an uns wenden.</p>
<div class="space-50"></div>
<h2>2. Hosting</h2> <h2>2. Hosting</h2>
<div class="space-10"></div>
<h3>Externes Hosting</h3> <h3>Externes Hosting</h3>
<p>Diese Website wird bei einem externen Dienstleister gehostet (Hoster). Die personenbezogenen Daten, die auf dieser Website erfasst werden, werden auf den Servern des Hosters gespeichert. Hierbei kann es sich v. a. um IP-Adressen, Kontaktanfragen, Meta- und Kommunikationsdaten, Vertragsdaten, Kontaktdaten, Namen, Websitezugriffe und sonstige Daten, die &uuml;ber eine Website generiert werden, handeln.</p> <p>Diese Website wird bei einem externen Dienstleister gehostet (Hoster). Die personenbezogenen Daten, die auf dieser Website erfasst werden, werden auf den Servern des Hosters gespeichert. Hierbei kann es sich v. a. um IP-Adressen, Kontaktanfragen, Meta- und Kommunikationsdaten, Vertragsdaten, Kontaktdaten, Namen, Websitezugriffe und sonstige Daten, die &uuml;ber eine Website generiert werden, handeln.</p>
<p>Der Einsatz des Hosters erfolgt zum Zwecke der Vertragserf&uuml;llung gegen&uuml;ber unseren potenziellen und bestehenden Kunden (Art. 6 Abs. 1 lit. b DSGVO) und im Interesse einer sicheren, schnellen und effizienten Bereitstellung unseres Online-Angebots durch einen professionellen Anbieter (Art. 6 Abs. 1 lit. f DSGVO).</p> <p>Der Einsatz des Hosters erfolgt zum Zwecke der Vertragserf&uuml;llung gegen&uuml;ber unseren potenziellen und bestehenden Kunden (Art. 6 Abs. 1 lit. b DSGVO) und im Interesse einer sicheren, schnellen und effizienten Bereitstellung unseres Online-Angebots durch einen professionellen Anbieter (Art. 6 Abs. 1 lit. f DSGVO).</p>
<p>Unser Hoster wird Ihre Daten nur insoweit verarbeiten, wie dies zur Erf&uuml;llung seiner Leistungspflichten erforderlich ist und unsere Weisungen in Bezug auf diese Daten befolgen.</p> <p>Unser Hoster wird Ihre Daten nur insoweit verarbeiten, wie dies zur Erf&uuml;llung seiner Leistungspflichten erforderlich ist und unsere Weisungen in Bezug auf diese Daten befolgen.</p>
<p>Wir setzen folgenden Hoster ein:</p> <p>Wir setzen folgenden Hoster ein:</p>
<p>netcup GmbH<br>Daimlerstra&szlig;e 25<br>76185 Karlsruhe</p> <p>netcup GmbH<br>Daimlerstra&szlig;e 25<br>76185 Karlsruhe</p>
<div class="space-10"></div>
<h4>Abschluss eines Vertrages &uuml;ber Auftragsverarbeitung</h4> <h4>Abschluss eines Vertrages &uuml;ber Auftragsverarbeitung</h4>
<p>Um die datenschutzkonforme Verarbeitung zu gew&auml;hrleisten, haben wir einen Vertrag &uuml;ber Auftragsverarbeitung mit unserem Hoster geschlossen.</p> <p>Um die datenschutzkonforme Verarbeitung zu gew&auml;hrleisten, haben wir einen Vertrag &uuml;ber Auftragsverarbeitung mit unserem Hoster geschlossen.</p>
<div class="space-50"></div>
<h2>3. Allgemeine Hinweise und Pflicht&shy;informationen</h2> <h2>3. Allgemeine Hinweise und Pflicht&shy;informationen</h2>
<div class="space-10"></div>
<h3>Datenschutz</h3> <h3>Datenschutz</h3>
<p>Die Betreiber dieser Seiten nehmen den Schutz Ihrer pers&ouml;nlichen Daten sehr ernst. Wir behandeln Ihre personenbezogenen Daten vertraulich und entsprechend der gesetzlichen Datenschutzvorschriften sowie dieser Datenschutzerkl&auml;rung.</p> <p>Die Betreiber dieser Seiten nehmen den Schutz Ihrer pers&ouml;nlichen Daten sehr ernst. Wir behandeln Ihre personenbezogenen Daten vertraulich und entsprechend der gesetzlichen Datenschutzvorschriften sowie dieser Datenschutzerkl&auml;rung.</p>
<p>Wenn Sie diese Website benutzen, werden verschiedene personenbezogene Daten erhoben. Personenbezogene Daten sind Daten, mit denen Sie pers&ouml;nlich identifiziert werden k&ouml;nnen. Die vorliegende Datenschutzerkl&auml;rung erl&auml;utert, welche Daten wir erheben und wof&uuml;r wir sie nutzen. Sie erl&auml;utert auch, wie und zu welchem Zweck das geschieht.</p> <p>Wenn Sie diese Website benutzen, werden verschiedene personenbezogene Daten erhoben. Personenbezogene Daten sind Daten, mit denen Sie pers&ouml;nlich identifiziert werden k&ouml;nnen. Die vorliegende Datenschutzerkl&auml;rung erl&auml;utert, welche Daten wir erheben und wof&uuml;r wir sie nutzen. Sie erl&auml;utert auch, wie und zu welchem Zweck das geschieht.</p>
<p>Wir weisen darauf hin, dass die Daten&uuml;bertragung im Internet (z.&nbsp;B. bei der Kommunikation per E-Mail) Sicherheitsl&uuml;cken aufweisen kann. Ein l&uuml;ckenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht m&ouml;glich.</p> <p>Wir weisen darauf hin, dass die Daten&uuml;bertragung im Internet (z.&nbsp;B. bei der Kommunikation per E-Mail) Sicherheitsl&uuml;cken aufweisen kann. Ein l&uuml;ckenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht m&ouml;glich.</p>
<div class="space-25"></div>
<h3>Hinweis zur verantwortlichen Stelle</h3> <h3>Hinweis zur verantwortlichen Stelle</h3>
<p>Die verantwortliche Stelle f&uuml;r die Datenverarbeitung auf dieser Website ist:</p> <p>Die verantwortliche Stelle f&uuml;r die Datenverarbeitung auf dieser Website ist:</p>
<p>Elias Fink<br>E-Mail: mail@eliasfink.de</p> <p>Elias Fink<br>E-Mail-Adresse: &#x6B;&#x6F;&#x6E;&#x74;&#x61;&#x6B;&#x74;&#x40;&#x65;&#x6C;&#x69;&#x61;&#x73;&#x66;&#x69;&#x6E;&#x6B;&#x2E;&#x64;&#x65;</p>
<p>Diese Website dient ausschlie&szlig;lich pers&ouml;nlichen Zwecken, ist nicht kommerziell und enth&auml;lt keine journalistisch-redaktionellen Inhalte. Somit ben&ouml;tigt sie gem&auml;&szlig; &sect; 5 TMG und &sect; 55 Abs. 2 RStV kein Impressum und es ist keine Angabe von Anschrift, Telefon- oder Telefaxnummer der verantwortlichen Stelle erforderlich.</p> <p>Diese Seiten dienen ausschlie&szlig;lich pers&ouml;nlichen, nicht kommerziellen Zwecken und enthalten keine journalistisch-redaktionellen Inhalte. Daher ist gem&auml;&szlig; &sect; 5 TMG und &sect; 55 RStV kein Impressum erforderlich und die Angabe von Anschrift sowie Telefonnummer entf&auml;llt.</p>
<p>Verantwortliche Stelle ist die nat&uuml;rliche oder juristische Person, die allein oder gemeinsam mit anderen &uuml;ber die Zwecke und Mittel der Verarbeitung von personenbezogenen Daten (z.&nbsp;B. Namen, E-Mail-Adressen o. &Auml;.) entscheidet.</p> <p>Verantwortliche Stelle ist die nat&uuml;rliche oder juristische Person, die allein oder gemeinsam mit anderen &uuml;ber die Zwecke und Mittel der Verarbeitung von personenbezogenen Daten (z.&nbsp;B. Namen, E-Mail-Adressen o. &Auml;.) entscheidet.</p>
<div class="space-25"></div>
<h3>Speicherdauer</h3> <h3>Speicherdauer</h3>
<p>Soweit innerhalb dieser Datenschutzerkl&auml;rung keine speziellere Speicherdauer genannt wurde, verbleiben Ihre personenbezogenen Daten bei uns, bis der Zweck f&uuml;r die Datenverarbeitung entf&auml;llt. Wenn Sie ein berechtigtes L&ouml;schersuchen geltend machen oder eine Einwilligung zur Datenverarbeitung widerrufen, werden Ihre Daten gel&ouml;scht, sofern wir keine anderen rechtlich zul&auml;ssigen Gr&uuml;nde f&uuml;r die Speicherung Ihrer personenbezogenen Daten haben (z.&nbsp;B. steuer- oder handelsrechtliche Aufbewahrungsfristen); im letztgenannten Fall erfolgt die L&ouml;schung nach Fortfall dieser Gr&uuml;nde.</p> <p>Soweit innerhalb dieser Datenschutzerkl&auml;rung keine speziellere Speicherdauer genannt wurde, verbleiben Ihre personenbezogenen Daten bei uns, bis der Zweck f&uuml;r die Datenverarbeitung entf&auml;llt. Wenn Sie ein berechtigtes L&ouml;schersuchen geltend machen oder eine Einwilligung zur Datenverarbeitung widerrufen, werden Ihre Daten gel&ouml;scht, sofern wir keine anderen rechtlich zul&auml;ssigen Gr&uuml;nde f&uuml;r die Speicherung Ihrer personenbezogenen Daten haben (z.&nbsp;B. steuer- oder handelsrechtliche Aufbewahrungsfristen); im letztgenannten Fall erfolgt die L&ouml;schung nach Fortfall dieser Gr&uuml;nde.</p>
<div class="space-25"></div>
<h3>Widerruf Ihrer Einwilligung zur Datenverarbeitung</h3> <h3>Widerruf Ihrer Einwilligung zur Datenverarbeitung</h3>
<p>Viele Datenverarbeitungsvorg&auml;nge sind nur mit Ihrer ausdr&uuml;cklichen Einwilligung m&ouml;glich. Sie k&ouml;nnen eine bereits erteilte Einwilligung jederzeit widerrufen. Die Rechtm&auml;&szlig;igkeit der bis zum Widerruf erfolgten Datenverarbeitung bleibt vom Widerruf unber&uuml;hrt.</p> <p>Viele Datenverarbeitungsvorg&auml;nge sind nur mit Ihrer ausdr&uuml;cklichen Einwilligung m&ouml;glich. Sie k&ouml;nnen eine bereits erteilte Einwilligung jederzeit widerrufen. Die Rechtm&auml;&szlig;igkeit der bis zum Widerruf erfolgten Datenverarbeitung bleibt vom Widerruf unber&uuml;hrt.</p>
<div class="space-25"></div>
<h3>Widerspruchsrecht gegen die Datenerhebung in besonderen F&auml;llen sowie gegen Direktwerbung (Art. 21 DSGVO)</h3> <h3>Widerspruchsrecht gegen die Datenerhebung in besonderen F&auml;llen sowie gegen Direktwerbung (Art. 21 DSGVO)</h3>
<p>WENN DIE DATENVERARBEITUNG AUF GRUNDLAGE VON ART. 6 ABS. 1 LIT. E ODER F DSGVO ERFOLGT, HABEN SIE JEDERZEIT DAS RECHT, AUS GR&Uuml;NDEN, DIE SICH AUS IHRER BESONDEREN SITUATION ERGEBEN, GEGEN DIE VERARBEITUNG IHRER PERSONENBEZOGENEN DATEN WIDERSPRUCH EINZULEGEN; DIES GILT AUCH F&Uuml;R EIN AUF DIESE BESTIMMUNGEN GEST&Uuml;TZTES PROFILING. DIE JEWEILIGE RECHTSGRUNDLAGE, AUF DENEN EINE VERARBEITUNG BERUHT, ENTNEHMEN SIE DIESER DATENSCHUTZERKL&Auml;RUNG. WENN SIE WIDERSPRUCH EINLEGEN, WERDEN WIR IHRE BETROFFENEN PERSONENBEZOGENEN DATEN NICHT MEHR VERARBEITEN, ES SEI DENN, WIR K&Ouml;NNEN ZWINGENDE SCHUTZW&Uuml;RDIGE GR&Uuml;NDE F&Uuml;R DIE VERARBEITUNG NACHWEISEN, DIE IHRE INTERESSEN, RECHTE UND FREIHEITEN &Uuml;BERWIEGEN ODER DIE VERARBEITUNG DIENT DER GELTENDMACHUNG, AUS&Uuml;BUNG ODER VERTEIDIGUNG VON RECHTSANSPR&Uuml;CHEN (WIDERSPRUCH NACH ART. 21 ABS. 1 DSGVO).</p> <p>WENN DIE DATENVERARBEITUNG AUF GRUNDLAGE VON ART. 6 ABS. 1 LIT. E ODER F DSGVO ERFOLGT, HABEN SIE JEDERZEIT DAS RECHT, AUS GR&Uuml;NDEN, DIE SICH AUS IHRER BESONDEREN SITUATION ERGEBEN, GEGEN DIE VERARBEITUNG IHRER PERSONENBEZOGENEN DATEN WIDERSPRUCH EINZULEGEN; DIES GILT AUCH F&Uuml;R EIN AUF DIESE BESTIMMUNGEN GEST&Uuml;TZTES PROFILING. DIE JEWEILIGE RECHTSGRUNDLAGE, AUF DENEN EINE VERARBEITUNG BERUHT, ENTNEHMEN SIE DIESER DATENSCHUTZERKL&Auml;RUNG. WENN SIE WIDERSPRUCH EINLEGEN, WERDEN WIR IHRE BETROFFENEN PERSONENBEZOGENEN DATEN NICHT MEHR VERARBEITEN, ES SEI DENN, WIR K&Ouml;NNEN ZWINGENDE SCHUTZW&Uuml;RDIGE GR&Uuml;NDE F&Uuml;R DIE VERARBEITUNG NACHWEISEN, DIE IHRE INTERESSEN, RECHTE UND FREIHEITEN &Uuml;BERWIEGEN ODER DIE VERARBEITUNG DIENT DER GELTENDMACHUNG, AUS&Uuml;BUNG ODER VERTEIDIGUNG VON RECHTSANSPR&Uuml;CHEN (WIDERSPRUCH NACH ART. 21 ABS. 1 DSGVO).</p>
<p>WERDEN IHRE PERSONENBEZOGENEN DATEN VERARBEITET, UM DIREKTWERBUNG ZU BETREIBEN, SO HABEN SIE DAS RECHT, JEDERZEIT WIDERSPRUCH GEGEN DIE VERARBEITUNG SIE BETREFFENDER PERSONENBEZOGENER DATEN ZUM ZWECKE DERARTIGER WERBUNG EINZULEGEN; DIES GILT AUCH F&Uuml;R DAS PROFILING, SOWEIT ES MIT SOLCHER DIREKTWERBUNG IN VERBINDUNG STEHT. WENN SIE WIDERSPRECHEN, WERDEN IHRE PERSONENBEZOGENEN DATEN ANSCHLIESSEND NICHT MEHR ZUM ZWECKE DER DIREKTWERBUNG VERWENDET (WIDERSPRUCH NACH ART. 21 ABS. 2 DSGVO).</p> <p>WERDEN IHRE PERSONENBEZOGENEN DATEN VERARBEITET, UM DIREKTWERBUNG ZU BETREIBEN, SO HABEN SIE DAS RECHT, JEDERZEIT WIDERSPRUCH GEGEN DIE VERARBEITUNG SIE BETREFFENDER PERSONENBEZOGENER DATEN ZUM ZWECKE DERARTIGER WERBUNG EINZULEGEN; DIES GILT AUCH F&Uuml;R DAS PROFILING, SOWEIT ES MIT SOLCHER DIREKTWERBUNG IN VERBINDUNG STEHT. WENN SIE WIDERSPRECHEN, WERDEN IHRE PERSONENBEZOGENEN DATEN ANSCHLIESSEND NICHT MEHR ZUM ZWECKE DER DIREKTWERBUNG VERWENDET (WIDERSPRUCH NACH ART. 21 ABS. 2 DSGVO).</p>
<div class="space-25"></div>
<h3>Beschwerde&shy;recht bei der zust&auml;ndigen Aufsichts&shy;beh&ouml;rde</h3> <h3>Beschwerde&shy;recht bei der zust&auml;ndigen Aufsichts&shy;beh&ouml;rde</h3>
<p>Im Falle von Verst&ouml;&szlig;en gegen die DSGVO steht den Betroffenen ein Beschwerderecht bei einer Aufsichtsbeh&ouml;rde, insbesondere in dem Mitgliedstaat ihres gew&ouml;hnlichen Aufenthalts, ihres Arbeitsplatzes oder des Orts des mutma&szlig;lichen Versto&szlig;es zu. Das Beschwerderecht besteht unbeschadet anderweitiger verwaltungsrechtlicher oder gerichtlicher Rechtsbehelfe.</p> <p>Im Falle von Verst&ouml;&szlig;en gegen die DSGVO steht den Betroffenen ein Beschwerderecht bei einer Aufsichtsbeh&ouml;rde, insbesondere in dem Mitgliedstaat ihres gew&ouml;hnlichen Aufenthalts, ihres Arbeitsplatzes oder des Orts des mutma&szlig;lichen Versto&szlig;es zu. Das Beschwerderecht besteht unbeschadet anderweitiger verwaltungsrechtlicher oder gerichtlicher Rechtsbehelfe.</p>
<div class="space-25"></div>
<h3>Recht auf Daten&shy;&uuml;bertrag&shy;barkeit</h3> <h3>Recht auf Daten&shy;&uuml;bertrag&shy;barkeit</h3>
<p>Sie haben das Recht, Daten, die wir auf Grundlage Ihrer Einwilligung oder in Erf&uuml;llung eines Vertrags automatisiert verarbeiten, an sich oder an einen Dritten in einem g&auml;ngigen, maschinenlesbaren Format aush&auml;ndigen zu lassen. Sofern Sie die direkte &Uuml;bertragung der Daten an einen anderen Verantwortlichen verlangen, erfolgt dies nur, soweit es technisch machbar ist.</p> <p>Sie haben das Recht, Daten, die wir auf Grundlage Ihrer Einwilligung oder in Erf&uuml;llung eines Vertrags automatisiert verarbeiten, an sich oder an einen Dritten in einem g&auml;ngigen, maschinenlesbaren Format aush&auml;ndigen zu lassen. Sofern Sie die direkte &Uuml;bertragung der Daten an einen anderen Verantwortlichen verlangen, erfolgt dies nur, soweit es technisch machbar ist.</p>
<div class="space-25"></div>
<h3>SSL- bzw. TLS-Verschl&uuml;sselung</h3> <h3>SSL- bzw. TLS-Verschl&uuml;sselung</h3>
<p>Diese Seite nutzt aus Sicherheitsgr&uuml;nden und zum Schutz der &Uuml;bertragung vertraulicher Inhalte, wie zum Beispiel Bestellungen oder Anfragen, die Sie an uns als Seitenbetreiber senden, eine SSL- bzw. TLS-Verschl&uuml;sselung. Eine verschl&uuml;sselte Verbindung erkennen Sie daran, dass die Adresszeile des Browsers von &bdquo;http://&ldquo; auf &bdquo;https://&ldquo; wechselt und an dem Schloss-Symbol in Ihrer Browserzeile.</p> <p>Diese Seite nutzt aus Sicherheitsgr&uuml;nden und zum Schutz der &Uuml;bertragung vertraulicher Inhalte, wie zum Beispiel Bestellungen oder Anfragen, die Sie an uns als Seitenbetreiber senden, eine SSL- bzw. TLS-Verschl&uuml;sselung. Eine verschl&uuml;sselte Verbindung erkennen Sie daran, dass die Adresszeile des Browsers von &bdquo;http://&ldquo; auf &bdquo;https://&ldquo; wechselt und an dem Schloss-Symbol in Ihrer Browserzeile.</p>
<p>Wenn die SSL- bzw. TLS-Verschl&uuml;sselung aktiviert ist, k&ouml;nnen die Daten, die Sie an uns &uuml;bermitteln, nicht von Dritten mitgelesen werden.</p> <p>Wenn die SSL- bzw. TLS-Verschl&uuml;sselung aktiviert ist, k&ouml;nnen die Daten, die Sie an uns &uuml;bermitteln, nicht von Dritten mitgelesen werden.</p>
<div class="space-25"></div>
<h3>Auskunft, L&ouml;schung und Berichtigung</h3> <h3>Auskunft, L&ouml;schung und Berichtigung</h3>
<p>Sie haben im Rahmen der geltenden gesetzlichen Bestimmungen jederzeit das Recht auf unentgeltliche Auskunft &uuml;ber Ihre gespeicherten personenbezogenen Daten, deren Herkunft und Empf&auml;nger und den Zweck der Datenverarbeitung und ggf. ein Recht auf Berichtigung oder L&ouml;schung dieser Daten. Hierzu sowie zu weiteren Fragen zum Thema personenbezogene Daten k&ouml;nnen Sie sich jederzeit an uns wenden.</p> <p>Sie haben im Rahmen der geltenden gesetzlichen Bestimmungen jederzeit das Recht auf unentgeltliche Auskunft &uuml;ber Ihre gespeicherten personenbezogenen Daten, deren Herkunft und Empf&auml;nger und den Zweck der Datenverarbeitung und ggf. ein Recht auf Berichtigung oder L&ouml;schung dieser Daten. Hierzu sowie zu weiteren Fragen zum Thema personenbezogene Daten k&ouml;nnen Sie sich jederzeit an uns wenden.</p>
<div class="space-25"></div>
<h3>Recht auf Einschr&auml;nkung der Verarbeitung</h3> <h3>Recht auf Einschr&auml;nkung der Verarbeitung</h3>
<p>Sie haben das Recht, die Einschr&auml;nkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen. Hierzu k&ouml;nnen Sie sich jederzeit an uns wenden. Das Recht auf Einschr&auml;nkung der Verarbeitung besteht in folgenden F&auml;llen:</p> <p>Sie haben das Recht, die Einschr&auml;nkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen. Hierzu k&ouml;nnen Sie sich jederzeit an uns wenden. Das Recht auf Einschr&auml;nkung der Verarbeitung besteht in folgenden F&auml;llen:</p>
<ul> <ul>
@@ -92,10 +71,8 @@
<li>Wenn wir Ihre personenbezogenen Daten nicht mehr ben&ouml;tigen, Sie sie jedoch zur Aus&uuml;bung, Verteidigung oder Geltendmachung von Rechtsanspr&uuml;chen ben&ouml;tigen, haben Sie das Recht, statt der L&ouml;schung die Einschr&auml;nkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen.</li> <li>Wenn wir Ihre personenbezogenen Daten nicht mehr ben&ouml;tigen, Sie sie jedoch zur Aus&uuml;bung, Verteidigung oder Geltendmachung von Rechtsanspr&uuml;chen ben&ouml;tigen, haben Sie das Recht, statt der L&ouml;schung die Einschr&auml;nkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen.</li>
<li>Wenn Sie einen Widerspruch nach Art. 21 Abs. 1 DSGVO eingelegt haben, muss eine Abw&auml;gung zwischen Ihren und unseren Interessen vorgenommen werden. Solange noch nicht feststeht, wessen Interessen &uuml;berwiegen, haben Sie das Recht, die Einschr&auml;nkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen.</li> </ul> <li>Wenn Sie einen Widerspruch nach Art. 21 Abs. 1 DSGVO eingelegt haben, muss eine Abw&auml;gung zwischen Ihren und unseren Interessen vorgenommen werden. Solange noch nicht feststeht, wessen Interessen &uuml;berwiegen, haben Sie das Recht, die Einschr&auml;nkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen.</li> </ul>
<p>Wenn Sie die Verarbeitung Ihrer personenbezogenen Daten eingeschr&auml;nkt haben, d&uuml;rfen diese Daten &ndash; von ihrer Speicherung abgesehen &ndash; nur mit Ihrer Einwilligung oder zur Geltendmachung, Aus&uuml;bung oder Verteidigung von Rechtsanspr&uuml;chen oder zum Schutz der Rechte einer anderen nat&uuml;rlichen oder juristischen Person oder aus Gr&uuml;nden eines wichtigen &ouml;ffentlichen Interesses der Europ&auml;ischen Union oder eines Mitgliedstaats verarbeitet werden.</p> <p>Wenn Sie die Verarbeitung Ihrer personenbezogenen Daten eingeschr&auml;nkt haben, d&uuml;rfen diese Daten &ndash; von ihrer Speicherung abgesehen &ndash; nur mit Ihrer Einwilligung oder zur Geltendmachung, Aus&uuml;bung oder Verteidigung von Rechtsanspr&uuml;chen oder zum Schutz der Rechte einer anderen nat&uuml;rlichen oder juristischen Person oder aus Gr&uuml;nden eines wichtigen &ouml;ffentlichen Interesses der Europ&auml;ischen Union oder eines Mitgliedstaats verarbeitet werden.</p>
<div class="space-50"></div>
<h2>4. Datenerfassung auf dieser Website</h2> <h2>4. Datenerfassung auf dieser Website</h2>
<div class="space-10"></div>
<h3>Server-Log-Dateien</h3> <h3>Server-Log-Dateien</h3>
<p>Der Provider der Seiten erhebt und speichert automatisch Informationen in so genannten Server-Log-Dateien, die Ihr Browser automatisch an uns &uuml;bermittelt. Dies sind:</p> <p>Der Provider der Seiten erhebt und speichert automatisch Informationen in so genannten Server-Log-Dateien, die Ihr Browser automatisch an uns &uuml;bermittelt. Dies sind:</p>
<ul> <ul>
@@ -108,16 +85,14 @@
</ul> </ul>
<p>Eine Zusammenf&uuml;hrung dieser Daten mit anderen Datenquellen wird nicht vorgenommen.</p> <p>Eine Zusammenf&uuml;hrung dieser Daten mit anderen Datenquellen wird nicht vorgenommen.</p>
<p>Die Erfassung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1 lit. f DSGVO. Der Websitebetreiber hat ein berechtigtes Interesse an der technisch fehlerfreien Darstellung und der Optimierung seiner Website &ndash; hierzu m&uuml;ssen die Server-Log-Files erfasst werden.</p> <p>Die Erfassung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1 lit. f DSGVO. Der Websitebetreiber hat ein berechtigtes Interesse an der technisch fehlerfreien Darstellung und der Optimierung seiner Website &ndash; hierzu m&uuml;ssen die Server-Log-Files erfasst werden.</p>
<div class="space-25"></div>
<h3>Anfrage per E-Mail, Telefon oder Telefax</h3> <h3>Anfrage per E-Mail, Telefon oder Telefax</h3>
<p>Wenn Sie uns per E-Mail, Telefon oder Telefax kontaktieren, wird Ihre Anfrage inklusive aller daraus hervorgehenden personenbezogenen Daten (Name, Anfrage) zum Zwecke der Bearbeitung Ihres Anliegens bei uns gespeichert und verarbeitet. Diese Daten geben wir nicht ohne Ihre Einwilligung weiter.</p> <p>Wenn Sie uns per E-Mail, Telefon oder Telefax kontaktieren, wird Ihre Anfrage inklusive aller daraus hervorgehenden personenbezogenen Daten (Name, Anfrage) zum Zwecke der Bearbeitung Ihres Anliegens bei uns gespeichert und verarbeitet. Diese Daten geben wir nicht ohne Ihre Einwilligung weiter.</p>
<p>Die Verarbeitung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1 lit. b DSGVO, sofern Ihre Anfrage mit der Erf&uuml;llung eines Vertrags zusammenh&auml;ngt oder zur Durchf&uuml;hrung vorvertraglicher Ma&szlig;nahmen erforderlich ist. In allen &uuml;brigen F&auml;llen beruht die Verarbeitung auf unserem berechtigten Interesse an der effektiven Bearbeitung der an uns gerichteten Anfragen (Art. 6 Abs. 1 lit. f DSGVO) oder auf Ihrer Einwilligung (Art. 6 Abs. 1 lit. a DSGVO) sofern diese abgefragt wurde.</p> <p>Die Verarbeitung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1 lit. b DSGVO, sofern Ihre Anfrage mit der Erf&uuml;llung eines Vertrags zusammenh&auml;ngt oder zur Durchf&uuml;hrung vorvertraglicher Ma&szlig;nahmen erforderlich ist. In allen &uuml;brigen F&auml;llen beruht die Verarbeitung auf unserem berechtigten Interesse an der effektiven Bearbeitung der an uns gerichteten Anfragen (Art. 6 Abs. 1 lit. f DSGVO) oder auf Ihrer Einwilligung (Art. 6 Abs. 1 lit. a DSGVO) sofern diese abgefragt wurde.</p>
<p>Die von Ihnen an uns per Kontaktanfragen &uuml;bersandten Daten verbleiben bei uns, bis Sie uns zur L&ouml;schung auffordern, Ihre Einwilligung zur Speicherung widerrufen oder der Zweck f&uuml;r die Datenspeicherung entf&auml;llt (z.&nbsp;B. nach abgeschlossener Bearbeitung Ihres Anliegens). Zwingende gesetzliche Bestimmungen &ndash; insbesondere gesetzliche Aufbewahrungsfristen &ndash; bleiben unber&uuml;hrt.</p> <p>Die von Ihnen an uns per Kontaktanfragen &uuml;bersandten Daten verbleiben bei uns, bis Sie uns zur L&ouml;schung auffordern, Ihre Einwilligung zur Speicherung widerrufen oder der Zweck f&uuml;r die Datenspeicherung entf&auml;llt (z.&nbsp;B. nach abgeschlossener Bearbeitung Ihres Anliegens). Zwingende gesetzliche Bestimmungen &ndash; insbesondere gesetzliche Aufbewahrungsfristen &ndash; bleiben unber&uuml;hrt.</p>
<div class="space-50"></div>
<p>Quelle: <a href="https://www.e-recht24.de" target="_blank" rel="noopener noreferrer nofollow">e-recht24.de</a></p> <p>Quelle: <a href="https://www.e-recht24.de" target="_blank" rel="noopener noreferrer nofollow">e-recht24.de</a></p>
</div> </main>
</body> </body>

View File

@@ -1,128 +1,58 @@
:root {
--blue-1: #001A33;
--blue-2: #004D99;
--blue-3: #0080FF;
--blue-4: #66B3FF;
--blue-5: #CCE6FF;
--grey-1: #161A1D;
--grey-2: #434D56;
--grey-3: #708090;
--grey-4: #A9B3BC;
--grey-5: #E2E6E9;
}
* { * {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
body { html {
font-size: 18px;
line-height: 1.5;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
font-size: 16px;
line-height: 1.4;
} }
h1, h2, h3, h4, p { h1, h2, h3, h4, p, ul {
margin-bottom: 0.5em; margin-bottom: 0.5rem;
} }
h1, h2, h3 { h1, h2, h3, h4 {
line-height: 1.3;
font-weight: bold; font-weight: bold;
line-height: 1.2;
} }
h1 { h1 {
font-size: 35px; font-size: 2rem;
} }
h2 { h2 {
font-size: 30px; font-size: 1.75rem;
margin-top: 4rem;
} }
h3 { h3 {
font-size: 25px; font-size: 1.5rem;
margin-top: 2rem;
} }
h4 { h4 {
font-size: 20px; font-size: 1.25rem;
margin-top: 1.5rem;
} }
ul { ul {
margin: 0 0 1em 2.5em; margin-left: 2rem;
} }
a { a {
color: #000; border-bottom: 1px solid var(--blue-medium);
color: black;
text-decoration: none; text-decoration: none;
border-bottom: 1px solid var(--blue-3);
} }
a:hover { a:hover {
color: var(--blue-3); color: var(--blue-medium);
} }
#container { #container {
padding: 25px; margin: 3rem auto;
margin: 50px auto; max-width: 1200px;
max-width: 1250px; padding: 1.5rem;
}
.space-10 {
height: 10px;
}
.space-25 {
height: 25px;
}
.space-50 {
height: 50px;
}
@media (max-width: 1023px) {
h1 {
font-size: 32px;
}
h2 {
font-size: 28px;
}
h3 {
font-size: 23px;
}
h4 {
font-size: 19px;
}
body {
font-size: 17px;
}
}
@media (max-width: 767px) {
h1 {
font-size: 30px;
}
h2 {
font-size: 26px;
}
h3 {
font-size: 22px;
}
h4 {
font-size: 18px;
}
body {
font-size: 16px;
}
} }

BIN
static/.DS_Store vendored

Binary file not shown.

View File

@@ -1,13 +1,5 @@
Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Origin "*"
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
ErrorDocument 403 /index.php
ErrorDocument 404 /index.php
DirectoryIndex index.php
order deny,allow
<IfModule mod_expires.c> <IfModule mod_expires.c>
ExpiresActive On ExpiresActive On
ExpiresDefault A2592000 ExpiresDefault A2592000

View File

@@ -1,44 +0,0 @@
Header set Access-Control-Allow-Origin "*"
Options +Indexes
IndexOptions Charset=UTF-8 FancyIndexing HTMLTable IgnoreCase FoldersFirst VersionSort IconsAreLinks IconWidth=25 IconHeight=25 SuppressLastModified SuppressDescription
IndexOrderDefault Ascending Name
IndexIgnore autoindex
IndexHeadInsert "<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"
IndexStyleSheet /autoindex/style.css
HeaderName /autoindex/header.html
DefaultIcon /autoindex/icon-file.svg
AddIcon /autoindex/icon-file-image.svg .png .gif .jpg .jpeg .ico .svg
AddIcon /autoindex/icon-file-text.svg .html .css .js .xml .webmanifest
AddIcon /autoindex/icon-folder.svg ^^DIRECTORY^^
AddIcon /autoindex/icon-back.svg ..
ErrorDocument 404 /autoindex/redirect.html
ErrorDocument 403 /autoindex/redirect.html
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A2592000
ExpiresByType text/css A604800
ExpiresByType text/javascript A604800
ExpiresByType application/javascript A604800
</IfModule>
<filesMatch ".(css|js)$">
Header set Cache-Control "max-age=604800, public"
</filesMatch>
<filesMatch ".(png|gif|jpg|jpeg|ico|svg|eot|otf|ttf|woff|woff2|xml|webmanifest)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
<filesMatch ".(html|css|js|png|gif|jpg|jpeg|ico|svg|eot|otf|ttf|woff|woff2|xml|webmanifest)$">
SetOutputFilter DEFLATE
</FilesMatch>
<IfModule mod_headers.c>
<FilesMatch ".(html|css|js|png|gif|jpg|jpeg|ico|svg|eot|otf|ttf|woff|woff2|xml|webmanifest)$">
Header append Vary: Accept-Encoding
</FilesMatch>
</IfModule>

View File

@@ -1,19 +0,0 @@
<script src="/js/jquery.min.js"></script>
<script>
$(document).ready(function() {
$("td.indexcolsize").each(function() {
$(this).html($(this).html().replace("K", "&nbsp;KB"));
$(this).html($(this).html().replace("M", "&nbsp;MB"));
$(this).html($(this).html().replace("G", "&nbsp;GB"));
$(this).html($(this).html().replace("-", ""));
});
});
</script>
<div id="header">
<a href="/">
<svg id="logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 428.703 37.638">
<path fill="#168eff" d="M0 34.366l1.6-2.8q1.65 1.3 4.15 2.125 2.5.825 5.2.825 3.6 0 5.325-1.125Q18 32.266 18 30.216q0-1.45-.95-2.275-.95-.825-2.4-1.25-1.45-.425-3.85-.825-3.2-.6-5.15-1.225-1.95-.625-3.325-2.125-1.375-1.5-1.375-4.15 0-3.3 2.75-5.4 2.75-2.1 7.65-2.1 2.55 0 5.1.675 2.55.675 4.2 1.775l-1.55 2.85q-3.25-2.25-7.75-2.25-3.4 0-5.125 1.2-1.725 1.2-1.725 3.15 0 1.5.975 2.4.975.9 2.425 1.325 1.45.425 4 .875 3.15.6 5.05 1.2 1.9.6 3.25 2.05 1.35 1.45 1.35 4 0 3.45-2.875 5.475-2.875 2.025-7.975 2.025-3.2 0-6.125-.925Q1.65 35.766 0 34.366zm40.7-1.15l1.25 2.55q-1 .9-2.475 1.375-1.475.475-3.075.475-3.7 0-5.7-2-2-2-2-5.65v-15.9H24v-3h4.7v-5.75h3.55v5.75h8v3h-8v15.7q0 2.35 1.175 3.575 1.175 1.225 3.375 1.225 1.1 0 2.125-.35 1.025-.35 1.775-1zm27.55-12.15v16.3h-3.4v-4.1q-1.2 2.05-3.525 3.2-2.325 1.15-5.525 1.15-4.4 0-7-2.1-2.6-2.1-2.6-5.55 0-3.35 2.425-5.4 2.425-2.05 7.725-2.05h8.35v-1.6q0-3.4-1.9-5.175-1.9-1.775-5.55-1.775-2.5 0-4.8.825-2.3.825-3.95 2.275l-1.6-2.65q2-1.7 4.8-2.625 2.8-.925 5.9-.925 5.15 0 7.9 2.575 2.75 2.575 2.75 7.625zm-3.55 8.4v-4.3h-8.25q-6.75 0-6.75 4.7 0 2.3 1.75 3.625 1.75 1.325 4.9 1.325 3 0 5.15-1.375 2.15-1.375 3.2-3.975zm25.8 3.75l1.25 2.55q-1 .9-2.475 1.375-1.475.475-3.075.475-3.7 0-5.7-2-2-2-2-5.65v-15.9h-4.7v-3h4.7v-5.75h3.55v5.75h8v3h-8v15.7q0 2.35 1.175 3.575 1.175 1.225 3.375 1.225 1.1 0 2.125-.35 1.025-.35 1.775-1zm7.7 4.15v-26.3h3.55v26.3H98.2zm1.8-32.05q-1.1 0-1.85-.75-.75-.75-.75-1.8 0-1 .75-1.75.75-.75 1.85-.75 1.1 0 1.85.725.75.725.75 1.725 0 1.1-.75 1.85-.75.75-1.85.75zm32.85 10.75l-2.65 1.8q-1.3-1.95-3.3-2.925-2-.975-4.35-.975-2.85 0-5.125 1.275-2.275 1.275-3.55 3.625-1.275 2.35-1.275 5.35 0 3.05 1.275 5.375 1.275 2.325 3.55 3.6 2.275 1.275 5.125 1.275 2.35 0 4.35-.95 2-.95 3.3-2.9l2.65 1.8q-1.55 2.55-4.25 3.875-2.7 1.325-6.05 1.325-3.9 0-6.975-1.7-3.075-1.7-4.825-4.775-1.75-3.075-1.75-6.925 0-3.85 1.75-6.9 1.75-3.05 4.825-4.75 3.075-1.7 6.975-1.7 3.4 0 6.075 1.325 2.675 1.325 4.225 3.875z"/>
<path fill="#000" d="M141.15 37.616q-1.1 0-1.875-.8-.775-.8-.775-1.95 0-1.15.775-1.925.775-.775 1.875-.775 1.1 0 1.9.775.8.775.8 1.925 0 1.15-.8 1.95-.8.8-1.9.8zm33.2-13.4l-.05 1.1h-22q.3 4.1 3.15 6.625 2.85 2.525 7.2 2.525 2.45 0 4.5-.875 2.05-.875 3.55-2.575l2 2.3q-1.75 2.1-4.375 3.2-2.625 1.1-5.775 1.1-4.05 0-7.175-1.725-3.125-1.725-4.875-4.775-1.75-3.05-1.75-6.9 0-3.85 1.675-6.9 1.675-3.05 4.6-4.75 2.925-1.7 6.575-1.7 3.65 0 6.55 1.7 2.9 1.7 4.55 4.725 1.65 3.025 1.65 6.925zm-22.05-1.55h18.65q-.35-3.9-2.925-6.325-2.575-2.425-6.425-2.425-3.8 0-6.375 2.425-2.575 2.425-2.925 6.325zm29.3 14.7V.266h3.55v37.1h-3.55zm13.45 0v-26.3h3.55v26.3h-3.55zm1.8-32.05q-1.1 0-1.85-.75-.75-.75-.75-1.8 0-1 .75-1.75.75-.75 1.85-.75 1.1 0 1.85.725.75.725.75 1.725 0 1.1-.75 1.85-.75.75-1.85.75zm31.5 15.75v16.3h-3.4v-4.1q-1.2 2.05-3.525 3.2-2.325 1.15-5.525 1.15-4.4 0-7-2.1-2.6-2.1-2.6-5.55 0-3.35 2.425-5.4 2.425-2.05 7.725-2.05h8.35v-1.6q0-3.4-1.9-5.175-1.9-1.775-5.55-1.775-2.5 0-4.8.825-2.3.825-3.95 2.275l-1.6-2.65q2-1.7 4.8-2.625 2.8-.925 5.9-.925 5.15 0 7.9 2.575 2.75 2.575 2.75 7.625zm-3.55 8.4v-4.3h-8.25q-6.75 0-6.75 4.7 0 2.3 1.75 3.625 1.75 1.325 4.9 1.325 3 0 5.15-1.375 2.15-1.375 3.2-3.975zm9.55 4.9l1.6-2.8q1.65 1.3 4.15 2.125 2.5.825 5.2.825 3.6 0 5.325-1.125 1.725-1.125 1.725-3.175 0-1.45-.95-2.275-.95-.825-2.4-1.25-1.45-.425-3.85-.825-3.2-.6-5.15-1.225-1.95-.625-3.325-2.125-1.375-1.5-1.375-4.15 0-3.3 2.75-5.4 2.75-2.1 7.65-2.1 2.55 0 5.1.675 2.55.675 4.2 1.775l-1.55 2.85q-3.25-2.25-7.75-2.25-3.4 0-5.125 1.2-1.725 1.2-1.725 3.15 0 1.5.975 2.4.975.9 2.425 1.325 1.45.425 4 .875 3.15.6 5.05 1.2 1.9.6 3.25 2.05 1.35 1.45 1.35 4 0 3.45-2.875 5.475-2.875 2.025-7.975 2.025-3.2 0-6.125-.925-2.925-.925-4.575-2.325zm32.15-26.4v3.1h8.1v3h-8v23.3h-3.55v-23.3h-4.7v-3h4.7v-3.25q0-3.6 2.075-5.7Q267.2.016 271 .016q1.5 0 2.9.425 1.4.425 2.35 1.225l-1.2 2.65q-1.55-1.3-3.9-1.3-2.3 0-3.475 1.25-1.175 1.25-1.175 3.7zm16.9 29.4v-26.3h3.55v26.3h-3.55zm1.8-32.05q-1.1 0-1.85-.75-.75-.75-.75-1.8 0-1 .75-1.75.75-.75 1.85-.75 1.1 0 1.85.725.75.725.75 1.725 0 1.1-.75 1.85-.75.75-1.85.75zm35.85 16.8v15.25h-3.55v-14.9q0-4.1-2.05-6.25-2.05-2.15-5.85-2.15-4.25 0-6.725 2.525-2.475 2.525-2.475 6.975v13.8h-3.55v-26.3h3.4v4.85q1.45-2.4 4.025-3.725 2.575-1.325 5.975-1.325 4.95 0 7.875 2.875 2.925 2.875 2.925 8.375zm30 15.25l-10.6-13.2-6.2 5.7v7.5h-3.55V.266h3.55v25.15l15.7-14.35h4.4l-11.25 10.75 12.3 15.55h-4.35zm10.55.25q-1.1 0-1.875-.8-.775-.8-.775-1.95 0-1.15.775-1.925.775-.775 1.875-.775 1.1 0 1.9.775.8.775.8 1.925 0 1.15-.8 1.95-.8.8-1.9.8zM392.3.266h3.55v37.1h-3.4v-5.2q-1.6 2.65-4.225 4.05-2.625 1.4-5.925 1.4-3.7 0-6.7-1.7-3-1.7-4.7-4.75-1.7-3.05-1.7-6.95 0-3.9 1.7-6.95 1.7-3.05 4.7-4.725 3-1.675 6.7-1.675 3.2 0 5.775 1.325 2.575 1.325 4.225 3.875V.266zm-9.7 34.2q2.75 0 4.975-1.275 2.225-1.275 3.5-3.625 1.275-2.35 1.275-5.35 0-3-1.275-5.35-1.275-2.35-3.5-3.625-2.225-1.275-4.975-1.275-2.8 0-5.025 1.275-2.225 1.275-3.5 3.625-1.275 2.35-1.275 5.35 0 3 1.275 5.35 1.275 2.35 3.5 3.625 2.225 1.275 5.025 1.275zm46.1-10.25l-.05 1.1h-22q.3 4.1 3.15 6.625 2.85 2.525 7.2 2.525 2.45 0 4.5-.875 2.05-.875 3.55-2.575l2 2.3q-1.75 2.1-4.375 3.2-2.625 1.1-5.775 1.1-4.05 0-7.175-1.725-3.125-1.725-4.875-4.775-1.75-3.05-1.75-6.9 0-3.85 1.675-6.9 1.675-3.05 4.6-4.75 2.925-1.7 6.575-1.7 3.65 0 6.55 1.7 2.9 1.7 4.55 4.725 1.65 3.025 1.65 6.925zm-22.05-1.55h18.65q-.35-3.9-2.925-6.325-2.575-2.425-6.425-2.425-3.8 0-6.375 2.425-2.575 2.425-2.925 6.325z"/>
</svg>
</a>
</div>

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.88 75.32"><polygon fill="#000" points="0,37.66 37.99,75.32 37.99,51.08 122.88,51.08 122.88,24.24 37.99,24.24 37.99,0 0,37.66"></polygon></svg>

Before

Width:  |  Height:  |  Size: 199 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path fill="#90CAF9" d="M40 45L8 45 8 3 30 3 40 13z"></path><path fill="#E1F5FE" d="M38.5 14L29 14 29 4.5z"></path><path fill="#1565C0" d="M21 23L14 33 28 33z"></path><path fill="#1976D2" d="M28 26.4L23 33 33 33zM31.5 23A1.5 1.5 0 1 0 31.5 26 1.5 1.5 0 1 0 31.5 23z"></path></svg>

Before

Width:  |  Height:  |  Size: 340 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path fill="#90CAF9" d="M40 45L8 45 8 3 30 3 40 13z"></path><path fill="#E1F5FE" d="M38.5 14L29 14 29 4.5z"></path><path fill="#1976D2" d="M16 21H33V23H16zM16 25H29V27H16zM16 29H33V31H16zM16 33H29V35H16z"></path></svg>

Before

Width:  |  Height:  |  Size: 278 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path fill="#90CAF9" d="M40 45L8 45 8 3 30 3 40 13z"></path><path fill="#E1F5FE" d="M38.5 14L29 14 29 4.5z"></path></svg>

Before

Width:  |  Height:  |  Size: 181 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path fill="#FFA000" d="M38,12H22l-4-4H8c-2.2,0-4,1.8-4,4v24c0,2.2,1.8,4,4,4h31c1.7,0,3-1.3,3-3V16C42,13.8,40.2,12,38,12z"></path><path fill="#FFCA28" d="M42.2,18H15.3c-1.9,0-3.6,1.4-3.9,3.3L8,40h31.7c1.9,0,3.6-1.4,3.9-3.3l2.5-14C46.6,20.3,44.7,18,42.2,18z"></path></svg>

Before

Width:  |  Height:  |  Size: 331 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path fill="#FFA000" d="M40,12H22l-4-4H8c-2.2,0-4,1.8-4,4v8h40v-4C44,13.8,42.2,12,40,12z"></path><path fill="#FFCA28" d="M40,12H8c-2.2,0-4,1.8-4,4v20c0,2.2,1.8,4,4,4h32c2.2,0,4-1.8,4-4V16C44,13.8,42.2,12,40,12z"></path></svg>

Before

Width:  |  Height:  |  Size: 285 B

View File

@@ -1 +0,0 @@
<!DOCTYPE html><html><head><meta http-equiv="refresh" content="0;url=https://static.eliasfink.de/"></head></html>

View File

@@ -1,48 +0,0 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
}
a {
color: #000;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
#header {
margin-top: 7.5vh;
text-align: center;
}
#logo {
width: 350px;
max-width: 90vw;
}
#indexlist {
padding: 10px;
font-size: 18px;
text-align: left;
line-height: 1.5;
margin: 2.5vh auto;
}
.indexcolicon {
width: 30px;
}
.indexcolname {
width: 315px;
padding-right: 15px;
}
.indexcolsize {
width: 75px;
}
address {
display: none;
}

BIN
static/fonts/.DS_Store vendored

Binary file not shown.

BIN
static/img/.DS_Store vendored

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000" height="1000"><svg id="SvgjsSvg1050" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<circle cx="500" cy="500" r="500" fill="#0080FF"></circle>
<g fill="#FFFFFF">
<rect x="425" y="250" width="50" height="500"></rect>
<rect x="525" y="250" width="50" height="500"></rect>
<rect x="200" y="250" width="250" height="50"></rect>
<rect x="200" y="475" width="250" height="50"></rect>
<rect x="200" y="700" width="250" height="50"></rect>
<rect x="550" y="250" width="250" height="50"></rect>
<rect x="550" y="475" width="250" height="50"></rect>
</g>
</svg><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
@media (prefers-color-scheme: dark) { :root { filter: none; } }
</style></svg>

After

Width:  |  Height:  |  Size: 886 B

View File

@@ -0,0 +1,19 @@
{
"icons": [
{
"src": "https://static.eliasfink.de/img/favicon/web-app-manifest-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "https://static.eliasfink.de/img/favicon/web-app-manifest-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="mstile-150x150.png"/>
<TileColor>#ffffff</TileColor>
</tile>
</msapplication>
</browserconfig>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -1,24 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1000.000000pt" height="1000.000000pt" viewBox="0 0 1000.000000 1000.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,1000.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M4620 9990 c-1527 -125 -2874 -903 -3744 -2160 -424 -612 -713 -1343
-821 -2073 -45 -305 -50 -386 -49 -772 0 -320 3 -395 22 -554 89 -729 314
-1391 680 -2001 782 -1304 2130 -2192 3627 -2389 448 -59 1007 -53 1432 14
596 94 1189 300 1698 589 158 90 463 294 598 399 714 558 1265 1292 1590 2117
236 599 347 1188 347 1840 0 130 -5 297 -10 371 -82 1059 -477 2028 -1165
2854 -129 155 -447 474 -600 601 -775 643 -1657 1025 -2650 1145 -192 23 -765
34 -955 19z m180 -4990 l0 -2600 -1450 0 -1450 0 0 250 0 250 1200 0 1200 0 0
925 0 925 -1200 0 -1200 0 0 250 0 250 1200 0 1200 0 0 925 0 925 -1200 0
-1200 0 0 250 0 250 1450 0 1450 0 0 -2600z m3300 2350 l0 -250 -1200 0 -1200
0 0 -925 0 -925 1200 0 1200 0 0 -250 0 -250 -1200 0 -1200 0 0 -1175 0 -1175
-250 0 -250 0 0 2600 0 2600 1450 0 1450 0 0 -250z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,19 +0,0 @@
{
"name": "Elias Fink",
"short_name": "Elias Fink",
"icons": [
{
"src": "android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<svg id="lettering" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1086.2 142.063">
<title>Schriftzug dunkel</title>
<defs>
<linearGradient id="logo-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="rgb(22,232,255)"/>
<stop offset="100%" stop-color="rgb(22,52,255)"/>
</linearGradient>
</defs>
<path fill="#000" d="M10.2 131.833h86.4v9.2H0v-140h93.6v9.2H10.2v55.2h74.6v9H10.2v57.4zm123.6 9.2v-140H144v130.8h80.6v9.2h-90.8zm117 0v-140H261v140h-10.2zm163.6 0l-18-39.4h-81.2l-17.8 39.4h-11l64.4-140H361l64.4 140h-11zm-95.2-48h73.4l-36.8-80.8-36.6 80.8zm117.4 30l4.6-7.6q7.4 7.8 19.9 12.7 12.5 4.9 26.3 4.9 20 0 30.2-7.6 10.2-7.6 10.2-19.8 0-9.4-5.4-15-5.4-5.6-13.4-8.6-8-3-21.6-6.2-15.4-3.8-24.7-7.4-9.3-3.6-15.8-11.1-6.5-7.5-6.5-20.1 0-10.2 5.4-18.7 5.4-8.5 16.5-13.5 11.1-5 27.7-5 11.6 0 22.8 3.4 11.2 3.4 19.4 9.2l-3.8 8.2q-8.4-5.8-18.5-8.8-10.1-3-19.9-3-19.4 0-29.4 7.8-10 7.8-10 20.2 0 9.4 5.4 15 5.4 5.6 13.4 8.6 8 3 21.8 6.4 15.4 3.8 24.6 7.4 9.2 3.6 15.7 10.9 6.5 7.3 6.5 19.7 0 10.2-5.5 18.6-5.5 8.4-16.9 13.4-11.4 5-28 5-15.4 0-29.3-5.3-13.9-5.3-21.7-13.7z"/>
<path fill="url(#logo-gradient)" d="M717.6 10.233h-83.4v59.8h74.6v9.2h-74.6v61.8H624v-140h93.6v9.2zm32.6 130.8v-140h10.2v140h-10.2zm162.8-140h10.2v140h-8.4l-95.4-121.6v121.6h-10.2v-140h8.6l95.2 121.6V1.033zm160.8 140l-60.2-69-31.4 32.2v36.8H972v-140h10.2v90l87.4-90h12.4l-61.6 63.6 65.8 76.4h-12.4z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<svg id="lettering" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1086.2 142.063">
<title>Schriftzug hell</title>
<defs>
<linearGradient id="logo-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="rgb(22,232,255)"/>
<stop offset="100%" stop-color="rgb(22,52,255)"/>
</linearGradient>
</defs>
<path fill="#fff" d="M10.2 131.833h86.4v9.2H0v-140h93.6v9.2H10.2v55.2h74.6v9H10.2v57.4zm123.6 9.2v-140H144v130.8h80.6v9.2h-90.8zm117 0v-140H261v140h-10.2zm163.6 0l-18-39.4h-81.2l-17.8 39.4h-11l64.4-140H361l64.4 140h-11zm-95.2-48h73.4l-36.8-80.8-36.6 80.8zm117.4 30l4.6-7.6q7.4 7.8 19.9 12.7 12.5 4.9 26.3 4.9 20 0 30.2-7.6 10.2-7.6 10.2-19.8 0-9.4-5.4-15-5.4-5.6-13.4-8.6-8-3-21.6-6.2-15.4-3.8-24.7-7.4-9.3-3.6-15.8-11.1-6.5-7.5-6.5-20.1 0-10.2 5.4-18.7 5.4-8.5 16.5-13.5 11.1-5 27.7-5 11.6 0 22.8 3.4 11.2 3.4 19.4 9.2l-3.8 8.2q-8.4-5.8-18.5-8.8-10.1-3-19.9-3-19.4 0-29.4 7.8-10 7.8-10 20.2 0 9.4 5.4 15 5.4 5.6 13.4 8.6 8 3 21.8 6.4 15.4 3.8 24.6 7.4 9.2 3.6 15.7 10.9 6.5 7.3 6.5 19.7 0 10.2-5.5 18.6-5.5 8.4-16.9 13.4-11.4 5-28 5-15.4 0-29.3-5.3-13.9-5.3-21.7-13.7z"/>
<path fill="url(#logo-gradient)" d="M717.6 10.233h-83.4v59.8h74.6v9.2h-74.6v61.8H624v-140h93.6v9.2zm32.6 130.8v-140h10.2v140h-10.2zm162.8-140h10.2v140h-8.4l-95.4-121.6v121.6h-10.2v-140h8.6l95.2 121.6V1.033zm160.8 140l-60.2-69-31.4 32.2v36.8H972v-140h10.2v90l87.4-90h12.4l-61.6 63.6 65.8 76.4h-12.4z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

28
static/img/logo/logo.svg Normal file → Executable file
View File

@@ -1,20 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?> <svg id="ef-logo" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<svg id="logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000"> <circle cx="500" cy="500" r="500" fill="#0080FF"/>
<title>Logo</title> <g fill="#FFFFFF">
<defs> <rect x="425" y="250" width="50" height="500"/>
<linearGradient id="logo-gradient" x1="0%" y1="0%" x2="100%" y2="100%"> <rect x="525" y="250" width="50" height="500"/>
<stop offset="0%" stop-color="rgb(22,232,255)"/> <rect x="200" y="250" width="250" height="50" />
<stop offset="100%" stop-color="rgb(22,52,255)"/> <rect x="200" y="475" width="250" height="50" />
</linearGradient> <rect x="200" y="700" width="250" height="50" />
</defs> <rect x="550" y="250" width="250" height="50" />
<circle cx="500" cy="500" r="500" fill="url(#logo-gradient)"/> <rect x="550" y="475" width="250" height="50" />
<g fill="#fff">
<rect x="430" y="240" width="50" height="520"/>
<rect x="190" y="240" width="265" height="50"/>
<rect x="190" y="475" width="265" height="50"/>
<rect x="190" y="710" width="265" height="50"/>
<rect x="520" y="240" width="50" height="520"/>
<rect x="545" y="240" width="265" height="50"/>
<rect x="545" y="475" width="265" height="50"/>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 885 B

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<svg id="logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000">
<title>Logo ohne Farbverlauf</title>
<circle cx="500" cy="500" r="500" fill="#168eff"/>
<g fill="#fff">
<rect x="430" y="240" width="50" height="520"/>
<rect x="190" y="240" width="265" height="50"/>
<rect x="190" y="475" width="265" height="50"/>
<rect x="190" y="710" width="265" height="50"/>
<rect x="520" y="240" width="50" height="520"/>
<rect x="545" y="240" width="265" height="50"/>
<rect x="545" y="475" width="265" height="50"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 638 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

View File

@@ -3,15 +3,18 @@
<link rel="stylesheet" href="https://static.eliasfink.de/fonts/montserrat/montserrat.css"> <link rel="stylesheet" href="https://static.eliasfink.de/fonts/montserrat/montserrat.css">
<style> <style>
body { * {
margin: 0; margin: 0;
background-color: var(--blue-1); padding: 0;
}
body {
background-color: var(--blue-darkest);
} }
h1 { h1 {
top: 50%; top: 50%;
left: 50%; left: 50%;
margin: 0;
color: #FFFFFF; color: #FFFFFF;
font-size: 48px; font-size: 48px;
font-weight: 300; font-weight: 300;
@@ -21,7 +24,7 @@
} }
span { span {
color: var(--blue-3); color: var(--blue-medium);
} }
@media (max-width: 767px) { @media (max-width: 767px) {
@@ -31,7 +34,7 @@
} }
</style> </style>
<title>Static &ndash; eliasfink.de</title> <title>Static &ndash; Elias Fink</title>
</head> </head>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -1,12 +0,0 @@
<svg id="ef-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000">
<circle cx="500" cy="500" r="500" fill="#FFFFFF"/>
<g fill="#0080FF">
<rect x="430" y="240" width="50" height="520"/>
<rect x="190" y="240" width="265" height="50" />
<rect x="190" y="475" width="265" height="50" />
<rect x="190" y="710" width="265" height="50" />
<rect x="520" y="240" width="50" height="520"/>
<rect x="545" y="240" width="265" height="50" />
<rect x="545" y="475" width="265" height="50" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 570 B

View File

@@ -1,191 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="1000"
height="100"
viewBox="0 0 264.58333 26.458333"
version="1.1"
id="svg5"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
sodipodi:docname="symbols.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="px"
showgrid="true"
units="px"
gridtolerance="10"
inkscape:zoom="4.6726229"
inkscape:cx="918.43492"
inkscape:cy="46.440726"
inkscape:window-width="1920"
inkscape:window-height="1057"
inkscape:window-x="1016"
inkscape:window-y="1"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
type="xygrid"
id="grid824"
empspacing="100" />
</sodipodi:namedview>
<defs
id="defs2">
<linearGradient
inkscape:collect="always"
id="linearGradient17492">
<stop
style="stop-color:#fffaff;stop-opacity:1"
offset="0"
id="stop17488" />
<stop
style="stop-color:#000000;stop-opacity:1"
offset="1"
id="stop17490" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient17492"
id="radialGradient17534"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.01185507,-0.00474077,0.00509163,0.01253756,245.5889,24.86303)"
cx="684.98218"
cy="-755.83978"
fx="684.98218"
fy="-755.83978"
r="399.74589" />
</defs>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
style="font-weight:bold;font-size:25.4px;line-height:15.875px;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono Bold';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="5.4673328"
y="23.171078"
id="text2764"><tspan
sodipodi:role="line"
id="tspan2762"
style="font-size:25.4px;stroke-width:0.264583"
x="5.4673328"
y="23.171078">1</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:25.4px;line-height:15.875px;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono Bold';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="31.925665"
y="23.171078"
id="text2764-6"><tspan
sodipodi:role="line"
id="tspan2762-7"
style="font-size:25.4px;stroke-width:0.264583"
x="31.925665"
y="23.171078">2</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:25.4px;line-height:15.875px;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono Bold';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="58.383999"
y="23.171078"
id="text2764-4"><tspan
sodipodi:role="line"
id="tspan2762-6"
style="font-size:25.4px;stroke-width:0.264583"
x="58.383999"
y="23.171078">3</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:25.4px;line-height:15.875px;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono Bold';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="84.581985"
y="23.171078"
id="text2764-67"><tspan
sodipodi:role="line"
id="tspan2762-3"
style="font-size:25.4px;stroke-width:0.264583"
x="84.581985"
y="23.171078">4</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:25.4px;line-height:15.875px;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono Bold';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="137.75899"
y="23.171078"
id="text2764-9"><tspan
sodipodi:role="line"
id="tspan2762-2"
style="font-size:25.4px;stroke-width:0.264583"
x="137.75899"
y="23.171078">6</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:25.4px;line-height:15.875px;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono Bold';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="112.24477"
y="23.171078"
id="text2764-5"><tspan
sodipodi:role="line"
id="tspan2762-0"
style="font-size:25.4px;stroke-width:0.264583"
x="112.24477"
y="23.171078">5</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:25.4px;line-height:15.875px;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono Bold';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="164.21733"
y="23.171078"
id="text2764-8"><tspan
sodipodi:role="line"
id="tspan2762-37"
style="font-size:25.4px;stroke-width:0.264583"
x="164.21733"
y="23.171078">7</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:25.4px;line-height:15.875px;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono Bold';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="190.67566"
y="23.171078"
id="text2764-56"><tspan
sodipodi:role="line"
id="tspan2762-78"
style="font-size:25.4px;stroke-width:0.264583"
x="190.67566"
y="23.171078">8</tspan></text>
<rect
style="opacity:0.94;fill:#000000;fill-opacity:1;stroke-width:0.159074;stroke-linejoin:round"
id="rect13458"
width="3.0269053"
height="23.409332"
x="216.61328"
y="1.4898645" />
<path
sodipodi:type="star"
style="opacity:0.94;fill:#c80000;fill-opacity:1;stroke-width:1.88976;stroke-linejoin:round"
id="path13598"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="830.13611"
sodipodi:cy="17.592884"
sodipodi:r1="31.913498"
sodipodi:r2="15.956749"
sodipodi:arg1="0"
sodipodi:arg2="1.0471976"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 862.04961,17.592884 -47.87025,27.6379 v -55.2758 z"
transform="matrix(0.26458333,0,0,0.26458333,4.4504611,4.7744104)"
inkscape:transform-center-x="-2.1109449" />
<path
id="path15198"
style="opacity:0.94;fill:url(#radialGradient17534);fill-opacity:1;stroke:none;stroke-width:0.0611019;stroke-linejoin:round"
d="m 255.02903,18.922636 -2.38443,0.980073 -1.29044,6.689887 -1.29044,-6.689887 -2.38442,-0.980073 -2.81674,0.984166 0.99178,-2.795106 -0.98766,-2.366105 -6.74168,-1.280528 6.74168,-1.280527 0.98766,-2.3661053 -0.99178,-2.7951042 2.81674,0.9841643 2.38442,-0.9800724 1.29044,-6.6898862 1.29044,6.6898862 2.38443,0.9800733 2.81675,-0.9841652 -0.99178,2.7951042 0.98766,2.3661063 6.74167,1.280526 -6.74167,1.280528 -0.98766,2.366105 0.99178,2.795106 z"
sodipodi:nodetypes="ccccccccccccccccccccccccc" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.5 KiB

View File

@@ -1,25 +0,0 @@
<!DOCTYPE html>
<html lang="de" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="author" content="Elias Fink">
<meta name="copyright" content="Copyright © 2024 Elias Fink">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex, nofollow">
<link rel="icon" href="images/favicon.ico">
<link rel="stylesheet" href="styles.css">
<script src="script.js"></script>
<title>Minesweeper by Elias Fink</title>
</head>
<body>
</body>
</html>

View File

@@ -1,306 +0,0 @@
window.addEventListener('load', () => {
minesweeper.init();
});
const minesweeper = {
init() {
this.logic = remoteLogic;
this.generateBody();
this.newGame('small');
},
// ------------------------------------ //
// ----- Basic Body Structure ----- //
// ------------------------------------ //
generateBody() {
const body = document.body;
const container = document.createElement('div');
container.id = 'container';
body.appendChild(container);
container.append(this.getHeader(), this.getMain(), this.getButtons(), this.getFooter());
},
getHeader() {
const header = document.createElement('header');
const title = document.createElement('div');
title.id = 'title';
header.appendChild(title);
const heading = document.createElement('h1');
heading.innerText = 'Minesweeper';
const subheading = document.createElement('p');
subheading.innerText = 'by Elias Fink';
title.append(heading, subheading);
return header;
},
getMain() {
const main = document.createElement('main');
return main;
},
getButtons() {
const buttons = document.createElement('div');
buttons.id = 'buttons';
const smallButton = this.createButton('small');
const mediumButton = this.createButton('medium');
const largeButton = this.createButton('large');
buttons.append(smallButton, mediumButton, largeButton);
return buttons;
},
getFooter() {
const footer = document.createElement('footer');
const copyright = document.createElement('span');
copyright.innerHTML = 'Copyright &copy; 2024 Elias Fink';
const webLink = document.createElement('span');
webLink.innerHTML = '<a href="https://studium.eliasfink.de/it-lab/" target="_blank" rel="noopener noreferrer">Web Version</a>';
const gitLink = document.createElement('span');
gitLink.innerHTML = '<a href="https://github.com/eliasfnk/it-lab.git" target="_blank" rel="noopener noreferrer">Git Repository</a>';
footer.append(copyright, webLink, gitLink);
return footer;
},
// ---------------------------------- //
// ----- Buttons and Fields ----- //
// ---------------------------------- //
createButton(type) {
const button = document.createElement('button');
button.id = type;
button.innerText = type;
button.addEventListener('click', () => {
this.newGame(type);
});
return button;
},
generatePlayfield(size) {
const playfield = document.querySelector('main');
playfield.innerText = '';
for (let row = 0; row < size; row++) {
for (let col = 0; col < size; col++) {
playfield.appendChild(this.createCell(row, col));
}
}
},
createCell(row, col) {
const cell = document.createElement('div');
cell.classList.add('cell', 'covered');
cell.dataset.x = col;
cell.dataset.y = row;
cell.style.width = `calc(100% / ${this.size} - 2px)`;
cell.style.height = `calc(100% / ${this.size} - 2px)`;
this.cellEventListeners(cell);
return cell;
},
cellEventListeners(cell) {
cell.addEventListener('click', (event) => {
this.cellLeftClickHandler(event);
});
cell.addEventListener('contextmenu', (event) => {
this.cellRightClickHandler(event);
});
cell.addEventListener('touchstart', (event) => {
this.cellTouchStartHandler(event);
});
cell.addEventListener('touchend', (event) => {
this.cellTouchEndHandler(event);
});
},
// -------------------------- //
// ----- Game Start ----- //
// -------------------------- //
gameModes: [
{
name: 'small',
size: 9,
mines: 10
},
{
name: 'medium',
size: 16,
mines: 40
},
{
name: 'large',
size: 24,
mines: 150
},
],
async newGame(gameMode) {
for (const mode of this.gameModes) {
if (mode.name == gameMode) {
this.size = mode.size;
this.mines = mode.mines;
}
}
this.generatePlayfield(this.size);
await this.logic.init(this.size, this.mines);
},
// ------------------------------------ //
// ----- Click/Touch Handling ----- //
// ------------------------------------ //
async cellLeftClickHandler(event) {
event.preventDefault();
const x = event.target.dataset.x;
const y = event.target.dataset.y;
const result = await this.logic.sweep(x, y);
if (result.minehit) {
this.logic.gameLost(event, result.mines);
} else {
this.logic.uncoverCell(x, y, result.minesAround);
for (const cell of result.emptyCells) {
this.logic.uncoverCell(cell.x, cell.y, cell.minesAround);
}
if (result.userwins) {
this.logic.gameWon();
}
}
},
cellRightClickHandler(event) {
event.preventDefault();
event.target.classList.toggle('symbol-f');
},
cellTouchStartHandler(event) {
event.preventDefault();
this.touchStartTime = new Date().getTime();
},
cellTouchEndHandler(event) {
event.preventDefault();
const touchDuration = new Date().getTime() - this.touchStartTime;
if (touchDuration < 500) {
this.cellLeftClickHandler(event);
} else {
this.cellRightClickHandler(event);
}
}
};
// -------------------------------------------------- //
// -------------------------------------------------- //
// -------------------------------------------------- //
const remoteLogic = {
// ----------------------------- //
// ----- Field Filling ----- //
// ----------------------------- //
async init(size, mines) {
this.serverUrl = 'https://www2.hs-esslingen.de/~melcher/it/minesweeper/?';
const request = `request=init&size=${size}&mines=${mines}&userid=elfiit00`;
const response = await this.fetchAndDecode(request);
this.token = response.token;
},
async fetchAndDecode(request) {
return fetch(this.serverUrl + request).then(response => response.json());
},
// ------------------------------- //
// ----- Move Processing ----- //
// ------------------------------- //
async sweep(x, y) {
const request = `request=sweep&token=${this.token}&x=${x}&y=${y}`;
return this.fetchAndDecode(request);
},
// ------------------------------- //
// ----- Cell Uncovering ----- //
// ------------------------------- //
getCell(x, y) {
return document.querySelector(`[data-x="${x}"][data-y="${y}"]`);
},
uncoverCell(x, y, symbol) {
this.getCell(x, y).classList.remove('covered');
if (symbol) {
this.getCell(x, y).classList.add(`symbol-${symbol}`);
}
},
// ------------------------ //
// ----- Game End ----- //
// ------------------------ //
gameLost(event, mines) {
event.target.id = 'mine-hit';
for (const m of mines) {
this.uncoverCell(m.x, m.y, 'm');
}
this.displayOverlay('Game Over');
},
gameWon() {
this.displayOverlay('Victory');
},
displayOverlay(text) {
const overlay = document.createElement('div');
overlay.id = 'overlay';
const div = document.createElement('div');
div.innerText = text;
overlay.appendChild(div);
const main = document.querySelector('main');
main.appendChild(overlay);
}
};

View File

@@ -1,231 +0,0 @@
/* ------------------------- */
/* General */
/* ------------------------- */
:root {
--blue-1: #001A33;
--blue-2: #004D99;
--blue-3: #0080FF;
--blue-4: #66B3FF;
--blue-5: #CCE6FF;
--grey-1: #161A1D;
--grey-2: #434D56;
--grey-3: #708090;
--grey-4: #A9B3BC;
--grey-5: #E2E6E9;
--peach-fuzz: #ffbe98;
}
* {
margin: 0;
padding: 0;
}
html, body {
height: 100%;
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
}
#container {
width: min(100vw, 55.555vh);
height: min(100vh, 180vw);
margin: 0 auto;
}
/* ------------------------ */
/* Header */
/* ------------------------ */
header {
height: calc(4 * 100% / 18);
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20px;
background-color: var(--blue-3);
color: #fff;
}
#title h1 {
font-size: 40px;
margin-bottom: 5px;
}
#title p {
font-size: 20px;
}
@media (min-width: 420px) {
header {
background-image: url(images/logo.svg);
background-size: 100px;
background-position: right 20px center;
background-repeat: no-repeat;
}
}
/* ------------------------------- */
/* Playing Field */
/* ------------------------------- */
main {
position: relative;
height: calc(10 * 100% / 18);
display: flex;
flex-wrap: wrap;
align-content: space-between;
justify-content: space-between;
border: 1px solid var(--grey-3);
}
.cell {
flex-shrink: 0;
background-color: var(--blue-5);
border: 1px solid var(--grey-3);
}
.covered {
background-color: var(--grey-4);
}
.symbol-1, .symbol-2, .symbol-3, .symbol-4, .symbol-5, .symbol-6, .symbol-7, .symbol-8, .symbol-f.covered, .symbol-m {
background-size: 1000%;
background-image: url(images/symbols.svg);
}
.symbol-1 {
background-position: calc(100% * 0 / 9);
}
.symbol-2 {
background-position: calc(100% * 1 / 9);
}
.symbol-3 {
background-position: calc(100% * 2 / 9);
}
.symbol-4 {
background-position: calc(100% * 3 / 9);
}
.symbol-5 {
background-position: calc(100% * 4 / 9);
}
.symbol-6 {
background-position: calc(100% * 5 / 9);
}
.symbol-7 {
background-position: calc(100% * 6 / 9);
}
.symbol-8 {
background-position: calc(100% * 7 / 9);
}
.symbol-f.covered {
background-position: calc(100% * 8 / 9);
}
.symbol-m {
background-position: calc(100% * 9 / 9);
}
#mine-hit {
background-color: var(--peach-fuzz);
}
#overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
display: flex;
align-items: center;
justify-content: center;
background-color: rgba(0, 0, 0, 0.4);
}
#overlay div {
padding: 16px 32px;
border-radius: 16px;
background-color: var(--blue-4);
font-size: 48px;
}
#overlay div:hover {
opacity: 0.2;
transition: 0.2s;
}
/* ------------------------- */
/* Buttons */
/* ------------------------- */
#buttons {
height: calc(3 * 100% / 18);
display: flex;
align-items: center;
justify-content: space-around;
padding: 0 20px;
background-color: var(--grey-5);
}
button {
font-size: 16px;
text-transform: capitalize;
padding: 15px 30px;
margin: 0 2px;
color: #fff;
background-color: var(--blue-3);
border: 2px solid var(--blue-3);
cursor: pointer;
transition: 0.2s;
}
button:hover {
color: var(--blue-3);
background-color: transparent;
}
/* ------------------------ */
/* Footer */
/* ------------------------ */
footer {
height: calc(100% / 18);
display: flex;
align-items: center;
justify-content: space-around;
padding: 0 20px;
background-color: var(--grey-2);
color: #fff;
}
footer a {
color: #fff;
text-decoration: none;
border-bottom: 1px solid #fff;
}
footer a:hover {
border-bottom: 0;
}
@media (max-width: 480px) {
footer span:not(:first-child) {
display: none;
}
}

View File

@@ -5,7 +5,7 @@
<style> <style>
body { body {
margin: 0; margin: 0;
background-color: var(--blue-1); background-color: var(--blue-darkest);
} }
h1 { h1 {
@@ -21,7 +21,7 @@
} }
span { span {
color: var(--blue-3); color: var(--blue-medium);
} }
@media (max-width: 767px) { @media (max-width: 767px) {