Modul:Benutzer:Zukunft99

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

Die Dokumentation für dieses Modul kann unter Modul:Benutzer:Zukunft99/Doku erstellt werden

local p = {}
local getArgs = require('Module:Arguments').getArgs
local farben = require('Module:Partei').farbe
local hell = require('Module:Partei').hell
local cfg = mw.loadData('Modul:Parlamente/Liste');

function p.kkk(frame)
	local args = getArgs(frame)
	local maxv = 0
	for k, v in pairs(args) do
		local num = tonumber(v)
		if tonumber(v) and num > maxv then
			maxv = num
		end
	end
	return maxv
end

function p.www(frame)
	local args = getArgs(frame)
	local num = 1
	while (args['a'..num]) do
		num = num + 1
	end
	return num - 1
end

function p.zzz(frame)
	local args = getArgs(frame)
	local a = args[1]
	return string.rep(a, 10)
end

function p.minvalue(frame)
	local args = getArgs(frame)
	local value = tonumber(math.min(args['s1'], (args['s2'] or 0), (args['s3'] or 0)))
	if value < 0 then return ((math.ceil(math.abs(value)/5)*5) * 6) + math.ceil(math.abs(value)/5)
		else return 0
	end
end

function p.xx(frame)  -- margin-top siehe Parlamentswahl/AchseDiff2 ()
	local args = getArgs(frame)

	value = ((math.ceil(math.abs(args['s1'])/5)*5 - math.abs(args['s1'])) * 6) - (((math.ceil(math.abs(args['s1'])/5))*5) * 6 + 30 + math.ceil(math.abs(args['s1'])/5)) - p.minvalue(frame)
	valn = -math.ceil((((math.ceil(math.abs(args['s1'])/5))*5) * 6 + 53 + (math.ceil(math.abs(args['s1']))/5))/1 - (- p.minvalue(frame) + (((math.ceil(math.abs(args['s1'])/5))*5) * 6 + (math.ceil(math.abs(args['s1']))/5))/1))*1
	height = math.abs(args['s1'])*6 + math.ceil(math.abs(args['s1'])/5)
	if tonumber(args['s1']) > 0 then
	spalte = '<div style="position:absolute;margin-top:'..value..'px;margin-left:32px><div style="width:40px;height:'..height..'px;background-color:#FFA500"></div><div style="max-width:150px;text-align:center">aa</div></div>'
	else
	spalte = '<div style="position:absolute;margin-top:'..valn..'px;margin-left:32px><div style="max-width:150px;text-align:center">aa</div><div style="width:40px;height:'..height..'px;background-color:#FFA500"></div></div>'
	end
	
	if args['s2'] then
		value2 = ((math.ceil(math.abs(args['s2'])/5)*5 - math.abs(args['s2'])) * 6) - (((math.ceil(math.abs(args['s2'])/5))*5) * 6 + 30 + math.ceil(math.abs(args['s2'])/5)) - p.minvalue(frame)
		valn2 = -math.ceil((((math.ceil(math.abs(args['s2'])/5))*5) * 6 + 53 + (math.ceil(math.abs(args['s2']))/5))/1 - (- p.minvalue(frame) + (((math.ceil(math.abs(args['s2'])/5))*5) * 6 + (math.ceil(math.abs(args['s2']))/5))/1))*1
		height2 = math.abs(args['s2'])*6 + math.ceil(math.abs(args['s2'])/5)
		if tonumber(args['s2']) > 0 then
			spalte2 = '<div style="position:absolute;margin-top:'..value2..'px;margin-left:82px><div style="width:40px;height:'..height2..'px;background-color:#50C878"></div><div style="max-width:150px;text-align:center">bb</div></div>'
			else
			spalte2 = '<div style="position:absolute;margin-top:'..valn2..'px;margin-left:82px><div style="max-width:150px;text-align:center">bb</div><div style="width:40px;height:'..height2..'px;background-color:#50C878"></div></div>'
		end
	end
	
	if args['s3'] then
		value3 = ((math.ceil(math.abs(args['s3'])/5)*5 - math.abs(args['s3'])) * 6) - (((math.ceil(math.abs(args['s3'])/5))*5) * 6 + 30 + math.ceil(math.abs(args['s3'])/5)) - p.minvalue(frame)
		valn3 = -math.ceil((((math.ceil(math.abs(args['s3'])/5))*5) * 6 + 53 + (math.ceil(math.abs(args['s3']))/5))/1 - (- p.minvalue(frame) + (((math.ceil(math.abs(args['s3'])/5))*5) * 6 + (math.ceil(math.abs(args['s3']))/5))/1))*1
		height3 = math.abs(args['s3'])*6 + math.ceil(math.abs(args['s3'])/5)
		if tonumber(args['s3']) > 0 then
			spalte3 = '<div style="position:absolute;margin-top:'..value3..'px;margin-left:132px><div style="width:40px;height:'..height3..'px;background-color:#007FFF"></div><div style="max-width:150px;text-align:center">cc</div></div>'
			else
			spalte3 = '<div style="position:absolute;margin-top:'..valn3..'px;margin-left:132px><div style="max-width:150px;text-align:center">cc</div><div style="width:40px;height:'..height3..'px;background-color:#007FFF"></div></div>'
		end

	end

	if args['s3'] then return (spalte..spalte2..spalte3)
		elseif args['s2'] then return (spalte..spalte2)
		else return spalte
	end
end

function p.be1(frame)
	local args = getArgs(frame)

	local minneg =  tonumber(math.min(args['s1'], (args['s2'] or 0), (args['s3'] or 0)))
	local maxpos = tonumber(math.max(args['s1'], args['s2'] or 0, args['s3'] or 0))

	local style = '<div style="position:relative; height:30px; width:200px; border-top:1px solid #CCC;"><div style="position:absolute; bottom:20px; background-color:#FFFFFF; padding:0 2px 0 0; color:#777;">&nbsp;'
	a = ''..style..'35</div></div>'
	b = ''..style..'30</div></div>'
	c = ''..style..'25</div></div>'
	d = ''..style..'20</div></div>'
	e = ''..style..'15</div></div>'
	f = ''..style..'10</div></div>'
	g = ''..style..'5</div></div>'
	lev = ''..style..'0</div></div>'
	if minneg < -0 then za = ''..style..'-5</div></div>' else za = '' end
	if minneg < -5 then zb = ''..style..'-10</div></div>' else zb = '' end
	if minneg < -10 then zc = ''..style..'-15</div></div>' else zc = '' end
	if minneg < -15 then zd = ''..style..'-20</div></div>' else zd = '' end
	if minneg < -20 then ze = ''..style..'-25</div></div>' else ze = '' end
	if minneg < -25 then zf = ''..style..'-30</div></div>' else zf = '' end
	if minneg < -30 then zg = ''..style..'-35</div></div>' else zg = '' end
	if maxpos > 30 then return a..b..c..d..e..f..g..lev..za..zb..zc..zd..ze..zf..zg
		elseif maxpos > 25 then return b..c..d..e..f..g..lev..za..zb..zc..zd..ze..zf..zg
		elseif maxpos > 20 then return c..d..e..f..g..lev..za..zb..zc..zd..ze..zf..zg
		elseif maxpos > 15 then return d..e..f..g..lev..za..zb..zc..zd..ze..zf..zg
		elseif maxpos > 10 then return e..f..g..lev..za..zb..zc..zd..ze..zf..zg
		elseif maxpos > 5 then return f..g..lev..za..zb..zc..zd..ze..zf..zg
		elseif maxpos > 0 then return g..lev..za..zb..zc..zd..ze..zf..zg
		elseif maxpos > -5 then return lev..za..zb..zc..zd..ze..zf..zg
		elseif maxpos > -10 then return lev..za..zb..zc..zd..ze..zf..zg
		elseif maxpos > -15 then return lev..za..zb..zc..zd..ze..zf..zg
		elseif maxpos > -20 then return lev..za..zb..zc..zd..ze..zf..zg
		elseif maxpos > -15 then return lev..za..zb..zc..zd..ze..zf..zg
		elseif maxpos > -30 then return lev..za..zb..zc..zd..ze..zf..zg
	end
end

function p.bei1(frame)
	local args = getArgs(frame)
	return '<table><tr><td><div style="position:relative">'..p.be1(frame)..'</div>'..p.xx(frame)..'</td></tr></table>'
end

function p.round(frame)
	local args = getArgs(frame)
	return (math.ceil(args['s1']/5)*5 - args['s1']) * 6
end

---
function p.bar(frame)
	local args = getArgs(frame)
	local index, data = {}, {}
	local num = 1
	local maxposalue = 0
	local i = 0
	for a = 1, 30 do i = i + 1
		if args['m' .. i] then table.insert(index, i) end
	end

	--- use for args[m..i] --
	mvalue = math.max(args['m1'], args['m2'] or 0, args['m3'] or 0, args['m4'] or 0, args['m5'] or 0, args['m6'] or 0, args['m7'] or 0, args['m8'] or 0, args['m9'] or 0, args['m10'] or 0, args['m11'] or 0, args['m12'] or 0) 

	if args['s1'] then a = 1 else a = 0 end
	if args['k1'] then b = 1 else b = 0 end
	if args['verleich'] then c = 1 else c = 0 end
		
	cspan = 3 + a + b + c
	local datum = mw.html.create('table'):css('background-color', '#F8F9FA'):css('border', '0.1px solid #C0C0C0'):css('font-size', args['font-size'] or '100%'):done()
	datum
	:tag('th'):wikitext(args['titel'] or 'Datum'):attr('colspan', cspan):css('background-color', '#EBEBFF'):css('border-bottom', '0.1px solid #CCF'):done()
	row = datum:tag('tr')
	:tag('th'):wikitext(args['titeld'] or 'Datum'):css('background-color', '#F0F0F0'):done()
	if args['s1'] then
		row
		:tag('th'):wikitext(args['titels'] or 'Datum'):css('background-color', '#F0F0F0'):done()
	end
	row
	:tag('th'):css('background-color', '#F0F0F0'):done()
	:tag('th'):wikitext(args['titelv'] or 'Datum'):css('background-color', '#F0F0F0'):done()
	if args['verleich'] then
		row
		:tag('th'):wikitext('+ / &ndash;'):css('background-color', '#F0F0F0'):done()
	end

	for i, v in ipairs(index) do datum:tag('tr')
		breite = args['m'..v]*(args['width'] or 100)/mvalue
		if args['k'..v] then breitediff = args['k'..v]*(args['width'] or 100)/mvalue end
		if args['k'..v] then b = args['k'..v]*(args['width'] or 100)/mvalue end

		if args['titeld'] == 'Partei' then farbe = farben({args['d'..v]}) else farbe = args['f' .. v] or args['farbe'] or '6495ED' end
		if args['titeld'] == 'Partei' then farbek = hell({args['d'..v]}) else farbek = args['fk' .. v] or args['farbek'] or '6495ED' end		

		if args['k'..v] then color = '<div style="background-color:#'.. farbe..';width:'.. breite ..'px;height:70%;"></div><div style="height:6px"></div><div style="background-color:#'.. farbek..';width:'.. breitediff ..'px;height:70%;"></div>'
			else color = '<div style="background-color:#'.. farbe..';width:'.. breite ..'px;height:70%;"></div>'
		end

		if args['einheit'] then e = ' '..args['einheit'] else e = '' end
		if args['k'..v] then value = (mw.getLanguage('de'):formatNum(tonumber(args['m'..v]))).. e..'<div></div>'..(mw.getLanguage('de'):formatNum(tonumber(args['k'..v])))
			else value = (mw.getLanguage('de'):formatNum(tonumber(args['m'..v]))).. e
		end

		if args['verleich'] then diff = (args['m'..v] - args['k'..v])
			if diff < 0 then diffnum = -diff else diffnum = diff end
			diffvalue = (mw.getLanguage('de'):formatNum(tonumber(diffnum)))
			if diff > 0 then verleich = '+'..diffvalue
				elseif diff == 0 then verleich = '±0'
				else verleich = '&ndash;'.. diffvalue
				end
		end
		
		row = datum:tag('tr')
		if args['d' .. v] then
			row:tag('td')
				:wikitext(args['d' .. v])
				:css('border-top', '0.1px solid #E0E0E0')
				:css('padding-right', '20px')
		end
		if args['s1'] then
			row:tag('td')
				:wikitext(args['s1']..'<div></div>'..args['s2'])
				:css('border-top', '0.1px solid #E0E0E0')
				:css('padding-right', '20px')
		end
		if args['d' .. v] then
			row:tag('td')
				:wikitext(color)
				:css('width', args['width'] or '100px')
				:css('max-width', args['width'] or '100px')
				:css('height', '20px')
				:css('padding-left', '0px')
				:css('border-top', '0.1px solid #E0E0E0')
				:css('border-left', '0.1px solid #E0E0E0')				
		end
		if args['m' .. v] then
			row:tag('td')
				:wikitext(value)
				:css('min-width', '50px')
				:css('text-align', 'center')
				:css('border-top', '0.1px solid #E0E0E0')
				:css('border-left', '0.1px solid #E0E0E0')
		end
		if args['verleich'] then
			row:tag('td')
				:wikitext(verleich)
				:css('min-width', '50px')
				:css('text-align', 'center')
				:css('border-top', '0.1px solid #E0E0E0')
				:css('border-left', '0.1px solid #E0E0E0')
		end
	end

	return datum
end


function p.tabellen(frame)
	local root = mw.html.create('table'):addClass('wikitable')
	local args = getArgs(frame)
	local i = 0
	
	row = root:tag('th')
		:wikitext('Partei')
		:attr('colspan','2')
		:attr('rowspan','2')
	
	row2 = root:tag('tr')
	
	for wahl = 1, 10 do i = i + 1
		if args['jahr'..i] then
			row:tag('th')
			   :wikitext(args['jahr'..i])
			   :attr('colspan', 2)
		end
		if args['jahr'..i] then
			row2
				:tag('th')
				:wikitext('%')
			row2
				:tag('th')
				:wikitext('Mandate')
		 end
	end

	for k,v in pairs(args) do
		if tonumber(k) then
			value = string.gsub(v, "%,", "%.") or v
			if not tonumber(value) then
				if v == '-' or v == '–' or v == '/' then
					row:tag('td')
						:wikitext('&ndash;')
						:css('text-align', 'center')
				else
					row = root:tag('tr')
					row:tag('td')
						:css('background', '#'..farben({v}))
					row:tag('td')
						:wikitext(v)
				end
			else
				row:tag('td')
					:wikitext(v)
					:css('text-align', 'center')
			end
		end
	end
	
	return tostring(root)
end

return p