Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

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

local p = {}

function p.main(frame)
    local args = frame:getParent().args or {}
    return p._joinLinks(args)
end

function p._joinLinks(args)
    local links = {}
    local labels = {}
    local maxIndex = 0
    
    for key, value in pairs(args) do
        if type(key) == 'number' or tonumber(key) then
            local index = tonumber(key)
            if index > maxIndex then maxIndex = index end
            if value and value ~= '' then
                links[index] = value
            end
        elseif type(key) == 'string' then
            local labelIndex = key:match('^label(%d+)$')
            if labelIndex then
                labelIndex = tonumber(labelIndex)
                if labelIndex and value and value ~= '' then
                    labels[labelIndex] = value
                end
            end
        end
    end
    
    local linkList = {}
    for i = 1, maxIndex do
        if links[i] then
            if labels[i] then
                table.insert(linkList, '[[' .. links[i] .. '|' .. labels[i] .. ']]')
            else
                table.insert(linkList, '[[' .. links[i] .. ']]')
            end
        end
    end
    
    return p._joinList(linkList)
end

function p._joinList(list)
    local count = #list
    
    if count == 0 then
        return ""
    elseif count == 1 then
        return list[1]
    elseif count == 2 then
        return list[1] .. " and " .. list[2]
    else
        local firstPart = table.concat(list, ", ", 1, count - 1)
        return firstPart .. " and " .. list[count]
    end
end

return p