Broken/Personenleiste

Aus ÖsterreichWiki
Zur Navigation springen Zur Suche springen
 local p = {};
 local LuaWiki = require( "Modul:LuaWiki" );
 
 function p.Execute(frame)
   local T_Prev    = {};
   local T_Amt     = {};
   local T_Zeit    = {};
   local T_Next    = {};
   local Tabellenkopf  = LuaWiki.transclude("Vorlage:Personenleiste/Kopf");
   local Tabellenzeile = LuaWiki.transclude("Vorlage:Personenleiste/Zeile");
   local Tabellenende  = LuaWiki.transclude("Vorlage:Personenleiste/Ende");
   local idx = 0;
   local Zeile = "";
   local sidx  = "";  -- Nimmt benannte Argumentnamen auf
   local Anzahl = 0;  -- Anzahl der Zeilen
   local    VG = frame.args['VG']  or "";
   local    VW = frame.args['VW']  or "";
   local   VWW = frame.args['VWW'] or "";
   local    NG = frame.args['NG']  or "";
   local    NW = frame.args['NW']  or "";
   local   NWW = frame.args['NWW'] or "";
   local Titel = frame.args['TI']  or "";
   
   if Titel == "" then Titel = "Amt"; end;
 
 -- Zeilenparameter einlesen
   for idx = 1, 9 do
     sidx = 'A'..tostring(idx);
     table.insert(T_Amt,  frame.args[sidx] or "");
     sidx = 'V'..tostring(idx);
     table.insert(T_Prev, frame.args[sidx] or "");
     sidx = 'Z'..tostring(idx);
     table.insert(T_Zeit, frame.args[sidx] or "");
     sidx = 'N'..tostring(idx);
     table.insert(T_Next, frame.args[sidx] or "");
   end;
   
   for idx = 1, 9 do
     if mw.ustring.len(T_Amt[idx]) > 0 then
       Anzahl = idx;
       if mw.ustring.len(T_Zeit[idx]) > 0 then
         T_Zeit[idx] = "<br".." />" .. T_Zeit[idx];
       else
         T_Zeit[idx] = "";
       end;
     end;
   end; -- for idx
 
 -- Abwärtskompatiblität: weibliche Wikiparameter auswerten.
 -- Zuerst Wikilogik einstellen: Auch Leerstring ist false
   local B_VG  =  string.len(VG) > 0;
   local B_VW  =  string.len(VW) > 0;
   local B_VWW = string.len(VWW) > 0;
   local B_NG  =  string.len(NG) > 0;
   local B_NW  =  string.len(NW) > 0;
   local B_NWW = string.len(NWW) > 0;
 
 -- .WW überschreibt .W  und dieses das Maskulinum
 -- Reihenfolge einhalten!
   if B_VW  then T_Prev[1] = VW;  end;
   if B_VWW then T_Prev[1] = VWW; end;
   if B_NW  then T_Next[1] = NW;  end;
   if B_NWW then T_Next[1] = NWW; end;
 
 -- Ermitteln der Kopftexte 
   local KopfV = "Vorgänger";
   local KopfN = "Nachfolger";
   local DifferntPersonV = false;
   local DifferntPersonN = false;
   
   if B_VW or B_VG then KopfV = "Vorgängerin";    end;
   if B_VWW        then KopfV = "Vorgängerinnen"; end;
   if B_NW or B_NG then KopfN = "Nachfolgerin";    end;
   if B_NWW        then KopfN = "Nachfolgerinnen"; end;
 
 -- Wenn VG/NG gesetzt, aber verschiedene Personen, dann doch Plural
   if Anzahl > 1 then    
     for idx = 2, Anzahl do
       if T_Prev[1] ~= T_Prev[idx] then DifferntPersonV = true; end;
       if T_Next[1] ~= T_Next[idx] then DifferntPersonN = true; end;
     end;
   end;
   if B_VG and DifferntPersonV then KopfV = "Vorgängerinnen"; end;
   if B_NG and DifferntPersonN then KopfN = "Nachfolgerinnen"; end;
 
 -- Zusammenbau der Leiste, zuerst der Kopf
   local HTML = Tabellenkopf;
   local sPrev = "";
   local sNext = "";
   local sAmt  = "";
   local sZeit = "";
   
   HTML = mw.ustring.gsub(HTML,'{Kopf_L}',KopfV);
   HTML = mw.ustring.gsub(HTML,'{Titel}' ,Titel);
   HTML = mw.ustring.gsub(HTML,'{Kopf_R}',KopfN);
 
 -- Jetzt "Anzahl" Zeilen ergänzen
   for idx = 1, Anzahl do
     -- Kopien anfertigen, da sonst rekursiv
     sZeile = Tabellenzeile;
     sPrev  = T_Prev[idx];
     sNext  = T_Next[idx];
     sAmt   =  T_Amt[idx];
     sZeit  = T_Zeit[idx];
     
     -- Substitution der Platzhalter
     sZeile = mw.ustring.gsub(sZeile,'{Prev}',sPrev);
     sZeile = mw.ustring.gsub(sZeile,'{Next}',sNext);
     sZeile = mw.ustring.gsub(sZeile,'{Amt}' ,sAmt);
     sZeile = mw.ustring.gsub(sZeile,'{Zeit}',sZeit);
     
     -- Fertige Zeile anhängen
     HTML = HTML .. sZeile;
   end; -- for idx
 
 -- Tabellenende dazu. Einlesen, um ggf. extern ändern zu können.
   HTML = HTML .. Tabellenende;
   return HTML;
 end; -- function p.Execute()
 
 return p;