Différences entre les versions de « Module:Biblio/Lien web »

Ajout des fonctionnalités du modèle:Lien brisé ; regroupement des messages d'erreur au début du modèle
(retour à la version précédente : beaucoup de liens erronés)
(Ajout des fonctionnalités du modèle:Lien brisé ; regroupement des messages d'erreur au début du modèle)
local Outils = require( 'Module:Outils' )
local TableBuilder = require( 'Module:TableBuilder' )
local Langue = require( 'Module:Langue' )
 
 
local function Lien.lienWebformatLien( 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
-- 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.
-- url
local url = validArg( 'url', 'lire en ligne', 'url texte', 'lien' )
if url then
-- remplacement des crochets et espaces par leur équivalent HTML
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
wiki.minsert( Outils.erreur( 'modèle [[Modèle:Lien web|{{Lien web}}]] : paramètre « <code>url</code> » manquant' ) )
end
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
end
elseif description then
if dead then
wiki.minsert( ' ', description, url and ']' )
wiki.minsert( ' <span style="color:red;">', description, '</span>', url and ']' )
else
wiki.minsert( ' ', description, url and ']' )
end
else
args.categ.titre = true
if args.categ.url then
wiki.minsert( Outils.erreur(' ', et paramètreurl, « <code>titre</code> » manquant' )]' )
else
wiki.minsert( ' ', args.url, '] ', Outils.erreur( 'modèle [[Modèle:Lien web|{{Lien web}}]] : paramètre « <code>titre</code> » manquant' ) )
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
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
wiki.minsert( ',&lrm; ', Commun.inscriptionDate( args ) )
if Langue.nonLatin( wiki.concat() ) then
lrm = '&lrm; '
end
wiki.minsert( ',&', lrm;, ' ', Commun.inscriptionDate( args ) )
end
if validArg( 'brisé le' ) then
wiki.minsert( ', ', Commun.inscriptionDate{ date = args['brisé le'] } )
end
wiki.minsert( spanFinal )
-- citation et passage
local citation = validArg( 'citation', 'extrait', 'quote' )
if citation then
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.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.issnInvalidisbnInvalid and '[[Catégorie:Page avec ISSNISBN 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
end
 
function Lien.lienWeb( args )
return formatLien( args, false )
end
 
function Lien.lienBrise( args )
return formatLien( args, true )
end
 
return Lien
0

modification