Difference between revisions of "Module:Large category TOC/sandbox"

From blackwiki
Jump to navigation Jump to search
blackwiki>The Mol Man
m (51 revisions imported)
 
(29 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
local p = {}
 
local p = {}
  
local azupper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+
local azupper = mw.text.split('ABCDEFGHIJKLMNOPQRSTUVWXYZ','')
local azlower = 'abcdefghijklmnopqrstuvwxyz'
+
local azlower = mw.text.split('abcdefghijklmnopqrstuvwxyz','')
local aejot = 'aejot'
+
local aejot = mw.text.split('aejot','')
  
-- Implements [[Template:Large Category TOC]]
 
 
function p.scrollable(frame)
 
function p.scrollable(frame)
 +
return main('scrollable')
 +
end
 +
 +
function p.collapsible(frame)
 +
return main('collapsible')
 +
end
 +
 +
function p.aejot(frame)
 +
return main('aejot')
 +
end
 +
 +
function main(toc_type)
 
-- It should be much faster to only process these once, and just re use them as variables
 
-- It should be much faster to only process these once, and just re use them as variables
 
local pageurl = mw.title.getCurrentTitle():fullUrl()
 
local pageurl = mw.title.getCurrentTitle():fullUrl()
 
local toc = mw.message.new('Toc'):plain()
 
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)
+
-- Highest level div
local title = '<div style="width:100%;">\n<span class="plainlinks">'..toc..':\n['..pageurl..' Top]'..
+
local toc_frame = mw.html.create('div')
'\n['..pageurl..'?from=0 0-9]'
+
:addClass('plainlinks')
-- Add ?from=A through Z to the title bar
+
:addClass('hlist')
for i=1,26,1 do
+
:addClass('toc')
local letter = string.sub(azupper,i,i)
+
-- :attr('id','toc')
title = title..'\n['..pageurl..'?from='..letter..' '..letter..']'
+
:css({ display = 'block !important',
end
+
background = 'WhiteSmoke',
-- Closing tags
+
clear = 'both',
title = title..'\n</span>\n</div>'
+
width = '98%' })
-- Begin the list parameter with ?from=*
 
local list = '<div style="overflow-x:auto; overflow-y:hidden; width:98%;"><span class="plainlinks">'..
 
'\n['..pageurl..'?from=* *] •'
 
  
-- Add ?from=0 through 9 to the list
+
-- Contains "Content: Top 0-9 A - Z"
for i=0,9,1 do
+
local header = toc_frame:tag('div')
list = list..'\n['..pageurl..'?from='..i..' '..i..']'
+
:attr('id','toctitle')
 +
:attr('class','toctitle')
 +
:css('background','WhiteSmoke')
 +
 +
-- Contains all the rest
 +
local body_wrapper
 +
local body = toc_frame:tag('div')
 +
:css('text-align', 'center')
 +
 +
if toc_type == 'collapsible' then
 +
toc_frame:addClass('NavFrame')
 +
header:addClass('NavHead')
 +
body:addClass('NavContent')
 +
:css({ background = 'white',
 +
display = 'none' })
 +
elseif toc_type == 'scrollable' then
 +
body:css({ ['overflow-x'] = 'scroll',
 +
['overflow-y']= 'hidden',
 +
['white-space'] = 'nowrap' })
 
end
 
end
-- A-Z loop that calls the a-z function
+
for i=1,26,1 do
+
local header_content = {toc,':',
local letter = string.sub(azupper,i,i)
+
' [',pageurl,' Top]',
list = list..atoz(letter,true,true,pageurl)
+
' [',pageurl,'?from=0 0–9]' }
 +
 +
for _, v in ipairs(azupper) do
 +
table.insert(header_content,string.format(' [%s?from=%s %s]',pageurl,v,v))
 
end
 
end
-- Close tags
+
header:wikitext(table.concat(header_content))
list = list..'\n</span></div>'
 
 
 
return frame:expandTemplate{title='Navigation bar',args={color='#f9f9f9;',title=title,list=list}}
+
local body_content = {}
end
 
 
 
-- Implements [[Template:Collapsible large category TOC]]
 
function p.collapsible(frame)
 
-- 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_string = '<div class="collapsible" style="background:transparent;">\n'..
+
if toc_type == 'collapsible' then
'<div class="NavFrame" style="clear:both; background:WhiteSmoke;">\n'..
+
table.insert(body_content,'<b>#</b> ')
'<div class="NavHead" style="background:WhiteSmoke;">\n'..
+
body_wrapper = body:tag('code')
'<div class="plainlinks" id="kat_toc" style="background:WhiteSmoke; text-align:center; font-size:100%;">\n'..
+
:css('background','White')
'<b>Index:</b> ['..pageurl..' *] ['..pageurl..'?from=# 0-9]'
+
else
-- Add ?from=A through Z to the title bar
+
table.insert(body_content,'['..pageurl..'?from=* <b>*</b>] <b>#</b> ')
for i=1,26,1 do
+
body_wrapper = body:tag('span')
local letter = string.sub(azupper,i,i)
 
toc_string = toc_string..' ['..pageurl..'?from='..letter..' '..letter..']'
 
 
end
 
