Aller au contenu

Module:Climat

Cette page fait l’objet d’une mesure de semi-protection étendue.
Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 4 avril 2014 à 13:05 et modifiée en dernier par MerveillePédia (discuter | contributions) (modification, afin d'avoir la même écriture de tous les titres d'avant 2013 (discussion Modèle:Climat dans le paragraphe « Titres des lignes (2) » )). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 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.

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}}
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 = { 
        ["<"] = "&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

-- 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.","","","","","jui.","","sep.","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",
        "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 ["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"]="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"
    }
    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,">Mois")
   
   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',
       'Température minimale moyenne ([[Degré Celsius|°C]])',
       false, background_color_temperature)
       
   row(result, args, charte,
       'tmin-bas',
       'Température minimale moyenne la plus basse (°C)',
       true, background_color_temperature)

   row(result, args, charte,
       'tmin-haut',
       'Température minimale moyenne la plus haute (°C)',
       true, background_color_temperature)

   row(result, args, charte,
       'tmoy',
       'Température moyenne (°C)',
       false, background_color_temperature)
       
   row(result, args, charte,
       'tmax',
       'Température maximale moyenne (°C)',
       false, background_color_temperature)
       
   row(result, args, charte,
       'tmax-bas',
       'Température maximale moyenne la plus basse (°C)',
       true, background_color_temperature)

   row(result, args, charte,
       'tmax-haut',
       'Température maximale moyenne la plus haute (°C)',
       true, background_color_temperature)

   row(result, args, charte,
       'tmin-record',
       'Record de froid (°C)',
       true, background_color_temperature)
       
   row(result, args, charte,
       'tmax-record-bas',
       'Température maximale la plus basse (°C)',
       true, background_color_temperature)
       
   row(result, args, charte,
       'tmin-record-haut',
       'Température minimale la plus haute (°C)',
       true, background_color_temperature)

   row(result, args, charte,
       'tmax-record',
       'Record de chaleur (°C)',
       true, background_color_temperature)

   row(result, args, charte,
       'tmin--10',
       'Nombre de jours avec température minimale ≤ −10 °C',
       false, nil)   

   row(result, args, charte,
       'tmin--5',
       'Nombre de jours avec température minimale ≤ –5 °C',
       false, nil)

   row(result, args, charte,
       'gel-jour',
       'Nombre de jours avec gel',
       false, nil)

   row(result, args, charte,
       'tmax--0',
       'Nombre de jours avec température maximale ≤ 0 °C',
       false, nil)

   row(result, args, charte,
       'tmax-+25',
       'Nombre de jours avec température maximale ≥ 25 °C',
       false, nil)

   row(result, args, charte,
       'tmax-+30',
       'Nombre de jours avec température maximale ≥ 30 °C',
       false, nil)

   row(result, args, charte,
       'tmax-+35',
       'Nombre de jours avec température maximale ≥ 35 °C',
       false, nil)
       
   row(result, args, charte,
       'dju',
       '[[Degré jour unifié|Degrés jour unifiés]]',
       false, nil)
       
   row(result, args, charte,
       'dju-clim',
       'Degrés jour unifiés en climatisation',
       false, nil)

   row(result, args, charte,
       'dju-rad',
       'Degrés jour unifiés en chauffage',
       false, nil)
       
   row(result, args, charte,
       'soleil',
       'Durée d\'ensoleillement ([[Heure|h]])',
       false, background_color_soleil)

   row(result, args, charte,
       'soleil-min',
       'Durée d\'ensoleillement la plus basse (h)',
       true, nil)

   row(result, args, charte,
       'soleil-max',
       'Durée d\'ensoleillement la plus haute (h)',
       true, nil)

   row(result, args, charte,
       'soleil-record',
       'Record de la durée d\'ensoleillement en 24 h (h)',
       true, nil)

   row(result, args, charte,
       'soleil-0',
       'Nombre de jours avec durée d\'ensoleillement nulle',
       false, nil)

   row(result, args, charte,
       'soleil-+1',
       'Nombre de jours avec durée d\'ensoleillement ≥ 1 h',
       false, nil)

   row(result, args, charte,
       'soleil-+5',
       'Nombre de jours avec durée d\'ensoleillement ≥ 5 h',
       false, nil)

   row(result, args, charte,
       'ray',
       '[[Ensoleillement]] ([[Joule|MJ]]/[[Mètre carré|m²]])',
       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)',
       false, nil)
       
   row(result, args, charte,
       'vent-10',
       'Record de vent sur 10 minutes (km/h)',
       true, nil)
       
   row(result, args, charte,
       'vent-record',
       'Record de vent (km/h)',
       true, nil)
       
   row(result, args, charte,
       'vent-nbr-+16',
       'Nombre de jours avec rafales ≥ 57,6 km/h',
       false, nil)

   row(result, args, charte,
       'vent-nbr-+28',
       'Nombre de jours avec rafales ≥ 100,8 km/h',
       false, nil)
       
   row(result, args, charte,
       'press',
       'Pression atmosphérique au niveau de la mer ([[Pascal (unité)|hPa]])',
       false, nil)

   row(result, args, charte,
       'press-bas',
       'Record de la pression la plus basse (hPa)',
       true, nil)

   row(result, args, charte,
       'press-haut',
       'Record de la pression la plus haute (hPa)',
       true, nil)
       
   row(result, args, charte,
       'prec',
       'Précipitations ([[Millimètre|mm]])',
       false, background_color_precipitation)

   row(result, args, charte,
       'pluie',
       '<small>dont pluie ([[Millimètre|mm]])',
       false, nil, true)

   row(result, args, charte,
       'neige',
       '<small>dont neige ([[Centimètre|cm]])',
       false, background_color_neige, true)
       
   row(result, args, charte,
       'prec-bas',
       'Précipitations les plus basses (mm)',
       true, nil)

   row(result, args, charte,
       'prec-haut',
       'Précipitations les plus hautes (mm)',
       true, nil)    

   row(result, args, charte,
       'pluie-record',
       'Record de pluie en 24 h (mm)',
       true, nil)

   row(result, args, charte,
       'neige-record',
       'Record de neige en 24 h (cm)',
       true, nil)
       
   row(result, args, charte,
       'pluie-jour',
       'Nombre de jours avec précipitations',
       false, nil)    

   row(result, args, charte,
       'prec-nbr-bas',
       'Le moins de jours avec précipitations',
       true, nil)

   row(result, args, charte,
       'prec-nbr-haut',
       'Le plus de jours avec précipitations',
       true, nil)

   row(result, args, charte,
       'pluie-jour+1mm',
       '<small>dont nombre de jours avec précipitations ≥ 1 mm',
       false, nil)

   row(result, args, charte,
       'pluie-jour+5mm',
       '<small>dont nombre de jours avec précipitations ≥ 5 mm',
       false, nil)

   row(result, args, charte,
       'pluie-jour+10mm',
       '<small>dont nombre de jours avec précipitations ≥ 10 mm',
       false, nil)

   row(result, args, charte,
       'pluie-an-détail',
       'Pluviométrie du mois d\'une année mm',
       false, nil)
       
   row(result, args, charte,
       'humidité',
       'Humidité relative (%)',
       false, background_color_humidite)

   row(result, args, charte,
       'neige-jour',
       'Nombre de jours avec neige',
       false, nil)
       
   row(result, args, charte,
       'grêle-jour',
       'Nombre de jours avec grêle',
       false, nil)
       
   row(result, args, charte,
       'orage-jour',
       'Nombre de jours d\'orage',
       false, nil)

   row(result, args, charte,
       'brouillard-jour',
       'Nombre de jours avec brouillard',
       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]])", 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">&nbsp;</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">&nbsp;</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">&nbsp;</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;">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