Module:Large category TOC: Difference between revisions

Safer nicotine wiki Tobacco Harm Reduction
Jump to navigation Jump to search
m (1 revision imported)
m (1 revision imported)
 
(One intermediate revision by one other user not shown)
Line 5: Line 5:
local aejot = mw.text.split('aejot','')
local aejot = mw.text.split('aejot','')


function p.scrollable(frame)
local function main(toc_type)
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')
local toc_frame = mw.html.create('div')
:addClass('plainlinks')
:addClass('large-cat-toc')
:addClass('hlist')
:addClass('plainlinks')
:addClass('toc')
:addClass('toc')
-- :attr('id','toc')
-- :attr('id','toc')
:css({
display = 'block',
background = 'WhiteSmoke',
clear = 'both',
width = '98%'
})
 
-- Contains "Content: Top 0-9 A - Z"
-- Contains "Content: Top 0-9 A - Z"
local header = toc_frame:tag('div')
local header = toc_frame:tag('div')
:attr('id', 'toctitle')
:attr('class', 'toctitle')
:attr('class', 'toctitle')
Line 43: Line 19:
local body_wrapper
local body_wrapper
local body = toc_frame:tag('div')
local body = toc_frame:tag('div')
:css('text-align', 'center')
:addClass('large-cat-toc-body')
local jumpy_collapse = mw.html.create('div')
local jumpy_collapse = mw.html.create('div')
:cssText('margin: 0 4em')
:addClass('large-cat-toc-jumpy-title')
if toc_type == 'collapsible' then
if toc_type == 'collapsible' then
toc_frame:addClass('mw-collapsible mw-collapsed')
toc_frame:addClass('mw-collapsible mw-collapsed')
:cssText('padding: 4px; text-align: center; border: 1px solid #a2a9b1; font-size: 95%')
header:cssText('font-weight: bold; line-height: 1.6em')
body:addClass('mw-collapsible-content')
body:addClass('mw-collapsible-content')
:css({
background = 'white'
})
elseif toc_type == 'scrollable' then
elseif toc_type == 'scrollable' then
body:css({ ['overflow-x'] = 'scroll',
toc_frame:addClass('large-cat-toc-scroll')
['overflow-y']= 'hidden',
['white-space'] = 'nowrap' })
end
end
local header_content = {'<span style="font-weight: bold">',toc,':</span>',
local pageurl = mw.title.getCurrentTitle():fullUrl()
' [',pageurl,' Top]',
local header_content = {
' [',pageurl,'?from=0 0–9]' }
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) do
for _, v in ipairs(azupper) do
table.insert(header_content,string.format(' [%s?from=%s %s]',pageurl,v,v))
table.insert(header_content, string.format(
' [%s?from=%s %s]', pageurl, v, v
))
end
end
Line 78: Line 56:
local body_content = {}
local body_content = {}
if toc_type ~= 'collapsible' then
table.insert(body_content, '<span class="large-cat-toc-anum">['..pageurl..'?from=* *]</span> ')
end
if toc_type == 'collapsible' then
table.insert(body_content, '<span class="large-cat-toc-anum">#</span> ')
table.insert(body_content,'<b>#</b> ')
body_wrapper = body:tag('span')
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
for i=0,9 do
Line 102: Line 77:
if toc_type == 'aejot' or toc_type == 'scrollable' then
if toc_type == 'aejot' or toc_type == 'scrollable' then
table.insert(azlist,' • <b>'..letter..'</b> ')
table.insert(azlist,' • <span class="large-cat-toc-anum">'..letter..'</span> ')
else
else
table.insert(azlist,'<br /><b>'..letter..'</b> ')
table.insert(azlist,'<br /><span class="large-cat-toc-anum">'..letter..'</span> ')
end
end
for _, v in ipairs(letterlist) do
for _, v in ipairs(letterlist) do
table.insert(azlist,string.format(' [%s?from=%s%s %s%s] ',pageurl,letter,v,letter,v))
table.insert(azlist, string.format(
' [%s?from=%s%s %s%s] ', pageurl, letter, v, letter, v
))
end
end
return table.concat(azlist)
return table.concat(azlist)
Line 114: Line 91:
for _, v in ipairs(azupper) do
for _, v in ipairs(azupper) do
table.insert(body_content,atoz(v))
table.insert(body_content, atoz(v))
end
end
body_wrapper:wikitext(table.concat(body_content))
body_wrapper:wikitext(table.concat(body_content))
return '__NOTOC__\n'..tostring(toc_frame)
return '__NOTOC__\n' .. mw.getCurrentFrame():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
end


return p
return p

Latest revision as of 03:42, 5 December 2021

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

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 rest
	local body_wrapper
	local 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' then
		toc_frame:addClass('mw-collapsible mw-collapsed')
		body:addClass('mw-collapsible-content')
		
	elseif toc_type == 'scrollable' then
		toc_frame:addClass('large-cat-toc-scroll')
	end
	
	local 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) do
		table.insert(header_content, string.format(
			' [%s?from=%s %s]', pageurl, v, v
		))
	end
	
	if toc_type == 'collapsible' then
		jumpy_collapse:wikitext(table.concat(header_content))
		header:node(jumpy_collapse)
	else
		header:wikitext(table.concat(header_content))
	end
	
	local body_content = {}
	if toc_type ~= 'collapsible' then
		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
		if toc_type == 'aejot' then
			letterlist = aejot
		else
			letterlist = azlower
		end
				
		if toc_type == 'aejot' or toc_type == 'scrollable' then
			table.insert(azlist,' • <span class="large-cat-toc-anum">'..letter..'</span> ')
		else
			table.insert(azlist,'<br /><span class="large-cat-toc-anum">'..letter..'</span> ')
		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' .. mw.getCurrentFrame():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

return p