end
-- Closing tags
+
toc_string = toc_string..'<span style="font-size: 85%;">(Click <i>Show</i> for more navigation options.)</span>'..
+
for i=0,9 do
'\n</div>\n</div>'..
+
table.insert(body_content,string.format(' [%s?from=%s %s]',pageurl,i,i))
'<div class="NavContent" style="background:White; display:none;">'..
 
'<div class="plainlinks" style="background:White; font-size:100%; text-align:center;">'..
 
'\n----'..
 
'\n<code style="background:White;"> <b>#</b>'
 
-- Add ?from=0 through 9 to the list
 
for i=0,9,1 do
 
toc_string = toc_string..'\n['..pageurl..'?from='..i..' '..i..']'
 
 
end
 
end
 
+
-- A-Z loop that calls the a-z function
+
local function atoz(letter)
for i=1,26,1 do
+
local azlist = {}
local letter = string.sub(azupper,i,i)
+
local letterlist
toc_string = toc_string..atoz(letter,true,false,pageurl)
+
if toc_type == 'aejot' then
 +
letterlist = aejot
 +
else
 +
letterlist = azlower
 +
end
 +
 +
if toc_type == 'aejot' or toc_type == 'scrollable' then
 +
table.insert(azlist,' • <b>'..letter..'</b> ')
 +
else
 +
table.insert(azlist,'<br /><b>'..letter..'</b> ')
 +
end
 +
 +
for _, v in ipairs(letterlist) do
 +
table.insert(azlist,string.format(' [%s?from=%s%s %s%s] ',pageurl,letter,v,letter,v))
 +
end
 +
return table.concat(azlist)
 
end
 
end
-- Close tags
 
toc_string = toc_string..'\n</code>\n</div></div></div>'
 
 
 
return toc_string
+
for _, v in ipairs(azupper) do
end
+
table.insert(body_content,atoz(v))
 
 
function atoz(letter,bullets,fullaz,url)
 
local azlist
 
local letterlist
 
local maxind
 
if fullaz then
 
letterlist = azlower
 
maxind = 26
 
else
 
letterlist = aejot
 
maxind = 5
 
end
 
 
if bullets then
 
azlist = '\n• <b>'..letter..'</b> '
 
else
 
azlist = '\n<br /><b>'..letter..'</b> '
 
 
end
 
end
 
 
for i=1,maxind,1 do
+
body_wrapper:wikitext(table.concat(body_content))
local lowerletter = string.sub(letterlist,i,i)
+
azlist = azlist..' ['..url..'?from='..letter..lowerletter..' '..letter..lowerletter..'] '
+
return '__NOTOC__\n'..tostring(toc_frame)
end
 
return azlist
 
 
end
 
end
+
 
 
return p
 
return p

Latest revision as of 06:11, 27 September 2020

Documentation for this module may be created at Module:Large category TOC/sandbox/doc

local p = {}

local azupper = mw.text.split('ABCDEFGHIJKLMNOPQRSTUVWXYZ','')
local azlower = mw.text.split('abcdefghijklmnopqrstuvwxyz','')
local aejot = mw.text.split('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

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',
						background = 'WhiteSmoke',
						clear = 'both',
						width = '98%' })

	-- Contains "Content: Top 0-9 A - Z"
	local header = toc_frame:tag('div')
				:attr('id','toctitle')
				:attr('class','toctitle')
				:css('background','WhiteSmoke')
	
	-- Contains all the rest
	local body_wrapper
	local body = toc_frame:tag('div')
					:css('text-align', 'center')
	
	if toc_type == 'collapsible' then
		toc_frame:addClass('NavFrame')
		header:addClass('NavHead')
		body:addClass('NavContent')
			:css({ background = 'white',
					display = 'none' })
	elseif toc_type == 'scrollable' then
		body:css({ ['overflow-x'] = 'scroll',
					['overflow-y']= 'hidden',
					['white-space'] = 'nowrap' })
	end
	
	local header_content = {toc,':',
						' [',pageurl,' Top]',
						' [',pageurl,'?from=0 0–9]' }
	
	for _, v in ipairs(azupper) do
		table.insert(header_content,string.format(' [%s?from=%s %s]',pageurl,v,v))
	end
	header:wikitext(table.concat(header_content))
	
	local body_content = {}
	
	if toc_type == 'collapsible' then
		table.insert(body_content,'<b>#</b> ')
		body_wrapper = body:tag('code')
						:css('background','White')
	else
		table.insert(body_content,'['..pageurl..'?from=* <b>*</b>] <b>#</b> ')
		body_wrapper = body:tag('span')
	end
	
	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
		if toc_type == 'aejot' then
			letterlist = aejot
		else
			letterlist = azlower
		end
				
		if toc_type == 'aejot' or toc_type == 'scrollable' then
			table.insert(azlist,' • <b>'..letter..'</b> ')
		else
			table.insert(azlist,'<br /><b>'..letter..'</b> ')
		end
			
		for _, v in ipairs(letterlist) do
			table.insert(azlist,string.format(' [%s?from=%s%s %s%s] ',pageurl,letter,v,letter,v))
		end
		return table.concat(azlist)
	end
	
	for _, v in ipairs(azupper) do
		table.insert(body_content,atoz(v))
	end
	
	body_wrapper:wikitext(table.concat(body_content))
	
	return '__NOTOC__\n'..tostring(toc_frame)
end

return p