Usage
editThis module produces a table of results of elections of non-permanent members of the United Nations Security Council.
The numbered arguments contain the votes for the individual countries. Each numbered argument should be a colon-separated list, the last element of which is a comma-separated list of vote counts in the rounds of voting. The remaining elements are the name and arguments of a template to be called to display the country. Usually, this will just be the three-letter country code, so a typical argument would be ITA:65,108,128
, which displays the country as {{ITA}}
→ Italy. Some South American countries use a special state variant of their flag at the United Nations; the more general form of the argument allows for such variants; e.g. flag:Peru:state:99,101
displays the country as {{flag|Peru|state}}
→ Peru.
The named arguments are as follows:
Parameter | Description | Status |
---|---|---|
valid
|
counts of valid ballots | required |
invalid
|
counts of invalid ballots | optional |
abstentions
|
counts of abstentions | required |
group
|
regional group(s) | required |
ref
|
content for reference tag | optional |
ref_name
|
name for reference tag | optional |
day
|
election day for title | optional |
round
|
first voting round | optional |
The counts are specified as comma-separated lists. The counts of valid ballots and abstentions are required; they are used to calculate the number of members present and voting (valid ballots minus abstentions) and the required two-thirds majority (two thirds of those present and voting, rounded up). The counts of invalid ballots may also be specified; they are only displayed if they are not all zero.
The named arguments with counts must specify a count for each round. The numbered arguments may specify fewer counts; the remaining counts are taken to be zero. (This is useful when a country withdraws during the election.) Zero counts for countries (whether specified or not) are displayed as dashes; zero counts in named arguments are displayed as zeros. Country vote counts greater or equal to the required majority are displayed in bold.
If at least one of ref
and ref_name
is specified, a reference tag is inserted after the table's title. Any number of such reference tags can be produced using ref2
and/or ref_name2
etc. (with ref1
and ref_name1
being aliases for ref
and ref_name
, respectively). The optional day
parameter can be used to specify which of several election days the table refers to; for instance, day=two
results in " – day two" being appended to the title. The optional round
specifies the number of the first round; the default is 1.
Example
edit{{#invoke:United Nations Security Council election results|table
|ETH:185
|KAZ:113,138
|THA:77,55
|valid=192,193
|invalid=1,0
|abstentions=2,0
|group=African and Asia-Pacific Groups
|ref_name=ga
|ref={{UN document|docid=A/70/PV.106|body=A|session=70|type=V|meeting=106|meetingtime=10 a.m.|page=2|date=28 June 2016|accessdate=4 August 2024}}
}}
African and Asia-Pacific Groups election results[1] | ||
---|---|---|
Member | Round 1 | Round 2 |
Ethiopia | 185 | — |
Kazakhstan | 113 | 138 |
Thailand | 77 | 55 |
valid ballots | 192 | 193 |
invalid ballots | 1 | 0 |
abstentions | 2 | 0 |
present and voting | 190 | 193 |
required majority | 127 | 129 |
- ^ United Nations General Assembly Session 70 Verbatim record 106. A/70/PV.106 page 2. 28 June 2016 at 10 a.m. Retrieved 4 August 2024.
local p = {}
local function addNumbers (label,data)
maxcols = math.max (maxcols,#data)
table.insert (array,data)
table.insert (labels,label)
end
local function addRow (label,data)
data = mw.text.split(data,",")
for i = 1,#data do
data [i] = tonumber (data [i])
end
addNumbers (label,data)
end
local function appendLine (line)
result = result .. line .. "\n"
end
local function buildReferences (r)
r.ref1 = r.ref or r.ref1
r.ref_name1 = r.ref_name or r.ref_name1
local s = ""
local i = 1
while true do
local ref = r ["ref" .. i]
local ref_name = r ["ref_name" .. i]
-- an actual reference and/or a reference name may be provided
if not (ref or ref_name) then return s end
s = s .. "<ref"
if ref_name then s = s .. " name=\"" .. ref_name .. "\"" end
s = s .. ">" .. (ref or "") .. "</ref>"
i = i + 1
end
end
function p.table (frame)
labels = {} -- first column
array = {} -- matrix of numeric data
maxcols = 0 -- maximum number of columns
-- iterate over the numbered arguments with country data, e.g. ITA:113,92,94,95,95
for i,parameter in ipairs (frame.args) do
local parts = mw.text.split (parameter,":")
addRow (frame:expandTemplate{title = parts [1],args = {unpack (parts,2,#parts - 1)}},parts [#parts]); -- ITA yields {{ITA}}, flag:Peru:state yields {{flag|Peru|state}}
end
local last = #array
addRow ("valid ballots",frame.args.valid)
if frame.args.invalid and string.match(frame.args.invalid,"[^0,]") then
addRow ("invalid ballots",frame.args.invalid) -- add invalid ballots if they’re specified and not all zero
end
addRow ("abstentions",frame.args.abstentions)
-- compute vote count and required majority from counts of ballots and abstensions
local voting = {}
local required = {}
for i=1,maxcols do
local votes = array [last + 1] [i] - array [#array] [i] -- valid ballots minus abstentions
table.insert (voting,votes)
table.insert (required,math.ceil (votes * 2 / 3))
end
addNumbers ("present and voting",voting)
addNumbers ("required majority",required)
result = ""
appendLine ("{| class=\"wikitable collapsible\" style=\"text-align: center;\"");
appendLine ("|-")
appendLine ("! colspan=\"" .. (maxcols + 1) .. "\" | " .. frame.args.group .. " election results" ..
(frame.args.day and (" – day " .. frame.args.day) or "") .. frame:preprocess (buildReferences (frame.args)))
appendLine ("|-")
appendLine ("! Member")
local round = frame.args.round or 1
for i=0,maxcols - 1 do
appendLine ("| style=\"background:silver;\"|'''Round " .. (i + round) .. "'''")
end
for j,label in ipairs (labels) do
result = result .. "|-\n| style=\"text-align:left;\" | " .. label
local isCountry = j <= last
for i=1,maxcols do
local value = array [j] [i]
local bold = isCountry and value and value >= array [#array] [i] and "'''" or "" -- bold vote count if it’s at least the required majority
result = result .. "|| " .. bold .. ((not isCountry or (value and value ~= 0)) and value or "—") .. bold -- missing or zero vote counts are replaced by em dashes
end
result = result .. "\n"
end
result = result .. "|}"
return result
end
return p