Modul:ZauberNachGrad: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Stewie (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Stewie (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
--[[ | --[[ | ||
Erstellt eine tabellarische Übersicht aller Zauber einer Magieschule, | Erstellt eine tabellarische Übersicht aller Zauber einer Magieschule, | ||
gruppiert nach Zaubergrad mit Vorschaubild, Titel, Kurzbeschreibung | gruppiert nach Zaubergrad mit Vorschaubild, Titel, Kurzbeschreibung und weiteren Eigenschaften. | ||
getSpellList | Dieses Modul ist in zwei Hauptfunktionen unterteilt: | ||
renderSpellList | |||
1. getSpellList – Fragt die Daten mit Semantic MediaWiki (SMW) ab und strukturiert sie nach Zaubergrad. | |||
2. renderSpellList – Wandelt diese Daten in eine HTML-Tabelle um und gibt sie aus. | |||
Verwendung: | Verwendung: | ||
{{#invoke:ZauberNachGrad|renderSpellList|Schule=Kampfmagie}} | {{#invoke:ZauberNachGrad|renderSpellList|Schule=Kampfmagie}} | ||
Erforderlich ist ein gültiger Wert für den Parameter „Schule“, z. B. Kampfmagie oder Feuermagie. | |||
--]] | --]] | ||
-- Wir binden ein separates Modul ein, das sich um die Anzeige der Quellen kümmert | |||
local QuellenModul = require('Modul:Quelleninformationen') | |||
local p = {} | local p = {} | ||
-- | --------------------------------------------------------- | ||
-- Funktion: getSpellList(frame) | |||
-- Diese Funktion holt alle Zauber einer bestimmten Magieschule. | |||
-- Die Abfrage erfolgt getrennt für jeden Zaubergrad (0–5). | |||
-- Rückgabe ist ein Lua-Array mit SMW-Ergebnissen je Grad. | |||
--------------------------------------------------------- | |||
function p.getSpellList(frame) | function p.getSpellList(frame) | ||
local schule = frame.args['Schule'] | local schule = frame.args['Schule'] | ||
if not schule then return nil end | if not schule then return nil end -- Wenn keine Schule angegeben ist, abbrechen | ||
local spellData = {} | local spellData = {} | ||
-- Für jeden Grad separat abfragen | |||
for grad = 0, 5 do | for grad = 0, 5 do | ||
local query = string.format( | local query = string.format( | ||
'[[Category::Zauber]][[%s::%d]]|?Seitentitel|?Kurzbeschreibung|?Profilbild|?Zaubertypus|?Zauberart|?Zauberschwierigkeit|?Zauberoption|?Magieschule|mainlabel=-|limit=199', | '[[Category::Zauber]][[%s::%d]]' .. | ||
'|?Seitentitel|?Kurzbeschreibung|?Profilbild|?Zaubertypus|?Zauberart|?Zauberschwierigkeit|?Zauberoption|?Magieschule' .. | |||
'|mainlabel=-|limit=199', | |||
schule, grad | schule, grad | ||
) | ) | ||
local result = mw.smw.ask(query) | local result = mw.smw.ask(query) | ||
if result then | if result then | ||
spellData[grad] = result | spellData[grad] = result | ||
Zeile 33: | Zeile 49: | ||
end | end | ||
-- | --------------------------------------------------------- | ||
-- Funktion: renderSpellList(frame) | |||
-- Diese Funktion nimmt die gruppierten Zauberlisten (von getSpellList), | |||
-- erzeugt eine HTML-Tabelle und gibt sie als String zurück. | |||
--------------------------------------------------------- | |||
function p.renderSpellList(frame) | function p.renderSpellList(frame) | ||
local schuleFilter = frame.args['Schule'] | |||
if not schuleFilter then return "Fehlender Parameter: Schule" end | |||
local spellsByGrad = p.getSpellList(frame) | local spellsByGrad = p.getSpellList(frame) | ||
if not spellsByGrad then | if not spellsByGrad then return "Keine Zauber gefunden." end | ||
local output = {} | local output = {} | ||
local totalCount = 0 | local totalCount = 0 | ||
-- Zählen, wie viele Zauber insgesamt gefunden wurden | |||
for grad = 0, 5 do | for grad = 0, 5 do | ||
local spells = spellsByGrad[grad] | local spells = spellsByGrad[grad] | ||
Zeile 49: | Zeile 72: | ||
end | end | ||
-- Einleitung: Überschrift mit Gesamtanzahl | |||
table.insert(output, string.format('<h2>%d Zauber der Magieschule | table.insert(output, string.format('<h2>%d Zauber der Magieschule</h2>', totalCount)) | ||
-- Beginn der Tabelle mit Spaltenüberschriften | |||
table.insert(output, '<table class="wikitable">') | table.insert(output, '<table class="wikitable">') | ||
table.insert(output, '<tr><th>Bild</th><th>Titel</th><th>Beschreibung</th><th>Typus</th><th>Art</th><th>Schwierigkeit</th><th>Option</th><th>Weitere Magieschulen</th><th> | table.insert(output, | ||
'<tr>' .. | |||
'<th>Bild</th><th>Titel</th><th>Beschreibung</th><th>Typus</th>' .. | |||
'<th>Art</th><th>Schwierigkeit</th><th>Option</th>' .. | |||
'<th>Weitere Magieschulen</th><th>Quelle</th>' .. | |||
'</tr>' | |||
) | |||
-- Für jeden Zaubergrad: Untertitel + Einträge | |||
for grad = 0, 5 do | for grad = 0, 5 do | ||
local spells = spellsByGrad[grad] | local spells = spellsByGrad[grad] | ||
Zeile 86: | Zeile 91: | ||
table.insert(output, string.format('<tr><th colspan="9">Zaubergrad %d</th></tr>', grad)) | table.insert(output, string.format('<tr><th colspan="9">Zaubergrad %d</th></tr>', grad)) | ||
for _, spell in ipairs(spells) do | for _, spell in ipairs(spells) do | ||
-- Basisdaten | |||
local title = spell["Seitentitel"] or "Unbenannt" | local title = spell["Seitentitel"] or "Unbenannt" | ||
local description = spell["Kurzbeschreibung"] or "" | local description = spell["Kurzbeschreibung"] or "" | ||
Zeile 93: | Zeile 99: | ||
end | end | ||
local imageTag = string.format('[[Datei:%s|50px]]', image) | local imageTag = string.format('[[Datei:%s|50px]]', image) | ||
-- Hilfsfunktion zum normierten Anzeigen von SMW-Werten | |||
local function safeString(value) | |||
if type(value) == "table" then | |||
return table.concat(value, ", ") | |||
elseif value and value ~= "" then | |||
return value | |||
else | |||
return "–" | |||
end | |||
end | |||
local typus = safeString(spell["Zaubertypus"]) | local typus = safeString(spell["Zaubertypus"]) | ||
Zeile 99: | Zeile 116: | ||
local option = safeString(spell["Zauberoption"]) | local option = safeString(spell["Zauberoption"]) | ||
-- Weitere Magieschulen | -- Weitere Magieschulen anzeigen (die nicht der aktuellen entsprechen) | ||
local | local magieschule = spell["Magieschule"] | ||
local | local schuleAnzeigen = "–" | ||
if | if magieschule then | ||
if type( | if type(magieschule) == "table" then | ||
local andere = {} | |||
for _, s in ipairs(magieschule) do | |||
local clean = function(str) | |||
return mw.ustring.lower( mw.text.trim( mw.ustring.gsub(str, '[%c%s]+', '') ) ) | |||
end | |||
table. | if clean(s) ~= clean(schuleFilter) then | ||
table.insert(andere, s) | |||
end | |||
end | |||
if #andere > 0 then | |||
schuleAnzeigen = table.concat(andere, ", ") | |||
end | end | ||
elseif mw.ustring.lower(mw.text.trim(magieschule)) ~= mw.ustring.lower(mw.text.trim(schuleFilter)) then | |||
schuleAnzeigen = magieschule | |||
end | end | ||
end | end | ||
-- Quellen | -- Quellen mit externer Modulhilfe holen | ||
local | local quellenAnzeigen = QuellenModul.getQuellen({ args = { Pagename = title } }) or "–" | ||
-- Zeile zur Tabelle hinzufügen | |||
table.insert(output, string.format( | table.insert(output, string.format( | ||
'<tr><td>%s</td><td>[[%s]]</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>', | '<tr><td>%s</td><td>[[%s]]</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>', | ||
imageTag, title, description, typus, art, schwierigkeit, option, schuleAnzeigen, | imageTag, title, description, typus, art, schwierigkeit, option, schuleAnzeigen, quellenAnzeigen | ||
)) | )) | ||
end | end | ||
Zeile 141: | Zeile 150: | ||
end | end | ||
-- Tabelle abschließen | |||
table.insert(output, '</table>') | table.insert(output, '</table>') | ||
return table.concat(output, '\n') | return table.concat(output, '\n') |
Aktuelle Version vom 16. Mai 2025, 09:37 Uhr
Die Dokumentation für dieses Modul kann unter Modul:ZauberNachGrad/Doku erstellt werden
--[[
Erstellt eine tabellarische Übersicht aller Zauber einer Magieschule,
gruppiert nach Zaubergrad mit Vorschaubild, Titel, Kurzbeschreibung und weiteren Eigenschaften.
Dieses Modul ist in zwei Hauptfunktionen unterteilt:
1. getSpellList – Fragt die Daten mit Semantic MediaWiki (SMW) ab und strukturiert sie nach Zaubergrad.
2. renderSpellList – Wandelt diese Daten in eine HTML-Tabelle um und gibt sie aus.
Verwendung:
{{#invoke:ZauberNachGrad|renderSpellList|Schule=Kampfmagie}}
Erforderlich ist ein gültiger Wert für den Parameter „Schule“, z. B. Kampfmagie oder Feuermagie.
--]]
-- Wir binden ein separates Modul ein, das sich um die Anzeige der Quellen kümmert
local QuellenModul = require('Modul:Quelleninformationen')
local p = {}
---------------------------------------------------------
-- Funktion: getSpellList(frame)
-- Diese Funktion holt alle Zauber einer bestimmten Magieschule.
-- Die Abfrage erfolgt getrennt für jeden Zaubergrad (0–5).
-- Rückgabe ist ein Lua-Array mit SMW-Ergebnissen je Grad.
---------------------------------------------------------
function p.getSpellList(frame)
local schule = frame.args['Schule']
if not schule then return nil end -- Wenn keine Schule angegeben ist, abbrechen
local spellData = {}
-- Für jeden Grad separat abfragen
for grad = 0, 5 do
local query = string.format(
'[[Category::Zauber]][[%s::%d]]' ..
'|?Seitentitel|?Kurzbeschreibung|?Profilbild|?Zaubertypus|?Zauberart|?Zauberschwierigkeit|?Zauberoption|?Magieschule' ..
'|mainlabel=-|limit=199',
schule, grad
)
local result = mw.smw.ask(query)
if result then
spellData[grad] = result
end
end
return spellData
end
---------------------------------------------------------
-- Funktion: renderSpellList(frame)
-- Diese Funktion nimmt die gruppierten Zauberlisten (von getSpellList),
-- erzeugt eine HTML-Tabelle und gibt sie als String zurück.
---------------------------------------------------------
function p.renderSpellList(frame)
local schuleFilter = frame.args['Schule']
if not schuleFilter then return "Fehlender Parameter: Schule" end
local spellsByGrad = p.getSpellList(frame)
if not spellsByGrad then return "Keine Zauber gefunden." end
local output = {}
local totalCount = 0
-- Zählen, wie viele Zauber insgesamt gefunden wurden
for grad = 0, 5 do
local spells = spellsByGrad[grad]
if spells then
totalCount = totalCount + #spells
end
end
-- Einleitung: Überschrift mit Gesamtanzahl
table.insert(output, string.format('<h2>%d Zauber der Magieschule</h2>', totalCount))
-- Beginn der Tabelle mit Spaltenüberschriften
table.insert(output, '<table class="wikitable">')
table.insert(output,
'<tr>' ..
'<th>Bild</th><th>Titel</th><th>Beschreibung</th><th>Typus</th>' ..
'<th>Art</th><th>Schwierigkeit</th><th>Option</th>' ..
'<th>Weitere Magieschulen</th><th>Quelle</th>' ..
'</tr>'
)
-- Für jeden Zaubergrad: Untertitel + Einträge
for grad = 0, 5 do
local spells = spellsByGrad[grad]
if spells and #spells > 0 then
table.insert(output, string.format('<tr><th colspan="9">Zaubergrad %d</th></tr>', grad))
for _, spell in ipairs(spells) do
-- Basisdaten
local title = spell["Seitentitel"] or "Unbenannt"
local description = spell["Kurzbeschreibung"] or ""
local image = spell["Profilbild"]
if not image or image == "" then
image = "Icon_Vorlage_Platzhalter_dunkel_64.png"
end
local imageTag = string.format('[[Datei:%s|50px]]', image)
-- Hilfsfunktion zum normierten Anzeigen von SMW-Werten
local function safeString(value)
if type(value) == "table" then
return table.concat(value, ", ")
elseif value and value ~= "" then
return value
else
return "–"
end
end
local typus = safeString(spell["Zaubertypus"])
local art = safeString(spell["Zauberart"])
local schwierigkeit = safeString(spell["Zauberschwierigkeit"])
local option = safeString(spell["Zauberoption"])
-- Weitere Magieschulen anzeigen (die nicht der aktuellen entsprechen)
local magieschule = spell["Magieschule"]
local schuleAnzeigen = "–"
if magieschule then
if type(magieschule) == "table" then
local andere = {}
for _, s in ipairs(magieschule) do
local clean = function(str)
return mw.ustring.lower( mw.text.trim( mw.ustring.gsub(str, '[%c%s]+', '') ) )
end
if clean(s) ~= clean(schuleFilter) then
table.insert(andere, s)
end
end
if #andere > 0 then
schuleAnzeigen = table.concat(andere, ", ")
end
elseif mw.ustring.lower(mw.text.trim(magieschule)) ~= mw.ustring.lower(mw.text.trim(schuleFilter)) then
schuleAnzeigen = magieschule
end
end
-- Quellen mit externer Modulhilfe holen
local quellenAnzeigen = QuellenModul.getQuellen({ args = { Pagename = title } }) or "–"
-- Zeile zur Tabelle hinzufügen
table.insert(output, string.format(
'<tr><td>%s</td><td>[[%s]]</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',
imageTag, title, description, typus, art, schwierigkeit, option, schuleAnzeigen, quellenAnzeigen
))
end
end
end
-- Tabelle abschließen
table.insert(output, '</table>')
return table.concat(output, '\n')
end
return p