وحدة:Yearly archive

من ويكيبيديا، الموسوعة الحرة
local getArgs = require('Module:Arguments').getArgs
local nonexist = mw.loadData( 'Module:Yearly archive/data' )
local months = { 'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر' }

local function procyear(base,year,nonmonths)
	local ret = '*<span style="color:#222222;">\'\'\'' .. tostring(year) .. ":'''</span> "
	local m_t = {}
	for i,m in ipairs(months) do
		local exs=false
		local mypage = base .. "/" .. tostring(year) .. "/" .. m
		if nonmonths ~= nil then
			exs = (nonmonths[i] == nil)
		else
			exs = mw.title.new(mypage).exists
		end
		if exs then
			m_t[#m_t+1] = '[[' .. mypage .. '|' .. m .. ']]'
		else
			m_t[#m_t+1] =  m
		end
	end
	return ret .. table.concat(m_t, "&nbsp;<b>&middot;</b>&#32;") .. '\n'
end

local function count(t)
	local c = 0
	for _ in pairs(t) do c = c + 1 end
	return c
end

local function main(frame)
	local args = getArgs(frame)
	local syear = tonumber(args["1"])
	local cyear = os.date("*t").year
	local strallmonths = "*<span style=\"color:#222222;\">'''year:'''</span> [[base/year/يناير|يناير]]&nbsp;<b>&middot;</b>&#32;[[base/year/فبراير|فبراير]]&nbsp;<b>&middot;</b>&#32;[[base/year/مارس|مارس]]&nbsp;<b>&middot;</b>&#32;[[base/year/أبريل|أبريل]]&nbsp;<b>&middot;</b>&#32;[[base/year/مايو|مايو]]&nbsp;<b>&middot;</b>&#32;[[base/year/يونيو|يونيو]]&nbsp;<b>&middot;</b>&#32;[[base/year/يوليو|يوليو]]&nbsp;<b>&middot;</b>&#32;[[base/year/أغسطس|أغسطس]]&nbsp;<b>&middot;</b>&#32;[[base/year/سبتمبر|سبتمبر]]&nbsp;<b>&middot;</b>&#32;[[base/year/أكتوبر|أكتوبر]]&nbsp;<b>&middot;</b>&#32;[[base/year/نوفمبر|نوفمبر]]&nbsp;<b>&middot;</b>&#32;[[base/year/ديسمبر|ديسمبر]]\n"
	local base = args["2"] or mw.title.getCurrentTitle().prefixedText
	if not(syear and syear > 2002 and syear < cyear) then
		syear=2016
	end
	local ret = ""
	
	if nonexist[base] then
		local nonyear=1
		local basenon = nonexist[base]
		local cbasenon = count(basenon)
		for year=syear,cyear,1 do
			if year>= basenon[1][1] and year <= basenon[cbasenon][1] then
				while basenon[nonyear][1] < year  do
					nonyear = nonyear + 1
				end
				if basenon[nonyear][1] == year then
					ret = ret .. procyear(base,year,basenon[nonyear][2])
				else
					ret = ret .. mw.ustring.gsub(mw.ustring.gsub(strallmonths, "year", year), "base", base)
				end
			else
				ret = ret .. procyear(base,year)
			end
			
		end
	else
		for year=syear,cyear,1 do
			ret = ret .. procyear(base,year)
		end
	end
	return '<div class = "yearly-archive" style="color:gray;">\n' .. ret .. '</div>';
end

return {main=main}