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
Advertisement

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
    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[2] and v[2] < curDate and v[2] > prevDate then
                prevDate = v[2]
                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[2] and v[2] > curDate and v[2] < nextDate then
                nextDate = v[2]
                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[3] and updateNo == v[3] 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][3]
        
        if upNo and upNo == 0 then
            versionText = versionData[versionNo][1]
        else
            versionText = versionData[versionNo][1] .. " 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][2])
    end

    return versionText
end

-- return a list of versions for year
function multiVersion(year)
    return "List of versions for " .. year    
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]]
Advertisement