wip: rewrite to flask

This commit is contained in:
2025-12-25 14:55:37 +02:00
committed by Burer
parent 9d58cf0668
commit fb0d1c2199
66 changed files with 514 additions and 585 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 128 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

+1
View File
@@ -0,0 +1 @@
<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" x1="66.67%" x2="41.67%" y1="16.67%" y2="75%"><stop offset="0" stop-color="#37aee2"/><stop offset="1" stop-color="#1e96c8"/></linearGradient><linearGradient id="b" x1="65.97%" x2="85.12%" y1="43.69%" y2="80.24%"><stop offset="0" stop-color="#eff7fc"/><stop offset="1" stop-color="#fff"/></linearGradient><circle cx="8" cy="8" fill="url(#a)" r="8"/><path d="m6.53333333 11.6666667c-.25917333 0-.21513333-.09786-.30452-.3446334l-.76214666-2.50830663 5.86666663-3.48039334" fill="#c8daea"/><path d="m6.53333333 11.6666667c.2 0 .28836667-.0914667.4-.2l1.06666667-1.0372-1.33053333-.80233337" fill="#a9c9dd"/><path d="m6.66933333 9.62733333 3.224 2.38193337c.36789997.2029933.63342667.0978933.72506667-.3415667l1.3123333-6.1842c.13436-.53868-.20534-.783-.5572933-.62321333l-7.706 2.9714c-.52600667.21098-.52294.50444-.09588.6352l1.97753333.61722 4.57819997-2.88833334c.2161267-.13106.4144867-.06059933.25168.08389334" fill="url(#b)"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

