Module:Climat/Bac à sable
Apparence
[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
Exemples
Dans Modèle:Climat, ce module est appelé par le code suivant :
{{#invoke:Climat|main}}
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")
-- parse un nombre formaté en anglais tel qu'attendu par les parser functions
-- pour compenser la difference de traitement entre mediawiki et lua
function parseFormattedNumber(p)
-- pas un moins normal (remplacé par les parser function)
p = string.gsub(p,"−","-")
--les espaces sont supprimés par le tokenizer des parser function
p=string.gsub(p," ", "")
return lang_en:parseFormattedNumber(p)
end
-- tableau pour stocker les infos de debug
local d = {}
-- calcule si periode doit être affiché
function calc_has_periode(periodes)
if #periodes>1 then
return true
end
if #periodes ==0 then
return false
end
libelle_periode = periodes[1]["libellé-période"] or ""
if libelle_periode ~= "" then
end
return false
end
-- pour debugage (afficher dans un <pre> les variables de debug)
function htmlescape(s)
local escapes = {
["<"] = "<",
[">"] = ">",
['"'] = """
}
s=string.gsub(s,"&","&")
for k,v in pairs(escapes) do
s = string.gsub(s,k,v)
end
return s
end
-- ecrit dans result les headers correespondant aux mois
function headers(result,charte)
local mois = { "janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre" }
local abbr = { "jan.","fév.","","","","","juil.","","sept.","oct.","nov.","déc."}
for i =1,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 abbr[i] == "" then
table.insert(result ,mois[i])
else
table.insert(result, '<abbr title="' .. mois[i] .. '">' .. abbr[i] .. '</abbr>')
end
table.insert(result,"</th>\n")
end
end
-- detecte si on doit afficher la colonne annee
function annuel_present(periodes)
local options = {
"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",
"tmin--0-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-+1-ann",
"pluie-+5-ann",
"pluie-+10-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" }
for i, args in ipairs(periodes) do
opt = mw.clone(options)
an = 1
while true do
annee = args ["annee"..tostring(an)] or ""
if annee == "" then
break
end
opt.insert("pluie-an"..an.."-ann")
an = an + 1
end
if any_options_in_args(args, opt) then
return true
end
end
return false
end
-- les mois tel que nommes en parametres
local mois = {
"jan",
"fev",
"mar",
"avr",
"mai",
"jui",
"jul",
"aou",
"sep",
"oct",
"nov",
"dec"
}
-- similaire à la méthode endswith de python
function endswith(String,End)
return End=='' or string.sub(String,-string.len(End))==End
end
-- similaire à la méthode sartsswith de python
function startswith(String,start)
return string.sub(String,1,string.len(start))==start
end
-- affiche une ligne dans le tableau
function row(result, args, charte, param, libelle, record, style, padding_left, extra_arg)
local params = {}
for k,v in ipairs(mois) do
table.insert(params, param .. "-" .. v)
end
if extra_arg ~= nil then
table.insert(params,extra_arg)
end
if not any_options_in_args(args, params) then
return
end
local annee_record = false
if record then
local params_date = {}
for k,v in ipairs(mois) do
table.insert(params_date, param .. "-date-" .. v)
end
annee_record = any_options_in_args(args, params_date)
if annee_record then
libelle = libelle .. "<br><small>".. type_record(param) .." du record"
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émént remplacée lorsque 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 padding_left then
table.insert(result,"adding-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[param .. "-" .. v] or ""
local p_annee = args[param .. "-date-" .. v] or ""
if p == "" then
table.insert(result, "<td></td>\n")
else
if parseFormattedNumber( p)==nil then
table.insert(result, "<td style='color:red;'>erreur "..param.."-"..v.." n'est pas un nombre (".. p ..")".."</td>\n")
else
table.insert(result, "<td ")
if style~= nil then
s = style(parseFormattedNumber(p))
if s == "#AD0200" then
color = ";color:white"
else
color = ""
end
table.insert(result,'style="background-color:'..style(parseFormattedNumber(p))..color..'"')
end
table.insert(result,">".. lang:formatNum(parseFormattedNumber(p)))
if annee_record then
table.insert(result,'<br><small>'..p_annee..'</small>')
end
table.insert(result,"</td>\n")
end
end
end
local p = args[param .. "-ann"] or ""
if p ~= "" then
if parseFormattedNumber(p)==nil then
table.insert(result, "<td style='color:red;'>erreur "..param.."-ann n'est pas un nombre (".. p ..")".."</td>\n")
else
table.insert(result, "<td>'''".. lang:formatNum(parseFormattedNumber(p)).."'''")
if annee_record then
local p_ann = args[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
-- retourne si au moins une option est dans les clefs de l'arg
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
-- retourne le type de record pour le paramètre donné
function type_record(param)
local type = {
["tmin-bas"]="mois-année",
["tmin-haut"]="mois-année",
["tmax-bas"]="mois-année",
["tmax-haut"]="mois-année",
["tmin-record"]="jour-mois-année",
["tmin-record-haut"]="jour-mois-année",
["tmax-record-bas"]="jour-mois-année",
["tmax-record"]="jour-mois-année",
["soleil-min"]="mois-année",
["soleil-max"]="mois-année",
["pluie-record"]="jour-mois-année",
["neige-record"]="jour-mois-année",
["prec-haut"]="mois-année",
["prec-nbr-bas"]="mois-année",
["prec-nbr-haut"]="mois-année",
["vent-record"]="jour-mois-année",
["press-bas"]="jour-mois-année",
["press-haut"]="jour-mois-année"
}
t = type[param]
if not t then
return "année"
else
return t
end
end
-- separe les args par periode
-- sauf les common_keys sont considéré comme dans la période par défaut les arguments ne comencant pas par periode
function split_args(args)
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 startswith(k,"période") then
local key = mw.text.split(k,"-")
local periode = table.remove(key,1)
periode=tonumber(string.sub(periode,string.len("période")+1))
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 les periodes avant de les retourner
a = {}
for n in pairs(periodes) do table.insert(a, n) end
table.sort(a)
result = {}
for i,n in ipairs(a) do
table.insert(result,periodes[n])
end
return result,common_args
end
-- fonction principale
-- appelée par le modèle
function p.main(frame)
--return "salut"
local pframe = frame:getParent() -- on recupère le parent (le modèle)
local args = pframe.args
local periodes, common_args = split_args(args)
-- global
has_periode = calc_has_periode(periodes)
local result = {}
local r = {}
table.insert(result,'<table class="wikitable sortable centre" style="text-align:center; background: #FFFFFF; color:#000000;">\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
charte = frame:expandTemplate{ title = 'Charte de couleur', args = { 'communes', 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,">Élément étudié")
table.insert(result,"</th>\n")
headers(result,charte)
if annuel_present(periodes) then
table.insert(result,"<th scope=col class='unsortable'")
if charte ~= "" then
table.insert(result,' style="background-color:' .. charte..'"')
end
table.insert(result,'>année</th>\n')
end
table.insert(result,'</tr>')
for i,args in ipairs(periodes) do
affiche_rows_periode(result, args)
end
source = args["source"] or ""
table.insert(result,"</table>")
if source ~= "" then
table.insert(result,'<div style="font-style:italic; 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:#FF0000; 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
affiche_diagramme(result,args)
end
-- preprocess nécessaire pour convertir les ref
-- ligne commentée a decommenter si besoin de debug
return frame:preprocess(table.concat(result)) -- .."<pre>"..htmlescape(table.concat(d)).."</pre>"
end
function affiche_rows_periode(result,args)
nb_row =0
row(result, args, charte,
'tmin-bas',
'<abbr title="température moyenne minimale du mois la plus basse en degré Celsius">temp. moy. min. mois record bas mois</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmin',
'<abbr title="température moyenne minimale du mois en degrés Celsius">temp. moy. min. mois</abbr>',
false, background_color_temperature)
row(result, args, charte,
'tmin-haut',
'<abbr title="température moyenne minimale du mois la plus haute en degré Celsius">temp. moy. min. mois record haut mois</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmoy',
'<abbr title="température moyenne mensuelle en degré Celsius">temp. moy. mois</abbr>',
false, background_color_temperature)
row(result, args, charte,
'tmax-bas',
'<abbr title="température moyenne maximale du mois la plus basse en degré Celsius">temp. moy. max. mois record bas mois</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmax',
'<abbr title="température moyenne maximale du mois en degré Celsius">temp.moy.max.mois</abbr>',
false, background_color_temperature)
row(result, args, charte,
'tmax-haut',
'<abbr title="température moyenne maximale du mois la plus haute en degré Celsius">temp. moy. max. mois record haut mois</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmin-record',
'<abbr title="température quotidienne minimale la plus basse du mois en degré Celsius">temp. min. jour record bas mois</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmin-record-haut',
'<abbr title="température quotidienne minimale la plus haute du mois en degré Celsius">temp. min. jour record haut mois</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmax-record-bas',
'<abbr title="température quotidienne maximale la plus basse du mois en degré Celsius">temp. max. jour record bas mois</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmax-record',
'<abbr title="température quotidienne maximale la plus haute du mois en degré Celsius">temp.max.jour record haut mois</abbr> ',
true, background_color_temperature)
row(result, args, charte,
'tmin--10',
'<abbr title="moyenne mensuelle du nombre de jours dont la température minimale est inférieure ou égale à moins dix degrés Celsius">temp. min. ≤ {{tmp|- 10|°C}} nbr moy. jour mois</abbr>',
false, nil)
row(result, args, charte,
'tmin--5',
'<abbr title="moyenne mensuelle du nombre de jours dont la température minimale est inférieure ou égale à moins cinq degrés Celsius">temp.min. ≤ {{tmp|- 5|°C}} nbr moy.jour mois</abbr> <span style="float:right">[[File:Temp min inf à moins cinq.png|51px]]</span>',
false, nil)
row(result, args, charte,
'tmin--0',
'<abbr title="moyenne mensuelle du nombre de jours dont la température minimale est inférieure ou égale à zéro degré Celsius">temp.min. ≤ {{tmp|0|°C}} nbr moy.jour mois</abbr> <span style="float:right">[[File:Temp min inf à zéro.png|44px]]</span>',
false, nil)
row(result, args, charte,
'tmax--0',
'<abbr title="moyenne mensuelle du nombre de jours dont la température maximale est inférieure ou égale à zéro degré Celsius">temp.max. ≤ {{tmp|0|°C}} nbr moy.jour mois</abbr> <span style="float:right">[[File:Temp maxi inf à zéro.png|44px]]</span>',
false, nil)
row(result, args, charte,
'tmax-+25',
'<abbr title="moyenne mensuelle du nombre de jours dont la température maximale est supérieure ou égale à vingt-cinq degrés Celsius">temp.max. ≥ {{tmp|25|°C}} nbr moy.jour mois</abbr> <span style="float:right">[[File:Temp maxi sup à 25.png|51px]]</span>',
false, nil)
row(result, args, charte,
'tmax-+30',
'<abbr title="moyenne mensuelle du nombre de jours dont la température maximale est supérieure ou égale à trente degrés Celsius">temp.max. ≥ {{tmp|30|°C}} nbr moy.jour mois</abbr> <span style="float:right">[[File:Temp maxi sup à 30.png|51px]]</span>',
false, nil)
row(result, args, charte,
'tmax-+35',
'<abbr title="moyenne mensuelle du nombre de jours dont la température maximale est supérieure ou égale à trente-cinq degrés Celsius">temp.max. ≥ {{tmp|35|°C}} nbr moy.jour mois</abbr> <span style="float:right">[[File:Temp maxi sup à 35.png|51px]]</span>',
false, nil)
row(result, args, charte,
'soleil',
'<abbr title="moyenne mensuelle de la durée d\'ensoleillement en heure">nbr heure ensoleillement mensuel</abbr> <span style="float:right">[[File:A6 soleil pour modèle climat.png|28px]]</span>',
false, background_color_soleil)
row(result, args, charte,
'soleil-min',
'<abbr title="la plus faible durée d’ensoleillement mensuel en heure">nbr min.heure soleil record mois</abbr> <span style="float:right">[[File:Record minimal pour modèle climat.png|17px]] [[File:A6 soleil pour modèle climat.png|28px]]</span>',
true, nil)
row(result, args, charte,
'soleil-max',
'<abbr title="la plus haute durée d\'ensoleillement mensuel en heure">nbr max.heure soleil record mois</abbr> <span style="float:right">[[File:Le record maximum pour modèle climat.png|17px]] [[File:A6 soleil pour modèle climat.png|28px]]</span>',
true, nil)
row(result, args, charte,
'soleil-record',
'<abbr title="la plus haute durée d\'ensoleillement quotidien en heure">nbr max.heure soleil record jour</abbr> <span style="float:right">[[File:Le record maximum pour modèle climat.png|17px]] [[File:A6 soleil jour.png|28px]]</span>',
false, nil)
row(result, args, charte,
'soleil-0',
'<abbr title="moyenne mensuelle du nombre de jours dont la durée d\'ensoleillement quotidienne est nulle">nbr moy.jour absence soleil</abbr> <span style="float:right">[[File:Soleil 0 % pour modèle climat.png|30px]]</span>',
false, nil)
row(result, args, charte,
'soleil-+1',
'<abbr title="moyenne mensuelle du nombre de jours dont la durée d\'ensoleillement quotidienne est supérieure ou égale à une heure">nbr moy.jour avec soleil ≥ 1 heure</abbr> <span style="float:right">[[File:Soleil 20 % pour modèle climat.png|33px]]</span>',
false, nil)
row(result, args, charte,
'soleil-+5',
'<abbr title="moyenne mensuelle du nombre de jours dont la durée d\'ensoleillement quotidienne est supérieure ou égale à cinq heures">nbr moy.jour avec soleil ≥ 5 heures</abbr> <span style="float:right">[[File:Soleil 80 % pour modèle climat.png|31px]]</span>',
false, nil)
row(result, args, charte,
'ray',
'rayonnement global moyen (MJ/m²) <span style="float:right">[[File:Pyranomètre pour modèle climat.png|17px]]</span>',
false, nil)
row(result, args, charte,
'etp',
'ETP Penman moyen (mm)',
false, nil)
row(result, args, charte,
'humidité',
'humidité relative (%) <span style="float:right">[[File:Brouillard pour modèle climat.png|17px]]</span>',
false, nil)
row(result, args, charte,
'prec',
'quantité précipitations mensuelles (mm) <span style="float:right">[[File:Précipitation 1 mm par heure pour modèle climat.png|16px]]</span>',
false, background_color_precipitation)
row(result, args, charte,
'pluie',
'dont pluie (mm) <span style="float:right">[[File:Précipitation 1 mm par heure pour modèle climat.png|16px]]</span>',
false, nil, true)
row(result, args, charte,
'neige',
'dont neige (cm) <span style="float:right">[[File:Il neige pour modèle climat.png|20px]]</span>',
false, background_color_neige, true)
row(result, args, charte,
'pluie-record',
'<abbr title="la plus haute quantité de pluie quotidienne en millimètre">record de pluie quotidien</abbr> <span style="float:right">[[File:Le record maximum pour modèle climat.png|17px]] [[File:Pluie j.png|16px]]</span>',
true, nil)
row(result, args, charte,
'neige-record',
'<abbr title="la plus haute quantité de chutes de neige quotidiennes en centimètre">record de neige quotidien</abbr> <span style="float:right">[[File:Le record maximum pour modèle climat.png|17px]] [[File:Neige j.png|20px]]</span>',
true, nil)
row(result, args, charte,
'prec-bas',
'<abbr title="la plus basse quantité de précipitations mensuelles en millimètre">min.précipitations record mois</abbr> <span style="float:right">[[File:Record minimal pour modèle climat.png|17px]] [[File:Précipitation 1 mm par heure pour modèle climat.png|16px]]</span>',
false, nil)
row(result, args, charte,
'prec-haut',
'<abbr title="la plus haute quantité de précipitations mensuelles en millimètre">max.préc.record mois</abbr> <span style="float:right">[[File:Le record maximum pour modèle climat.png|17px]] [[File:Précipitation 1 mm par heure pour modèle climat.png|16px]]</span>',
true, nil)
row(result, args, charte,
'prec-nbr-bas',
'<abbr title="le plus bas nombre de jours dans le mois avec précipitations">nbr min.jour avec préc.record mois</abbr> <span style="float:right">[[File:Record minimal pour modèle climat.png|17px]] [[File:Pluie nombre.png|16px]]</span>',
true, nil)
row(result, args, charte,
'prec-nbr',
'<abbr title="moyenne mensuelle du nombre de jours avec précipitations">nbr moy.jour avec préc.mois</abbr> <span style="float:right">[[File:Pluie nombre.png|16px]]</span>',
false, nil)
row(result, args, charte,
'prec-nbr-haut',
'<abbr title="le plus haut nombre de jours dans le mois avec précipitations">nbr max.jour avec préc.record mois</abbr> <span style="float:right">[[File:Le record maximum pour modèle climat.png|17px]] [[File:Pluie nombre.png|16px]]</span>',
true, nil)
row(result, args, charte,
'pluie-+1',
'<abbr title="nombre de jours avec pluie supérieure ou égale à un millimètre">nbr jour avec pluie ≥ {{unité|1|mm}}</abbr> <span style="float:right">[[File:Pluie nombre supérieur.png|25px]]</span>',
false, nil)
row(result, args, charte,
'pluie-+5',
'<abbr title="nombre de jours avec pluie supérieure ou égale à cinq millimètres">nbr jour avec pluie ≥ {{unité|5|mm}}</abbr> <span style="float:right">[[File:Précipitation 5 mm par heure pour modèle climat.png|31px]]</span>',
false, nil)
row(result, args, charte,
'pluie-+10',
'<abbr title="nombre de jours avec pluie supérieure ou égale à dix millimètres">nbr jour avec pluie ≥ {{unité|10|mm}}</abbr> <span style="float:right">[[File:Précipitation 10 mm par heure pour modèle climat.png|47px]]</span>',
false, nil)
row(result, args, charte,
'pluie-an-détail',
'pluviométrie du mois d\'une année (mm) <span style="float:right">[[File:Pluie d.png|16px]]</span>',
false, nil)
row(result, args, charte,
'orage-jour',
'nombre de jours orageux <span style="float:right">[[File:Foudre pour modèle climat.png|20px]]</span>',
false, nil)
row(result, args, charte,
'grêle-jour',
'nombre de jours avec chutes de grêle',
false, nil)
row(result, args, charte,
'neige-jour',
'<abbr title="nombre de jours avec des chutes de neige">nbr jour avec neige</abbr> <span style="float:right">[[File:Neige nombre.png|20px]]</span>',
false, nil)
row(result, args, charte,
'brouillard-jour',
'nombre de jours avec brouillard <span style="float:right">[[File:Le brouillard nombre.png|17px]]</span>',
false, nil)
row(result, args, charte,
'vent-10',
'vent moyen sur 10 minutes (m/s) <span style="float:right">[[File:Le vent faible pour modèle climat.png|12px]]</span>',
false, nil)
row(result, args, charte,
'vent-record',
'vent maximum instantané (m/s) <span style="float:right">[[File:Le record maximum pour modèle climat.png|17px]] [[File:Le vent fort pour modèle climat.png|21px]]</span>',
true, nil)
row(result, args, charte,
'vent-nbr-+16',
'<abbr title="moyenne mensuelle du nombre de jours dont les rafales sont supérieures ou égales à seize mètres par seconde">nbr moy.jour avec rafale ≥ 16 m/s</abbr> <span style="float:right">[[File:Vent faible nombre.png|21px]]</span>',
false, nil)
row(result, args, charte,
'vent-nbr-+28',
'<abbr title="moyenne mensuelle du nombre de jours dont les rafales sont supérieures ou égales à vingt-huit mètres par seconde">nbr moy.jour avec rafale ≥ 28 m/s</abbr> <span style="float:right">[[File:Vent fort nombre.png|29px]]</span>',
false, nil)
row(result, args, charte,
'dju',
'moyenne mensuelle des degrés jour unifiés',
false, nil)
row(result, args, charte,
'dju-rad',
'<abbr title="moyenne mensuelle des degrés jour unifiés de chauffage">moy.mois degré jour unifié chauffage</abbr>',
false, nil)
row(result, args, charte,
'dju-clim',
'<abbr title="moyenne mensuelle des degrés jour unifiés de climatisation">moy.mois degré jour unifié climatisation</abbr>',
false, nil)
row(result, args, charte,
'press-bas',
'la plus basse pression (hPa)',
true, nil)
row(result, args, charte,
'press',
'moyenne mensuelle de la pression (hPa)',
false, nil)
row(result, args, charte,
'press-haut',
'la plus haute pression (hPa)',
true, nil)
an = 1
while true do
annee = args["année"..tostring(an)] or ""
if annee == "" then
break
end
row(result, args, charte, "pluie-an"..tostring(an), "Relevé pluviométrique en "..annee, false, background_color_precipitation,false,"annee"..tostring(an))
an=an+1
end
if nb_row > 0 and has_periode then
result[place_holder] = tostring(nb_row)
end
end
function affiche_diagramme(result,args)
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,'<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
arg1 = parseFormattedNumber(arg1)
if arg1 == nil then
arg1 = 80
end
end
table.insert(result,'<td>')
table.insert(result,'<div style="position:relative;margin:0;height:16.5em;width:1.6em;background:white;padding:0;color:black;line-height:1.5;vertical-align:bottom;text-align:center">')
table.insert(result,'<div style="position:absolute;margin:0;bottom:2em;left:0;height:6em;width:1.6em;overflow:hidden;border-top:1px dotted #AAA;border-bottom:1px dotted #AAA;background:none;padding:0;color:transparent"> </div>')
table.insert(result,'<div style="position:absolute;margin:0;bottom:2em;left:.4em;height:'..(arg3/50) ..'em;width:.8em;overflow:hidden;background:#6478FF;padding:0;color:transparent"> </div>')
table.insert(result,'<div style="position:absolute;margin:0;bottom:' ..( 8+arg1/5)..'em;left:.4em;height:'..((arg2-arg1)/5)..'em;width:.8em;overflow:hidden;background:black;padding:0;color:transparent"> </div>')
table.insert(result,'<div style="position:absolute;margin:0;bottom:' .. (7.75+arg2/5)..'em;left:0;height:1.5em;width:1.6em;background:none;padding:0;color:red"><small>'..arg2..'</small></div>')
table.insert(result,'<div style="position:absolute;margin:0;bottom:'.. (6.5+arg1/5)..'em;left:0;height:1.5em;width:1.6em;background:none;padding:0;color:blue"><small>'..arg1..'</small></div>')
table.insert(result,'<div style="position:absolute;margin:0;bottom:.5em;left:0;height:1.5em;width:1.6em;background:none;padding:0;color:#6478FF"><small>'..arg3..'</small></div>')
table.insert(result,'</div>')
table.insert(result,'</td>')
end
table.insert(result,[[</tr>
<tr><td colspan=12 style="text-align:left;"><abbr title="Températures">Temp.</abbr> moyennes <span style="color:red">maxi</span> et <span style="color:blue">mini</span> (°C) • <span style="color:#6478FF">Précipitations</span> (<abbr title="millimètres">mm</abbr>)</td></tr>
</table>]])
end
end
-- fonction renvoyant la background color pour une valeur d'ensoleillement donné
function background_color_soleil(soleil)
if soleil > 220 then
return "#FF8000 "
end
if soleil > 160 then
return "#FFC040"
end
if soleil > 100 then
return "#FFFF80"
end
if soleil > 39 then
return "#FFFFC0"
end
return "#FFFFFF"
end
-- fonction renvoyant la background color pour une valeur de temperature donné
function background_color_temperature(temperature)
if temperature < -27.4 then
return "#6478FF"
end
if temperature < -19.9 then
return "#8CA0FF"
end
if temperature < -12.4 then
return "#B4C8FF"
end
if temperature < -4.8 then
return "#DCF0FF"
end
if temperature > 47.9 then
return "#AD0200"
end
if temperature > 39.9 then
return "#E23800"
end
if temperature > 27.4 then
return "#FF8000"
end
if temperature > 19.9 then
return "#FFC040"
end
if temperature > 12.4 then
return "#FFFF80"
end
if temperature > 4.9 then
return "#FFFFC0"
end
return "#FFFFFF"
end
-- fonction renvoyant la background color pour une valeur d'humidité donné
function background_color_humidite(humidite)
if humidite > 79 then
return "#6478FF"
end
if humidite > 69 then
return "#8CA0FF"
end
if humidite > 59 then
return "#B4C8FF"
end
if humidite > 49 then
return "#DCF0FF"
end
return "#FFFFFF"
end
-- fonction renvoyant la background color pour une valeur de précipitation donné
function background_color_precipitation(humidite)
if humidite > 199 then
return "#6478FF"
end
if humidite > 149 then
return "#8CA0FF"
end
if humidite > 99 then
return "#B4C8FF"
end
if humidite > 49 then
return "#DCF0FF"
end
return "#FFFFFF"
end
-- fonction renvoyant la background color pour une valeur de neige donné
function background_color_neige (humidite)
if humidite > 99 then
return "#6478FF"
end
if humidite > 74 then
return "#8CA0FF"
end
if humidite > 49 then
return "#B4C8FF"
end
if humidite > 24 then
return "#DCF0FF"
end
return "#FFFFFF"
end
return p