Benutzer:Antonsusi/Spielwiese/Modul:Vorlage:Personenleiste

aus Wikipedia, der freien Enzyklopädie

--

local p = {}
  local LuaWiki = require( "Module: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

 -- 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

    -- Tabellenende dazu. Einlesen, um ggf. extern ändern zu können.
    HTML = HTML..Tabellenende;
    return HTML
  end
  return p
--