Jump to content

Module:ExplodeAndList

Di Wikipedia, e ensiklopedia liber

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

-- Module:ExplodeAndList
-- This module takes two parameters, a list of, for example, titles and a list of, for example, names separated by '<br />' tags,
-- and formats them into a list with each title and name pair displayed on separate lines.
--
-- Usage:
-- {{#invoke:ExplodeAndList|explodeAndList|<list1>|<list2>}}
--
-- Parameters:
-- 1. <list1>: A string containing, for example, titles separated by '<br />' tags.
-- 2. <list2>: A string containing, for example, names separated by '<br />' tags.
--
-- Example:
-- {{#invoke:ExplodeAndList|explodeAndList|
--  | King<br />Governor<br />Prime minister]]
--  | Willem-Alexander<br />Lucille George-Wout<br />Gilmar Pisas
-- }}
--
-- Output:
-- - King&nbsp;Willem-Alexander<br />
-- - Governor&nbsp;Lucille George-Wout<br />
-- - Prime minister&nbsp;Gilmar Pisas
--
-- This module is typically used in templates to format lists of titles and names.
local p = {}

function p.explodeAndList(frame)
    local titulonan = frame.args[1] or ""
    local nombernan = frame.args[2] or ""

    -- Split the inputs by the <br /> tag
    local titulonan_list = mw.text.split(titulonan, '<br />')
    local nombernan_list = mw.text.split(nombernan, '<br />')

    -- Function to trim whitespace from a string
    local function trim(s)
        return s:gsub("^%s*(.-)%s*$", "%1")
    end
    
    -- Filter out empty entries at the beginning
    while titulonan_list[1] == "" do
        table.remove(titulonan_list, 1)
    end
    while nombernan_list[1] == "" do
        table.remove(nombernan_list, 1)
    end

    -- Initialize the result table
    local result = {}

    -- Ensure the lists are of equal length
    local max_length = math.max(#titulonan_list, #nombernan_list)
    
    -- Iterate through each pair of titles and names
    for i = 1, max_length do
        local title = trim(titulonan_list[i] or "")    -- Trim title or use empty string if nil
        local name = trim(nombernan_list[i] or "")     -- Trim name or use empty string if nil

        -- Append the combined title and name to the result with &nbsp; between them
        table.insert(result, title .. '&nbsp;' .. name)
    end

    -- Concatenate the result into a single string separated by <br /> tags
    return table.concat(result, '<br />')
end

return p