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 30 juin 2021 à 16:59 et modifiée en dernier par Od1n (discuter | contributions) (pour test version Lua de {{lien'}} ; ça sera forcément moins rapide mais je veux savoir dans quelle mesure, parce qu'il serait quand même appréciable d'avoir ce modèle en code Lua). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
(diff) ← Version précédente | Voir la 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 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 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