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()
-- Begins the "title" parameter of {{Navigation bar}} with Top of the category (no ?from) and numerals (?from=0)
local toc_frame = mw.html.create('div')
:addClass('plainlinks')
:addClass('hlist')
:attr('id', 'toc')
:css('background', 'WhiteSmoke')
:css('clear', 'both')
:css('width', '98%')
local header = mw.html.create('div')
:attr('id', 'toctitle')
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')
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> '
else
body_content = '['..pageurl..'?from=* <b>*</b>] <b>#</b> '
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 = '\n<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:wikitext(body_content)
header:node(body)
toc_frame:node(header)
return tostring(toc_frame)
end
return p