Jump to content

Module:Sandbox/Miria~01

From Wikipedia, the free encyclopedia
local p = {}

function p.calculateSum(frame)
    local args = frame.args
    local targetClass = args[1] or '' -- Moved targetClass to the first argument
    local column = args[2]
    local wikitext = mw.title.new(args[3]):getContent()
    local sum = 0
    local sumGold = 0
    local sumSilver = 0
    local sumBronze = 0
    local sumTotal = 0

    -- Define a pattern to capture numbers enclosed in triple apostrophes or unformatted numbers
    local numPattern = "|%s*([%s']*%d+[%s']*)%s*|"

    -- Iterate through the rows of the table
    for row in mw.text.gsplit(wikitext, "\n") do
        -- Check if the row contains the specified class
        if mw.ustring.find(row, 'class="' .. targetClass .. '"') then
            -- Extract the value from the specified column
            local i = 0
             for value in mw.ustring.gmatch(row, numPattern) do
                i = i + 1
                if value then
                    -- Remove triple apostrophes, but treat as a string
                    local stringValue = value:gsub("['%s]", "")
                    if i == 1 then
                        sumGold = sumGold + tonumber(stringValue) end
                    if i == 2 then
                        sumSilver = sumSilver + tonumber(stringValue) end
                    if i == 3 then
                        sumBronze = sumBronze + tonumber(stringValue) end
                    if i == 4 then
                        sumTotal = sumTotal + tonumber(stringValue) end
                end
            end
        end
    end

    if column == "Gold" then return sumGold end
    if column == "Silver" then return sumSilver end
    if column == "Bronze" then return sumBronze end
    if column == "Total" then return sumTotal end
    if column == "All" then
        return tostring(sumGold) .. '||' .. tostring(sumSilver) .. '||' .. tostring(sumBronze) .. '||' .. tostring(sumTotal)
    end

    return tostring(sum)
end

return p