Module:Lien interlangue
From CryptoWiki
Revision as of 03:52, 30 December 2021 by wiki_crypto>Od1n (plus verbeux, mais permet de bien montrer que le code gère aussi le cas où le titre fourni n'est pas un titre valide)
Documentation for this module may be created at Module:Lien interlangue/doc
local p = {} function p.main( frame ) -- http://lua-users.org/wiki/StringTrim local function trim( s ) return s:match( '^()%s*$' ) and '' or s:match( '^%s*(.*%S)' ) end 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 validArgs = { fr = true, [1] = true, lang = true, langue = true, trad = true, texte = true, nocat = true, } local parentArgs = frame:getParent().args local hasInvalidArgs = false local args = {} for k, v in pairs( parentArgs ) do -- détecte la présence de paramètres non reconnus if not validArgs[ k ] then hasInvalidArgs = true end -- effectue un trim sur les paramètres non nommés, -- et exclut les paramètres dont la valeur est vide if type( k ) == 'number' then v = trim( 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 categorise = ( args[ 'nocat' ] ~= 'oui' ) if not cible_fr then return frame:expandTemplate{ title = 'Fix', args = { [1] = '[[' .. ( args[ 'texte' ] and '|' .. args[ 'texte' ] or '' ) .. ']]', ['message'] = 'modèle à corriger', ['message_lien'] = 'Catégorie:Page contenant un appel à traduction d\'un article non spécifié', ['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 result = lien( nil, cible_fr, args[ 'texte' ] ) local pageExiste local objetPage = mw.title.new( cible_fr ) if objetPage then -- pcall permettant de masquer les erreurs « too many expensive function calls » local success = pcall( function () pageExiste = objetPage.exists end ) if not success then pageExiste = false end else pageExiste = false -- titre de page invalide end if pageExiste then if categorise then result = result .. p._temoin( cible_fr ) end return result else local lang = args[ 'langue' ] or args[ 'lang' ] or 'en' local function makeSpan( libelle ) local title = 'Article ' .. libelle .. '\194\160: «\194\160' .. cible_trad .. '\194\160»' return '<span class="indicateur-langue" title="' .. title:gsub( '"', '"' ) .. '">(' .. lang .. ')</span>' end if lang == 'd' then result = result .. ' ' .. lien( 'd', cible_trad, makeSpan( 'sur Wikidata' ) ) else local langs = { de = 'allemand', en = 'anglais', es = 'espagnol', it = 'italien', ja = 'japonais', pl = 'polonais', pt = 'portugais', ru = 'russe', zh = 'chinois', } local nomLangue = langs[ lang ] if not nomLangue then nomLangue = require( 'Module:Langue' ).nomLangue( lang ) if nomLangue:find( 'class="error"', nil, true ) then nomLangue = nil end end if nomLangue then result = result .. ' ' .. lien( lang, cible_trad, makeSpan( 'en ' .. nomLangue ) ) else 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 end end if categorise then result = result .. p._categorisation( lang ) end if hasInvalidArgs then result = result .. '[[Catégorie:Modèle Lien avec un paramètre inconnu]]' end return result end end function p._temoin( cible_fr ) local categorie local ns = mw.title.getCurrentTitle().namespace -- (principal), Portail, Référence if ns == 0 or ns == 100 or ns == 104 then categorie = '[[Catégorie:Page utilisant Lien pour un article existant]]' -- Modèle elseif ns == 10 then categorie = '[[Catégorie:Page utilisant Lien pour un article existant|*]]' -- Discussion, Wikipédia, Projet elseif ns == 1 or ns == 4 or ns == 102 then categorie = '[[Catégorie:Page de discussion utilisant Lien pour un article existant]]' else categorie = '' end return categorie .. '<span class="ExistingLink" style="display:none">' .. cible_fr .. '</span>' end function p._categorisation( lang ) local ns = mw.title.getCurrentTitle().namespace -- (principal), Modèle if ns == 0 or ns == 10 then local data = mw.loadData( 'Module:Lien interlangue/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