Modul:Partei
Erscheinungsbild
Vorlagenprogrammierung | Diskussionen | Lua | Unterseiten | |||
Modul | Deutsch | English
|
Modul: | Dokumentation |
Diese Seite enthält Code in der Programmiersprache Lua. Einbindungszahl Cirrus
local p = {}
local cfg = mw.loadData('Modul:Partei/Liste');
local cfx = mw.loadData('Modul:Partei/Akronyme');
local getArgs = require('Modul:Arguments').getArgs
-- §1 DELINK
local function delink(partei)
local a = mw.text.decode(partei)
local wl = mw.ustring.find(a,'%[%[')
if wl then
local b = mw.ustring.sub(a, wl+2)
local ende = mw.ustring.find(b, '%]%]')
local ohne = mw.ustring.sub(a, wl+2, wl+ende)
local label = mw.ustring.find(ohne, '%|')
if label then
a = mw.ustring.sub(ohne, 0, label-1)
else
a = ohne
end
else a = partei
end
return a
end
-- §2 PARTEINAME/AKRONYM
function p.name(frame)
local args = getArgs(frame)
local partei = args[1]
local land = args[2]
if land then
kom = land..';'..partei
full = cfx.akronym[kom]
if full then return full[1]
else return args[1]
end
else
return delink(args[1])
end
end
-- §3 STANDARD FARBE
function p.farbe(frame)
local args = getArgs(frame)
local partei = p.name({args[1], args[2]})
partei = cfg.altname[partei] or partei
local farbe = cfg.info[partei] or ''
return farbe[1] or 'DABAD0'
end
-- §4 ALTERNATIVE FARBE
function p.alt(frame)
local args = getArgs(frame)
local partei = p.name({args[1], args[2]})
partei = cfg.altname[partei] or partei
local farbe = cfg.info[partei] or ''
return farbe[3] or 'DABAD0'
end
-- §5 DUNKEL FARBE: STANDARD/ALTERNATIVE
local function farben(frame)
local args = getArgs(frame)
local v = args['V']
if v == 'A' then return p.alt(frame)
elseif v == 'HA' then return p.alt(frame)
elseif mw.ustring.find(args[1],' ') then return p.alt(frame)
else return p.farbe(frame) or 'DABAD0'
end
end
-- §6: HELLERE FARBE: STANDARD/ALTERNATIVE
function p.hell(frame)
local args = getArgs(frame)
local opaz = tonumber(args['h']) or 0.2
local farbe = args['col'] or farben(frame)
local cls = {}
if (farbe:len() == 6) then
cls[1] = tonumber(farbe:sub(1,2),16) or 255
cls[2] = tonumber(farbe:sub(3,4),16) or 255
cls[3] = tonumber(farbe:sub(5,6),16) or 255
end
cls[1] = 255 - math.floor((255-cls[1])*opaz)
cls[2] = 255 - math.floor((255-cls[2])*opaz)
cls[3] = 255 - math.floor((255-cls[3])*opaz)
return string.format('%02X%02X%02X',cls[1],cls[2],cls[3])
end
-- §7 PARTEIFARBEZELLE
function p.parteifarbezelle(frame)
local args = getArgs(frame)
local rowspan = tonumber(args.rowspan) or 1
local colspan = tonumber(args.colspan) or 1
local v = args['V']
if v == 'H' then farbe = '#' .. p.hell(frame)
elseif v == 'HA' then farbe = '#' .. p.hell(frame)
else farbe = '#' .. (args['f'] or farben(frame)) end
local zelle = 'rowspan="%s" colspan="%s" style="background-color:%s;"'
return string.format(zelle, rowspan, colspan, farbe)
end
-- §8: CUT
local function cut(a)
local link = mw.ustring.find(a, '%[%[')
if link then return a else
local begriff = mw.ustring.find(a, '%s%(')
if begriff then return mw.ustring.sub(a, 1, begriff)
else return a
end
end
end
-- §9 PARTEINAMEFARBE
function p.parteinamefarbe(frame)
local args = getArgs(frame)
local farbe = '#' .. farben(frame)
local spaltef = 'rowspan="%s" style="width:2px; background-color:%s;"|\n'
local spaltek = '| scope="row" rowspan="%s" colspan="%s" style="text-align:left;"|%s\n'
local spaltep = '| scope="row" rowspan="%s" colspan="%s" style="text-align:left;"|%s'
local rowspan = tonumber(args.rowspan) or 1
local colspan = tonumber(args.colspan) or 1
spaltef = string.format(spaltef, rowspan, farbe)
if args['k'] then spaltek = string.format(spaltek, rowspan, colspan, args['k']) end
spaltep = string.format(spaltep, rowspan, colspan, cut(args[1]))
if args['k'] then return(spaltef..spaltek..spaltep) else
return (spaltef..spaltep) end
end
-- §10 PARTEIFARBEZEILE
function p.parteifarbezeile(frame)
local args = getArgs(frame)
local rowspan = tonumber(args.rowspan) or 1
local colspan = tonumber(args.colspan) or 1
local width = (tonumber(args.w) or 0) .. 'px'
local farbe = '#' .. (args['f'] or farben(frame))
local zeile = 'rowspan="%s" colspan="%s" style="border-bottom:3px solid; border-bottom-color:%s; width:%s"|' .. (args['k'] or cut(args[1])) .. '\n'
return string.format(zeile, rowspan, colspan, farbe, width)
end
-- §11 PARTEILEGENDE
function p.parteilegende(frame)
local args = getArgs(frame)
farbe = farben(frame)
legende = '<span style="border-left:1.2em solid;border-left-color:#'..farbe..';margin-right:4px"></span>'.. cut(args[1])
return legende
end
-- §12 PARTEISITZE
function p.parteisitze(frame)
local args = getArgs(frame)
local x = args[1]
local y = args[2]
local pagename = mw.title.getCurrentTitle().prefixedText
if args[4] then a = p.name({args[3], args[4]}) else
if args[3] == 'P' then a = pagename
else a = args[3]
end
end
if args['V'] == 'A' then altfarbe = true end
c = args['f'] or (altfarbe and p.alt({a})) or p.farbe({a})
local q = tonumber(string.format('%.1f', x / y * 100))
z = string.gsub(q, "%.", "%,")
if args['w'] then w = '<span style="font-size:80%"> ('..z..' %)</span>' else w = '' end
local k = (x / y * 100)..'%'
local mandate = '<div style="max-width:150px">'..x..' / '..y..'%s</div><div style="width:100px;border:0.1px solid #aaa;background-color:#FFF;height:0.6em;position:relative;text-align:left;"><div style="background-color:#%s;width:%s;height:0.6em;"></div></div>'
return string.format(mandate, w, c, k)
end
-- §13 PIPELINK (Akronym or Akronym (Begriffsklärung), Land > [[Name|Akronym]])
function p.pipelink(frame)
local args = getArgs(frame)
local key = p.name({args[1], args[2]})
if args[1] == 'Unabh.' then name = '[[Parteilos|Unabh.]]'
elseif args[1] == 'Sonst.' then name = 'Sonst.'
elseif full then name = full[2] or (args[1] == full[1] and '[['..full[1]..']]' or '[['..full[1]..'|'..cut(args[1])..']]')
else name = args[1]
end
return name
end
-- §14 FULL (Akronym, Land > [[Name]], oder [[Name (Begriffsklärung)|Name]])
function p.full(frame)
local args = getArgs(frame)
local name = p.name({args[1], args[2]})
if full then
begriff = mw.ustring.find(name,'%s%(')
label = full['label'] or begriff and mw.ustring.sub(name, 1, begriff)
end
if label then return '[['..name..'|'..label..']]'
elseif full then return '[['..name..']]'
else return name
end
end
-- §14 FARBENLISTE
function p.farbenliste(frame)
local root = mw.html.create('table'):addClass('wikitable sortable')
root:tag('tr')
:tag('th'):attr('rowspan', '2'):wikitext('Partei'):done()
:tag('th'):attr('colspan', '2'):wikitext('Farbe'):done()
:tag('th'):attr('rowspan', '2'):wikitext('Staat'):done()
:tag('th'):attr('colspan', '2'):wikitext('Alt. Farbe'):done()
root:tag('tr')
:tag('th'):addClass('unsortable'):wikitext('Ausgabe'):done()
:tag('th'):wikitext('Code'):done()
:tag('th'):addClass('unsortable'):wikitext('Ausgabe'):done()
:tag('th'):wikitext('Code'):done()
local liste = {}
for k, v in pairs(cfg.info) do
liste[#liste+1] = k
end
table.sort(liste)
for _, value in pairs(liste) do
local info = cfg.info[value]
if info[3] == nil then alt = '' else alt = 'background-color:#' .. info[3] end
root:tag('tr')
:tag('td'):wikitext('[[' .. value .. ']]'):done()
:tag('td'):css('background-color', '#' .. info[1]):done()
:tag('td'):wikitext(info[1]):done()
:tag('td'):wikitext(info[2]):done()
:tag('td'):cssText(alt):done()
:tag('td'):wikitext(info[3]):done()
end
return root
end
-- §15 LISTE DER ALTERNATIVEN NAMEN
function p.altnamenliste(frame)
local root = mw.html.create('table'):addClass('wikitable sortable')
root:tag('tr')
:tag('th'):wikitext('Alternativer name'):done()
:tag('th'):wikitext('Partei'):done()
local altn = {}
for k, v in pairs(cfg.altname) do
altn[#altn+1] = k
end
table.sort(altn)
for _, name in ipairs(altn) do
root:tag('tr')
:tag('td'):wikitext('[[' .. name .. ']]'):done()
:tag('td'):wikitext('[[' .. cfg.altname[name] ..']]'):done()
end
return root
end
-- §16 AKRONYME LISTE
function p.akronymeliste(frame)
local root = mw.html.create('table'):addClass('wikitable sortable')
root:tag('tr')
:tag('th'):wikitext('Staat;Akronym'):done()
:tag('th'):wikitext('Staat'):done()
:tag('th'):wikitext('Akronym'):done()
:tag('th'):wikitext('Parteiname'):done()
:tag('th'):wikitext('Parteien'):done()
local liste = {}
for k, v in pairs(cfx.akronym) do
liste[#liste+1] = k
end
table.sort(liste)
for _, value in pairs(liste) do
local akr = cfx.akronym[value]
root:tag('tr')
:tag('td'):wikitext(value):done()
:tag('td'):wikitext(string.sub(value, 0, (string.find(value, ';') - 1))):done()
:tag('td'):wikitext(string.sub(value, (string.find(value, ';') + 1))):done()
:tag('td'):wikitext('[['..akr[1]..']]'):done()
:tag('td'):wikitext(akr[2]):done()
end
return root
end
return p