Modifica di Modulo:Navbox

Vai alla navigazione Vai alla ricerca
Attenzione: non hai effettuato l'accesso. Se effettuerai delle modifiche il tuo indirizzo IP sarà visibile pubblicamente. Se accedi o crei un'utenza, le tue modifiche saranno attribuite al tuo nome utente, insieme ad altri benefici.

Questa modifica può essere annullata. Controlla le differenze mostrate sotto fra le due versioni per essere certo che il contenuto corrisponda a quanto desiderato, e quindi pubblicare le modifiche per completare la procedura di annullamento.

Versione attuale Il tuo testo
Riga 1: Riga 1:
local p = {}
--[[
local navbar = require('Module:Navbar')._navbar
* Modulo che implementa i template Navbox e Navbox_subgroup.
local cfg = mw.loadData('Module:Navbox/configuration')
]]--
local getArgs -- lazily initialized
 
local args
require('Modulo:No globals')
local format = string.format
 
local getArgs = require('Modulo:Arguments').getArgs
-- Numero massimo di liste e gruppi per i template Navbox e Navbox_subgroup
local MAX_LIST_NAVBOX = 30
local MAX_LIST_NAVBOX_SUBGROUP = 20


local function striped(wikitext, border)
-- =============================================================================
-- Return wikitext with markers replaced for odd/even striping.
--                           Funzioni di utilità
-- 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 = cfg.category.orphan
if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.orphan_yes then
-- No change; striping occurs in outermost navbox.
return wikitext .. orphanCat
end
local first, second = cfg.class.navbox_odd_part, cfg.class.navbox_even_part
if args[cfg.arg.evenodd] then
if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then
first, second = second, first
else
first = args[cfg.arg.evenodd]
second = first
end
end
local changer
if first == second then
changer = first
else
local index = 0
changer = function (code)
if code == '0' then
-- Current occurrence is for a group before a nested table.
-- Set it to first as a valid although pointless class.
-- The next occurrence will be the first row after a title
-- in a subgroup and will also be first.
index = 0
return first
end
index = index + 1
return index % 2 == 1 and first or second
end
end
local regex = orphanCat:gsub('([%[%]])', '%%%1')
return (wikitext:gsub(regex, ''):gsub(cfg.marker.regex, changer)) -- () omits gsub count
end


local function processItem(item, nowrapitems)
-- Restituisce una sequence Lua ordinata contenente gli ID dei listN presenti.
if item:sub(1, 2) == '{|' then
-- Se withGroup è true, controlla anche i groupN.
-- Applying nowrap to lines in a table does not make sense.
--
-- Add newlines to compensate for trim of x in |parm=x in a template.
-- @param {table} args
return '\n' .. item ..'\n'
-- @param {boolean} withGroup
end
-- @return {table}
if nowrapitems == cfg.keyword.nowrapitems_yes then
local function getIds(args, withGroup)
local lines = {}
local ret, ids = {}, {}
for line in (item .. '\n'):gmatch('([^\n]*)\n') do
for key, _ in pairs(args) do
local prefix, content = line:match('^([*:;#]+)%s*(.*)')
if type(key) == 'string' then
if prefix and not content:match(cfg.pattern.nowrap) then
local id = key:match('^list(%d+)$') or (withGroup and key:match('^group(%d+)$'))
line = format(cfg.nowrap_item, prefix, content)
if id and tonumber(id) <= (withGroup and MAX_LIST_NAVBOX or MAX_LIST_NAVBOX_SUBGROUP) then
ids[tonumber(id)] = true
end
end
table.insert(lines, line)
end
end
item = table.concat(lines, '\n')
end
end
if item:match('^[*:;#]') then
for key, _ in pairs(ids) do
return '\n' .. item ..'\n'
table.insert(ret, key)
end
end
return item
table.sort(ret)
return ret
end
end


local function has_navbar()
-- Rimuove eventuali spazi/a capo attorno ai {{,}}.
return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off
--
and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain
-- @param {string} list
and (
-- @return {string}
args[cfg.arg.name]
local function trimSep(list)
or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, '')
local sep = mw.getCurrentFrame():expandTemplate{ title = "," }
~= cfg.pattern.navbox
local sepEsc = mw.ustring.gsub(sep, '-', '%-')
)
return mw.ustring.gsub(list, '%s*' .. sepEsc .. '%s*', sep)
end
end


