Jump to content

Module:Auto compact TOC: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
m remove whitespace above ToC
check for common headers that have parameters in Template:compact ToC and add them on a line below the list of letters
Line 10: Line 10:
local close = [[</div></div>]]
local close = [[</div></div>]]


function p.make_TOC()
local function make_TOC_item(anchor, link_text)
link_text = link_text or anchor
return ("* [[#%s|%s]]"):format(anchor, link_text)
end

local Array_mt = { __index = table }
local function Array()
return setmetatable({}, Array_mt)
end

function p.make_TOC(frame)
local content = mw.title.getCurrentTitle():getContent()
local content = mw.title.getCurrentTitle():getContent()
local letters = setmetatable({}, { __index = table })
local letters = Array()
-- Find uppermost headers containing a single ASCII letter.
-- Find uppermost headers containing a single ASCII letter.
for letter in content:gmatch "%f[^\n]==%s*(%a)%s*==%f[^=]" do
for letter in content:gmatch "%f[^\n]==%s*(%a)%s*==%f[^=]" do
letter = letter:upper()
letter = letter:upper()
letters:insert(("* [[#%s|%s]]"):format(letter, letter))
letters:insert(make_TOC_item(letter))
end
end
local yesno = require "Module:Yesno"
return start .. letters:concat("\n") .. close
local rest = Array()
local other_headers = require "Module:table".listToSet{
"See also", "References", "Notes", "Further reading", "External links",
}
for header in content:gmatch "%f[^\n]==%s*(..-)%s*==%f[^=]" do
if other_headers[header] then
rest:insert(make_TOC_item(header))
end
end
return start .. letters:concat("\n") .. "\n\n" .. rest:concat("\n") .. close
end
end



Revision as of 03:15, 21 February 2019

local p = {}

local start = [[
__NOTOC__<!--
--><div role="navigation" id="toc" class="toc plainlinks hlist" aria-labelledby="tocheading" style="text-align:left;">
<div id="toctitle" class="toctitle" style="text-align:center;"><span id="tocheading" style="font-weight:bold;">Contents</span></div>
<div style="margin:auto;white-space:nowrap;">
]]

local close = [[</div></div>]]

local function make_TOC_item(anchor, link_text)
	link_text = link_text or anchor
	return ("* [[#%s|%s]]"):format(anchor, link_text)
end

local Array_mt = { __index = table }
local function Array()
	return setmetatable({}, Array_mt)
end

function p.make_TOC(frame)
	local content = mw.title.getCurrentTitle():getContent()
	
	local letters = Array()
	-- Find uppermost headers containing a single ASCII letter.
	for letter in content:gmatch "%f[^\n]==%s*(%a)%s*==%f[^=]" do
		letter = letter:upper()
		letters:insert(make_TOC_item(letter))
	end
	
	local yesno = require "Module:Yesno"
	local rest = Array()
	local other_headers = require "Module:table".listToSet{
		"See also", "References", "Notes", "Further reading", "External links",
	}
	for header in content:gmatch "%f[^\n]==%s*(..-)%s*==%f[^=]" do
		if other_headers[header] then
			rest:insert(make_TOC_item(header))
		end
	end
	
	return start .. letters:concat("\n") .. "\n\n" .. rest:concat("\n") .. close
end

return p