WARFRAME Wiki
Advertisement
WARFRAME Wiki


Lua error in Module:Docbunto at line 922: documentation markup for Docbunto not found in Module:Version.
Created with Docbunto

See Also

Code


--Writing a module out of Template:Ver to have error checking without using #ifexist
--It'll be more intuitive to use once done

local p = {}

local VersionData = mw.loadData( [[Module:Version/data]] )
local Shared = require( [[Module:Shared]] )

--Gets a version by name or by alias
--Case insensitive
function p.getVersion(name)
    if(name == nil) then return nil end
    
    for i, Version in pairs(VersionData["Versions"]) do
        if(string.upper(Version.Name) == string.upper(name) or string.upper(Version.ShortName) == string.upper(name)) then
            return Version, i
        elseif(Version.Aliases ~= nil and Shared.contains(Version.Aliases, name, true)) then
            return Version, i
        end
    end

    error("Version "..name.." not found (add to [[Module:Version/data]] if needed)")
end

function p.getVersionLink(frame)
    local name = frame.args ~= nil and frame.args[1] or frame
    local color = frame.args ~= nil and frame.args.color or nil
    local short = frame.args ~= nil and frame.args.short or "false"
    return p._getVersionLink(name, color, short)
end

function p._getVersionLink(name, color, short)
	local Version = p.getVersion(Shared.trim(name))
    local name = ''
    
    if short ~= nil and string.upper(short) == "TRUE" then
        name = Version.ShortName
    else
        name = Version.Name
    end
    
    if(Version == nil) then
        return "ERROR: No such version found"
    elseif color ~= nil then
        return "[["..Version.Link.."|<span style=\"color:"..color..";\">"..name.."</span>]]"
    else
        return "[["..Version.Link.."|"..name.."]]"
    end
end

function p.getVersionDate(name)
    local Version = p.getVersion(name)
    
    if(Version == nil) then
        return nil
    else
        return Version.Date
    end
end

local function getToCLine(parent) --create a line for table of contents
    local prevParent = nil
    local result = ""
    local LinkTemp ={}
    
    for j, Version in pairs(VersionData["Versions"]) do
        local bracket = "[["--reseting the brackets
        local bracket2 = "]]"
        
        if Version.Parent == parent then
            if prevParent == nil then --check if we've been here before
                if Version.ParentName ~= nil then
                    result = "'''"..Version.ParentName..":''' "
                else
                    result = "'''Update "..Version.Parent..":''' "
                end
            elseif prevParent ~= nil then --been here -> add spacer
                result = result.." • "
            end
            local shortname = string.upper(string.sub(Version.ShortName,1,1)) --getting the first letter
            if shortname == "U" or shortname == "V" then --bolding the link if Update or Vanilla
                bracket = "'''[["
                bracket2 = "]]'''"
            end
            LinkTemp = mw.text.split(Version.Link, "#", true)--since ToC is used on Update pages only, and only [[#"Header"|"Name"]] links work in edit mode -> split the link and use second part of it on the next line
            result = result..bracket.."#"..LinkTemp[2].."|"..Version.ShortName..bracket2
            prevParent = Version.Parent --for checking if been in this "if" yet
        elseif prevParent ~= nil then -- ->return result if parent switches. The data is ordered so there's no need to loop through the rest for nothing
            return result
        end
    end
    return result --required for the latest update as the previous return's "if" doesn't come up true as it reaches the end of the data
end

local function getToCAllParents(parent) --getting all Parent strings of a certain Update
                                    --Input: 0=Closed beta, 7=U7, 12=U12 etc
    local parents ={}
    local hash = {}
    local parentTemp = {}
    local result = ""
    for j, Version in pairs(VersionData["Versions"]) do
        if not hash[Version.Parent] then --if this Version.Parent isn't in table hash, then
            parentTemp = mw.text.split(Version.Parent, ".", true) --splitting the Parent to a temp table
            if parent == parentTemp[1] then --comparing the function input(parent) and the temp table's first string
                parents[#parents+1] = Version.Parent --if true, add the current V.Parent to table parents at position 1+current lenght
                hash[Version.Parent] = true --add V.Parent to table "hash" and assign value "true" to the V.Parent to prevent duplicate entries in table "parents"
            end
        end
    end
    return parents
end

local function UpdateTrim(str)
  return (str:gsub("^%a*%s(.-)$", "%1"))
end

function p.getToCLines(frame)
    local parent = frame.args ~= nil and frame.args[1] or frame
    local result = ""
    local parents = getToCAllParents(parent)
    for i,v in pairs(parents) do
        result = result..getToCLine(v)
        if i < #parents then
            result = result.."<br>"
        end
    end
    if result == "" then
        return "Not a valid version"
    end
    return result
end

function p.getAllVersions(frame)
    local result = ''
    for i, v in pairs(VersionData["Versions"]) do
        result = result..'\n* '..p.getVersionLink(v.Name)
    end
    return result
end

function p.lastVersion(frame)
    local color = frame.args["color"]
    local uCount = 0
    for b, update in pairs(VersionData["Versions"]) do
        uCount = uCount+1
    end
    local latestUpdate = VersionData["Versions"][uCount]
    if color ~= nil then
        return '[['..latestUpdate.Link..'|<span style="color:'..color..';">'..latestUpdate.Name..'</span>]]'
    else
        return '[['..latestUpdate.Link..'|'..latestUpdate.Name..']]'
    end
end


return p
Advertisement