Module:Toolbar: Difference between revisions
From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(create) |
m (13 revisions imported) |
||
(12 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
-- This module implements {{toolbar}}. |
|||
local p = {} |
|||
local args = {} |
|||
local mArguments -- Lazily initialise [[Module:Arguments]] |
|||
-- Create concatenator object. |
|||
local mTableTools = require('Module:TableTools') |
|||
local Concatenator = {result = ''} |
|||
local yesno = require('Module:Yesno') |
|||
local p = {} |
|||
function Concatenator:new() |
|||
local o = {} |
|||
setmetatable(o, self) |
|||
self.__index = self |
|||
return o |
|||
end |
|||
function |
function p.main(frame) |
||
mArguments = require('Module:Arguments') |
|||
if type(s) ~= 'string' then |
|||
local args = mArguments.getArgs(frame) |
|||
error('Attempt to concatenate non-string value', 2) |
|||
return p._main(args) |
|||
end |
|||
self.result = self.result .. s |
|||
end |
end |
||
function p._main(args) |
|||
-- Get the keys of the numerical arguments that are present. |
|||
local toolbarItems = p.makeToolbarItems(args) |
|||
local function getArgNums() |
|||
if not toolbarItems then |
|||
local nums = {} |
|||
-- Return the blank string if no arguments were specified, rather than |
|||
for k, v in pairs(args) do |
|||
-- returning empty brackets. |
|||
local num = tostring(k):match('^([1-9]%d*)$') |
|||
return '' |
|||
if num then table.insert(nums, tonumber(num)) end |
|||
elseif yesno(args.span) == false then |
|||
end |
|||
return string.format( |
|||
table.sort(nums) |
|||
'(%s)', |
|||
return nums |
|||
toolbarItems |
|||
) |
|||
else |
|||
return string.format( |
|||
'<span class="plainlinks%s"%s>(%s)</span>', |
|||
type(args.class) == 'string' and ' ' .. args.class or '', |
|||
type(args.style) == 'string' and string.format(' style="%s"', args.style) or '', |
|||
toolbarItems |
|||
) |
|||
end |
|||
end |
end |
||
function p.makeToolbarItems(args) |
|||
local nums = mTableTools.numKeys(args) |
|||
-- Get numerical argument keys. |
|||
local sep = (args.separator or 'pipe') .. '-separator' |
|||
local nums = getArgNums() |
|||
sep = mw.message.new(sep):plain() |
|||
-- Get the separator text. |
|||
local ret = {} |
|||
local sep = (args.separator or 'pipe') .. '-separator' |
|||
for i, v in ipairs(nums) do |
|||
sep = mw.message.new(sep):plain() |
|||
ret[#ret + 1] = mw.ustring.gsub(args[v], "%[%[::+(.-)%]%]", "[[:%1]]") |
|||
end |
|||
-- Generate the toolbar items. |
|||
if #ret > 0 then |
|||
local ti = Concatenator:new() |
|||
return table.concat(ret, sep) |
|||
for i, v in ipairs(nums) do |
|||
else |
|||
ti:add(args[v]) |
|||
return nil |
|||
if nums[i + 1] then |
|||
end |
|||
ti:add(sep) |
|||
end |
|||
end |
|||
return ti.result |
|||
end |
end |
||
local function makeToolbar() |
|||
local class = args.class 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. |
|||
t:add('</span>') |
|||
return t.result |
|||
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 |
return p |
Latest revision as of 21:55, January 25, 2022
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
-- This module implements {{toolbar}}.
local mArguments -- Lazily initialise [[Module:Arguments]]
local mTableTools = require('Module:TableTools')
local yesno = require('Module:Yesno')
local p = {}
function p.main(frame)
mArguments = require('Module:Arguments')
local args = mArguments.getArgs(frame)
return p._main(args)
end
function p._main(args)
local toolbarItems = p.makeToolbarItems(args)
if not toolbarItems then
-- Return the blank string if no arguments were specified, rather than
-- returning empty brackets.
return ''
elseif yesno(args.span) == false then
return string.format(
'(%s)',
toolbarItems
)
else
return string.format(
'<span class="plainlinks%s"%s>(%s)</span>',
type(args.class) == 'string' and ' ' .. args.class or '',
type(args.style) == 'string' and string.format(' style="%s"', args.style) or '',
toolbarItems
)
end
end
function p.makeToolbarItems(args)
local nums = mTableTools.numKeys(args)
local sep = (args.separator or 'pipe') .. '-separator'
sep = mw.message.new(sep):plain()
local ret = {}
for i, v in ipairs(nums) do
ret[#ret + 1] = mw.ustring.gsub(args[v], "%[%[::+(.-)%]%]", "[[:%1]]")
end
if #ret > 0 then
return table.concat(ret, sep)
else
return nil
end
end
return p