Module:Tabs: Difference between revisions

From TwogPedia
No edit summary
No edit summary
Line 13: Line 13:
local ul = outerDiv:tag('ul')
local ul = outerDiv:tag('ul')
:attr('class', 'tabs')
:attr('class', 'tabs')
mw.log('title')
mw.log(currentTitle)
for i = 1, tabCount do
for i = 1, tabCount do
local link = args['link' .. i]
local link = args['link' .. i]
Line 30: Line 32:
local li = ul:tag('li')
local li = ul:tag('li')
:wikitext(text)
:wikitext(text)
if (link == currentTitle) then
activeTab = i
mw.log('link')
li:addClass('active')
mw.log(link)
mw.log(currentTitle:sub(1, #link) == link)
-- if (link == currentTitle) then
if (args.org) then
if (currentTitle:sub(1, #link) == link) then
activeTab = i
li:addClass('active')
end
else
if (link == currentTitle) then
activeTab = i
li:addClass('active')
end
end
end
end
end

Revision as of 10:52, 21 September 2022

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

local getArgs = require('Module:Arguments').getArgs

local Tabs = {}

function Tabs.main(frame)
	local args = getArgs(frame)
	local tabCount = Tabs.number_of_tabs(args)
	local currentTitle = mw.title.getCurrentTitle().prefixedText
	local activeTab = nil
	local outerDiv = mw.html.create('div')
		:addClass('tabs-container')

	local ul = outerDiv:tag('ul')
		:attr('class', 'tabs')
	mw.log('title')
	mw.log(currentTitle)
	for i = 1, tabCount do
		local link = args['link' .. i]
		local tabName = args['name' .. i]

		local text
		-- If there is no name, then use last part of the link
		if tabName == nil and link ~= nil then
			tabName = mw.text.split(link, '/')[#mw.text.split(link, '/')]
			text = '[[' .. link .. '|' .. tabName .. ']]'
		elseif link ~= nil then
			text = '[[' .. link .. '|' .. tabName .. ']]'
		else 
			text = tabName
		end

		local li = ul:tag('li')
			:wikitext(text)
		
		mw.log('link')
		mw.log(link)
		mw.log(currentTitle:sub(1, #link) == link)
		-- if (link == currentTitle) then
		if (args.org) then
			if (currentTitle:sub(1, #link) == link) then
				activeTab = i
				li:addClass('active')
			end
		else 
			if (link == currentTitle) then
				activeTab = i
				li:addClass('active')
			end
		end
	end

	-- optionally add more tab bars beneath
	local extra = ''
	if activeTab and args['tabs' .. activeTab] ~= nil then
		extra = args['tabs' .. activeTab]
	end

	return tostring(outerDiv) .. extra
end

-- Computes the number of tabs requested
function Tabs.number_of_tabs(args)
	args = args or {}
	local i = 0
	
	while args['name' .. (i + 1)] ~= nil or args['link' .. (i + 1)] ~= nil do
		i = i + 1
	end
	if i == 0 then
		error('The Tabs template needs name and link arguments.')
	end
	return i
end

return Tabs