Module:Climat/Bac à sable
Apparence
[voir] [modifier] [historique] [purger]
Utilisation
[modifier le code]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
[modifier le code]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
[modifier le code]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
[modifier le code]Aucun
Modèles appelant directement ce module
[modifier le code]Exemples
[modifier le code]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")
local has_periode
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"
}
-- 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 = {
["<"] = "<",
[">"] = ">",
['"'] = """
}
s=string.gsub(s,"&","&")
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
-- similaire à la méthode endswith de python
local 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
-- fonction renvoyant la background color pour une valeur d'ensoleillement donné
local 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é
local 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é
local 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
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 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 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
-- global
-- calcule si periode doit être affiché
has_periode = #periodes>1
-- On detecte si on doit afficher la colonne annee
local annuel_present = false
for i, args in ipairs(periodes) do
local an = 1
while true do
local annee = args ["annee"..tostring(an)] or ""
if annee == "" then
break
end
options.insert("pluie-an"..an.."-ann")
an = an + 1
end
if any_options_in_args(args, options) then
annuel_present = true
end
end
for i,args in ipairs(periodes) do
local an = 1
while true do
local annee = args["année"..tostring(an)] or ""
if annee == "" then
break
end
table.insert(lignes_tableau, {
param="pluie-an"..tostring(an),
libelle="Relevé pluviométrique en "..annee.." ([[Millimètre|mm]])",
libelle_abrege='<abbr title="Relevé pluviométrique">Rel. pluv.</abbr> en '..annee..' ([[Millimètre|mm]])',
style=background_color_precipitation,
extra_arg="annee"..tostring(an)})
an=an+1
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 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 abbr[i] == "" then
table.insert(result, mois_headers[i])
else
table.insert(result, '<abbr title="' .. mois_headers[i] .. '">' .. 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 not any_options_in_args(args, params) then
return
end
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-- retourne le 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:red;'>erreur "..ligne["param"].."-"..v.." n'est pas un nombre (".. p ..")".."</td>\n")
else
table.insert(result, "<td ")
if ligne["style"]~= nil then
s = ligne["style"]( parsed )
if s == "#AD0200" then
color = ";color:white"
else
color = ""
end
table.insert(result,'style="background-color:'..ligne["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[ligne["param"] .. "-ann"] or ""
if p ~= "" then
local parsed = parseFormattedNumber( p )
if parsed == nil then
table.insert(result, "<td style='color:red;'>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
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:#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
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
-- 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