420
edits
HyperNervie (talk | contribs) (Add text-align support for tab menu and panels separately) |
HyperNervie (talk | contribs) (Overhaul use of classes) |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
function p.makeTabber(args) | function p.makeTabber(args) | ||
local shown = | local shown = args.shown | ||
if shown ~= math.floor(shown) or shown < 1 or shown > #args | |||
then shown = 1 end | |||
local tabber = mw.html.create("div") | local tabber = mw.html.create("div") | ||
:addClass("rhwiki-tabberneue") | :addClass("rhwiki-tabberneue") | ||
:attr("data-shown-index", tostring(shown)) | :attr("data-shown-index", tostring(shown - 1)) | ||
local menu = tabber:tag("div") | local menu = tabber:tag("div") | ||
:addClass("rhwiki-tabberneue-menu") | :addClass("rhwiki-tabberneue-menu") | ||
:addClass( | :addClass(args["tab-centered"] and "center" or nil) | ||
local content = tabber:tag("div") | local content = tabber:tag("div") | ||
:addClass("rhwiki-tabberneue-content") | :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") | menu:tag("div") | ||
:addClass("rhwiki-tabberneue- | :addClass("rhwiki-tabberneue-label") | ||
:addClass(i == shown and "selected" or nil) | |||
:wikitext(tab.label) | |||
:addClass(i == shown and " | |||
: | |||
content:tag("div") | content:tag("div") | ||
:addClass("rhwiki-tabberneue-panel") | :addClass("rhwiki-tabberneue-panel") | ||
:addClass(i ~= shown and " | :addClass(i ~= shown and "hidden" or nil) | ||
:wikitext( | :wikitext(tab.panel) | ||
end | end | ||
tabber:wikitext(mw.getCurrentFrame():extensionTag{ | |||
name = "templatestyles", | |||
args = {src = "Tabber/styles.css"} | |||
}) | |||
return tostring(tabber) | return tostring(tabber) | ||
end | |||
local function nonempty(s) | |||
return s ~= nil and mw.text.trim(s) ~= "" | |||
end | end | ||
function p.main(frame) | function p.main(frame) | ||
local args = {} | |||
local parentArgs = frame:getParent().args | |||
local i = 0 | |||
while true do | |||
local label = parentArgs["tab-" .. i] | |||
local panel = parentArgs["content-" .. i] | |||
if label == nil or panel == nil then break end | |||
i = i + 1 | |||
args[i] = {label = label, panel = panel} | |||
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 | end | ||
return p | return p | ||
edits