Modul:POTD

Saking Wikipédia

Dokuméntasi antuk modul puniki prasida kakardi ring Modul:POTD/doc

local p = {}

-- Loading the pictures module --
local absolutetime = os.time() -- now
local current_year = os.date("%Y", absolutetime)
local pictures_curr = mw.loadData("Modul:POTD/" .. current_year)
local pictures_prev = mw.loadData("Modul:POTD/" .. current_year - 1)
local pictures_ant = mw.loadData("Modul:POTD/" .. current_year - 2)
local pictures_next = mw.loadData("Modul:POTD/" .. current_year + 1)

-- 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
	local daymonth = ""
	
	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[daymonth] ~= nil then
				buildgallery = buildgallery .. '\n' .. 'File:' .. pictures_next.file[daymonth] .. '|' .. daymonth .. ': ' .. (pictures_next.footer[daymonth] or '')
			elseif pictures_curr.file[daymonth] ~= nil then
				buildgallery = buildgallery .. '\n' .. 'File:' .. pictures_curr.file[daymonth] .. '|' .. daymonth .. ': ' .. (pictures_curr.footer[daymonth] or '')
			elseif pictures_prev.file[daymonth] ~= nil then
				buildgallery = buildgallery .. '\n' .. 'File:' .. pictures_prev.file[daymonth] .. '|' .. daymonth .. ': ' .. (pictures_prev.footer[daymonth] or '')
			else
				buildgallery = buildgallery .. '\n' .. 'File:Empty set.svg' .. '|' .. daymonth
			end
		else
			if pictures_curr.file[daymonth] ~= nil then
				buildgallery = buildgallery .. '\n' .. 'File:' .. pictures_curr.file[daymonth] .. '|' .. daymonth .. ': ' .. (pictures_curr.footer[daymonth] or '')
			elseif pictures_prev.file[daymonth] ~= nil then
				buildgallery = buildgallery .. '\n' .. 'File:' .. pictures_prev.file[daymonth] .. '|' .. daymonth .. ': ' .. (pictures_prev.footer[daymonth] or '')
			elseif pictures_ant.file[daymonth] ~= nil then
				buildgallery = buildgallery .. '\n' .. 'File:' .. pictures_ant.file[daymonth] .. '|' .. daymonth .. ': ' .. (pictures_ant.footer[daymonth] or '')
			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
	while not pictures_curr.file[daymonth] and not pictures_prev.file[daymonth] and not pictures_ant.file[daymonth] do
		absolutetime = absolutetime - 86400 -- previous day
		daymonth = os.date("%d/%m", absolutetime)
	end
	local filename = pictures_curr.file[daymonth]
	local description = pictures_curr.footer[daymonth] or ''
    --- Take file from previous year if needed
	if filename == nil then
	    filename = pictures_prev.file[daymonth]
	    description = pictures_prev.footer[daymonth]
	    if filename == nil then
			filename = pictures_ant.file[daymonth]
	    	description = pictures_ant.footer[daymonth]
		end
	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("Modul:POTD/" .. year).exists then
		local pictures = mw.loadData("Modul: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