Module:Climat
Apparence
La documentation pour ce module peut être créée à Module:Climat/doc
local p = {}
local lang = mw.getLanguage("ht")
local lang_fr = 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 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 = {}
-- 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
-- écrit dans result les headers correespondant aux mois
function headers(result,charte)
local mwa = { "janvye","févriye","mas","avril","me","jen","jiyè","out","septanm","oktòb","novanm","desanm" }
local abbr = { "jan.","fev.","","","","","jiy.","","sep.","okt.","nov.","dec."}
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 ,mwa[i])
else
table.insert(result, '<abbr title="' .. mwa[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",
"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" }
for i, args in ipairs(periodes) do
opt = mw.clone(options)
an = 1
while true do
annee = args ["ane"..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 mwa = {
"jan",
"fev",
"mas",
"avr",
"me",
"jen",
"jiy",
"out",
"sep",
"okt",
"nov",
"des"
}
-- 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, libelle_abrege, record, style, padding_left, extra_arg)
local params = {}
for k,v in ipairs(mwa) 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
abrege = args["abrégé"] and args["abrégé"] ~= "non"
if abrege then
libelle = libelle_abrege
end
local annee_record = false
if record then
local params_date = {}
for k,v in ipairs(mwa) 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)
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é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(mwa) 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
local parsed = parseFormattedNumber( p )
if parsed == 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( parsed )
if s == "#AD0200" then
color = ";color:white"
else
color = ""
end
table.insert(result,'style="background-color:'..style( parsed )..color..'"')
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[param .. "-ann"] or ""
if p ~= "" then
local parsed = parseFormattedNumber( p )
if parsed == 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>'''".. formatNum( parsed ).."'''")
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"]="ane",
["tmin-haut"]="ane",
["tmax-bas"]="ane",
["tmax-haut"]="ane",
["tmin-record"]="date",
["tmin-record-haut"]="date",
["tmax-record-bas"]="date",
["tmax-record"]="date",
["soleil-record"]="date",
["soleil-min"]="ane",
["soleil-max"]="ane",
["pluie-record"]="date",
["neige-record"]="date",
["prec-bas"]="ane",
["prec-haut"]="ane",
["prec-nbr-bas"]="ane",
["prec-nbr-haut"]="ane",
["vent-record"]="date",
["press-bas"]="date",
["press-haut"]="date",
["vent-10"]="date"
}
t = type[param]
if not t then
return "ane"
else
return t
end
end
-- sépare les 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
function split_args(args)
local common_keys = {
["titre"]=true,
["Charte"]=true,
["sous"]=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)
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,">Mwa")
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,'>ane</th>\n')
end
table.insert(result,'</tr>')
for i,args in ipairs(periodes) do
affiche_rows_periode(result, args)
end
source = args["sous"] or ""
table.insert(result,"</table>")
if source ~= "" then
table.insert(result,'<div style="margin-top: -1em; text-align:center; font-size:85%">Sous : '.. source..'</div>\n')
else
table.insert(result,'<div style="font-style:italic; margin-top: -1em; color:#FF0000; text-align:center; font-size:85%">Tablo sa gen dout sou li paske [[Wikipedya:Ajoute sous yo|li pa site sous yo]].</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',
'Tanperati minimal mwayen ([[Degre Celsius|°C]])',
'<abbr title="Tanperati minimal mwayen (°C)">T. min. moy.</abbr>',
false, background_color_temperature)
row(result, args, charte,
'tmin-bas',
'Tanperati minimal mwayen ki pi ba (°C)',
'<abbr title="TTanperati minimal mwayen ki pi ba (°C)">T. min. moy. b.</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmin-haut',
'Tanperati minimal mwayen ki pi wo (°C)',
'<abbr title="Tanperati minimal mwayen ki pi wo (°C)">T. min. moy. h.</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmoy',
'Tanperati mwayen(°C)',
'<abbr title="Tanperati mwayen">T. moy.</abbr> <small>([[Degre Celsius|°C]])</small>',
false, background_color_temperature)
row(result, args, charte,
'tmax',
'Tanperati minimal mwayen (°C)',
'<abbr title="Tanperati minimal mwayen (°C)">T. max. moy.</abbr>',
false, background_color_temperature)
row(result, args, charte,
'tmax-bas',
'Tanperati maksimal mwayen ki pi ba (°C)',
'<abbr title="Tanperati maksimal mwayen ki pi ba (°C)">T. max. moy. b.</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmax-haut',
'Tanperati maksimal mwayen ki pi wo (°C)',
'<abbr title="Tanperati maksimal mwayen ki pi wo (°C)">T. max. moy. h.</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmin-record',
'Record de froid (°C)',
'<abbr title="Record de froid (°C)">Rec. de fr.</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmax-record-bas',
'Tanperati maksimal ki pi ba (°C)',
'<abbr title="Tanperati maksimal ki pi ba (°C)">T. max. b.</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmin-record-haut',
'Tanperati minimal ki pi wo (°C)',
'<abbr title="Tanperati minimal ki pi wo (°C)">T. min. h.</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmax-record',
'Record de chaleur (°C)',
'<abbr title="Record de chaleur (°C)">Rec. de ch.</abbr>',
true, background_color_temperature)
row(result, args, charte,
'tmin--10',
'Nombre de jours avec température minimale ≤ −10 °C',
'<abbr title="Nombre de jours avec température minimale">J. avec T. min.</abbr> ≤ −10 °C',
false, nil)
row(result, args, charte,
'tmin--5',
'Nombre de jours avec température minimale ≤ –5 °C',
'<abbr title="Nombre de jours avec température minimale">J. avec T. min.</abbr> ≤ −5 °C',
false, nil)
row(result, args, charte,
'gel-jour',
'Nombre de jours avec gel',
'<abbr title="Nombre de jours">J.</abbr> avec gel',
false, nil)
row(result, args, charte,
'tmax--0',
'Nombre de jours avec température maximale ≤ 0 °C',
'<abbr title="Nombre de jours avec température maximale">J. avec T. max.</abbr> ≤ 0 °C',
false, nil)
row(result, args, charte,
'tmax-+25',
'Nombre de jours avec température maximale ≥ 25 °C',
'<abbr title="Nombre de jours avec température maximale">J. avec T. max.</abbr> ≥ 25 °C',
false, nil)
row(result, args, charte,
'tmax-+30',
'Nombre de jours avec température maximale ≥ 30 °C',
'<abbr title="Nombre de jours avec température maximale">J. avec T. max.</abbr> ≥ 30 °C',
false, nil)
row(result, args, charte,
'tmax-+35',
'Nombre de jours avec température maximale ≥ 35 °C',
'<abbr title="Nombre de jours avec température maximale">J. avec T. max.</abbr> ≥ 35 °C',
false, nil)
row(result, args, charte,
'dju',
'[[Degré jour unifié|Degrés jour unifiés]]',
'[[Degré jour unifié|DJU]]',
false, nil)
row(result, args, charte,
'dju-clim',
'Degrés jour unifiés en climatisation',
'<abbr title="Degrés jour unifiés en climatisation">DJU en clim.</abbr>',
false, nil)
row(result, args, charte,
'dju-rad',
'Degrés jour unifiés en chauffage',
'<abbr title="Degrés jour unifiés en chauffage">DJU en ch.</abbr>',
false, nil)
row(result, args, charte,
'soleil',
'Ensoleillement ([[Heure|h]])',
'<abbr title="Ensoleillement">Ensol.</abbr> <small>([[Heure|h]])</small>',
false, background_color_soleil)
row(result, args, charte,
'soleil-min',
'Ensoleillement la plus basse (h)',
'<abbr title="Ensoleillement la plus basse">Ens. la plus b.</abbr> <small>(h)</small>',
true, nil)
row(result, args, charte,
'soleil-max',
'Ensoleillement la plus haute (h)',
'<abbr title="Ensoleillement la plus haute">Ens. la plus h.</abbr> <small>(h)</small>',
true, nil)
row(result, args, charte,
'soleil-record',
'Record d\'ensoleillement en 24 h (h)',
'<abbr title="Record d\'ensoleillement">Rec. d\'ens.</abbr> en 24 h <small>(h)</small>',
true, nil)
row(result, args, charte,
'soleil-0',
'Nombre de jours sans ensoleillement',
'<abbr title="Nombre de jours sans ensoleillement">J. sans ens.</abbr>',
false, nil)
row(result, args, charte,
'soleil-+1',
'Nombre de jours avec ensoleillement ≥ 1 h',
'<abbr title="Nombre de jours avec ensoleillement">J. avec ens.</abbr> ≥ 1 h',
false, nil)
row(result, args, charte,
'soleil-+5',
'Nombre de jours avec ensoleillement ≥ 5 h',
'<abbr title="Nombre de jours avec ensoleillement">J. avec ens.</abbr> ≥ 5 h',
false, nil)
row(result, args, charte,
'ray',
'[[Ensoleillement]] ([[Joule|MJ]]/[[Mètre carré|m²]])',
'<abbr title="Ensoleillement">Ensol.</abbr> <small>([[Joule|MJ]]/[[Mètre carré|m²]])</small>',
false, nil)
row(result, args, charte,
'etp',
'[[Évapotranspiration#Évapotranspiration réelle (ETr) et potentielle (ETp)|ETp]] [[Évapotranspiration#Modélisation de Penman et Monteith|Penman]] (mm)',
'[[Évapotranspiration#Évapotranspiration réelle (ETr) et potentielle (ETp)|ETp]] [[Évapotranspiration#Modélisation de Penman et Monteith|Penman]] <small>(mm)</small>',
false, nil)
row(result, args, charte,
'vent-10',
'Record de vent sur 10 minutes (km/h)',
'<abbr title="Record de vent">Rec. de v.</abbr> sur 10 <abbr title="minutes">min.</abbr> <small>(km/h)</small>',
true, nil)
row(result, args, charte,
'vent-record',
'Record de vent (km/h)',
'<abbr title="Record de vent">Rec. de v.</abbr> <small>(km/h)</small>',
true, nil)
row(result, args, charte,
'vent-nbr-+16',
'Nombre de jours avec rafales ≥ 57,6 km/h',
'<abbr title="Nombre de jours avec rafales">J. avec rafales</abbr> ≥ 57,6 km/h',
false, nil)
row(result, args, charte,
'vent-nbr-+28',
'Nombre de jours avec rafales ≥ 100,8 km/h',
'<abbr title="Nombre de jours avec rafales">J. avec rafales</abbr> ≥ 100,8 km/h',
false, nil)
row(result, args, charte,
'press',
'Pression atmosphérique au niveau de la mer ([[Pascal (unité)|hPa]])',
'<abbr title="Pression atmosphérique au niveau de la mer">P. atm. au niv. de la mer</abbr> <small>([[Pascal (unité)|hPa]])</small>',
false, nil)
row(result, args, charte,
'press-bas',
'Record de la pression la plus basse (hPa)',
'<abbr title="Record de pression">Rec. de P.</abbr> la plus basse <small>(hPa)</small>',
true, nil)
row(result, args, charte,
'press-haut',
'Record de la pression la plus haute (hPa)',
'<abbr title="Record de pression">Rec. de P.</abbr> la plus haute <small>(hPa)</small>',
true, nil)
row(result, args, charte,
'prec',
'Presipitasyon ([[Milimèt|mm]])',
'<abbr title="Presipitasyon">Préc.</abbr> <small>([[Milimèt|mm]])</small>',
false, background_color_precipitation)
row(result, args, charte,
'lapli',
'<small>dont pluie ([[Milimèt|mm]])</small>',
'<small>dont pluie ([[Milimèt|mm]])</small>',
false, nil, true)
row(result, args, charte,
'neige',
'<small>dont neige ([[Centimètre|cm]])</small>',
'<small>dont neige ([[Centimètre|cm]])</small>',
false, background_color_neige, true)
row(result, args, charte,
'prec-bas',
'Précipitations les plus basses (mm)',
'<abbr title="Précipitations les plus basses">Préc. min.</abbr> <small>(mm)</small>',
true, nil)
row(result, args, charte,
'prec-haut',
'Précipitations les plus hautes (mm)',
'<abbr title="Précipitations les plus hautes">Préc. max.</abbr> <small>(mm)</small>',
true, nil)
row(result, args, charte,
'pluie-record',
'Record de pluie en 24 h (mm)',
'<abbr title="Record de pluie en 24 h">Rec. de pl.</abbr> <small>(mm)</small>',
true, nil)
row(result, args, charte,
'neige-record',
'Record de neige en 24 h (cm)',
'<abbr title="Record de neige en 24 h">Rec. de n.</abbr> <small>(mm)</small>',
true, nil)
row(result, args, charte,
'pluie-jour',
'Nombre de jours avec précipitations',
'<abbr title="Nombre de jours avec précipitations">J. avec préc.</abbr>',
false, nil)
row(result, args, charte,
'prec-nbr-bas',
'Le moins de jours avec précipitations',
'<abbr title="Le moins de jours avec précipitations">J. avec préc. min.</abbr>',
true, nil)
row(result, args, charte,
'prec-nbr-haut',
'Le plus de jours avec précipitations',
'<abbr title="Le plus de jours avec précipitations">J. avec préc. max.</abbr>',
true, nil)
row(result, args, charte,
'pluie-jour+1mm',
'<small>dont nombre de jours avec précipitations ≥ 1 mm</small>',
'<small>dont J. avec pr. ≥ 1 mm</small>',
false, nil)
row(result, args, charte,
'pluie-jour+5mm',
'<small>dont nombre de jours avec précipitations ≥ 5 mm</small>',
'<small>dont J. avec pr. ≥ 5 mm</small>',
false, nil)
row(result, args, charte,
'pluie-jour+10mm',
'<small>dont nombre de jours avec précipitations ≥ 10 mm</small>',
'<small>dont J. avec pr. ≥ 10 mm</small>',
false, nil)
row(result, args, charte,
'pluie-an-détail',
'Pluviométrie du mois d\'une année (mm)',
'<abbr title="Pluviométrie du mois d\'une année">Pluv. du mois d\'1 an</abbr> <small>(mm)</small>',
false, nil)
row(result, args, charte,
'humidité',
'Humidité relative (%)',
'<abbr title="Humidité relative">Hum. rel.</abbr> <small>(%)</small>',
false, background_color_humidite)
row(result, args, charte,
'neige-jour',
'Nombre de jours avec neige',
'<abbr title="Nombre de jours avec neige">J. avec n.</abbr>',
false, nil)
row(result, args, charte,
'grêle-jour',
'Nombre de jours avec grêle',
'<abbr title="Nombre de jours avec grêle">J.</abbr> avec g.',
false, nil)
row(result, args, charte,
'orage-jour',
'Nombre de jours d\'orage',
'<abbr title="Nombre de jours d\'orage">J. d\'or.</abbr>',
false, nil)
row(result, args, charte,
'brouillard-jour',
'Nombre de jours avec brouillard',
'<abbr title="Nombre de jours avec brouillard">J. avec br.</abbr>',
false, 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.." ([[Millimètre|mm]])",
'<abbr title="Relevé pluviométrique">Rel. pluv.</abr> en "..annee.." ([[Millimètre|mm]])',
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,'<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 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>'..formatNum(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>'..formatNum(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>'..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 style="color:red">maxi</span> et <span style="color:blue">mini</span> <abbr title="Degrés Celsius">°C</abbr> <span style="color:#6478FF">• Précipitation</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