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 12: Line 12:


function p.getSortValue(frame)
function p.getSortValue(frame)
     local rarity = clean(frame.args[1])
     local raw = frame.args[1]
     if not rarity then return 999999999 end
     if not raw or type(raw) ~= "string" then return 999999999 end


     local lowered = string.lower(rarity)
    local trimmed = mw.text.trim(raw)
    if trimmed:sub(1, 1) == "~" then
        trimmed = trimmed:sub(2)
    end
 
     local lowered = string.lower(trimmed)


     if lowered == "1" or lowered == "always" then
     if lowered == "1" or lowered == "always" then
Line 25: Line 30:
     end
     end


    -- Match "1/number" including decimals
     local chance = lowered:match("^1/(%d+%.?%d*)$")
     local chance = lowered:match("^1/(%d+%.?%d*)$")
     if chance then
     if chance then
Line 31: Line 35:
     end
     end


    -- fallback
     return 999999999
     return 999999999
end
end

Revision as of 18:27, 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 raw = frame.args[1]
    if not raw or type(raw) ~= "string" then return 999999999 end

    local trimmed = mw.text.trim(raw)
    if trimmed:sub(1, 1) == "~" then
        trimmed = trimmed:sub(2)
    end

    local lowered = string.lower(trimmed)

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

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

    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