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
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
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)
function p.getSortValue(frame)
     local rarity = frame.args[1]
     local rarityRaw = frame.args[1]
    local rarity, _ = clean(rarityRaw)
    if not rarity then return 999999999 end
 
    local lowered = rarity:lower()


     if rarity == nil or type(rarity) ~= "string" then
     if lowered == "1" or lowered == "always" then
         return 99
        return 1
    elseif lowered == "rare" then
        return 999999
    elseif lowered == "never" then
         return 0
     end
     end


     -- Remove leading ~ if present
     -- Match 1/X and round down (floor)
--    rarity = mw.text.trim(rarity)
    local numStr = lowered:match("^1/(%d+%.?%d*)$")
--    if rarity:sub(1, 1) == "~" then
    if numStr then
--        rarity = rarity:sub(2)
        local num = tonumber(numStr)
--    end
        if num then
            return math.floor(num)
        end
    end


     local lowered = string.lower(rarity)
     return 999999999
end


    -- Normalize aliases
-- Normalize display text
     if lowered == "1" then
function p.normalizeDisplay(frame)
         lowered = "always"
    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
     end


     -- Final sort logic
     return hasTilde and ("~" .. raw) or raw
    if lowered == "always" then
        return 1
    elseif lowered:match("^1/%d+$") then
        return 2
    elseif lowered == "rare" then
        return 3
    elseif lowered == "never" then
        return 4
    else
        return 99
    end
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