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:RaritySort: Difference between revisions

From HighSpell Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}


function p.getSortValue(rarity)
-- Clean and extract processing info
     if type(rarity) ~= "string" then
local function clean(rarity)
         return 99 -- Default fallback for nil or non-string
     if not rarity or type(rarity) ~= "string" then return nil, false end
    rarity = mw.text.trim(rarity)
    local hasTilde = rarity:sub(1, 1) == "~"
    if hasTilde then
         rarity = rarity:sub(2)
     end
     end
    -- Strip commas (e.g. "1/10,000" → "1/10000")
    rarity = rarity:gsub(",", "")
    return rarity, hasTilde
end


     local r = rarity:lower()
-- RaritySort for sorting
function p.getSortValue(frame)
     local rarityRaw = frame.args[1]
    local rarity, _ = clean(rarityRaw)
    if not rarity then return 999999999 end


     if r == "always" then
    local lowered = rarity:lower()
 
     if lowered == "1" or lowered == "always" then
         return 1
         return 1
     elseif r:match("^1/%d+") then
     elseif lowered == "rare" then
        return 2
         return 999999
    elseif r == "rare" then
     elseif lowered == "never" then
         return 3
         return 0
     elseif r == "never" then
         return 4
    else
        return 99 -- Unknown or fallback
     end
     end
    -- Match 1/X and round down (floor)
    local numStr = lowered:match("^1/(%d+%.?%d*)$")
    if numStr then
        local num = tonumber(numStr)
        if num then
            return math.floor(num)
        end
    end
    return 999999999
end
-- Normalize display text
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 raw = hasTilde and trimmed:sub(2) or trimmed
    if raw == "1" then
        return "Always"
    end
    return hasTilde and ("~" .. raw) or raw
end
end


return p
return p

Latest revision as of 21:22, 18 May 2025

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

local p = {}

-- Clean and extract processing info
local function clean(rarity)
    if not rarity or type(rarity) ~= "string" then return nil, false end
    rarity = mw.text.trim(rarity)
    local hasTilde = rarity:sub(1, 1) == "~"
    if hasTilde then
        rarity = rarity:sub(2)
    end
    -- Strip commas (e.g. "1/10,000" → "1/10000")
    rarity = rarity:gsub(",", "")
    return rarity, hasTilde
end

-- RaritySort for sorting
function p.getSortValue(frame)
    local rarityRaw = frame.args[1]
    local rarity, _ = clean(rarityRaw)
    if not rarity then return 999999999 end

    local lowered = rarity:lower()

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

    -- Match 1/X and round down (floor)
    local numStr = lowered:match("^1/(%d+%.?%d*)$")
    if numStr then
        local num = tonumber(numStr)
        if num then
            return math.floor(num)
        end
    end

    return 999999999
end

-- Normalize display text
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 raw = hasTilde and trimmed:sub(2) or trimmed

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

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

return p