Modul:Vorlage:Episodenliste
Info: Das Modul wird zurzeit offline weiterentwickelt.
-- Dieser Code ist im Rohzustand und noch ungetestet! bitte nicht einfach kopieren.
local function trim(s)
s = mw.ustring.gsub(s,"\n","");
while mw.ustring.sub(s,1,1) == " " do
s= mw.ustring.sub(s,2,-1);
end
while mw.ustring.sub(s,-1,-1) == " " do
s= mw.ustring.sub(s,1,-2);
end
return s;
end
function GetISO(data)
local isOk = true;
local a = 0;
local b = 0;
local text = tostring(data);
local day = "";
local month = "";
local year ="";
local s = ""
local txty = "";
local txtd = "";
text = string.lower(text);
txty = string.sub(text,-4);
a = tonumber(txty) or 0;
year=string.format("%4.4d",a);
if not tonumber(year) then
return "0000-00-00",false;
end
if string.find(text,"januar") then month="-01";
elseif string.find(text,"jänner") then month="-01";
elseif string.find(text,"februar") then month="-02";
elseif string.find(text,"märz") then month="-03";
elseif string.find(text,"april") then month="-04";
elseif string.find(text,"mai") then month="-05";
elseif string.find(text,"juni") then month="-06";
elseif string.find(text,"juli") then month="-07";
elseif string.find(text,"august") then month="-08";
elseif string.find(text,"september") then month="-09";
elseif string.find(text,"oktober") then month="-10";
elseif string.find(text,"november") then month="-11";
elseif string.find(text,"dezember") then month="-12";
elseif string.find(text,"jan.") then month="-01";
elseif string.find(text,"feb.") then month="-02";
elseif string.find(text,"mrz.") then month="-03";
elseif string.find(text,"apr.") then month="-04";
elseif string.find(text,"jun.") then month="-06";
elseif string.find(text,"jul.") then month="-07";
elseif string.find(text,"aug.") then month="-08";
elseif string.find(text,"sep.") then month="-09";
elseif string.find(text,"okt.") then month="-10";
elseif string.find(text,"nov.") then month="-11";
elseif string.find(text,"dez.") then month="-12";
else
return "0000-00-00",false;
end
txtd = string.sub(text,1,2);
for idx = 1,9 do
s = string.format("%s.",idx)
if s == txtd then
day = string.format("-%2.2d",idx);
break;
end
end
if day =="" then
txtd = string.sub(text,1,3);
for idx = 10,31 do
s = string.format("%s.",idx)
if s == txtd then
day = string.format("-%2.2d",idx);
break;
end
end
end
if day =="" then
return "0000-00-00",false;
end;
s = year .. month .. day;
return s, true;
end
local function TextDatum(Isodatum)
local isOk = true;
local TheDate = tostring(Isodatum);
local Data = "";
local isopattern="%d%d%d%d%-%d%d%-%d%d"
Data = string.match (TheDate, isopattern) or "";
if string.len(Data) ~= 10 then
return '<span class="error">–</span>', false;
end
isopattern="%d%d%d%d"
Data = string.match(TheDate, isopattern) or "";
if string.len(Data) < 4 then
return "?y?", false;
end
local yyyy = tonumber(Data)or 0;
TheDate = string.sub(TheDate, 5);
isopattern="%d%d"
Data = mw.ustring.match (TheDate, isopattern) or "";
local mm = tonumber(Data) or 0;
TheDate = string.sub(TheDate, 3);
Data = string.match (TheDate, isopattern) or "";
local dd = tonumber(Data) or 0;
Monate = {"Jan.","Feb.","Mrz.","Apr.","Mai","Jun.","Jul.","Aug.","Sep.","Okt.","Nov.","Dez.",""}
local text = tostring(dd) .. ". "
text = text .. Monate[mm] .. " ";
text = text .. tostring(yyyy);
return text;
end
local function CreateTableHeader(parameter)
--[=[
table parameter muss enthalten:
- bMitGN: true, wenn Spalte für Gesamtnummer erzeugt werden soll
- bIstDe: true, wenn Originalsprache Deutsch, weil dann Originaltitel = Dt. Titel und Originaldatum = Dt. Datum
die Spalten DeDatum und Detitel entfallen dann.
- bMitRegie, bMitZuschauer, bMitDrehbuch: true, wenn es eine Spalte dafür geben soll.
-- sOrgInfo: nicht leer, wenn zu "Originalpremiere" ein Zusatz wie z. B. "USA" stehen soll.
-- sExtra1 und sExtra2: Spaltenköfe für zwei Extraspalten. leer = weglassen. dann wird der boolsche Wert false daraus.
]=]
local MitGN = parameter.bMitGN;
local IstDe = parameter.bIstDe;
local MitRegie = parameter.bMitRegie;
local MitZuschauer = parameter.bMitZuschauer;
local MitDrehbuch = parameter.bMitDrehbuch;
-- nil explizit in "", dabei Zuweisung
local OrgInfo = tostring(parameter.sOrgInfo) or "";
local Extra1 = tostring(parameter.sExtra1) or "";
local Extra2 = tostring(parameter.sExtra2) or "";
-- Zusammenbau. Zuerst das Table-Tag und das Tr-Tag
local Kopf = tostring('<table class="wikitable sortable toptextcells zebra" summary="Episodenlistentabelle">\n');
Kopf = Kopf .. '<tr style="background:#CCCCCC">';
if MitGN then
Kopf = Kopf ..'<th style="width:2ex;">Nr.<br/><small style="font-weight:normal;">(ges.)</small></th>\n'
end
Kopf=Kopf..'<th style="width:2ex;">Nr.<br/>(St.)</th>\n'
if not IstDe then
Kopf=Kopf..'<th style="min-width:120px; max-width:300px;">Deutscher Titel</th>\n'
end
Kopf=Kopf..'<th style="min-width:120px; max-width:300px;">Original­titel'
if OrgInfo ~="" then
Kopf=Kopf .. OrgInfo;
end
Kopf=Kopf .. '</th>\n'
Kopf=Kopf..'<th style="min-width:7em; max-width:10em;">Original­premiere</th>\n'
if not IstDe then
Kopf=Kopf..'<th style="min-width:7em; max-width:10em;">Deutschsprachige<br/>Premiere</th>\n'
end
if MitRegie then
Kopf=Kopf..'<th>Regisseur</th>\n'
end
if MitDrehbuch then
Kopf=Kopf..'<th>Drehbuch</th>\n'
end
if MitZuschauer then
Kopf=Kopf.."<th>Zuschauer</th>\n"
end
if Extra1 ~= "" then
Kopf=Kopf.."<th>"..Extra1.."</th>\n"
end
if Extra2 ~= "" then
Kopf=Kopf.."<th>"..Extra2.."</th>\n"
end
Kopf=Kopf..'</tr>\n'
return Kopf
end
local function CreateTableRow(parameter)
--[=[
table parameter muss/kann enthalten:
- iGN: optional, Integer - Gesamtnummer, wenn fehlend, dann wird false daraus
- iNr: erforderlich, Integer - Nummer innerhalb der Staffel. Wenn fehlend, dann wird false daraus - muss Fehlermeldung ergeben
- bIstDe: erforderlich, Bool - true, wenn Originalsprache Deutsch, weil dann für dt. Titel und dt. Datum kein Wert existiert.
- sOrgTitel: erforderlich, String - Originaltitel
- sOrgDatum: erforderlich, String - Originalpremierendatum
- sDeTitel: erforderlich, wenn bIstDe = false; Dt. Titel
- sDeDatum: erforderlich, wenn bIstDe = false; Dt. Premierendatum
- sRegie, sAutor, sZuschauer, sExtra1, sExtra2, sInfo: optinale Strings.
Wenn die Spalte vorhanden ist, dann darf der Parameter nicht fehlen und muss mind. ein leerer String sein.
params.iGN = argu.NrGes or "?";
params.iNr = argu.Nr or "??";
params.bIstDe = argu.Sprache;
params.sOrgTitel = argu.OT or "?!?";
params.sOrgDatum = argu.OP or "?!?";
params.sDeTitel = argu.DT or "?!?";
params.sDeDatum = argu.DP or "?!?";
params.sRegie = argu.Regie or "?!?";
params.sDrehbuch = argu.Drehbuch or "?!?";
params.sZuschauer =argu.Zuschauer or "?!?";
params.sExtra1 = argu.Extra1 or "?!?";
params.sExtra2 = argu.Extra2 or "?!?";
params.sInfo = argu.ZF or "?!?";
]=]
local dash = "–"
-- nil in ""
local lucky=false
local OrgDatum = ""
local DeDatum = ""
local GN = tonumber(parameter.iGN) or -1;
local Nr = tonumber(parameter.iNr) or -1;
local IstDe = parameter.bIstDe;
local OrgTitel = mw.ustring.gsub(parameter.sOrgTitel, "?!?", dash)
OrgDatum, lucky = GetISO(parameter.sOrgDatum)
if not lucky then
OrgDatum = "0000-00-00"
end
local DeTitel = parameter.sDeTitel;
DeDatum, lucky = GetISO(parameter.sDeDatum);
if not lucky then
DeDatum = "0000-00-00"
end
local Regie = parameter.sRegie
local Drehbuch = parameter.sDrehbuch
local Zuschauer = parameter.sZuschauer;
local Extra1 = parameter.sExtra1;
local Extra2 = parameter.sExtra2;
local Info = parameter.sInfo;
local OrgDatumText ="";
local DeDatumText = "";
if OrgDatum == "0000-00-00" then
OrgDatumText = dash;
else
OrgDatumText = TextDatum(OrgDatum);
end
if DeDatum == "0000-00-00" then
DeDatumText = dash;
else
DeDatumText = TextDatum(DeDatum);
end
-- Zusammenbau
local Zeile = "<tr>";
if GN ~= -1 then
Zeile = Zeile .. '<td style="text-align:right;">' .. GN .. '</td>'
end
if Nr ~= -1 then
Zeile = Zeile .. '<td style="text-align:right;">' .. Nr .. '</td>'
else
Zeile = Zeile .. '<td style="text-align:right; color:#ff0000">' .. Nr .. '</td>'
end
if not IstDe then
if DeTitel ~= "?!?" then
Zeile = Zeile .. '<td style="text-align:left;">' .. DeTitel .. '</td>'
end
end
Zeile = Zeile .. '<td style="text-align:left;">' .. OrgTitel .. '</td>'
Zeile = Zeile .. '<td style="text-align:right;" data-sort-value="' .. OrgDatum ..'">' .. OrgDatumText .. '</td>'
if not IstDe then
Zeile = Zeile .. '<td style="text-align:right;" data-sort-value="' .. DeDatum ..'">' .. DeDatumText .. '</td>'
end
if Regie ~= "?!?" then
Zeile = Zeile ..'<td style="text-align:left;">'..Regie..'</td>'
end
if Drehbuch ~= "?!?" then
Zeile = Zeile ..'<td style="text-align:left;">'..Autor..'</td>'
end
if Zuschauer ~= "?!?" then
Zeile = Zeile ..'<td style="text-align:left;">'..Zuschauer..'</td>'
end
if Extra1 ~= "?!?" then
Zeile = Zeile ..'<td style="text-align:left;">'..Extra1..'</td>'
end
if Extra2 ~= "?!?" then
Zeile=Zeile..'<td style="text-align:left;">'..Extra2..'</td>'
end
Zeile = Zeile .. '</tr>\n';
if Info ~= "?!?" then
Zeile = Zeile .. '<tr class="expand-child"><td style="text-align:left;" colspan="12">' .. Info .. '</td></tr>\n'
end
return Zeile
end
local Episode = {};
function Episode.Tabellenkopf(frame)
local argu = frame:getParent().args
--[=[
Parameter (argu):
- Staffeln = Anzahl der Staffeln. fehlend = 1
- Sprache = Originalsprache.
]=]
local params = {};
local temp = tonumber(argu["Staffeln"]) or 1;
params.bMitGN = temp ~= 1
params.bIstDe = false;
temp = mw.ustring.lower(argu["Sprache"] or "de")
if temp == "de" or temp=="dt" or temp=="dt." or temp=="deutsch" then
params.bIstDe = true;
end
params.bMitRegie = true;
temp = mw.ustring.lower(argu["MitRegie"] or "")
if temp =="nein" or temp=="" then
params.bMitRegie = false;
end
params.bMitZuschauer = true;
temp = mw.ustring.lower(argu["MitZuschauer"] or "")
if temp =="nein" or temp=="" then
params.bMitZuschauer = false;
end
params.bMitDrehbuch = true;
temp = mw.ustring.lower(argu["MitDrehbuch"] or "")
if temp =="nein" or temp=="" then
params.bMitDrehbuch = false;
end
params.sOrgInfo = argu["Originalinfo"] or ""
params.sExtra1 = argu["Extra1"] or "";
params.sExtra2 = argu["Extra2"] or "";
local Result = CreateTableHeader(params)
return Result;
end
function Episode.Tabellenzeile(frame)
local argu = frame:getParent().args
local params = {};
params.iGN = argu.NrGes or "?!?";
params.iNr = argu.Nr or "?!?";
params.bIstDe = false;
local temp = mw.ustring.lower(argu["Sprache"] or "de")
if temp == "de" or temp=="dt" or temp=="dt." or temp=="deutsch" then
params.bIstDe = true;
end
params.sOrgTitel = argu.OT or "?!?";
params.sOrgDatum = argu.OP or "?!?";
params.sDeTitel = argu.DT or "?!?";
params.sDeDatum = argu.DP or "?!?";
params.sRegie = argu.Regie or "?!?";
params.sDrehbuch = argu.Drehbuch or "?!?";
params.sZuschauer =argu.Zuschauer or "?!?";
params.sExtra1 = argu.Extra1 or "?!?";
params.sExtra2 = argu.Extra2 or "?!?";
params.sInfo = argu.ZF or "?!?";
local Result = CreateTableRow(params)
return Result;
end
return Episode