174 lines
15 KiB
Python
174 lines
15 KiB
Python
#!/usr/bin/env python3
|
||
"""Generate menu HTML from Beyt Beytak speisekarte data."""
|
||
|
||
IMG = "images/gerichte"
|
||
|
||
def card(name, price, desc, allergens="", img=None, tags=None, diet="", noix="false"):
|
||
tags = list(tags or [])
|
||
if allergens:
|
||
tags.append(('blue', allergens))
|
||
tags_html = ""
|
||
if tags:
|
||
tags_html = '\n <div class="menu-card__tags">\n'
|
||
for cls, text in tags:
|
||
tags_html += f' <span class="tag tag--{cls}">{text}</span>\n'
|
||
tags_html += ' </div>'
|
||
img_html = '<div class="menu-card__img menu-card__img--empty"></div>'
|
||
if img:
|
||
alt = name.replace('&', '&')
|
||
img_html = f'''<div class="menu-card__img">
|
||
<img src="{img}" alt="{alt}" loading="lazy">
|
||
</div>'''
|
||
diet_attr = f' data-diet="{diet}"' if diet else ' data-diet=""'
|
||
return f''' <div class="menu-card"{diet_attr} data-noix="{noix}">
|
||
{img_html}
|
||
<div class="menu-card__body">
|
||
<div class="menu-card__top">
|
||
<h3>{name}</h3>
|
||
<span class="menu-card__price">{price}</span>
|
||
</div>
|
||
<p>{desc}</p>{tags_html}
|
||
</div>
|
||
</div>
|
||
'''
|
||
|
||
def tab_panel(tab_id, items, active=False):
|
||
active_cls = ' active' if active else ''
|
||
cards = '\n'.join(items)
|
||
return f''' <div class="menu__content{active_cls}" id="tab-{tab_id}" role="tabpanel" aria-labelledby="tab-{tab_id}">
|
||
<div class="menu__grid">
|
||
{cards}
|
||
</div>
|
||
</div>
|
||
'''
|
||
|
||
# --- VORSPEISEN ---
|
||
vorspeisen = [
|
||
card("Taboulah", "5,00 €", "Petersilie, Tomaten, Bulgur, Zitronensaft, Olivenöl", "A1", img=f"{IMG}/taboulah.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Fattoush", "6,00 €", "Frittiertes Brot, Tomaten, Gurken, Römersalat, Minze, Zwiebeln, Knoblauch, Olivenöl, Granatapfelsirup", "A1, K", img=f"{IMG}/fattoush.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Baba Ghanoush", "5,00 €", "Gegrillte Aubergine, Joghurt, Tahina, Knoblauchsoße, Olivenöl", "F, J", img=f"{IMG}/baba-ghanoush.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Hummus", "5,00 €", "Kichererbsen, Tahina, Zitronensaft, Olivenöl", "I", img=f"{IMG}/hummus.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("4× Käse Börek", "5,00 €", "Käse, Teigblätter", "A1, F, B", img=f"{IMG}/kaese-boerek.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("4× Spinat Börek", "5,00 €", "Spinat, Käse, Zwiebeln", "A1, F, B", img=f"{IMG}/spinat-boerek.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("4× Hackfleisch Börek", "5,00 €", "Hackfleisch, Zwiebel, Teigblätter", "A1, F", img=f"{IMG}/hackfleisch-boerek.png"),
|
||
card("Kibbe frittiert", "2,00 €", "Bulgur, Zwiebel, Hackfleisch", "A1, K, H", img=f"{IMG}/kibbe-frittiert.png"),
|
||
card("Salat Spezial", "7,00 €", "Tomaten, Gurken, Zwiebeln, Feta Käse, Olivenöl", "F, K", img=f"{IMG}/salat-spezial.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Gefüllte Weinblätter (Yalinyi)", "5,00 €", "Weinblätter, Reis, Petersilie, Zwiebeln, Knoblauch, Tomaten, Paprika, Granatapfelsirup, Olivenöl", "K", img=f"{IMG}/weinblaetter.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Abu Ali Salat Spezial mit Hähnchen", "8,00 €", "Kopfsalat, Tomaten, Gurken, Oliven, Hähnchenfilet, Käse, Granatapfelsirup, Olivenöl", "F", img=f"{IMG}/abu-ali-salat.png"),
|
||
card("Vorspeisen-Teller vegetarisch", "11,00 €", "Taboulah, Hummus, Baba Ghanoush, 2× Falafel, 1× Spinat Börek, 1× Käse Börek", "A1, H, J, I, F", img=f"{IMG}/vorspeisen-teller.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Falafel-Teller", "6,00 €", "4× Falafel, Hummus, Tomaten, Gurken, Brot", "A1, J, H, I", img=f"{IMG}/falafel-teller.png", tags=[('green', 'Vegan')], diet="vg"),
|
||
card("Linsensuppe", "3,50 €", "Linsen, Karotten, Kartoffeln", "A1, I, E", img=f"{IMG}/linsensuppe.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
]
|
||
|
||
# --- MENÜ (Hauptgerichte) ---
|
||
menue = [
|
||
card("Mexicano", "14,90 €", "Hähnchenbruststreifen, Karotten, Zwiebel, Paprika, mit Reis oder Pommes, Coleslaw, Spezialsoße, gebratenes Brot mit Paprikasauce und Käse", "A1, B, I, 2, F, 4, 1", img=f"{IMG}/menue-mexicano.png"),
|
||
card("Faijta", "14,90 €", "Hähnchenbruststreifen, Champignons, Paprika, Zwiebel, Senf, Käse, mit Reis oder Pommes, Coleslaw, Spezialsoße, gebratenes Brot mit Paprikasauce und Käse", "A1, B, I, F, 2, 4, 1", img=f"{IMG}/menue-faijta.png"),
|
||
card("Francisco", "14,90 €", "Hähnchenbruststreifen, Champignons, Paprika, Zwiebel, Mais, Käse, mit Reis oder Pommes, Coleslaw, Spezialsoße, gebratenes Brot mit Paprikasauce und Käse", "A1, B, I, F, 2, 4, 2", img=f"{IMG}/menue-francisco.png"),
|
||
card("Philadelphia", "15,90 €", "Lammfiletstreifen, Champignons, Zwiebel, Paprika, mit Reis oder Pommes, Coleslaw, Spezialsoße, gebratenes Brot mit Paprikasauce und Käse", "A1, B, I, 2, F, 4, 2", img=f"{IMG}/menue-philadelphia.png"),
|
||
card("Hähnchenspieß", "14,90 €", "4× Hähnchenspieß mit Reis oder Pommes, Coleslaw, Spezialsoße, gebratenes Brot mit Paprikasauce und Käse", "A1, B, I, 2, F, 1", img=f"{IMG}/menue-haehnchenspiess.png"),
|
||
card("Crispy", "12,90 €", "4× Hähnchenbrust mit Reis oder Pommes, Coleslaw, Spezialsoße, gebratenes Brot mit Paprikasauce und Käse", "A1, B, I, 2, 1, F", img=f"{IMG}/menue-crispy.png"),
|
||
card("Hähnchenleber", "12,90 €", "Hähnchenleber, Zwiebel, grüner Koriander, Paprika, mit Reis oder Pommes, Coleslaw, Spezialsoße, gebratenes Brot mit Paprikasauce und Käse", "A1, F, B, I, 2, 1", img=f"{IMG}/menue-haehnchenleber.png"),
|
||
card("Broasted — halbes Hähnchen frittiert", "14,90 €", "Halbes Hähnchen frittiert, Pommes, eingelegtes Gemüse, Knoblauchsoße", "A1, B, I, 2, 1, F", img=f"{IMG}/menue-broasted.png"),
|
||
card("Mendi Lammfleisch mit Reis", "15,00 €", "Lammfleisch mit Knochen, gewürztes Reis, Salat mit Joghurt und Gurke", "F, G", img=f"{IMG}/menue-mendi-lamm.png", noix="true"),
|
||
card("Kebsi — halbes Hähnchen mit Reis", "13,50 €", "Halbes Hähnchen, gewürztes Reis, Salat mit Joghurt und Gurke", "F, G", img=f"{IMG}/menue-kebsi.png", noix="true"),
|
||
card("Arabischer Shawarma-Teller", "11,00 €", "Selbstgemachte Shawarma vom Grill, Pommes, eingelegtes Gemüse, Knoblauchsoße, Coleslaw", "A, B, F, K", img=f"{IMG}/menue-shawarma.png"),
|
||
card("Nuggets mit Pommes", "10,00 €", "10 Nuggets mit Pommes, Knoblauchsoße", "A1, B, I, 2, 1, F", img=f"{IMG}/menue-nuggets.png"),
|
||
]
|
||
|
||
# --- PASTITIEN ---
|
||
pastitien = [
|
||
card("Lahmacun", "2,75 €", "Hackfleisch, Tomaten, Paprika, Zwiebeln, Knoblauch, Petersilie", "A1", img=f"{IMG}/lahmacun.png"),
|
||
card("Käse Manaesch", "2,50 €", "Käse auf dünnem Fladenteig", "A1, F, J", img=f"{IMG}/kaese-manaesch.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Dreieckige Käsetasche", "2,50 €", "Käse", "A1, F", img=f"{IMG}/kaesetasche.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Hähnchen-Pide", "2,75 €", "Hähnchenbruststreifen, Käse, Zwiebeln, Paprika, Karotten", "A1, F", img=f"{IMG}/haehnchen-pide.png"),
|
||
card("Hackfleisch-Pide", "2,75 €", "Hackfleisch, Käse, Zwiebeln, Granatapfelsirup", "A1, F", img=f"{IMG}/hackfleisch-pide.png"),
|
||
card("Sucuk-Pide", "2,75 €", "Sucuk, Käse, Paprikasauce", "A1, F, 2, 3, 4", img=f"{IMG}/sucuk-pide.png"),
|
||
card("Dreieckige Spinattasche", "2,50 €", "Spinat, Zwiebeln, Käse", "A1, F", img=f"{IMG}/spinattasche.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Hähnchenleber-Pide", "2,50 €", "Hähnchenleber, grüner Koriander, Zwiebeln, Käse", "A1, F", img=f"{IMG}/haehnchenleber-pide.png"),
|
||
card("Paprika Manaesch", "2,50 €", "Paprikasauce, Zwiebeln, Käse", "A1, F", img=f"{IMG}/paprika-manaesch.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Zaater Manaesch", "2,50 €", "Sesam, Gewürze, Olivenöl, Käse", "A1, F, J", img=f"{IMG}/zaater-manaesch.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Toshka", "5,00 €", "Hackfleisch, Käse", "A1, F", img=f"{IMG}/toshka.png"),
|
||
card("4× Mini-Pide", "5,00 €", "Käse, Sucuk, Gemüse, Hähnchen", "A1, F, I, K, E", img=f"{IMG}/mini-pide.png"),
|
||
card("Steak Manaesch", "6,00 €", "Lammsteak-Stücke", "A1", img=f"{IMG}/steak-manaesch.png"),
|
||
]
|
||
|
||
# --- SANDWICHES ---
|
||
sandwiches = [
|
||
card("Mexicano", "7,50 €", "Hähnchenbruststreifen, Paprika, Zwiebel, Karotten, Käse, Coleslaw, Baguette oder arabisches Brot", "A1, F, B, 1, 2", img=f"{IMG}/sandwich-mexicano.png"),
|
||
card("Faijta", "7,50 €", "Hähnchenbruststreifen, Champignons, Paprika, Zwiebel, Senf, Käse, Pommes, Coleslaw, Baguette oder arabisches Brot", "A1, F, 2, 4, B, I", img=f"{IMG}/sandwich-faijta.png"),
|
||
card("Francisco", "7,50 €", "Hähnchenbruststreifen, Mais, Champignons, Käse, Paprika, Coleslaw, Pommes, Baguette oder arabisches Brot", "A1, 2, 4, B, I, F", img=f"{IMG}/sandwich-francisco.png"),
|
||
card("Philadelphia", "8,50 €", "Lammfiletstreifen, Champignons, Paprika, Zwiebeln, Pommes, Käse, Coleslaw, Spezialsoße, Baguette oder arabisches Brot", "A1, 2, 4, B, I, F, 1", img=f"{IMG}/sandwich-philadelphia.png"),
|
||
card("Hähnchenspieß", "7,50 €", "2× Hähnchenspieß, eingelegte Gurken, Pommes, Knoblauchsoße, Käse, Baguette oder arabisches Brot", "A1, F, B", img=f"{IMG}/sandwich-haehnchenspiess.png"),
|
||
card("Crispysandwich", "7,50 €", "2× Hähnchenbrust frittiert, Coleslaw, Pommes, Spezialsauce, Baguette oder arabisches Brot", "A1, B, 1, 2, I", img=f"{IMG}/sandwich-crispy.png"),
|
||
card("Hähnchenleber", "7,00 €", "Hähnchenleber, Zwiebel, grüner Koriander, Pommes, eingelegte Gurken, Knoblauchsoße, Baguette oder arabisches Brot", "A1, F, B", img=f"{IMG}/sandwich-haehnchenleber.png"),
|
||
card("Burger", "8,00 €", "Rindfleisch gemischt mit Lammfleisch, Zwiebel, Tomaten, Salat, Spezialsauce", "A1, F, I, 1, 2, B", img=f"{IMG}/sandwich-burger.png"),
|
||
card("Cheeseburger", "8,00 €", "Rindfleisch gemischt mit Lammfleisch, Zwiebel, Tomaten, Salat, Käse, Spezialsauce", "A1, F, 1, 2, B, I", img=f"{IMG}/sandwich-cheeseburger.png"),
|
||
card("Shawarma-Sandwich", "7,00 €", "Selbstgemachte Shawarma vom Grill, Knoblauchsoße, eingelegte Gurken, Granatapfelsirup", "A1, 2, 4, B, I, F", img=f"{IMG}/sandwich-shawarma.png"),
|
||
card("Kebab-Sandwich", "7,00 €", "2× Kebab-Spieße, Petersilie, Zwiebeln, Paprikasauce, nach Wahl mit Pommes", "A1, 2, 4, B, I, F", img=f"{IMG}/sandwich-kebab.png"),
|
||
card("Chickencheeseburger", "8,00 €", "Hähnchenbrust frittiert, Salat, Zwiebel, Tomaten, Käse, Spezialsauce", "A1, F, I, 1, 2, B", img=f"{IMG}/sandwich-chickencheeseburger.png"),
|
||
card("Pommessandwich", "6,00 €", "Pommes, Coleslaw, Käse, Ketchup, Knoblauchsoße, Baguette oder arabisches Brot", "A1, B, F, H, I, 2", img=f"{IMG}/sandwich-pommes.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Falafel-Sandwich", "6,00 €", "Falafel, Salat, Gurken, Minze, Tomaten, Tahina, Essiggurke, arabisches Brot", "A, G, N, E", img=f"{IMG}/sandwich-falafel.png", tags=[('green', 'Vegan')], diet="vg", noix="true"),
|
||
card("Arabisches Sucuk-Sandwich", "7,00 €", "2× Sucuk-Spieße, Knoblauchsoße, Essiggurken, Paprikasauce, nach Wahl mit Pommes", "A1, 2, 4, B, I, F", img=f"{IMG}/sandwich-sucuk.png"),
|
||
]
|
||
|
||
# --- PIZZA ---
|
||
pizza = [
|
||
card("Margherita", "8,50 €", "Tomatensauce, Käse", "A1, F", img=f"{IMG}/pizza-margherita.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Salami", "9,50 €", "Tomatensauce, Käse, Geflügelsalami", "A1, F, 1, 2, 4", img=f"{IMG}/pizza-salami.png"),
|
||
card("Thunfisch", "9,50 €", "Tomatensauce, Käse, Thunfisch, Zwiebeln", "A1, F, D, 1", img=f"{IMG}/pizza-thunfisch.png"),
|
||
card("Champignon", "9,50 €", "Tomatensauce, Käse, Champignons", "A1, F, 2, 4", img=f"{IMG}/pizza-champignon.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Vegetariana", "9,50 €", "Tomatensauce, Käse, Mais, Pilze, Paprika, frische Tomaten, Oliven", "A1, F, 2, 4", img=f"{IMG}/pizza-vegetariana.png", tags=[('green', 'Vegetarisch')], diet="v"),
|
||
card("Sucuk", "9,50 €", "Tomatensauce, Käse, Sucuk", "A1, F, 2, 3, 4", img=f"{IMG}/pizza-sucuk.png"),
|
||
card("Abu Ali Spezial-Pizza", "11,00 €", "Tomatensauce, Käse, Hähnchenbruststreifen, Pilze, Oliven, Paprika", "A, F, 2, 4", img=f"{IMG}/pizza-abu-ali.png", tags=[('orange', 'Beliebt!')]),
|
||
card("Hackfleischpizza", "9,50 €", "Tomatensauce, Käse, Hackfleisch", "A1, F", img=f"{IMG}/pizza-hackfleisch.png"),
|
||
card("Familienpizza", "25,00 €", "Ca. 50 cm Durchmesser, Zutaten nach Wahl", "A1, F", img=f"{IMG}/pizza-familie.png", tags=[('orange', 'Ca. 50 cm')]),
|
||
]
|
||
|
||
tabs_html = ''' <div class="menu__tabs" role="tablist">
|
||
<button class="menu__tab active" data-tab="vorspeisen" role="tab" aria-selected="true" aria-controls="tab-vorspeisen">Vorspeisen</button>
|
||
<button class="menu__tab" data-tab="menue" role="tab" aria-selected="false" aria-controls="tab-menue">Menü</button>
|
||
<button class="menu__tab" data-tab="pastitien" role="tab" aria-selected="false" aria-controls="tab-pastitien">Pastitien</button>
|
||
<button class="menu__tab" data-tab="sandwiches" role="tab" aria-selected="false" aria-controls="tab-sandwiches">Sandwiches</button>
|
||
<button class="menu__tab" data-tab="pizza" role="tab" aria-selected="false" aria-controls="tab-pizza">Pizza</button>
|
||
</div>
|
||
|
||
<p class="menu__allergen-hinweis">Allergen- und Zusatzstoffkennzeichnung: A–N (Allergene), 1–14 (Zusatzstoffe). Details auf Anfrage im Restaurant.</p>
|
||
'''
|
||
|
||
panels = (
|
||
tab_panel("vorspeisen", vorspeisen, active=True)
|
||
+ tab_panel("menue", menue)
|
||
+ tab_panel("pastitien", pastitien)
|
||
+ tab_panel("sandwiches", sandwiches)
|
||
+ tab_panel("pizza", pizza)
|
||
)
|
||
|
||
filters_html = ''' <div class="menu__filters" id="menuFilters">
|
||
<button class="menu__filter" data-filter="v">Vegetarisch</button>
|
||
<button class="menu__filter" data-filter="vg">Vegan</button>
|
||
<button class="menu__filter" data-filter="noix">Ohne Nüsse</button>
|
||
<button class="menu__filter-reset" id="filterReset">Zurücksetzen</button>
|
||
</div>
|
||
|
||
'''
|
||
|
||
menu_inner = filters_html + tabs_html + panels
|
||
|
||
with open("index.html", "r", encoding="utf-8") as f:
|
||
html = f.read()
|
||
|
||
start = html.find(' <div class="menu__filters" id="menuFilters">')
|
||
end = html.find(' <div class="menu__footer">')
|
||
|
||
if start == -1 or end == -1:
|
||
raise SystemExit("Could not find menu boundaries")
|
||
|
||
html = html[:start] + menu_inner + html[end:]
|
||
|
||
with open("index.html", "w", encoding="utf-8") as f:
|
||
f.write(html)
|
||
|
||
total = len(vorspeisen) + len(menue) + len(pastitien) + len(sandwiches) + len(pizza)
|
||
print(f"Menu rebuilt: {total} Gerichte, alle mit Bildern")
|