Benutzer:Antonsusi/Spielwiese/Modul:Test3

aus Wikipedia, der freien Enzyklopädie
--[=[
Aufruf
 ]=]

--

  local p = {}

    function p.Execute(frame)
    	local Diagramm='<table cellspacing="0" cellpadding="0" {FLOAT} style="border:silver solid 1px; font-size:90%; padding:0.4em; width:{BREITE};"><tr style="background:CornflowerBlue;"><th style="text-align:center; font-size:bigger;" colspan="5">{NAME}: Einwohnerzahlen von 1834 bis 1967</th></tr><tr style="font-size:90%; height:4px;"><td style="padding:0px 4px;">Jahr</td><td style="padding:0 4px; text-align:right;"> </td><td style="width:{BARWIDTH};"></td><td style="padding:0 4px; width:5em; text-align:right;"> </td><td style="padding:0 4px; text-align:right;">Einwohner</td></tr>{ALLBARS}<tr><td colspan="5" style="padding:4px">Datenquelle: Histo­risches Ge­mein­de­ver­zeich­nis für Hessen: Die Be­völ­ke­rung der Ge­mei­nden 1834 bis 1967. Wies­baden: Hes­sisches Statis­tisches Lan­des­amt, 1968.</td></tr></table>'
		local BarOrg = '<tr style="line-height:0.8em;"><td colspan="2" style="padding-right:0.4em; padding-left:0.4em;" | >{jahr}</td><td style="border:1px solid silver;"><div style="background:CornflowerBlue; width:{PIXEL}px; overflow:hidden;">  </div></td><td colspan="2" style="min-width:3em; padding-left:0.4em;" align="right">{zahl}</td></tr>'
		local Bar                 = ""
		local AllBars             = ""
		local A_Float         = frame.args["Float"]  or ""
		local A_Name          = frame.args["Name"]  or "?"
		local A_Barwidth      = frame.args["Barwidth"] or ""
		local A_MaxEinwohner  = frame.args["MaxEinwohner"] or ""

		local Barwidth    = 0    -- max. Balkenbreite
		local Width       = 0    -- Breite der Tabellenspalte
		local MaxZahl     = 0    -- Maximum von maxEinwohner und maximal 19 Standardparametern

		local T_JahrOrg  = {1834,1840,1846,1852,1858,1864,1871,1875,1885,1895,1905,1910,1925,1939,1946,1950,1956,1961,1967}
		local T_Jahr     = {} -- nimmt nur Jahreszahlen mit zugehörigem Wert auf. Das erlaubt Lücken
		local T_Value = {}        -- Einwohnerwerte
		local T_Bars  = {}        -- Die TR-Tags
		local Value  = 0
		local Pixel = 0           -- Die Balkenbreite

		Diagramm = mw.ustring.gsub(Diagramm,"{NAME}",A_Name)

		if A_Float == 'left' then
			Diagramm = mw.ustring.gsub(Diagramm,'{FLOAT}','class="float-left"')
		elseif  A_Float == 'centered ' then
			Diagramm = mw.ustring.gsub(Diagramm,'{FLOAT}','class="float-centered"')
		else
			Diagramm = mw.ustring.gsub(Diagramm,'{FLOAT}','class="float-right"')
		end
		if tonumber(A_Barwidth) then
			Barwidth = math.floor(tonumber(A_Barwidth))
		else
			Barwidth = 400
		end
		Width = Barwidth + 80
		Diagramm = mw.ustring.gsub(Diagramm,"{BREITE}"   ,tostring(Width).."px" )
		Diagramm = mw.ustring.gsub(Diagramm,"{BARWIDTH}",tostring(Barwidth).."px")

		if  tonumber(A_MaxEinwohner) then
			MaxZahl = math.max(0,math.floor(tonumber(A_MaxEinwohner)))
		end

		-- Nur gültige Zahlen in Tabelle T_Value einlesen und dabei das Maximum feststellen
		for idx= 1, 19 do
			Value = tonumber(frame.args[idx] or "")
			if Value then
				Value = math.max(0,math.floor(Value))   -- negative Werte auf Null setzen.
				table.insert(T_Jahr,T_JahrOrg[idx])
				table.insert(T_Value,Value)
				MaxZahl = math.max(MaxZahl, Value)
			end
		end

		for idx = 1, #T_Value do
			Bar = BarOrg
			Bar = mw.ustring.gsub(Bar,"{jahr}",tostring(T_Jahr[idx]))
			Bar = mw.ustring.gsub(Bar,"{zahl}",frame:callParserFunction('formatnum',T_Value[idx]))
			Pixel = T_Value[idx] / MaxZahl * Barwidth
			Bar = mw.ustring.gsub(Bar,"{PIXEL}",tostring(Pixel))
			table.insert(T_Bars,Bar)
		end
		AllBars = table.concat(T_Bars)
		Diagramm = mw.ustring.gsub(Diagramm,"{ALLBARS}",AllBars)
                Diagramm = Diagramm .. "\n\n" .. A_Barwidth .. "\n\n"

		return Diagramm
    end

  return p
--