Modul:Steckbrief
Die Dokumentation für dieses Modul kann unter Modul:Steckbrief/Doku erstellt werden
-- Modul:Steckbrief
-- Erzeugt den Steckbrief fuer Vorlage:Steckbrief.
--
-- Ohne spalten=: Paare aus Merkmal und Wert {{Steckbrief|Format|openTRANS 2.1|Weg|FTP-Job}}
-- Mit spalten=: Merkmal + ein Wert je Spalte {{Steckbrief|spalten=A;B|Format|Text|XML|Weg|FTP-Job|FTP-Job}}
-- ecke= beschriftet die Ecke der Kopfzeile, z.B. ecke=Datenuebertragungsart
--
-- Gleiche Nachbarwerte einer Zeile werden zu einer Zelle zusammengefasst (colspan),
-- damit die Unterschiede zwischen den Varianten sofort sichtbar sind.
-- Passt die Anzahl der Werte nicht zur Spaltenzahl, erscheint eine Fehlermeldung,
-- statt dass sich alle folgenden Zeilen still verschieben.
local p = {}
local function trim(s)
return mw.text.trim(s or '')
end
function p.main(frame)
local args = frame:getParent().args
local titel = trim(args.titel)
if titel == '' then
titel = 'Steckbrief'
end
local spalten = {}
if trim(args.spalten) ~= '' then
for s in mw.text.gsplit(args.spalten, ';', true) do
s = trim(s)
if s ~= '' then
table.insert(spalten, s)
end
end
end
local breite = math.max(#spalten, 1)
-- Unbenannte Parameter in Reihenfolge einsammeln
local werte = {}
local i = 1
while args[i] ~= nil do
table.insert(werte, trim(args[i]))
i = i + 1
end
local tabelle = mw.html.create('table'):addClass('obs-steckbrief')
if #spalten > 0 then
tabelle:addClass('obs-steckbrief-spalten')
end
tabelle:tag('caption'):wikitext(titel)
if #spalten > 0 then
local kopf = tabelle:tag('tr'):addClass('obs-steckbrief-kopf')
local ecke = trim(args.ecke)
local eckzelle = kopf:tag('th'):addClass('obs-steckbrief-ecke')
if ecke == '' then
eckzelle:addClass('obs-steckbrief-ecke-leer')
else
eckzelle:attr('scope', 'col'):wikitext(ecke)
end
for _, s in ipairs(spalten) do
kopf:tag('th'):attr('scope', 'col'):wikitext(s)
end
end
local schritt = breite + 1
local zeilen = math.floor(#werte / schritt)
for z = 0, zeilen - 1 do
local basis = z * schritt
local merkmal = werte[basis + 1]
if merkmal ~= '' then
local tr = tabelle:tag('tr')
tr:tag('th'):attr('scope', 'row'):wikitext(merkmal)
local k = 1
while k <= breite do
local wert = werte[basis + 1 + k]
local span = 1
while k + span <= breite and werte[basis + 1 + k + span] == wert do
span = span + 1
end
local td = tr:tag('td'):wikitext(wert)
if span > 1 then
td:attr('colspan', span):addClass('obs-steckbrief-gemeinsam')
end
k = k + span
end
end
end
local ausgabe = tostring(tabelle)
if #werte % schritt ~= 0 then
ausgabe = ausgabe .. '<strong class="error">Steckbrief: Die Zahl der Werte passt nicht zu '
.. breite .. ' Spalte(n) – je Merkmal ' .. breite .. ' Wert(e) angeben.</strong>'
end
return ausgabe
end
return p