Module:Navbox: திருத்தங்களுக்கு இடையிலான வேறுபாடு
உள்ளடக்கம் நீக்கப்பட்டது உள்ளடக்கம் சேர்க்கப்பட்டது
No edit summary |
imported>Lingam "-- -- This module implements {{Navbox}} -- local p = {} local navbar = require('Module:Navbar')._navbar local getArgs -- lazily initialized local args local border local listnums local ODD_EVEN_MARKER = '\127_ODDEVEN_\127' local RESTART_MARKER = '\127_ODDEVEN0_\127' local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127' local function striped(wikitext) -- Return wikit..."-இப்பெயரில் புதிய பக்கம் உருவாக்கப்பட்டுள்ளது |
||
வரிசை 1:
--
-- This module implements {{Navbox}}
--
local p = {}
local navbar = require('Module:Navbar')._navbar
local getArgs -- lazily initialized
local args
local
local listnums
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'
local RESTART_MARKER = '\127_ODDEVEN0_\127'
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'
local function striped(wikitext
-- Return wikitext with markers replaced for odd/even striping.
-- Child (subgroup) navboxes are flagged with a category that is removed
-- 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 ==
-- No change; striping occurs in outermost navbox.
return wikitext .. orphanCat
end
local first, second =
if args
if args
first, second = second, first
else
first = args
second = first
end
வரி 44 ⟶ 53:
end
local regex = orphanCat:gsub('([%[%]])', '%%%1')
return (wikitext:gsub(regex, ''):gsub(
end
வரி 53 ⟶ 62:
return '\n' .. item ..'\n'
end
if nowrapitems ==
local lines = {}
for line in (item .. '\n'):gmatch('([^\n]*)\n') do
local prefix, content = line:match('^([*:;#]+)%s*(.*)')
if prefix and not content:match(
line =
end
table.insert(lines, line)
வரி 70 ⟶ 79:
end
-- Separate function so that we can evaluate properly whether hlist should
-- be added by the module
local function has_navbar()
return args
(not args.name and mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') == 'Template:Navbox')
end
local function renderNavBar(titleCell)
if has_navbar() then
titleCell:wikitext(navbar{
-- we depend on this being mini = 1 when the navbox module decides
-- to add hlist templatestyles. we also depend on navbar outputting
-- a copy of the hlist templatestyles.
mini = 1,
fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;box-shadow:none; padding:0;'
})
end
வரி 93 ⟶ 101:
end
--
-- Title row
--
local function renderTitleRow(tbl)
if not args
local titleRow = tbl:tag('tr')
if args.titlegroup then
titleRow
:tag('th')
:attr('scope', 'row')
:addClass('navbox-group')
:addClass(args.titlegroupclass)
:cssText(args.basestyle)
:cssText(args.groupstyle)
:cssText(args.titlegroupstyle)
:wikitext(args.titlegroup)
end
local titleCell = titleRow:tag('th'):attr('scope', 'col')
if args.titlegroup then
titleCell
:addClass('navbox-title1')
end
local titleColspan = 2
if args
if args
if args.titlegroup then titleColspan = titleColspan - 1 end
titleCell
:cssText(args
:cssText(args
:addClass(
:attr('colspan', titleColspan)
வரி 115 ⟶ 144:
:tag('div')
-- id for aria-labelledby attribute
:attr('id', mw.uri.anchorEncode(args
:addClass(args
:css('font-size', '114%')
:css('margin', '0 4em')
:wikitext(processItem(args
end
--
-- Above/Below rows
--
local function getAboveBelowColspan()
local ret = 2
if args
if args
return ret
end
local function renderAboveRow(tbl)
if not args
tbl:tag('tr')
:tag('td')
:addClass(
:addClass(args
:cssText(args
:cssText(args
:attr('colspan', getAboveBelowColspan())
:tag('div')
-- id for aria-labelledby attribute, if no title
:attr('id',
:wikitext(processItem(args
end
local function renderBelowRow(tbl)
if not args
tbl:tag('tr')
:tag('td')
:addClass(
:addClass(args
:cssText(args
:cssText(args
:attr('colspan', getAboveBelowColspan())
:tag('div')
:wikitext(processItem(args
end
--
-- List rows
--
local function renderListRow(tbl, index, listnum)
local row = tbl:tag('tr')
if index == 1 and args
row
:tag('td')
:addClass(
:addClass(
:css('width', '1px') -- Minimize width
:css('padding', '
:cssText(args
:attr('rowspan',
:tag('div')
:wikitext(processItem(args
end
if args['group' .. listnum] then
local groupCell = row:tag('th')
-- id for aria-labelledby attribute, if lone group with no title or above
if listnum == 1 and not (args
groupCell
:attr('id', mw.uri.anchorEncode(args
end
groupCell
:attr('scope', 'row')
:addClass(
:addClass(args
:cssText(args
:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width
groupCell
:cssText(args
:cssText(args[
:wikitext(args[
end
local listCell = row:tag('td')
if args[
listCell
:addClass(
else
listCell:attr('colspan', 2)
end
if not args
listCell:css('width', '100%')
end
வரி 216 ⟶ 248:
local rowstyle -- usually nil so cssText(rowstyle) usually adds nothing
if index % 2 == 1 then
rowstyle = args
else
rowstyle = args
end
local
local
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(
end
listCell
:css('padding', '
:cssText(args
:cssText(rowstyle)
:cssText(args[
:addClass(
:addClass(
:addClass(args
:addClass(args[
:tag('div')
:css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em')
:wikitext(processItem(listText, args.nowrapitems))
if index == 1 and args
row
:tag('td')
:addClass(
:addClass(
:css('width', '1px') -- Minimize width
:css('padding', '
:cssText(args
:attr('rowspan',
:tag('div')
:wikitext(processItem(args
end
end
--
-- Tracking categories
--
local function needsHorizontalLists()
if border == 'subgroup' or args.tracking == 'no' then
return false
end
local listClasses = {
['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,
['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,
['hlist vevent'] = true,
}
return not (listClasses[args.listclass] or listClasses[args.bodyclass])
end
-- there are a lot of list classes in the wild, so we have a function to find
-- them and add their TemplateStyles
local function addListStyles()
local frame = mw.getCurrentFrame()
-- TODO?: Should maybe take a table of classes for e.g. hnum, hwrap as above
-- I'm going to do the stupid thing first though
-- Also not sure hnum and hwrap are going to live in the same TemplateStyles
-- as hlist
local function _addListStyles(htmlclass, templatestyles)
local class_args = { -- rough order of probability of use
'bodyclass', 'listclass', 'aboveclass', 'belowclass', 'titleclass',
'navboxclass', 'groupclass', 'titlegroupclass', 'imageclass'
}
local patterns = {
'^' .. htmlclass .. '$',
'%s' .. htmlclass .. '$',
'^' .. htmlclass .. '%s',
'%s' .. htmlclass .. '%s'
}
local found = false
for _, arg in ipairs(class_args) do
for _, pattern in ipairs(patterns) do
if mw.ustring.find(args[arg] or '', pattern) then
break
end
end
if found then break end
end
if found then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
வரி 294 ⟶ 342:
end
local hlist_styles =
-- navbar always has mini = 1, so here (on this wiki) we can assume that
-- we don't need to output hlist styles in navbox again.
if not has_navbar() then
hlist_styles = _addListStyles('hlist', 'Flatlist/styles.css')
end
local plainlist_styles = _addListStyles('plainlist', 'Plainlist/styles.css')
return hlist_styles .. plainlist_styles
end
local function hasBackgroundColors()
for _, key in ipairs({
if tostring(args[key]):find('background', 1, true) then
return true
end
end
end
local function hasBorders()
for _, key in ipairs({
if tostring(args[key]):find('border', 1, true) then
return true
end
end
end
local function isIllegible()
return false
end
local function getTrackingCategories(
local cats = {}
if needsHorizontalLists(
if hasBackgroundColors() then table.insert(cats,
if isIllegible() then table.insert(cats,
if hasBorders() then table.insert(cats,
return cats
end
local function renderTrackingCategories(builder
local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 then return end -- not in template space
local subpage = title.subpageText
if subpage ==
for _, cat in ipairs(getTrackingCategories(
builder:wikitext('[[Category:' .. cat .. ']]')
end
end
--
-- Main navbox tables
--
local function renderMainTable()
local tbl = mw.html.create('table')
:addClass(
:addClass(args
tbl
:addClass(
:addClass(args.state or
end
tbl:css('border-spacing', 0)
if border ==
tbl
:addClass(
:cssText(args
:cssText(args
else -- regular navbox - bodystyle and style will be applied to the wrapper table
tbl
:addClass(
:css('background', 'transparent')
:css('color', 'inherit')
end
tbl:cssText(args
renderTitleRow(tbl)
renderAboveRow(tbl)
for i, listnum in ipairs(listnums) do
renderListRow(tbl, i, listnum
end
renderBelowRow(tbl)
return tbl
end
function p._navbox(navboxArgs)
args = navboxArgs
listnums = {}
for k, _ in pairs(args) do
if type(k) == 'string' then
local listnum = k:match(
if listnum then table.insert(listnums, tonumber(listnum)) end
end
வரி 475 ⟶ 445:
table.sort(listnums)
if border ==
border =
end
-- render the main body of the navbox
local tbl = renderMainTable(
-- get templatestyles
local frame = mw.getCurrentFrame()
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }
}
local templatestyles = ''
if args.templatestyles and args.templatestyles ~= '' then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args.templatestyles }
}
end
local res = mw.html.create()
-- 'navbox-styles' exists for two reasons:
-- 1. To wrap the styles to work around phab: T200206 more elegantly. Instead
-- of combinatorial rules, this ends up being linear number of CSS rules.
-- 2. To allow MobileFrontend to rip the styles out with 'nomobile' such that
-- they are not dumped into the mobile view.
res:tag('div')
:addClass('navbox-styles')
:addClass('nomobile')
:wikitext(base_templatestyles .. templatestyles)
:done()
-- render the appropriate wrapper around the navbox, depending on the border param
if border == 'none' then
local nav = res:tag('div')
:attr('role', 'navigation')
:wikitext(addListStyles())
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args
nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))
else
nav:attr('aria-label',
end
elseif border ==
-- We assume that this navbox is being rendered in a list cell of a
-- parent navbox, and is therefore inside a div with padding:0em 0.25em.
வரி 510 ⟶ 496:
res
:wikitext('</div>')
:wikitext(addListStyles())
:node(tbl)
:wikitext('<div>')
else
local nav = res:tag('div')
:attr('role', 'navigation')
:addClass(
:addClass(args
:cssText(args
:cssText(args
:css('padding', '3px')
:wikitext(addListStyles())
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args
nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))
else
nav:attr('aria-label',
end
end
if (args
renderTrackingCategories(res
end
return striped(tostring(res))
end
வரி 544 ⟶ 528:
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 _
_ = args
_ = args
for i = 1, 20 do
_ = args[
_ = args[
end
_ = args
return p._navbox(args)
| |||