Модуль:Navbox: различия между версиями

1725 байт убрано ,  1 год назад
Нет описания правки
--
-- Реализует {{Навигационная таблица}} и {{Подгруппы навигационной таблицы}}.
-- Этот модуль реализует {{Навигаций четлык}}.
-- Основной объём кода заимствован из английского Module:Navbox.
--
 
local args
local tableRowAdded = false
local border
local listnums = {}
local basestyle
local liststyle
local oddstyleevenodd_VARIABLE
local evenstyle
local evenoddARG
local abovestyle
local belowstyle
-- by parent navboxes. The result is that the category shows all pages
-- where a child navbox is not contained in a parent navbox.
local orphanCat = '[[КатегорийКатегория:Навигационные шаблоны без родителя]]'
if border == 'subgroup' and args.orphan ~= 'yes' then
-- No change; striping occurs in outermost navbox.
end
local first, second = 'odd', 'even'
if args.evenoddevenodd_VARIABLE then
if args.evenoddevenodd_VARIABLE == 'swap' then
first, second = second, first
else
first = args.evenoddevenodd_VARIABLE
second = first
end
return s
end
end
 
local function addTableRow(tbl)
-- If any other rows have already been added, then we add a 2px gutter row.
if tableRowAdded then
tbl
:tag('tr')
:css('height', '2px')
:tag('td')
:attr('colspan',2)
end
 
tableRowAdded = true
 
return tbl:tag('tr')
end
 
local function renderNavBar(titleCell)
 
if navbar ~= 'off' and navbar ~= 'plain' and not (not name and mw.getCurrentFrame():getParent():getTitle():gsub('/песочница$', '') == 'КышкарШаблон:НавигацийНавигационная четлыктаблица') then
-- Check color contrast of the gear icon
:css('width', '5em')
:css('margin-right', '0.5em')
:wikitext('[[Файл:Wikipedia interwiki section gear icon' .. gearColor .. '.svg|14px|Просмотр этого шаблона|link=КышкарШаблон:' .. name .. '|alt=⛭]]')
end
 
if not maintitle then return end
 
