Модуль:Comma separated entries

 
Дакумэнтацыя модулю Дакумэнтацыя модулю[прагляд] [рэдагаваць] [гісторыя] [абнавіць]
local p = {}

local function _main( args )
    local sep = mw.message.new( 'comma-separator' ):plain()
    return table.concat( args, sep )
end

function p.main( frame )
    local origArgs
    if frame == mw.getCurrentFrame() then
        -- Выклік адбываецца праз #invoke. Калі пры выкліку былі перададзеныя аргумэнты,
        -- бярэм іх. Інакш выкарыстоўваем аргумэнты з шаблёну.
        origArgs = frame:getParent().args
        for k, v in pairs( frame.args ) do
            origArgs = frame.args
            break
        end
    else        
        -- Выклік адбываецца зь іншага модулю ці кансолі адладаваньня,
        -- таму падразумяваем, што аргумэнты перадаюцца наўпрост.
        origArgs = frame
    end
    
    -- Выкарыстоўваюцца толькі цэлалікавыя аргумэнты, таксама дазволеныя яўныя
    -- пазыцыйныя аргумэнты, апісаныя не па парадку, напр. {{Сьпіс з br|3=элемэнт3}}.
    -- Пасьля апрацоўкі аргумэнты могуць быць дасяжныя праз ipairs.
    local args = {}
    for k, v in pairs( origArgs ) do
        if type( k ) == 'number' 
            and k >= 1 
            and math.floor( k ) == k
            and mw.ustring.match( v, '%S' ) -- Выдаленьне пустых значэньняў і пропустаў.
            then
            table.insert( args, k )
        end
    end
    table.sort( args )
    for i,v in ipairs( args ) do
        args[ i ] = origArgs[ v ]
        -- Trim whitespace from all args.
        if type( args[ i ] ) == 'string' then
            args[ i ] = mw.text.trim( args[ i ] )
        end
    end
 
    return _main( args )
end

return p