Modul:Infobox Wahl
Erscheinungsbild
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 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 ' '
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