Module:User:Antonsusi:Test

There are no reviewed versions of this page, so it may not have been checked for adherence to standards.

Documentation for this module may be created at Module:User:Antonsusi:Test/doc

local p = {} 
  local transclude = function ( s, args )
    -- Save transclusion of a page, or error message
    -- Precondition:
    --     s     -- string; page name
    --     args  -- table or nil; arguments
    -- Uses:
    --     mw.getCurrentFrame()
    --     error()
    local r = { s, "1" }
    local frame = mw.getCurrentFrame()
    if frame:callParserFunction( "#ifexist", r ) == "1" then
        if args then
            r = frame:expandTemplate{ title = s, args = args }
        else
            r = frame:expandTemplate{ title = s }
        end
    else
        r = error( "No transclude page '" .. s .. "'" )
    end
    return r
  end -- transclude()

  function p.Execute(frame)
    local T_Prev    = {};
    local T_Amt     = {};
    local T_Zeit    = {};
    local T_Next    = {};
    local Tabellenkopf = transclude("User:Antonsusi/Folge/Kopf" )
    local Tabellenzeile = transclude("User:Antonsusi/Folge/Zeile")
    local Tabellenende = transclude("User:Antonsusi/Folge/Ende")
    local idx = 0;
    local Zeile="";
    local sidx = "";   -- Nimmt benannte Argumentnamen auf
    local Anzahl = 0 ; -- Anzahl der Zeilen
    local Border_OL,  Border_OR, Border_UL, Border_UR = "0em"
    local BN ="0em"
    local BW ="0.1em"

    Titel = frame.args['TI'] or "";
    if Titel  =="" then Titel  = "Amt";   end

    for idx = 1, 9 do
      sidx='A'..tonumber(idx)
      table.insert(T_Amt, frame.args[sidx] or "")
      sidx='V'..tonumber(idx)
      table.insert(T_Prev, frame.args[sidx] or "")
      sidx='Z'..tonumber(idx)
      table.insert(T_Zeit, frame.args[sidx] or "")
      sidx='N'..tonumber(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

 -- Ermitteln der Kopftexte links und rechts
    local Kopf_L = ""
    local Kopf_R = ""
    local DifferntPersonL = false;
    local DifferntPersonR = false;

    local VG  = (frame.args['VG']  or "") ~= "";
    local VW  = (frame.args['VW']  or "") ~= "";
    local VWW = (frame.args['VWW'] or "") ~= "";
    local RG  = (frame.args['RG']  or "") ~= "";
    local RW  = (frame.args['RW']  or "") ~= "";
    local RWW = (frame.args['RWW'] or "") ~= "";
    
    if VWW then 
      Kopf_L = "Vorgängerinnen";
    elseif VW or VG then
      Kopf_L = "Vorgängerin";
    else
      Kopf_L = "Vorgänger"
    end

    if RWW then
      Kopf_R = "Nachfolgerinnen";
    elseif RW or RG then
      Kopf_R = "Nachfolgerin";
    else
      Kopf_R = "Nachfolger"
    end

 -- Wenn VG/RG gesetzt, aber verschiedene Personen, dann doch Plural

    if Anzahl > 1 then    
      for idx = 2, Anzahl do
        if T_Prev[1] ~= T_Prev[idx] then DifferntPersonL = true; end
        if T_Next[1] ~= T_Next[idx] then DifferntPersonR = true; end
      end
    end

    text = "Anzahl=".. Anzahl .. ", DifferntPersonL=" .. tostring(DifferntPersonL) .. ", Kopf_L (zuerst)=" .. Kopf_L


    if VG and DifferntPersonL then Kopf_L = "Vorgängerinnen"; end
    if RG and DifferntPersonR then Kopf_R = "Nachfolgerinnen"; end
    text = text ..  ", Kopf_L (danach)=" .. Kopf_L
    return text

  --[=[
 -- Zusammenbau der Leiste, zuerst der Kopf
    local HTML = Tabellenkopf;
    HTML = mw.ustring.gsub(HTML,'{Kopf_L}',Kopf_L)
    HTML = mw.ustring.gsub(HTML,'{Titel}' ,Titel)
    HTML = mw.ustring.gsub(HTML,'{Kopf_R}',Kopf_R)

 -- Jetzt "Anzahl" Zeilen ergänzen
    for idx = 1, Anzahl do

      -- leere Schablone zuweisen
      Zeile = Tabellenzeile 

      -- horizontale Rahmenteile: Erste Zeile oben immer,  letzte Zeile unten immer.
      if idx == 1      then Border_OL = BW; Border_OR = BW; end
      if idx == Anzahl then Border_UL = BW; Border_UR = BW; end

      -- Links oder rechts gleicher Wert wie darüber: kein Rahmen und Doppeleintrag entfernen.
      if idx > 1 then
        if (T_Prev[idx-1] == T_Prev[idx]) then Border_OL = BN; T_Prev[idx] = ""; else  Border_OL = BW; end 
        if (T_Next[idx-1] == T_Next[idx]) then Border_OR = BN; T_Next[idx] = ""; else  Border_OR = BW; end
      end

      -- Links oder rechts gleicher Wert wie darunter: unten kein Rahmen, Eintrag bleibt
      if idx < Anzahl then
        if (T_Prev[idx+1] == T_Prev[idx]) then Border_UL = BN; else  Border_UL = BW; end
        if (T_Next[idx+1] == T_Next[idx]) then Border_UR = BN; else  Border_UR = BW; end
      end

      -- Substitution der Platzhalter
      Zeile = mw.ustring.gsub(Zeile,'{Prev}',T_Prev[idx])
      Zeile = mw.ustring.gsub(Zeile,'{Amt}' ,T_Amt[idx])
      Zeile = mw.ustring.gsub(Zeile,'{Zeit}',T_Zeit[idx])
      Zeile = mw.ustring.gsub(Zeile,'{Next}',T_Next[idx])
      Zeile = mw.ustring.gsub(Zeile,'{Border_OL}',Border_OL)
      Zeile = mw.ustring.gsub(Zeile,'{Border_OR}',Border_OR)
      Zeile = mw.ustring.gsub(Zeile,'{Border_UL}',Border_UL)
      Zeile = mw.ustring.gsub(Zeile,'{Border_UR}',Border_UR)

      -- Fertige Zeile anhängen
      HTML = HTML..Zeile;
    end

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