Module:Wikimedia engineering project date categories
Module to output Category:WMF Projects subcategories as appropriate for a start and end date, to be used in {{Wikimedia engineering project information }}
-- Module to output [[:Category:WMF Projects]] subcategories
-- as appropriate for a start and end date, to be used in
-- {{Wikimedia engineering project information}}
local p = {}
local lang = mw.language.getContentLanguage()
local function makeCategory( catdate, trail )
local quarter, year
quarter = math.ceil( tonumber( lang:formatDate( "m", catdate ) ) / 3 )
year = lang:formatDate( "Y", catdate )
return "[[Category:WMF Projects " .. year .. "q" .. tostring( quarter ) .. trail .. "]]"
end
function p.datesToCategories( frame )
local startdate, curdate, enddate
local categories = ""
local trail = ""
if (not frame.args.startdate) or frame.args.startdate == "" then
return "[[Category:WMF Projects missing start date]]"
else
curdate = frame.args.startdate
if string.len(curdate) < 4 then
return "[[Category:WMF Projects missing start date]]"
end
if string.len(curdate) == 4 then
curdate = curdate .. "-01"
end
end
local title = mw.title.getCurrentTitle()
if title and title.subpageText and mw.language.isSupportedLanguage(title.subpageText) and not (title.subpageText == mw.language.getContentLanguage():getCode()) then
-- Don't populate WMF quarter category with translations of every page
return ''
end
local now = lang:formatDate("U")
if (not frame.args.enddate) or frame.args.enddate == "" then
-- Ends now
enddate = now
else
enddate = frame.args.enddate
if string.len(enddate) == 4 then
enddate = enddate .. "-12"
end
enddate = lang:formatDate("U", enddate)
end
if enddate >= now then
-- Current project
-- In unusual circumstances like [[Extension:Chart/Project]] a project can have a known future end date
-- treat that the same way as a current end date for categorization
categories = categories .. "[[Category:WMF Projects" .. trail .. "]]"
enddate = now
end
while lang:formatDate( "U", curdate ) < enddate do
categories = categories .. makeCategory( curdate, trail )
curdate = lang:formatDate( "Y-m-d", curdate .. "+3 months" )
end
categories = categories .. makeCategory( "@"..enddate, trail )
return categories
end
return p