Module:Government
Jump to navigation
Jump to search
Documentation [edit]
This page is a stub - it only covers the very basics of its subject. More information should be added to make the page informative and useful. If no more information is available, the page should be considered for a merge, redirect, or deletion.
Details: documentation to be written
If you can correct the issue, please edit the page to do so, then remove this notice.
Please see Template:Gov for usage information. Use the template rather than invoking the module. Data for this module is imported from Module:Government/list.Details: documentation to be written
If you can correct the issue, please edit the page to do so, then remove this notice.
The above documentation is transcluded from Module:Government/doc.
local list = mw.loadData('Module:Government/list')
local p = {}
--keys must be lowercase with spaces removed, all input will be converted as such
local shortcuts = {
admin = 'Administrator',
io = 'Imperial Officer',
mod = 'Moderator',
}
local function strip(s)
--trim, lowercase, and remove non-alphanumeric characters - same as in /list
return mw.text.trim(mw.ustring.gsub(mw.ustring.lower(s or ''), '%W', ''))
end
local function link(name, game, showDuties)
--delimiters for duty descriptions
local dutiesOpen = '['
local dutiesClose = ']'
local person = ''
local duties = ''
local dutiesStart = mw.ustring.find(name, dutiesOpen, 1, true)
local dutiesEnd = mw.ustring.find(name, dutiesClose, 1, true)
local text
if dutiesStart and dutiesEnd and dutiesStart < dutiesEnd then
person = mw.text.trim(mw.ustring.sub(name, 1, dutiesStart - 1))
duties = mw.text.trim(mw.ustring.sub(name, dutiesStart + 1, dutiesEnd - 1))
elseif dutiesStart or dutiesEnd then
return '<span class="error">duties parse error: ' .. name .. '</span>'
else
person = name
end
if game == 'Community' then
text = '[' .. '[' .. person .. ']]'
else
text = mw.getCurrentFrame():expandTemplate({ title='gamepage', args={ person, game=game } })
end
if showDuties and duties ~= '' then
text = text .. ' (' .. duties .. ')'
end
return text
end
function p.main(frame)
return p.call(frame:getParent().args)
end
function p.call(args)
--separator between officeholders in /list
local sep = ', '
local game = args[1]
local position = args[2]
local bullet = strip(args.bull)
local desc = strip(args.desc)
local text = ''
local incumbent
if not game or not position then
return '<span class="error">game and position must be specified</span>'
end
if not list[strip(game)] then
return '<span class="error">invalid government category: ' .. game .. '</span>'
end
if shortcuts[strip(position)] then
position = shortcuts[strip(position)]
end
incumbent = list[strip(game)][strip(position)]
if not incumbent then
return '<span class="error">invalid government position: ' .. position .. '</span>'
elseif incumbent == '' then
return "''vacant''"
end
if bullet == 'yes' then bullet = true elseif bullet == 'no' then bullet = false else bullet = nil end
desc = desc ~= ''
if not mw.ustring.find(incumbent, sep, 1, true) then
--add bullet only if specified on
if bullet then text = text .. '*' end
text = text .. link(incumbent, game, desc)
else
--add bullet if not specified off
if bullet ~= false then bullet = true end
for holder in mw.text.gsplit(incumbent, sep, true) do
if bullet then text = text .. '*' end
text = text .. link(holder, game, desc) .. '\n'
end
if not bullet then
text = mw.ustring.gsub(mw.text.trim(text), '\n', ', ')
end
end
return mw.text.trim(text)
end
return p