« Module:Biblio/Lien web » : différence entre les versions
Ajout libellé, comme sur Ouvrage et Article |
Commentaires. Corr. Périodique sans "sur", on dit dans un journal. |
||
Ligne 8 : | Ligne 8 : | ||
function Lien.lienWeb( args ) | function Lien.lienWeb( args ) | ||
-- La table wiki va recevoir tout les petits bouts de texte, et sera | -- 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 | -- 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 | -- library table comme des méthodes. minsert permet d'insérer plusieurs éléments en une | ||
-- seule fois en, ignorant les paramètre nil. | -- seule fois en, ignorant les paramètre nil. | ||
local wiki = TableBuilder.new() | local wiki = TableBuilder.new() | ||
-- validArg | -- 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 Outils.validTextArg( args, ... ) end | local validArg = function ( ... ) return Outils.validTextArg( args, ... ) end | ||
--Variables servant à la catégorisation | -- Variables servant à la catégorisation | ||
local categUrl, categTitre, categLangue, categWork | local categUrl, categTitre, categLangue, categWork | ||
Ligne 54 : | Ligne 54 : | ||
local url = validArg( 'url', 'lire en ligne', 'url texte' ) | local url = validArg( 'url', 'lire en ligne', 'url texte' ) | ||
if url then | if url then | ||
-- remplacement des crochets par leur équivalent | -- remplacement des crochets par leur équivalent HTML | ||
url = string.gsub ( string.gsub ( url, '%[', '%%5B' ), '%]', '%%5D' ) | url = string.gsub ( string.gsub ( url, '%[', '%%5B' ), '%]', '%%5D' ) | ||
-- ajout http:// si nécessaire : | -- ajout http:// si nécessaire : | ||
Ligne 69 : | Ligne 69 : | ||
local titre = validArg( 'titre', 'title' ) | local titre = validArg( 'titre', 'title' ) | ||
if titre then | if titre then | ||
-- suppression des retours ligne | -- suppression des retours ligne éventuels, sinon MediaWiki ne reconnaît pas le lien externe | ||
titre = mw.ustring.gsub( titre, '\n', ' ' ) | titre = mw.ustring.gsub( titre, '\n', ' ' ) | ||
titre = titre:match'^%s*(.*%S)' or ''; | titre = titre:match'^%s*(.*%S)' or ''; | ||
local c = titre:sub(1,1) | local c = titre:sub(1,1) | ||
-- on teste d' | -- on teste d'abord si titre contient déjà des guillemets | ||
if(string.byte(c) ~= 194) then | if(string.byte(c) ~= 194) then | ||
wiki.minsert( ' « <cite style="font-style: normal">', titre, '</cite> »]' ) | wiki.minsert( ' « <cite style="font-style: normal">', titre, '</cite> »]' ) | ||
Ligne 95 : | Ligne 95 : | ||
if serie then | if serie then | ||
wiki.minsert( [[, '']], serie, [['']] ) | wiki.minsert( [[, '']], serie, [['']] ) | ||
categWork = validArg( 'work' ) -- il y a | categWork = validArg( 'work' ) -- il y a ambiguïté sur l'utilisation de ce paramètre | ||
end | end | ||
local site = validArg( 'site | local site = validArg( 'site', 'website' ) | ||
if site then | if site then | ||
wiki.minsert( [[, sur '']], site, [['']] ) | wiki.minsert( [[, sur '']], site, [['']] ) | ||
end | |||
local periodique = validArg( 'périodique' ) | |||
if periodique then | |||
wiki.minsert( ', ', periodique ) | |||
end | end | ||
local editeur = validArg( 'éditeur', 'publisher', 'editeur' ) | local editeur = validArg( 'éditeur', 'publisher', 'editeur' ) | ||
Ligne 113 : | Ligne 117 : | ||
-- la partie suivante se trouve entre | -- la partie suivante se trouve entre parenthèses, et en plus petit, sauf en note | ||
if validArg( 'consulté le', 'page', 'accessdate', 'Consulté le', 'consulté', 'isbn', 'ISBN', 'issn', 'consultée le' ) then | if validArg( 'consulté le', 'page', 'accessdate', 'Consulté le', 'consulté', 'isbn', 'ISBN', 'issn', 'consultée le' ) then | ||
local precisions = TableBuilder.new( ) | local precisions = TableBuilder.new( ) |
Version du 28 avril 2014 à 00:20
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' )
function Lien.lienWeb( args )
-- 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 paramètre nil.
local wiki = TableBuilder.new()
-- 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 Outils.validTextArg( args, ... ) end
-- Variables servant à la catégorisation local categUrl, categTitre, categLangue, categWork
-- Span initial, id wiki.minsert( Commun.spanInitial ( args, validArg ) ) local libelle = validArg( 'libellé' ) if libelle then wiki.minsert( '[', libelle, '] ' ) end
-- indication de langue local indicLangue, codeLangue, categLangue = Commun.indicationDeLangue ( args, validArg ) if Outils.notEmpty( indicLangue ) then wiki.minsert( indicLangue, ' ' ) end
-- auteur et coauteurs local auteur = validArg( 'auteur', 'author', 'nom', 'nom1', 'last', 'auteurs', 'Auteur' ) if auteur then local lienAuteur = validArg( 'lien auteur' ) local prenom = validArg( 'prénom', 'prénom1', 'first' ) prenom = prenom and ( prenom .. ' ' ) if lienAuteur and string.sub( auteur, 1, 2 ) ~= '[[' then wiki.minsert( '', prenom, auteur, ', ' ) else wiki.minsert( prenom, auteur, ', ' ) end end local coauteur = validArg( 'coauteurs', 'coauteur', 'coauthors' ) if coauteur then wiki.minsert( coauteur, ', ' ) end
-- url
local url = validArg( 'url', 'lire en ligne', 'url texte' )
if url then
-- remplacement des crochets par leur équivalent HTML
url = string.gsub ( string.gsub ( url, '%[', '%%5B' ), '%]', '%%5D' )
-- ajout http:// si nécessaire :
if not ( string.match( url, '^http' ) or string.match( url, '^//' ) ) then
url = 'http://' .. url
end
wiki.minsert( '[', url )
else
categUrl = true
wiki.minsert( Outils.erreur( 'modèle [[Modèle:Lien web|modèle {{Lien web}} : paramètre « url
» manquantet paramètre « titre
» manquant]] : paramètre « url
» manquant' ) )
end
-- titre
local titre = validArg( 'titre', 'title' )
if titre then
-- suppression des retours ligne éventuels, sinon MediaWiki ne reconnaît pas le lien externe
titre = mw.ustring.gsub( titre, '\n', ' ' )
titre = titre:match'^%s*(.*%S)' or ;
local c = titre:sub(1,1)
-- on teste d'abord si titre contient déjà des guillemets
if(string.byte(c) ~= 194) then
wiki.minsert( ' « ', titre, ' »]' )
else
wiki.minsert( ' ', titre, ']' )
end
else
categTitre = true
if categUrl then
wiki.minsert( Outils.erreur( ' et paramètre « titre
» manquant' ) )
else
wiki.minsert( ' ', args.url, '] ', Outils.erreur( 'modèle [[Modèle:Lien web|modèle {{Lien web}} : paramètre « url
» manquantet paramètre « titre
» manquant]] : paramètre « titre
» manquant' ) )
end
end
-- format wiki.minsert( References.indicationDeFormat( args.format ) )
-- série, site, éditeur local serie = validArg( 'série', 'work' ) if serie then wiki.minsert( , '', serie, '' ) categWork = 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 editeur = validArg( 'éditeur', 'publisher', 'editeur' ) if editeur then wiki.minsert( ', ', editeur ) end
-- date if validArg( 'année', 'date', 'year', 'en ligne le', 'en ligne' ) then args.date = validArg( 'date', 'en ligne le', 'en ligne' ) wiki.minsert( ', ', Commun.inscriptionDate( args ) ) end
-- la partie suivante se trouve entre parenthèses, et en plus petit, sauf en note
if validArg( 'consulté le', 'page', 'accessdate', 'Consulté le', 'consulté', 'isbn', 'ISBN', 'issn', 'consultée le' ) then
local precisions = TableBuilder.new( )
-- isbn et issn precisions.minsert( References.isbn( args, validArg ), References.issn( args, validArg ) )
-- consulté le local consult = validArg( 'consulté le', 'accessdate', 'Consulté le', 'consulté', 'consultée le' ) local consuteLe = if consult then if string.sub( consult, -1,-1) == '.' then consult = string.sub( consult, 1, -2) end if (string.match(consult, '^.* .* .*')) then consulteLe = 'consulté le ' else consulteLe = 'consulté en ' end precisions.minsert( consulteLe .. Outils.nobr( consult ) ) end
wiki.minsert( ' ', mw.text.nowiki( '(' ), precisions.concat( ', ' ), ')' ) end
-- fin du span wiki.minsert( '' )
-- citation local citation = validArg( 'citation', 'extrait', 'quote' ) if citation then wiki.minsert( ' : « ', citation, ' »' ) end local page = validArg( 'page', 'pages', 'passage' ) if page then wiki.minsert( ', ', Commun.page, page ) end
if mw.title.getCurrentTitle().namespace == 0 then wiki.minsert( categLangue and , categUrl and , categTitre and ) end
return wiki.concat() end
return Lien