Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Module:Climat — Wikipédia
Module:Climat — Wikipédia 👆 Click Here! Read More..
Cette page fait l’objet d’une mesure de semi-protection étendue.
Une page de Wikipédia, l'encyclopédie libre.

 Documentation[voir] [modifier] [historique] [purger]

Utilisation

Ce module est conçu pour une utilisation à travers le modèle Modèle:Climat. Il fournit une fonction permettant la génération d'un tableau mettant en forme les relevés météorologiques d'une ville.

Ce module utilise la feuille de styles TemplateStyles Module:Climat/styles.css.

Fonctions exportables

  • main(frame) – Prend en argument un frame contenant des paramètres associés à des données météorologiques et retourne un tableau mettant en forme ces données.

Modules externes et autres éléments dont ce module a besoin pour fonctionner

  • mw.getLanguage – Crée un objet Language associé à une langue, pour ensuite appliquer des méthodes à cet objet afin d'appliquer les formatages de texte propres à cette langue ;
  • mw.ustring.gsub – Remplace toutes les occurrences d'un motif dans une chaîne de caractères par une chaîne de remplacement ;
  • mw.clone – Crée une copie de la valeur pour pouvoir l'exploiter sans la modifier ;
  • mw.text.split – Découpe une chaine de caractères en sous-chaines et retourne le résultat sous la forme d'un tableau.
  • Module:Chartes – Module permettant l'utilisation des chartes de couleur d'infobox contenues dans Module:Chartes/données.

Modules lua utilisant ce module

Aucun

Modèles appelant directement ce module

  • Modèle:Climat

Exemples

Dans Modèle:Climat, ce module est appelé par le code suivant :

