Aller au contenu

Module:Biblio/Lien web

Cette page est protégée.
Une page de Wikipédia, l'encyclopédie libre.

Documentation[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 simple
  • lienBrise(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:


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('%]','&#93;')

-- 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'')
..'.&ensp;</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" >&#91;['..archiveUrl..' '..textArchive..']&#93;</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.&ensp;</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='&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