Module:Tabber

Revision as of 10:07, 29 August 2025 by HyperNervie (talk | contribs) (Add text-align support for tab menu and panels separately)

Documentation for this module may be created at Module:Tabber/doc

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)
	local shown = tointeger(args.shown)
	local tabber = mw.html.create("div")
		:addClass("rhwiki-tabberneue")
		:attr("data-shown-index", tostring(shown))
	local menu = tabber:tag("div")
		:addClass("rhwiki-tabberneue-menu")
		:addClass("oo-ui-tabSelectWidget-framed")
		:css("text-align", args["tab-align"])
	local content = tabber:tag("div")
		:addClass("rhwiki-tabberneue-content")
		:css("text-align", args["content-align"])
	
	local i = 1
	while true do
		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")
			:addClass("rhwiki-tabberneue-option")
			:addClass("oo-ui-optionWidget")
			:addClass("oo-ui-tabOptionWidget")
			: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")
			:addClass("rhwiki-tabberneue-panel")
			:addClass(i ~= shown and "oo-ui-element-hidden" or nil)
			:wikitext(panelText)
		i = i + 1
	end

	return tostring(tabber)
end

function p.main(frame)
	return p.makeTabber(frame:getParent().args)
end

return p