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; } } @media (max-width: 480px) { .page-header h1 { font-size: 1.5rem; } }
.grid { display: grid; grid-template-columns: repeat(5, 3rem); gap: .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 { 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; } .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; } .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; } .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 { margin-top: 1.5rem; }
.results-box { border: 1px solid var(--border); border-radius: .5rem; padding: .75rem; } .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 { 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, #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 { font-size: .75rem; padding: .1rem .35rem; border-radius: .25rem; margin-left: .25rem; }
.source.ot { background: #dbeafe; color: #1e40af; } .source.ot { background: #dbeafe; color: #1e40af; }
.source.wf { background: #dcfce7; color: #065f46; } .source.wf { background: #dcfce7; color: #065f46; }
@@ -146,7 +150,14 @@
{% set srcs = sources_map.get(w, []) %} {% set srcs = sources_map.get(w, []) %}
{% set has_umlaut = ('ä' in w or 'ö' in w or 'ü' in w or 'ß' in 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 }}"> <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 %} {% for s in srcs %}
{% if s == 'ot' %} {% if s == 'ot' %}
<span class="source ot">OT</span> <span class="source ot">OT</span>
@@ -171,7 +182,7 @@
</main> </main>
<footer class="footer"> <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> </footer>
</div> </div>
@@ -275,6 +286,9 @@
input.value = ''; input.value = '';
input.focus(); input.focus();
} }
// Drag-Status für Positionsfelder
var dragSourcePosInput = null;
var dragAccepted = false;
window.addEventListener('load', function() { window.addEventListener('load', function() {
var ot = document.getElementById('filter-ot'); var ot = document.getElementById('filter-ot');
var wf = document.getElementById('filter-wf'); var wf = document.getElementById('filter-wf');
@@ -283,6 +297,24 @@
if (wf) wf.addEventListener('change', applyFilters); if (wf) wf.addEventListener('change', applyFilters);
if (uml) uml.addEventListener('change', applyFilters); if (uml) uml.addEventListener('change', applyFilters);
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 // Listen initial aus Hidden-Feldern rendern
var hiddenInc = document.getElementById('includes'); var hiddenInc = document.getElementById('includes');
var hiddenExc = document.getElementById('excludes'); var hiddenExc = document.getElementById('excludes');
@@ -320,6 +352,27 @@
(function(idx){ (function(idx){
var input = document.getElementById('pos' + idx); var input = document.getElementById('pos' + idx);
if (!input) return; 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){ input.addEventListener('dragover', function(e){
e.preventDefault(); e.preventDefault();
try { e.dataTransfer.dropEffect = 'move'; } catch (err) {} try { e.dataTransfer.dropEffect = 'move'; } catch (err) {}
@@ -331,9 +384,18 @@
input.classList.remove('drop-target'); input.classList.remove('drop-target');
var letter = (e.dataTransfer.getData('text/plain') || '').trim().toLowerCase(); var letter = (e.dataTransfer.getData('text/plain') || '').trim().toLowerCase();
var sourceList = e.dataTransfer.getData('text/list') || ''; 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; input.value = letter;
if ((input.value || '').trim()) input.classList.add('filled');
if (sourceList === 'includes-list') {
removeLetterFromList('includes', 'includes-list', letter); removeLetterFromList('includes', 'includes-list', letter);
}
if (sourceType === 'pos' && dragSourcePosInput && dragSourcePosInput !== input) {
dragSourcePosInput.value = '';
dragSourcePosInput.classList.remove('filled');
}
input.focus(); input.focus();
} }
}); });
@@ -347,7 +409,7 @@
// Alle Positionsfelder zurücksetzen // Alle Positionsfelder zurücksetzen
for (var i = 1; i <= 5; i++) { for (var i = 1; i <= 5; i++) {
var posField = document.getElementById('pos' + i); var posField = document.getElementById('pos' + i);
if (posField) posField.value = ''; if (posField) { posField.value = ''; posField.classList.remove('filled'); }
} }
// Weitere Felder zurücksetzen // Weitere Felder zurücksetzen