« Module:Biblio » : différence entre les versions

Une page de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
Zebulon84 (discuter | contributions)
m correction bug : indicationDeLangue
Zebulon84 (discuter | contributions)
Préparation débugage (bis)
Ligne 6 : Ligne 6 :
-- ou la table transmise à la fonction par une autre fonction d'un module
-- ou la table transmise à la fonction par une autre fonction d'un module
local function extractArgs ( frame )
local function extractArgs ( frame )
return ( frame.getParent and frame:getParent().args ) or frame or { }
-- return ( frame.getParent and frame:getParent().args ) or frame or { }
return frame.args or frame or { } -- renvoie les arguments transmis par invoke et non par le modèle, pour tester avant de créer les modèle.
end
end



Version du 30 juillet 2013 à 21:09

 Documentation[voir] [modifier] [historique] [purger]

Ce module sert de base aux fonctions bibliographiques. Lorsqu'elles sont appelées directement par un modèle (via #invoke), les paramètres passés à ce modèle sont automatiquement transmis au module, sauf si le modèle spécifie une autre valeur pour ce paramètre.

Utilisation

Fonctions exportables :

  • ouvrage(frame) – modèle {{Ouvrage}} ;
  • chapitre(frame) – modèle {{Chapitre}} ;
  • article(frame) – modèle {{Article}} ;
  • lienWeb(frame) – modèle {{Lien web}} ;
  • lienBrise(frame) – modèle {{Lien brisé}} ;
  • dictionnaire(frame) – appelle le modèle chapitre si un paramètre titre chapitre, article ou notice est non vide, sinon appelle le modèle ouvrage ;
  • ISBN(frame) – affiche en petit et entre parenthèses ISBN suivi d'autant de codes que de paramètres non nommés, avec lien à la page ad hoc ;
  • ISSN(frame) – affiche en petit et entre parenthèses ISSN suivi d'autant de codes que de paramètres non nommés, avec lien à la page ad hoc ;
  • enLigne() – similaire au modèle {{Lire en ligne}} (le texte par défaut est « en ligne »).

Modules externes et autres éléments dont ce module a besoin pour fonctionner :

Exemples

Utilisation de la fonction ouvrage dans un modèle pour afficher une référence :

  • {{#invoke:Biblio |ouvrage |auteur=Martine Michu |titre=Mes vacances à la mer}}
  • Erreur de script : la fonction « ouvrage » n’existe pas.

Une page utilisant ce modèle avec le paramètre « passage = 28 » affichera :

  • Erreur de script : la fonction « ouvrage » n’existe pas.
local Biblio = {}

local moduleLangue = require ( 'Module:Langue' )

-- cette simple fonction permet de récupérer les arguement du modèle, 
-- ou la table transmise à la fonction par une autre fonction d'un module
local function extractArgs ( frame )
    -- return ( frame.getParent and frame:getParent().args ) or frame or { }
    return frame.args or frame or { } -- renvoie les arguments transmis par invoke et non par le modèle, pour tester avant de créer les modèle.
end

-- fonction abréviation, abréviation discrète
-- paramètres : 1 = abréviation, 2 = texte, 3 = langue, abrd = abréviation discrète
function Biblio.abr ( frame )
    local args = extractArgs ( frame )
    if args[2] == nil then 
        return args[1] or ''                 -- retoune l'abréviation ou au minimum une chaine vide s'il n'y a pas de texte
    end

    local wikiText = { '<abbr' }
    if args.abrd then
        table.insert(wikiText, ' class="abbr"')
    end
    table.insert(wikiText, ' title="' .. args[2])
    if args[3] then 
        table.insert(wikiText, '" lang="' .. args[3])
    end
    table.insert(wikiText, '">' .. args[1] .. '</abbr>')

    return table.concat (wikiText)
end

function Biblio.spanInitial ( frame )
    local args = extractArgs ( frame )         -- préparation pour appel par modèle ou direct.
    local id = args.id or ''
    if string.len( id ) == 0 then
        id = mw.uri.anchorEncode ( args.id1 .. args.id2 .. args.id3 .. args.id4 .. args.id5 )
    end
    return '<span class="ouvrage" id="' .. id
end

function Biblio.libelle ( frame )
    local args = extractArgs ( frame )
    local lib = args ['libellé'] or args [1] or ''
    if string.len( lib ) > 0 then
        lib = '<small>[' .. lib .. ']</small> '
    end
    return lib
end

function Biblio.indicationDeLangue ( frame )
    local args = extractArgs ( frame )
    local langue = args.langue
    local codeLangue = moduleLangue.codeLangue2 ( langue )
    if codeLangue ~= '' and codeLangue ~= 'fr' then
        langue = moduleLangue.nomLangue ( codeLangue )
        return moduleLangue.indicationDeLangue { langue, codeLangue }
    else
        return ''
    end
end

function Biblio.responsabilitePrincipale ( frame )
    local args = extractArgs ( frame )
    local listeRresponsables = { }
    local nom = ( args ['nom1'] or '' ) or ''
    
    if nom then
        return ''
    end
    
    local directeur = Biblio.abr { 'dir.', 'directeur de publication', abrd = true }
    local responsable, prenom, lien , precision, resp
    local i = 1
    repeat 
        lien = args [ 'lien' .. i ] or ''
        if lien ~= '' then lien = lien .. '|' end
        prenom = args [ 'prénom' .. i ] or ''
        if prenom ~= '' then prenom = prenom .. ' ' end
        
        precision = args [ 'directeur' .. i ] or ''
        resp = args [ 'responsabilité' .. i ] or ''
        if precision == '' then
            if resp ~= '' then 
                precision = ' (' .. resp .. ')'
            end
        else
            if resp ~= '' then 
                precision = ' (' .. directeur .. ' et ' .. resp .. ')'
            else
                precision = ' (' .. directeur .. ')'
            end
        end
        
        responsable = '[[' .. lien .. prenom .. nom .. ']]' .. precision
        table.insert ( listeRresponsables, responsable )
        
        nom = args [ 'nom' .. ( i + 1 ) ] or ''
        
    until nom == ''
    
    if args [ 'et al.' ] == 'oui' then
        local et_al = " ''" .. Biblio.abr { "et al.", "et alii (et d’autres)", abrd = true } .. "''"
        return table.concat ( listeRresponsables, ',' ) .. et_al
    else
        return mw.text.listToText ( listeRresponsables )
    end
end

return Biblio