Aller au contenu

Module:Date/Vérification Data

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 7 mai 2018 à 23:20 et modifiée en dernier par Zebulon84 (discuter | contributions) (retouche de la modif. précédente). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 Documentation[créer] [purger]
local p = {}

local listeMois = { 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre', }

---
-- erreurModuleData affiche  d'un message d'erreur si le Module:Langue/Data n'a pas été chargé correctement,
-- pour la page de discussion de la base de donnée et ceux qui veulent surveiller cette page.
function p.erreurModuleData()
	local success, resultat = pcall ( mw.loadData, 'Module:Date/Data' )
	if success == false then
		local message = [[<strong class="error">Le chargement du module Date/Data génère une erreur : </strong><br />%s<br />

<span class="error">Cette erreur doit être corrigée au plus vite car des milliers de page ne s'affichent pas correctement</span>
]]
		return string.format( message, resultat )
	end
end

---
-- checkDataCat génère des liens vers les pages annuelles, mensuelles et d'éphémérides liè aux
-- catégories du Module:Date/Data. La date la plus ancienne dépend de 'aucun' et 'seul[1]'
-- Paramètres :
-- 	1 : la catégorie. Il y aura une section par qualificatif de cette catégorie.
-- 	mois : oui pour avoir les liens vers les pages mensuelles et éphémérides (4 jours dans l'année)
-- 	alias : pour avoir des lien pour les alias en plus des qualificatif
function p.checkDataCat( frame )
	local category = frame.args[1] and mw.text.trim(frame.args[1])
	local monthLinks = frame .args.mois == 'oui'
	local alias = frame.args.alias == 'oui'
	local reqDataLink, dataLink = require( 'Module:Date/Data' ), {}
	local wikiList =  {}
	local currentYear = tonumber( os.date( '%Y' ) )
	local columns = '<div style="-moz-column-width:5em;-webkit-column-width:5em;column-width:5em;-moz-column-gap:1em;-webkit-column-gap:1em;column-gap:1em;text-align:left;">'
	local newSection
	if monthLinks then
		newSection = '\n\n== %s ==\n\n=== Années ===\n' .. columns
	else
		newSection ='\n\n== %s ==\n' .. columns
	end
	-- copie de la table pour pouvoir la trier
	for field, dataField in pairs( reqDataLink ) do
		-- boucle sur tous les qualificatif ayant pour catégorie le premier paramère
		if dataField.cat == category or ( category == 'cat' and dataField.cat == field ) then
			if alias then
				local data = mw.clone( dataField )
				data.clef = field
				table.insert( dataLink, data )
			elseif dataField.qualificatif == field then
				table.insert( dataLink, dataField )
			end
		end
	end
	table.sort(
		dataLink, 
		function(v1, v2)
			return (v1.tri or '') < (v2.tri or '')
		end
	)
	for _, dataField in ipairs( dataLink ) do
		local field = dataField.clef or dataField.qualificatif
		local monthInitialYear, initialYear
		-- définition de l'année à partir de laquelle on va tester toutes les année / mois
		if dataField.qualificatif == field or ( category == 'cat' and dataField.cat == field ) then
			if dataField.annee and dataField.annee.aucun and dataField.annee.aucun < currentYear then
				local aucun = ( dataField.annee.seul and dataField.annee.seul[1] ) or dataField.annee.aucun
				initialYear = math.min( aucun - math.ceil( (currentYear - aucun) / 4 ), currentYear - 50 )
			else
				initialYear = currentYear - 50
			end
			if dataField.mois and tonumber( dataField.mois.aucun ) and ( tonumber( dataField.mois.aucun ) < currentYear ) then
				local aucun = dataField.mois.aucun
				monthInitialYear = math.min( aucun - math.ceil( (currentYear - aucun) / 4 ), currentYear - 8 )
			else
				monthInitialYear = currentYear - 8
			end
		elseif alias then
			-- si le paramètre alias est défini on teste aussi tous les alias, sinon ils sont ignorés
			initialYear = currentYear - 50
			monthInitialYear = currentYear - 8
		end
		
		-- création de l'ensembles des liens
		if initialYear then
			-- ajout de lien vers les pages annuelles de l'année en court + 5 jusqu'à initialYear
			table.insert( wikiList,  string.format( newSection, field ) )
			local fieldLink = ' ' .. field
			if category == 'cat' then
				fieldLink = ' ' .. dataField.qualificatif
			end
			for year = ( currentYear + 5 ), initialYear, -1  do
				table.insert( wikiList,  '\n* [[' .. year .. fieldLink ..'|' .. year .. ']]' )
			end
			table.insert( wikiList,  '\n</div>' )
			
			if monthLinks then
				-- insertstion de liens vers les mois de l'année en court + 1 jusqu'à monthInitialYear
				table.insert( wikiList,  '\n\n=== Mois ==='  )
				local month, sep
				for year = ( currentYear + 1 ), monthInitialYear, -1  do
					table.insert( wikiList,  '\n* ' .. year .. ' : ' )
					sep = ' • '
					for j = 1, 12 do
						month = listeMois[j] .. ' '
						if j == 12 then sep = ''
						end
						table.insert( wikiList,  '[[' .. month .. year .. ' ' .. fieldLink .. '|' .. month .. ']]' .. sep )
					end
				end
				
				-- insertion de quelques date pour tester les éphémérides
				table.insert( wikiList,  '\n\n=== Jours ==='  )
				table.insert( wikiList,  '\n* [[1er janvier ' .. fieldLink .. ']]' )
				table.insert( wikiList,  '\n* [[14 mars ' .. fieldLink .. ']]' )
				table.insert( wikiList,  '\n* [[22 juin ' .. fieldLink .. ']]' )
				table.insert( wikiList,  '\n* [[3 septembre ' .. fieldLink .. ']]' )
			end
		end
	end
	
	return table.concat( wikiList )
end

return p