tibia

This module was built to support the {{AbilityList}} template.


local abilityListModule = {}

-- remove leading/trailing whitespace, ignore empty or newline-only values
local function cleanValue(value)
    if not value then return nil end

    value = mw.text.trim(value)

    if value == "" then
        return nil
    end

    return value
end

local function collectAbilityEntries(argumentTable)
    local abilityEntries = {}

    for index = 1, 50 do
        local cleanedValue = cleanValue(argumentTable[index])

        if cleanedValue then
            table.insert(abilityEntries, cleanedValue)
        end
    end

    return abilityEntries
end

-- Builds the separator exactly like the original {{AbilityList}} template
local function buildSeparatorString(isDesktop)
    if isDesktop then
        return "⁠, "
    else
        return ""
    end
end

local function renderAbilityList(abilityEntries, separatorString)
    if #abilityEntries > 0 then
        return table.concat(abilityEntries, separatorString)
    else
        return "Unknown."
    end
end

local function wrapWithDiv(renderedContent)
    return '<div class="ability_list">' .. renderedContent .. '</div>'
end

function abilityListModule.render(frame)
    local abilityEntries = collectAbilityEntries(frame:getParent().args)
    local isDesktop = frame.args.isDesktop and mw.text.trim(frame.args.isDesktop) ~= ""
    local separatorString = buildSeparatorString(isDesktop)

    local renderedList = renderAbilityList(abilityEntries, separatorString)
    return wrapWithDiv(renderedList)
end

return abilityListModule