local function renderNavBar(titleCell)
-- Con il debug ridefinisce il metodo mw.html:css,
if has_navbar() then
-- permettendo di eseguire i test senza controllare anche il CSS.
titleCell:wikitext(navbar{
--
[cfg.navbar.name] = args[cfg.arg.name],
-- @param {table} tableNode
[cfg.navbar.mini] = 1,
local function disableCSS(tableNode)
[cfg.navbar.fontstyle] = (args[cfg.arg.basestyle] or '') .. ';' ..
local mt = getmetatable(tableNode)
(args[cfg.arg.titlestyle] or '') ..
mt.__index.css = function(t, name, val) return t end
';background:none transparent;border:none;box-shadow:none;padding:0;'
})
end
 
end
end


local function renderTitleRow(tbl)
-- Verifica se il template è elaborato nella sua pagina
if not args[cfg.arg.title] then return end
local function isTemplatePage(name)
 
local title = mw.title.getCurrentTitle().prefixedText
local titleRow = tbl:tag('tr')
name = 'Template:' .. (name or '')
 
return name == title and true or false
local titleCell = titleRow:tag('th'):attr('scope', 'col')
 
local titleColspan = 2
if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end
if args[cfg.arg.image] then titleColspan = titleColspan + 1 end
 
titleCell
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.titlestyle])
:addClass(cfg.class.navbox_title)
:attr('colspan', titleColspan)
 
renderNavBar(titleCell)
 
titleCell
:tag('div')
-- id for aria-labelledby attribute
:attr('id', mw.uri.anchorEncode(args[cfg.arg.title]))
:addClass(args[cfg.arg.titleclass])
:css('font-size', '114%')
:css('margin', '0 4em')
:wikitext(processItem(args[cfg.arg.title]))
end
end


local function getAboveBelowColspan()
-- Carica il CSS via TemplateStyles quando opportuno
local ret = 2
local function loadCSS(name)
if args[cfg.arg.imageleft] then ret = ret + 1 end
local prefix = isTemplatePage(name) and 'mobile-' or ''
if args[cfg.arg.image] then ret = ret + 1 end
local styles = 'Modulo:Navbox/' .. prefix .. 'styles.css'
return ret
return mw.getCurrentFrame():extensionTag{
end
name = 'templatestyles',
 
args = {src = styles}
local function renderAboveRow(tbl)
}
if not args[cfg.arg.above] then return end
 
tbl:tag('tr')
:tag('td')
:addClass(cfg.class.navbox_abovebelow)
:addClass(args[cfg.arg.aboveclass])
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.abovestyle])
:attr('colspan', getAboveBelowColspan())
:tag('div')
-- id for aria-labelledby attribute, if no title
:attr('id', args[cfg.arg.title] and nil or mw.uri.anchorEncode(args[cfg.arg.above]))
:wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems]))
end
end


local function renderBelowRow(tbl)
-- =============================================================================
if not args[cfg.arg.below] then return end
--                            Classe Navbox
-- =============================================================================


tbl:tag('tr')
local Navbox = {}
:tag('td')
:addClass(cfg.class.navbox_abovebelow)
:addClass(args[cfg.arg.belowclass])
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.belowstyle])
:attr('colspan', getAboveBelowColspan())
:tag('div')
:wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems]))
end


local function renderListRow(tbl, index, listnum, listnums_size)
-- Costruttore della classe Navbox.
local row = tbl:tag('tr')
--
-- @param {table} args - gli argomenti passati al modulo
-- @return {table} un nuovo oggetto Navbox
function Navbox:new(args)
local self = {}
local thNode


if index == 1 and args[cfg.arg.imageleft] then
setmetatable(self, { __index = Navbox })
row
self.args = args
:tag('td')
-- costruzione tabella HTML
:addClass(cfg.class.noviewer)
self.tableNode = mw.html.create('table')
:addClass(cfg.class.navbox_image)
if self.args.debug then
:addClass(args[cfg.arg.imageclass])
disableCSS(self.tableNode)
:css('width', '1px')              -- Minimize width
:css('padding', '0 2px 0 0')
:cssText(args[cfg.arg.imageleftstyle])
:attr('rowspan', listnums_size)
:tag('div')
:wikitext(processItem(args[cfg.arg.imageleft]))
end
end
 
self:_setupTableNode()
local group_and_num = format(cfg.arg.group_and_num, listnum)
-- prima riga: contiene la navbar e il titolo
local groupstyle_and_num = format(cfg.arg.groupstyle_and_num, listnum)
thNode = self.tableNode:tag('tr')
if args[group_and_num] then
:tag('th')
local groupCell = row:tag('th')
:attr('colspan', self.args.image and '3' or '2')
 
