Module:Government
Documentation for this module may be created at 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)
if game == 'Community' then
return '[' .. '[' .. name .. ']]'
else
return mw.getCurrentFrame():expandTemplate({ title='gamepage', args={ name, game=game } })
end
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 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
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)
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) .. '\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