Module:Toolbar: Difference between revisions
From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(generate more natural html if class and style arguments are absent) |
(use a more efficient string-building algorithm) |
||
Line 1: | Line 1: | ||
local p = {} |
local p = {} |
||
⚫ | |||
-- Get the keys of the numerical arguments that are present. |
-- Get the keys of the numerical arguments that are present. |
||
local function getArgNums() |
local function getArgNums(args) |
||
local nums = {} |
local nums = {} |
||
local tinsert = table.insert |
|||
for k, v in pairs(args) do |
for k, v in pairs(args) do |
||
if type(k) == 'number' then |
if type(k) == 'number' then |
||
tinsert(nums, k) |
|||
end |
end |
||
end |
end |
||
Line 14: | Line 14: | ||
end |
end |
||
local function makeToolbarItems() |
local function makeToolbarItems(args) |
||
-- Get numerical argument keys. |
-- Get numerical argument keys. |
||
local nums = getArgNums() |
local nums = getArgNums(args) |
||
-- Get the separator text. |
-- Get the separator text. |
||
local sep = (args.separator or 'pipe') .. '-separator' |
local sep = (args.separator or 'pipe') .. '-separator' |
||
Line 22: | Line 22: | ||
-- Generate the toolbar items. |
-- Generate the toolbar items. |
||
local ret = |
local ret = {} |
||
local tinsert = table.insert |
|||
for i, v in ipairs(nums) do |
for i, v in ipairs(nums) do |
||
tinsert(ret, args[v]) |
|||
if nums[i + 1] then |
|||
ret = ret .. sep |
|||
⚫ | |||
end |
end |
||
return ret |
return table.concat(ret, sep) |
||
end |
end |
||
local function makeToolbar() |
local function makeToolbar(args) |
||
return mw.ustring.format( |
|||
⚫ | |||
'<span class="plainlinks%s"%s>(%s)</span>', |
|||
local style = (args.style and (' style="' .. args.style .. '"')) or '' |
|||
⚫ | |||
⚫ | |||
type(args.style) == 'string' and mw.ustring.format(' style="%s"', args.style) or '', |
|||
makeToolbarItems(args) |
|||
⚫ | |||
.. '</span>' |
|||
⚫ | |||
return ret |
|||
end |
end |
||
Line 49: | Line 45: | ||
if frame == mw.getCurrentFrame() then |
if frame == mw.getCurrentFrame() then |
||
origArgs = frame:getParent().args |
origArgs = frame:getParent().args |
||
for k, v in pairs(frame.args) do |
|||
origArgs = frame.args |
|||
break |
|||
⚫ | |||
else |
else |
||
origArgs = frame |
origArgs = frame |
||
Line 54: | Line 54: | ||
-- Strip whitespace and remove nil values |
-- Strip whitespace and remove nil values |
||
⚫ | |||
for k, v in pairs(origArgs) do |
for k, v in pairs(origArgs) do |
||
if type(v) == 'string' then |
|||
v = mw.text.trim(v) |
|||
⚫ | |||
if v ~= '' then |
if v ~= '' then |
||
args[k] = v |
args[k] = v |
||
Line 61: | Line 64: | ||
end |
end |
||
return makeToolbar() |
return makeToolbar(args) |
||
end |
end |
||
Revision as of 09:51, September 10, 2013
This Lua module is used in system messages. Changes to it can cause immediate changes to the Wikipedia user interface. To avoid major disruption, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Please discuss changes on the talk page before implementing them. |
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
This module implements {{toolbar}}. Please see the template page for documentation.
See also
- {{toolbar}}, {{toolbar/sandbox}}, /testcases
local p = {}
-- Get the keys of the numerical arguments that are present.
local function getArgNums(args)
local nums = {}
local tinsert = table.insert
for k, v in pairs(args) do
if type(k) == 'number' then
tinsert(nums, k)
end
end
table.sort(nums)
return nums
end
local function makeToolbarItems(args)
-- Get numerical argument keys.
local nums = getArgNums(args)
-- Get the separator text.
local sep = (args.separator or 'pipe') .. '-separator'
sep = mw.message.new(sep):plain()
-- Generate the toolbar items.
local ret = {}
local tinsert = table.insert
for i, v in ipairs(nums) do
tinsert(ret, args[v])
end
return table.concat(ret, sep)
end
local function makeToolbar(args)
return mw.ustring.format(
'<span class="plainlinks%s"%s>(%s)</span>',
type(args.class) == 'string' and ' ' .. args.class or '',
type(args.style) == 'string' and mw.ustring.format(' style="%s"', args.style) or '',
makeToolbarItems(args)
)
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
for k, v in pairs(frame.args) do
origArgs = frame.args
break
end
else
origArgs = frame
end
-- Strip whitespace and remove nil values
local args = {}
for k, v in pairs(origArgs) do
if type(v) == 'string' then
v = mw.text.trim(v)
end
if v ~= '' then
args[k] = v
end
end
return makeToolbar(args)
end
return p