「モジュール:Toolbar」の版間の差分
提供: ひつじ小屋別館2代目
細 (1版) |
(allow access to the p._main function from other modules, return the blank string if no arguments were specified, and switch indentation to tabs) |
||
1行目: | 1行目: | ||
local p = {} | local p = {} | ||
− | |||
− | -- Get the keys of the numerical arguments that are present. | + | local function getArgNums(args) |
− | + | -- Get the keys of the numerical arguments that are present. | |
− | + | 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 | end | ||
− | local function makeToolbarItems() | + | local function makeToolbarItems(args) |
− | + | local nums = getArgNums(args) | |
− | + | local sep = (args.separator or 'pipe') .. '-separator' | |
− | + | sep = mw.message.new(sep):plain() | |
− | + | local ret = {} | |
− | + | local tinsert = table.insert | |
− | + | for i, v in ipairs(nums) do | |
− | + | tinsert(ret, args[v]) | |
− | + | end | |
− | + | if #ret > 0 then | |
− | + | return table.concat(ret, sep) | |
− | + | end | |
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | function p._main(args) | |
− | + | local toolbarItems = makeToolbarItems(args) | |
− | + | if not toolbarItems then return '' end -- Return the blank string if no arguments were specified, rather than returning empty brackets | |
− | + | 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 '', | |
− | + | toolbarItems | |
− | + | ) | |
end | end | ||
function p.main(frame) | 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 p._main(args) | ||
end | end | ||
− | + | ||
return p | return p |
2013年10月29日 (火) 10:00時点における版
This template is used on 570,000 pages. To avoid large-scale disruption and unnecessary server load, any changes to this template should first be tested in its /sandbox or /testcases subpages, or in your own user space. The tested changes can then be added to this page in one single edit. Please consider discussing any 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 articles, 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 is protected from editing. |
This module implements {{toolbar}}. Please see the template page for documentation.
local p = {}
local function getArgNums(args)
-- Get the keys of the numerical arguments that are present.
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)
local nums = getArgNums(args)
local sep = (args.separator or 'pipe') .. '-separator'
sep = mw.message.new(sep):plain()
local ret = {}
local tinsert = table.insert
for i, v in ipairs(nums) do
tinsert(ret, args[v])
end
if #ret > 0 then
return table.concat(ret, sep)
end
end
function p._main(args)
local toolbarItems = makeToolbarItems(args)
if not toolbarItems then return '' end -- Return the blank string if no arguments were specified, rather than returning empty brackets
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 '',
toolbarItems
)
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 p._main(args)
end
return p