Module:Large category TOC

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

-- Implements Template:Large Category TOC 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 = ' '..toc..': ' .. ' ['..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 = '# ' body_wrapper = mw.html.create('code') :css('background','White') else body_content = '['..pageurl..'?from=* *] # ' 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 = ' • '..letter..' ' else azlist = ' '..letter..' ' 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 '\n'..tostring(toc_frame) end

return p