モジュール:Toolbar

提供: ひつじ小屋別館2代目
2013年9月3日 (火) 02:57時点におけるしが (トーク | 投稿記録)による版 (1版)

移動先: 案内検索

This module implements {{toolbar}}. Please see the template page for documentation.


local p = {}
local args = {}

-- Get the keys of the numerical arguments that are present.
local function getArgNums()
    local nums = {}
    for k, v in pairs(args) do
        if type(k) == 'number' then
            table.insert(nums, k)
        end
    end
    table.sort(nums)
    return nums
end

local function makeToolbarItems()
    -- Get numerical argument keys.
    local nums = getArgNums()
    -- Get the separator text.
    local sep = (args.separator or 'pipe') .. '-separator'
    sep = mw.message.new(sep):plain()
    
    -- Generate the toolbar items.
    local ret = ''
    for i, v in ipairs(nums) do
        ret = ret .. args[v]
        if nums[i + 1] then
            ret = ret .. sep
        end
    end
    return ret
end

local function makeToolbar()
    local class = (args.class and (' ' .. args.class))  or ''
    local style = (args.style and (' style="' .. args.style .. '"')) or ''
    
    local ret = '<span class="plainlinks' .. class .. '"' .. style .. '>'
        .. '(' .. makeToolbarItems() .. ')'
        .. '</span>'
    
    return ret
end

function p.main(frame)
    -- If called via #invoke, use the args passed into the invoking template.
    -- Otherwise, for testing purposes, assume args are being passed directly in.
    local origArgs
    if frame == mw.getCurrentFrame() then
        origArgs = frame:getParent().args
    else
        origArgs = frame
    end
    
    -- Strip whitespace and remove nil values
    for k, v in pairs(origArgs) do
        v = mw.text.trim(v)
        if v ~= '' then
            args[k] = v
        end
    end
    
    return makeToolbar()
end
 
return p