Disney Magic Kingdoms Wiki

The Sword in the Stone Part 3 Update has arrived! ✨
Visit this page to learn all about what's coming up in Disney Magic Kingdoms!

READ MORE

Disney Magic Kingdoms Wiki
No edit summary
No edit summary
Line 10: Line 10:
 
"T" = infobox title (version number) text only
 
"T" = infobox title (version number) text only
 
"V" = infobox version (version + name) text only
 
"V" = infobox version (version + name) text only
  +
"R" = release number
 
2. include event date after name
 
2. include event date after name
 
3. text only (no link)
 
3. text only (no link)
Line 30: Line 31:
 
if curDate then
 
if curDate then
 
for k, v in pairs(versionData) do
 
for k, v in pairs(versionData) do
if v[2] and v[2] < curDate and v[2] > prevDate then
+
if v[3] and v[3] < curDate and v[3] > prevDate then
prevDate = v[2]
+
prevDate = v[3]
 
prevVer = k
 
prevVer = k
 
end
 
end
Line 52: Line 53:
 
if curDate then
 
if curDate then
 
for k, v in pairs(versionData) do
 
for k, v in pairs(versionData) do
if v[2] and v[2] > curDate and v[2] < nextDate then
+
if v[3] and v[3] > curDate and v[3] < nextDate then
nextDate = v[2]
+
nextDate = v[3]
 
nextVer = k
 
nextVer = k
 
end
 
end
Line 105: Line 106:
 
if updateNo then
 
if updateNo then
 
for k, v in pairs(versionData) do
 
for k, v in pairs(versionData) do
if v[3] and updateNo == v[3] then
+
if v[4] and updateNo == v[4] then
 
versionNo = k
 
versionNo = k
 
break
 
break
Line 134: Line 135:
 
txtOnly = true
 
txtOnly = true
 
else
 
else
local upNo = versionData[versionNo][3]
+
local upNo = versionData[versionNo][4]
 
 
 
if upNo and upNo == 0 then
 
if upNo and upNo == 0 then
versionText = versionData[versionNo][1]
+
versionText = versionData[versionNo][2]
 
else
 
else
versionText = versionData[versionNo][1] .. " Update"
+
versionText = versionData[versionNo][2] .. " Update"
 
end
 
end
   
Line 155: Line 156:
 
if inclDate then
 
if inclDate then
 
versionText = versionText .. " on "
 
versionText = versionText .. " on "
.. strDate(versionData[versionNo][2])
+
.. strDate(versionData[versionNo][3])
 
end
 
end
   
Line 163: Line 164:
 
-- return a list of versions for year
 
-- return a list of versions for year
 
function multiVersion(year)
 
function multiVersion(year)
  +
local tIndex = {}
return "List of versions for " .. year
 
  +
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
 
end
   

Revision as of 07:21, 11 July 2020

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][2]
    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][2]
    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]]