Module:Biblio/Lien web
local Lien = { }
local Commun = require( 'Module:Biblio/Commun' ) local References = require( 'Module:Biblio/Références' ) local Outils = require( 'Module:Outils' ) local TableBuilder = require( 'Module:TableBuilder' )
function Lien.lienWeb( args )
-- La table wiki va recevoir tout les petits bouts de texte, et sera concaténée à la fin.
-- Elle utilise la meta-table de TableBuilder, permettant d'utiliser les fonctions de la
-- library table comme des méthodes. minsert permet d'insérer plusieurs éléments en une
-- seule fois en, ignorant les valeurs nil.
local wiki = TableBuilder.new()
-- validArg renvoie le premier paramètre non vide, ou nil s'ils sont tous vides. -- Seuls les noms des paramètres doivent être transmis à la fonction. local validArg = function ( ... ) return Commun.validTextArg( args, ... ) end
-- Variables servant à la catégorisation args.categ = {}
-- Span initial, id local spanInitial, spanFinal = Commun.spanInitial ( args, validArg ) wiki.minsert( spanInitial, Commun.libelle( args ) )
-- indication de langue local indicLangue, codeLangue = Commun.indicationDeLangue ( args, validArg ) if Outils.notEmpty( indicLangue ) then wiki.minsert( indicLangue, ' ' ) end
-- Liste des auteurs et de leurs responsabilités (principales et secondaires) local auteur = validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'auteurs', 'auteur institutionnel', 'last1', 'last', 'author1', 'author' ) if auteur then if validArg( 'auteurs' ) then wiki.minsert( args.auteurs ) else wiki.minsert( Commun.responsabilitePrincipale( args, validArg, true ) ) end local coauteur = validArg( 'co-auteur', 'coauteurs', 'coauteur', 'coauthors' ) if coauteur then wiki.minsert( ', ', coauteur ) end wiki.minsert( Commun.responsabiliteSecondaire( args, validArg ), ', ' ) end
-- url
local url = validArg( 'url', 'lire en ligne', 'url texte' )
if url then
-- remplacement des crochets et espaces par leur équivalent HTML
url = string.gsub( string.gsub( string.gsub( url, ' ', '%%20' ), '%[', '%%5B' ), '%]', '%%5D' )
-- ajout http:// si nécessaire :
if not ( string.match( url, '^http' ) or string.match( url, '^ftp' ) or string.match( url, '^//' ) ) then
url = 'http://' .. url
end
wiki.minsert( '[', url )
elseif not validArg( 'pmid', 'pmcid', 'doi', 'jstor', 'bibcod', 'math reviews', 'zbl', 'zbmath', 'arxiv' ) then
args.categ.url = true
wiki.minsert( Outils.erreur( 'modèle [[Modèle:Lien web|modèle {{Lien web}} : paramètre « url
» manquantet paramètre « titre
» manquant]] : paramètre « url
» manquant' ) )
end
-- titre
local titre = validArg( 'titre', 'title' )
local description = validArg( 'description' )
if titre then
-- suppression des retours ligne éventuels, sinon MediaWiki ne reconnaît pas le lien externe
-- et remplacement des crochets par leur équivalent HTML (uniquement le crochet de fermeture)
titre = titre:gsub( '\n', ' ' ):gsub ( '%]', ']' )
local c = titre:sub(1,1)
-- on teste d'abord si titre contient déjà des guillemets
if(string.byte(c) ~= 194) then
local sousTitre
if validArg( 'sous-titre' ) then
sousTitre = ' : ' .. args['sous-titre']
sousTitre:gsub( ' ?»$', )
else
titre:gsub( ' ?»$', )
end
wiki.minsert( ' « ', titre, sousTitre, ' »', url and ']' )
else
wiki.minsert( ' ', titre, url and ']' )
end
local traductionTitre = validArg( 'traduction titre' )
if traductionTitre and traductionTitre ~= args.titre then
wiki.minsert( ' [« ', traductionTitre, ' »]' )
end
if description then
wiki.minsert( ', ', description )
end
elseif description then
wiki.minsert( ' ', description, url and ']' )
else
args.categ.titre = true
if args.categ.url then
wiki.minsert( Outils.erreur( ' et paramètre « titre
» manquant' ) )
else
wiki.minsert( ' ', args.url, '] ', Outils.erreur( 'modèle [[Modèle:Lien web|modèle {{Lien web}} : paramètre « url
» manquantet paramètre « titre
» manquant]] : paramètre « titre
» manquant' ) )
end
end
-- format wiki.minsert( References.indicationDeFormat( validArg( 'format électronique', 'format' ) ) )
-- série, site, éditeur local serie = validArg( 'série', 'work' ) if serie then wiki.minsert( , '', serie, '' ) args.categ.work = validArg( 'work' ) -- il y a ambiguïté sur l'utilisation de ce paramètre end local site = validArg( 'site', 'website' ) if site then website_article_exists = mw.title.new(site) if website_article_exists and website_article_exists.exists then wiki.minsert( [==[, sur [[]==], site, [==[]]]==] ) else wiki.minsert( , sur '', site, '' ) end end local periodique = validArg( 'périodique' ) if periodique then wiki.minsert( ', ', periodique ) end local lieu = validArg( 'lieu', 'lieu édition', 'location' ) if lieu then wiki.minsert( ', ', lieu ) end local editeur = validArg( 'éditeur', 'publisher', 'editeur' ) if editeur then local lienEditeur = validArg( 'lien éditeur' ) if lienEditeur then wiki.minsert( ', ', editeur, '' ) else wiki.minsert( ', ', editeur ) end end
-- date if validArg( 'année', 'date', 'year', 'en ligne le', 'en ligne' ) then args.date = validArg( 'date', 'en ligne le', 'en ligne' ) wiki.minsert( ', ', Commun.inscriptionDate( args ) ) end
-- liens externe (isbn, doi...) et "consulté le" entre parenthèses, et en plus petit, sauf en note wiki.minsert( References.affichageLiensExternes( args, validArg, false, true ) )
-- fin du span wiki.minsert( spanFinal )
-- citation local citation = validArg( 'citation', 'extrait', 'quote' ) if citation then wiki.minsert( ' : « ', citation, ' »' ) end local passage = validArg( 'page', 'pages', 'passage' ) if passage then if string.match( passage, '^[%dIVXLCM]' ) then wiki.minsert( ', ', Commun.page, passage ) else wiki.minsert( ', ', passage ) end end
if mw.title.getCurrentTitle().namespace == 0 then wiki.minsert( args.categ.langue and , args.categ.url and , args.categ.titre and , args.categ.issnInvalid and ) end
return wiki.concat() end
return Lien