:cssText(self.args.titlestyle)
-- id for aria-labelledby attribute, if lone group with no title or above
if self.args.navbar ~= 'plain' then
if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then
self:_addTnavbar(thNode)
groupCell
:attr('id', mw.uri.anchorEncode(args[cfg.arg.group1]))
end
 
groupCell
:attr('scope', 'row')
:addClass(cfg.class.navbox_group)
:addClass(args[cfg.arg.groupclass])
:cssText(args[cfg.arg.basestyle])
-- If groupwidth not specified, minimize width
:css('width', args[cfg.arg.groupwidth] or '1%')
 
groupCell
:cssText(args[cfg.arg.groupstyle])
:cssText(args[groupstyle_and_num])
:wikitext(args[group_and_num])
end
end
 
if self.args.title then
local listCell = row:tag('td')
self:_addTitle(thNode)
 
if args[group_and_num] then
listCell
:addClass(cfg.class.navbox_list_with_group)
else
listCell:attr('colspan', 2)
end
end
 
-- eventuale riga per l'above
if not args[cfg.arg.groupwidth] then
if self.args.above then
listCell:css('width', '100%')
self:_addAboveOrBelow(self.args.above, self.args.abovestyle)
end
end
 
-- altre righe
local rowstyle  -- usually nil so cssText(rowstyle) usually adds nothing
self:_addLists()
if index % 2 == 1 then
-- eventuale riga finale per il below
rowstyle = args[cfg.arg.oddstyle]
if self.args.below then
else
self:_addAboveOrBelow(self.args.below, self.args.belowstyle)
rowstyle = args[cfg.arg.evenstyle]
end
end


local list_and_num = format(cfg.arg.list_and_num, listnum)
return self
local listText = args[list_and_num]
end
local oddEven = cfg.marker.oddeven
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(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part
end


local liststyle_and_num = format(cfg.arg.liststyle_and_num, listnum)
-- Restituisce la tabella HTML.
local listclass_and_num = format(cfg.arg.listclass_and_num, listnum)
--
listCell
-- @return {string}
:css('padding', '0')
function Navbox:getHTML()
:cssText(args[cfg.arg.liststyle])
return tostring(self.tableNode)
:cssText(rowstyle)
end
:cssText(args[liststyle_and_num])
:addClass(cfg.class.navbox_list)
:addClass(cfg.class.navbox_part .. oddEven)
:addClass(args[cfg.arg.listclass])
:addClass(args[listclass_and_num])
:tag('div')
:css('padding',
(index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or '0 0.25em'
)
:wikitext(processItem(listText, args[cfg.arg.nowrapitems]))


if index == 1 and args[cfg.arg.image] then
-- Configura gli stili CSS della tabella
row
function Navbox:_setupTableNode()
:tag('td')
self.tableNode
:addClass(cfg.class.noviewer)
:addClass(isTemplatePage(self.args.name) and 'navbox_mobile' or 'navbox')
:addClass(cfg.class.navbox_image)
:addClass('mw-collapsible')
:addClass(args[cfg.arg.imageclass])
:addClass(isTemplatePage(self.args.name) and 'autocollapse' or
:css('width', '1px')               -- Minimize width
  self.args.state == 'collapsed' and 'mw-collapsed' or
:css('padding', '0 0 0 2px')
  self.args.state == 'autocollapse' and 'autocollapse' or
:cssText(args[cfg.arg.imagestyle])
  not self.args.state and 'autocollapse' or nil)
:attr('rowspan', listnums_size)
:addClass('noprint metadata')
:tag('div')
:attr('id', 'navbox-' .. (self.args.name or ''))
:wikitext(processItem(args[cfg.arg.image]))
:cssText(self.args.style)
end
:cssText(self.args.bodystyle)
end
end


local function has_list_class(htmlclass)
-- Aggiunge il Tnavbar (collegamenti alla pagina del template, di discussione e modifica).
local patterns = {
--
'^' .. htmlclass .. '$',
-- @param {table} node
'%s' .. htmlclass .. '$',
function Navbox:_addTnavbar(node)
'^' .. htmlclass .. '%s',
local tnavbar = mw.getCurrentFrame():expandTemplate {
'%s' .. htmlclass .. '%s'
title = 'Tnavbar',
args = {
[1] = self.args.name,
['mini'] = 1
}
}
}
node:tag('div'):addClass('navbox_navbar'):wikitext(tnavbar)
for arg, _ in pairs(args) do
if type(arg) == 'string' and mw.ustring.find(arg, cfg.pattern.class) then
for _, pattern in ipairs(patterns) do
if mw.ustring.find(args[arg] or '', pattern) then
return true
end
end
end
end
return false
end
end


-- there are a lot of list classes in the wild, so we add their TemplateStyles
-- Imposta il titolo del navbox dal parametro "title".
local function add_list_styles()
--
local frame = mw.getCurrentFrame()
-- @param {table} node
local function add_list_templatestyles(htmlclass, templatestyles)
function Navbox:_addTitle(node)
if has_list_class(htmlclass) then
node:tag('span'):addClass('navbox_title'):wikitext(self.args.title)
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
else
return ''
end
end
local hlist_styles = add_list_templatestyles('hlist', cfg.hlist_templatestyles)
local plainlist_styles = add_list_templatestyles('plainlist', cfg.plainlist_templatestyles)
-- a second workaround for [[phab:T303378]]
-- when that issue is fixed, we can actually use has_navbar not to emit the
-- tag here if we want
if has_navbar() and hlist_styles == '' then
hlist_styles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.hlist_templatestyles }
}
end
-- hlist -> plainlist is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because most navboxes will emit only
-- one of these classes [hlist_note]
return hlist_styles .. plainlist_styles
end
end


