Description
This module is the Lua back-end for {{UpdateNo}}, to display information about game Updates.
Usage
{{#invoke:UpdateNumber|getVersion|<parameter list>}}
For parameter details see Template:UpdateNo/doc
For direct invocation or from other modules
{{#invoke:UpdateNumber|getLastVer|<count>}}
{{#invoke:UpdateNumber|getVars|<item name>}}
--[[<nowiki>
Get Update Name for version
getVersion
Parameters
1. version number
If blank or one of the options below,
the current page name is used
"P" = previous update
"N" = next update
"T" = infobox title (version number) text only
"V" = infobox version (version + name) text only
"R" = release number
2. include event date after name
3. text only (no link)
--]]
local p = {}
local versionData = mw.loadData( 'Module:UpdateNumber/data' )
local function prevUpdate(curVersion)
local curDate = nil
if versionData[curVersion] then
curDate = versionData[curVersion][3]
end
local prevDate = 0
local prevVer = ""
if curDate then
for k, v in pairs(versionData) do
if v[3] and v[3] < curDate and v[3] > prevDate then
prevDate = v[3]
prevVer = k
end
end
end
return prevVer
end
local function nextUpdate(curVersion)
local curDate = nil
if versionData[curVersion] then
curDate = versionData[curVersion][3]
end
local nextDate = 99999999
local nextVer = ""
if curDate then
for k, v in pairs(versionData) do
if v[3] and v[3] > curDate and v[3] < nextDate then
nextDate = v[3]
nextVer = k
end
end
end
return nextVer
end
local function strDate(numDate)
local months = {"January ", "February ", "March ",
"April ", "May ", "June ",
"July ", "August ", "September ",
"October ", "November ", "December "}
local day = math.min(math.fmod(numDate, 100), 31)
local idd = math.fmod(day, 10)
local nth = (idd==1 and day~=11 and "st ")
or (idd==2 and day~=12 and "nd ")
or (idd==3 and day~=13 and "rd ")
or "th "
local year = math.floor(numDate / 100)
local mon = math.min(math.fmod(year, 100), 12)
year = math.floor(year/100)
return (day .. nth .. months[mon] .. year)
end
-- return informatin for a single version/update
function oneVersion(versionNo, inclDate, txtOnly)
local outType = ""
if versionNo:match("^[NPTV]$") then
outType = versionNo
versionNo = ""
end
if versionNo == "" then
local pageName = mw.title.getCurrentTitle().text
if versionData[pageName] then
versionNo = pageName
else
local updateNo = tonumber(pageName:match("^Update (%d+)"))
if updateNo then
for k, v in pairs(versionData) do
if v[4] and updateNo == v[4] then
versionNo = k
break
end
end
end
end
end
if not versionData[versionNo] then
return "[[Work In Progress|Unknown Version]]"
end
if outType == "P" then
-- output previous version
versionNo = prevUpdate(versionNo)
if versionNo == "" then return "Unknown" end
elseif outType == "N" then
-- output next version
versionNo = nextUpdate(versionNo)
if versionNo == "" then return "--" end
end
local versionText = ""
if outType == "T" then
versionText = versionNo
txtOnly = true
else
local upNo = versionData[versionNo][4]
if upNo and upNo == 0 then
versionText = versionData[versionNo][2]
else
versionText = versionData[versionNo][2] .. " Update"
end
if outType == "V" then
versionText = versionNo .. "<br />("
.. versionText .. ")"
txtOnly = true
end
end
if not txtOnly then
versionText = "[[" .. versionNo .. "|" .. versionText .. "]]"
end
if inclDate then
versionText = versionText .. " on "
.. strDate(versionData[versionNo][3])
end
return versionText
end
-- return a list of versions for year
function multiVersion(year)
local tIndex = {}
local tOutput = {}
--[=[ if year and year ~= 0 then
for k, v in pairs(versionData) do
if year == v[4] then
table.insert(tIndex,v[4])
tOutput[v[4]] = v
end
end
else
for k, v in pairs(versionData) do
table.insert(tIndex,v[4])
tOutput[v[4]] = v
end
end
table.sort(tIndex)
local outText = ""
local sDot = ""
for _, idx in ipairs(tIndex) do
if eType == "T" then
outText = outText .. sDot
.. "[[The Tower Challenge ("
.. tOutput[idx][3]
.. ") Event "
.. tOutput[idx][4]
else
outText = outText .. sDot
.. "[["
.. tOutput[idx][3]
.. " Event "
.. tOutput[idx][4]
end
if outType == "S" then
outText = outText .. "|" .. tOutput[idx][2]
elseif outType == "C" then
if tOutput[idx][5] then
outText = outText .. "|" .. tOutput[idx][5]
else
outText = outText .. "|" .. tOutput[idx][2]
end
end
outText = outText .. "]]"
sDot = " '''·''' "
end
return outText
--]=]
end
-- function get Version Name
function p.getVersion(frame)
local tArgs
if frame == mw.getCurrentFrame() then
fParent = frame:getParent()
tArgs = fParent.args
if (fParent.args[1]) then
tArgs = fParent.args
else
tArgs = frame.args
end
else
tArgs = frame
end
local versionNo = tArgs[1] or ""
local inclDate = (tArgs[2] and tArgs[2] ~= "")
local txtOnly = (tArgs[3] and tArgs[3] ~= "")
local multi, year = versionNo:match("^(multi)(%d*)$")
if multi then
return multiVersion(tonumber(year))
else
return oneVersion(versionNo, inclDate, txtOnly)
end
end
return p
-- </nowiki>
-- [[Category:Lua Modules]]