Module:POTY/state
Jump to navigation
Jump to search
Lua
CodeDiscussionEditHistoryLinksLink count Subpages:DocumentationTestsResultsSandboxLive code All modules
Returns data from Module:POTY/state.json. State progression:
weAreWorking
- TODO: is there a
beforeR1
?? duringR1
beforeR2
duringR2
afterR2
end
(only when results are posted)
Code
local p = {}
local data = mw.loadJsonData('Module:POTY/state.json')
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local getLangCode = require('Module:IsTranslation')._getLangCode
-- Current POTY contest, will be the greatest year
function p.current()
local years = {}
for year, _ in pairs(data) do
table.insert(years, year)
end
return math.max(unpack(years))
end
-- Year current POTY contest is being held in, should be the current year
function p.contestyear()
return tonumber(p.current()) + 1
end
local function getYearDataProp(year, prop1, prop2)
year = tonumber(year)
if not year then
return error('no year')
end
local yearData = data[year]
if not yearData then
return error('no data for ' .. year)
end
if not prop1 then
return yearData
end
if not yearData[prop1] then
return error('no data for ' .. year .. ', ' .. prop1)
end
if not prop2 then
return yearData[prop1]
end
if not yearData[prop1][prop2] then
return error('no data for ' .. year .. ', ' .. prop1, ', ' .. prop2)
end
return yearData[prop1][prop2]
end
function p._time(args)
local what = args[2]
if what == 'r1start' or what == 'r1end' or what == 'r2start' or what == 'r2end' then
return getYearDataProp(args[1], what)
elseif what then
return error('improperly-formatted second parameter: ' .. what)
else
return error('no second parameter')
end
end
function p._formattedTime(args)
local isoArgs = {class = 'dtstart'}
isoArgs[1] = p._time({args[1], args[2] or 'r1start'})
if yesno(args['time']) or args.lang then
isoArgs[2] = args.lang
else
isoArgs[2] = getLangCode({mw.getCurrentFrame():callParserFunction('int', 'lang')})
end
return require('Module:ISOdate').ISOdate({args = isoArgs})
end
function p._state(args)
return getYearDataProp(args[1], 'state')
end
function p.state(frame)
return p._state(getArgs(frame))
end
function p.eligibilityLink(frame)
return getYearDataProp(getArgs(frame)[1], 'eligibility', 'link')
end
function p.eligibility(frame)
local args = getArgs(frame)
return getYearDataProp(args[1], 'eligibility', args[2])
end
function p.time(frame)
return p._time(getArgs(frame))
end
function p.formattedTime(frame)
return p._formattedTime(getArgs(frame))
end
return p