Module:Tabber: Difference between revisions

From Rhythm Heaven Wiki
Jump to navigation Jump to search
(Add text-align support)
(Add text-align support for tab menu and panels separately)
Line 12: Line 12:
:addClass("rhwiki-tabberneue")
:addClass("rhwiki-tabberneue")
:attr("data-shown-index", tostring(shown))
:attr("data-shown-index", tostring(shown))
:css("text-align", args.align)
local menu = tabber:tag("div")
local menu = tabber:tag("div")
:addClass("rhwiki-tabberneue-menu")
:addClass("rhwiki-tabberneue-menu")
:addClass("oo-ui-tabSelectWidget-framed")
:addClass("oo-ui-tabSelectWidget-framed")
: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"])
local i = 1
local i = 1
while true do
while true do
local labelText = args[2 * i - 1] or args["tab" .. i]
local labelText = args[2 * i - 1] or args["tab-" .. i]
local panelText = args[2 * i] or args["content" .. i]
local panelText = args[2 * i] or args["content-" .. i]
if labelText == nil or panelText == nil then break end
if labelText == nil or panelText == nil then break end



Revision as of 10:07, 29 August 2025

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