Module:Infobox hybride

 Documentation[créer] [purger]
--[[
  Présente une infobox (simple) dédiée aux hybrides animaux et végétaux.
--]]

-- table locale
local p = {}


-- on réutilise les données et fonctions outil des taxobox
local donnees = require "Module:Taxobox données"
local fnc = require "Module:Taxobox fonctions"


--[[
  Génère une infobox d'hybride
  Paramètres :
    - charte : pour indiquer le groupe biologique (identique aux taxobox). Sélectionne la couleur.
    - nom : titre de l'infobox. Si absent utilise le titre de l'article
    - parent mâle : le nom du parent mâle
    - parent femelle : le nom du parent femelle
    - parent A : si mâle/femelle inconnu ou sans impact utiliser parent A et B
    - parent B : en ce cas parent mâle/femelle n'est pas utilisé
    - origine du nom : d'où vient son nom
    - naturel : oui / non. Indique si cette hybridation se produit dans la nature
    - fécondité : indique si cet hybride est fertile (et dans quelle condition)
    - image : une photo de l'animal
    - légende : une légende associée à l'image
    - note : une note libre additionnelle
--]]
function p.hybride(frame)
    -- données globales
    donnees.defauts.frame = frame
    donnees.defauts.pframe = frame:getParent()
    
    -- lecture des paramètres
    local charte = fnc.lit_parametre("charte", donnees.regnes, false, nil)
    if (charte == nil or charte == "") then
        -- erreur fatale
        return '<span class="error">Charte absente ou invalide (' .. (charte or "<absente>") .. ')</span>'
    end
    local nom = fnc.lit_parametre("nom", nil, nil, nil)
    -- si absent on récupère le titre de l'article
    if (nom == nil or nom == "") then
       local curarticle = mw.title.getCurrentTitle()
        nom = curarticle.text
    end
    local parent_male = fnc.lit_parametre("parent mâle", nil, nil, nil)
    local parent_femelle = fnc.lit_parametre("parent femelle", nil, nil, nil)
    local parent_a = fnc.lit_parametre("parent A", nil, nil, nil)
    local parent_b = fnc.lit_parametre("parent B", nil, nil, nil)
    local origine = fnc.lit_parametre("origine du nom", nil, nil, nil)
    local naturel = fnc.lit_parametre("naturel", { "oui", "non" }, nil, nil)
    local image = fnc.lit_parametre("image", nil, nil, nil)
    local legende = fnc.lit_parametre("légende", nil, nil, nil)
    local fecondite = fnc.lit_parametre("fécondité", nil, nil, nil)
    local note = fnc.lit_parametre("note", nil, nil, nil)

    local ret -- données de retour
    local frame = mw.getCurrentFrame()
    local templatestyles = frame:extensionTag( 'templatestyles', '', { src = 'MediaWiki:Common.css/taxobox v3.css' } )
    local classes = frame:expandTemplate{ title = 'Classes début infobox', args = { version = '3' } }
    ret = templatestyles .. '<div class="' .. classes .. ' large taxobox_v3 bordered ' .. donnees.regnes[charte]["classe"] .. '" style="width: 20em">\n' .. '<p class="entete">' .. nom .. '</p>\n'
    -- image et légende
    if (image ~= nil and image ~= "") then
        ret = ret .. fnc.insert_image(image, legende, false, false)
    end
    if (legende ~= nil) then
        ret = ret .. '<p class="legend">' .. legende .. '</p>\n'
    end
    -- table des infos
    ret = ret .. '<table class="taxobox_classification" style="font-style: normal"><caption>[[Hybride]]</caption>'
    -- l'origine du nom
    if (origine ~= nil and origine ~= "") then
        ret = ret .. fnc.tb_ligne_mixte("'''Origine du nom'''", origine)
    end

    -- si parent A ou B on utilise, sinon parent mâle et femelle
    local desc = "'''Parents'''"
    local cont = ""
    if (parent_a ~= nil) then
        if (parent_b == nil) then
            cont = parent_a
        else
            cont = "Parent A<br/>" .. parent_a .. "<br/>×<br/>Parent B<br/>" .. parent_b
        end
        ret = ret .. fnc.tb_ligne_mixte(desc, "<p class=\"center\">" .. cont .. "</p>")
    else
        if (parent_femelle == nil) then
            cont = parent_male
        else
            cont = "Parent mâle<br/>" .. parent_male .. "<br/>×<br/>Parent femelle<br/>" .. parent_femelle
        end
        ret = ret .. fnc.tb_ligne_mixte(desc, "<p class=\"center\">" .. cont .. "</p>")
    end
    -- présent naturellement ?
    if (naturel ~= nil and naturel ~= "") then
        ret = ret .. fnc.tb_ligne_mixte("'''Hybride naturel'''", naturel)
    end
    -- fécondité de l'hybride
    if (fecondite ~= nil and fecondite ~= "") then
        ret = ret .. fnc.tb_ligne_mixte("'''Fécondité'''", fecondite)
    end
    -- une note
    if (note ~= nil and note ~= "") then
        ret = ret .. fnc.tb_ligne_mixte("'''Note'''", note)
    end
    
    -- on ferme la table
    ret = ret .. '</table>'
    -- on ferme l'infobox
    ret = ret .. '</div>'

    return ret -- retour
end

-- on retourne le module
return p