Модуль:Large category TOC
Зовнішній вигляд

![]() | Цей модуль позначений як К:реліз, готовий до загального вжитку (74). Він досягнув стадії готовності й вважається, що вільний від помилок і може використовуватись всюди, де знадобиться. Його можна вживати на допоміжних сторінках та інших сторінках Вікіпедії як можливість для навчання новачків. Аби зменшити навантаження на сервери та некоректний показ сторінок, його можна вдосконалювати в рамцях чернеткового тестування[en], а не з застосуванням спроб і помилок. |
![]() | Цей модуль використовує TemplateStyles: |
Використання
[ред. код]Цей модуль впроваджує роботу шаблону Шаблон:Large category TOC та подібних шаблонів. Він використовується в категоріях з великою кількістю сторінок з метою забезпечити індексування за першою літерою та за першими двома літерами.
Для повного списку (Шаблон:Large category TOC):
{{#invoke:Large category TOC|aejot}}
Для прихованого списку (Шаблон:Collapsible large category TOC):
{{#invoke:Large category TOC|collapsible}}
Документація вище включена з Модуль:Large category TOC/документація. (ред. | історія) Дописувачі можуть експериментувати на підсторінках пісочниці (ред. | різн.) та тести (створити) цього модуля. Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки. |
local p = {}
local ayaupper = mw.text.split('АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЧШЩЮЯ','')
local ayalower = mw.text.split('абвгґдеєжзиіїйклмнопрстуфхцчшщюя','')
local azupper = mw.text.split('ABCDEFGHIJKLMNOPQRSTUVWXYZ','')
local azlower = mw.text.split('abcdefghijklmnopqrstuvwxyz','')
local aejotuk = mw.text.split('аейот','')
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?from=0 0–9] •',
mw.message.new('Toc'):plain(),
pageurl
)
}
for _, v in ipairs(ayaupper) do
table.insert(header_content, string.format(
' [%s?from=%s %s]', pageurl, v, v
))
end
table.insert(header_content, string.format('<br>[%s На початок]', 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, type)
local azlist = {}
local letterlist
local lettertype = {}
if type == 'latin' then
lettertype = {aejot, azlower}
else
lettertype = {aejotuk, ayalower}
end
if toc_type == 'aejot' then
letterlist = lettertype[1]
else
letterlist = lettertype[2]
end
if toc_type == 'aejot' or toc_type == 'scrollable' then
local text
if letter == 'A' then
text = '<span class="large-cat-toc-anum">'
else
text = ' • <span class="large-cat-toc-anum">'
end
table.insert(azlist,text..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(ayaupper) do
table.insert(body_content, atoz(v, 'cyrillic'))
end
if toc_type == 'aejot' then
table.insert(body_content, '<br>')
end
for _, v in ipairs(azupper) do
table.insert(body_content, atoz(v, 'latin'))
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