Module:Sandbox/User:The Gaffer/Modules/Infobox Switch

Documentation for this module may be created at Module:Sandbox/User:The Gaffer/Modules/Infobox Switch/doc

--Attribution: This module was taken from the Runescape wiki - https://runescape.wiki/w/Module:Switch_infobox - See changes there for a list of contributors
local p = {}
local yesno = require('Module:Yesno')

function p.main(frame)
	return frame:preprocess(tostring(p._main(frame:getParent().args)))
end

function p._main(args)
	local contents = {}

	local i = 1
	while args['item'..i] do
		table.insert(contents, { text = args['text'..i] or ('Item '..i),
					content = '\n' .. args['item'..i],
					id = args['switch_id'..i] or i})
		i = i + 1
	end

	local ret = mw.html.create('div')
			:addClass('switch-infobox')
			:addClass('loading')
			:tag('span')
				:addClass('loading-button')
				:addClass('button')
				:wikitext('Loading...')
			:done()
	if args.float then
		if args.float == 'left' then
			ret:addClass('tleft')
				:addClass('thumb')
		elseif args.float == 'right' then
			ret:addClass('tright')
				:addClass('thumb')
		end
	end
			
	local mah_triggers = ret:tag('div')
				:addClass('switch-infobox-triggers')
				
	local isSelect = yesno(args.select)
	if isSelect then
		mah_triggers:addClass('infobox-triggers-select')
	elseif i > 6 and isSelect ~= false then
		mah_triggers:addClass('infobox-triggers-select')
	end

	for i, v in ipairs(contents) do
		mah_triggers	:tag('span')
					:addClass('trigger')
					:addClass('button')
					:addClass(i==1 and 'button-selected' or '')
					:attr('data-id',v.id)
					:wikitext(v.text)
				:done()

		ret	:tag('div')
				:addClass('item')
				:addClass(i==1 and 'showing' or '')
				:attr('data-id',v.id)
				:wikitext(v.content)
			:done()
	end

	return ret
end

return p