Module:Br separated entries

From the Lolcow Wiki, a facts-oriented encyclopedia of eccentricity
Jump to: navigation, search
This module has been borrowed from Wikipedia. The source is available here.

local p = {}

local function _main( args )
    local sep = args['sep'];
    local lastsep
    local t = {}
    for i, v in ipairs( args ) do
        table.insert( t, v )
        if mw.ustring.match( v, '%S' ) then
            table.insert( t, sep )
            lastsep = #t
        end
    end
    if lastsep then
        table.remove( t, lastsep )
    end
    return table.concat( t )
end

function p.main( frame )
    local origArgs
    if frame == mw.getCurrentFrame() then
        -- We're being called via #invoke. If the invoking template passed any arguments,
        -- use them. Otherwise, use the arguments that were passed into the template.
        origArgs = frame:getParent().args
        for k, v in pairs( frame.args ) do
            origArgs = frame.args
            break
        end
    else
        -- We're being called from another module or from the debug console, so assume
        -- the arguments are passed in directly.
        origArgs = frame
    end

    -- Use integer args only, and allow for explicit positional arguments
    -- that are specified out of order, e.g. {{br separated entries|3=entry3}}.
    -- After processing, the args can be accessed accurately from ipairs.
    local args = {}
    for k, v in pairs( origArgs ) do
        if type( k ) == 'number' and k >= 1 and math.floor( k ) == k then
            table.insert( args, k )
        end
    end
    table.sort( args )
    for i,v in ipairs( args ) do
        args[ i ] = origArgs[ v ]
    end

    -- Allow for custom line separations.
    if origArgs['sep'] and origArgs['sep'] ~= '' then
        args['sep'] = origArgs['sep']
    else
        args['sep'] = '<br />';
    end

    return _main( args )
end

return p