Module:TOC
CodeDiscussionEditHistoryLinksLink count Subpages:DocumentationTestsResultsSandboxLive code All modules
Usage
[edit]{{#invoke:TOC|letters}}
Creates lists of anchors for {{CategoryTOC}}. Specify list items using numbered parameters. You can specify alternate display titles for each items using the "...T" paramters (|1T=
, |2T=
, |3T=
, etc) based on the position in the list, or the "...L" parameters (|AL=
, |BL=
, |CL=
, etc.) based on the name of each list item.
If you are specifying a range of numbers, instead of listing each item, you can use |start=
and |end=
, e.g. {{#invoke:TOC|letters|start=1|end=100}}
(these values will be ignored if they are not numbers), and an optional increment |by=
(whose default is 1). All number will be 0-padded to the length of the longest number, but display without 0-padding (see second example below).
You can also specify an optional |prefix=
(default is empty) to the sort keys used for indexing the categories members and to navigate to them from the generated links list.
Examples
[edit]"{{#invoke:TOC|letters}}"
→ """{{#invoke:TOC|letters|0|1|2|3|4|5|6|7|8|9}}"
→ """{{#invoke:TOC|letters|A|B|C|1T=First|2T=Second|3T=Third}}"
→ """{{#invoke:TOC|letters|start=1|end=31}}"
→ """{{#invoke:TOC|letters|start=1|end=31|by=2}}"
→ """{{#invoke:TOC|letters|start=1900|end={{CURRENTYEAR}}|by=10|prefix=+}}"
→ """{{#invoke:TOC|letters|start=7|end=12|01L={{Int:January}}|02L={{Int:February}}|03L={{Int:March}}|04L={{Int:April}}|05L={{Int:May}}|06L={{Int:June}}|07L={{Int:July}}|08L={{Int:August}}|09L={{Int:September}}|10L={{Int:October}}|11L={{Int:November}}|12L={{Int:December}}}}"
→ ""
Code
return {
letters = function(frame)
local origArgs = frame.args
if not origArgs[1] and not(tonumber(origArgs['start']) and tonumber(origArgs['start'])) then
origArgs = frame:getParent().args
if not origArgs[1] and not(tonumber(origArgs['start']) and tonumber(origArgs['start'])) then
return ''
end
end
local args
local prefix = origArgs.prefix or ''
local start = tonumber(origArgs['start'])
local limit = tonumber(origArgs['end'])
if start and limit then
args = {}
local incr = tonumber(origArgs.by) or 1
local form = '%0' .. math.floor(math.log10(limit) + 1) .. 'd'
local i = 1
for v = start, limit, incr do
v = string.format(form, v)
args[i] = v
if tonumber(v) ~= (prefix .. v) and not origArgs[i .. 'T'] then
origArgs[i .. 'T'] = tonumber(v)
end
i = i + 1
end
else
args = origArgs
end
local out = {}
local currentTitle = mw.title.getCurrentTitle()
for i, v in ipairs(args) do
local title = origArgs[v .. 'L'] or origArgs[i .. 'T'] or v
if currentTitle.namespace == 14 then --Category namespace
local url = currentTitle:fullUrl('from=' .. prefix .. v)
table.insert(out, '<li>[' .. url .. ' ' .. title .. ']</li>')
else
table.insert(out, '<li>[[#' .. prefix .. v .. '|' .. title .. ']]</li>')
end
end
return '<ul class="hlist plainlist" style="display:inline;margin:0;padding:0">' .. table.concat(out, ' ') .. '</ul>'
end
}