Modulo:Avviso/sandbox
La documentazione per questo modulo può essere creata in Modulo:Avviso/sandbox/man
--[[
Source script: https://it.wikivoyage.org/wiki/Modulo:Avviso
Maintainer: Andyrom75, Nastoshka
v.1.0.0 -- Andyrom75 (novembre 2021)
v.2.0.0 -- Nastoshka (gennaio 2024)
]]
-- --------------------------- Funzioni ausiliarie ---------------------------------------------
-- Meta funzione per impostare un valore di default per una tabella Lua
-- nel caso si tentasse l'accesso ad un parametro non esistente
-- Vedi: https://www.lua.org/pil/13.4.3.html
function setDefault (t, d)
local mt = {__index = function () return d end}
setmetatable(t, mt)
end
-- --------------------------- Costanti ---------------------------------------------
-- immagine per il banner di avviso
local IMAGE_PATHS = {
importante = '[[File:Stop hand nuvola.svg|40px|link=]]',
contenuto = '[[File:Emblem-important.svg|40px|link=]]',
stile = '[[File:Broom icon.svg|40px|link=]]',
statico = '[[File:Gnome globe current event.svg|40px|link=]]',
struttura = '[[File:Merge-split-transwiki default.svg|40px|link=]]',
avviso = '[[File:Info non-talk.png|40px|link=]]',
disambigua = '[[File:Info non-talk.png|40px|link=]]',
protezione = '[[File:Padlock.svg|40px|link=]]',
disclaimer = '[[File:Nuvola_apps_important.svg|40px|link=]]',
trasparente = '[[File:No image.svg|link=]]',
-- vetrina = '[[File:Crystal Clear action bookmark silver and gold doubt.svg|40px|link=]]',
default = '[[File:Info non-talk.png|40px|link=]]'
}
setDefault(IMAGE_PATHS, IMAGE_PATHS.default)
-- determina il css da usare e in alcuni casi categorizza (dipendentemente dal namespace)
local WARNING_TYPE = {
importante = 'avviso-importante',
contenuto = 'avviso-contenuto',
stile = 'avviso-stile',
statico = 'avviso-statico',
struttura = 'avviso-struttura',
avviso = 'avviso-informazioni',
disambigua = 'avviso-disambigua hatnote',
protezione = 'avviso-generico',
disclaimer = 'avviso-disclaimer',
default = 'avviso-informazioni'
}
setDefault(WARNING_TYPE, WARNING_TYPE.default)
local IMAGE_BOX_SIZE_DEFAULT = '52px'
-- --------------------------- Funzioni principali ---------------------------------------------
-- Stabilisci l'icona da usare a lato del testo
-- Se un'immagine è stata passata come parametro, prendi quella
-- altrimenti usa il tipo come fallback (se il tipo non esiste nell'array / table, usa il default)
local function getWarningImage(args)
-- Immagine volantariamente disattivata
local isImageDisabled = function() return args['2'] == 'nessuna' or args.immagine == 'nessuna' end
if isImageDisabled() then
return ' '
end
local imagebox_width = args.imageboxsize or IMAGE_BOX_SIZE_DEFAULT
-- Immagine passata come parametro
local isPassedImageAvailable = function() return not (args['2'] == nil or args['2'] == '') or not (args.immagine == nil or args.immagine == '') end
if isPassedImageAvailable() then
local passed_image = args['2'] or args.immagine
return '<div style="width:' .. imagebox_width .. ';">' .. passed_image .. '</div>'
end
-- fallback (usa il tipo, o in alternativa il valore di default)
return '<div style="width:' .. imagebox_width .. ';">' .. IMAGE_PATHS[args.tipo] .. '</div>'
end
local function get_right_image(args)
local right_image = args['immagine a destra'] or false
if not right_image then
return ''
end
return '<div class="avviso-immaginedestra">'
.. '<div style="width:' .. (args.imageboxsize or IMAGE_BOX_SIZE_DEFAULT) .. ';"> ' .. right_image .. ' </div>'
.. '</div>'
end
local function getWarningText(args)
local text = args['1'] or args.testo or ''
return tostring(text)
end
local function getCategoryTag(args)
local title_obj = mw.title.getCurrentTitle()
local namespace = title_obj.namespace
local page_title = title_obj.text
local should_be_categorized = args.tipo == 'avviso' or args.tipo == 'importante'
if namespace == 8 then -- MediaWiki namespace
return '[[Categoria:Messaggi di sistema con avviso|' .. page_title .. ']]'
end
if namespace == 0 and should_be_categorized then -- Main namespace, tipo avviso o importante
return '[[Categoria:Articoli con avviso]]'
end
return '' -- Non categorizzare
end
-- --------------------------- Main logic ---------------------------------------------
local function generateWarningBox(frame)
local args = frame.args
-- raccogliamo i pezzi del puzzle
local style = args.stile or ''
local warningType = WARNING_TYPE[args.tipo]
local warningImage = getWarningImage(args)
local warningRightImage = get_right_image(args)
local warningText = getWarningText(args)
local categoryTag = getCategoryTag(args)
-- e mettiamo insieme il tutto ;)
local htmlOutput = {
'<div style="' .. style .. '" class="plainlinks noprint avviso ambox ' .. warningType .. '">',
'<div class="avviso-immagine mbox-image">',
warningImage,
'</div>',
'<div class="avviso-testo mbox-text-span" style="' .. (args['stile testo'] or '') .. '">',
warningText,
'</div>',
warningRightImage,
'</div>',
categoryTag
}
-- mw.log('htmlOutput: ' .. table.concat(htmlOutput)) -- DEBUG
return table.concat(htmlOutput)
end
-- --------------------------- Interfaccia del modulo ---------------------------------------------
local p = {} -- package to be exported
-- per la differenza tra frame e frame:getParent() vedi
-- - https://en.wikipedia.org/wiki/Help:Lua_for_beginners#Parent_frame
-- - https://it.wikivoyage.org/wiki/Modulo:Arguments/man
function p.avvisoTemplate(frame)
return generateWarningBox(frame:getParent()) -- se invocato attraverso un template
end
function p.avviso(frame)
return generateWarningBox(frame) -- se invocato direttamente in un template
end
return p