Difference between revisions of "Module:Toolbar"

From blackwiki
Jump to navigation Jump to search
blackwiki>Mr. Stradivarius
m (Protected Module:Toolbar: High-risk Lua module ([Edit=Block all non-admin users] (indefinite) [Move=Block all non-admin users] (indefinite)))
blackwiki>Mr. Stradivarius
(simplifying - the original was probably good practice for me, but this version is better code in the circumstances)
Line 1: Line 1:
 
local p = {}
 
local p = {}
 
local args = {}
 
local args = {}
 
-- Create concatenator object.
 
local Concatenator = {result = ''}
 
 
function Concatenator:new()
 
    local o = {}
 
    setmetatable(o, self)
 
    self.__index = self
 
    return o
 
end
 
 
function Concatenator:add(s)
 
    if type(s) ~= 'string' then
 
        error('Attempt to concatenate non-string value', 2)
 
    end
 
    self.result = self.result .. s
 
end
 
  
 
-- Get the keys of the numerical arguments that are present.
 
-- Get the keys of the numerical arguments that are present.
Line 38: Line 21:
 
      
 
      
 
     -- Generate the toolbar items.
 
     -- Generate the toolbar items.
     local ti = Concatenator:new()
+
     local ret = ''
 
     for i, v in ipairs(nums) do
 
     for i, v in ipairs(nums) do
         ti:add(args[v])
+
         ret = ret .. args[v]
 
         if nums[i + 1] then
 
         if nums[i + 1] then
             ti:add(sep)
+
             ret = ret .. sep
 
         end
 
         end
 
     end
 
     end
     return ti.result
+
     return ret
 
end
 
end
  
Line 51: Line 34:
 
     local class = args.class or ''
 
     local class = args.class or ''
 
     local style = (args.style and ('style="' .. args.style .. '"')) or ''
 
     local style = (args.style and ('style="' .. args.style .. '"')) or ''
    local t = Concatenator:new()
 
   
 
    -- Generate opening span tag.
 
    t:add('<span class="plainlinks ')
 
    t:add(class)
 
    t:add('" ')
 
    t:add(style)
 
    t:add('>')
 
   
 
    -- Generate toolbar items.
 
    t:add('(')
 
    t:add(makeToolbarItems())
 
    t:add(')')
 
 
      
 
      
     -- Generate closing span tag.
+
     local ret = '<span class="plainlinks ' .. class .. '" ' .. style .. '>'
    t:add('</span>')
+
        .. '(' .. makeToolbarItems() .. ')'
 +
        .. '</span>'
 
      
 
      
     return t.result
+
     return ret
 
end
 
end
  

Revision as of 15:47, 11 June 2013

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

See also


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