Module:Lien interwiki/Bac à sable
Apparence
[voir] [modifier] [historique] [purger]
Ce module est utilisé par le modèle {{Lien}}.
Utilisation
[modifier le code]Fonctions exportables :
main(frame)
– pour le modèle {{Lien}}.
Modules externes et autres éléments dont ce module a besoin pour fonctionner :
Module:Langue
– chargé pour déterminer le nom de la langue à partir de son code.Module:Lien interwiki/data catégorisation
– catégories ajoutées en fonction du code de langue.
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (modifier).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
local mwTrim = mw.text.trim
local p = {}
function p.main( frame )
local function lien( interwiki, target, text )
if target:sub( 1, 1 ) == ':' then
target = target:sub( 2 )
end
if interwiki then
target = interwiki .. ':' .. target
end
if text then
return '[[:' .. target .. '|' .. text .. ']]'
else
return '[[:' .. target .. ']]'
end
end
local parentArgs = frame:getParent().args
-- effectue un trim sur les paramètres non nommés,
-- et exclut les paramètres dont la valeur est vide
local args = {}
for k, v in pairs( parentArgs ) do
if type( k ) == 'number' then
v = mwTrim( v )
end
if v ~= '' then
args[ k ] = v
end
end
local cible_fr = args[ 'fr' ] or args[ 1 ] or args[ 'trad' ]
local cible_trad = args[ 'trad' ] or args[ 'fr' ] or args[ 1 ]
local lang = args[ 'langue' ] or args[ 'lang' ] or 'en'
local categorise = ( args[ 'nocat' ] ~= 'oui' )
local mode_rapide = ( frame.args[ 'mode rapide' ] == 'oui' ) -- modèle {{lien'}}
if not cible_fr then
return frame:expandTemplate{ title = 'Fix', args = {
[1] = '[[' .. ( args[ 'texte' ] and '|' .. args[ 'texte' ] or '' ) .. ']]',
['message'] = '[[:Catégorie:Page contenant un appel à traduction d\'un article non spécifié|[modèle à corriger]]]',
['infobulle'] = 'Cet appel à traduction est à corriger car aucun titre de page n\'est spécifié.',
['catégorie'] = ( categorise and 'Page contenant un appel à traduction d\'un article non spécifié' or nil )
} }
end
local function makeSpan( libelle )
local title = 'Équivalent de l’article « ' .. cible_fr .. ' » ' .. libelle
return '<span class="indicateur-langue" title="' .. title:gsub( '"', '"' ) .. '">(' .. lang .. ')</span>'
end
local result = lien( nil, cible_fr, args[ 'texte' ] )
if mode_rapide then
result = result .. ' ' .. lien( lang, cible_trad, makeSpan( 'dans une autre langue' ) )
return result
end
if ( mw.title.new( cible_fr ) or {} ).exists then
if categorise then
result = result .. p._temoin( cible_fr )
end
return result
else
if lang == 'd' then
result = result .. ' ' .. lien( 'd', cible_trad, makeSpan( 'sur Wikidata' ) )
else
local nomLangue = require( 'Module:Langue' ).nomLangue( lang )
if nomLangue:find( 'class="error"', nil, true ) then
result = result .. ' ' .. lien( lang, cible_trad, makeSpan( 'dans une autre langue' ) )
.. '<span class="error">Erreur : langue non reconnue par le modèle Lien : « ' .. lang .. ' ».</span>'
if categorise then
result = result .. '[[Catégorie:Article contenant un appel à traduction avec un code langue inconnu|+]]'
end
else
result = result .. ' ' .. lien( lang, cible_trad, makeSpan( 'en ' .. nomLangue ) )
end
end
if categorise then
result = result .. p._categorisation( lang )
end
return result
end
end
function p.temoin( frame )
return p._temoin( frame.args[ 'cible_fr' ] )
end
function p._temoin( cible_fr )
local result = ''
local ns = mw.title.getCurrentTitle().namespace
if ns == 0 or ns == 100 or ns == 104 then
result = result .. '[[Catégorie:Page utilisant Lien pour un article existant]]'
elseif ns == 10 then
result = result .. '[[Catégorie:Page utilisant Lien pour un article existant|*]]'
elseif ns == 1 or ns == 4 or ns == 102 then
result = result .. '[[Catégorie:Page de discussion utilisant Lien pour un article existant]]'
end
result = result .. '<span class="ExistingLink" style="display:none">' .. cible_fr .. '</span>'
return result
end
function p.categorisation( frame )
return p._categorisation( frame.args[ 'lang' ] )
end
function p._categorisation( lang )
local ns = mw.title.getCurrentTitle().namespace
if ns == 0 or ns == 10 then
local data = mw.loadData( 'Module:Lien interwiki/data catégorisation' )
return ( data[ lang ] or '[[Catégorie:Article contenant un appel à traduction avec un code langue inconnu|' .. lang .. ']]' )
else
return ''
end
end
return p