Aller au contenu

Module:Lien interwiki

Cette page fait l’objet d’une mesure de semi-protection étendue.
Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 22 juin 2021 à 08:18 et modifiée en dernier par Od1n (discuter | contributions) (conversion en Lua de {{lien}}, pour à terme pouvoir utiliser des paramètres dynamiques (« |en=… »), et aussi avoir un code plus simple, plus fiable, plus performant…). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

 Documentation[voir] [modifier] [historique] [purger]

Ce module est utilisé par le modèle {{Lien}}.

Utilisation

Fonctions exportables :

  • main(frame) – pour le modèle {{Lien}}.

Modules externes et autres éléments dont ce module a besoin pour fonctionner :

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 interwiki then
			target = ':' .. interwiki .. ':' .. target
		end
		if text then
			return '[[' .. target .. '|' .. tostring( 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 = 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']   = '[[: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 result = lien( nil, cible_fr, args[ 'texte' ] )

	if ( mw.title.new( cible_fr ) or {} ).exists then
		if categorise then
			result = result .. frame:expandTemplate{ title = 'Lien/témoin', args = { cible_fr } }
		end

		return result
	else
		local lang = args[ 'langue' ] or args[ 'lang' ] or 'en'

		if lang == 'd' then
			local span = mw.html.create( 'span' )
				:attr( 'class', 'indicateur-langue' )
				:attr( 'title', 'Équivalent de l’article « ' .. cible_fr .. ' » sur Wikidata' )
				:wikitext( '(d)' )

			result = result .. ' ' .. lien( 'd', cible_trad, span )
		else
			local nomLangue = require( 'Module:Langue' ).nomLangue( lang )

			if nomLangue:find( 'class="error"' ) then
				local span = mw.html.create( 'span' )
					:attr( 'class', 'indicateur-langue' )
					:attr( 'title', 'Équivalent de l’article « ' .. cible_fr .. ' » dans une autre langue' )
					:wikitext( '(' .. lang .. ')' )

				result = result .. ' ' .. lien( lang, cible_trad, span )
					.. '<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
				local span = mw.html.create( 'span' )
					:attr( 'class', 'indicateur-langue' )
					:attr( 'title', 'Équivalent de l’article «&nbsp;' .. cible_fr .. '&nbsp;» en ' .. nomLangue )
					:wikitext( '(' .. lang .. ')' )

				result = result .. '&nbsp;' .. lien( lang, cible_trad, span )
			end
		end

		if categorise then
			result = result .. frame:expandTemplate{ title = 'Lien/catégorisation', args = { lang } }
		end

		return result
	end
end

return p