Still landing on the old Fandom wiki? Install the HighSpell Wiki Redirector browser extension to automatically redirect all highspell.fandom.com links to highspell.wiki. Works on both Firefox and Chrome, and is open-source. → Learn more and install it now!

Module:RarityHandler: Difference between revisions

From HighSpell Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 13: Line 13:
function p.getSortValue(frame)
function p.getSortValue(frame)
     local rarity = clean(frame.args[1])
     local rarity = clean(frame.args[1])
     if not rarity then return 99 end
     if not rarity then return 999999999 end


     local lowered = string.lower(rarity)
     local lowered = string.lower(rarity)
Line 19: Line 19:
     if lowered == "1" or lowered == "always" then
     if lowered == "1" or lowered == "always" then
         return 1
         return 1
    elseif lowered:match("^1/%d+%.?%d*$") then
        return 2
     elseif lowered == "rare" then
     elseif lowered == "rare" then
         return 3
         return 999999998
     elseif lowered == "never" then
     elseif lowered == "never" then
         return 4
         return 0
    else
        return 99
     end
     end
    -- Match "1/number" including decimals
    local chance = lowered:match("^1/(%d+%.?%d*)$")
    if chance then
        return tonumber(chance) or 999999999
    end
    -- fallback
    return 999999999
end
end



Revision as of 18:25, 15 May 2025

Documentation for this module may be created at Module:RarityHandler/doc

local p = {}

-- Clean: trim and strip leading ~
local function clean(rarity)
    if not rarity or type(rarity) ~= "string" then return nil end
    rarity = mw.text.trim(rarity)
    if rarity:sub(1, 1) == "~" then
        rarity = rarity:sub(2)
    end
    return rarity
end

function p.getSortValue(frame)
    local rarity = clean(frame.args[1])
    if not rarity then return 999999999 end

    local lowered = string.lower(rarity)

    if lowered == "1" or lowered == "always" then
        return 1
    elseif lowered == "rare" then
        return 999999998
    elseif lowered == "never" then
        return 0
    end

    -- Match "1/number" including decimals
    local chance = lowered:match("^1/(%d+%.?%d*)$")
    if chance then
        return tonumber(chance) or 999999999
    end

    -- fallback
    return 999999999
end

-- For class logic: cleaned string, lowercase
function p.getCleanValue(frame)
    local rarity = clean(frame.args[1])
    if not rarity then return "Unknown" end

    if rarity == "1" then
        return "Always"
    end

    return rarity
end

-- For display
function p.normalizeDisplay(frame)
    local original = frame.args[1]
    if not original or type(original) ~= "string" then return "Unknown" end

    local trimmed = mw.text.trim(original)
    local hasTilde = trimmed:sub(1, 1) == "~"
    local cleaned = hasTilde and trimmed:sub(2) or trimmed

    if cleaned == "1" then
        return "Always"
    end

    return hasTilde and ("~" .. cleaned) or cleaned
end

return p