Module:Tabber
Documentation for this module may be created at Module:Tabber/doc
local p = {}
function p.makeTabber(args)
local shown = args.shown
if shown == nil or shown ~= math.floor(shown)
or shown < 1 or shown > #args
then shown = 1 end
local tabber = mw.html.create("div")
:addClass("rhwiki-tabberneue")
local menu = tabber:tag("div")
:addClass("rhwiki-tabberneue-menu")
:addClass(args["tab-centered"] and "center" or nil)
local content = tabber:tag("div")
:addClass("rhwiki-tabberneue-content")
:addClass(args["content-centered"] and "center" or nil)
for i, tab in ipairs(args) do
if tab.label == nil or tab.panel == nil then break end
menu:tag("div")
:addClass("rhwiki-tabberneue-label")
:addClass(i == shown and "selected" or nil)
:wikitext(tab.label)
content:tag("div")
:addClass("rhwiki-tabberneue-panel")
:addClass(i ~= shown and "hidden" or nil)
:wikitext(tab.panel)
end
tabber:wikitext(mw.getCurrentFrame():extensionTag{
name = "templatestyles",
args = {src = "Tabber/styles.css"}
})
return tostring(tabber)
end
local function nonempty(s)
return s ~= nil and mw.text.trim(s) ~= ""
end
function p.main(frame)
local args = {}
local parentArgs = frame:getParent().args
local i = 1
while true do
local label = parentArgs["tab-" .. i]
local panel = parentArgs["content-" .. i]
if label == nil or panel == nil then break end
args[i] = {label = label, panel = panel}
i = i + 1
end
args.shown = tonumber(parentArgs.shown) or 1
args["tab-centered"] = nonempty(parentArgs["tab-centered"])
args["content-centered"] = nonempty(parentArgs["content-centered"])
return p.makeTabber(args)
end
return p