localp={}localazupper=mw.text.split('අආඇඈඉඊඋඌඍඎඑඒඓඔඕඖඅංඅඃ','')localazlower=mw.text.split('අආඇඈඉඊඋඌඍඎඑඒඓඔඕඖඅංඅඃ','')localaejot=mw.text.split('aejot','')functionp.scrollable(frame)returnmain('scrollable')endfunctionp.collapsible(frame)returnmain('collapsible')endfunctionp.aejot(frame)returnmain('aejot')endfunctionmain(toc_type)-- It should be much faster to only process these once, and just re use them as variableslocalpageurl=mw.title.getCurrentTitle():fullUrl()localtoc=mw.message.new('Toc'):plain()-- Highest level divlocaltoc_frame=mw.html.create('div'):addClass('plainlinks'):addClass('hlist'):addClass('toc')-- :attr('id','toc'):css({display='block !important',background='WhiteSmoke',clear='both',width='98%'})-- Contains "Content: Top 0-9 A - Z"localheader=toc_frame:tag('div'):attr('id','toctitle'):css('background','WhiteSmoke')-- Contains all the restlocalbody_wrapperlocalbody=toc_frame:tag('div'):css('text-align','center')iftoc_type=='collapsible'thentoc_frame:addClass('NavFrame')header:addClass('NavHead')body:addClass('NavContent'):css({background='white',display='none'})elseiftoc_type=='scrollable'thenbody:css({['overflow-x']='scroll',['overflow-y']='hidden',['white-space']='nowrap'})endlocalheader_content={'<strong>',toc,':</strong>',' [',pageurl,' Top]',' [',pageurl,'?from=0 0–9]'}for_,vinipairs(azupper)dotable.insert(header_content,string.format(' [%s?from=%s %s]',pageurl,v,v))endheader:wikitext(table.concat(header_content))localbody_content={}iftoc_type=='collapsible'thentable.insert(body_content,'<b>#</b> ')body_wrapper=body:tag('code'):css('background','White')elsetable.insert(body_content,'['..pageurl..'?from=* <b>*</b>] <b>#</b> ')body_wrapper=body:tag('span')endfori=0,9dotable.insert(body_content,string.format(' [%s?from=%s %s]',pageurl,i,i))endlocalfunctionatoz(letter)localazlist={}localletterlistiftoc_type=='aejot'thenletterlist=aejotelseletterlist=azlowerendiftoc_type=='aejot'ortoc_type=='scrollable'thentable.insert(azlist,' • <b>'..letter..'</b> ')elsetable.insert(azlist,'<br /><b>'..letter..'</b> ')endfor_,vinipairs(letterlist)dotable.insert(azlist,string.format(' [%s?from=%s%s %s%s] ',pageurl,letter,v,letter,v))endreturntable.concat(azlist)endfor_,vinipairs(azupper)dotable.insert(body_content,atoz(v))endbody_wrapper:wikitext(table.concat(body_content))return'__NOTOC__\n'..tostring(toc_frame)endreturnp