۵٬۱۲۵
ویرایش
(جعبههای ناوبری یتیم) |
بدون خلاصۀ ویرایش |
||
خط ۱۰: | خط ۱۰: | ||
local args | local args | ||
local border | local border | ||
local listnums | local listnums | ||
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127' | local ODD_EVEN_MARKER = '\127_ODDEVEN_\127' | ||
local RESTART_MARKER = '\127_ODDEVEN0_\127' | local RESTART_MARKER = '\127_ODDEVEN0_\127' | ||
خط ۲۰: | خط ۲۰: | ||
-- 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 = '[[Category:Navbox orphans]]' | ||
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. | ||
خط ۸۱: | خط ۸۱: | ||
local function renderNavBar(titleCell) | local function renderNavBar(titleCell) | ||
if args.navbar ~= 'off' and args.navbar ~= 'plain' and not (not args.name and mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') == ' | if args.navbar ~= 'off' and args.navbar ~= 'plain' and not (not args.name and mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') == 'Template:Navbox') then | ||
titleCell:wikitext(navbar{ | titleCell:wikitext(navbar{ | ||
args.name, | args.name, | ||
mini = 1, | mini = 1, | ||
fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;' | fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none; padding:0;' | ||
}) | }) | ||
end | end | ||
خط ۱۳۴: | خط ۱۳۴: | ||
titleCell | titleCell | ||
:tag('div') | :tag('div') | ||
-- id for aria-labelledby attribute | |||
:attr('id', mw.uri.anchorEncode(args.title)) | :attr('id', mw.uri.anchorEncode(args.title)) | ||
:addClass(args.titleclass) | :addClass(args.titleclass) | ||
خط ۱۶۳: | خط ۱۶۴: | ||
:attr('colspan', getAboveBelowColspan()) | :attr('colspan', getAboveBelowColspan()) | ||
:tag('div') | :tag('div') | ||
-- id for aria-labelledby attribute, if no title | |||
:attr('id', args.title and nil or mw.uri.anchorEncode(args.above)) | |||
:wikitext(processItem(args.above, args.nowrapitems)) | :wikitext(processItem(args.above, args.nowrapitems)) | ||
end | end | ||
خط ۲۰۱: | خط ۲۰۴: | ||
if args['group' .. listnum] then | if args['group' .. listnum] then | ||
local groupCell = row:tag('th') | local groupCell = row:tag('th') | ||
-- id for aria-labelledby attribute, if lone group with no title or above | |||
if listnum == 1 and not (args.title or args.above or args.group2) then | |||
groupCell | |||
:attr('id', mw.uri.anchorEncode(args.group1)) | |||
end | |||
groupCell | groupCell | ||
خط ۲۰۷: | خط ۲۱۶: | ||
:addClass(args.groupclass) | :addClass(args.groupclass) | ||
:cssText(args.basestyle) | :cssText(args.basestyle) | ||
:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width | |||
groupCell | groupCell | ||
خط ۲۵۱: | خط ۲۶۰: | ||
:addClass('navbox-' .. oddEven) | :addClass('navbox-' .. oddEven) | ||
:addClass(args.listclass) | :addClass(args.listclass) | ||
:addClass(args['list' .. listnum .. 'class']) | |||
:tag('div') | :tag('div') | ||
:css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em') | :css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em') | ||
خط ۲۸۷: | خط ۲۹۷: | ||
local function hasBackgroundColors() | local function hasBackgroundColors() | ||
for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle'}) do | for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do | ||
if tostring(args[key]):find('background', 1, true) then | if tostring(args[key]):find('background', 1, true) then | ||
return true | |||
end | |||
end | |||
end | |||
local function hasBorders() | |||
for _, key in ipairs({'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do | |||
if tostring(args[key]):find('border', 1, true) then | |||
return true | return true | ||
end | end | ||
خط ۳۰۹: | خط ۳۲۷: | ||
local function getTrackingCategories() | local function getTrackingCategories() | ||
local cats = {} | local cats = {} | ||
if needsHorizontalLists() then table.insert(cats, ' | if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end | ||
if hasBackgroundColors() then table.insert(cats, ' | if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end | ||
if isIllegible() then table.insert(cats, ' | if isIllegible() then table.insert(cats, 'Potentially illegible navboxes') end | ||
if hasBorders() then table.insert(cats, 'Navboxes using borders') end | |||
return cats | return cats | ||
end | end | ||
خط ۳۱۹: | خط ۳۳۸: | ||
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 == ' | if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end | ||
for _, cat in ipairs(getTrackingCategories()) do | for _, cat in ipairs(getTrackingCategories()) do | ||
builder:wikitext('[[ | builder:wikitext('[[Category:' .. cat .. ']]') | ||
end | end | ||
end | end | ||
خط ۳۶۶: | خط ۳۸۵: | ||
function p._navbox(navboxArgs) | function p._navbox(navboxArgs) | ||
args = navboxArgs | args = navboxArgs | ||
listnums = {} | |||
for k, _ in pairs(args) do | for k, _ in pairs(args) do | ||
خط ۳۸۹: | خط ۴۰۹: | ||
:attr('role', 'navigation') | :attr('role', 'navigation') | ||
:node(tbl) | :node(tbl) | ||
if args.title then | -- aria-labelledby title, otherwise above, otherwise lone group | ||
nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title)) | if args.title or args.above or (args.group1 and not args.group2) then | ||
nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1)) | |||
else | else | ||
nav:attr('aria-label', 'Navbox') | nav:attr('aria-label', 'Navbox') | ||
خط ۴۱۰: | خط ۴۳۱: | ||
:css('padding', '3px') | :css('padding', '3px') | ||
:node(tbl) | :node(tbl) | ||
if args.title then | -- aria-labelledby title, otherwise above, otherwise lone group | ||
nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title)) | if args.title or args.above or (args.group1 and not args.group2) then | ||
nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1)) | |||
else | else | ||
nav:attr('aria-label', 'Navbox') | nav:attr('aria-label', 'Navbox') | ||
خط ۴۱۷: | خط ۴۳۹: | ||
end | end | ||
renderTrackingCategories(res) | if (args.nocat or 'false'):lower() == 'false' then | ||
renderTrackingCategories(res) | |||
end | |||
return striped(tostring(res)) | return striped(tostring(res)) | ||
end | end | ||
خط ۴۲۶: | خط ۴۴۹: | ||
getArgs = require('Module:Arguments').getArgs | getArgs = require('Module:Arguments').getArgs | ||
end | end | ||
args = getArgs(frame, {wrappers = ' | args = getArgs(frame, {wrappers = {'Template:Navbox', 'Template:Navbox subgroup'}}) | ||
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. | -- Read the arguments in the order they'll be output in, to make references number in the right order. |
ویرایش