Différences entre les pages « Modèle:Lien web/Documentation » et « Module:Biblio/Lien web »

De Les Mots de l'agronomie
< Modèle:Lien web(Différence entre les pages)
imported>Jacques Ducloy
m (1 révision importée)
 
imported>Jacques Ducloy
m (1 révision importée)
 
Ligne 1 : Ligne 1 :
{{Sous-page de documentation}}<includeonly>
+
local Lien = { }
{{Protection}}
 
{{Modèle utilisant les modules Lua|Module:Biblio}}</includeonly>
 
  
== Utilisation ==
+
local Commun = require( 'Module:Biblio/Commun' )
Ce modèle sert à [[Wikipédia:Citez vos sources|citer une source]] dans un article. Il permet de formater une référence externe à un site web. Son usage est particulièrement recommandé pour les [[Aide:Notes et références|notes et références]].
+
local References = require( 'Module:Biblio/Références' )
 +
local Outils = require( 'Module:Outils' )
 +
local TableBuilder = require( 'Module:TableBuilder' )
 +
local Langue = require( 'Module:Langue' )
 +
local Lien = { }
  
Remarque : afin de se conformer aux conventions bibliographiques  [https://fr.wikipedia.org/wiki/Aide:Note#R.C3.A8gles_relatives_.C3.A0_la_ponctuation {{Citation|les notes elles-mêmes doivent être terminées par un point}}].
+
local Commun = require( 'Module:Biblio/Commun' )
 +
local References = require( 'Module:Biblio/Références' )
 +
local Outils = require( 'Module:Outils' )
 +
local TableBuilder = require( 'Module:TableBuilder' )
 +
local Langue = require( 'Module:Langue' )
  
== Syntaxe ==
 
[[Fichier:Information_icon.svg|35px]] ''Copiez-collez le texte ci-après et complétez les informations en votre possession''
 
  
=== Syntaxe minimale ===
+
local function formatLien( args, dead )
Sans auteur :
+
-- La table wiki va recevoir tout les petits bouts de texte, et sera concaténée à la fin.
<code style="display:block; padding:1em; line-height:1.3em;"><nowiki>
+
-- Elle utilise la meta-table de TableBuilder, permettant d'utiliser les fonctions de la
{{Lien web |langue= |titre= |url= |date= |site= |consulté le=</nowiki>{{#ifeq: {{JOURACTUEL}} | 1 | <nowiki>{{1er}}</nowiki> | {{JOURACTUEL}} }} {{NOMMOISLOCAL}} {{ANNEEACTUELLE}}<nowiki>}}.
+
-- library table comme des méthodes. minsert permet d'insérer plusieurs éléments en une
</nowiki></code >
+
-- seule fois en, ignorant les valeurs nil.
 +
local wiki = TableBuilder.new()
 +
local modele = '[[Modèle:Lien web|{{Lien web}}]]'
 +
if dead then
 +
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.
 +
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', 'lien' )
 +
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
 +
if dead then
 +
wiki.minsert( '<span class="noarchive">' )
 +
end
 +
wiki.minsert( '[', url )
 +
elseif not validArg( 'pmid', 'pmcid', 'doi', 'jstor', 'bibcod', 'math reviews', 'zbl', 'zbmath', 'arxiv' ) then
 +
args.categ.url = true
 +
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 ( '%]', '&#93;' )
 +
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
 +
local color = dead and ' color:red;'
 +
wiki.minsert( ' « <cite style="font-style: normal;', color, '">', titre, sousTitre, '</cite> »', url and ']' )
 +
else
 +
wiki.minsert( ' ', titre, url and ']' )
 +
end
 +
 +
-- traduction titre
 +
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
 +
if dead then
 +
wiki.minsert( ' <span style="color:red;">', description, '</span>', url and ']' )
 +
else
 +
wiki.minsert( ' ', description, url and ']' )
 +
end
 +
else
 +
args.categ.titre = true
 +
if url then
 +
wiki.minsert( ' ',  url, ']' )
 +
end
 +
end
 +
 +
-- message d'erreur
 +
if args.categ.url or args.categ.titre then
 +
local absent = { }
 +
if args.categ.url  then
 +
table.insert( absent, '« <code>url</code> »' )
 +
end
 +
if args.categ.titre then
 +
table.insert( absent, '« <code>titre</code> »' )
 +
end
 +
wiki.insert( 1, Outils.erreur( 'Modèle '
 +
.. modele ..' : paramètre' .. ( #absent > 1 and 's ' or ' ')
 +
.. mw.text.listToText( absent ) .. ' manquant.&ensp;'
 +
) )
 +
end
  
Avec auteur :
+
-- liens archives pour les liens brisés
<code style="display:block; padding:1em; line-height:1.3em;"><nowiki>
+
if url and dead then
{{Lien web |langue= |auteur= |titre= |url= |date= |site= |consulté le=</nowiki>{{#ifeq: {{JOURACTUEL}} | 1 | <nowiki>{{1er}}</nowiki> | {{JOURACTUEL}} }} {{NOMMOISLOCAL}} {{ANNEEACTUELLE}}<nowiki>}}.
+
wiki.minsert( '<sup class="plainlinks">(',
</nowiki></code >
+
'[http://web.archive.org/web/*/', url, ' Archive] • ',
 +
'[http://archive.wikiwix.com/cache/?url=', url, ' Wikiwix] • ',
 +
'[http://archive.is/', url, ' Archive.is] • ',
 +
'[https://www.google.fr/search?q=cache:', url, ' Google] • ',
 +
'[[Projet:Correction des liens externes#J\'ai trouvé un lien mort, que faire ?|Que faire ?]])',
 +
'</sup></span>'
 +
)
 +
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
 +
wiki.minsert( [[, sur '']], site, [['']] )
 +
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( ', [[', lienEditeur, '|', 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' )
 +
local lrm
 +
if Langue.nonLatin( wiki.concat() ) then
 +
lrm = '&lrm; '
 +
end
 +
wiki.minsert( ',', lrm, ' ', Commun.inscriptionDate( args ) )
 +
end
 +
if validArg( 'brisé le' ) then
 +
wiki.minsert( ', brisé le ', Commun.inscriptionDate{ date = args['brisé le'] } )
 +
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 et passage
 +
local citation = validArg( 'citation', 'extrait', 'quote' )
 +
if citation then
 +
wiki.minsert( ' : <span class="citation">« ', citation, ' »</span>' )
 +
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
 +
 +
-- Ponctuation
 +
local patternPonct = '[,.;:!?] ?»?$'
 +
local ponctuation = mw.ustring.match( wiki.concat():gsub( '%b<>', '' ), patternPonct )
 +
if not ponctuation then
 +
local ponctuationFinale = validArg( 'ponctuation finale' )
 +
if ponctuationFinale == ';' then
 +
ponctuationFinale = ' ;'
 +
end
 +
wiki.minsert( ponctuationFinale )
 +
end
 +
 +
if mw.title.getCurrentTitle().namespace == 0 then
 +
wiki.minsert(
 +
args.categ.langue and '[[Catégorie:Page du modèle Lien web comportant une erreur|langue]]',
 +
args.categ.url and '[[Catégorie:Page du modèle Lien web comportant une erreur|Url]]',
 +
args.categ.titre and '[[Catégorie:Page du modèle Lien web comportant une erreur|titre]]',
 +
args.categ.isbnInvalid and '[[Catégorie:Page avec ISBN invalide]]',
 +
args.categ.issnInvalid and '[[Catégorie:Page avec ISSN invalide]]',
 +
dead and not validArg( 'nocat' ) and '[[Catégorie:Article contenant un lien mort]]'
 +
)
 +
elseif dead and not validArg( 'nocat' ) then
 +
wiki.minsert( '[[Catégorie:Page contenant un lien mort]]' )
 +
end
 +
 +
return wiki.concat()
 +
end
  
=== Syntaxe intermédiaire ===
+
function Lien.lienWeb( args )
<code style="display:block; padding:1em; line-height:1.3em;"><nowiki>
+
return formatLien( args, false )
{{Lien web|langue= |format= |auteur1= |lien auteur1= |coauteurs= |url= |titre= |série= |jour= |mois= |année= |site= |éditeur= |isbn= |page= |citation= |consulté le=</nowiki>{{#ifeq:{{JOURACTUEL}}|1|<nowiki>{{1er}}</nowiki>|{{JOURACTUEL}}}} {{NOMMOISLOCAL}} {{ANNEEACTUELLE}}<nowiki>|id=  |libellé= }}.
+
end
</nowiki></code >
 
  
=== Syntaxe intermédiaire indentée ===
+
function Lien.lienBrise( args )
Présentation plus lisible, mais prend plus de place :
+
args.titre = Commun.validTextArg( args, 'titre', 'title', 'url', 'lire en ligne', 'url texte', 'lien' )
<nowiki>{{Lien web
+
return formatLien( args, true )
| langue          =  
+
end
| format          =
 
| auteur1        =
 
| lien auteur1    =
 
| url            =
 
| titre          =
 
| série          =
 
| jour            =
 
| mois            =
 
| année          =
 
| site            =
 
| éditeur        =
 
| isbn            =
 
| page            =
 
| citation        =
 
| consulté le    = </nowiki>{{#ifeq:9|1|<nowiki>{{1er}}</nowiki>|{{JOURACTUEL}}}} {{NOMMOISLOCAL}} {{ANNEEACTUELLE}}<nowiki>
 
| id              =
 
| libellé        =
 
}}.</nowiki>
 
  
=== Syntaxe complète ===
+
return Lien
<code style="display:block; padding:1em; line-height:1.3em;"><nowiki>
 
{{Lien web|langue= |auteur1= |prénom1= |nom1= |postnom1= |lien auteur1= |directeur1= |responsabilité1= |auteur2= |prénom2= |nom2= |postnom2= |lien auteur2= |directeur2= |responsabilité2= |et al.= |auteur institutionnel= |traducteur= |photographe= |champ libre= |titre=<!-- Paramètre obligatoire --> |sous-titre= |traduction titre= |description= |url=<!-- Paramètre obligatoire --> |format= |série= |site= |lieu= |éditeur= |jour= |mois= |année= |date= |isbn= |issn= |oclc= |pmid= |doi= |jstor= |numdam= |bibcode= |math reviews= |zbl= |arxiv= | en ligne le= |consulté le=</nowiki>{{#ifeq:{{JOURACTUEL}}|1|<nowiki>{{1er}}</nowiki>|{{JOURACTUEL}}}} {{NOMMOISLOCAL}} {{ANNEEACTUELLE}}<nowiki> |citation= |page= |id=  |libellé= }}.
 
</nowiki></code >
 
 
 
=== Syntaxe complète indentée ===
 
Présentation plus lisible, mais prend plus de place :
 
<nowiki>{{Lien web
 
| langue          =
 
| auteur1        =
 
| prénom1        =
 
| nom1            =
 
| postnom1        =
 
| lien auteur1    =
 
| directeur1      =
 
| responsabilité1 =
 
| auteur2        =
 
| prénom2        =
 
| nom2            =
 
| postnom2        =
 
| lien auteur2    =
 
| directeur2      =
 
| responsabilité2 =
 
| et al.          =
 
| traducteur      =
 
| photographe    =
 
| champ libre    =
 
| titre          = <!-- obligatoire -->
 
| sous-titre      =
 
| traduction titre=
 
| description    =
 
| url            = <!-- obligatoire -->
 
| format          =
 
| série          =
 
| site            =
 
| lieu            =
 
| éditeur        =
 
| jour            =
 
| mois            =
 
| année          =
 
| date            =
 
| isbn            =
 
| issn            =
 
| oclc            =
 
| pmid            =
 
| doi            =
 
| jstor          =
 
| numdam          =
 
| bibcode        =
 
| math reviews    =
 
| zbl            =
 
| arxiv          =
 
| consulté le    = </nowiki>{{#ifeq:9|1|<nowiki>{{1er}}</nowiki>|{{JOURACTUEL}}}} {{NOMMOISLOCAL}} {{ANNEEACTUELLE}}<nowiki>
 
| en ligne le    =
 
| citation        =
 
| page            =
 
| id              =
 
| libellé        =
 
}}.</nowiki>
 
 
 
== Paramètres ==
 
* <code>langue</code> : langue de la page web, ne sera affichée que si elle diffère du français, en [[Étiquette d'identification de langues IETF|code de langue IETF]] ([[Liste des codes ISO 639-1|liste]]) (par exemple : <code>en</code>, <code>fr</code>, <code>it</code>, <code>fa</code>{{etc.}}) On peut en indiquer plusieurs, séparées par une espace : <code>en it</code>.
 
* <code>auteur1</code> : le nom de l'auteur de la page web.
 
* <code>prénom1</code> : le prénom de l'auteur de la page web (paramètre alternatif à <code>auteur1</code>).
 
* <code>nom1</code> : le nom de famille de l'auteur de la page web (paramètre alternatif à <code>auteur1</code>).
 
* <code>lien auteur1</code> : le nom de la page de l’article sur l’auteur afin de créer un lien (affiche uniquement si <code>auteur</code> ou <code>nom1</code> est donné).
 
* <code>responsabilité1</code> : responsabilité assumée par l'auteur.
 
* <code>auteur2</code> : le nom du deuxième auteur de la page web.
 
* <code>prénom2</code> : le prénom du deuxième auteur de la page web (paramètre alternatif à <code>auteur2</code>).
 
* <code>nom2</code> : le nom de famille du deuxième auteur de la page web (paramètre alternatif à <code>auteur2</code>).
 
* <code>lien auteur2</code> : le nom de la page de l’article sur l’auteur afin de créer un lien.
 
* <code>responsabilité2</code> : responsabilité assumée par l'auteur.
 
...  D'autres auteurs peuvent être ajoutés en incrémentant le numéro final.
 
* <code>et al.</code> : si ce paramètre vaut oui, « et al. » sera inséré à la fin de la chaîne de responsabilité principale (ce qui indique que tous les auteurs ne sont pas cités).
 
* <code>auteur institutionnel</code> : si l'auteur n'est pas un personne physique, mais une personne morale (organisation, association, entreprise...)
 
* <code>traducteur</code> : nom du (des) traducteur(s) de l’article.
 
* <code>photographe</code> : nom de la personne ayant réalisé les photographies s'il y en a.
 
* <code>titre</code> : le titre de la page web (obligatoire, peut éventuellement être remplacé par le paramètre ''description'').
 
* <code>sous-titre</code> : le sous-titre de la page.
 
* <code>traduction titre</code> : la traduction en français du titre de la page web.
 
* <code>description</code> : Si la page web n'a pas de titre ou un titre trop vague, ce paramètre permet d'avoir une description en français de l’intérêt de cette page. Si la page a un titre, cela peut permettre d'ajouter des informations importantes comme un identifiant, numéro…
 
* <code>url</code> : une [[Adresse réticulaire|URL]] (obligatoire).
 
* <code>format</code> : format du texte du lien (exemple <code>pdf</code>, <code>doc</code> ou <code>xls</code>, voir [[:Catégorie:Modèle extension de fichier|les formats acceptés]]) qui sera affiché entre crochets ; le format [[HTML]] est le format par défaut et ne doit pas être indiqué.
 
* <code>série</code> : nom de la série ou de la collection.
 
* <code>site</code> : indiquer le nom du site (avec un wikilien vers l'article Wikipédia, s'il existe) ou, si le nom du site n'est pas explicite, une description en quelques mots. <small>Correspond au champ <code>work</code> sur la Wikipedia anglophone.</small>
 
* <code>éditeur</code> : l’éditeur du support bibliographique.
 
* <code>jour</code> : le jour de publication comme {{JOURACTUEL}}.
 
* <code>mois</code> : le mois de publication comme {{NOMMOISACTUEL}} ou {{MOIS1ACTUEL}}.
 
* <code>année</code> : l’année en quatre chiffres comme {{ANNEEACTUELLE}}.
 
* <code>date</code> : si les jour/mois/année sont connus, les trois champs précédents peuvent être remplacés par le champ <code>date</code>.
 
* <code>isbn</code> : [[ISBN]] du support bibliographique.
 
* <code>issn</code> : [[ISSN]] de la publication.
 
* <code>oclc</code>, <code>pmid</code>, <code>pmcid</code>, <code>doi</code>, <code>jstor</code>, <code>bibcode</code>, <code>math reviews</code>, <code>zbmath</code>, <code>arxiv</code> : identifiants [[OCLC]], [[PubMed]], [[Digital Object Identifier|DOI]], [[JSTOR]], [[Bibcode]], [[Mathematical Reviews]], [[Zentralblatt MATH]] ou [[arXiv]]. Si l'un de ces paramètres est rempli, l'url n'est plus obligatoire.
 
* <code>consulté le</code> : la date d’accès à l’URL. Permet de surveiller l’obsolescence du lien. <small>Correspond au champ  <code>accessdate</code> sur la Wikipedia anglophone.</small>
 
* <code>en ligne le</code> : la date de publication de l’URL.
 
* <code>page</code> : un numéro, une liste ou une plage de pages. Est à associer à une citation.
 
* <code>citation</code> : permet de formater une citation de la publication dans la note de fin de page.
 
* <code>id</code> : identifiant unique dans la page qui inclut le modèle, ce qui permet le lien externe <code><nowiki>[[#id_du_lien|voir ce lien]]</nowiki></code> (notamment dans les notes).
 
* <code>libellé</code> : libellé permettant d'identifier un renvoi bibliographique. Voir [[Wikipédia:Conventions bibliographiques#Renvois bibliographiques (références Harvard et autres)]] pour plus de détails. <br />Contrairement à <code>id</code>, ce paramètre n'est pas utilisé pour créer des liens avec d'autres modèles ; il s'agit d'un simple libellé d'affichage. <br />Voir aussi les [[#Exemples avec des renvois bibliographiques|exemples]].
 
 
 
== Exemples ==
 
=== Lien basique ===
 
<pre style="white-space:pre-wrap;">{{Lien web|langue=en|titre=Toho sues Cosmo Contents for selling DVDs of Kurosawa’s early works|url=http://akirakurosawa.info/2007/04/02/toho-sues-cosmo-contents-for-selling-dvds-of-kurosawas-early-works/|date=2 avril 2007}}.</pre>
 
comme
 
<pre style="white-space:pre-wrap;">
 
{{Lien web
 
|langue = en
 
|titre  = Toho sues Cosmo Contents for selling DVDs of Kurosawa’s early works
 
|url    = http://akirakurosawa.info/2007/04/02/toho-sues-cosmo-contents-for-selling-dvds-of-kurosawas-early-works/
 
|date  = 2 avril 2007
 
}}.</pre>
 
donnent : « {{Lien web|langue=en|titre=Toho sues Cosmo Contents for selling DVDs of Kurosawa’s early works |url=http://akirakurosawa.info/2007/04/02/toho-sues-cosmo-contents-for-selling-dvds-of-kurosawas-early-works/|date=2 avril 2007}}. »
 
 
 
=== Lien plus complet ===
 
<pre style="white-space:pre-wrap;">{{Lien web|langue=en|auteur1=Massoumeh Price|titre=Translation Movements in Iran; Sassanian Era to Year 2000, Expansion, Preservation and Modernization|url=http://www.iranchamber.com/podium/literature/030206_translation_movement_iran.php|éditeur=Iran Chamber|année=2000|consulté le=13 octobre 2006}}.</pre>
 
comme
 
<pre style="white-space:pre-wrap;">
 
{{Lien web
 
|langue      = en
 
|auteur1    = Massoumeh Price
 
|titre      = Translation Movements in Iran; Sassanian Era to Year 2000, Expansion, Preservation and Modernization
 
|url        = http://www.iranchamber.com/literature/articles/translation_movement_iran.php
 
|éditeur    = Iran Chamber
 
|année      = 2000
 
|consulté le = 13 octobre 2006
 
}}.</pre>
 
donnent : « {{Lien web|langue=en|auteur1=Massoumeh Price|titre=Translation Movements in Iran; Sassanian Era to Year 2000, Expansion, Preservation and Modernization|url=http://www.iranchamber.com/literature/articles/translation_movement_iran.php|éditeur=Iran Chamber|année=2000|consulté le=13 octobre 2006}}. »
 
 
 
=== Lien vers un site, objet d'un article Wikipédia ===
 
<pre style="white-space:pre-wrap;">{{Lien web|auteur1=David Larousserie|titre=Wikipédia : thermomètre des sujets qui fâchent dans le monde|url=http://www.lemonde.fr/sciences/article/2013/09/02/wikipedia-thermometre-des-sujets-qui-fachent-dans-le-monde_3469924_1650684.html|site=[[Le Monde#Le Monde.fr|lemonde.fr]]|date=2 septembre 2013|consulté le=24 novembre 2013}}.</pre>
 
comme
 
<pre style="white-space:pre-wrap;">
 
{{Lien web
 
|auteur1    = David Larousserie
 
|titre      = Wikipédia : thermomètre des sujets qui fâchent dans le monde
 
|url        = http://www.lemonde.fr/sciences/article/2013/09/02/wikipedia-thermometre-des-sujets-qui-fachent-dans-le-monde_3469924_1650684.html
 
|site        = [[Le Monde#Le Monde.fr|lemonde.fr]]
 
|date        = 2 septembre 2013
 
|consulté le = 24 novembre 2013
 
}}.</pre>
 
donnent : « {{Lien web|auteur1=David Larousserie|titre=Wikipédia : thermomètre des sujets qui fâchent dans le monde|url=http://www.lemonde.fr/sciences/article/2013/09/02/wikipedia-thermometre-des-sujets-qui-fachent-dans-le-monde_3469924_1650684.html|site=[[Le Monde#Le Monde.fr|lemonde.fr]]|date=2 septembre 2013|consulté le=24 novembre 2013}}. »
 
 
 
=== Lien vers un ouvrage publié sur le [[Internet|Net]] ===
 
<pre style="white-space:pre-wrap;">{{Lien web|auteur1=[[Joël de Rosnay]]|titre=2020, les scénarios du futur : comprendre le monde qui vient|url=http://www.agoravox.fr/sc2020/2020.pdf|format=PDF|site=[[AgoraVox]]|éditeur=[[Des idées et des hommes]]|date=avril 2007|isbn=978-2-35369-013-8|consulté le=24 novembre 2013}}.</pre>
 
 
 
comme
 
 
 
<pre>
 
{{Lien web
 
|auteur1    = [[Joël de Rosnay]]
 
|titre      = 2020, les scénarios du futur : comprendre le monde qui vient
 
|url        = http://www.agoravox.fr/sc2020/2020.pdf
 
|format      = pdf
 
|site        = [[AgoraVox]]
 
|éditeur    = [[Des idées et des hommes]]
 
|date        = avril 2007
 
|isbn        = 978-2-35369-013-8
 
|consulté le = 24 novembre 2013
 
}}.</pre>
 
 
 
donnent : « {{Lien web|auteur1=[[Joël de Rosnay]]|titre=2020, les scénarios du futur : comprendre le monde qui vient|url=http://www.agoravox.fr/sc2020/2020.pdf|format=PDF|site=[[AgoraVox]]|éditeur=[[Des idées et des hommes]]|date=avril 2007|isbn=978-2-35369-013-8|consulté le=24 novembre 2013}}. »
 
 
 
== Notes ==
 
* On n'utilisera <code>lien auteur1</code> et ou <code>coauteurs</code> que lorsque <code>auteur1</code> est donné.
 
* Lorsque l'URL contient des caractères spéciaux, on peut utiliser <nowiki>{{urlencode:URL}}</nowiki>.
 
* L'ordre des paramètres n'a pas d'importance. Ils sont présentés ici par l'ordre d'apparition à l'affichage pour faciliter la compréhension.
 
 
 
== Boutons ==
 
{{article détaillé|Aide:Utilitaires#MonobookToolbarSources}}
 
 
 
Comment intégrer '''facilement''' et '''convenablement''' des références ?
 
 
 
''Uniquement pour les [[Aide:Compte utilisateur|utilisateurs inscrits]]''
 
 
 
'''<u> Réglages préalables :</u>'''
 
 
 
# Rendez-vous dans « Préférences » puis dans l'onglet « Gadget » en cliquant sur le lien suivant : [[Spécial:Préférences#mw-prefsection-gadgets]] ;
 
# Dans la section « Bouton de la barre d'outils » :
 
## Cochez : « ''ForceMonobookToolbar'' »,
 
## Cochez : « ''MonobookToolbarSources'' »,
 
## Vous pouvez décocher ''MonobookToolbarStandard'' si vous ne souhaitez pas voir apparaître les boutons présentés dans [[Aide:Barre d'outils d'édition/Monobook]] (conseillé).
 
 
 
'''<u>Résultat</u>'''
 
 
 
À la fin de la [[Aide:Comment_modifier_une_page#Effectuer_la_modification|barre d'outils d'édition améliorée]], vous verrez apparaître de nouveaux boutons :
 
[[Fichier:AdvancedEditToolbar with MonobookToolbarSources.png|alt=Barre d'édition avancée avec [[MediaWiki:MonobookToolbarSources.js]]]]
 
 
 
Le bouton « livre » [[Fichier:Button cite book.png]] permet d'intégrer automatiquement {{m|ouvrage}} (pour référencer des ouvrages). Le bouton « article » [[Fichier:Button_lienjournal.png]] permet d'intégrer automatiquement le modèle {{m|article}} (pour référencer des articles). Le bouton « lien web » [[Fichier:Button_lienweb.png]] permet d'intégrer automatiquement le modèle {{m|Lien web}} (pour référencer des pages [[WWW|web]]).
 
 
 
Ainsi, '''vous simplifierez considérablement''' votre travail d'intégration de sources.
 
 
 
== Voir aussi ==
 
* [[Wikipédia:Conventions bibliographiques]].
 
* [[Wikipédia:Sources libres d'accès sur internet]] (indications pour vérifier la libre utilisation de sources sur Internet).
 
* {{M|Édition}} et [[Aide:espace référence]] ou {{M|Ouvrage}} pour une référence (plus) bibliographique.
 
* {{m|Article}} possède des paramètres |url texte= et |consulté le= pour les articles de revue papier dont une copie est consultable sur Internet.
 
* [http://www.dereckson.be/tools/SourceTemplatesGenerator/ Outil de génération de sources] permettant de générer un modèle {{m|Lien web}} ou {{m|Article}} à partir d'une URL.
 
* [https://addons.mozilla.org/en-US/firefox/addon/sourcetemplatesgenerator/ Extension pour Firefox] permettant d'utiliser l'outil précédent. <br />Depuis la page dont vous voulez le modèle de lien, cliquez sur le bouton [[File:VisualEditor - Icon - Reference.svg|16px]], située dans la barre des modules ('''ctrl''' '''/''' pour la faire apparaître ou disparaître).
 
* [[WP:REFILL|reFill]] (outil qui met en forme les liens externes en référence, une ligne de code est à ajouter à votre commons.js)
 
 
 
== TemplateData ==
 
{{Boîte déroulante/début|titre= '''TemplateData''' }}
 
<templatedata>
 
{
 
"description": "Pour mettre un site web en référence (menu \"Citer\") ou dans un modèle (menu \"Insérer\"), remplissez les champ suivants. \nLes astérisques * (à côté du nom du champ) sont les champs obligatoires pour que la référence ou le modèle s'affiche correctement.",
 
"params": {
 
"langue": {
 
"suggested": true,
 
"description": "Langue dans laquelle est écrite la page web. Au choix : \n- nom de la langue en français (français, anglais, russe, etc.) ; \n- code langue (fr, en, etc). Voir la page: « Modèle:Code langue 2#Liste des codes ».",
 
"type": "line",
 
"aliases": [
 
"lang",
 
"language"
 
],
 
"default": "français"
 
},
 
"format": {
 
"description": "Format du texte du lien (par exemple pdf, doc ou xls) qui sera affiché entre crochets. HTML est le format par défaut et ne sera pas indiqué.",
 
"type": "line",
 
"example": "pdf"
 
},
 
"auteur1": {
 
"description": "Le nom de l'auteur de la page web.",
 
"type": "string",
 
"aliases": [
 
"auteurs",
 
"auteur",
 
"author"
 
],
 
"example": "Marguerite Yourcenar"
 
},
 
"date": {
 
"suggested": true,
 
"description": "Formats acceptés:  07/05/2015 ou 07-05-2015 ou 7 mai 2015 ou 07 mai 2015 ou  2015-05-07",
 
"type": "string",
 
"aliases": [
 
"en ligne le",
 
"en ligne"
 
],
 
"example": "9 novembre 1989"
 
},
 
"nom1": {
 
"type": "string",
 
"aliases": [
 
"nom",
 
"last1",
 
"last"
 
],
 
"description": "Nom de famille de l'auteur (paramètre alternatif à auteur).",
 
"example": "Poe"
 
},
 
"prénom1": {
 
"aliases": [
 
"prénom",
 
"first1",
 
"first"
 
],
 
"type": "string",
 
"description": "Prénom de l'auteur (paramètre alternatif à auteur).",
 
"example": "Edgar Allan"
 
},
 
"lien auteur": {
 
"description": "Nom de l'article Wikipédia consacré à l'auteur.",
 
"type": "string"
 
},
 
"responsabilité1": {
 
"type": "string",
 
"description": "Responsabilité assumée par le premier auteur."
 
},
 
"directeur1": {
 
"type": "string",
 
"description": "Si le premier auteur est aussi directeur de publication (si c'est le cas, indiquer oui).",
 
"example": "oui"
 
},
 
"auteur2": {
 
"description": "Le nom du deuxième auteur de la page web.",
 
"type": "string",
 
"aliases": [
 
"author2"
 
]
 
},
 
"nom2": {
 
"type": "string",
 
"aliases": [
 
"last2"
 
],
 
"description": "Nom de famille du deuxième auteur (paramètre alternatif à auteur2)."
 
},
 
"prénom2": {
 
"aliases": [
 
"first2"
 
],
 
"type": "string",
 
"description": "Prénom du deuxième auteur (paramètre alternatif à auteur2)."
 
},
 
"lien auteur2": {
 
"description": "Nom de l'article Wikipédia consacré au deuxième auteur.",
 
"type": "string"
 
},
 
"responsabilité2": {
 
"type": "string",
 
"description": "Responsabilité assumée par le deuxième auteur."
 
},
 
"directeur2": {
 
"type": "string",
 
"description": "Si le deuxième auteur est aussi directeur de publication (si c'est le cas, indiquer oui)."
 
},
 
"et al.": {
 
"label": "et al. ?",
 
"type": "string",
 
"description": "Si ce paramètre vaut oui, « et al. » sera inséré à la fin de la chaîne de responsabilité principale (ce qui indique que tous les auteurs ne sont pas cités — volontairement ou non).",
 
"aliases": [
 
"et alii"
 
],
 
"example": "oui"
 
},
 
"auteur institutionnel": {
 
"type": "string",
 
"description": "Si l'auteur n'est pas un personne physique, mais une personne morale (organisation, association, entreprise…)."
 
},
 
"coauteurs": {
 
"description": "D’autres auteurs (facultatif et uniquement si auteur est donné).",
 
"type": "string",
 
"aliases": [
 
"coauteur",
 
"coauthors"
 
],
 
"deprecated": true
 
},
 
"traducteur": {
 
"label": "Traducteur",
 
"type": "string",
 
"description": "Nom du (des) traducteur(s) de l’article ; mettre un (dir.) s’il existe un traducteur principal.",
 
"aliases": [
 
"trad",
 
"traduction"
 
]
 
},
 
"photographe": {
 
"label": "Photographe",
 
"type": "string",
 
"description": "Nom de la personne ayant réalisé les photographies s'il y en a."
 
},
 
"titre": {
 
"label": "Titre de la page",
 
"type": "string",
 
"required": true,
 
"aliases": [
 
"title"
 
]
 
},
 
"sous-titre": {
 
"label": "Sous-titre",
 
"type": "string",
 
"description": "Sous-titre de l’article."
 
},
 
"url": {
 
"label": "Adresse web (URL)",
 
"description": "URL (adresse) de la page web.",
 
"type": "string",
 
"required": true,
 
"aliases": [
 
"url texte",
 
"lire en ligne"
 
],
 
"example": "http://www.lemonde.fr/campus/article/2015/05/19/si-l-apprentissage-des-langues-est-une-priorite-c-est-en-primaire-qu-il-faut-porter-l-effort_4636373_4401467.html"
 
},
 
"série": {
 
"description": "Nom de la série ou de la collection.",
 
"type": "string",
 
"aliases": [
 
"work"
 
]
 
},
 
"site": {
 
"suggested": true,
 
"description": "Indiquer le nom du site (avec un wikilien vers l'article Wikipédia, s'il existe) ou, si le nom du site n'est pas explicite, une description en quelques mots.",
 
"type": "string",
 
"aliases": [
 
"périodique",
 
"website"
 
],
 
"example": "lemonde.fr"
 
},
 
"lieu": {
 
"label": "Lieu d'édition",
 
"type": "string",
 
"description": "Lieu d'édition du périodique.",
 
"aliases": [
 
"lieu édition",
 
"location"
 
]
 
},
 
"éditeur": {
 
"description": "L’éditeur du support bibliographique.",
 
"type": "string",
 
"aliases": [
 
"publisher",
 
"editeur"
 
]
 
},
 
"jour": {
 
"description": "Le jour de publication comme 20.",
 
"type": "number",
 
"aliases": [
 
"day"
 
]
 
},
 
"mois": {
 
"description": "Le mois de publication comme juillet.",
 
"type": "string",
 
"aliases": [
 
"month"
 
]
 
},
 
"année": {
 
"description": "L’année en quatre chiffres comme 2013.",
 
"type": "number",
 
"aliases": [
 
"year"
 
]
 
},
 
"isbn": {
 
"label": "ISBN",
 
"description": "ISBN du support bibliographique.",
 
"type": "string",
 
"aliases": [
 
"ISBN"
 
]
 
},
 
"issn": {
 
"type": "string",
 
"label": "ISSN",
 
"description": "ISSN de la publication."
 
},
 
"oclc": {
 
"type": "number",
 
"label": "OCLC",
 
"description": "Identifiant OCLC."
 
},
 
"pmid": {
 
"label": "PMID",
 
"type": "number",
 
"description": "Identifiant PubMed.",
 
"aliases": [
 
"PMID"
 
]
 
},
 
"pmcid": {
 
"label": "PMCID",
 
"type": "string",
 
"description": "Identifiant PubMed Central.",
 
"aliases": [
 
"pmc"
 
]
 
},
 
"doi": {
 
"label": "DOI",
 
"type": "string",
 
"description": "Identifiant Digital Object Identifier.",
 
"aliases": [
 
"DOI"
 
]
 
},
 
"jstor": {
 
"label": "JStor",
 
"type": "string",
 
"description": "Identifiant Serial Item and Contribution Identifier."
 
},
 
"bibcode": {
 
"type": "string",
 
"description": "Identifiant bibcode."
 
},
 
"math reviews": {
 
"type": "string",
 
"description": "Identifiant MR."
 
},
 
"zbl": {
 
"type": "string",
 
"label": "zbMATH",
 
"description": "Identifiant zbMATH.",
 
"aliases": [
 
"zbmath"
 
]
 
},
 
"arxiv": {
 
"type": "string",
 
"label": "arXiv",
 
"description": "Identifiant arXiv."
 
},
 
"consulté le": {
 
"suggested": true,
 
"description": "La date d’accès au lien. Permet de surveiller l’obsolescence du lien.",
 
"type": "string",
 
"aliases": [
 
"accessdate",
 
"consulté",
 
"consultée le"
 
],
 
"autovalue": "",
 
"example": "13 avril 2015"
 
},
 
"extrait": {
 
"description": "Permet de formater une citation de la publication dans la note de fin de page.",
 
"type": "string",
 
"aliases": [
 
"citation",
 
"quote"
 
]
 
},
 
"page": {
 
"description": "Un numéro, une liste ou une plage de pages. Est à associer à une citation.",
 
"type": "string",
 
"aliases": [
 
"pages",
 
"passage"
 
]
 
},
 
"id": {
 
"label": "id",
 
"description": "Identifiant unique dans la page qui inclut le modèle, permettant de créer un lien ancré vers cette référence.",
 
"type": "string"
 
},
 
"libellé": {
 
"type": "string",
 
"description": "Libellé permettant d'identifier un renvoi bibliographique."
 
},
 
"traduction titre": {
 
"label": "Traduction en français du titre",
 
"type": "string"
 
},
 
"description": {
 
"description": "Si la page web n'a pas de titre ou un titre trop vague, ce paramètre permet d'avoir une description en français de l’intérêt de cette page. Si la page à un titre cela peut permettre d'ajouter des informations importante comme un identifiant, numéro...",
 
"type": "string"
 
}
 
},
 
"maps": {
 
"citoid": {
 
"language": "langue",
 
"director": [
 
[
 
"prénom1",
 
"nom1"
 
],
 
[
 
"prénom2",
 
"nom2"
 
]
 
],
 
"podcaster": [
 
[
 
"prénom1",
 
"nom1"
 
],
 
[
 
"prénom2",
 
"nom2"
 
]
 
],
 
"author": [
 
[
 
"prénom1",
 
"nom1"
 
],
 
[
 
"prénom2",
 
"nom2"
 
]
 
],
 
"title": "titre",
 
"subject": "titre",
 
"url": "url",
 
"series": "série",
 
"websiteTitle": "site",
 
"publicationTitle": "site",
 
"blogTitle": "site",
 
"forumTitle": "site",
 
"publisher": "éditeur",
 
"studio": "éditeur",
 
"date": "date",
 
"ISBN": [
 
"isbn"
 
],
 
"ISSN": [
 
"issn"
 
],
 
"PMID": "pmid",
 
"PMCID": "pmcid",
 
"DOI": "doi",
 
"accessDate": "consulté le",
 
"pages": "page"
 
}
 
},
 
"paramOrder": [
 
"langue",
 
"format",
 
"auteur1",
 
"nom1",
 
"prénom1",
 
"lien auteur",
 
"responsabilité1",
 
"directeur1",
 
"auteur2",
 
"nom2",
 
"prénom2",
 
"lien auteur2",
 
"responsabilité2",
 
"directeur2",
 
"et al.",
 
"auteur institutionnel",
 
"coauteurs",
 
"traducteur",
 
"photographe",
 
"titre",
 
"sous-titre",
 
"traduction titre",
 
"description",
 
"url",
 
"série",
 
"site",
 
"lieu",
 
"éditeur",
 
"jour",
 
"mois",
 
"année",
 
"date",
 
"isbn",
 
"issn",
 
"oclc",
 
"pmid",
 
"pmcid",
 
"doi",
 
"jstor",
 
"bibcode",
 
"math reviews",
 
"zbl",
 
"arxiv",
 
"consulté le",
 
"extrait",
 
"page",
 
"id",
 
"libellé"
 
]
 
}
 
</templatedata>
 
{{Boîte déroulante/fin}}
 
 
 
{{Palette|Modèles bibliographiques|Conventions}}
 
 
 
<includeonly>
 
 
 
{{CLEDETRI:Lien web, Modele}}
 
[[Catégorie:Modèle créant un lien externe]]
 
[[Catégorie:Modèle pour bibliographie]]
 
[[Catégorie:Modèle de source|*]]
 
[[Catégorie:Modèle citation]]
 
[[Catégorie:Modèle de formatage]]
 
</includeonly>
 

Version actuelle datée du 7 décembre 2020 à 17:43

La documentation pour ce module peut être créée à Module:Biblio/Lien web/doc

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' )
local Langue = require( 'Module:Langue' )
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' )
local Langue = require( 'Module:Langue' )


local function formatLien( args, dead )
	-- 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()
	local modele = '[[Modèle:Lien web|{{Lien web}}]]'
	if dead then
		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.
	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', 'lien' )
	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
		if dead then
			wiki.minsert( '<span class="noarchive">' )
		end
		wiki.minsert( '[', url )
	elseif not validArg( 'pmid', 'pmcid', 'doi', 'jstor', 'bibcod', 'math reviews', 'zbl', 'zbmath', 'arxiv' ) then
		args.categ.url = true
	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 ( '%]', '&#93;' )
		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
			local color = dead and ' color:red;'
			wiki.minsert( ' « <cite style="font-style: normal;', color, '">', titre, sousTitre, '</cite> »', url and ']' )
		else
			wiki.minsert( ' ', titre, url and ']' )
		end
		
		-- traduction titre
		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
		if dead then
			wiki.minsert( ' <span style="color:red;">', description, '</span>', url and ']' )
		else
			wiki.minsert( ' ', description, url and ']' )
		end
	else
		args.categ.titre = true
		if url then 
			wiki.minsert( ' ',  url, ']' )
		end
	end
	
	-- message d'erreur
	if args.categ.url or args.categ.titre then
		local absent = { }
		if args.categ.url  then
			table.insert( absent, '« <code>url</code> »' )
		end
		if args.categ.titre then
			table.insert( absent, '« <code>titre</code> »' )
		end
		wiki.insert( 1, Outils.erreur( 'Modèle '
			.. modele ..' : paramètre' .. ( #absent > 1 and 's ' or ' ')
			.. mw.text.listToText( absent ) .. ' manquant.&ensp;'
		) )
	end

	-- liens archives pour les liens brisés
	if url and dead then
		wiki.minsert( '<sup class="plainlinks">(',
			'[http://web.archive.org/web/*/', url, ' Archive] • ',
			'[http://archive.wikiwix.com/cache/?url=', url, ' Wikiwix] • ',
			'[http://archive.is/', url, ' Archive.is] • ',
			'[https://www.google.fr/search?q=cache:', url, ' Google] • ',
			'[[Projet:Correction des liens externes#J\'ai trouvé un lien mort, que faire ?|Que faire ?]])',
			'</sup></span>'
		)
	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
		wiki.minsert( [[, sur '']], site, [['']] )
	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( ', [[', lienEditeur, '|', 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' )
		local lrm
		if Langue.nonLatin( wiki.concat() ) then
			lrm = '&lrm; '
		end
		wiki.minsert( ',', lrm, ' ', Commun.inscriptionDate( args ) )
	end
	if validArg( 'brisé le' ) then
		wiki.minsert( ', brisé le ', Commun.inscriptionDate{ date = args['brisé le'] } )
	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 et passage
	local citation = validArg( 'citation', 'extrait', 'quote' )
	if citation then
		wiki.minsert( ' : <span class="citation">« ', citation, ' »</span>' )
	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
	
	-- Ponctuation
	local patternPonct = '[,.;:!?] ?»?$'
	local ponctuation = mw.ustring.match( wiki.concat():gsub( '%b<>', '' ), patternPonct )
	if not ponctuation then
		local ponctuationFinale = validArg( 'ponctuation finale' )
		if ponctuationFinale == ';' then
			ponctuationFinale = ' ;'
		end
		wiki.minsert( ponctuationFinale )
	end
	
	if mw.title.getCurrentTitle().namespace == 0 then
		wiki.minsert(
		args.categ.langue and '[[Catégorie:Page du modèle Lien web comportant une erreur|langue]]',
		args.categ.url and '[[Catégorie:Page du modèle Lien web comportant une erreur|Url]]',
		args.categ.titre and '[[Catégorie:Page du modèle Lien web comportant une erreur|titre]]',
		args.categ.isbnInvalid and '[[Catégorie:Page avec ISBN invalide]]',
		args.categ.issnInvalid and '[[Catégorie:Page avec ISSN invalide]]',
		dead and not validArg( 'nocat' ) and '[[Catégorie:Article contenant un lien mort]]'
		)
	elseif dead and not validArg( 'nocat' ) then
		wiki.minsert( '[[Catégorie:Page contenant un lien mort]]' )
	end
	
	return wiki.concat()
end

function Lien.lienWeb( args )
	return formatLien( args, false )
end

function Lien.lienBrise( args )
	args.titre = Commun.validTextArg( args, 'titre', 'title', 'url', 'lire en ligne', 'url texte', 'lien' )
	return formatLien( args, true )
end

return Lien