imported>Jacques Ducloy |
imported>Jacques Ducloy |
Ligne 1 : |
Ligne 1 : |
− | local Lien = { }
| + | <includeonly><no</includeonly><includeonly>include>{{documentation modèle vue directement}}</no</includeonly><includeonly>include> |
| | | |
− | local Commun = require( 'Module:Biblio/Commun' )
| + | ==Utilisation== |
− | local References = require( 'Module:Biblio/Références' )
| + | : Description du rôle de ce modèle à compléter. |
− | local Outils = require( 'Module:Outils' )
| |
− | local TableBuilder = require( 'Module:TableBuilder' )
| |
− | local Langue = require( 'Module:Langue' )
| |
− | local Lien = { }
| |
| | | |
− | local Commun = require( 'Module:Biblio/Commun' )
| + | ==Syntaxe== |
− | local References = require( 'Module:Biblio/Références' )
| + | * <code><nowiki>{{</nowiki>{{sub</includeonly><includeonly>st:BASEPAGENAME}}<nowiki>|paramètre1|nom1param=valeur1}}</nowiki></code> |
− | local Outils = require( 'Module:Outils' )
| |
− | local TableBuilder = require( 'Module:TableBuilder' )
| |
− | local Langue = require( 'Module:Langue' )
| |
| | | |
| + | ==Paramètres== |
| + | * '''1''' = ''paramètre1'' – description (obligatoire/optionnel, par défaut ''valeur'') |
| + | * '''nom1param''' = ''valeur1'' – description (obligatoire/optionnel, par défaut ''valeur'') |
| | | |
− | local function formatLien( args, dead )
| + | ==Exemple== |
− | -- La table wiki va recevoir tout les petits bouts de texte, et sera concaténée à la fin.
| + | * <code><nowiki>{{</nowiki>{{sub</includeonly><includeonly>st:BASEPAGENAME}}<nowiki>|paramètre1|nom1param=valeur1}}</nowiki></code> |
− | -- Elle utilise la meta-table de TableBuilder, permettant d'utiliser les fonctions de la
| + | {{{{sub</includeonly><includeonly>st:BASEPAGENAME}}|paramètre1|nom1param=valeur1}} |
− | -- 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 ( '%]', ']' )
| |
− | 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. '
| |
− | ) )
| |
− | end
| |
| | | |
− | -- liens archives pour les liens brisés
| + | <include</includeonly><includeonly>only> |
− | if url and dead then
| + | <!-- Catégories pour le [[Modèle:{{sub</includeonly><includeonly>st:BASEPAGENAME}}]]--> |
− | wiki.minsert( '<sup class="plainlinks">(',
| + | {{DEFAULTSORT:{{sub</includeonly><includeonly>st:BASEPAGENAME}}}}<!-- à remplacer si le nom du modèle a des accents --> |
− | '[http://web.archive.org/web/*/', url, ' Archive] • ',
| + | [[Catégorie:Espace Modèle<!-- RECHERCHEZ UNE SOUS-CATEGORIE APPROPRIÉE -->]] |
− | '[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 = '‎ '
| |
− | 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 )
| + | <!-- Interwikis pour le [[Modèle:{{sub</includeonly><includeonly>st:BASEPAGENAME}}]]--> |
− | return formatLien( args, false )
| + | [[en:Template:{{sub</includeonly><includeonly>st:BASEPAGENAME}}]] |
− | end
| |
| | | |
− | function Lien.lienBrise( args )
| + | </include</includeonly><includeonly>only></includeonly> |
− | args.titre = Commun.validTextArg( args, 'titre', 'title', 'url', 'lire en ligne', 'url texte', 'lien' )
| |
− | return formatLien( args, true )
| |
− | end
| |
− | | |
− | return Lien
| |