Moduulin Fr:Biblio/Lien web käyttöohje
Tämä sivu on kopio. Tätä ohjetta muokataan muokkaamalla suomenkielisessä Wikipediassa olevaa alkuperäistä versiota jonka muutokset kopioituvat automaattisesti tälle sivulle. Tämä moduuli on osa ranskankielisestä Wikipediasta kopioitua Wikidata ja Interface Wikidata -moduulikokonaisuutta (ks. ohjeet ja esimerkit). Listauksen kaikista tähän liittyvistä moduuleista löydät Ranskankielisen Wikipedian Wikidata-moduulit -sivulta.
|
local Lien = { }
local Commun = require( 'Module:Fr:Biblio/Commun' )
local References = require( 'Module:Fr:Biblio/Références' )
local Outils = require( 'Module:Fr:Outils' )
local TableBuilder = require( 'Module:Fr:TableBuilder' )
local Langue = require( 'Module:Fr: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 = ']'
if dead then
modele = ']'
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 = {}
if validArg( 'dead-url', 'deadurl', 'brisé le' ) then
dead = true
end
-- 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' )
local archiveUrl = validArg( 'archive-url', 'archiveurl' )
if url then
-- remplacement des crochets et espaces par leur équivalent HTML
url = string.gsub( string.gsub( string.gsub( url, ' ', '%%20' ), '%', '%%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 or archiveUrl 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 ( '%]', ']' )
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
sousTitre:gsub( ' ?»$', '' )
else
titre:gsub( ' ?»$', '' )
end
local color = dead and not archiveUrl 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( ' ' )
end
if description then
wiki.minsert( ', ', description )
end
elseif description then
if dead and not archiveUrl 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. '
) )
end
-- liens archives pour les liens brisés
if url and dead and not archiveUrl then
wiki.minsert( '<sup class="plainlinks">(',
' • ',
' • ',
' • ',
' • ',
'])',
'</sup></span>'
)
elseif archiveUrl then
if not ( string.match( archiveUrl, '^http' ) or string.match( archiveUrl, '^//' ) ) then
archiveUrl = 'http://' .. archiveUrl
end
local textArchive = ' archive'
local dateArchive = validArg( 'archive-date', 'archivedate' )
if dateArchive then
dateArchive = Commun.inscriptionDate{ date = dateArchive }
textArchive = ' archive du '
end
wiki.minsert( ' <small class="plainlinks cachelinks">]</small>' )
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( ], 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( ', ]' )
else
wiki.minsert( ', ', editeur )
end
end
-- date
if validArg( 'année', 'date', 'year', 'en ligne le', 'en ligne' ) then
args.categ.enLigneLe = validArg( 'date' ) and validArg( 'en ligne le' ) and args.date ~= args
args.date = validArg( 'date', 'en ligne le', 'en ligne' )
local lrm
if Langue.nonLatin( wiki.concat() ) then
lrm = '‎ '
end
wiki.minsert( ',', lrm, ' ', 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 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, '^' ) 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 ']',
args.categ.url and ']',
args.categ.titre and ']',
args.categ.enLigneLe and ']',
args.categ.isbnInvalid and ']',
args.categ.issnInvalid and ']',
dead and not validArg( 'nocat' ) and ']'
)
elseif dead and not validArg( 'nocat' ) then
wiki.minsert( ']' )
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