Module:Toolbar

From Zoophilia Wiki
Revision as of 15:47, 11 June 2013 by meta>Mr. Stradivarius (simplifying - the original was probably good practice for me, but this version is better code in the circumstances)
Jump to navigationJump to search

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

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
        local num = tostring(k):match('^([1-9]%d*)$')
        if num then table.insert(nums, tonumber(num)) 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 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