Modulo:Navbox: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
aggiornato stile documentazione a quello usato in Mediawiki per Lua, utilizzo di Modulo:Controllo parametri sconosciuti, successivo a questo modulo |
Annullata la modifica 95563930 di Rotpunkt (discussione) ripristino per errore da correggere Etichetta: Annulla |
||
Riga 1:
--[[
* Modulo
* Costruisce un template di navigazione basato su una table HTML.
]]
require('Modulo:No globals')
local getArgs = require('Modulo:Arguments').getArgs
-- Configurazione
local cfg = mw.loadData('Modulo:Navbox/Configurazione')
-------------------------------------------------------------------------------
-- Funzioni di utilità
-------------------------------------------------------------------------------
-- Ritorna true se il nome dell'argomento è valido
local function isValidArg(name, validArgs, maxList)
local ret = validArgs[name] ~= nil
if not ret then
local id = name:match('^list(%d+)$') or name:match('^group(%d+)$') or
name:match('^list(%d+)style$') or name:match('^group(%d+)style$')
if id then
ret = tonumber(id) <= maxList
end
end
return ret
end
-- Ritorna gli argomenti passati al modulo, scartando quelli senza nome,
-- quelli contenenti stringhe vuote e i non riconosciuti.
local function parseArgs(args, isSubgroup)
local ret = {}
local validArgs = isSubgroup and cfg.subgroupArgs or cfg.navboxArgs
local maxList = isSubgroup and cfg.subgroupMaxList or cfg.navboxMaxList
for k, v in pairs(args) do
if type(k) == 'string' and v ~= '' and isValidArg(k, validArgs, maxList) then
ret[k] = v
end
end
return ret
end
-- Ritorna una sequence contenente gli ID dei listN presenti, ordinata e senza duplicati.
-- Se withGroup è true, controlla anche i groupN.
local function getIds(args, withGroup)
local
local ret = {}
-- siccome Lua ha solo le table e non i set (elementi unici), prima popola ids usando le chiavi
for k, _ in pairs(args) do
local id = k:match('^list(%d+)$') or (withGroup and k:match('^group(%d+)$'))
if id then
ids[tonumber(id)] = 1
end
end
-- quindi ritorna una sequence fatta delle chiavi della table ids
for k, _ in pairs(ids) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
--
local function trimSep(list)
local sep = mw.getCurrentFrame():expandTemplate{
local sepEsc = mw.ustring.gsub(sep, '-', '%-')
return mw.ustring.gsub(list, '%s*' .. sepEsc .. '%s*', sep)
Line 47 ⟶ 78:
-- Con il debug ridefinisce il metodo mw.html:css,
-- permettendo di eseguire i test senza controllare anche i css.
local function disableCSS(tableNode)
local mt = getmetatable(tableNode)
Line 54 ⟶ 83:
end
-------------------------------------------------------------------------------
--
-------------------------------------------------------------------------------
local Navbox = {}
function Navbox:new(args)
local self = {}
Line 76 ⟶ 101:
setmetatable(self, { __index = Navbox })
self.args = args
-- costruzione
self.tableNode = mw.html.create('table')
if self.args.debug then
Line 82 ⟶ 107:
end
self:_setupTableNode()
-- prima
thNode = self.tableNode:tag('tr')
:tag('th')
Line 94 ⟶ 119:
self:_addTitle(thNode)
end
-- eventuale
if self.args.above then
self:_addAboveOrBelow(self.args.above, self.args.abovestyle)
end
-- altre
self:_addLists()
-- eventuale
if self.args.below then
self:_addAboveOrBelow(self.args.below, self.args.belowstyle)
Line 108 ⟶ 133:
end
function Navbox:getHTML()
return tostring(self.tableNode)
end
function Navbox:_setupTableNode()
local tableStyle = {
Line 138 ⟶ 159:
end
function Navbox:_addTnavbar(node)
local divStyle = {
Line 159 ⟶ 177:
end
function Navbox:_addTitle(node)
node:tag('span'):css('font-size', '110%'):wikitext(self.args.title)
end
function Navbox:_addAboveOrBelow(arg, argStyle)
local tdStyle = {
Line 185 ⟶ 196:
end
function Navbox:_addImage(trNode, rowspan)
local tdStyle = {
Line 203 ⟶ 210:
end
function Navbox:_addLists()
local rowIds, altStyle, altBackground
Line 252 ⟶ 258:
end
-------------------------------------------------------------------------------
--
-------------------------------------------------------------------------------
local NavboxSubgroup = {}
function NavboxSubgroup:new(args)
local self = {}
Line 267 ⟶ 269:
setmetatable(self, { __index = NavboxSubgroup })
self.args = args
-- costruzione
self.tableNode = mw.html.create('table')
if self.args.debug then
Line 278 ⟶ 280:
end
function NavboxSubgroup:getHTML()
return tostring(self.tableNode)
end
function NavboxSubgroup:_setupTableNode()
local tableStyle = {
Line 302 ⟶ 300:
end
function NavboxSubgroup:_addLists()
local listIds, altStyle
Line 335 ⟶ 332:
end
-------------------------------------------------------------------------------
--
-------------------------------------------------------------------------------
local p = {}
function p._navbox(args)
return Navbox:new(parseArgs(args)):getHTML()
end
function p._navbox_subgroup(args)
return NavboxSubgroup:new(parseArgs(args, true)):getHTML()
end
--
function p.navbox(frame)
return p._navbox(getArgs(frame, {
end
--
function p.navbox_subgroup(frame)
return p._navbox_subgroup(getArgs(frame, {
end
|