Module:Biblio/Lien web
Apparence
[voir] [modifier] [historique] [purger]
Utilisation
Fonctions exportables:
lienWeb(args)
– affiche un lien vers un site web; voir{{Lien web}};il faut fournir une table de paramètres simplelienBrise(args)
– affiche un lien brisé, auquel sont ajoutés des liens vers des sites d'archivage; voir{{Lien brisé}};il faut fournir une table de paramètres simple
Modules externes et autres éléments dont ce module a besoin pour fonctionner:
Module:Biblio/Commun
Module:Biblio/Références
Module:Langue
– indirectement (chargé par Module:Biblio/Commun) si le paramètre langue est renseigné
Ladocumentationde cemoduleest générée par le modèle{{Documentation module}}.
Elle estinclusedepuis sasous-page de documentation.Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans lebac à sable(modifier).
Voir lesstatistiques d'appel depuis le wikicodesur l'outilwstatet lesappels depuis d'autres modules.
localLien={}
localCommun=require('Module:Biblio/Commun')
localReferences=require('Module:Biblio/Références')
-- Si un concat est effectué pendant les traitements,
-- permet de réutiliser ensuite son résultat, au lieu de refaire un concat complet à la fin des traitements.
localfunctionintermediateConcat(array)
localstate=table.concat(array)
array[1]=state
fori=2,#arraydo
array[i]=nil
end
returnstate
end
localfunctionformatLien(args,dead)
-- La table wiki va recevoir tous les petits morceaux de texte, et sera concaténée à la fin.
localwiki={}
-- permet d'écrire "insert( value )" au lieu de "wiki[#wiki+1] = value"
localfunctioninsert(value)
wiki[#wiki+1]=value
end
localmodele='[[Modèle:Lien web|{{Lien web}}]]'
ifdeadthen
modele='[[Modèle:Lien brisé|{{Lien brisé}}]]'
end
-- 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.
localfunctionvalidArg(...)
returnCommun.validTextArg(args,...)
end
-- Variables servant à la catégorisation
args.categ={}
ifvalidArg('dead-url','deadurl','brisé le','lien brisé')then
dead=true
end
-- Span initial, id
localspanInitial,spanFinal=Commun.spanInitial(args,validArg)
insert(spanInitial)
-- libellé
insert(Commun.libelle(args)ornil)
-- indication de langue
localindicLangue,codeLangue=Commun.indicationDeLangue(args,validArg)
ifindicLangueandindicLangue~=''then
insert(indicLangue..' ')
end
-- Liste des auteurs et de leurs responsabilités (principales et secondaires)
localauteur=validArg('nom1','nom','auteur1','auteur','auteurs','auteur institutionnel','last1','last','author1','author')
ifauteurthen
ifvalidArg('auteurs')then
insert(args.auteurs)
else
insert(Commun.responsabilitePrincipale(args,validArg)ornil)
end
localcoauteur=validArg('co-auteur','coauteurs','coauteur','coauthors')
ifcoauteurthen
insert(', '..coauteur)
end
insert(Commun.responsabiliteSecondaire(args,validArg)ornil)
insert(', ')
end
localurl=validArg('url','lire en ligne','url texte','lien')
localarchiveUrl=validArg('archive-url','archiveurl')
localtitre=validArg('titre','title')
localdescription=validArg('description')
-- url
ifurlthen
-- remplacement des crochets et espaces par leur équivalent HTML
url=url:gsub('%[','%%5B'):gsub('%]','%%5D'):gsub(' ','%%20')
-- ajout http:// si nécessaire:
ifnot(url:match('^https?://')orurl:match('^ftp://')orurl:match('^//'))then
url='http://'..url
end
ifdeadorarchiveUrlthen
insert('<span class= "noarchive" >')
end
elseifnotvalidArg('pmid','pmcid','doi','jstor','bibcod','math reviews','zbl','zbmath','arxiv')then
args.categ.url=true
end
-- titre
iftitrethen
-- 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('%]',']')
-- on teste d'abord si titre contient déjà des guillemets
locallQuote='« '
localrQuote=' »'
iftitre:match('^«.+»$')then
lQuote=''
rQuote=''
end
-- par précaution, ne pas modifier la valeur de la variable locale "titre"
localsousTitre=validArg('sous-titre')
ifsousTitrethen
sousTitre=': '..sousTitre
else
sousTitre=''
end
localattributStyle=' style= "font-style:normal;" '
ifdeadandnotarchiveUrlthen
attributStyle=' style= "font-style:normal; color:var(--color-link-red, #d73333);" '
end
localattributLang=''
ifcodeLanguethen
attributLang=' lang= "'..codeLangue..' "'
end
insert(lQuote)
ifurlthen
insert('['..url..' ')
end
insert('<cite'..attributStyle..attributLang..'>')
insert(titre..sousTitre)
insert('</cite>')
ifurlthen
insert(']')
end
insert(rQuote)
-- traduction titre
localtraductionTitre=validArg('traduction titre')
iftraductionTitreandtraductionTitre~=args.titrethen
insert(' [« '..traductionTitre..' »]')
end
ifdescriptionthen
insert(', '..description)
end
elseifdescriptionthen
ifurlthen
insert('['..url..' ')
end
ifdeadandnotarchiveUrlthen
insert('<span style= "color:var(--color-link-red, #d73333);" >')
insert(description)
insert('</span>')
else
insert(description)
end
ifurlthen
insert(']')
end
else
args.categ.titre=true
ifurlthen
insert('['..url..']')
end
end
-- message d'erreur
ifargs.categ.urlorargs.categ.titrethen
localabsent={}
ifargs.categ.urlthen
table.insert(absent,'« <code>url</code> »')
end
ifargs.categ.titrethen
table.insert(absent,'« <code>titre</code> »')
end
table.insert(wiki,1,'<span class= "error" >Modèle '
..modele..': paramètre'..(#absent>1and's 'or' ')
..mw.text.listToText(absent)..' manquant'..(#absent>1and's'or'')
..'. </span>'
)
end
-- liens archives pour les liens brisés
ifurlanddeadandnotarchiveUrlthen
insert('<sup class= "plainlinks" >('
..'[https://web.archive.org/web/*/'..url..' Archive.org] • '
..'[https://archive.wikiwix.com/cache/?url='..url..' Wikiwix] • '
..'[https://archive.is/'..url..' Archive.is] • '
..'[https://webcache.googleusercontent.com/search?hl=fr&q=cache:'..url..' Google] • '
..'[[Projet:Correction des liens externes#J\'ai trouvé un lien mort, que faire?|Que faire?]]'
..')</sup>'
)
elseifarchiveUrlthen
ifnot(archiveUrl:match('^http')orarchiveUrl:match('^//'))then
archiveUrl='http://'..archiveUrl
end
localtextArchive='archive'
localdateArchive=validArg('archive-date','archivedate')
ifdateArchivethen
dateArchive=Commun.inscriptionDate{date=dateArchive}
ifdateArchiveanddateArchive~=''then
textArchive=textArchive..' du '..dateArchive
end
end
insert(' <small class= "plainlinks cachelinks" >[['..archiveUrl..' '..textArchive..']]</small>')
end
ifurland(deadorarchiveUrl)then
insert('</span>')
end
-- affichage de l'icône du niveau d'accès à l'information
localpaywall=validArg('accès url')
ifpaywallthen
localsuffixeIcone=References.indicationIconeAcces(paywall)
ifsuffixeIconeandsuffixeIcone~=''then
insert(suffixeIcone)
else
table.insert(wiki,1,'<span class= "error" >Modèle '
..modele..': paramètre « <code>accès url</code> » utilisé avec la valeur <code>'
..paywall..'</code> inconnue. </span>'
)
end
end
-- format
localindicationDeFormat=References.indicationDeFormat(validArg('format électronique','format'))
ifindicationDeFormatandindicationDeFormat~=''then
insert(indicationDeFormat)
end
-- Nature du document
localnature=validArg('nature document')
ifnaturethen
insert(' ('..nature..')')
end
-- série, site, éditeur
localserie=validArg('série','work')
ifseriethen
insert(', <span class= "italique" >'..serie..'</span>')
args.categ.work=validArg('work')-- il y a ambiguïté sur l'utilisation de ce paramètre
end
localsite=validArg('site','website')
ifsitethen
insert(', sur <span class= "italique" >'..site..'</span>')
end
localperiodique=validArg('périodique')
ifperiodiquethen
insert(', <i>'..periodique..'</i>')
end
locallieu=validArg('lieu','lieu édition','location')
iflieuthen
insert(', '..lieu)
end
localediteur=validArg('éditeur','publisher','editeur')
ifediteurthen
locallienEditeur=validArg('lien éditeur')
iflienEditeurthen
insert(', [['..lienEditeur..'|'..editeur..']]')
else
insert(', '..editeur)
end
end
-- date
ifvalidArg('année','date','year','en ligne le','en ligne')then
args.categ.enLigneLe=validArg('date')andvalidArg('en ligne le')andargs.date~=args['en ligne le']
args.date=validArg('date','en ligne le','en ligne')
localdateFormatee=Commun.inscriptionDate(args)
ifdateFormateeanddateFormatee~=''then
localLangue=require('Module:Langue')
locallrm=''
ifLangue.nonLatin(intermediateConcat(wiki))then
lrm='‎'
end
insert(','..lrm..' '..dateFormatee)
end
end
-- liens externes (isbn, doi...) et "consulté le" entre parenthèses, et en plus petit, sauf en note
localliensExternes=References.affichageLiensExternes(args,validArg,false,true)
ifliensExternesandliensExternes~=''then
insert(liensExternes)
end
-- fin du span
insert(spanFinal)
-- citation et passage
localcitation=validArg('citation','extrait','quote')
ifcitationthen
ifcodeLanguethen
localLangue=require('Module:Langue')
citation=Langue.lang{codeLangue,citation}
end
insert('\194\160:<span class= "citation" >« '..citation..' »</span>')
end
localpassage=validArg('page','pages','passage')
ifpassagethen
insert(', '..Commun.formatePassage(passage))
end
-- Plume "Ouvrage utilisé pour la rédaction de l'article"
ifvalidArg('plume')then
localpatternPonct='[,.;:!?]?»?$'
localponctuation=intermediateConcat(wiki):gsub('%b<>',''):match(patternPonct)
ifnotponctuationthen
insert('.')
end
insert(Commun.plume)
end
ifmw.title.getCurrentTitle().namespace==0then
insert(
(args.categ.langueand'[[Catégorie:Page du modèle Lien web comportant une erreur|langue]]'or'')
..(args.categ.urland'[[Catégorie:Page du modèle Lien web comportant une erreur|Url]]'or'')
..(args.categ.titreand'[[Catégorie:Page du modèle Lien web comportant une erreur|titre]]'or'')
..(args.categ.enLigneLeand'[[Catégorie:Page du modèle Lien web comportant une erreur|enLigneLe]]'or'')
..(args.categ.isbnInvalidand'[[Catégorie:Page avec ISBN invalide]]'or'')
..(args.categ.issnInvalidand'[[Catégorie:Page avec ISSN invalide]]'or'')
)
end
ifdeadandnotvalidArg('nocat')then
ifmw.title.getCurrentTitle().namespace==0then
insert('[[Catégorie:Article contenant un lien mort]]')
else
insert('[[Catégorie:Page contenant un lien mort]]')
end
end
returntable.concat(wiki)
end
functionLien.lienWeb(args)
returnformatLien(args,false)
end
functionLien.lienBrise(args)
args.titre=Commun.validTextArg(args,'titre','title','url','lire en ligne','url texte','lien')
returnformatLien(args,true)
end
returnLien