Module:Auto compact TOC: Difference between revisions
Appearance
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 |
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 = |
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(( |
letters:insert(make_TOC_item(letter)) |
||
end |
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 |
|||
⚫ | |||
end |
end |
||
Revision as of 03:15, 21 February 2019
![]() | This module depends on the following other modules: |
Implements {{auto compact TOC}}
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