Modul:SelectedAnniversaries
Aspect
Documentația acestui modul poate fi creată la Modul:SelectedAnniversaries/doc
local getArgs = require('Modul:Arguments').getArgs
local TableTools = require('Modul:TableTools')
local DateUtils = require('Modul:DateUtils')
local StringUtils = require('Modul:StringUtils')
local infoboxImage = require('Modul:InfoboxImage').InfoboxImage
local wikidata = nil
local p = {}
local function getNElementsFromList(list, n)
local clonedList = mw.clone(list)
local ret = {}
math.randomseed(os.time())
while n > 0 and #clonedList > 0 do
local selectedIndex = math.random(#clonedList)
table.insert(ret, table.remove(clonedList, selectedIndex))
n = n - 1
end
return ret
end
local function processBios(list, title, datePropNumber)
local htmlElem = mw.html.create('li'):css('-moz-float-edge', 'content-box')
for listItemIdx = 1,#list do
if list[listItemIdx].q then
if not wikidata then wikidata = require('Modul:Wikidata') end
local qItem = StringUtils._prependIfMissing({tostring(list[listItemIdx].q), 'Q'})
list[listItemIdx].link = wikidata.findLinkToItem(qItem, true)
local bioevtDate = wikidata.findDateValues(StringUtils._prependIfMissing({tostring(datePropNumber), 'P'}), qItem)
list[listItemIdx].year = bioevtDate[1].year
else
list[listItemIdx].name = list[listItemIdx].name or list[listItemIdx].title
list[listItemIdx].title = list[listItemIdx].title or list[listItemIdx].name
list[listItemIdx].link = (list[listItemIdx].title == list[listItemIdx].name) and ('[[' .. list[listItemIdx].title .. ']]') or ('[[' .. list[listItemIdx].title .. '|' .. list[listItemIdx].name .. ']]')
end
end
table.sort(list, function(e1, e2) return e1.year < e2.year end)
local outputList = {}
for _,listitem in ipairs(list) do
table.insert(outputList, listitem.link .. ' (' .. DateUtils.formatYear(listitem.year, true) .. ')')
end
return tostring(htmlElem:wikitext("'''" .. title .. ":''' " .. table.concat(outputList, mw.text.decode(' – '))))
end
p.footer = function(day, month)
local today = os.date("*t")
if day and month then
today = DateUtils.parseDate(table.concat({day, month, tostring(today.year)}, ' '))
end
local yesterday = DateUtils.addDaysToDate(today, -1)
local tomorrow = DateUtils.addDaysToDate(today, 1)
local daylinks = {}
for _,eachDate in ipairs({yesterday, today, tomorrow}) do
local eachDateStr = mw.getContentLanguage():formatDate('j F', os.date('%d %B %Y', os.time(eachDate)))
table.insert(daylinks, '[[Format:Aniversările zilei/' .. eachDateStr .. '|' .. eachDateStr .. ']]')
end
daylinks[2] = "'''" .. daylinks[2] .. "'''"
return 'Alte aniversări: ' .. table.concat(daylinks, mw.text.decode(' – '))
end
p.footerFromFrame = function(frame)
local args = getArgs(frame)
local day
local month
if args['Zi'] then day = tonumber(args['Zi']) end
month = args['Lună']
return p.footer(day, month)
end
p.core = function(events, specialDays, births, deaths, image, day, month, showHeader, showImage)
local out = ''
local workingDate = os.date("*t")
if day and month then
workingDate = DateUtils.parseDate(table.concat({day, month, tostring(workingDate.year)}, ' '))
end
if showHeader then
local specialDaySeparator = tostring(mw.html.create('span'):css('white-space', 'nowrap'):wikitext(mw.text.decode(' •'))) .. ' '
local dateAndSpecialDaysList = {}
table.insert(dateAndSpecialDaysList, "'''[[" .. mw.getContentLanguage():formatDate('j F', os.date('%d %B %Y', os.time(workingDate))) .. "]]''':")
table.insert(dateAndSpecialDaysList, table.concat(specialDays, specialDaySeparator))
out = out .. table.concat(dateAndSpecialDaysList, ' ')
end
if showImage then
out = out .. tostring(mw.html.create('div'):css('float', 'right'):css('margin-left', '0.5em'):wikitext(infoboxImage{image=image.file, size = '100x100px', alt = image.alt, suppressplaceholder='yes'}))
end
local selectedEvents = getNElementsFromList(events, 6)
table.sort(selectedEvents, function(evt1, evt2) return evt1.year < evt2.year end)
out = out .. "<ul>"
for _,eachEvent in ipairs(selectedEvents) do
out = out .. tostring(
mw.html.create('li'):css('-moz-float-edge', 'content-box')
:wikitext(table.concat({DateUtils.formatYear(eachEvent.year, true), eachEvent.evt}, mw.text.decode(' — ')))
)
end
out = out .. processBios(getNElementsFromList(births, 3), 'Nașteri', 569)
out = out .. processBios(getNElementsFromList(deaths, 3), 'Decese', 570)
out = out .. "</ul>"
out = out .. tostring(mw.html.create('p'):wikitext(p.footer(day, month)))
return out
end
p.coreFromFrame = function(frame)
local args = getArgs(frame)
local numData = TableTools.numData(args, true)
local events = {}
local specialDays = {}
local births = {}
local deaths = {}
for _,eachNumData in ipairs(numData) do
if eachNumData['sărbătoare'] then table.insert(specialDays, eachNumData['sărbătoare']) end
if eachNumData['an'] and eachNumData['eveniment'] then
local crtEvent = {}
crtEvent.year = eachNumData['an'] and DateUtils.parseYear(eachNumData['an']).year
crtEvent.evt = eachNumData['eveniment']
table.insert(events, crtEvent)
end
if eachNumData['q_născut'] then
local crtBirth = {}
crtBirth.q = eachNumData['q_născut']
table.insert(births, crtBirth)
end
if (eachNumData['titlu_născut'] or eachNumData['nume_născut']) and eachNumData['an_născut'] then
local crtBirth = {}
crtBirth.year = eachNumData['an_născut'] and DateUtils.parseYear(eachNumData['an_născut']).year
crtBirth.title = eachNumData['titlu_născut']
crtBirth.name = eachNumData['nume_născut']
table.insert(births, crtBirth)
end
if eachNumData['q_deces'] then
local crtDeath = {}
crtDeath.q = eachNumData['q_deces']
table.insert(deaths, crtDeath)
end
if (eachNumData['titlu_deces'] or eachNumData['nume_deces']) and eachNumData['an_deces'] then
local crtDeath = {}
crtDeath.year = eachNumData['an_deces'] and DateUtils.parseYear(eachNumData['an_deces']).year
crtDeath.title = eachNumData['titlu_deces']
crtDeath.name = eachNumData['nume_deces']
table.insert(deaths, crtDeath)
end
end
local showHeader = args['arată_antet'] and tonumber(args['arată_antet']) or 1
local showImage = args['arată_imagine'] and tonumber(args['arată_imagine']) or 1
return p.core(events, specialDays, births, deaths, {file = args['imagine'], alt = args['alt_imagine']}, args['zi'], args['lună'], showHeader, showImage)
end
return p