3664
правки
Mansur700 (обсуждение | вклад) (Керла агӀо: «-- -- Лелош ю {{Шавуьгачуьна таблица}} иза {{Шавуьгачуьна таблицан тобанаш}}. -- Шайолу ишар схьаэц...») |
Mansur700 (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
-- | -- | ||
-- | -- Реализует {{Навигационная таблица}} и {{Подгруппы навигационной таблицы}}. | ||
-- | -- Основной объём кода заимствован из английского Module:Navbox. | ||
-- | -- | ||
Строка 27: | Строка 27: | ||
local basestyle | local basestyle | ||
local liststyle | local liststyle | ||
local | local evenodd_VARIABLE | ||
local abovestyle | local abovestyle | ||
local belowstyle | local belowstyle | ||
Строка 52: | Строка 50: | ||
-- by parent navboxes. The result is that the category shows all pages | -- by parent navboxes. The result is that the category shows all pages | ||
-- where a child navbox is not contained in a parent navbox. | -- where a child navbox is not contained in a parent navbox. | ||
local orphanCat = '[[ | local orphanCat = '[[Категория:Навигационные шаблоны без родителя]]' | ||
if border == 'subgroup' and args.orphan ~= 'yes' then | if border == 'subgroup' and args.orphan ~= 'yes' then | ||
-- No change; striping occurs in outermost navbox. | -- No change; striping occurs in outermost navbox. | ||
Строка 58: | Строка 56: | ||
end | end | ||
local first, second = 'odd', 'even' | local first, second = 'odd', 'even' | ||
if | if evenodd_VARIABLE then | ||
if | if evenodd_VARIABLE == 'swap' then | ||
first, second = second, first | first, second = second, first | ||
else | else | ||
first = | first = evenodd_VARIABLE | ||
second = first | second = first | ||
end | end | ||
Строка 98: | Строка 96: | ||
local function renderNavBar(titleCell) | local function renderNavBar(titleCell) | ||
if navbar ~= 'off' and navbar ~= 'plain' and not (not name and mw.getCurrentFrame():getParent():getTitle():gsub('/ | if navbar ~= 'off' and navbar ~= 'plain' and not (not name and mw.getCurrentFrame():getParent():getTitle():gsub('/песочница$', '') == 'Шаблон:Навигационная таблица') then | ||
-- Check color contrast of the gear icon | -- Check color contrast of the gear icon | ||
Строка 117: | Строка 115: | ||
:css('width', '5em') | :css('width', '5em') | ||
:css('margin-right', '0.5em') | :css('margin-right', '0.5em') | ||
:wikitext('[[ | :wikitext('[[Файл:Wikipedia interwiki section gear icon' .. gearColor .. '.svg|14px|Просмотр этого шаблона|link=Шаблон:' .. name .. '|alt=⛭]]') | ||
end | end | ||
Строка 217: | Строка 215: | ||
local function haveSubgroups() | local function haveSubgroups() | ||
for i = 1, 23 do | for i = 1, 23 do | ||
if (args['group' .. i] or args[' | if (args['group' .. i] or args['заголовок' .. i] or args['группа' .. i]) and (args['list' .. i] or args['список' .. i]) then | ||
return true | return true | ||
end | end | ||
Строка 240: | Строка 238: | ||
end | end | ||
if (args['group' .. listnum] or args[' | if (args['group' .. listnum] or args['заголовок' .. listnum] or args['группа' .. listnum]) then | ||
local groupCell = row:tag('th') | local groupCell = row:tag('th') | ||
Строка 252: | Строка 250: | ||
groupCell | groupCell | ||
:cssText(groupstyle) | :cssText(groupstyle) | ||
:cssText(args['group' .. listnum .. 'style'] or args[' | :cssText(args['group' .. listnum .. 'style'] or args['стиль_группы' .. listnum] or args['стиль_заголовка' .. listnum]) | ||
:wikitext(args['group' .. listnum] or args[' | :wikitext(args['group' .. listnum] or args['заголовок' .. listnum] or args['группа' .. listnum]) | ||
end | end | ||
local listCell = row:tag('td') | local listCell = row:tag('td') | ||
if (args['group' .. listnum] or args[' | if (args['group' .. listnum] or args['заголовок' .. listnum] or args['группа' .. listnum]) then | ||
listCell | listCell | ||
:css('text-align', 'left') | :css('text-align', 'left') | ||
Строка 274: | Строка 272: | ||
end | end | ||
local listText = args['list' .. listnum] or args['список' .. listnum] | |||
local listText = args['list' .. listnum] or args[' | |||
local oddEven = ODD_EVEN_MARKER | local oddEven = ODD_EVEN_MARKER | ||
if listText:sub(1, 12) == '</div><table' then | if listText:sub(1, 12) == '</div><table' then | ||
Строка 290: | Строка 281: | ||
:css('padding', '0px') | :css('padding', '0px') | ||
:cssText(liststyle) | :cssText(liststyle) | ||
:cssText(args['list' .. listnum .. 'style'] or args['стиль_списка' .. listnum]) | |||
:cssText(args['list' .. listnum .. 'style'] or args[' | |||
:addClass('navbox-list') | :addClass('navbox-list') | ||
:addClass('navbox-' .. oddEven) | :addClass('navbox-' .. oddEven) | ||
Строка 318: | Строка 308: | ||
local function needsChangetoSubgroups() | local function needsChangetoSubgroups() | ||
for i = 1, 23 do | for i = 1, 23 do | ||
if (args['group' .. i] or args[' | if (args['group' .. i] or args['заголовок' .. i] or args['группа' .. i]) and not (args['list' .. i] or args['список' .. i]) then | ||
return true | return true | ||
end | end | ||
Строка 345: | Строка 335: | ||
for key, style in pairs(args) do | for key, style in pairs(args) do | ||
if tostring(key):match("style$") or tostring(key):match("^ | if tostring(key):match("style$") or tostring(key):match("^стиль") then | ||
if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then | if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then | ||
return true | return true | ||
Строка 356: | Строка 346: | ||
local function getTrackingCategories() | local function getTrackingCategories() | ||
local cats = {} | local cats = {} | ||
if needsChangetoSubgroups() then table.insert(cats, ' | if needsChangetoSubgroups() then table.insert(cats, 'Навигационные шаблоны с ошибочным использованием заголовков') end | ||
if needsHorizontalLists() then table.insert(cats, ' | if needsHorizontalLists() then table.insert(cats, 'Навигационные шаблоны без горизонтальных списков') end | ||
if isIllegible() then table.insert(cats, ' | if isIllegible() then table.insert(cats, 'Потенциально нечитаемые навигационные шаблоны') end | ||
return cats | return cats | ||
end | end | ||
Строка 366: | Строка 356: | ||
if title.namespace ~= 10 then return end -- not in template space | if title.namespace ~= 10 then return end -- not in template space | ||
local subpage = title.subpageText | local subpage = title.subpageText | ||
if subpage == 'doc' or subpage == ' | if subpage == 'doc' or subpage == 'песочница' or subpage == 'тесты' then return end | ||
for i, cat in ipairs(getTrackingCategories()) do | for i, cat in ipairs(getTrackingCategories()) do | ||
builder:wikitext('[[ | builder:wikitext('[[Категория:' .. cat .. ']]') | ||
end | end | ||
end | end | ||
Строка 415: | Строка 405: | ||
for k, v in pairs(args) do | for k, v in pairs(args) do | ||
local listnum = ('' .. k):match('^list(%d+)$') or ('' .. k):match('^ | local listnum = ('' .. k):match('^list(%d+)$') or ('' .. k):match('^список(%d+)$') | ||
if listnum then table.insert(listnums, tonumber(listnum)) end | if listnum then table.insert(listnums, tonumber(listnum)) end | ||
end | end | ||
Строка 426: | Строка 416: | ||
end | end | ||
maintitle = args.title or args[' | maintitle = args.title or args['заголовок'] | ||
navbar = args.navbar or args[' | navbar = args.navbar or args['ссылка_на_просмотр'] | ||
name = args.name or args[' | name = args.name or args['имя'] | ||
above = args.above or args[' | above = args.above or args['вверху'] | ||
image = args.image or args[' | image = args.image or args['изображение'] | ||
imagestyle = args.imagestyle or args[' | imagestyle = args.imagestyle or args['стиль_изображения'] | ||
imageleft = args.imageleft or args[' | imageleft = args.imageleft or args['изображение2'] or args['изображение_слева'] | ||
imageleftstyle = args.imageleftstyle or args.imagestyle2 or args[' | imageleftstyle = args.imageleftstyle or args.imagestyle2 or args['стиль_изображения_слева'] | ||
below = args.below or args[' | below = args.below or args['внизу'] | ||
titlestyle = args.titlestyle or args[' | titlestyle = args.titlestyle or args['стиль_основного_заголовка'] or args['стиль_заголовка'] | ||
groupstyle = args.groupstyle or args[' | groupstyle = args.groupstyle or args['стиль_заголовков'] or args['стиль_групп'] | ||
bodystyle = args.bodystyle or args[' | bodystyle = args.bodystyle or args['стиль_тела'] | ||
basestyle = args.basestyle or args[' | basestyle = args.basestyle or args['стиль_базовый'] or args['стиль'] | ||
style = args.style | style = args.style | ||
liststyle = args.liststyle or args[' | liststyle = args.liststyle or args['стиль_списков'] | ||
abovestyle = args.abovestyle or args['стиль_вверху'] | |||
belowstyle = args.belowstyle or args['стиль_внизу'] | |||
abovestyle = args.abovestyle or args[' | evenodd_VARIABLE = args.evenodd or args['чётные_нечётные'] or args['четные_нечетные'] | ||
belowstyle = args.belowstyle or args[' | |||
groupwidth = args.groupwidth or args[' | groupwidth = args.groupwidth or args['ширина_групп'] | ||
listpadding = args.listpadding or args[' | listpadding = args.listpadding or args['отступ_списков'] | ||
bodyclass = args.bodyclass or args[' | bodyclass = args.bodyclass or args['класс_тела'] | ||
titleclass = args.titleclass or args[' | titleclass = args.titleclass or args['класс_заголовка'] | ||
aboveclass = args.aboveclass or args[' | aboveclass = args.aboveclass or args['класс_вверху'] | ||
belowclass = args.belowclass or args[' | belowclass = args.belowclass or args['класс_внизу'] | ||
groupclass = args.groupclass or args[' | groupclass = args.groupclass or args['класс_групп'] | ||
listclass = args.listclass or args[' | listclass = args.listclass or args['класс_списков'] | ||
imageclass = args.imageclass or args[' | imageclass = args.imageclass or args['класс_изображения'] | ||
-- render the main body of the navbox | -- render the main body of the navbox | ||
Строка 470: | Строка 458: | ||
nav:attr('aria-labelledby', mw.uri.anchorEncode(maintitle)) | nav:attr('aria-labelledby', mw.uri.anchorEncode(maintitle)) | ||
else | else | ||
nav:attr('aria-label', ' | nav:attr('aria-label', 'Навигационный шаблон') | ||
end | |||
if name and name ~= '-' then | |||
nav:attr('data-name', name) | |||
end | end | ||
elseif border == 'subgroup' then | elseif border == 'subgroup' then | ||
Строка 491: | Строка 482: | ||
nav:attr('aria-labelledby', mw.uri.anchorEncode(maintitle)) | nav:attr('aria-labelledby', mw.uri.anchorEncode(maintitle)) | ||
else | else | ||
nav:attr('aria-label', ' | nav:attr('aria-label', 'Навигационный шаблон') | ||
end | |||
if name and name ~= '-' then | |||
nav:attr('data-name', name) | |||
end | end | ||
Строка 505: | Строка 499: | ||
getArgs = require('Module:Arguments').getArgs | getArgs = require('Module:Arguments').getArgs | ||
end | end | ||
args = getArgs(frame, {wrappers = {' | args = getArgs(frame, {wrappers = {'Шаблон:Навигационная таблица', 'Шаблон:Подгруппы навигационной таблицы'}}) | ||
if frame.args.border then | if frame.args.border then | ||
-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}. | -- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}. | ||
Строка 516: | Строка 510: | ||
_ = above | _ = above | ||
for i = 1, 23 do | for i = 1, 23 do | ||
_ = args["group" .. tostring(i)] and args[" | _ = args["group" .. tostring(i)] and args["заголовок" .. tostring(i)] and args["группа" .. tostring(i)] | ||
_ = args["list" .. tostring(i)] and args[" | _ = args["list" .. tostring(i)] and args["список" .. tostring(i)] | ||
end | end | ||
_ = below | _ = below |