Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b8ac5ca1d | ||
|
|
2964eba88b | ||
|
|
089e5375b4 | ||
|
|
e514f42dbe | ||
|
|
f7a9b061ea | ||
|
|
fe75347682 | ||
|
|
5c5255058c | ||
|
|
e16398ef74 | ||
|
|
6a57e2716f | ||
|
|
d383808f4f | ||
|
|
498b400033 | ||
|
|
884a17e7d3 | ||
|
|
ad660799ec |
@@ -28,13 +28,13 @@ if [ ! -f "$JS_FILE" ]; then echo "ERROR: $JS_FILE not found"; exit 1; fi
|
||||
# Generate favicon.png from favicon_base.png if base exists
|
||||
FAVICON_BASE="$SCRIPT_DIR/favicon_base.png"
|
||||
if [ -f "$FAVICON_BASE" ]; then
|
||||
echo "Generating 32x32 favicon.png from favicon_base.png..."
|
||||
echo "Generating 40x40 favicon.png from favicon_base.png..."
|
||||
python3 -c "
|
||||
import sys
|
||||
from PIL import Image
|
||||
try:
|
||||
img = Image.open('$FAVICON_BASE')
|
||||
img_resized = img.resize((32, 32), Image.Resampling.LANCZOS)
|
||||
img_resized = img.resize((40, 40), Image.Resampling.LANCZOS)
|
||||
img_resized.save('$FAVICON_FILE')
|
||||
except Exception as e:
|
||||
print('Favicon generation error:', e)
|
||||
@@ -99,15 +99,20 @@ echo "✅ Standalone HTML: $DIST_DIR/kantine-standalone.html"
|
||||
# Escape CSS for embedding in JS string
|
||||
CSS_ESCAPED=$(echo "$CSS_CONTENT" | sed "s/'/\\\\'/g" | tr '\n' ' ' | sed 's/ */ /g')
|
||||
|
||||
# Build bookmarklet payload
|
||||
# Create a minified version for the injected bookmarklet payloads
|
||||
echo "Minifying JS with Terser..."
|
||||
TEMP_JS=$(mktemp)
|
||||
echo "$JS_CONTENT" > "$TEMP_JS"
|
||||
JS_MINIFIED=$(npx -y terser "$TEMP_JS" --compress --mangle)
|
||||
rm -f "$TEMP_JS"
|
||||
|
||||
cat > "$DIST_DIR/bookmarklet-payload.js" << PAYLOADEOF
|
||||
(function(){
|
||||
javascript:(function(){
|
||||
if(window.__KANTINE_LOADED){alert('Kantine Wrapper already loaded!');return;}
|
||||
var s=document.createElement('style');
|
||||
s.textContent='${CSS_ESCAPED}';
|
||||
document.head.appendChild(s);
|
||||
var s=document.createElement('style');s.textContent='${CSS_ESCAPED}';document.head.appendChild(s);
|
||||
// Inject JS logic
|
||||
var sc=document.createElement('script');
|
||||
sc.textContent=$(echo "$JS_CONTENT" | python3 -c "import sys,json; print(json.dumps(sys.stdin.read()))" 2>/dev/null || echo "$JS_CONTENT" | sed 's/\\/\\\\/g' | sed "s/'/\\\\'/g" | sed 's/"/\\\\"/g' | tr '\n' ' ' | sed 's/^/"/' | sed 's/$/"/');
|
||||
sc.textContent=$(echo "$JS_MINIFIED" | python3 -c "import sys,json; print(json.dumps(sys.stdin.read()))" 2>/dev/null || echo "$JS_MINIFIED" | sed 's/\\/\\\\/g' | sed "s/'/\\\\'/g" | sed 's/"/\\\\"/g' | tr '\n' ' ' | sed 's/^/"/' | sed 's/$/"/');
|
||||
document.head.appendChild(sc);
|
||||
})();
|
||||
PAYLOADEOF
|
||||
@@ -161,7 +166,7 @@ cat > "$DIST_DIR/install.html" << INSTALLEOF
|
||||
|
||||
<div style="text-align: center; margin-bottom: 30px;">
|
||||
<h1 style="margin-bottom: 5px; display: flex; align-items: center; justify-content: center; gap: 10px;">
|
||||
<img src="$FAVICON_URL" alt="Logo" style="width: 38px; height: 38px;">
|
||||
<img src="$FAVICON_URL" alt="Logo" style="width: 40px; height: 40px;">
|
||||
Kantine Wrapper
|
||||
<span style="font-size:0.5em; opacity:0.6; font-weight:400; margin-left:5px;">$VERSION</span>
|
||||
</h1>
|
||||
@@ -239,12 +244,11 @@ fi
|
||||
|
||||
# Embed the bookmarklet URL inline
|
||||
echo "document.getElementById('bookmarklet-link').href = " >> "$DIST_DIR/install.html"
|
||||
echo "$JS_CONTENT" | python3 -c "
|
||||
echo "$JS_MINIFIED" | python3 -c "
|
||||
import sys, json, urllib.parse
|
||||
|
||||
# 1. Read JS and Replace VERSION + Favicon
|
||||
js_template = sys.stdin.read()
|
||||
js = js_template.replace('{{VERSION}}', '$VERSION').replace('{{FAVICON_DATA_URI}}', '$FAVICON_URL')
|
||||
js = sys.stdin.read()
|
||||
|
||||
# 2. Prepare CSS for injection via createElement('style')
|
||||
css = open('$CSS_FILE').read().replace('\n', ' ').replace(' ', ' ')
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
## v1.6.8 (2026-03-06)
|
||||
- ⚡ **Performance**: Das JavaScript für das Kantinen-Bookmarklet wird nun beim Build-Prozess (via Terser) minimiert, was die Länge der injizierten URL spürbar reduziert.
|
||||
|
||||
## v1.6.7 (2026-03-06)
|
||||
- 🎨 **Style**: Das neue Header-Logo (`favicon_base.png`) wird nun konsequent auf 40x40px generiert und gerendert.
|
||||
|
||||
## v1.6.6 (2026-03-06)
|
||||
- 🎨 **Style**: Den Schatten und den hervorstehenden Karten-Effekt für bestellte Menüs an vergangenen Tagen komplett entfernt - verbleiben nun visuell flach und unaufdringlich wie nicht-bestellte Menüs.
|
||||
|
||||
## v1.6.5 (2026-03-06)
|
||||
- ✨ **Feature**: Das `restaurant_menu` Icon im Header wurde durch das neue `favicon_base.png` Logo ersetzt, passend zur Textgröße skaliert.
|
||||
- 🎨 **Style**: Violette Umrahmung (Bestellt-Markierung) an vergangenen Tagen entfernt, um den Fokus auf aktuelle und zukünftige Bestellungen zu lenken.
|
||||
|
||||
9
dist/bookmarklet-payload.js
vendored
9
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
36
dist/install.html
vendored
36
dist/install.html
vendored
File diff suppressed because one or more lines are too long
26
dist/kantine-standalone.html
vendored
26
dist/kantine-standalone.html
vendored
File diff suppressed because one or more lines are too long
BIN
favicon.png
BIN
favicon.png
Binary file not shown.
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 3.6 KiB |
@@ -80,7 +80,7 @@
|
||||
<header class="app-header">
|
||||
<div class="header-content">
|
||||
<div class="brand">
|
||||
<img src="{{FAVICON_DATA_URI}}" alt="Logo" class="logo-img" style="height: 1.2em; width: 1.2em; object-fit: contain;">
|
||||
<img src="{{FAVICON_DATA_URI}}" alt="Logo" class="logo-img" style="height: 2em; width: 2em; object-fit: contain;">
|
||||
<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ü">{{VERSION}}</small></h1>
|
||||
<div id="last-updated-subtitle" class="subtitle"></div>
|
||||
@@ -268,7 +268,7 @@
|
||||
</main>
|
||||
|
||||
<footer class="app-footer">
|
||||
<p>Jetzt Bessa Einfach! • Knapp-Kantine Wrapper • <span id="current-year">${new Date().getFullYear()}</span> by Kaufis-Kitchen</p>
|
||||
<p>Jetzt Bessa Einfach! • Knapp-Kantine Wrapper • <span id="current-year">${new Date().getFullYear()}</span> by Kaufi 😃👍 mit Hilfe von KI 🤖</p>
|
||||
</footer>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
12
style.css
12
style.css
@@ -875,17 +875,7 @@ body {
|
||||
filter: grayscale(0.4);
|
||||
}
|
||||
|
||||
/* Enhancements for ordered items */
|
||||
.menu-card.past-day .menu-item.ordered {
|
||||
/* No opacity/filter here - fully visible */
|
||||
background: var(--bg-card);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
border-radius: 8px;
|
||||
padding: 1rem;
|
||||
margin: 0 -1rem 1.5rem -1rem;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
}
|
||||
/* Past ordered items get no special frame or shadow, but remain visually distinct by staying fully opaque (via the :not(.ordered) selector above) */
|
||||
|
||||
.menu-item.today-ordered {
|
||||
border: 2px solid #8b5cf6;
|
||||
|
||||
@@ -1 +1 @@
|
||||
v1.6.5
|
||||
v1.6.8
|
||||
|
||||
Reference in New Issue
Block a user