local function needsHorizontalLists(border)
-- Aggiunge la riga per i parametri "above" e "below".
if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then
--
return false
-- @param {string} arg
end
-- @param {string} argStyle
return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist)
function Navbox:_addAboveOrBelow(arg, argStyle)
self.tableNode
:tag('tr')
:tag('th')
:attr('colspan', self.args.image and '3' or '2')
:addClass('navbox_abovebelow')
:cssText(argStyle)
:wikitext(arg)
end
end


local function hasBackgroundColors()
-- Aggiunge una colonna per l'immagine.
for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle,
--
cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do
-- @param {table} trNode
if tostring(args[key]):find('background', 1, true) then
-- @param {number} rowspan
return true
function Navbox:_addImage(trNode, rowspan)
end
trNode
end
:tag('td')
return false
:attr('rowspan', rowspan)
:addClass('navbox_image')
:cssText(self.args.imagestyle)
:wikitext(self.args.image)
end
end


local function hasBorders()
-- Aggiunge una nuova riga per ogni groupN/listN
for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle,
function Navbox:_addLists()
cfg.arg.abovestyle, cfg.arg.belowstyle}) do
local rowIds, altStyle, altBackground
if tostring(args[key]):find('border', 1, true) then
-- crea una riga per ogni groupN/listN
return true
rowIds = getIds(self.args, true)
for i, id in ipairs(rowIds) do
local trNode = self.tableNode:tag('tr')
-- groupN
if self.args['group' .. id] then
trNode:tag('th')
:attr('colspan', self.args['list' .. id] and '1' or '2')
:addClass('navbox_group')
:cssText(self.args.groupstyle)
:cssText(self.args['group' .. id .. 'style'])
:wikitext(self.args['group' .. id])
end
end
end
-- listN
return false
if self.args['list' .. id] then
end
local list = trimSep(self.args['list' .. id])
 
