Module:Sandbox/Miria~01/sumMedals

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*|"

local trimmedRow = ""

-- 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

trimmedRow = row:match('.*class="' .. targetClass .. '"(.*)') -- Extract everything after the class attribute

-- Extract the value from the specified column

local i = 0

for value in mw.ustring.gmatch(trimmedRow, 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