Module:Large category TOC/sandbox: Difference between revisions

Content deleted Content added
No edit summary
space before concatenated string, not after
 
(31 intermediate revisions by 6 users not shown)
Line 1:
local p = {}
 
local azupper = mw.text.split('ABCDEFGHIJKLMNOPQRSTUVWXYZ','')
local azlower = mw.text.split('abcdefghijklmnopqrstuvwxyz','')
local aejot = mw.text.split('aejot','')
 
local function p.scrollablemain(frametoc_type)
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('plainlinkslarge-cat-toc')
:addClass('hlistplainlinks')
: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.createtoc_frame:tag('div')
:attr('idclass', 'toctitle')
:css('background','WhiteSmoke')
-- Contains all the rest
local body_wrapper
local body = mw.html.create('div')
local body = toc_frame:tag('div')
:css('text-align', 'center')
:addClass('large-cat-toc-body')
local jumpy_collapse = mw.html.create('div')
:addClass('large-cat-toc-jumpy-title')
if toc_type == 'collapsible' then
toc_frame:addClass('NavFramemw-collapsible mw-collapsed')
headerbody:addClass('NavHeadmw-collapsible-content')
body:addClass('NavContent')
:css('background','white')
:css('display','none')
elseif toc_type == 'scrollable' then
bodytoc_frame:cssaddClass('overflowlarge-cat-toc-x','scroll')
:css('overflow-y','hidden')
:css('white-space','nowrap')
end
local pageurl = mw.title.getCurrentTitle():fullUrl()
local header_content = '<strong>'..toc..':</strong>' ..
local header_content = {
' ['..pageurl..' Top]' ..
string.format(
' ['..pageurl..'?from=0 0–9]'
'<span class="large-cat-toc-title">%s:</span> [%s Top] [%s?from=0 0–9]',
mw.message.new('Toc'):plain(),
pageurl,
pageurl
)
}
for i=1_,26,1 v in ipairs(azupper) do
table.insert(header_content, string.format(
local letter = string.sub(azupper,i,i)
' [%s?from=%s %s]', pageurl, v, v
header_content = header_content..' ['..pageurl..'?from='..letter..' '..letter..']'
))
end
header:wikitext(header_content)
local body_content
if toc_type == 'collapsible' then
jumpy_collapse:wikitext(table.concat(header_content))
body_content = '<code><b>#</b> '
header:node(jumpy_collapse)
else
header:wikitext(table.concat(header_content))
body_content = '['..pageurl..'?from=* <b>*</b>] <b>#</b> '
end
local body_content = {}
for i=0,9,1 do
if toc_type ~= 'collapsible' then
body_content = body_content..' ['..pageurl..'?from='..i..' '..i..']'
table.insert(body_content, ' <span class="large-cat-toc-anum">['..pageurl..'?from=* *]</span>')
end
table.insert(body_content, ' <span class="large-cat-toc-anum">#</span>')
body_wrapper = body:tag('span')
for i=0,9 do
table.insert(body_content,string.format(' [%s?from=%s %s]',pageurl,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
table.insert(azlist = ,' • <bspan class="large-cat-toc-anum">'..letter..'</bspan> ')
else
table.insert(azlist = ,' <br /><bspan class="large-cat-toc-anum">'..letter..'</bspan> ')
end
for i=1_,maxind,1 v in ipairs(letterlist) do
local lowerletter =table.insert(azlist, string.subformat(letterlist,i,i)
azlist = azlist.. ' ['..pageurl..'%s?from=%s%s %s%s]'.., pageurl, letter..lowerletter..', v, '..letter..lowerletter..'], 'v
))
end
return table.concat(azlist)
end
for i=1_,26,1 v in ipairs(azupper) do
table.insert(body_content, atoz(v))
local letter = string.sub(azupper,i,i)
body_content = body_content..atoz(letter)
end
body_wrapper:wikitext(table.concat(body_content))
if toc_type == 'collapsible' then
body_content = body_content..'</code>'
end
body:wikitext(body_content)
header:node(body)
toc_frame:node(header)
return '__NOTOC__\n' ..tostring mw.getCurrentFrame(toc_frame):extensionTag{
name = 'templatestyles', args = { src = 'Module:Large category TOC/styles.css' }
} .. tostring(toc_frame)
end
 
function p.scrollable(frame)
return main('scrollable')
end
 
function p.collapsible(frame)
return main('collapsible')
end
 
function p.aejot(frame)
return main('aejot')
end