Modul:Get
Die Dokumentation für dieses Modul kann unter Modul:Get/Doku erstellt werden
-- Modul:Get
-- Allgemeiner Zugriff auf strukturierte Daten (Item/Event/Hero/Guardian/…)
-- Aufruf über Vorlage:Get → {{Get|DATA|METHODE|KEY}}
local p = {}
local DATA_MODULE = 'Modul:Get/Data'
local data = mw.loadData( DATA_MODULE )
-- --------------------------------------------------------
-- Hilfsfunktionen
-- --------------------------------------------------------
local function fileExists(name)
if not name or name == '' then
return false
end
-- "File" = Datei-Namensraum
local titleObj = mw.title.makeTitle('File', name)
if not titleObj then
return false
end
local fileObj = titleObj.file
if not fileObj or not fileObj.exists then
return false
end
return true
end
local function applyPlaceholder(text, title)
if not text or text == '' then
return nil
end
-- ersetzt $1 im Text durch den Title
return text:gsub('$1', function()
return title or ''
end)
end
local function wrapWithTooltip(labelText, linkTarget, desc, noTooltip)
if not labelText or labelText == '' then
return ''
end
local out = labelText
-- Link bauen, falls vorhanden
if linkTarget and linkTarget ~= '' then
-- Wenn der Link schon fertiges Wikitext ist ([...] oder [[...]]),
-- dann nicht doppelt einpacken
if linkTarget:match('^%[%[') or linkTarget:match('^%[') then
out = linkTarget
else
-- interner Link: [[Seite|Label]]
out = '[[' .. linkTarget .. '|' .. labelText .. ']]'
end
end
-- Tooltip nur, wenn eine Beschreibung existiert und nicht explizit deaktiviert
if desc and desc ~= '' and not noTooltip then
local escDesc = desc:gsub('"', '"')
out = '<span class="kr-get" title="' .. escDesc .. '">' .. out .. '</span>'
end
return out
end
-- --------------------------------------------------------
-- Hauptfunktion
-- --------------------------------------------------------
function p.main(frame)
-- Unterstützung für sowohl Template-Aufruf als auch direkten #invoke:
local args = frame.args
local dataset = args.dataset or args[1]
local method = args.method or args[2] or 'link'
local key = args.key or args[3]
local noTooltip = args.noTooltip == '1' or args.notooltip == '1'
if not dataset or dataset == '' or not key or key == '' then
return ''
end
local group = data[dataset]
if not group then
-- unbekannter Datensatz → gib einfach den Key zurück, damit die Seite nicht "kaputt" ist
return key
end
local raw = group[key]
if not raw then
-- unbekannter Schlüssel → gib Key zurück
return key
end
local title = raw.title or key -- Pflicht (aber mit Fallback)
local short = raw.short or title -- Fallback von short → title
-- Platzhalter in desc/link anwenden
local desc = applyPlaceholder(raw.desc, title)
local link = applyPlaceholder(raw.link, title)
-- Bild auswählen
local chosenImg
if raw.img and fileExists(raw.img) then
chosenImg = raw.img
elseif fileExists(title) then
-- Versuch: Datei mit dem gleichen Namen wie der Title (ohne "Datei:")
chosenImg = title
end
-- wenn beides nicht existiert → chosenImg bleibt nil → kein Bild
-- Methode normalisieren
method = tostring(method):lower()
if method == 'title' then
-- Nur Titel (mit optionalem Tooltip, aber ohne Link)
return wrapWithTooltip(title, nil, desc, noTooltip)
elseif method == 'short' then
-- Short-Text (mit optionalem Tooltip, aber ohne Link)
return wrapWithTooltip(short, nil, desc, noTooltip)
elseif method == 'link' then
-- Short (oder Title) als Label, Link falls vorhanden, Tooltip falls vorhanden
return wrapWithTooltip(short, link, desc, noTooltip)
elseif method == 'img' then
-- Nur das Bild (mit optionalem Link, aber kein Tooltip-Span, damit es sauber bleibt)
if not chosenImg then
return ''
end
local alt = title or ''
if link and link ~= '' and not (link:match('^%[')) then
-- internes Link-Ziel
return '[[Datei:' .. chosenImg .. '|link=' .. link .. '|alt=' .. alt .. ']]'
else
-- kein/eigener Link
return '[[Datei:' .. chosenImg .. '|alt=' .. alt .. ']]'
end
elseif method == 'desc' then
-- reine Beschreibung (Plaintext/WikiText), ohne Tooltip-Wrapper
return desc or ''
else
-- Unbekannte Methode → Standard: wie "link"
return wrapWithTooltip(short, link, desc, noTooltip)
end
end
return p