Modul:Rezepte
Aus Dreamlight Valley Wiki
Die Dokumentation für dieses Modul kann unter Modul:Rezepte/Doku erstellt werden
local p = {}
-- Map: Zutat-Kategorie -> Rezept-Kategorie
local CAT_MAP = {
["Gemüse"] = "Gericht mit Gemüse",
["Fleisch"] = "Gericht mit Fleisch",
["Fisch"] = "Gericht mit Fisch",
["Meeresfrüchte"] = "Gericht mit Meeresfrüchten",
["Frucht"] = "Gericht mit Früchten",
["Getreide"] = "Gericht mit Getreide",
["Gewürz"] = "Gericht mit Gewürzen",
["Protein"] = "Gericht mit Protein",
["Süß"] = "Gericht mit süßen Zutaten",
["Gefroren"] = "Gericht mit gefrorenen Zutaten",
}
local function trim(s)
return (s or ""):gsub("^%s+", ""):gsub("%s+$", "")
end
-- Extrahiert Link-Ziele aus gerendertem Wikitext: [[Aubergine]] / [[Aubergine|...]]
-- Filtert Datei:, Kategorie: usw. raus.
local function extract_links(wikitext)
local seen, out = {}, {}
if not wikitext then return out end
for target in wikitext:gmatch("%[%[([^%]|#]+)") do
target = trim(target)
if target ~= ""
and not target:match("^[Dd]atei:")
and not target:match("^[Ff]ile:")
and not target:match("^[Kk]ategorie:")
and not target:match("^[Cc]ategory:")
then
if not seen[target] then
seen[target] = true
table.insert(out, target)
end
end
end
return out
end
-- Liest Kategorien aus dem Wikitext einer Seite (direkte [[Kategorie:...]] im Quelltext)
local function extract_categories(wikitext)
local cats = {}
if not wikitext then return cats end
for cat in wikitext:gmatch("%[%[%s*[Kk]ategorie%s*:%s*([^%]|]+)") do
cats[trim(cat)] = true
end
for cat in wikitext:gmatch("%[%[%s*[Cc]ategory%s*:%s*([^%]|]+)") do
cats[trim(cat)] = true
end
return cats
end
local function current_is_template_namespace()
local t = mw.title.getCurrentTitle()
-- ns 10 ist normalerweise "Vorlage"
return t and (t.namespace == 10 or t.nsText == "Vorlage")
end
-- Holt Rezeptname robust aus #invoke:
-- Unterstützt {{#invoke:Rezepte|debug|Auberginenrollen}}
-- und {{#invoke:Rezepte|debug|rezept=Auberginenrollen}}
local function get_rezeptname(frame)
local args = frame.args or {}
local name = trim(args.rezept or args[1] or "")
return name
end
-- Rendert Vorlage:Rezept für ein Rezept und extrahiert Zutaten-Seitennamen
local function get_ingredients_from_rezept_template(frame, rezeptname)
-- Namespace-sicher: exakt "Vorlage:Rezept"
local rendered = frame:expandTemplate{
title = "Vorlage:Rezept",
args = { rezeptname }
}
return extract_links(rendered), rendered
end
-- DEBUG: zeigt nur, welche Zutaten erkannt werden (setzt KEINE Kategorien)
function p.debug(frame)
local rezeptname = get_rezeptname(frame)
if rezeptname == "" then
return "Kein rezept= übergeben."
end
local ingredients = get_ingredients_from_rezept_template(frame, rezeptname)
if #ingredients == 0 then
return "Keine Zutaten-Links erkannt. Prüfe, ob {{name|...}} wirklich Wikilinks rendert."
end
return "Erkannte Zutaten: " .. table.concat(ingredients, ", ")
end
-- CATS: setzt Kategorien anhand Zutatenseiten-Kategorien
function p.cats(frame)
-- niemals die Vorlagenseite selbst kategorisieren
if current_is_template_namespace() then
return ""
end
local rezeptname = get_rezeptname(frame)
if rezeptname == "" then
return ""
end
local ingredients = get_ingredients_from_rezept_template(frame, rezeptname)
local recipeCats = {}
for _, ing in ipairs(ingredients) do
local title = mw.title.new(ing)
if title and title.exists then
local content = title:getContent()
local ingCats = extract_categories(content)
for ingCat, _ in pairs(ingCats) do
local mapped = CAT_MAP[ingCat]
if mapped then
recipeCats[mapped] = true
end
end
end
end
local out = {}
for catName, _ in pairs(recipeCats) do
table.insert(out, string.format("[[Kategorie:%s]]", catName))
end
return table.concat(out, "")
end
return p