Update footer

This commit is contained in:
2025-08-20 10:05:57 +02:00
parent fc54056572
commit 12bf7e6276

View File

@@ -39,6 +39,7 @@
@media (max-width: 480px) { .page-header h1 { font-size: 1.5rem; } }
.grid { display: grid; grid-template-columns: repeat(5, 3rem); gap: .5rem; }
.grid input { text-align: center; font-size: 1.25rem; padding: .4rem; background: var(--input-bg); color: var(--input-text); border: 1px solid var(--border); border-radius: .375rem; font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', 'Monaco', 'Courier New', monospace; text-transform: uppercase; }
.grid input.filled { background: #6baa64; color: #ffffff; }
.text-input { font-size: 1.1rem; padding: .5rem; background: var(--input-bg); color: var(--input-text); border: 1px solid var(--border); border-radius: .375rem; width: 100%; box-sizing: border-box; font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', 'Monaco', 'Courier New', monospace; text-transform: uppercase; }
.letter-input { width: calc(1ch + 2rem); padding: .5rem 1rem; font-size: 1rem; line-height: 1; background: var(--input-bg); color: var(--input-text); border: 1px solid var(--border); border-radius: .5rem; text-align: center; text-transform: uppercase; font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', 'Monaco', 'Courier New', monospace; }
.plus-button { width: calc(1ch + 2rem); text-align: center; line-height: 1; display: inline-flex; align-items: center; justify-content: center; font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', 'Monaco', 'Courier New', monospace; }
@@ -46,7 +47,10 @@
.results { margin-top: 1.5rem; }
.results-box { border: 1px solid var(--border); border-radius: .5rem; padding: .75rem; }
.badge { display: inline-block; padding: .25rem .5rem; background: var(--badge-bg); color: var(--badge-text); border-radius: .375rem; margin-right: .25rem; margin-bottom: .25rem; }
.badge .letter { display: inline-block; }
.badge .letter.included { background: #ffc100; color: #ffffff; border-radius: .25rem; padding: 0 .1rem; }
#includes-list .badge, #excludes-list .badge { cursor: pointer; }
#includes-list .badge { background: #ffc100; color: #ffffff; }
.source { font-size: .75rem; padding: .1rem .35rem; border-radius: .25rem; margin-left: .25rem; }
.source.ot { background: #dbeafe; color: #1e40af; }
.source.wf { background: #dcfce7; color: #065f46; }
@@ -146,7 +150,14 @@
{% set srcs = sources_map.get(w, []) %}
{% set has_umlaut = ('ä' in w or 'ö' in w or 'ü' in w or 'ß' in w) %}
<li data-sources="{{ srcs|join(' ') }}" data-umlaut="{{ 1 if has_umlaut else 0 }}">
<span class="badge">{{ w }}
<span class="badge">
{% for ch in w %}
{% if ch in includes|lower %}
<span class="letter included">{{ ch }}</span>
{% else %}
<span class="letter">{{ ch }}</span>
{% endif %}
{% endfor %}
{% for s in srcs %}
{% if s == 'ot' %}
<span class="source ot">OT</span>
@@ -171,7 +182,7 @@
</main>
<footer class="footer">
Yet another <a href="https://gitea.elpatron.me/elpatron/wordle-cheater" rel="noopener noreferrer">Open Source Project</a>, vibe coded in less than 1 hour by <a href="mailto:elpatron@mailbox.org">Markus F.J. Busche</a>
Yet another <a href="https://gitea.elpatron.me/elpatron/wordle-cheater" rel="noopener noreferrer">Open Source Project</a>, vibe coded in less than 4 hours by <a href="mailto:elpatron@mailbox.org">Markus F.J. Busche</a>
</footer>
</div>
@@ -275,6 +286,9 @@
input.value = '';
input.focus();
}
// Drag-Status für Positionsfelder
var dragSourcePosInput = null;
var dragAccepted = false;
window.addEventListener('load', function() {
var ot = document.getElementById('filter-ot');
var wf = document.getElementById('filter-wf');
@@ -283,6 +297,24 @@
if (wf) wf.addEventListener('change', applyFilters);
if (uml) uml.addEventListener('change', applyFilters);
applyFilters();
// Status der Positionsfelder (filled) initial setzen und bei Eingaben aktualisieren
function updatePosFilledState() {
for (var i = 1; i <= 5; i++) {
var el = document.getElementById('pos' + i);
if (!el) continue;
if ((el.value || '').trim()) el.classList.add('filled');
else el.classList.remove('filled');
}
}
updatePosFilledState();
for (var i = 1; i <= 5; i++) {
(function(idx){
var el = document.getElementById('pos' + idx);
if (!el) return;
el.addEventListener('input', updatePosFilledState);
el.addEventListener('change', updatePosFilledState);
})(i);
}
// Listen initial aus Hidden-Feldern rendern
var hiddenInc = document.getElementById('includes');
var hiddenExc = document.getElementById('excludes');
@@ -320,6 +352,27 @@
(function(idx){
var input = document.getElementById('pos' + idx);
if (!input) return;
// Als Drag-Quelle nutzbar machen
input.draggable = true;
input.addEventListener('dragstart', function(e){
var val = (input.value || '').trim().toLowerCase();
if (!val) { try { e.preventDefault(); } catch (err) {} return; }
dragSourcePosInput = input;
dragAccepted = false;
try {
e.dataTransfer.setData('text/plain', val);
e.dataTransfer.setData('text/source', 'pos');
e.dataTransfer.effectAllowed = 'move';
} catch (err) {}
});
input.addEventListener('dragend', function(){
if (dragSourcePosInput === input && !dragAccepted) {
input.value = '';
input.classList.remove('filled');
}
dragSourcePosInput = null;
dragAccepted = false;
});
input.addEventListener('dragover', function(e){
e.preventDefault();
try { e.dataTransfer.dropEffect = 'move'; } catch (err) {}
@@ -331,9 +384,18 @@
input.classList.remove('drop-target');
var letter = (e.dataTransfer.getData('text/plain') || '').trim().toLowerCase();
var sourceList = e.dataTransfer.getData('text/list') || '';
if (letter && sourceList === 'includes-list' && /[a-zäöüß]/i.test(letter)) {
var sourceType = e.dataTransfer.getData('text/source') || '';
if (letter && /[a-zäöüß]/i.test(letter) && (sourceList === 'includes-list' || sourceType === 'pos')) {
dragAccepted = true;
input.value = letter;
removeLetterFromList('includes', 'includes-list', letter);
if ((input.value || '').trim()) input.classList.add('filled');
if (sourceList === 'includes-list') {
removeLetterFromList('includes', 'includes-list', letter);
}
if (sourceType === 'pos' && dragSourcePosInput && dragSourcePosInput !== input) {
dragSourcePosInput.value = '';
dragSourcePosInput.classList.remove('filled');
}
input.focus();
}
});
@@ -347,7 +409,7 @@
// Alle Positionsfelder zurücksetzen
for (var i = 1; i <= 5; i++) {
var posField = document.getElementById('pos' + i);
if (posField) posField.value = '';
if (posField) { posField.value = ''; posField.classList.remove('filled'); }
}
// Weitere Felder zurücksetzen