Vés al contingut

Mòdul:POTD

De la Viquipèdia, l'enciclopèdia lliure
Icona de documentació de mòdul Documentació del mòdul [ mostra ] [ modifica el codi ] [ mostra l'historial ] [ refresca ]

Mòdul POTD (codi · ús · discussió · proves · tests · casos prova | subpàgines · enllaços)

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]


Aquest mòdul dóna suport a la selecció de la imatge del dia (POTD, sigles en anglès) mostrada en portada entre les imatges prèviament proposades. Vegeu {{FotoDelDia}} per a les instruccions d'ús.

La llista d'imatges proposades és a Mòdul:POTD/2024 per a l'any actual, o bé al mòdul de l'any que s'indiqui amb la funció "archive". Si en un dia determinat no hi ha imatge proposada, el mòdul mostra la primera imatge del mateix dia que troba cercant successivament els cinc anys anteriors. Vegeu els criteris a Viquipèdia:Imatge del dia.

local p = {}

-- Loading modules of pictures by year
local absolutetime = os.time() -- now
local current_year = os.date("%Y", absolutetime)

local exist
local pictures = {}

local function tryLoad(m)
	return mw.loadData(m)
end

for first_year = 0, -10, -1 do
	current_year = current_year + first_year
	exist, pictures["0"] = pcall(tryLoad, "Module:POTD/" .. current_year)
	if exist then
		for prev_year = -1, -5, -1 do
			exist, pictures[tostring(prev_year)] = pcall(tryLoad, "Module:POTD/" .. current_year + prev_year)
			if not exist then
				break
			end
		end
		break
	end
end

local function getFile(daymonth)
	local filename, description
	for years = 0, -5, -1 do
		local picts = pictures[tostring(years)]
		if picts then
			if picts.file[daymonth] then
				filename = picts.file[daymonth]
				description = picts.footer[daymonth] or ''
				break
			end
		else
			return
		end
	end
	return filename, description
end

-- Building a gallery for requested number of pictures --
local function gallerator(scope)
	local buildgallery = ""
	local range = 0
	local iter = 1
	if scope == "all" then
		range = 365
	elseif tonumber(scope) then
		range = tonumber(scope)
		iter = range < 0 and -1 or 1
	end
	
	absolutetime = os.time() -- now
	current_year = os.date("%Y", absolutetime)
	local daymonth = ""
	local exist, pictures_next = pcall(tryLoad, "Module:POTD/" .. os.date("%Y", absolutetime) + 1)
	if not exist then
		pictures_next = {}
	end
	local filename, description
	
	for days = iter, range, iter do
		absolutetime = absolutetime + (86400 * iter) -- one day
		daymonth = os.date( "%d/%m" , absolutetime )
		if os.date("%Y", absolutetime) > current_year then
			if pictures_next.file and pictures_next.file[daymonth] then
				buildgallery = buildgallery .. '\n' .. 'File:' .. pictures_next.file[daymonth] .. '|' .. daymonth .. ': ' .. (pictures_next.footer[daymonth] or '')
			else
				filename, description = getFile(daymonth)
				if filename then
					buildgallery = buildgallery .. '\n' .. 'File:' .. filename .. '|' .. daymonth .. ': ' .. description
				else
					buildgallery = buildgallery .. '\n' .. 'File:Empty set.svg' .. '|' .. daymonth
				end
			end
		else
			filename, description = getFile(daymonth)
			if filename then
				buildgallery = buildgallery .. '\n' .. 'File:' .. filename .. '|' .. daymonth .. ': ' .. description
			else
				buildgallery = buildgallery .. '\n' .. 'File:Empty set.svg' .. '|' .. daymonth
			end
		end
	end
	return buildgallery
end


-- Matching pictures with day of year --
function p.todayspics(frame)
	local args = frame:getParent().args
	local option = args[1] or ""
	
	-- Which date is today? --
	local daymonth = os.date("%d/%m", absolutetime)
	
	-- Which picture and description should we use today? --
	if option:find("%d%d/%d%d") then
		daymonth = option
	end
	
	local filename, description = getFile(daymonth)
	
	while not filename do
		absolutetime = absolutetime - 86400 -- previous day
		daymonth = os.date("%d/%m", absolutetime)
		filename, description = getFile(daymonth)
	end
	
	-- Any template in footer? Expand it
	if string.match(description, '%b{}') then
		description = frame:preprocess(description)
	end
	
	-- Which output is desired, text or description? --
	local show = ""
	if option == "filename" then
		show = filename
	elseif option == "description" then
		show = description
	else
		show = '[[File:' .. filename .. '|350x350px]]<br />' .. description
	end
	
	-- Which pictures should we display in addition of today's? --
	local gallery = ""
	if option == "all" or tonumber(option) then
		gallery = frame:extensionTag{name = 'gallery', content = gallerator(option), args = {mode='packed-hover', heights='150px'}}
	end
	
	return show .. gallery
end

-- Generates an archive of a year. Use it {{subst:#invoke:POTD|archive|<YYYY>}}
function p.archive(frame)
	local year = frame.args[1]
	if mw.title.new("Module:POTD/" .. year).exists then
		local pictures = mw.loadData("Module:POTD/" .. year)
		local buildgallery = {}
		local absolutetime = os.time({year=year, month=1, day=1})
		for iter = 0, 365 do
			day = absolutetime + (86400 * iter)
			daymonth = os.date("%d/%m", day)
			if pictures.file[daymonth] ~= nil then
				table.insert(buildgallery, 'File:' .. pictures.file[daymonth] .. '|' .. daymonth .. ': ' .. (pictures.footer[daymonth] or ''))
			end
		end
		return frame:extensionTag{name = 'gallery', content = table.concat(buildgallery, '\n'), args = {mode='packed', heights='150px'}}
	end
	return
end
	
return p