Module:Tabber: Difference between revisions

Overhaul use of classes
(Add text-align support for tab menu and panels separately)
(Overhaul use of classes)
Line 1: Line 1:
local p = {}
local p = {}
local function tointeger(s)
s = tonumber(s)
if s == nil or s ~= math.floor(s) then return nil end
return s
end


function p.makeTabber(args)
function p.makeTabber(args)
local shown = tointeger(args.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("oo-ui-tabSelectWidget-framed")
:addClass(args["tab-centered"] and "center" or nil)
:css("text-align", args["tab-align"])
local content = tabber:tag("div")
local content = tabber:tag("div")
:addClass("rhwiki-tabberneue-content")
:addClass("rhwiki-tabberneue-content")
:css("text-align", args["content-align"])
:addClass(args["content-centered"] and "center" or nil)
local i = 1
for i, tab in ipairs(args) do
while true do
if tab.label == nil or tab.panel == nil then break end
local labelText = args[2 * i - 1] or args["tab-" .. i]
local panelText = args[2 * i] or args["content-" .. i]
if labelText == nil or panelText == nil then break end
 
menu:tag("div")
menu:tag("div")
:addClass("rhwiki-tabberneue-option")
:addClass("rhwiki-tabberneue-label")
:addClass("oo-ui-optionWidget")
:addClass(i == shown and "selected" or nil)
:addClass("oo-ui-tabOptionWidget")
:wikitext(tab.label)
:addClass("oo-ui-labelElement")
:addClass(i == shown and "oo-ui-optionWidget-selected" or nil)
:tag("span")
:addClass("rhwiki-tabberneue-label")
:addClass("oo-ui-labelElement-label")
:wikitext(labelText)
content:tag("div")
content:tag("div")
:addClass("rhwiki-tabberneue-panel")
:addClass("rhwiki-tabberneue-panel")
:addClass(i ~= shown and "oo-ui-element-hidden" or nil)
:addClass(i ~= shown and "hidden" or nil)
:wikitext(panelText)
:wikitext(tab.panel)
i = i + 1
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)
return p.makeTabber(frame:getParent().args)
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
420

edits