Module:Large category TOC

local p = {}local azupper = mw.text.split('ABCDEFGHIJKLMNOPQRSTUVWXYZ','')local azlower = mw.text.split('abcdefghijklmnopqrstuvwxyz','')local aejot = mw.text.split('aejot','')local function main(toc_type)local toc_frame = mw.html.create('div'):addClass('large-cat-toc'):addClass('plainlinks'):addClass('toc')-- :attr('id','toc')-- Contains "Content: Top 0-9 A - Z"local header = toc_frame:tag('div'):attr('class', 'toctitle')-- Contains all the restlocal body_wrapperlocal body = toc_frame:tag('div'):addClass('large-cat-toc-body')local jumpy_collapse = mw.html.create('div'):addClass('large-cat-toc-jumpy-title')if toc_type == 'collapsible' thentoc_frame:addClass('mw-collapsible mw-collapsed')body:addClass('mw-collapsible-content')elseif toc_type == 'scrollable' thentoc_frame:addClass('large-cat-toc-scroll')endlocal pageurl = mw.title.getCurrentTitle():fullUrl()local header_content = {string.format('<span class="large-cat-toc-title">%s:</span> [%s Top] [%s?from=0 0–9]',mw.message.new('Toc'):plain(),pageurl,pageurl)}for _, v in ipairs(azupper) dotable.insert(header_content, string.format(' [%s?from=%s %s]', pageurl, v, v))endif toc_type == 'collapsible' thenjumpy_collapse:wikitext(table.concat(header_content))header:node(jumpy_collapse)elseheader:wikitext(table.concat(header_content))endlocal body_content = {}if toc_type ~= 'collapsible' thentable.insert(body_content, ' <span class="large-cat-toc-anum">['..pageurl..'?from=* *]</span>')endtable.insert(body_content, ' <span class="large-cat-toc-anum">#</span>')body_wrapper = body:tag('span')for i=0,9 dotable.insert(body_content,string.format(' [%s?from=%s %s]',pageurl,i,i))endlocal function atoz(letter)local azlist = {}local letterlistif toc_type == 'aejot' thenletterlist = aejotelseletterlist = azlowerendif toc_type == 'aejot' or toc_type == 'scrollable' thentable.insert(azlist,' • <span class="large-cat-toc-anum">'..letter..'</span>')elsetable.insert(azlist,' <br /><span class="large-cat-toc-anum">'..letter..'</span>')endfor _, v in ipairs(letterlist) dotable.insert(azlist, string.format(' [%s?from=%s%s %s%s]', pageurl, letter, v, letter, v))endreturn table.concat(azlist)endfor _, v in ipairs(azupper) dotable.insert(body_content, atoz(v))endbody_wrapper:wikitext(table.concat(body_content))return '__NOTOC__\n' .. mw.getCurrentFrame():extensionTag{name = 'templatestyles', args = { src = 'Module:Large category TOC/styles.css' }} .. tostring(toc_frame)endfunction p.scrollable(frame)return main('scrollable')endfunction p.collapsible(frame)return main('collapsible')endfunction p.aejot(frame)return main('aejot')endreturn p