Aller au contenu

Module:Lien interwiki/Bac à sable

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 7 février 2023 à 22:40 et modifiée en dernier par Od1n (discuter | contributions) (ah ah je vois, c'est ça qui a dû être oublié lors de la tentative précédente de renommage (j'ai failli me faire avoir aussi)). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 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 :

-- http://lua-users.org/wiki/StringTrim
local function trim( s )
	return s:match( '^()%s*$' ) and '' or s:match( '^%s*(.*%S)' )
end

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 = 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 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( '"', '&quot;' ) .. '">(' .. lang .. ')</span>'
	end

	local result = lien( nil, cible_fr, args[ 'texte' ] )

	if mode_rapide then
		result = result .. '&nbsp;' .. 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 .. '&nbsp;' .. 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 .. '&nbsp;' .. 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 .. '&nbsp;' .. 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