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)
|
## v1.6.2 (2026-03-05)
|
||||||
- ✨ **Feature**: Wochentags-Header (Montag, Dienstag etc.) scrollen nun als "Sticky Header" mit und bleiben am oberen Bildschirmrand haften.
|
- ✨ **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.
|
- 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;
|
flex: 1;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding: 2rem 0 0 0;
|
padding: 0 0 0 0;
|
||||||
/* Only top padding, no horizontal so child fills width */
|
/* Only top padding, no horizontal so child fills width */
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -1095,9 +1095,9 @@ body {
|
|||||||
.app-footer {
|
.app-footer {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 1rem 2rem;
|
padding: 0.4rem 2rem;
|
||||||
color: var(--text-secondary);
|
color: var(--text-secondary);
|
||||||
font-size: 0.875rem;
|
font-size: 0.8rem;
|
||||||
border-top: 1px solid var(--border-color);
|
border-top: 1px solid var(--border-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2123,7 +2123,7 @@ body {
|
|||||||
<div class="brand">
|
<div class="brand">
|
||||||
<span class="material-icons-round logo-icon">restaurant_menu</span>
|
<span class="material-icons-round logo-icon">restaurant_menu</span>
|
||||||
<div class="header-left">
|
<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 id="last-updated-subtitle" class="subtitle"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-group" style="margin-left: 1rem;">
|
<div class="nav-group" style="margin-left: 1rem;">
|
||||||
@@ -2270,7 +2270,7 @@ body {
|
|||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<div style="margin-bottom: 1rem;">
|
<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>
|
||||||
<div class="dev-toggle">
|
<div class="dev-toggle">
|
||||||
<label style="display:flex;align-items:center;gap:8px;cursor:pointer;">
|
<label style="display:flex;align-items:center;gap:8px;cursor:pointer;">
|
||||||
@@ -2309,7 +2309,7 @@ body {
|
|||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer class="app-footer">
|
<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>
|
</footer>
|
||||||
</div>`;
|
</div>`;
|
||||||
}
|
}
|
||||||
@@ -3350,6 +3350,25 @@ body {
|
|||||||
updateNextWeekBadge();
|
updateNextWeekBadge();
|
||||||
updateAlarmBell();
|
updateAlarmBell();
|
||||||
if (cachedTs) updateLastUpdatedTime(cachedTs);
|
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');
|
console.log('Loaded menu from cache');
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -4138,7 +4157,7 @@ body {
|
|||||||
|
|
||||||
// Periodic update check (runs on init + every hour)
|
// Periodic update check (runs on init + every hour)
|
||||||
async function checkForUpdates() {
|
async function checkForUpdates() {
|
||||||
const currentVersion = 'v1.6.2';
|
const currentVersion = 'v1.6.3';
|
||||||
const devMode = localStorage.getItem('kantine_dev_mode') === 'true';
|
const devMode = localStorage.getItem('kantine_dev_mode') === 'true';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -4179,7 +4198,7 @@ body {
|
|||||||
const modal = document.getElementById('version-modal');
|
const modal = document.getElementById('version-modal');
|
||||||
const container = document.getElementById('version-list-container');
|
const container = document.getElementById('version-list-container');
|
||||||
const devToggle = document.getElementById('dev-mode-toggle');
|
const devToggle = document.getElementById('dev-mode-toggle');
|
||||||
const currentVersion = 'v1.6.2';
|
const currentVersion = 'v1.6.3';
|
||||||
|
|
||||||
if (!modal) return;
|
if (!modal) return;
|
||||||
modal.classList.remove('hidden');
|
modal.classList.remove('hidden');
|
||||||
@@ -4565,8 +4584,12 @@ body {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// No allergen code found!
|
// No allergen code found!
|
||||||
// If it's not the last part (or even if it is, but we highly suspect merged languages),
|
// If this is the last fragment, it contains only the English text of the final course.
|
||||||
// we use the heuristic to find the hidden split-point.
|
// 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);
|
const split = heuristicSplitEnDe(fragment);
|
||||||
enParts.push(split.enPart);
|
enParts.push(split.enPart);
|
||||||
if (split.nextDe) {
|
if (split.nextDe) {
|
||||||
@@ -4574,6 +4597,7 @@ body {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
de: deParts.map(p => '• ' + p).join('\n'),
|
de: deParts.map(p => '• ' + p).join('\n'),
|
||||||
|
|||||||
30
kantine.js
30
kantine.js
@@ -268,7 +268,7 @@
|
|||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer class="app-footer">
|
<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>
|
</footer>
|
||||||
</div>`;
|
</div>`;
|
||||||
}
|
}
|
||||||
@@ -1309,6 +1309,25 @@
|
|||||||
updateNextWeekBadge();
|
updateNextWeekBadge();
|
||||||
updateAlarmBell();
|
updateAlarmBell();
|
||||||
if (cachedTs) updateLastUpdatedTime(cachedTs);
|
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');
|
console.log('Loaded menu from cache');
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -2524,8 +2543,12 @@
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// No allergen code found!
|
// No allergen code found!
|
||||||
// If it's not the last part (or even if it is, but we highly suspect merged languages),
|
// If this is the last fragment, it contains only the English text of the final course.
|
||||||
// we use the heuristic to find the hidden split-point.
|
// 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);
|
const split = heuristicSplitEnDe(fragment);
|
||||||
enParts.push(split.enPart);
|
enParts.push(split.enPart);
|
||||||
if (split.nextDe) {
|
if (split.nextDe) {
|
||||||
@@ -2533,6 +2556,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
de: deParts.map(p => '• ' + p).join('\n'),
|
de: deParts.map(p => '• ' + p).join('\n'),
|
||||||
|
|||||||
@@ -426,7 +426,7 @@ body {
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding: 2rem 0 0 0;
|
padding: 0 0 0 0;
|
||||||
/* Only top padding, no horizontal so child fills width */
|
/* Only top padding, no horizontal so child fills width */
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -1084,9 +1084,9 @@ body {
|
|||||||
.app-footer {
|
.app-footer {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 1rem 2rem;
|
padding: 0.4rem 2rem;
|
||||||
color: var(--text-secondary);
|
color: var(--text-secondary);
|
||||||
font-size: 0.875rem;
|
font-size: 0.8rem;
|
||||||
border-top: 1px solid var(--border-color);
|
border-top: 1px solid var(--border-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
v1.6.2
|
v1.6.3
|
||||||
|
|||||||
Reference in New Issue
Block a user