Module:Infobox/tabber: Difference between revisions
Jump to navigation
Jump to search
comments |
I realised MediaWiki typically uses kebab-case |
||
| (10 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
local makeEmptyPartEmptyNoFrame = require("Module:Infobox").makeEmptyPartEmptyNoFrame | |||
local p = {} | local p = {} | ||
| Line 19: | Line 20: | ||
-- Create a string with the text that goes in the <tabber> tag | -- Create a string with the text that goes in the <tabber> tag | ||
local tabberStr = "" | local tabberStr = "" | ||
local nonEmptyTabs = {} | |||
for _, i in ipairs(tabNums) do | for _, i in ipairs(tabNums) do | ||
if string.find(makeEmptyPartEmptyNoFrame(parentFrame.args[i]), "%S") then | |||
table.insert(nonEmptyTabs, i) | |||
local tabLabel = parentFrame.args["label" .. i] | |||
"=<table style=\"width:100%;border-collapse:collapse\">" .. | -- If no label it just uses the number as a label | ||
if tabLabel then | |||
"</ | if not string.find(tabLabel, "%S") then | ||
tabLabel = i | |||
end | |||
else | |||
tabLabel = i | |||
end | |||
tabberStr = tabberStr .. | |||
"|-|" .. | |||
tabLabel .. | |||
"=<table style=\"width:100%;border-collapse:collapse\">" .. | |||
parentFrame.args[i] .. | |||
"</table>" | |||
end | |||
end | |||
-- If there is only one tab, don't generate tabber unless allow-one-tab=yes | |||
if (not (parentFrame.args["allow-one-tab"] == "yes")) and #nonEmptyTabs == 1 then | |||
if string.find(makeEmptyPartEmptyNoFrame(parentFrame.args[nonEmptyTabs[1]]), "%S") then | |||
return parentFrame.args[nonEmptyTabs[1]] | |||
else | |||
return frame:preprocess("<nowiki />") | |||
end | |||
end | end | ||
-- Return | -- Return | ||
if tabberStr == "" then | if tabberStr == "" then | ||
return "" | return frame:preprocess("<nowiki />") | ||
else | else | ||
return "<tr><td colspan=\"2\" style=\"padding:0\">" .. frame:extensionTag("tabber", tabberStr) .. "</td></tr>" | return "<tr><td colspan=\"2\" style=\"padding:0;width:min-content\"><div style=\"width:21.6em\">" .. frame:extensionTag("tabber", tabberStr) .. "</div></td></tr>" | ||
end | end | ||
end | end | ||
return p | return p | ||
Latest revision as of 16:35, 19 December 2024
Documentation for this module may be created at Module:Infobox/tabber/doc
local makeEmptyPartEmptyNoFrame = require("Module:Infobox").makeEmptyPartEmptyNoFrame
local p = {}
p.generateTabber = function(frame)
-- Get access to the arguments of the template that called this function
local parentFrame = frame:getParent()
-- Find which number arguments are present
local tabNums = {}
for k, _ in pairs(parentFrame.args) do
if type(k) == "number" then
table.insert(tabNums, k)
end
end
-- Sort them because order is not guaranteed
-- see https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#frame.args
-- "However, due to how Lua implements table iterators, iterating over
-- arguments will return them in an unspecified order, and there's no way
-- to know the original order as they appear in wikitext."
table.sort(tabNums)
-- Create a string with the text that goes in the <tabber> tag
local tabberStr = ""
local nonEmptyTabs = {}
for _, i in ipairs(tabNums) do
if string.find(makeEmptyPartEmptyNoFrame(parentFrame.args[i]), "%S") then
table.insert(nonEmptyTabs, i)
local tabLabel = parentFrame.args["label" .. i]
-- If no label it just uses the number as a label
if tabLabel then
if not string.find(tabLabel, "%S") then
tabLabel = i
end
else
tabLabel = i
end
tabberStr = tabberStr ..
"|-|" ..
tabLabel ..
"=<table style=\"width:100%;border-collapse:collapse\">" ..
parentFrame.args[i] ..
"</table>"
end
end
-- If there is only one tab, don't generate tabber unless allow-one-tab=yes
if (not (parentFrame.args["allow-one-tab"] == "yes")) and #nonEmptyTabs == 1 then
if string.find(makeEmptyPartEmptyNoFrame(parentFrame.args[nonEmptyTabs[1]]), "%S") then
return parentFrame.args[nonEmptyTabs[1]]
else
return frame:preprocess("<nowiki />")
end
end
-- Return
if tabberStr == "" then
return frame:preprocess("<nowiki />")
else
return "<tr><td colspan=\"2\" style=\"padding:0;width:min-content\"><div style=\"width:21.6em\">" .. frame:extensionTag("tabber", tabberStr) .. "</div></td></tr>"
end
end
return p