Modul:Vorlage:Radsportteam
Modul zur Umsetzung der Vorlage:Radsportteam.
local function createlines(text)
local pos = 0;
local z = {}
local rest = ""
local row =""
while true do
pos = mw.ustring.find(text, "%c")
if not pos then break end;
row = mw.ustring.sub(text,1,pos - 1)
table.insert(z,row);
rest = mw.ustring.sub(text,pos + 1,-1)
text = rest;
if text == "" then break end;
end
return z;
end
local function trim(text)
while mw.ustring.sub(text,1,1) == " " do
text= mw.ustring.sub(text,2,-1);
end
while string.sub(text,-1,-1) == " " do
text= mw.ustring.sub(text,1,-2);
end
return text;
end
local function splittheline(text)
local pos = 0;
local left = ""
local right =""
pos = mw.ustring.find(text, "=")
if not pos then
left= "";
right="";
else
left = mw.ustring.sub(text,1,pos - 1)
right = mw.ustring.sub(text,pos + 1,-1)
end
return left, right;
end
local p = {}
function p.Execute(frame)
local uci = tostring(trim(frame.args[1] or "")); -- Wiki-Parameter {{{1}}} (Kuerzel)
local what = tostring(trim(frame.args[2] or "")); -- Wiki-Parameter {{{2}}} (leer, Jahr oder anderen Eintrag im Datenblatt)
local linktext = tostring(trim(frame.args[3] or "")); -- Wiki-Parameter {{{text}}}
local hasnolink = tostring(trim(frame.args[4] or "")) ~= ""; -- alter Wiki-Parameter {{{nolink}}}
local wikitext = ""; -- Wiki-Text (wird zurueckgegeben)
local daten = {}; -- nimmt den Inhalt des Datenblatts auf
-- Erst einen Widerspruch abfangen
-- Erst einen alten Parameter abfangen
if hasnolink then
wikitext ='<span class="error">Der Parameter "nolink" wird von der Vorlage nicht mehr ausgewertet!</span>';
return wikitext;
end
-- Jetzt das Blatt einlesen und die Tabelle "Daten" damit fuellen.
-- aus "links=rechts" wird "daten.links = rechts"
local pagetext = "";
local pagename ="Radsportteam/".. uci;
local zeilen = {};
local links = {};
local rechts = {};
local li;
local re;
pagetext= frame:expandTemplate{ title = pagename, args = {} } or "";
if pagetext == "" then
wikitext ='<span class="error">Das angegeben Kürzel ('.. uci ..') ist ungültig!</span>';
return wikitext;
end
pagetext = pagetext .. "\n";
zeilen = createlines(pagetext);
for i,v in ipairs(zeilen) do
li,re = splittheline(tostring(v));
li = trim(li or "");
re = trim(re or "");
if (li ~= "") then
daten[li] = re;
end
end
daten['uci'] = uci;
-- was nicht mehr gebraucht wird freigeben:
pagetext = nil;
pagename = nil;
zeilen = nil;
links = nil;
rechts = nil;
li = nil;
re = nil;
-- Daten etwas testen und Wikilink zusammenbauen
local lemma = tostring(daten.link) or "";
if ( lemma == "") then
return '<span class="error">Im Datenblatt wurde kein Linkziel gefunden!</span>';
end
if ((tostring(daten.name) or "") == "") then
daten.name = lemma;
end
-- bei individuellem Text den Wikitext erstellen und Ende
if (linktext ~="") then
if lemma == linktext then
wikitext = "[[" .. lemma .."]]";
else
wikitext = "[[" .. lemma .."|" .. linktext .. "]]";
end
return wikitext;
end
-- ansonsten feststellen, was gefragt wird:
local index = "";
if what == "" then
index = "name";
elseif what=="lemma" then -- explizit nur das Lemma verlinkt wiedergeben:
wikitext = "[[" .. lemma .."]]";
return wikitext;
elseif what=="#" then -- nur das Kuerzel
index = "uci";
else
index = "name-"..what;
end
if daten[index] then
linktext = tostring(daten[index]);
if lemma == linktext then
wikitext = "[[" .. lemma .."]]";
else
wikitext = "[[" .. lemma .."|" .. linktext .. "]]";
end
else
wikitext ='<span class="error">Der angeforderte Datenwert für "' .. tostring(index) .. '" wurde nicht gefunden!</span>';
end
return wikitext;
end
return p;