Module:Tabber: Difference between revisions
Jump to navigation
Jump to search
No edit summary Tag: Reverted |
No edit summary Tag: Manual revert |
||
Line 50: | Line 50: | ||
validTabs = validTabs + 1 | validTabs = validTabs + 1 | ||
labels | labels | ||
:tag(' | :tag('li') | ||
:addClass('tabber__tab') | :addClass('tabber__tab') | ||
:attr('aria-selected', i==1 and 'true' or 'false') | :attr('aria-selected', i==1 and 'true' or 'false') |
Revision as of 17:50, 13 January 2024
This module implements {{Tabber}}
.
local p = {}
local lib = require('Module:Feature')
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame)
return p._main(args, frame)
end
function p._main(args, frame)
if args == nil then return ''
elseif type(args) ~= 'table' then return args
end
frame = frame or mw.getCurrentFrame()
local tabber = mw.html.create('div'):addClass('tabber')
local labels = mw.html.create('header'):addClass('tabber__header '):tag('ul'):addClass('tabber__tabs ' .. (args.no_border == nil and 'with-bottom-border' or ''))
local contents = mw.html.create('div'):addClass('tabber__section')
local i = 1
local y = '1'
local validTabs = 0
local function addContent(container, content)
if type(content) == 'string' then
if args.nowiki then
local content =
frame:preprocess(
mw.text.decode(
mw.text.unstripNoWiki(
content
)
)
)
container:wikitext(content) --plain string content encased in nowiki as to avoid bad mediawiki parsing
else
container:wikitext(content) --plain string content
end
elseif type(content) == 'table' and tostring(content) == 'table' then --table content
for _, subContent in ipairs(content) do
addContent(container, subContent)
end
elseif type(content) == 'table' then container:node(content) --html content
end
end
while (args[i] and args[i+1]) or (args['label' .. y] and args['content' .. y]) do
local label = args['label' .. y] or args[i]
local content = args['content' .. y] or args[i+1]
if lib.isNotEmpty(label) and lib.isNotEmpty(content) then
validTabs = validTabs + 1
labels
:tag('li')
:addClass('tabber__tab')
:attr('aria-selected', i==1 and 'true' or 'false')
:attr('id', 'tab-' .. label:gsub(' ', '_') .. '-0')
:attr('href', '#' .. label:gsub(' ', '_') .. '-0')
:wikitext(label)
local contentContainer =
contents
:tag('div')
:attr('id', label:gsub(' ', '_') .. '-0')
:attr('aria-hidden', i==1 and 'false' or 'true')
:addClass('tabber__panel')
contentContainer:newline()
addContent(contentContainer, content)
contentContainer:newline()
end
i = i + 2 --unnamed go in pairs
y = tostring(tonumber(y)+1)
end
if validTabs <2 then return (args['content1'] or args[2] or '') end
tabber:node(labels)
tabber:node(contents)
return tabber
end
return p