Update footer
This commit is contained in:
@@ -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
|
||||||
|
Reference in New Issue
Block a user