Modulo:Non firmato
Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Non firmato/man (modifica · cronologia)
Sandbox: Modulo:Non firmato/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Non firmato/test (modifica · cronologia · Esegui)
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Non firmato/man (modifica · cronologia)
Sandbox: Modulo:Non firmato/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Non firmato/test (modifica · cronologia · Esegui)
Questo modulo implementa le funzionalità del template {{Non firmato}}.
local mIpValidator = require('Modulo:IP validator')
local p = {}
local function getDateObject(datetime, seconds)
return string.format('%s - %s seconds', datetime, seconds)
end
local function getTimezoneAbbr(date)
if date == '' then return end
local lang = mw.language.getContentLanguage()
local months = {
gen = 1, feb = 2, mar = 3, apr = 4, mag = 5, giu = 6,
lug = 7, ago = 8, set = 9, ott = 10, nov = 11, dic = 12
}
local monthnum = months[date:match('%a%a%a')]
if monthnum then
date = date:gsub('%s%a%a%a%s', string.format('-%s-', monthnum))
end
if pcall(lang.formatDate, lang, '', date) == false then return end
local offset = lang:formatDate('Z', date, true)
local localdate = lang:formatDate('r', getDateObject(date, offset), true)
local hour = lang:formatDate('H', date)
local localhour = lang:formatDate('H', localdate, true)
-- verifica l'assenza di cambi d'ora imprevisti nella conversione all'ora locale
if hour ~= localhour then
local unix = lang:formatDate('U', date)
local localunix = lang:formatDate('U', localdate, true)
local difftime = os.difftime(unix, localunix)
localdate = lang:formatDate('r', getDateObject(localdate, difftime), true)
end
-- non restituisce la sigla se c'è ambiguità col cambio d'ora all'ora solare
if localhour ~= lang:formatDate('H', localdate .. '-1 hour', true) then
local timezoneabbr = lang:formatDate('T', localdate, true)
return string.format(' (%s)', timezoneabbr)
end
end
function p.main(frame)
local args = frame:getParent().args
local date, username, userpage, talkpage
local regex = '%d?%d:%d%d,? %d+ %a%a%a %d%d%d%d'
-- se non c'è il 2º parametro, verifica se data e username sono insieme
if args[1] and not args[2] then
-- date e username possono essere separati da U+200E o da uno spazio
local sep = args[1]:match(regex .. '(\226\128\142)') or ' '
date, username = args[1]:match(string.format('(%s)%s(.*)', regex, sep))
-- se non c'è la data, presume sia solo il nome utente (obbligatorio)
if not date then
date, username = '', args[1]
end
else
-- presume di default che data e username siano al 1º e 2º parametro
date, username = args[1] or '', args[2] or ''
if not date:match(regex) and username:match(regex) then
date, username = username, date
end
end
date, username = mw.text.trim(date), mw.text.trim(username)
userpage = mIpValidator._is_ip(username) and username or string.format('[[Utente:%s|%s]]', username, username)
talkpage = string.format('[[Discussioni utente:%s|discussioni]] · [[Speciale:Contributi/%s|contributi]]', username,
mIpValidator._is_ipv6(username) and username:upper() or username)
date = date .. (getTimezoneAbbr(date:gsub('\226\128\142', '')) or '')
return string.format("<small>— ''Questo commento senza la [[Aiuto:Firma|firma utente]] è stato inserito da %s (%s)%s''.</small>",
userpage, talkpage, date == '' and '' or ' ' .. date)
end
return p