if (i % 2) == 0 then
local function isIllegible()
altStyle = self.args.evenstyle
local styleratio = require('Module:Color contrast')._styleratio
altBackground = 'navbox_even'
for key, style in pairs(args) do
else
if tostring(key):match(cfg.pattern.style) then
altStyle = self.args.oddstyle
if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then
altBackground = 'navbox_odd'
return true
end
end
trNode:tag('td')
:attr('colspan', self.args['group' .. id] and '1' or '2')
:addClass('navbox_list')
:addClass(not self.args['group' .. id] and 'navbox_center' or nil)
:addClass(altBackground)
:cssText(self.args.liststyle)
:cssText(altStyle)
:cssText(self.args['list' .. id .. 'style'])
:wikitext(list)
end
if id == 1 and self.args.image then
self:_addImage(trNode, #rowIds)
end
end
end
end
return false
end
local function getTrackingCategories(border)
local cats = {}
if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end
if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end
if isIllegible() then table.insert(cats, cfg.category.illegible) end
if hasBorders() then table.insert(cats, cfg.category.borders) end
return cats
end
end


local function renderTrackingCategories(builder, border)
-- =============================================================================
local title = mw.title.getCurrentTitle()
--                           Classe NavboxSubgroup
if title.namespace ~= 10 then return end -- not in template space
-- =============================================================================
local subpage = title.subpageText
if subpage == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox
or subpage == cfg.keyword.subpage_testcases then return end


for _, cat in ipairs(getTrackingCategories(border)) do
local NavboxSubgroup = {}
builder:wikitext('[[Category:' .. cat .. ']]')
end
end


local function renderMainTable(border, listnums)
-- Costruttore della classe NavboxSubgroup.
local tbl = mw.html.create('table')
--
:addClass(cfg.class.nowraplinks)
-- @param {table} args - gli argomenti passati al modulo
:addClass(args[cfg.arg.bodyclass])
-- @return {table} un nuovo oggetto NavboxSubgroup
function NavboxSubgroup:new(args)
local self = {}


local state = args[cfg.arg.state]
setmetatable(self, { __index = NavboxSubgroup })
if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then
self.args = args
if state == cfg.keyword.state_collapsed then
-- costruzione tabella HTML
state = cfg.class.collapsed
self.tableNode = mw.html.create('table')
end
if self.args.debug then
tbl
disableCSS(self.tableNode)
:addClass(cfg.class.collapsible)
:addClass(state or cfg.class.autocollapse)
end
end
self:_setupTableNode()
self:_addLists()


tbl:css('border-spacing', 0)
return self
if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then
end
tbl
:addClass(cfg.class.navbox_subgroup)
:cssText(args[cfg.arg.bodystyle])
:cssText(args[cfg.arg.style])
else  -- regular navbox - bodystyle and style will be applied to the wrapper table
tbl
:addClass(cfg.class.navbox_inner)
:css('background', 'transparent')
:css('color', 'inherit')
end
tbl:cssText(args[cfg.arg.innerstyle])


renderTitleRow(tbl)
-- Restituisce la tabella HTML.
renderAboveRow(tbl)
--
local listnums_size = #listnums
-- @return {string}
for i, listnum in ipairs(listnums) do
function NavboxSubgroup:getHTML()
renderListRow(tbl, i, listnum, listnums_size)
return tostring(self.tableNode)
end
end
renderBelowRow(tbl)


return tbl
-- Configura gli stili CSS della tabella.
function NavboxSubgroup:_setupTableNode()
self.tableNode
:addClass('subnavbox')
:cssText(self.args.bodystyle)
end
end


local function add_navbox_styles(hiding_templatestyles)
-- Aggiunge una nuova riga per ogni groupN/listN.
local frame = mw.getCurrentFrame()
function NavboxSubgroup:_addLists()
-- This is a lambda so that it doesn't need the frame as a parameter
local listIds, altStyle
local function add_user_styles(templatestyles)
-- crea una row per ogni listN
if templatestyles and templatestyles ~= '' then
listIds = getIds(self.args)
return frame:extensionTag{
for _, id in ipairs(listIds) do
name = 'templatestyles', args = { src = templatestyles }
local trNode = self.tableNode:tag('tr')
}
local list = trimSep(self.args['list' .. id])
-- i groupN sono visibili solo se c'è la corrispettiva listN
if self.args['group' .. id] then
trNode:tag('th')
:addClass('subnavbox_group')
:cssText(self.args.groupstyle)
:wikitext(self.args['group' .. id])
end
end
return ''
if (id % 2) == 0 then
end
altStyle = self.args.evenstyle
 
else
-- get templatestyles. load base from config so that Lua only needs to do
altStyle = self.args.oddstyle
-- the work once of parser tag expansion
local base_templatestyles = cfg.templatestyles
local templatestyles = add_user_styles(args[cfg.arg.templatestyles])
local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])
 
-- The 'navbox-styles' div exists to wrap the styles to work around T200206
-- more elegantly. Instead of combinatorial rules, this ends up being linear
-- number of CSS rules.
return mw.html.create('div')
:addClass(cfg.class.navbox_styles)
:wikitext(
add_list_styles() .. -- see [hlist_note] applied to 'before base_templatestyles'
base_templatestyles ..
templatestyles ..
child_templatestyles ..
table.concat(hiding_templatestyles)
)
:done()
end
 
