Module:Tabber

local p = {} local getArgs = require( 'Module:Arguments' ).getArgs

-- Implements Template:SubTabs.

function p.sub(frame) local args = getArgs(frame, {   wrappers = {      'Template:SubTabs'    }  }) local main = args[1] or mw.title.getCurrentTitle.baseText -- Use if no page is given. local disp = string.match(main, "^(.+)%s+%(") -- does not display discriminators in parenthesis local subpage = function( page ) return main .. '/' .. page end  local sub = function( number ) if args['sub' .. number] then return subpage( args['sub' .. number] ) end end local tabs = {     ['this'] = args['this'],    ['link1'] = main,    ['name1'] = disp,    ['link2'] = sub( '1' ),    ['name2'] = args['sub1'],    ['link3'] = sub( '2' ),    ['name3'] = args['sub2'],    ['link4'] = sub( '3' ),    ['name4'] = args['sub3'],    ['link5'] = sub( '4' ),    ['name5'] = args['sub4'],

['link6'] = sub( '5' ), ['name6'] = args['sub5'],

['link7'] = sub( '6' ), ['name7'] = args['sub6'], ['link8'] = sub( '7' ), ['name8'] = args['sub7'], ['link9'] = sub( '8' ), ['name9'] = args['sub8'], ['link10'] = sub( '9' ), ['name10'] = args['sub9'], ['link11'] = sub( '10' ), ['name11'] = args['sub10'], ['link12'] = sub( '11' ), ['name12'] = args['sub11'], ['link13'] = sub( '12' ), ['name13'] = args['sub12'], ['link14'] = sub( '13' ), ['name14'] = args['sub13'], ['link15'] = sub( '14' ), ['name15'] = args['sub14'], } return p._main( tabs ) end

-- Implements Template:Tabber. function p.main(frame) local args = getArgs(frame, {   wrappers = {      'Template:Tabber'    }  }) return p._main( args ) end

function p._main( args ) local current_page = args['this'] or mw.title.getCurrentTitle.prefixedText

local rows = {} for n=1,15 do   if args['link' .. n] then -- Use the link as the name if none is given. local name = args['name' .. n] or args['link' .. n]     if args['link' .. n] == current_page then -- The active tab. table.insert( rows, string.format( ' %s ', name ) ) else -- The inactive tabs. local link = string.format( '%s', args['link' .. n], name ) table.insert( rows, string.format( ' %s ', link ) ) end end end -- The separator is used for the space between two tabs. local separator = '\n \n' -- The tail fills the space between the last tab and the end of the line. local tail = ' ' return string.format( ' \n%s\n%s\n ', table.concat( rows, separator ), tail ) end

return p