+119
View File
@@ -0,0 +1,119 @@
/* LANGUAGE DROPDOWN */
function dropdown_show(obj)
{
var x = y = 0;
while(obj)
{
x += obj.offsetLeft;
y += obj.offsetTop;
obj = obj.offsetParent;
}
ddown = document.getElementById("lang-dropdown");
ddown.style.display = "block";
ddown.style.left = (x - 72) + "px";
if (ddown.offsetLeft + ddown.offsetWidth +10 > document.body.offsetWidth)
{
ddown.style.left = document.body.offsetWidth - ddown.offsetWidth - 82 + "px";
}
ddown.style.top = (y + 48) + "px";
op = 0;
appear(1);
}
function dropdown_hide()
{
ddown = document.getElementById("lang-dropdown");
ddown.style.display="none";
}
function appear(x)
{
if(op < x)
{
op += 0.2;
ddown.style.opacity = op;
ddown.style.filter = 'alpha(opacity=' + op * 100 + ')';
t = setTimeout('appear(' + x + ')', 20);
}
}
/* SCREENSHOTS GALLERY */
var FIRST_IMG_ID = 1;
var LAST_IMG_ID = 6;
var current = LAST_IMG_ID; // start with last slide so that next() shows the first
window.onload = function() {
// Dynamically create dots based on number of slides
var dots = document.getElementById("dots");
for (var i = FIRST_IMG_ID; i <= LAST_IMG_ID; i++) {
var dot = document.createElement("span");
dot.className = "dot" + (i === current ? " active" : "");
dot.setAttribute("data-slide", i);
dot.onclick = function() {
goToSlide(parseInt(this.getAttribute("data-slide")));
};
dots.appendChild(dot);
}
// If a carousel element exists, advance to the first slide on load
if (document.getElementById("carousel")) next();
};
function updateDots() {
var dots = document.querySelectorAll("#dots .dot");
dots.forEach(function(dot, index) {
// index starts at 0 so add FIRST_IMG_ID to match your slide IDs
dot.className = "dot" + ((index + FIRST_IMG_ID) === current ? " active" : "");
});
}
function goToSlide(n) {
if (n === current) return;
document.getElementById("slide" + current).className = "minislide";
current = n;
document.getElementById("slide" + current).className = "visible";
if (document.getElementById("carousel")) {
document.getElementById("carousel").innerHTML = document.getElementById("slide" + current).alt;
}
updateDots();
}
function next() {
document.getElementById("slide" + current).className = "minislide";
if (current >= LAST_IMG_ID) {
current = FIRST_IMG_ID;
} else {
current++;
}
document.getElementById("slide" + current).className = "visible";
if (document.getElementById("carousel")) {
document.getElementById("carousel").innerHTML = document.getElementById("slide" + current).alt;
}
updateDots();
}
function previous() {
document.getElementById("slide" + current).className = "minislide";
if (current <= FIRST_IMG_ID) {
current = LAST_IMG_ID;
} else {
current--;
}
document.getElementById("slide" + current).className = "visible";
if (document.getElementById("carousel")) {
document.getElementById("carousel").innerHTML = document.getElementById("slide" + current).alt;
}
updateDots();
}
function checkkey(e) {
var keycode = window.event ? e.keyCode : e.which;
if (keycode == 37) { previous(); }
else if (keycode == 39) { next(); }
else if (keycode == 27) { dropdown_hide(); }
}
+461
View File
@@ -0,0 +1,461 @@
body {
margin: 0;
font-family: "Source Sans Pro", "Open Sans", sans-serif;
background: #e1e2e2 url(img/bg.png) repeat fixed 0 0;
}
#menu {
background: rgba(22, 22, 23, .8);
color: #FFFFFF;
cursor: default;
line-height: 2em;
padding: 0.5em 0;
text-align: center;
text-shadow: 2px 2px 2px #00000063;
top: 0;
left: 0;
width: 100%;
z-index: 9000;
}
#menu > * {
color: #fff;
cursor: pointer;
margin: 0 1em;
text-decoration: none;
transition: color 0.15s ease;
}
#menu a:hover,
#menu a.a-sel {
color: #ffe36a;
}
#menu img {
filter: drop-shadow(2px 2px 2px #00000020);
}
#lang-butt {
background: transparent;
border: none;
}
/* LANG-DROPDOWN */
#lang-dropdown {
position: fixed;
z-index: 9100;
display: none;
opacity: 0;
filter: alpha(opacity=0);
}
#lang-dropdown::before {
content: '';
display: block;
position: absolute;
border: 11px solid #333C;
border-left: 10px solid rgba(255, 255, 255, 0);
border-right: 10px solid rgba(255, 255, 255, 0);
border-top: 0px solid rgba(255, 255, 255, 0);
top: -10px;
left: 50%;
margin-left: -6px;
}
#lang-dropdown>div {
display: block;
margin-left: 4px;
border-radius: 3px;
border: 1px solid #333;
box-shadow: 0 0 5px #000;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
overflow: hidden;
background: #333;
background: #333E;
backdrop-filter: saturate(180%) blur(6px);
}
#lang-dropdown>div a {
display: block;
padding: 0 3em 0 1em;
font-size: 90%;
line-height: 2.5;
border-top: 1px solid rgba(255, 255, 255, 0.06);
border-bottom: 1px solid rgba(0, 0, 0, 0.07);
text-decoration: none;
color: #fff !important;
}
#lang-dropdown>div a:hover {
border-bottom: 1px solid #34312eff;
border-top: 1px solid #4c4c4cff;
background: #444;
background: linear-gradient(328deg, #c20d2c7d, #3928c78a);
}
#lang-dropdown>div a.a-sel {
color: #888 !important;
}
#lang-dropdown>div a.a-sel img {
color: #888 !important;
filter: brightness(0.5);
}
#lang-dropdown>div a img {
display: inline-block;
vertical-align: middle;
margin-right: 10px;
margin-top: -3px;
width: 16px;
height: 11px;
filter: drop-shadow(1px 2px 2px #0003);
}
#lang-dropdown>div a:first-child {
border-top: none;
}
#lang-dropdown>div a:last-child {
border-bottom: none;
}
/* ARTICLE */
#article {
background: rgba(254, 255, 255, 1);
border: 1px solid #c0b9c491;
border-radius: 4px;
box-shadow: rgb(28 26 40 / 12%) 0px 4px 4px -2px;
margin: 2em auto;
max-width: 910px;
padding: 2em;
text-align: justify;
color: #333;
}
#banner {
box-sizing: border-box;
border: 1px solid #00000020;
border-radius: 4px;
box-shadow: none;
display: block;
margin: 4px 4px 1.25em;
outline: 4px solid transparent;
transition: outline 0.3s ease;
padding: 1em;
text-decoration: none;
}
#banner:hover {
outline-color: lightblue;
}
#banner td {
text-align: center;
vertical-align: center;
}
#banner img {
height: 7em;
}
#banner h1 {
margin-top: 0em;
color: #609A21;
font-size: 2.5em;
margin: 0 0 16px;
}
#banner p {
margin: 0em;
}
#banner .p-link {
margin-top: 16px;
color: #609A21;
font-weight: bold;
}
#banner a {
color: #609A21;
}
h1 {
font-size: 125%;
padding: 0;
margin: 0 0 16px;
}
a {
color: #1F1F1F;
}
a:hover {
color: #000;
}
p {
line-height: 1.5;
}
.p-socials {
text-align: center;
margin-bottom: 0px;
}
.p-socials a {
margin: 1em 1em;
text-decoration: none;
}
.p-socials br {
margin: 0em 0em 1em;
display: none;
}
.p-socials img {
height: 1em;
margin-right: 0.5em;
margin-bottom: -0.15em;
}
.p-subscription
{
text-align: center;
}
/* DOWNLOADS */
table {
width: 100%;
border-spacing: 0;
}
table a {
padding-bottom: 1px;
border-bottom: 1px solid;
text-decoration: none;
color: #0472D8
}
table a:hover
{
color: #0053B9;
}
tr {
vertical-align: middle;
}
.tr-margin-bot>td{
padding-bottom: 1em;
}
.tr-margin-top>td{
padding-top: 1em;
}
td {
vertical-align: middle;
}
td img {
vertical-align: middle;
}
.td-image {
width: 3em;
}
.td-description {
text-align: left;
width: 40%;
}
.td-description .beta {
border: 1px solid grey;
color: grey;
font-size: 0.75em;
font-weight: bold;
border-radius: 0.25em;
padding: 0.25em;
}
.td-date {
text-align: right;
padding-right: 2em;
}
.td-languages {
text-align: right;
}
.td-languages a {
margin-left: 1em;
}
hr {
margin: 0;
}
.help-button {
cursor: pointer;
display: inline-block;
background: #FF9800;
border-radius: 4px;
box-shadow: inset 0 1px rgba(254,181,94,0.9), inset 0 -2px rgba(0,0,0,0.04);
color: #FFFFFF;
padding: 0.5em 1em;
text-align: center;
transition: 0.5s;
}
.help-button:hover {
background: #F6920B;
}
acronym {
border-bottom: 1px dashed #ccc;
text-decoration: none;
cursor: help;
}
/* SCREENS.CSS */
#show {
max-width: 1280px;
max-height: 800px;
width: 100%;
height: 100%;
cursor: pointer;
border: 1px solid #182028;
display: block;
position: relative;
border-radius: 4px;
overflow: hidden;
}
#show img {
display: none;
max-width: 100%;
}
#show img.visible {
display: block;
}
iframe {
width: 100%;
border: none;
border-radius: 4px;
aspect-ratio: 16 / 9;
}
#carousel {
text-align: center;
margin: 1.25em auto 1em;
}
#dots {
text-align: center;
line-height: 1;
}
.dot {
display: inline-block;
width: 0.625em;
height: 0.625em;
background: #ccc;
border-radius: 50%;
margin: 0 0.25em;
cursor: pointer;
}
.dot.active {
background: #333;
}
/* FOOTER */
#footer {
margin: 2em auto;
text-align: center;
color: #848585;
display: block;
text-align: center;
width: 100%;
color: rgb(132, 133, 133);
text-shadow: rgb(255, 255, 255) 1px 1px 0px;
font-size: 90%;
}
#footer img
{
margin-bottom: 0.5em;
height: 7em;
}
#footer p
{
margin: 0;
}
/* ADAPTIVE LAYOUT */
@media (max-width:864px) {
#article {
margin: 0 0 1em;
padding: 1em 1em 1.5em;
border-radius: 0;
}
#banner {
max-width: calc(100% - 2px);
margin: 1px 0 1em;
outline: 1px solid rgb(227 227 227);;
}
#banner img {
display: none;
}
#banner h1 {
font-size: 1.5em;
margin-bottom: 0;
}
#banner p, #banner .p-link {
margin-top: 0.5em;
}
.p-socials a {
display: block;
margin: 1em 0 0;
}
#menu>* {
margin: 0 0.5em;
}
.td-description {
width: auto;
}
.td-date {
display: none;
padding-right: 1em;
padding-left: 1em;
}
.td-languages a {
margin-left: 1em;
}
#footer {
margin: 1em auto;
}
}