Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55e738a554 | ||
|
|
45adfa9d5d | ||
|
|
f5f6dddba3 | ||
|
|
b06f6c3551 | ||
|
|
b66030dce5 | ||
|
|
8e7ec468d4 | ||
|
|
8ce3ae4c92 |
@@ -1,3 +1,6 @@
|
||||
## v1.6.3 (2026-03-05)
|
||||
- ✨ **Chore**: Slogan im Footer aktualisiert ("Jetzt Bessa Einfach! • Knapp-Kantine Wrapper • 2026 by Kaufis-Kitchen") und Footer-Höhe für mehr Platzierung optimiert.
|
||||
|
||||
## v1.6.2 (2026-03-05)
|
||||
- ✨ **Feature**: Wochentags-Header (Montag, Dienstag etc.) scrollen nun als "Sticky Header" mit und bleiben am oberen Bildschirmrand haften.
|
||||
- Das Layout clippt scrollende Speisen ordentlich darunter weg.
|
||||
|
||||
4
dist/bookmarklet-payload.js
vendored
4
dist/bookmarklet-payload.js
vendored
File diff suppressed because one or more lines are too long
2
dist/bookmarklet.txt
vendored
2
dist/bookmarklet.txt
vendored
File diff suppressed because one or more lines are too long
16
dist/install.html
vendored
16
dist/install.html
vendored
File diff suppressed because one or more lines are too long
44
dist/kantine-standalone.html
vendored
44
dist/kantine-standalone.html
vendored
@@ -437,7 +437,7 @@ body {
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
padding: 2rem 0 0 0;
|
||||
padding: 0 0 0 0;
|
||||
/* Only top padding, no horizontal so child fills width */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@@ -1095,9 +1095,9 @@ body {
|
||||
.app-footer {
|
||||
flex-shrink: 0;
|
||||
text-align: center;
|
||||
padding: 1rem 2rem;
|
||||
padding: 0.4rem 2rem;
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.875rem;
|
||||
font-size: 0.8rem;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
@@ -2123,7 +2123,7 @@ body {
|
||||
<div class="brand">
|
||||
<span class="material-icons-round logo-icon">restaurant_menu</span>
|
||||
<div class="header-left">
|
||||
<h1>Kantinen Übersicht <small class="version-tag" style="font-size: 0.6em; opacity: 0.7; font-weight: 400; cursor: pointer;" title="Klick für Versionsmenü">v1.6.2</small></h1>
|
||||
<h1>Kantinen Übersicht <small class="version-tag" style="font-size: 0.6em; opacity: 0.7; font-weight: 400; cursor: pointer;" title="Klick für Versionsmenü">v1.6.3</small></h1>
|
||||
<div id="last-updated-subtitle" class="subtitle"></div>
|
||||
</div>
|
||||
<div class="nav-group" style="margin-left: 1rem;">
|
||||
@@ -2270,7 +2270,7 @@ body {
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div style="margin-bottom: 1rem;">
|
||||
<strong>Aktuell:</strong> <span id="version-current">v1.6.2</span>
|
||||
<strong>Aktuell:</strong> <span id="version-current">v1.6.3</span>
|
||||
</div>
|
||||
<div class="dev-toggle">
|
||||
<label style="display:flex;align-items:center;gap:8px;cursor:pointer;">
|
||||
@@ -2309,7 +2309,7 @@ body {
|
||||
</main>
|
||||
|
||||
<footer class="app-footer">
|
||||
<p>Bessa Knapp-Kantine Wrapper • <span id="current-year">${new Date().getFullYear()}</span></p>
|
||||
<p>Jetzt Bessa Einfach! • Knapp-Kantine Wrapper • <span id="current-year">${new Date().getFullYear()}</span> by Kaufis-Kitchen</p>
|
||||
</footer>
|
||||
</div>`;
|
||||
}
|
||||
@@ -3350,6 +3350,25 @@ body {
|
||||
updateNextWeekBadge();
|
||||
updateAlarmBell();
|
||||
if (cachedTs) updateLastUpdatedTime(cachedTs);
|
||||
|
||||
// --- TEMP DEBUG LOGGER ---
|
||||
try {
|
||||
const uniqueMenus = new Set();
|
||||
allWeeks.forEach(w => {
|
||||
(w.days || []).forEach(d => {
|
||||
(d.items || []).forEach(item => {
|
||||
let text = (item.description || '').replace(/\s+/g, ' ').trim();
|
||||
if (text && text.includes(' / ')) {
|
||||
uniqueMenus.add(text);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
const res = Array.from(uniqueMenus).join('\n\n');
|
||||
console.log("=== GEFUNDENE MENÜ-TEXTE (" + uniqueMenus.size + ") ===");
|
||||
console.log(res);
|
||||
} catch (e) { }
|
||||
|
||||
console.log('Loaded menu from cache');
|
||||
return true;
|
||||
}
|
||||
@@ -4138,7 +4157,7 @@ body {
|
||||
|
||||
// Periodic update check (runs on init + every hour)
|
||||
async function checkForUpdates() {
|
||||
const currentVersion = 'v1.6.2';
|
||||
const currentVersion = 'v1.6.3';
|
||||
const devMode = localStorage.getItem('kantine_dev_mode') === 'true';
|
||||
|
||||
try {
|
||||
@@ -4179,7 +4198,7 @@ body {
|
||||
const modal = document.getElementById('version-modal');
|
||||
const container = document.getElementById('version-list-container');
|
||||
const devToggle = document.getElementById('dev-mode-toggle');
|
||||
const currentVersion = 'v1.6.2';
|
||||
const currentVersion = 'v1.6.3';
|
||||
|
||||
if (!modal) return;
|
||||
modal.classList.remove('hidden');
|
||||
@@ -4565,8 +4584,12 @@ body {
|
||||
}
|
||||
} else {
|
||||
// No allergen code found!
|
||||
// If it's not the last part (or even if it is, but we highly suspect merged languages),
|
||||
// we use the heuristic to find the hidden split-point.
|
||||
// If this is the last fragment, it contains only the English text of the final course.
|
||||
// It should not be split again.
|
||||
if (i === parts.length - 1) {
|
||||
enParts.push(fragment);
|
||||
} else {
|
||||
// We use the heuristic to find the hidden split-point.
|
||||
const split = heuristicSplitEnDe(fragment);
|
||||
enParts.push(split.enPart);
|
||||
if (split.nextDe) {
|
||||
@@ -4574,6 +4597,7 @@ body {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
de: deParts.map(p => '• ' + p).join('\n'),
|
||||
|
||||
30
kantine.js
30
kantine.js
@@ -268,7 +268,7 @@
|
||||
</main>
|
||||
|
||||
<footer class="app-footer">
|
||||
<p>Bessa Knapp-Kantine Wrapper • <span id="current-year">${new Date().getFullYear()}</span></p>
|
||||
<p>Jetzt Bessa Einfach! • Knapp-Kantine Wrapper • <span id="current-year">${new Date().getFullYear()}</span> by Kaufis-Kitchen</p>
|
||||
</footer>
|
||||
</div>`;
|
||||
}
|
||||
@@ -1309,6 +1309,25 @@
|
||||
updateNextWeekBadge();
|
||||
updateAlarmBell();
|
||||
if (cachedTs) updateLastUpdatedTime(cachedTs);
|
||||
|
||||
// --- TEMP DEBUG LOGGER ---
|
||||
try {
|
||||
const uniqueMenus = new Set();
|
||||
allWeeks.forEach(w => {
|
||||
(w.days || []).forEach(d => {
|
||||
(d.items || []).forEach(item => {
|
||||
let text = (item.description || '').replace(/\s+/g, ' ').trim();
|
||||
if (text && text.includes(' / ')) {
|
||||
uniqueMenus.add(text);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
const res = Array.from(uniqueMenus).join('\n\n');
|
||||
console.log("=== GEFUNDENE MENÜ-TEXTE (" + uniqueMenus.size + ") ===");
|
||||
console.log(res);
|
||||
} catch (e) { }
|
||||
|
||||
console.log('Loaded menu from cache');
|
||||
return true;
|
||||
}
|
||||
@@ -2524,8 +2543,12 @@
|
||||
}
|
||||
} else {
|
||||
// No allergen code found!
|
||||
// If it's not the last part (or even if it is, but we highly suspect merged languages),
|
||||
// we use the heuristic to find the hidden split-point.
|
||||
// If this is the last fragment, it contains only the English text of the final course.
|
||||
// It should not be split again.
|
||||
if (i === parts.length - 1) {
|
||||
enParts.push(fragment);
|
||||
} else {
|
||||
// We use the heuristic to find the hidden split-point.
|
||||
const split = heuristicSplitEnDe(fragment);
|
||||
enParts.push(split.enPart);
|
||||
if (split.nextDe) {
|
||||
@@ -2533,6 +2556,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
de: deParts.map(p => '• ' + p).join('\n'),
|
||||
|
||||
@@ -426,7 +426,7 @@ body {
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
padding: 2rem 0 0 0;
|
||||
padding: 0 0 0 0;
|
||||
/* Only top padding, no horizontal so child fills width */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@@ -1084,9 +1084,9 @@ body {
|
||||
.app-footer {
|
||||
flex-shrink: 0;
|
||||
text-align: center;
|
||||
padding: 1rem 2rem;
|
||||
padding: 0.4rem 2rem;
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.875rem;
|
||||
font-size: 0.8rem;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
v1.6.2
|
||||
v1.6.3
|
||||
|
||||
Reference in New Issue
Block a user