Jump to content

Module:ListComponents

From Drifters Almanac
Revision as of 18:21, 23 April 2025 by Mildew (talk | contribs) (Protected "Module:ListComponents" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)))

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

local p = {}

function p.fromDelimited(frame)
    local raw = frame.args[1] or ""
    local delimiter = frame.args.delimiter or ","
    local combinations = mw.text.split(raw, delimiter)
    local output = {}

    table.insert(output, '\n<ul style="margin-left: 1em;">')
    for _, combo in ipairs(combinations) do
        combo = mw.text.trim(combo)
        if combo ~= "" then
            local parts = mw.text.split(combo, "+")
            local linked_parts = {}
            for _, part in ipairs(parts) do
                local trimmed = mw.text.trim(part)
                local subparts = mw.text.split(trimmed, "::")
                local target = mw.text.trim(subparts[1])
                local label = subparts[2] and mw.text.trim(subparts[2]) or target
                table.insert(linked_parts, string.format("[[%s|%s]]", target, label))
            end
            table.insert(output, string.format("<li>%s</li>", table.concat(linked_parts, " + ")))
        end
    end
    table.insert(output, '</ul>\n')

    return table.concat(output, "\n")
end

return p