-- work around [[phab:T303378]]
-- for each arg: find all the templatestyles strip markers, insert them into a
-- table. then remove all templatestyles markers from the arg
local function move_hiding_templatestyles(args)
local gfind = string.gfind
local gsub = string.gsub
local templatestyles_markers = {}
local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'
for k, arg in pairs(args) do
for marker in gfind(arg, strip_marker_pattern) do
table.insert(templatestyles_markers, marker)
end
end
args[k] = gsub(arg, strip_marker_pattern, '')
trNode:tag('td')
:attr('colspan', self.args['group' .. id] and '1' or '2')
:addClass(not self.args['group' .. id] and 'navbox_center' or nil)
:cssText(self.args.liststyle)
:cssText(altStyle)
:wikitext(list)
end
end
return templatestyles_markers
end
end


function p._navbox(navboxArgs)
-- =============================================================================
args = navboxArgs
--                            Funzioni esportate
local hiding_templatestyles = move_hiding_templatestyles(args)
-- =============================================================================
local listnums = {}


for k, _ in pairs(args) do
local p = {}
if type(k) == 'string' then
local listnum = k:match(cfg.pattern.listnum)
if listnum then table.insert(listnums, tonumber(listnum)) end
end
end
table.sort(listnums)


local border = mw.text.trim(args[cfg.arg.border] or args[1] or '')
-- Funzione per l'utilizzo da un altro modulo.
if border == cfg.keyword.border_child then
function p._navbox(args)
border = cfg.keyword.border_subgroup
return loadCSS(args.name) .. Navbox:new(args):getHTML()
end
end


-- render the main body of the navbox
-- Funzione per l'utilizzo da un altro modulo.
local tbl = renderMainTable(border, listnums)
function p._navbox_subgroup(args)
 
return NavboxSubgroup:new(args):getHTML()
local res = mw.html.create()
-- render the appropriate wrapper for the navbox, based on the border param
 
if border == cfg.keyword.border_none then
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
:attr('role', 'navigation')
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1]
and not args[cfg.arg.group2]) then
nav:attr(
'aria-labelledby',
mw.uri.anchorEncode(
args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]
)
)
else
nav:attr('aria-label', cfg.aria_label)
end
elseif border == cfg.keyword.border_subgroup then
-- 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.
-- We start with a </div> to avoid the padding being applied, and at the
-- end add a <div> to balance out the parent's </div>
res
:wikitext('</div>')
:node(tbl)
:wikitext('<div>')
else
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
:attr('role', 'navigation')
:addClass(cfg.class.navbox)
:addClass(args[cfg.arg.navboxclass])
:cssText(args[cfg.arg.bodystyle])
:cssText(args[cfg.arg.style])
:css('padding', '3px')
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args[cfg.arg.title] or args[cfg.arg.above]
or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then
nav:attr(
'aria-labelledby',
mw.uri.anchorEncode(args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1])
)
else
nav:attr('aria-label', cfg.aria_label)
end
end
 
if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then
renderTrackingCategories(res, border)
end
return striped(tostring(res), border)
end
end


-- Funzione per il template {{Navbox}}.
function p.navbox(frame)
function p.navbox(frame)
if not getArgs then
return p._navbox(getArgs(frame, { parentOnly = true }))
getArgs = require('Module:Arguments').getArgs
end
end
args = getArgs(frame, {wrappers = {cfg.pattern.navbox}})
 
-- Read the arguments in the order they'll be output in, to make references
-- number in the right order.
local _
_ = args[cfg.arg.title]
_ = args[cfg.arg.above]
-- Limit this to 20 as covering 'most' cases (that's a SWAG) and because
-- iterator approach won't work here
for i = 1, 20 do
_ = args[format(cfg.arg.group_and_num, i)]
_ = args[format(cfg.arg.list_and_num, i)]
end
_ = args[cfg.arg.below]


return p._navbox(args)
-- Funzione per il template {{Navbox subgroup}}.
function p.navbox_subgroup(frame)
return p._navbox_subgroup(getArgs(frame, { parentOnly = true }))
end
end


return p
return p
Per favore tieni presente che tutti i contributi a Tematiche di genere si considerano pubblicati nei termini d'uso della licenza Creative Commons Attribuzione-Condividi allo stesso modo (vedi Tematiche di genere:Copyright per maggiori dettagli). Se non desideri che i tuoi testi possano essere modificati e ridistribuiti da chiunque senza alcuna limitazione, non inviarli qui.
Inviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera. Non inviare materiale protetto da copyright senza autorizzazione!
Annulla Guida (si apre in una nuova finestra)

Template utilizzato in questa pagina: