Module:POTY/state

From Wikimedia Commons, the free media repository
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