(Created page with "local Tabs = {} function Tabs.static(args) local tabCount = Tabs.number_of_tabs(args) local this = tonumber(args['This']) or Tabs.computeThis(args, tabCount) local this2 = tonumber(args['This2']) local outerDiv = mw.html.create('div') :addClass('tabs-static') :attr('data-nosnippet', '') local ul = outerDiv:tag('ul') :attr('class', 'nav nav-tabs navigation-not-searchable tabs tabs' .. tabCount) for i = 1, tabCount do local link = args['link' .. i] loca...") |
No edit summary |
||
(4 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local getArgs = require('Module:Arguments').getArgs | |||
local Tabs = {} | local Tabs = {} | ||
function Tabs. | function Tabs.main(frame) | ||
local args = getArgs(frame) | |||
local tabCount = Tabs.number_of_tabs(args) | local tabCount = Tabs.number_of_tabs(args) | ||
local | local currentTitle = mw.title.getCurrentTitle().prefixedText | ||
local | local activeTab = nil | ||
local outerDiv = mw.html.create('div') | local outerDiv = mw.html.create('div') | ||
:addClass('tabs- | :addClass('tabs-container') | ||
local ul = outerDiv:tag('ul') | local ul = outerDiv:tag('ul') | ||
:attr('class', ' | :attr('class', 'tabs') | ||
for i = 1, tabCount do | for i = 1, tabCount do | ||
Line 18: | Line 19: | ||
local text | local text | ||
-- If there is no name, then use last part of the link | |||
if tabName == nil and link ~= nil then | |||
tabName = | tabName = mw.text.split(link, '/')[#mw.text.split(link, '/')] | ||
text = '[[' .. link .. '|' .. tabName .. ']]' | text = '[[' .. link .. '|' .. tabName .. ']]' | ||
else | elseif link ~= nil then | ||
text = '[[' .. link .. '|' .. tabName .. ']]' | |||
else | |||
text = tabName | text = tabName | ||
end | end | ||
Line 28: | Line 31: | ||
local li = ul:tag('li') | local li = ul:tag('li') | ||
:wikitext(text) | :wikitext(text) | ||
if ( | -- 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 | ||
Line 36: | Line 48: | ||
-- optionally add more tab bars beneath | -- optionally add more tab bars beneath | ||
local extra = '' | local extra = '' | ||
if | if activeTab and args['tabs' .. activeTab] ~= nil then | ||
extra = args['tabs' .. | extra = args['tabs' .. activeTab] | ||
end | end | ||
return tostring(outerDiv) .. extra | return tostring(outerDiv) .. extra | ||
end | end | ||
Line 83: | Line 59: | ||
args = args or {} | args = args or {} | ||
local i = 0 | local i = 0 | ||
while args['name' .. (i + 1)] ~= nil or args['link' .. (i + 1)] ~= nil do | while args['name' .. (i + 1)] ~= nil or args['link' .. (i + 1)] ~= nil do | ||
i = i + 1 | i = i + 1 | ||
end | end | ||
if i == 0 then | if i == 0 then | ||
error(' | error('The Tabs template needs name and link arguments.') | ||
end | end | ||
return i | return i | ||
end | end | ||
return Tabs | return Tabs |
Latest revision as of 10:54, 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')
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)
-- 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