FANDOM


--[[<nowiki>
LUA script to get Limited Time Event information
 
getLTE:
    get Limited Time Event based on input parameters
    Parameters:
        1 = short name : Event / IP short name
            for multiple set to "MULTIyyyy"
            where yyyy (optional) is the year
            will list all events for type for year
            in order specified by sequence no in data
        2 = type       : event type
                    N = normal limited time event (default)
                    T = Tower Challenge
        3 = output     : output type
                    N = Full Event Name (default)
                    S = Short Name Only
                    E = Event Name without year
                    D = Event Name with start date
                    C = Collection Name (=S if no Collection Name)
                    A = Alternate Text (parameter 4)
                    T = Text only Event Name without year
        4 = alt text   : alternate text
 
    Unknown Event is returned if Event is not in data.
 
getNavi:
    get Previous and Next event from current Event Page
    Parameter:
        none
--]]
 
local p = {}
 
local lteData = mw.loadData( 'Module:LTEvent/data' )
 
---- Local Functions
local function getArgs(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
    return tArgs
end
 
local function strDate(mon_day)
    local months = {"January", "February", "March",
                    "April", "May", "June",
                    "July", "August", "September",
                    "October", "November", "December"}
 
    local mon = months[math.floor(mon_day/100)]
    local day = math.fmod(mon_day, 100)
    local idd = math.fmod(mon_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 "
    return (day .. nth .. mon)
end
 
local function singleEvent(sName, eType, outType, altText)
    local eventName  = "Work In Progress"
    local collection = "Unknown Event"
    local eventYear  = nil
 
    local outText  = eventName
    local dispText = ""
    local dateText = ""
 
    if lteData[eType] and lteData[eType][sName] then
        eventName  = lteData[eType][sName][2]
        eventYear  = lteData[eType][sName][3]
        eventDate  = lteData[eType][sName][4]
        collection = lteData[eType][sName][5] or lteData[eType][sName][2]
 
        if eType == "T" then
            outText = "The Tower Challenge ("
                        .. eventName
                        .. ") Event"
        else
            outText = eventName .. " Event"
        end
    end
 
    if outType:match("^[ACSED]$") then
        if outType == "A" then
            dispText = altText
        elseif outType == "C" then
            dispText = collection
        elseif outType == "S" then
            dispText = eventName
        elseif outType == "E" then
            if eType == "N" then
                dispText = eventName .. " Event"
            else
                dispText = "The Tower Challenge Event"
            end
        elseif outType == "D" then
            if altText ~= "" then
                dispText = altText
            elseif eType == "N" then
                dispText = eventName .. " Event"
            else
                dispText = eventName .. "'s Tower Challenge Event"
            end
            dateText = " on " .. strDate(eventDate) .. " " .. eventYear
        end
    end
 
    if outType ~= "T" then
        if eventYear then
            outText = outText .. " " .. eventYear
        end
        if dispText and dispText ~="" then
            outText = outText .. "|" .. dispText
        end
 
        outText = "[[" .. outText .. "]]"
 
        if dateText and dateText ~="" then
            outText = outText .. dateText
        end
    end
 
    return outText
end
 
local function multiEvent(eType, outType, year)
    local tIndex  = {}
    local tOutput = {}
 
    if lteData[eType] then
        if year and year ~= 0  then
            for k, v in pairs(lteData[eType]) do
                if year == v[3] then
                    table.insert(tIndex,v[1])
                    tOutput[v[1]] = v
                end
            end
        else
            for k, v in pairs(lteData[eType]) do
                table.insert(tIndex,v[1])
                tOutput[v[1]] = v
            end
        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][2]
                        .. ") Event "
                        .. tOutput[idx][3]
        else
            outText = outText .. sDot 
                        .. "[["
                        .. tOutput[idx][2]
                        .. " Event "
                        .. tOutput[idx][3]
        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 Limited Time Event
function p.getLTE(frame)
 
    local tArgs = getArgs(frame)
 
    local sName    = tArgs[1] or ""
    local eType    = tArgs[2]
    local outType  = tArgs[3] or "N"
    local altText  = tArgs[4] or ""
 
    sName = sName:lower():gsub("^%s*(.-)%s*$", "%1") or ''
 
    if not eType or eType == "" then eType = "N" end
 
    eType = eType:upper()
    outType = outType:upper()
 
    local multi, year = sName:match("^(multi)(%d*)$")
 
    if multi then
        return multiEvent(eType, outType, tonumber(year))
    else
        return singleEvent(sName, eType, outType, altText)
    end
end
 
-- function get previous, next navigation links
function p.getNavi(frame)
    local tArgs = getArgs(frame)
 
    --local curName = tArgs[1] or mw.title.getCurrentTitle().text
    local curName = mw.title.getCurrentTitle().text
 
    local eType = "N"
    local eName = ""
    local eYear = ""
 
    if curName:match("^The Tower Challenge %(.+%) Event %d%d%d%d$") then
        eName, eYear = curName:match("^The Tower Challenge %((.+)%) Event (%d+)$")
        eType = "T"
    elseif curName:match("^.+ Event %d%d%d%d$") then
        eName, eYear = curName:match("^(.+) Event (%d+)$")
        eType = "N"
    end
 
    eYear = tonumber(eYear)
 
    local curDate = 0
 
    if lteData[eType] then
        for k, v in pairs(lteData[eType]) do
            if eYear == v[3] and eName == v[2] then
                curDate = (v[3] * 10000) + v[4]
                break
            end
        end
    end
 
    local prevDate = 0
    local prevEvent = ""
    local prevType = ""
    local nextDate = 99999999
    local nextEvent = ""
    local nextType = ""
 
    if curDate ~= 0 then
        for k, v in pairs(lteData["N"]) do
            local xDate = (v[3] * 10000) + v[4]
            if xDate < curDate and xDate > prevDate then
                prevDate = xDate
                prevEvent = v
                prevType = "N"
            end
            if xDate > curDate and xDate < nextDate then
                nextDate = xDate
                nextEvent = v
                nextType = "N"
            end
        end
        for k, v in pairs(lteData["T"]) do
            local xDate = (v[3] * 10000) + v[4]
            if xDate < curDate and xDate > prevDate then
                prevDate = xDate
                prevEvent = v
                prevType = "T"
            end
            if xDate > curDate and xDate < nextDate then
                nextDate = xDate
                nextEvent = v
                nextType = "T"
            end
        end
    end
 
    local prevName = "Main Storyline Walkthrough"
    local nextName = ""
 
    if prevDate ~= 0 then
        if prevType == "T" then
            prevName = "The Tower Challenge ("
                        .. prevEvent[2]
                        .. ") Event "
                        .. prevEvent[3]
                        .. "|Tower Challenge ("
                        .. prevEvent[2]
                        .. ")"
        else
            prevName = prevEvent[2]
                        .. " Event "
                        .. prevEvent[3]
        end
    end
    if nextDate ~= 99999999 then
        if nextType == "T" then
            nextName = "The Tower Challenge ("
                        .. nextEvent[2]
                        .. ") Event "
                        .. nextEvent[3]
                        .. "|Tower Challenge ("
                        .. nextEvent[2]
                        .. ")"
        else
            nextName = nextEvent[2]
                        .. " Event "
                        .. nextEvent[3]
        end
        nextName = "'''''[[" .. nextName .. "]] »'''''"
    end
 
    return "{| class=\"article-table\" style=\"width: 100%;\""
            .. "\n| nowrap width=\"50%\"|'''''« [["
            .. prevName
            .. "]]'''''\n| nowrap align=\"right\"|"
            .. nextName
            .. "\n|}"
end
 
return p
 
-- </nowiki>
-- [[Category:Lua Modules]]
Community content is available under CC-BY-SA unless otherwise noted.