local titleRow = addTableRow(tbl:tag('tr')
 
if args.titlegroup then
if not above then return end
 
tbl:tag('tr')
addTableRow(tbl)
:tag('td')
:addClass('navbox-abovebelow')
if not below then return end
 
tbl:tag('tr')
addTableRow(tbl)
:tag('td')
:addClass('navbox-abovebelow')
local function haveSubgroups()
for i = 1, 23 do
if (args['group' .. i] or args['вуймутзаголовок' .. i] or args['группа' .. i]) and (args['list' .. i] or args['лӱмерсписок' .. i]) then
return true
end
 
local function renderListRow(tbl, index, listnum)
local row = addTableRow(tbl:tag('tr')
 
if index == 1 and imageleft then
:addClass('navbox-image')
:addClass(imageclass)
:css('width', '1%1px')
:css('padding', '0px 7px 0px 0px')
:cssText(imageleftstyle)
:attr('rowspan', 2 * #listnums - 1)
:tag('div')
:wikitext(addNewline(imageleft))
end
 
if (args['group' .. listnum] or args['вуймутзаголовок' .. listnum] or args['группа' .. listnum]) then
local groupCell = row:tag('th')
 
:addClass(groupclass)
:cssText(basestyle)
:css('width', groupwidth or '1px') -- If groupwidth not specified, minimize width
 
-- заголовки без списков - для обратной совместимости, только в нашем разделе
if not (args['list' .. listnum] or args['лӱмер' .. listnum]) then
groupCell
:css('text-align', 'center')
if haveSubgroups() then
groupCell:attr('colspan', 2)
end
end
 
if groupwidth then
groupCell:css('width', groupwidth)
end
 
groupCell
:cssText(groupstyle)
:cssText(args['group' .. listnum .. 'style'] or args['стиль_группы' .. listnum] or args['стиль_заголовка' .. listnum])
:wikitext(args['group' .. listnum] or args['вуймутзаголовок' .. listnum] or args['группа' .. listnum])
end
 
local listCell = row:tag('td')
if args['list' .. listnum] or args['лӱмер' .. listnum] then -- проверка на наличие списков, иначе временный наш безсписочный функционал не поддерживается
 
local listCell = row:tag('td')
if (args['group' .. listnum] or args['заголовок' .. listnum] or args['группа' .. listnum]) then
listCell
if (args['group' .. listnum] or args['вуймут' .. listnum] or args['группа' .. listnum]) then
:css('text-align', 'left')
:css('border-left-width', '2px')
:css('border-left-style', 'solid')
else
if haveSubgroups() then
listCell
:cssattr('text-aligncolspan', 'left'2)
:css('border-left-width', '2px')
:css('border-left-style', 'solid')
else
if haveSubgroups() then
listCell
:attr('colspan', 2)
end
end
if not groupwidth then
listCell:css('width', '100%')
end
local rowstyle -- usually nil so cssText(rowstyle) usually adds nothing
if index % 2 == 1 then
rowstyle = oddstyle
else
rowstyle = evenstyle
end
local listText = args['list' .. listnum] or args['лӱмер' .. listnum]
local oddEven = ODD_EVEN_MARKER
if listText:sub(1, 12) == '</div><table' then
-- Assume list text is for a subgroup navbox so no automatic striping for this row.
oddEven = listText:find('<th[^>]*"navbox%-title"') and RESTART_MARKER or 'odd'
end
listCell
:css('padding', '0px')
:cssText(liststyle)
:cssText(rowstyle)
:cssText(args['list' .. listnum .. 'style'] or args['лӱмер_стиль' .. listnum])
:addClass('navbox-list')
:addClass('navbox-' .. oddEven)
:addClass(listclass)
:tag('div')
:css('padding', (index == 1 and args.list1padding) or listpadding or '0em 0.25em')
:wikitext(addNewline(listText))
end
 
if not groupwidth then
listCell:css('width', '100%')
end
 
local listText = args['list' .. listnum] or args['список' .. listnum]
local oddEven = ODD_EVEN_MARKER
if listText:sub(1, 12) == '</div><table' then
-- Assume list text is for a subgroup navbox so no automatic striping for this row.
oddEven = listText:find('<th[^>]*"navbox%-title"') and RESTART_MARKER or 'odd'
end
listCell
:css('padding', '0px')
:cssText(liststyle)
:cssText(args['list' .. listnum .. 'style'] or args['стиль_списка' .. listnum])
:addClass('navbox-list')
:addClass('navbox-' .. oddEven)
:addClass(listclass)
:tag('div')
:css('padding', args['list' .. listnum .. 'padding'] or listpadding or '0em 0.25em')
:wikitext(addNewline(listText))
 
if index == 1 and image then
:addClass('navbox-image')
:addClass(imageclass)
:css('width', '1%1px')
:css('padding', '0px 0px 0px 7px')
:cssText(imagestyle)
:attr('rowspan', 2 * #listnums - 1)
:tag('div')
:wikitext(addNewline(image))
local function needsChangetoSubgroups()
for i = 1, 23 do
if (args['group' .. i] or args['вуймутзаголовок' .. i] or args['группа' .. i]) and not (args['list' .. i] or args['лӱмерсписок' .. i]) then
return true
end
if title.namespace ~= 10 then return end -- not in template space
local subpage = title.subpageText
if subpage == 'doc' or subpage == 'песочница' or subpage == 'тест-влактесты' then return end
 
for i, cat in ipairs(getTrackingCategories()) do
builder:wikitext('[[КатегорийКатегория:' .. cat .. ']]')
end
end
 
for k, v in pairs(args) do
local listnum = ('' .. k):match('^list(%d+)$') or ('' .. k):match('^лӱмерсписок(%d+)$')
if listnum then table.insert(listnums, tonumber(listnum)) end
end
 
-- заголовки без списков - для обратной совместимости, только в нашем разделе
for k, v in pairs(args) do
local double = false
local groupnum = ('' .. k):match('^вуймут(%d+)$') --group не нужен, так как в английском шаблоне эта функциональность не поддерживается
if groupnum then
for k2, v2 in pairs(listnums) do
if tonumber(groupnum) == v2 then
double = true
break
end
end
if not double then table.insert(listnums, tonumber(groupnum)) end --добавляем только номера заголовков, для которых нет списков
end
end
end
maintitle = args.title or args['вуймутзаголовок']
navbar = args.navbar or args['ссылка_на_просмотр']
name = args.name or args['лӱмимя']
above = args.above or args['вверху']
image = args.image or args['сӱретизображение']
imagestyle = args.imagestyle or args['стиль_изображения']
imageleft = args.imageleft or args['сӱрет2изображение2'] or args['изображение_слева']
imageleftstyle = args.imageleftstyle or args.imagestyle2 or args['стиль_изображения_слева']
below = args.below or args['внизу']
titlestyle = args.titlestyle or args['стиль_основного_заголовка'] or args['стиль_заголовка']
groupstyle = args.groupstyle or args['стиль_заголовков'] or args['стиль_групп']
bodystyle = args.bodystyle or args['кап_стильстиль_тела']
basestyle = args.basestyle or args['стиль_базовый'] or args['стиль']
style = args.style
liststyle = args.liststyle or args['стиль_списков']
oddstyle = args.oddstyle or args['стиль_нечётных'] or args['стиль_нечетных']
evenstyle = args.evenstyle or args['стиль_чётных'] or args['стиль_четных']
abovestyle = args.abovestyle or args['стиль_вверху']
belowstyle = args.belowstyle or args['стиль_внизу']
evenoddARGevenodd_VARIABLE = args.evenodd or args['чётные_нечётные'] or args['четные_нечетные']
groupwidth = args.groupwidth or args['ширина_групп']
listpadding = args.listpadding or args['отступ_списков']
bodyclass = args.bodyclass or args['кап_класскласс_тела']
titleclass = args.titleclass or args['вуймут класскласс_заголовка']
aboveclass = args.aboveclass or args['класс_вверху']
belowclass = args.belowclass or args['класс_внизу']
groupclass = args.groupclass or args['класс_групп']
getArgs = require('Module:Arguments').getArgs
end
args = getArgs(frame, {wrappers = {'КышкарШаблон:НавигацийНавигационная четлыктаблица', 'КышкарШаблон:НавигацийПодгруппы четлык/песочницанавигационной таблицы'}})
if frame.args.border then
 
-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.
args.border = frame.args.border
end
-- Read the arguments in the order they'll be output in, to make references number in the right order.
local _
_ = above
for i = 1, 23 do
_ = args["group" .. tostring(i)] and args["вуймутзаголовок" .. tostring(i)] and args["группа" .. tostring(i)]
_ = args["list" .. tostring(i)] and args["лӱмерсписок" .. tostring(i)]
end
_ = below
12 113

правок