{{#invoke:Climat|main}}
    • Projet Scribunto Projet Scribunto

La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (modifier).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.

local p = {}

local lang = mw.getLanguage("fr")
local lang_en = mw.getLanguage("en")

local params_necessitant_annee = {
	"tmin-bas-ann",
	"tmin-ann",
	"tmin-haut-ann",
	"tmoy-ann",
	"tmax-bas-ann",
	"tmax-ann",
	"tmax-haut-ann",
	"tmin-record-ann",
	"tmin-record-haut-ann",
	"tmax-record-bas-ann",
	"tmax-record-ann",
	"tmin--10-ann",
	"tmin--5-ann",
	"gel-jour-ann",
	"tmax--0-ann",
	"tmax-+25-ann",
	"tmax-+30-ann",
	"tmax-+35-ann",
	"soleil-ann",
	"soleil-min-ann",
	"soleil-max-ann",
	"soleil-record-ann",
	"soleil-0-ann",
	"soleil-+1-ann",
	"soleil-+5-ann",
	"ray-ann",
	"etp-ann",
	"humidité-ann",
	"prec-ann",
	"pluie-ann",
	"neige-ann",
	"pluie-record-ann",
	"neige-record-ann",
	"prec-bas-ann",
	"prec-haut-ann",
	"prec-nbr-bas-ann",
	"prec-nbr-ann",
	"prec-nbr-haut-ann",
	"pluie-jour+1mm-ann",
	"pluie-jour+5mm-ann",
	"pluie-jour+10mm-ann",
	"pluie-an-détail-ann",
	"orage-jour-ann",
	"grêle-jour-ann",
	"neige-jour-ann",
	"brouillard-jour-ann",
	"vent-10-ann",
	"vent-record-ann",
	"vent-nbr-+16-ann",
	"vent-nbr-+28-ann",
	"dju-ann",
	"dju-rad-ann",
	"dju-clim-ann",
	"press-bas-ann",
	"press-ann",
	"press-haut-ann"
}

-- les mois tel que nommes en parametres
local mois = {
	"jan",
	"fev",
	"mar",
	"avr",
	"mai",
	"jui",
	"jul",
	"aou",
	"sep",
	"oct",
	"nov",
	"dec"
}

local types_record = {
	["tmin-bas"]="année",
	["tmin-haut"]="année",
	["tmax-bas"]="année",
	["tmax-haut"]="année",
	["tmin-record"]="date",
	["tmin-record-haut"]="date",
	["tmax-record-bas"]="date",
	["tmax-record"]="date",
	["soleil-record"]="date",
	["soleil-min"]="année",
	["soleil-max"]="année",
	["pluie-record"]="date",
	["neige-record"]="date",
	["prec-bas"]="année",
	["prec-haut"]="année",
	["prec-nbr-bas"]="année",
	["prec-nbr-haut"]="année",
	["vent-record"]="date",
	["press-bas"]="date",
	["press-haut"]="date",
	["vent-10"]="date"
}

-- parse un nombre formaté en anglais tel qu'attendu par les parser functions
-- pour compenser la différence de traitement entre mediawiki et lua
function parseFormattedNumber(p)
	-- pas un moins normal (remplacé par les parser functions)
	if type(p) == 'string' then
		p = mw.ustring.gsub(p,"[−–˗‒]","-")
	end
	--les espaces sont supprimés par le tokenizer des parser function
	p=string.gsub(p," ", "")
	return lang_en:parseFormattedNumber(p)
end

local function formatNum( p )
	local result = lang:formatNum( p )
	return ( result:gsub( "^-", "−" ) )
end

-- tableau pour stocker les infos de debug
local d = {}

-- pour debugage (afficher dans un <pre> les variables de debug)
local function htmlescape(s)
	local escapes = {
		["<"] = "&lt;",
		[">"] = "&gt;",
		['"'] = "&quot;"
	}
	
	s=string.gsub(s,"&","&amp;")
	for k,v in pairs(escapes) do
		s = string.gsub(s,k,v)
	end
	return s
end

-- retourne true si au moins une option est dans les clefs de l'arg
local function any_options_in_args(args,options)
	for k,v in ipairs(options) do
		if args[v] ~= nil and args[v] ~= "" then
			return true
		end
	end
	return false
end

-- fonction renvoyant la background color pour une valeur d'ensoleillement donné

local function background_color_soleil(soleil)
	if soleil > 220 then
		return "climat-soleil-3 "
	elseif soleil > 160 then
		return "climat-soleil-2"
	elseif soleil > 100 then
		return "climat-soleil-1"
	elseif soleil > 39 then
		return "climat-soleil-0"
	end
end

-- fonction renvoyant la background color pour une valeur de temperature donné
local function background_color_temperature(temperature)
	if temperature < -27.4 then
		return "climat-temp-n3"
	elseif temperature < -19.9 then
		return "climat-temp-n2"
	elseif temperature < -12.4 then
		return "climat-temp-n1"
	elseif temperature < -4.8 then
		return "climat-temp-n0"
	elseif temperature > 47.9 then
		return "climat-temp-p5"
	elseif temperature > 39.9 then
		return "climat-temp-p4"
	elseif temperature > 27.4 then
		return "climat-temp-p3"
	elseif temperature > 19.9 then
		return "climat-temp-p2"
	elseif temperature > 12.4 then
		return "climat-temp-p1"
	elseif temperature > 4.9 then
		return "climat-temp-p0"
	end
end

-- fonction renvoyant la background color pour une valeur d'humidité donné
local function background_color_humidite(humidite)
	if humidite > 79 then
		return "climat-humid-3"
	elseif humidite > 69 then
		return "climat-humid-2"
	elseif humidite > 59 then
		return "climat-humid-1"
	elseif humidite > 49 then
		return "climat-humid-0"
	end
end
-- fonction renvoyant la background color pour une valeur de précipitation donné
function background_color_precipitation(precipitation)
	if precipitation > 199 then
		return "climat-precip-3"
	elseif precipitation > 149 then
		return "climat-precip-2"
	elseif precipitation > 99 then
		return "climat-precip-1"
	elseif precipitation > 49 then
		return "climat-precip-0"
	end
end

-- fonction renvoyant la background color pour une valeur de neige donné
function background_color_neige (neige)
	if neige > 99 then
		return "climat-neige-3"
	elseif neige > 74 then
		return "climat-neige-2"
	elseif neige > 49 then
		return "climat-neige-1"
	elseif neige > 24 then
		return "climat-neige-0"
	end
end

local lignes_tableau = {
	{
		param='tmin',
		libelle='Température minimale moyenne ([[Degré Celsius|°C]])', 
		libelle_abrege='<abbr title="Température minimale moyenne (°C)">T. min. moy.</abbr>',
		style=background_color_temperature
	},
	{
		param='tmin-bas',
		libelle='Température minimale moyenne la plus basse (°C)',
		libelle_abrege='<abbr title="Température minimale moyenne la plus basse (°C)">T. min. moy. b.</abbr>',
		record=true,
		style=background_color_temperature
	},
	{
		param='tmin-haut',
		libelle='Température minimale moyenne la plus haute (°C)',
		libelle_abrege='<abbr title="Température minimale moyenne la plus haute  (°C)">T. min. moy. h.</abbr>',
		record=true,
		style=background_color_temperature
	},
	{
		param='tmoy',
		libelle='Température moyenne (°C)',
		libelle_abrege='<abbr title="Température moyenne">T. moy.</abbr> <small>([[Degré Celsius|°C]])</small>',
		style=background_color_temperature
	},
	{
		param='tmax',
		libelle='Température maximale moyenne (°C)',
		libelle_abrege='<abbr title="Température maximale moyenne  (°C)">T. max. moy.</abbr>',
		style=background_color_temperature
	},
	{
		param='tmax-bas',
		libelle='Température maximale moyenne la plus basse (°C)',
		libelle_abrege='<abbr title="Température maximale moyenne la plus basse  (°C)">T. max. moy. b.</abbr>',
		record=true,
		style=background_color_temperature
	},
	{
		param='tmax-haut',
		libelle='Température maximale moyenne la plus haute (°C)',
		libelle_abrege='<abbr title="Température maximale moyenne la plus haute  (°C)">T. max. moy. h.</abbr>',
		record=true,
		style=background_color_temperature
	},
	{
		param='tmin-record',
		libelle='Record de froid (°C)',
		libelle_abrege='<abbr title="Record de froid  (°C)">Rec. de fr.</abbr>',
		record=true,
		style=background_color_temperature
	},
	{
		param='tmax-record-bas',
		libelle='Température maximale la plus basse (°C)',
		libelle_abrege='<abbr title="Température maximale la plus basse (°C)">T. max. b.</abbr>',
		record=true,
		style=background_color_temperature
	},
	{
		param='tmin-record-haut',
		libelle='Température minimale la plus haute (°C)',
		libelle_abrege='<abbr title="Température minimale la plus haute (°C)">T. min. h.</abbr>',
		record=true,
		style=background_color_temperature
	},
	{
		param='tmax-record',
		libelle='Record de chaleur (°C)',
		libelle_abrege='<abbr title="Record de chaleur (°C)">Rec. de ch.</abbr>',
		record=true,
		style=background_color_temperature
	},
	{
		param='tmin--10',
		libelle='Nombre de jours avec température minimale ≤ −10 °C',
		libelle_abrege='<abbr title="Nombre de jours avec température minimale">J. avec T. min.</abbr> ≤ −10 °C'
	},
	{
		param='tmin--5',
		libelle='Nombre de jours avec température minimale ≤ –5 °C',
		libelle_abrege='<abbr title="Nombre de jours avec température minimale">J. avec T. min.</abbr> ≤ −5 °C'
	},
	{
		param='gel-jour',
		libelle='Nombre de jours avec gel',
		libelle_abrege='<abbr title="Nombre de jours">J.</abbr> avec gel'
	},
	{
		param='tmax--0',
		libelle='Nombre de jours avec température maximale ≤ 0 °C',
		libelle_abrege='<abbr title="Nombre de jours avec température maximale">J. avec T. max.</abbr> ≤ 0 °C'
	},
	{
		param='tmax-+25',
		libelle='Nombre de jours avec température maximale ≥ 25 °C',
		libelle_abrege='<abbr title="Nombre de jours avec température maximale">J. avec T. max.</abbr> ≥ 25 °C'
	},
	{
		param='tmax-+30',
		libelle='Nombre de jours avec température maximale ≥ 30 °C',
		libelle_abrege='<abbr title="Nombre de jours avec température maximale">J. avec T. max.</abbr> ≥ 30 °C'
	},
	{
		param='tmax-+35',
		libelle='Nombre de jours avec température maximale ≥ 35 °C',
		libelle_abrege='<abbr title="Nombre de jours avec température maximale">J. avec T. max.</abbr> ≥ 35 °C'
	},
	{
		param='dju',
		libelle='[[Degré jour unifié|Degrés jour unifiés]]',
		libelle_abrege='[[Degré jour unifié|DJU]]'
	},
	{
		param='dju-clim',
		libelle='Degrés jour unifiés en climatisation',
		libelle_abrege='<abbr title="Degrés jour unifiés en climatisation">DJU en clim.</abbr>'
	},
	{
		param='dju-rad',
		libelle='Degrés jour unifiés en chauffage',
		libelle_abrege='<abbr title="Degrés jour unifiés en chauffage">DJU en ch.</abbr>'
	},
	{
		param='soleil',
		libelle='Ensoleillement ([[Heure|h]])',
		libelle_abrege='<abbr title="Ensoleillement">Ensol.</abbr> <small>([[Heure|h]])</small>',
		background_color_soleil
	},
	{
		param='soleil-min',
		libelle='Ensoleillement le plus bas (h)',
		libelle_abrege='<abbr title="Ensoleillement le plus bas">Ens. le plus b.</abbr> <small>(h)</small>',
		record=true
	},
	{
		param='soleil-max',
		libelle='Ensoleillement le plus élevé (h)',
		libelle_abrege='<abbr title="Ensoleillement le plus élevé">Ens. le plus h.</abbr> <small>(h)</small>',
		record=true
	},
	{
		param='soleil-record',
		libelle='Record d\'ensoleillement en 24 h (h)',
		libelle_abrege='<abbr title="Record d\'ensoleillement">Rec. d\'ens.</abbr> en 24 h <small>(h)</small>',
		record=true
	},
	{
		param='soleil-0',
		libelle='Nombre de jours sans ensoleillement',
		libelle_abrege='<abbr title="Nombre de jours sans ensoleillement">J. sans ens.</abbr>'
	},
	{
		param='soleil-+1',
		libelle='Nombre de jours avec ensoleillement ≥ 1 h',
		libelle_abrege='<abbr title="Nombre de jours avec ensoleillement">J. avec ens.</abbr> ≥ 1 h'
	},
	{
		param='soleil-+5',
		libelle='Nombre de jours avec ensoleillement ≥ 5 h',
		libelle_abrege='<abbr title="Nombre de jours avec ensoleillement">J. avec ens.</abbr> ≥ 5 h'
	},
	{
		param='ray',
		libelle='[[Ensoleillement]] ([[Joule|MJ]]/[[Mètre carré|m²]])',
		libelle_abrege='<abbr title="Ensoleillement">Ensol.</abbr> <small>([[Joule|MJ]]/[[Mètre carré|m²]])</small>'
	},
	{
		param='etp',
		libelle='[[Évapotranspiration#Évapotranspiration réelle (ETr) et potentielle (ETp)|ETp]] [[Évapotranspiration#Modélisation de Penman et Monteith|Penman]] (mm)',
		libelle_abrege='[[Évapotranspiration#Évapotranspiration réelle (ETr) et potentielle (ETp)|ETp]] [[Évapotranspiration#Modélisation de Penman et Monteith|Penman]] <small>(mm)</small>'
	},
	{
		param='vent-10',
		libelle='Record de vent sur 10 minutes (km/h)',
		libelle_abrege='<abbr title="Record de vent">Rec. de v.</abbr> sur 10 <abbr title="minutes">min.</abbr>  <small>(km/h)</small>',
		record=true
	},
	{
		param='vent-record',
		libelle='Record de vent (km/h)',
		libelle_abrege='<abbr title="Record de vent">Rec. de v.</abbr> <small>(km/h)</small>',
		record=true
	},
	{
		param='vent-nbr-+16',
		libelle='Nombre de jours avec rafales ≥ 57,6 km/h',
		libelle_abrege='<abbr title="Nombre de jours avec rafales">J. avec rafales</abbr> ≥ 57,6 km/h'
	},
	{
		param='vent-nbr-+28',
		libelle='Nombre de jours avec rafales ≥ 100,8 km/h',
		libelle_abrege='<abbr title="Nombre de jours avec rafales">J. avec rafales</abbr> ≥ 100,8 km/h'
	},
	{
		param='press',
		libelle='Pression atmosphérique au niveau de la mer ([[Pascal (unité)|hPa]])',
		libelle_abrege='<abbr title="Pression atmosphérique au niveau de la mer">P. atm. au niv. de la mer</abbr> <small>([[Pascal (unité)|hPa]])</small>'
	},
	{
		param='press-bas',
		libelle='Record de la pression la plus basse (hPa)',
		libelle_abrege='<abbr title="Record de pression">Rec. de P.</abbr> la plus basse <small>(hPa)</small>',
		record=true
	},
	{
		param='press-haut',
		libelle='Record de la pression la plus haute (hPa)',
		libelle_abrege='<abbr title="Record de pression">Rec. de P.</abbr> la plus haute <small>(hPa)</small>',
		record=true
	},
	{
		param='prec',
		libelle='Précipitations ([[Millimètre|mm]])',
		libelle_abrege='<abbr title="Précipitations">Préc.</abbr> <small>([[Millimètre|mm]])</small>',
		style=background_color_precipitation
	},
	{
		param='pluie',
		libelle='<small>dont pluie ([[Millimètre|mm]])</small>',
		libelle_abrege='<small>dont pluie ([[Millimètre|mm]])</small>',
		padding_left=true
	},
	{
		param='neige',
		libelle='<small>dont neige ([[Centimètre|cm]])</small>',
		libelle_abrege='<small>dont neige ([[Centimètre|cm]])</small>',
		style=background_color_neige,
		padding_left=true
	},
	{
		param='prec-bas',
		libelle='Précipitations les plus basses (mm)',
		libelle_abrege='<abbr title="Précipitations les plus basses">Préc. min.</abbr> <small>(mm)</small>',
		record=true
	},
	{
		param='prec-haut',
		libelle='Précipitations les plus hautes (mm)',
		libelle_abrege='<abbr title="Précipitations les plus hautes">Préc. max.</abbr> <small>(mm)</small>',
		record=true
	},
	{
		param='pluie-record',
		libelle='Record de pluie en 24 h (mm)',
		libelle_abrege='<abbr title="Record de pluie  en 24 h">Rec. de pl.</abbr> <small>(mm)</small>',
		record=true
	},
	{
		param='neige-record',
		libelle='Record de neige en 24 h (cm)',
		libelle_abrege='<abbr title="Record de neige en 24 h">Rec. de n.</abbr> <small>(mm)</small>',
		record=true
	},
	{
		param='pluie-jour',
		libelle='Nombre de jours avec précipitations',
		libelle_abrege='<abbr title="Nombre de jours avec précipitations">J. avec préc.</abbr>'
	},
	{
		param='prec-nbr-bas',
		libelle='Le moins de jours avec précipitations',
		libelle_abrege='<abbr title="Le moins de jours avec précipitations">J. avec préc. min.</abbr>',
		record=true
	},
	{
		param='prec-nbr-haut',
		libelle='Le plus de jours avec précipitations',
		libelle_abrege='<abbr title="Le plus de jours avec précipitations">J. avec préc. max.</abbr>',
		record=true
	},
	{
		param='pluie-jour+1mm',
		libelle='<small>dont nombre de jours avec précipitations ≥ 1 mm</small>',
		libelle_abrege='<small>dont J. avec pr. ≥ 1 mm</small>'
	},
	{
		param='pluie-jour+5mm',
		libelle='<small>dont nombre de jours avec précipitations ≥ 5 mm</small>',
		libelle_abrege='<small>dont J. avec pr. ≥ 5 mm</small>'
	},
	{
		param='pluie-jour+10mm',
		libelle='<small>dont nombre de jours avec précipitations ≥ 10 mm</small>',
		libelle_abrege='<small>dont J. avec pr. ≥ 10 mm</small>'
	},
	{
		param='pluie-an-détail',
		libelle='Pluviométrie du mois d\'une année (mm)',
		libelle_abrege='<abbr title="Pluviométrie du mois d\'une année">Pluv. du mois d\'1 an</abbr> <small>(mm)</small>'
	},
	{
		param='humidité',
		libelle='Humidité relative (%)',
		libelle_abrege='<abbr title="Humidité relative">Hum. rel.</abbr> <small>(%)</small>',
		style=background_color_humidite
	},
	{
		param='neige-jour',
		libelle='Nombre de jours avec neige',
		libelle_abrege='<abbr title="Nombre de jours avec neige">J. avec n.</abbr>'
	},
	{
		param='grêle-jour',
		libelle='Nombre de jours avec grêle',
		libelle_abrege='<abbr title="Nombre de jours avec grêle">J.</abbr> avec g.'
	},
	{
		param='orage-jour',
		libelle='Nombre de jours d\'orage',
		libelle_abrege='<abbr title="Nombre de jours d\'orage">J. d\'or.</abbr>'
	},
	{
		param='brouillard-jour',
		libelle='Nombre de jours avec brouillard',
		libelle_abrege='<abbr title="Nombre de jours avec brouillard">J. avec br.</abbr>'
	},
}

-- fonction principale
-- appelée par le modèle

function p.main(frame)
	
	local pframe = frame:getParent() -- on recupère le parent (le modèle)
	local args = pframe.args

-- séparation des args par période
-- sauf les common_keys sont considérés comme dans la période par défaut les arguments ne començant pas par période
	local common_keys = {
		["titre"]=true,
		["Charte"]=true,
		["source"]=true,
	}
	local common_args = {}
	local periodes = {}
	local non_periode_args = {}
	for k,value in pairs(args) do
		if common_keys[k] ~= nil then
			common_args[k] = value
		elseif string.sub(k,1,7) == "période" then
			local key = mw.text.split(k,"-")
			local periode = table.remove(key,1)
			periode=tonumber(string.sub(periode,8))
			if periode ~= nil then
				local v = periodes[periode]
				if v == nil then
					v = {}
					periodes[periode] = v
				end
				v[table.concat(key,"-")] = value
			end
		else
			local v = periodes[0]
			if v == nil then
				v = {}
				periodes[0] = v
			end
			v[k] = value
		end
	end

	-- tri des periodes
	a = {}
	for n in pairs(periodes) do
		table.insert(a, n)
	end
	table.sort(a)
	local new_periodes = {}
	for i,n in ipairs(a) do
		table.insert(new_periodes,periodes[n])
	end
	periodes = new_periodes
	
	-- calcule si periode doit être affiché
	local has_periode = #periodes>1
	
	-- On detecte si on doit afficher la colonne annee et on complète lignes_tableau si nécessaire
	local annuel_present = false
	for i, args in ipairs(periodes) do
		local an = '1'
		while args ["année"..an] and args["année"..an] ~= "" do
			table.insert(params_necessitant_annee, "pluie-an"..an.."-ann")
			table.insert(lignes_tableau, {
				param="pluie-an"..an,
				libelle="Relevé pluviométrique en "..args ["année"..an].." ([[Millimètre|mm]])",
				libelle_abrege='<abbr title="Relevé pluviométrique">Rel. pluv.</abbr> en '..args ["année"..an]..' ([[Millimètre|mm]])',
				style=background_color_precipitation,
				extra_arg="annee"..an})
			an = tostring(tonumber(an) + 1)
		end
		
		if any_options_in_args(args, params_necessitant_annee) then
			annuel_present = true
		end
	end
	

	local result = {}
	local r = {}
	table.insert(result,'<table class="wikitable sortable centre climat">\n' )
	
	titre = args["titre"] or ""
	if titre ~= nil then
		table.insert(result,"<caption>" .. titre .. "</caption>\n")
	end
	table.insert(result,"<tr>")
	charte = args["Charte"] or ""
	if charte ~= "" then
		local chartes = require ("Module:Chartes").charte_m
		charte = '#' .. chartes('geographie', 'secondaire', charte)
	end
	if has_periode then
		table.insert(result,"<th scope=col ")
		if charte ~= "" then
			table.insert(result,' style="background-color:' .. charte..'"')
		end
		table.insert(result,">Période")
		
		table.insert(result,"</th>\n")
	end
	
	table.insert(result,"<th scope=col ")
	if charte ~= "" then
		table.insert(result,' style="background-color:' .. charte..'"')
	end
	if not has_periode then
		table.insert(result,' class="unsortable"')
	end
	table.insert(result,">Mois")
	
	table.insert(result,"</th>\n")
	
	-- écrit dans result les headers correspondant aux mois
	local mois_headers = { "janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre", "année" }
	local mois_abbr = { "jan.","fév.","","","","","jui.","","sep.","oct.","nov.","déc.",""}

	for i =1, annuel_present and 13 or 12 do
		table.insert(result, '<th scope=col class="unsortable"')
		if charte ~= "" then
			table.insert( result,' style="background-color:' .. charte .. '"')
		end
		table.insert(result,">")
		if mois_abbr[i] == "" then
			table.insert(result, mois_headers[i])
		else
			table.insert(result, '<abbr title="' .. mois_headers[i] .. '">' .. mois_abbr[i] .. '</abbr>')
		end
		table.insert(result,"</th>\n")
	end
	
	table.insert(result,'</tr>')
	-- Ajout des lignes dans le tableau
	for i,args in ipairs(periodes) do
		nb_row =0
		
		for j, ligne in ipairs(lignes_tableau) do
			local params = {}
			local libelle = ligne["libelle"]
			
			for k,v in ipairs(mois) do
				table.insert(params, ligne["param"] .. "-" .. v)
			end
			if ligne["extra_arg"] ~= nil then
				table.insert(params,ligne["extra_arg"])
			end
			if any_options_in_args(args, params) then
				abrege = args["abrégé"] and args["abrégé"] ~= "non" and args["abrégé"] ~= ""
				if abrege then
					libelle = ligne["libelle_abrege"]
				end
				
				local annee_record = false
				if ligne["record"] then
					local params_date = {}
					for k,v in ipairs(mois) do
						table.insert(params_date, ligne["param"] .. "-date-" .. v)
					end
					annee_record = any_options_in_args(args, params_date)
					if annee_record then-- determination du type de record pour le paramètre donné
						local type_record = types_record[ligne["param"]] or "année"
						libelle = libelle .. "<br><small>".. type_record
						if not abrege then
							libelle = libelle .. " du record"
						end
						libelle = libelle .. "</small>"
					end
				end
				table.insert(result,'<tr>\n')
				if nb_row == 0 and has_periode then
					local p_libelle_periode = args["libellé-période"] or ""
					
					table.insert(result, '<th scope=row rowspan="')
					
					-- place_holder= global variable qui contient l'élément remplacé lorsqu'on aura fini d'afficher toutes les lines
					
					table.insert(result, "place_holder")
					place_holder = #result
					table.insert(result,'" style="')
					if charte ~= "" then
						table.insert(result, 'background-color:' .. charte.. ';' )
					end
					table.insert(result,' text-align:left;')
					
					table.insert(result,'">')
					table.insert(result, p_libelle_periode)
					table.insert(result, '</th>\n')
				end
				nb_row = nb_row + 1
				table.insert(result, '<th scope=row style="')
				if charte ~= "" then
					table.insert(result, 'background-color:' .. charte.. ';' )
				end
				table.insert(result,' text-align:left;')
				if ligne["padding_left"] then
					table.insert(result,"padding-left:10px;")
				end
				table.insert(result,'">')
				table.insert(result, libelle)
				table.insert(result, '</th>\n')
				for k,v in ipairs(mois) do
					local p = args[ligne["param"] .. "-" .. v] or ""
					local p_annee = args[ligne["param"] .. "-date-" .. v] or ""
					
					if p == "" then
						table.insert(result, "<td></td>\n")
					else
						local parsed = parseFormattedNumber( p )
						if parsed == nil then
							table.insert(result, "<td style='color:var(--color-error, #bf3c2c);'>erreur "..ligne["param"].."-"..v.." n'est pas un nombre (".. p ..")".."</td>\n")
						else
							table.insert(result, "<td ")
							
							if ligne["style"]~= nil and ligne["style"]( parsed )~= nil  then
								table.insert(result,'class="'..ligne["style"]( parsed )..'"')
							end
							table.insert(result,">".. formatNum( parsed ))
							if annee_record then
								table.insert(result,'<br><small>'..p_annee..'</small>')
							end
							table.insert(result,"</td>\n")
						end
					end
				end
				local p = args[ligne["param"] .. "-ann"] or ""
				if p ~= "" then
					local parsed = parseFormattedNumber( p )
					if parsed == nil then
						table.insert(result, "<td style='color:var(--color-error, #bf3c2c);'>erreur "..ligne["param"].."-ann n'est pas un nombre (".. p ..")".."</td>\n")
					else
						table.insert(result, "<td>'''".. formatNum( parsed ).."'''")
						if annee_record then
							local p_ann = args[ligne["param"] .. "-date-ann"] or ""
							if p_ann ~= "" then
								table.insert(result,'<br><small>'..p_ann..'</small>')
							end
						end
						table.insert(result,"</td>\n")
					end
				end
				table.insert(result,'</tr>\n')
			end
		end
		
		if nb_row > 0 and has_periode then
			result[place_holder] = tostring(nb_row)
		end
	end
	source = args["source"] or ""
	table.insert(result,"</table>")
	if source ~= "" then
		table.insert(result,'<div style="margin-top: -1em; text-align:center; font-size:85%">Source : '.. source..'</div>\n')
	else
		table.insert(result,'<div style="font-style:italic; margin-top: -1em; color:var(--color-error, #bf3c2c); text-align:center; font-size:85%">Ce tableau est sujet à caution car [[Wikipédia:Citez vos sources|il ne cite pas ses sources]].</div>')
	end
	for i,args in ipairs(periodes) do
		local diagramme = args["diagramme"] or ""
		local libelle_periode = args["libellé-période"] or ""
		if diagramme ~= "" then
			table.insert(result,'<table style="text-align:center; margin: 1em auto; border:solid 1px silver; border-collapse: collapse;">\n')
			table.insert(result,'<tr><td colspan="12">[[Diagramme climatique]] '.. libelle_periode ..'</td></tr>\n')
			
			table.insert(result,'<tr><td><abbr title="janvier">J</abbr></td><td><abbr title="février">F</abbr></td><td><abbr title="mars">M</abbr></td><td><abbr title="avril">A</abbr></td><td><abbr title="mai">M</abbr></td><td><abbr title="juin">J</abbr></td><td><abbr title="juillet">J</abbr></td><td><abbr title="août">A</abbr></td><td><abbr title="septembre">S</abbr></td><td><abbr title="octobre">O</abbr></td><td><abbr title="novembre">N</abbr></td><td><abbr title="décembre">D</abbr></td></tr>')
			table.insert(result,'<tr>')
			
			for k,v in ipairs(mois) do
				local arg1 = args["tmin-"..v] or ""
				local arg2 = args["tmax-"..v] or ""
				local arg3 = args["prec-"..v] or ""
				if arg1 == "" then
					arg1 = 10
				else
					arg1 = parseFormattedNumber(arg1)
					if arg1 == nil then
						arg1 = 10
					end
				end
				
				if arg2 == "" then
					arg2 = 20
				else
					arg2 = parseFormattedNumber(arg2)
					if arg2 == nil then
						arg2 = 20
					end
				end
				if arg3 == "" then
					arg3 = 80
				else
					arg3 = parseFormattedNumber(arg3)
					if arg3 == nil then
						arg3 = 80
					end
					
				end
				table.insert(result,'<td>')
				
				table.insert(result,'<div class="diagramme-climat-barre">')
				table.insert(result,'<div class="diagramme-climat-pointilles">&nbsp;</div>')
				table.insert(result,'<div class="diagramme-climat-precipit" style="height:'..(arg3/50) ..'em">&nbsp;</div>')
				table.insert(result,'<div class="diagramme-climat-temp" style="bottom:' ..( 8+arg1/5)..'em;height:'..((arg2-arg1)/5)..'em">&nbsp;</div>')
				table.insert(result,'<div class="diagramme-climat-temp-maxi" style="bottom:' .. (7.75+arg2/5)..'em"><small>'..formatNum(arg2)..'</small></div>')
				table.insert(result,'<div class="diagramme-climat-temp-mini" style="bottom:'.. (6.5+arg1/5)..'em"><small>'..formatNum(arg1)..'</small></div>')
				table.insert(result,'<div class="diagramme-climat-precipit-valeur"><small>'..formatNum(arg3)..'</small></div>')
				table.insert(result,'</div>')
				table.insert(result,'</td>')
		
			end
			table.insert(result,[[</tr>
				<tr><td colspan=12 style="text-align:left;">Moyennes : <abbr title="Températures">• Temp.</abbr> <span class="diagramme-climat-legende-maxi">maxi</span> et <span class="diagramme-climat-legende-mini">mini</span> <abbr title="Degrés Celsius">°C</abbr> <span class="diagramme-climat-legende-precipit">• Précipitation</span> <abbr title="Millimètres">mm</abbr></td></tr>
				</table>]])
		
		end
	end
	
	-- preprocess nécessaire pour convertir les ref
	-- ligne commentée a decommenter si besoin de debug
	return frame:extensionTag{ name = 'templatestyles', args = { src = "Module:Climat/styles.css"} } 
			.. frame:preprocess(table.concat(result))   -- .."<pre>"..htmlescape(table.concat(d)).."</pre>"
end

return p
Ce document provient de « https://fr.teknopedia.teknokrat.ac.id/w/index.php?title=Module:Climat&oldid=223861241 ».
Catégorie :
  • Module appelé directement par un modèle
Catégorie cachée :
  • Module en semi-protection étendue

  • indonesia
  • Polski
  • الرية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصر
  • Nederlands
  • 本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українска
  • Tiếng Việt
  • Winaray
  • 中文
  • Русски
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id