navbox

La documentazione per questo modulo può essere creata in Modulo:Navbox/man

--[[ * Modulo che implementa i template Navbox e Navbox_subgroup. ]]--  require('strict')  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  -- ============================================================================= --                            Funzioni di utilità -- =============================================================================  -- Restituisce una sequence Lua ordinata contenente gli ID dei listN presenti. -- Se withGroup è true, controlla anche i groupN. -- -- @param {table} args -- @param {boolean} withGroup -- @return {table} local function getIds(args, withGroup) local ret, ids = {}, {} for key, _ in pairs(args) do if type(key) == 'string' then local id = key:match('^list(%d+)$') or (withGroup and key:match('^group(%d+)$')) if id and tonumber(id) <= (withGroup and MAX_LIST_NAVBOX or MAX_LIST_NAVBOX_SUBGROUP) then ids[tonumber(id)] = true end end end for key, _ in pairs(ids) do table.insert(ret, key) end table.sort(ret) return ret end  -- Rimuove eventuali spazi/a capo attorno ai {{,}}. -- -- @param {string} list -- @return {string} local function trimSep(list) local sep = mw.getCurrentFrame():expandTemplate{ title = "," } local sepEsc = mw.ustring.gsub(sep, '-', '%-') return mw.ustring.gsub(list, '%s*' .. sepEsc .. '%s*', sep) end  -- Con il debug ridefinisce il metodo mw.html:css, -- permettendo di eseguire i test senza controllare anche il CSS. -- -- @param {table} tableNode local function disableCSS(tableNode) local mt = getmetatable(tableNode) mt.__index.css = function(t, name, val) return t end end  -- Verifica se il template è elaborato nella sua pagina local function isTemplatePage(name) local title = mw.title.getCurrentTitle().prefixedText name = 'Template:' .. (name or '') return name == title and true or false end  -- Carica il CSS via TemplateStyles quando opportuno local function loadCSS(name) local prefix = isTemplatePage(name) and 'mobile-' or '' local styles = 'Modulo:Navbox/' ..  prefix .. 'styles.css' return mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = {src = styles} } end  -- ============================================================================= --                            Classe Navbox -- =============================================================================  local Navbox = {}  -- Costruttore della classe Navbox. -- -- @param {table} args - gli argomenti passati al modulo -- @return {table} un nuovo oggetto Navbox function Navbox:new(args) local self = {} local thNode  setmetatable(self, { __index = Navbox }) self.args = args -- costruzione tabella HTML self.tableNode = mw.html.create('table') if self.args.debug then disableCSS(self.tableNode) end self:_setupTableNode() -- prima riga: contiene la navbar e il titolo thNode = self.tableNode:tag('tr') :tag('th') :attr('colspan', self.args.image and '3' or '2') :cssText(self.args.titlestyle) if self.args.navbar ~= 'plain' then self:_addTnavbar(thNode) end if self.args.title then self:_addTitle(thNode) end -- eventuale riga per l'above if self.args.above then self:_addAboveOrBelow(self.args.above, self.args.abovestyle) end -- altre righe self:_addLists() -- eventuale riga finale per il below if self.args.below then self:_addAboveOrBelow(self.args.below, self.args.belowstyle) end  return self end  -- Restituisce la tabella HTML. -- -- @return {string} function Navbox:getHTML() return tostring(self.tableNode) end  -- Configura gli stili CSS della tabella function Navbox:_setupTableNode() self.tableNode :addClass(isTemplatePage(self.args.name) and 'navbox_mobile' or 'navbox') :addClass('mw-collapsible') :addClass(isTemplatePage(self.args.name) and 'autocollapse' or   self.args.state == 'collapsed' and 'mw-collapsed' or   self.args.state == 'autocollapse' and 'autocollapse' or   not self.args.state and 'autocollapse' or nil) :addClass('noprint metadata') :attr('id', 'navbox-' .. (self.args.name or '')) :cssText(self.args.style) :cssText(self.args.bodystyle) end  -- Aggiunge il Tnavbar (collegamenti alla pagina del template, di discussione e modifica). -- -- @param {table} node function Navbox:_addTnavbar(node) local tnavbar = mw.getCurrentFrame():expandTemplate { title = 'Tnavbar', args = { [1] = self.args.name, ['mini'] = 1 } } node:tag('div'):addClass('navbox_navbar'):wikitext(tnavbar) end  -- Imposta il titolo del navbox dal parametro "title". -- -- @param {table} node function Navbox:_addTitle(node) node:tag('span'):addClass('navbox_title'):wikitext(self.args.title) end  -- Aggiunge la riga per i parametri "above" e "below". -- -- @param {string} arg -- @param {string} argStyle 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  -- Aggiunge una colonna per l'immagine. -- -- @param {table} trNode -- @param {number} rowspan function Navbox:_addImage(trNode, rowspan) trNode :tag('td') :attr('rowspan', rowspan) :addClass('navbox_image') :cssText(self.args.imagestyle) :wikitext(self.args.image) end  -- Aggiunge una nuova riga per ogni groupN/listN function Navbox:_addLists() local rowIds, altStyle, altBackground -- crea una riga per ogni groupN/listN 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 -- listN if self.args['list' .. id] then local list = trimSep(self.args['list' .. id]) if (i % 2) == 0 then altStyle = self.args.evenstyle altBackground = 'navbox_even' else altStyle = self.args.oddstyle altBackground = 'navbox_odd' 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  -- ============================================================================= --                            Classe NavboxSubgroup -- =============================================================================  local NavboxSubgroup = {}  -- Costruttore della classe NavboxSubgroup. -- -- @param {table} args - gli argomenti passati al modulo -- @return {table} un nuovo oggetto NavboxSubgroup function NavboxSubgroup:new(args) local self = {}  setmetatable(self, { __index = NavboxSubgroup }) self.args = args -- costruzione tabella HTML self.tableNode = mw.html.create('table') if self.args.debug then disableCSS(self.tableNode) end self:_setupTableNode() self:_addLists()  return self end  -- Restituisce la tabella HTML. -- -- @return {string} function NavboxSubgroup:getHTML() return tostring(self.tableNode) end  -- Configura gli stili CSS della tabella. function NavboxSubgroup:_setupTableNode() self.tableNode :addClass('subnavbox') :cssText(self.args.bodystyle) end  -- Aggiunge una nuova riga per ogni groupN/listN. function NavboxSubgroup:_addLists() local listIds, altStyle -- crea una row per ogni listN listIds = getIds(self.args) for _, id in ipairs(listIds) do 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 if (id % 2) == 0 then altStyle = self.args.evenstyle else altStyle = self.args.oddstyle end 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  -- ============================================================================= --                            Funzioni esportate -- =============================================================================  local p = {}  -- Funzione per l'utilizzo da un altro modulo. function p._navbox(args) return loadCSS(args.name) .. Navbox:new(args):getHTML() end  -- Funzione per l'utilizzo da un altro modulo. function p._navbox_subgroup(args) return NavboxSubgroup:new(args):getHTML() end  -- Funzione per il template {{Navbox}}. function p.navbox(frame) return p._navbox(getArgs(frame, { parentOnly = true })) end  -- Funzione per il template {{Navbox subgroup}}. function p.navbox_subgroup(frame) return p._navbox_subgroup(getArgs(frame, { parentOnly = true })) end  return p 

Tags:

🔥 Trending searches on Wiki Nnapulitano:

El SalvadorFootball Club Internazionale MilanoVaduz1868Gallus gallus domesticusGaiarine24 'e aùsto2017Silenzio cantatoreCainesCuppinoSeconna Uerra Munniale189519 'e dicembreRial Marina d''o Regno d''e Ddoje Sicilie2020PattadaRammaTeheranZardegnaGiapponeMariannìPummarolaRussia10 'e nuvembreCerasaVérdSuddamèrecaFerraroLondraAlessandria 'e NaggittoCiacionaCampaniaSan Zeno di MontagnaSarajevoAbbadia Cerreto1824IranImpero RumanoStoriaXVIII seculoNesso (CO)MassalengoPapa Benedetto XVIwn8srPusillecoNASA101 ACContenuto líbbero'O cafè1974RumaniaState Aunite d'AmerecaAustraliaFravecatoreGalleniarePastoranoBabàCapenaJersey CityDoglianiMolluscaAucielloLesboBernaTu ca nun chiagneMarranzano🡆 More