Zum Inhalt springen

Modul:Infobox Wahl

aus Wikipedia, der freien Enzyklopädie

Die Dokumentation für dieses Modul kann unter Modul:Infobox Wahl/Doku erstellt werden

local p = {}
local farbe = require('Modul:Partei').farbe
local sitze = require('Modul:Partei').parteisitze
local alt = require('Modul:Partei').alt
local erste = require('Modul:Verwaltungseinheit').erste
local erstelink = require('Modul:Verwaltungseinheit').erstelink
local zweite = require('Modul:Verwaltungseinheit').zweite
local zweitelink = require('Modul:Verwaltungseinheit').zweitelink
local dritte = require('Modul:Verwaltungseinheit').dritte
local drittelink = require('Modul:Verwaltungseinheit').drittelink
local vierte = require('Modul:Verwaltungseinheit').vierte
local viertelink = require('Modul:Verwaltungseinheit').viertelink
local getArgs = require('Modul:Arguments').getArgs

local function form(num)
	return (tonumber(num) and mw.getLanguage('de'):formatNum(tonumber(num))) or '–'
end

function p.gewahlt(frame)
	local args = getArgs(frame)
	if args['align'] then option = '<div style="text-align:'..args['align']..'">' close = '</div>' else option = '<span style="padding-left:0.6em">' close = '</span>' end
	if args[1] == 'N' then color = 'FF4A45' line = 'E30000' text = 'nicht&nbsp;gewählt'
		else color = args['farbe'] or '4BBD71' line = args['border'] or '3A9157' text = args[1] or 'gewählt'
	end
	return ''..option..'<span style="background-color:#'..color..';padding-left:6px;padding-right:6px;padding-top:1px;padding-bottom:1px;line-height:8px;border-radius:4px 4px 4px;font-size:80%;border:0.1px solid #'..line..';text-align:center;font-weight:bold;color:#FFFFFF;">'..text..'</span>'..close
end

function p.mandate(frame)
	local args = getArgs(frame)
	local index, data = {}, {}
	local num = 1
	local gesamt = 0
	local i = 0
	for a = 1, 30 do i = i + 1
		if args['m'..i] then table.insert(index, i) end
	end
	while (args['m'..num]) do
		data[num] = {
			s = tonumber(args['m'..num]),
		}				
		gesamt = gesamt + data[num].s
		num = num+1
	end	
	
	local root = mw.html.create('table'):addClass('wikitable'):css('width', '100%'):css('margin-top', '2px'):css('margin-bottom', '1px')
	for k, v in ipairs(index) do
		rwo = root:tag('tr')
		if args['l'..v] then
			rwo:tag('td')
				:wikitext(args['l'..v])
				:css('text-align', 'left')
				:css('width', '45%')
				:css('border-bottom', '0.1px solid #C0C0C0')
				:css('border-right', '0.1px solid #F0F0F0')
			rwo:tag('td')
				:wikitext('<div style="width:100px;border:0.1px solid #D0D0D0;background-color:#FFF;height:1.2em;position:relative;"><div style="background-color:#' ..farbe({(args['l'..v])})..';width:'.. args['m'..v]*100/gesamt ..'px;height:1.2em"></div></div>')
				:css('border-bottom', '0.1px solid #C0C0C0')
				:css('border-right', '0.1px solid #F0F0F0')
			rwo:tag('td')
				:wikitext(args['m'..v]..' / '..gesamt)
				:css('border-bottom', '0.1px solid #C0C0C0')
		end
	end
end

function p.bar(frame)
	local args = getArgs(frame)
	local index, data = {}, {}
	local num = 1
	local i = 0
	for a = 1, 30 do i = i + 1
		if args['prozent'..i] or args['prozentz'..i] then table.insert(index, i) end
	end
	maxerste = 0
	maxzweite = 0
	while args['prozent'..num] or args['prozentz'..num] do
		data[num] = {w = tonumber(args['prozent'..num]) or 0, y = tonumber(args['prozentz'..num]) or 0}
			maxerste = math.max(maxerste, data[num].w)
			maxzweite = math.max(maxzweite, data[num].y)
			num = num+1
	end
	local root = mw.html.create('table'):addClass('wikitable'):css('font-size', '88%'):css('margin-top', '2px'):css('margin-bottom', '1px')
	if args['prozentz1'] then
		root:tag('th')
			:wikitext('1. Wahlgang')
			:attr('colspan', '3')
			:css('background', '#F2F2F4')
			:css('font-weight', 'bold')
			:css('border-bottom', '0.1px solid #C0C0C0')
	end

	sep = args['zeile'] and '<br/>' or '&#32;'
	
	for k, v in ipairs(index) do
		rwo = root:tag('tr')
		if args['kandidat'..v] then
		color = args['farbe'..v] or farbe({args['partei'..v]})
			breite = (string.gsub((args['prozent'..v] or args['sonstige']), "%,", "%."))*100/maxerste
			rwo:tag('td')
				:wikitext(args['kandidat'..v], sep..'('..args['partei'..v]..')')
				:css('text-align', 'left')
				:css('line-height', '13px')
				:css('max-width', '230px')
				:css('border-bottom', '0.1px solid #C0C0C0')
				:css('border-right', '0.1px solid #D0D0D0')
			rwo:tag('td')
				:wikitext('<div style="margin-left:-6px;background-color:#'..color..';width:'..breite..'px;min-width:1px;height:1.2em;"></div>')
				:css('width', '100px')
				:css('border-bottom', '0.1px solid #C0C0C0')
				:css('border-right', '0.1px solid #F0F0F0')
			rwo:tag('td')
				:wikitext(args['prozent'..v]..' %')
				:css('width', '50px')
				:css('text-align', 'right')
				:css('border-bottom', '0.1px solid #C0C0C0')
		end
	end
	if args['sonstige'] then
		rwo = root:tag('tr')
			rwo:tag('td')
				:wikitext('Sonstige < '.. (args['ak'] or '3') ..' %')
				:css('text-align', 'left')
				:css('border-bottom', '0.1px solid #C0C0C0')
				:css('border-right', '0.1px solid #D0D0D0')
			rwo:tag('td')
				:wikitext('<div style="margin-left:-6px;background-color:#DABAD0;width:'.. breite ..'px;height:1.2em;min-width:2px;"></div>')
				:css('border-bottom', '0.1px solid #C0C0C0')
				:css('border-right', '0.1px solid #F0F0F0')
			rwo:tag('td')
				:wikitext(args['sonstige']..' %')
				:css('width', '40px')
				:css('text-align', 'right')
				:css('border-bottom', '0.1px solid #C0C0C0')
	end

	if args['prozentz1'] then
		root:tag('th')
			:wikitext('2. Wahlgang')
			:attr('colspan', '3')
			:css('background', '#F2F2F4')
			:css('font-weight', 'bold')
			:css('border-bottom', '0.1px solid #C0C0C0')
			for k, v in ipairs(index) do
				rwo = root:tag('tr')
				if args['kandidat'..v] and args['prozentz'..v] then
					color = args['farbe'..v] or farbe({args['partei'..v]})
					breite = (string.gsub((args['prozentz'..v] or args['sonstige']), "%,", "%."))*100/maxzweite
					rwo:tag('td')
						:wikitext(args['kandidat'..v], sep..'('..args['partei'..v]..')')
						:css('text-align', 'left')
						:css('line-height', '13px')
						:css('max-width', '230px')
						:css('border-bottom', '0.1px solid #C0C0C0')
						:css('border-right', '0.1px solid #D0D0D0')
					rwo:tag('td')
						:wikitext('<div style="margin-left:-6px;background-color:#'..color..';width:'..breite..'px;min-width:1px;height:1.2em;"></div>')
						:css('width', '100px')
						:css('border-bottom', '0.1px solid #C0C0C0')
						:css('border-right', '0.1px solid #F0F0F0')
					rwo:tag('td')
						:wikitext(args['prozentz'..v]..' %')
						:css('width', '50px')
						:css('text-align', 'right')
						:css('border-bottom', '0.1px solid #C0C0C0')
				end
		end
	end

	return tostring(root)
end

function p.tab(frame)
	local args = getArgs(frame)
	cspan = args['stimmen3'] and 4 or args['stimmen2'] and 3 or 2
	cpan = cspan - 1
	if args['stimmen3'] and (args['stimmenz3'] or not args['stimmenz1']) then spaltedrei = true end
	
	local root = mw.html.create('table'):addClass('infobox box'):css('text-align', 'center')
	row = root:tag('tr')
		row:tag('td')
			:wikitext(args['name'] or mw.title.getCurrentTitle().prefixedText)
			:css('background-color', '#CCF')
			:css('text-align', 'center')
			:css('font-weight', 'bold')
			:css('min-width', '20em')
			:css('font-size', '106%')
			:attr('colspan', cspan)

		if args['staat'] then
			row = root:tag('tr')
				row:tag('td')
					:wikitext('Staat')
					:css('font-weight', 'bold')
					:css('text-align', 'left')
					:css('background-color', '#F2F2F4')
				row:tag('td')
					:wikitext(frame:expandTemplate{title = args['staat']})
					:attr('colspan', cpan)
					:css('text-align', 'left')
		end
		if args['einheit1'] then
			row:tag('tr')
				row:tag('td')
					:wikitext(args['ebene1'] or erste({args['staat'], args['einheit1']}))
					:css('font-weight', 'bold')
					:css('text-align', 'left')
					:css('background-color', '#F2F2F4')
				row:tag('td')
					:wikitext(args['ebene1'] and args['einheit1'] or erstelink({args['staat'], args['einheit1']}))
					:attr('colspan', cpan)
					:css('text-align', 'left')
		end
		if args['einheit2'] then
			row:tag('tr')
				row:tag('td')
					:wikitext(args['ebene2'] or zweite({args['staat'], args['einheit2'], args['einheit1']}))
					:css('font-weight', 'bold')
					:css('text-align', 'left')
					:css('background-color', '#F2F2F4')
				row:tag('td')
					:wikitext(args['ebene2'] and args['einheit2'] or zweitelink({args['staat'], args['einheit2'], args['einheit1']}))
					:attr('colspan', cpan)
					:css('text-align', 'left')
		end
		if args['einheit3'] then
			row:tag('tr')
				row:tag('td')
					:wikitext(args['ebene3'] or dritte({args['staat'], args['einheit3'], args['einheit1']}))
					:css('font-weight', 'bold')
					:css('text-align', 'left')
					:css('background-color', '#F2F2F4')
				row:tag('td')
					:wikitext(args['ebene3'] and args['einheit3'] or drittelink({args['staat'], args['einheit3'], args['einheit1']}))
					:attr('colspan', cpan)
					:css('text-align', 'left')
		end
		if args['einheit4'] then
			row:tag('tr')
				row:tag('td')
					:wikitext(args['ebene4'] or vierte({args['staat'], args['einheit4'], args['einheit1']}))
					:css('font-weight', 'bold')
					:css('text-align', 'left')
					:css('background-color', '#F2F2F4')
				row:tag('td')
					:wikitext(args['ebene4'] and args['einheit4'] or viertelink({args['staat'], args['einheit4'], args['einheit1']}))
					:attr('colspan', cpan)
					:css('text-align', 'left')
		end
		if args['datum'] then
			row:tag('tr')
				row:tag('td')
					:wikitext('Datum')
					:css('font-weight', 'bold')
					:css('text-align', 'left')
					:css('background-color', '#F2F2F4')
				row:tag('td')
					:wikitext((args['datumz'] and '1. Wahlgang: ' or '')..args['datum']..(args['datumz'] and '<br/>2. Wahlgang: '..args['datumz']..'' or ''))
					:attr('colspan', cpan)
					:css('text-align', 'left')
		end
		if args['wahlbeteiligung'] then
			row:tag('tr')
				row:tag('td')
					:wikitext('Wahlbeteiligung')
					:css('font-weight', 'bold')
					:css('text-align', 'left')
					:css('background-color', '#F2F2F4')
				row:tag('td')
					:wikitext((args['wahlbeteiligungz'] and '1. Wahlgang: ' or '')..args['wahlbeteiligung']..' %'..(args['wahlbeteiligungz'] and '<br/>2. Wahlgang: '..args['wahlbeteiligungz']..' %' or ''))
					:attr('colspan', cpan)
					:css('text-align', 'left')
		end
		if args['kandidat1'] and args['stimmen1'] then
			if args['bild1'] or args['bild2'] or args['bild3'] then
				row:tag('tr')
					row:tag('td')
					row:tag('td')
					:wikitext(args['bild1'] and '[[Datei:'..args['bild1']..'|'..(spaltedrei and '112x150' or '140x185')..'px]]' or '')
				if args['kandidat2'] then
					row:tag('td')
						:wikitext(args['bild2'] and '[[Datei:'..args['bild2']..'|'..(spaltedrei and '112x150' or '140x185')..'px]]' or '')
				end
				if spaltedrei then
					row:tag('td')
						:wikitext(args['bild3'] and '[[Datei:'..args['bild3']..'|112x150px]]' or '')
				end
			end
			row:tag('tr')
				row:tag('td')
				row:tag('td')
					:css('background-color', '#'..(args['farbe1'] or farbe({args['koalition1'] or args['partei1']})))
					:css('height', '4px')
					:css('min-width', (spaltedrei and '110' or '138')..'px')
					:css('max-width', (spaltedrei and '112' or '140')..'px')
				if args['kandidat2'] then
					row:tag('td')
						:css('background-color', '#'..(args['farbe2'] or farbe({args['koalition2'] or args['partei2']})))
						:css('height', '4px')
						:css('min-width', (spaltedrei and '110' or '138')..'px')
						:css('max-width', (spaltedrei and '112' or '140')..'px')
				end
				if spaltedrei then
					row:tag('td')
						:css('background-color', '#'..(args['farbe3'] or farbe({args['koalition3'] or args['partei3'] or args['p3']})))
						:css('height', '4px')
						:css('min-width', '110px')
						:css('max-width', '112px')
				end
			row:tag('tr')
				row:tag('td')
					:wikitext('Kandidaten')
					:css('font-weight', 'bold')
					:css('text-align', 'left')
					:css('background-color', '#F2F2F4')
				row:tag('td')
					:wikitext(args['kandidat1'])
					:css('height', '4px')
					:css('min-width', (spaltedrei and '110' or '138')..'px')
					:css('max-width', (spaltedrei and '112' or '140')..'px')
				if args['kandidat2'] then
					row:tag('td')
						:wikitext(args['kandidat2'])
						:css('height', '4px')
						:css('min-width', (spaltedrei and '110' or '138')..'px')
						:css('max-width', (spaltedrei and '112' or '140')..'px')
				end
				if spaltedrei then
					row:tag('td')
						:wikitext(args['kandidat3'])
						:css('min-width', '110px')
						:css('max-width', '112px')
				end
			if args['stellvertreter1'] then
				row:tag('tr')
					row:tag('td')
						:wikitext('Koalitionen')
						:css('font-weight', 'bold')
						:css('text-align', 'left')
						:css('background-color', '#F2F2F4')
					row:tag('td')
						:wikitext(args['stellvertreter1'])
					if args['stellvertreter2'] then
						row:tag('td')
							:wikitext(args['stellvertreter2'])
					end
					if spaltedrei then
						row:tag('td')
							:wikitext(args['stellvertreter3'])
					end
			end
			if args['partei1'] then
				row:tag('tr')
					row:tag('td')
						:wikitext('Parteien')
						:css('font-weight', 'bold')
						:css('text-align', 'left')
						:css('background-color', '#F2F2F4')
					row:tag('td')
						:wikitext(args['partei1'])
					if args['partei2'] or args['stimmen2'] then
						row:tag('td')
							:wikitext(args['partei2'])
					end
					if spaltedrei then
						row:tag('td')
							:wikitext(args['partei3'])
					end
			end
			if args['koalition1'] then
				row:tag('tr')
					row:tag('td')
						:wikitext('Koalitionen')
						:css('font-weight', 'bold')
						:css('text-align', 'left')
						:css('background-color', '#F2F2F4')
					row:tag('td')
						:wikitext(args['koalition1'])
					if args['koalition2'] then
						row:tag('td')
							:wikitext(args['koalition2'])
					end
					if spaltedrei then
						row:tag('td')
							:wikitext(args['koalition3'])
					end
			end
			if args['stimmen1'] ~= '0' then
				row:tag('tr')
					row:tag('td')
						:wikitext('Stimmen'..(args['stimmenz1'] and ' –<br/> 1. Wahlgang' or ''))
						:css('font-weight', 'bold')
						:css('text-align', 'left')
						:css('background-color', '#F2F2F4')
					row:tag('td')
						:wikitext(form(args['stimmen1'])..'<br/>'..args['prozent1']..' %')
					if args['stimmen2'] then
						row:tag('td')
							:wikitext(form(args['stimmen2'])..'<br/>'..args['prozent2']..' %')
					end
					if spaltedrei then
						row:tag('td')
							:wikitext(form(args['stimmen3'])..'<br/>'..args['prozent3']..' %')
					end
				if args['stimmenz1'] then
					row:tag('tr')
						row:tag('td')
							:wikitext('Stimmen –<br/>2. Wahlgang')
							:css('font-weight', 'bold')
							:css('text-align', 'left')
							:css('background-color', '#F2F2F4')
						row:tag('td')
							:wikitext(form(args['stimmenz1'])..'<br/>'..args['prozentz1']..' %')
						if args['stimmenz2'] then
							row:tag('td')
								:wikitext(form(args['stimmenz2'])..'<br/>'..args['prozentz2']..' %')
						end
						if spaltedrei then
							row:tag('td')
								:wikitext(form(args['stimmenz3'])..'<br/>'..args['prozentz3']..' %')
						end
				end
				if args['mandate1'] then
					row:tag('tr')
						row:tag('td')
							:wikitext((args['staat'] == 'USA' and not args['einheit2']) and 'Wahlleute' or 'Mandate')
							:css('font-weight', 'bold')
							:css('text-align', 'left')
							:css('background-color', '#F2F2F4')
						row:tag('td')
							:wikitext('<div align="center">'..sitze({args['mandate1'], args['gesamt'], f = args['farbe1'], (args['koalition1'] or args['partei1'])})..'</div>')
							:css('margin', 'auto')
						if args['mandate2'] then
							row:tag('td')
								:wikitext('<div align="center">'..sitze({args['mandate2'], args['gesamt'], f = args['farbe2'], (args['koalition2'] or args['partei2'])})..'</div>')
						end
						if spaltedrei then
							row:tag('td')
								:wikitext('<div align="center">'..sitze({args['mandate3'], args['gesamt'], f = args['farbe3'], (args['koalition3'] or args['partei3'])})..'</div>')
						end
				end
			end
		end
		if args['kandidat100'] then
			row:tag('tr')
				row:tag('td')
					:wikitext('Zusammenfassung der Stimmen')
					:attr('colspan', cspan)
					:css('font-weight', 'bold')
					:css('background-color', '#EBEBFF')
			row:tag('tr')
				row:tag('td')
					:wikitext(p.bar(frame))
					:attr('colspan', cspan)
		end
		if args['karte'] then
			row:tag('tr')
				row:tag('td')
					:wikitext(args['bildunterschrift'])
					:attr('colspan', cspan)
					:css('font-weight', 'bold')
					:css('background-color', '#EBEBFF')
			if args['kartez'] then
				row:tag('tr')
					row:tag('td')
						:wikitext('1. Wahlgang')
						:attr('colspan', cspan)
						:css('font-weight', 'bold')
						:css('background-color', '#F2F2F4')
			end
			row:tag('tr')
				row:tag('td')
					:wikitext('[[Datei:'..args['karte']..'|'..(args['kartenbreite'] or '270x270')..'px]]'..(args['karterechts'] and '[[Datei:'..args['karterechts']..'|'..(args['kartenbreite'] or '270x270')..'px]]' or ''))
					:attr('colspan', cspan)
			if args['kartez'] then
				row:tag('tr')
					row:tag('td')
						:wikitext('2. Wahlgang')
						:attr('colspan', cspan)
						:css('font-weight', 'bold')
						:css('background-color', '#F2F2F4')
				row:tag('tr')
					row:tag('td')
					:wikitext('[[Datei:'..args['kartez']..'|'..(args['kartenbreite'] or '270x270')..'px]]')
					:attr('colspan', cspan)
			end
		end
		if args['vorgänger'] then
			row:tag('tr')
				row:tag('td')
					:wikitext(args['amt'])
					:attr('colspan', cspan)
					:css('font-weight', 'bold')
					:css('background-color', '#EBEBFF')
			row:tag('tr')
				row:tag('td')
					:wikitext(args['vorgänger'])
					:attr('colspan', cspan)
		end
		if args['davor'] or args['nach'] then
			row:tag('tr')
				row:tag('td')
					:wikitext('<span style="float:left">← '..(args['davor'] or '-')..'</span> <span style="float:right">'..(args['nach'] or '-')..' →</span>')
					:attr('colspan', cspan)
					:css('vertical-align', 'middle')
					:css('font-weight', 'bold')
					:css('background-color', '#EBEBFF')
		end
		return root
	end
return p