Modul:Vorlage:Episodenliste

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

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">&ndash;</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) .. ".&nbsp;"
	text =  text .. Monate[mm] 	 .. "&nbsp;";
	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&shy;titel'
	if OrgInfo ~="" then 
		Kopf=Kopf .. OrgInfo;
	end
	Kopf=Kopf .. '</th>\n'
	Kopf=Kopf..'<th style="min-width:7em; max-width:10em;">Original&shy;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 = "&ndash;"
	-- 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