Module: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 local tabber = mw.html.create('div'):addClass('wds-tabber') local labels = mw.html.create:tag('ul'):addClass('wds-tabs wds-tabs__wrapper' .. (args.no_border == nil and ' with-bottom-border' or '')) local contents = mw.html.create local i = 1 local y = {1, '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[2]] and args['content' .. y[2]]) do local label = args['label' .. y[2]] or args[i] local content = args['content' .. y[2]] or args[i+1] if lib.isNotEmpty(label) and lib.isNotEmpty(content) then validTabs = validTabs + 1 labels :tag('li') :addClass('wds-tabs__tab' .. (i==1 and ' wds-is-current' or '')) :tag('div') :addClass('wds-tabs__tab-label') :wikitext(label) local contentContainer = contents :tag('div') :addClass('wds-tab__content' .. (i==1 and ' wds-is-current' or '')) addContent(contentContainer, content) end i = i + 2 --unnamed go in pairs y[1] = y[1] + 1 y[2] = tostring(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