Documentation for this module may be created at Module:Large category TOC/doc
local p = {} local azupper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' local azlower = 'abcdefghijklmnopqrstuvwxyz' local aejot = 'aejot' function p.scrollable(frame) return main('scrollable') end function p.collapsible(frame) return main('collapsible') end function p.aejot(frame) return main('aejot') end function main(toc_type) -- It should be much faster to only process these once, and just re use them as variables local pageurl = mw.title.getCurrentTitle():fullUrl() local toc = mw.message.new('Toc'):plain() -- Highest level div local toc_frame = mw.html.create('div') :addClass('plainlinks') :addClass('hlist') :addClass('toc') -- :attr('id','toc') :css('display','block !important') :css('background','WhiteSmoke') :css('clear','both') :css('width','98%') -- Contains "Content: Top 0-9 A - Z" local header = mw.html.create('div') :attr('id','toctitle') :css('background','WhiteSmoke') -- Contains all the rest local body_wrapper local body = mw.html.create('div') :css('text-align', 'center') if toc_type == 'collapsible' then toc_frame:addClass('NavFrame') header:addClass('NavHead') body:addClass('NavContent') :css('background','white') :css('display','none') elseif toc_type == 'scrollable' then body:css('overflow-x','scroll') :css('overflow-y','hidden') :css('white-space','nowrap') end local header_content = '<strong>'..toc..':</strong>' .. ' ['..pageurl..' Top]' .. ' ['..pageurl..'?from=0 0–9]' for i=1,26,1 do local letter = string.sub(azupper,i,i) header_content = header_content..' ['..pageurl..'?from='..letter..' '..letter..']' end header:wikitext(header_content) local body_content if toc_type == 'collapsible' then body_content = '<b>#</b> ' body_wrapper = mw.html.create('code') :css('background','White') else body_content = '['..pageurl..'?from=* <b>*</b>] <b>#</b> ' body_wrapper = mw.html.create('span') end for i=0,9,1 do body_content = body_content..' ['..pageurl..'?from='..i..' '..i..']' end local function atoz(letter) local azlist local letterlist local maxind if toc_type == 'aejot' then letterlist = aejot maxind = 5 else letterlist = azlower maxind = 26 end if toc_type == 'aejot' or toc_type == 'scrollable' then azlist = ' • <b>'..letter..'</b> ' else azlist = '<br /><b>'..letter..'</b> ' end for i=1,maxind,1 do local lowerletter = string.sub(letterlist,i,i) azlist = azlist..' ['..pageurl..'?from='..letter..lowerletter..' '..letter..lowerletter..'] ' end return azlist end for i=1,26,1 do local letter = string.sub(azupper,i,i) body_content = body_content..atoz(letter) end body_wrapper:wikitext(body_content) body:node(body_wrapper) toc_frame:node(header) toc_frame:node(body) return '__NOTOC__\n'..tostring(toc_frame) end return p