Aller au contenu

Module:Biblio/Comon

De Vouiquipèdia, l’enciclopèdia abada.

La documentation pour ce module peut être créée à Module:Biblio/Comon/doc

-- Les fonccions du modulo Biblio/Comon sont de piéces nècèssères u modulos Biblio/Ôvra, Biblio/Articllo, Biblio/Lim Vouèbe.

local Comon = {}


local Data = require( 'Module:Dâta' )
local Outils = require( 'Module:Outils' )
local Lengoua -- = require( 'Module:Lengoua' ) serat chargiê ren que se nècèssèro
local Lengouadata -- = mw.loadData( 'Module:Lengoua/Data' ) serat chargiê ren que se nècèssèro


--[=[
	En francês : Trouve le premier lien interwiki '[[lien|texte]]' de str et retourne : texte, lien
	Si le lien est '[[texte]]', retourne : texte, texte.
	Si str ne contient pas de lien interwiki, retourne : str (et nil)
	Les fichiers et images ne sont pas considérés comme des liens.
	Si str n'est pas une chaine, retourne : nil
]=]
local function textoLim( str )
	if type( str ) == 'string' then
		for lim, texto in string.gmatch( str, '%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' ) do
			texto = ( texto ~= '' and texto ) or lim or str
			if not lim then
				return str
			end
			local testlim = string.lower( lim )
			local fichier = string.match( testlim, '^fichiér:' ) 
				or  string.match( testlim, '^émâge:' )
				or  string.match( testlim, '^file:' )
			if not fichier then 
				return texto, lim
			end
		end
		return str
	end
end


-- En francês : Copie de Outils.validTextArg sans trim, pour performances avec les paramètres nommés ?
-- refs [[Spécial:Diff/105796198]]
function Comon.validTextArg( args, name, ... )
	local texto = args[name]
	if type( texto ) == 'string' and texto ~= '' and texto:match( '%S' ) then
		return texto
	elseif #{ ... } > 0 then
		return Comon.validTextArg( args, ... )
	end
end


--[[
	En francês : Génère une abréviation discrète
	paramètres : 
		1 = abréviation,
		2 = texte,
		nbsp = '-' pour une espace insécable avant l'abréviation, '+' pour l'avoir après.
]]
local function abr( args )
	return ( args.nbsp == '-' and ' ' or '' )
		.. '<abbr class="abbr" title="' .. args[2] .. '">'
		.. args[1]
		.. '</abbr>'
		.. ( args.nbsp == '+' and '&nbsp;' or '' )
end


-- Abrèviacions utiles
Comon.chap =   abr{ 'chap.', 'chapitro(s)', nbsp='+' }
Comon.col =   abr{ 'col.', 'colèccion', nbsp='+' }
Comon.ed =     abr{ 'èd.', 'èdicion', nbsp='-' }
Comon.nbp =    abr{ 'p.', 'pâges', nbsp='-' }
Comon.numero = abr{ 'n<sup>o</sup>', 'numerô', nbsp='+' }
Comon.numeros = abr{ 'n<sup>os</sup>', 'numerôs', nbsp='+' }
Comon.page =   abr{ 'p.', 'pâge(s)', nbsp='+' }
Comon.ploma = '<span class=nowrap title="Ôvra empleyêe por la rèdaccion de l’articllo">\194\160[[Fichier:Icon_flatdesign_plume.svg|20px|link=|alt=Ôvra empleyêe por la rèdaccion de l’articllo]]</span>'
Comon.premiere = abr{ '1<sup>ére</sup>', 'premiére' }
Comon.rempr = abr{ 'rempr.', 'remprèssion', nbsp='+' }
Comon.levro = abr{ 'l.', 'lévro', nbsp='+' }
Comon.vol = abr{ 'vol.', 'volumo', nbsp='+' }


function Comon.detalyEdicion( ref )
	return '<small>&#91;[[' .. ref .. '|dètaly de l’èdicion]]&#93;</small>'
end

function Comon.detalyEdicions( ref )
	return '<small>&#91;[[' .. ref .. '|dètaly de les èdicions]]&#93;</small>'
end


-- montre lo tèxto en grant nombro romen.
function Comon.romen( texto )
    local a = '<span class="romen" style="text-transform:uppercase">'
    local b = '</span>'
    return a, texto, b
end

function Comon.fusionTextoLim( texto, lim, categ )
	local categorisacion, result
	local messajo = '<sup style="color:red;">[lo lim de defôr est étâ enlevâ]</sup>'
	if lim and lim ~= '' then
		if texto:match( '%[%[' ) then
			result = Comon.fusionTextoLim( texto, nil, categ )
		elseif lim:match( '^http' ) or lim:match( '//' ) then
			lim = false
			categorisacion = true
			result = texto .. messajo
		else
			result = string.format( '[[%s|%s]]', lim, texto )
		end
	else
		--[=[ if texto:match( '//' ) then
			result = texto:gsub( '%[https?://[^%[%] ]* *([^%]]+)%]', '%1' )
								:gsub( '%[//[^%[%] ]* *([^%]]+)%]', '%1' )
			if result ~= texto then
				result = result .. messajo
				categorisacion = true
			end
		end ]=] -- dèsactivâ por lo moment (pôt étre activâ se yon est prèst a corregiér les fôtes)
	end
	if categorisacion and type( categ ) == 'table' then
		categ.limDeDefor = true
	end
	return result or texto
end

-- vêre Modèlo:Modulo biblio/span initial
function Comon.spanInitial( args, validArg )
	local validArg = function ( ... ) return Comon.validTextArg( args, ... ) or false end
	local id, id2 = validArg( 'id' )

	if id then
		id = ' id="' .. id .. '"'
	else
		local nom = validArg( 'nom1', 'nom', 'last1', 'last', 'author' )
		local petiotnom = validArg( 'petiôt nom1', 'petiôt nom', 'firt1', 'first' )
		local postnom = validArg('postnom1', 'postnom' )
		local otor_i = validArg( 'ôtor1', 'author1', 'ôtor' )
		local i = 1
		local idTab, id2Tab = { }, { }
		
		while nom or otor_i do
			if otor_i and not nom then
				-- èprôva de sèparacion de l’ôtor en petiôt nom nom. 
				-- Encârte lo rèsultat dedens args por los COinS.
				otor_i = textoLim( otor_i )
				if otor_i == '' then
					break
				end
				local a1, a2, a3 = string.match( otor_i, '^([^ ]+) ?([^ ]*) ?(.*)$' )
				if Outils.notEmpty( a3 ) then
					local a2len = mw.ustring.len( a2 )
					if a2len == 1 or ( a2len == 2 and mw.ustring.sub( a2, -1 ) == "." ) then
						-- a1 est lo petiôt nom, a2 un’iniciâla et a3 lo nom
						nom = a3
						if i == 1 then
							args.nom = a3
							args['petiôt nom'] = a1 .. ' ' .. a2
						end
					else
						-- a2 pôt étre lo second petiôt nom ou ben lo comencement du nom
						nom = a2 .. ' ' .. a3
					end
				elseif Outils.notEmpty( a2 ) then
					-- a1 petiôt nom, a2 nom
					nom = a2
					if i == 1 then
						args.nom = a2
						args['petiôt nom'] = a1
					end
				else
					nom = a1
				end
			end
			if not otor_i then
				if petiotnom and postnom then
					otor_i = petiotnom .. ' ' .. nom .. ' ' .. postnom
				elseif petiotnom then
					otor_i = petiotnom .. ' ' .. nom
				elseif postnom then
					otor_i = nom .. ' ' .. postnom
				else
					otor_i = nom
				end
			end
			table.insert( idTab, mw.uri.anchorEncode( nom ) )
			table.insert( id2Tab, mw.uri.anchorEncode( otor_i ) )
			
			if i == 4 then
				break
			end
			i = i + 1
			nom = validArg( 'nom' .. i, 'last' .. i )
			petiotnom = validArg( 'petiôt nom' .. i, 'first' .. i )
			postnom = validArg( 'postnom' .. i)
			otor_i = validArg( 'ôtor' .. i, 'author' .. i )
		end
		
		if #idTab < 4 and validArg( 'ôtor enstitucionâl' ) then
			table.insert( idTab, mw.uri.anchorEncode( validArg( 'ôtor enstitucionâl' ) ) )
			table.insert( id2Tab, idTab[#idTab] )
		end
		
		local an = validArg( 'an', 'year', 'date' )
		if an then
			local t, d = Data.separacionJornMesAn( an )
			if t and d.an and an ~= d.an then
				an = tostring( d.an )
				args['an'] = an
				if d.mes then
					args.mes = validArg( 'mês' ) or tostring( d.mes )
				end
				if d.jorn then
					args.jorn = validArg( 'jorn' ) or tostring( d.jorn )
				end
			elseif mw.ustring.find( an, "%a" ) and an:find( "%f[%d]%d%d%d%d%f[%D][a-h]?" ) then
				-- lo [a-h]? finâl est dèstinâ a accèptar les lètres apondues quand y at un mouél d’ôvres d’un mém’ôtor lo mém’an (cf. [[:en:Template:Harvard citation no brackets#More than one work in a year]])
				an = an:match( "%f[%d]%d%d%d%d%f[%D][a-h]?" )
			end
			an = mw.uri.anchorEncode( tostring( an ) )
			table.insert( idTab, an )
			table.insert( id2Tab, an )
		end

		if #idTab > 0 then
			id = ' id="' .. table.concat( idTab ) .. '"'
			id2 = ' id="' .. table.concat( id2Tab ) .. '"'
			if id2 == id then
				id2 = false
			end
		else
			id = ''
		end
	end

	local spaninitial, spanfinal
	if id2 then
		spaninitial = '<span class="ovra"' .. id .. '><span class="ovra"' .. id2 .. '>'
		spanfinal = '</span></span>'
	else
		spaninitial = '<span class="ovra"' .. id .. '>'
		spanfinal = '</span>'
	end
	return spaninitial, spanfinal
end

-- vêre Modèlo:Modulo biblio/libelâ
function Comon.libela( args )
	local lib = args['libelâ'] or ''
	if lib ~= '' then
		lib = '<small>[' .. lib .. ']</small> '
	end
	return lib
end

-- vêre Modèlo:Comentèro biblio
function Comon.comentero( args )
	if Outils.trim( args.comentero ) then
		local a = '<div style="Margin-top:0.1em ;margin-left:2em; line-height:1.5; margin-bottom:0.5em;">'
		local b = '</div>'
		return a, args.comentero, b
	end
	return ''
end

-- vêre Modèlo:Modulo biblio/endicacion de lengoua
function Comon.endicacionDeLengoua( args, validArg )
	local lang = validArg( 'lengoua', 'lang', 'lim lengoua', 'language' )
	if lang then
		Lengoua = require( 'Module:Lengoua' )
		
		-- èprôvont lo code de lengoua complèt (nècèssèro por les lengoues avouéc un mouél de mots coment "grèco ancian")
		local codeLengoua = Lengoua.codeLengoua2( lang )

		if codeLengoua == 'frp' or codeLengoua:sub(1, 3) == 'frp-' then
			return ''
		elseif codeLengoua ~= '' then
			return Lengoua.endicacionMultilengoua{ codeLengoua }, codeLengoua
		end

		-- se la lengoua est pas étâye trovâye, considèront qu’y at un mouél de lengoues
		-- sèparacion de les lengoues s’y en at un mouél
		local listaLengoua = mw.text.split( lang, '[+,;:/ %.]+' )

		-- code lengoua principâl que serat aplicâ ux titros
		codeLengoua = Lengoua.codeLengoua2( listaLengoua[1] )

		if codeLengoua == '' then
			if type( args.categ ) == 'table' then
				args.categ.lengoua = true
			end
			return Lengoua.endicacionMultilengoua( listaLengoua )
		else
			-- calcul code de lengoua et catègoria
			local endicacionLengoua = Lengoua.endicacionMultilengoua( listaLengoua )
			if type( args.categ ) == 'table' then
				args.categ.lengoua = endicacionLengoua:find( '???', 1, true )
			end

			if codeLengoua ~= 'frp' and codeLengoua:sub(1, 3) ~= 'frp-' then
				return endicacionLengoua, codeLengoua
			elseif #listaLengoua > 1 then
				return endicacionLengoua, codeLengoua
			end
		end
	end
	return ''
end


-- voir Modèle:Module biblio/responsabilité principale
function Comon.responsabilitatPrincipala( args, validArg )

	local nom = validArg( 'nom1', 'nom', 'last1', 'last' )
	local otor = validArg( 'ôtor1', 'ôtor', 'author1', 'author' )
	local otorEnstitucional = validArg( 'ôtor enstitucionâl' )
	if not ( nom or otor or otorEnstitucional ) then
		return ''
	end

	if nom or otor then
		-- clarification des paramètres
		args['petiôt nom1'] = validArg( 'petiôt nom1', 'petiôt nom', 'first1', 'first' )
		args['postnom1'] = validArg( 'postnom1', 'postnom' )
	
		args.director1 = validArg( 'dirèctor1', 'dirèctor' )
		args['lim ôtor1'] = validArg( 'lim ôtor1', 'lim ôtor', 'author-link' )
	end
	
	-- préparation des variables
	local listaResponsablos = { }  -- contiendra un élément pour chaque nom
	local director = abr { 'dir.', 'dirèctor de publecacion' }
	local petiotnom, postnom, dir, responsablo, lim, precision, resp
	local i = 1
	

	-- boucle sur chaque nom, assemble toutes les caractéristique et ajoute l'ensemble à la liste.
	while nom or otor do
	
		-- nom de l'auteur
		if not otor then
			petiotnom = validArg( 'petiôt nom' .. i, 'first' .. i )
			nom = '<span class="nom_ôtor">' .. nom .. '</span>'
			postnom = validArg( 'postnom' .. i)
			if petiotnom and postnom then
				otor = petiotnom .. ' ' .. nom .. ' ' .. postnom
			elseif petiotnom then
				otor = petiotnom .. ' ' .. nom
			elseif postnom then
				otor = nom .. ' ' .. postnom
			else
				otor = nom
			end
		end
		
		-- lien sur l'auteur
		otor = Comon.fusionTextoLim( otor, args['lim ôtor' .. i], args.categ)

		-- définition des responsabilités
		dir = validArg( 'dirèctor' .. i )
		resp = validArg( 'rèsponsabilitât' .. i )
		if dir then
			if resp then
				precision = ' (' .. director .. ' et ' .. resp .. ')'
			else
				precision = ' (' .. director .. ')'
			end
		elseif resp then
			precision = ' (' .. resp .. ')'
		else
			precision = ''
		end

		table.insert( listaResponsablos, otor .. precision )

		i = i + 1
		nom = validArg( 'nom' .. i, 'last' .. i )
		otor = validArg( 'ôtor' .. i, 'author' .. i )
	end
	
	local listaOtors
	local et_al = ''
	if validArg( 'et al.', 'et alii' ) then
		et_al = " ''" .. abr { "et al.", "et alii (et d’ôtros)" } .. "''"
		listaOtors = table.concat( listaResponsablos, ', ' ) .. et_al
	else
		listaOtors = mw.text.listToText( listaResponsablos )
	end
	
	if otorEnstitucional then
		if #listaResponsablos > 0 then
			return listaOtors .. ', ' .. otorEnstitucional
		else
			return otorEnstitucional .. et_al
		end
	else
		return listaOtors
	end

end


-- voir Module biblio/responsabilité secondaire
function Comon.responsabilitatSecondera( args, validArg )
	local lista = { }
	
	-- fonction qui teste l'existence d'un paramètre et insérere  dans liste une abréviation discrète suivi de ce paramètre
	local function insertAbr( arg, abrev, texto )
		if arg then
			table.insert( lista, abr{ abrev, texto, nbsp='+' } .. arg )
		end
	end
	
	-- langue originale et traducteur
	local trad = validArg( 'traductor', 'trad', 'traduccion' )
	local lengouaOriginala = validArg( 'lengoua originâla' )
	if lengouaOriginala then
		local Lengouadata = mw.loadData( 'Module:Lengoua/Data' )
		lengouaOriginala = Lengouadata[lengouaOriginala] and Lengouadata[lengouaOriginala].nom
	end
	if lengouaOriginala then
		if trad then
			 trad = ' per ' .. trad
		else
			trad = ''
		end
		if mw.ustring.sub( lengouaOriginala, 1, 1 ):match( '[a, â, à, e, ê, é, è, i, o, ô, u, y]' ) or
			lengouaOriginala == 'hèbrô' then
			trad = "de l’" .. lengouaOriginala .. trad
		else
			trad = 'du ' .. lengouaOriginala .. trad
		end
	end
	insertAbr( trad, 'trad.', 'traduccion' )
	
	-- ajout des différents responsables
	insertAbr( validArg( 'téta de lévro' ), 'téta de l.', 'téta de lévro' )
	if validArg( 'cova de lévro' ) then
		table.insert( lista, 'cova de lévro ' .. args.postface )
	end
	insertAbr( validArg( 'ilustrator', 'ilustracions' ), 'il.', 'ilustracions' )
	insertAbr( validArg( 'fotografo', 'fotografies' ), 'fotogr.', 'fotografies' )
	if validArg( 'champ libro' ) then
		table.insert( lista, args['champ libro'] )
	end
	
	-- concaténation de l'ensemble
	local texto = table.concat( lista, ', ')
	if texto ~= '' then
		return ' (' .. texto .. ')'
	end
end

---
-- voir émule le modèle:Inscription date
-- la détection des arguments permet d'utilisé la fonction depuis un modèle, depuis invoke, ou depuis une autre fonction.
-- pour facilité l'écriture de lua, annee (sans accent) est accepté lors de l'appel depuis lua.
function Comon.enscripcionData( frame )
	local args = Outils.extractArgs( frame )
	local an = Outils.notEmpty( args['an'], args.an, args.year )
	if an then
		if an:match( '^%-?%d+$' ) then
			-- si l'année est correctement renseigné, on essaye de trouver le mois
			local mes = Outils.notEmpty( args.mes, args.month, args.seson )
			mes = string.lower( mes or '' )
			local jorn = Outils.notEmpty( args.jorn, args.day, args['quantiémo'] )
			local t, jma = Data.validacionJornMesAn{ jorn, mes, an }
			if t then
				jma.nolinks = true
				return Data._modeloData( jma )
			else
				local date = { jorn }
				table.insert( date, mes )
				table.insert( date, an )
				return '<time class="nowrap" datetime="' .. an .. '">' .. table.concat( date, ' ' ) .. '</time>'
			end
		else
			return Comon.enscripcionData{ date = an }
		end
	else
		-- si annee n'est pas précisé, on utilise la paramètre date
		local date = Outils.validTextArg( args, 'dâta' )
		if date then
			date = date:lower()
			-- Date iso avec l'heure : suppression de l'heure
			date = date:gsub( '^(%d%d%d%d%-%d%d%-%d%d)t[%d:+-]+$', '%1')
			local t, jma = Data.separacionJornMesAn( date )
			if t then
				jma.nolinks = true
				return Data._modeloData( jma )
			else
				-- date non reconnue, on essaye Month day, year
				local mes, jorn, an = mw.ustring.match( date, '^([%a]+)%s*(%d%d?)[,%s]+(%d+)$' )
				local t, jma = Data.validacionJornMesAn{ jorn, mes, an }
				if an and t then
					jma.nolinks = true
					return Data._modeloData( jma )
				end
			end
			return date
		end
	end
	return ''
end

-- retire toutes le lien interne, externe et balise html pour ne garder que le texte brut.
local function neteyajoTexto( texto )
	if type( texto ) == 'string'  then
		if texto:match( '[%[<]' ) then
			local function textoDuLim( l, t )
				return ( t ~= '' and t ) or l
			end
			-- nettoyage des liens interne
			texto = texto:gsub( '%[%[([^%[%]|]*)|?([^%[%]]*)%]%]', textoDuLim )
			-- nettoyage des liens externes
				:gsub( '%[https?://[^%[%] ]* *([^%]]+)%]', '%1' )
				:gsub( '%[//[^%[%] ]* *([^%]]+)%]', '%1' )
			-- nettoyage des balise html
				:gsub( '%b<>', '' )
		end
		return texto
	end
end

-- voir Modèle:COinS bibliographique
-- NISO Z39.88
-- http://www.openurl.info/registry
function Comon.COinS( args, validArg, genro ) 
	local lista = { }
	
	-- insertlist ajoute à la table 'liste' un couple 'nom Coins normalisé' - 'donnée'
	-- Si istexte = true, le deuxième élément de tab est considéré comme du texte,
	-- sinon comme le nom d'un paramètre.
	local function insertList( key, value, prefix )
		prefix = prefix or ''
		if type( value ) == 'string' and value ~= '' then
			table.insert( lista, key .. '=' .. mw.uri.encode( prefix .. value ) )
		end
	end
		
	-- norme du COinS
	insertList( 'ctx_ver', 'Z39.88-2004' )
	
	-- genre, titre et sous-titre
	if genro == 'articllo' then
		insertList( 'rft_val_fmt', 'info:ofi/fmt:kev:mtx:jornal' )
		insertList( 'rft.genro', 'articllo' )
		insertList( 'rft.atitle', neteyajoTexto( args.titro ) )
		insertList( 'rft.jtitle', neteyajoTexto( validArg( 'pèriodico', 'reviua', 'jornal' ) ) )
		insertList( 'rft.issue', validArg( 'numerô', 'no', 'issue' ) )
	else
		-- genre = ouvrage ou chaitre
		insertList( 'rft_val_fmt','info:ofi/fmt:kev:mtx:book' )
		if genro == 'chapitro' then
			insertList( 'rft.genro', 'bookitem' )
		else
			insertList( 'rft.genro', 'book' )
		end
		insertList( 'rft.btitle', neteyajoTexto( args.titro ) )
		insertList( 'rft.atitle', neteyajoTexto( validArg( 'titro chapitro', 'titroChap' ) ) )
		
		-- donnée sur l'éditeur
		insertList( 'rft.place', textoLim( validArg( 'endrêt', 'locacion' ) ), nil )
		insertList( 'rft.pub', textoLim( validArg( 'èditor', 'èdicion' ) ), nil )
		insertList( 'rft.edition', textoLim( validArg( "numerô d’èdicion", "numerô èdicion" ) ), nil )
	end
	insertList( 'rft.stitle', args['sot-titro'] )
	
	-- Premier auteur, séparé en noms et prénoms
	local nom = textoLim( validArg( 'nom1', 'nom', 'last1', 'last' ) )
	if nom then
		insertList( 'rft.aulast', nom )
		insertList( 'rft.aufirst', validArg( 'petiôt nom1', 'petiôt nom', 'first1', 'first' ) )
		insertList( 'rtf.ausuffix ', validArg( 'postnom1', 'postnom' ) )
	else
		local otor = textoLim( validArg( 'ôtor', 'ôtor1' ) )
		if otor then 
			insertList( 'rft.au', otor )
		end
	end
	
	-- les autres auteurs, la norme ne prévoit pas de séparation
	for i = 2, 20 do
		local nom_i = textoLim( validArg( 'nom' .. i ) )
		if nom_i then
			local petiotnom_i = validArg( 'petiôt nom' .. i )
			local postnom_i = validArg( 'postnom' .. i)
			if petiotnom_i and postnom_i then
				insertList( 'rft.au', nom_i .. ' ' .. postnom_i .. ', ' .. prenom_i )
			elseif prenom_i then
				insertList( 'rft.au', nom_i .. ', ' .. prenom_i )
			elseif postnom_i then
				insertList( 'rft.au', nom_i .. ' ' .. postnom_i )
			else
				insertList( 'rft.au', nom_i )
			end
		else
			local otor_i = textoLim( validArg( 'ôtor' .. i ) )
			if otor_i then
				insertList( 'rft.au', otor_i )
			else
				break
			end
		end
	end
	
	if validArg( 'ôtor enstitucionâl' ) then
		insertList( 'rft.aucorp', args['ôtor enstitucionâl'] )
	end
	
	-- date
	local dataPub = Data.dataISO( args )
	if dataPub then 
		insertList( 'rft.date', dataPub )
	else
		insertList( 'rft.date', args.date )
	end
	
	-- doonées physique de la publication
	insertList( 'rft.volume', validArg( 'volumo', 'vol' ) )
	insertList( 'rft.pages', validArg( 'passâjo', 'pâge' ) )
	insertList( 'rft.spage', args['pâge comencement chapitro'] )
	insertList( 'rft.tpages', args['pâges totâles'] )
	
	
	-- références internationales
	insertList( 'rft.isbn', args.isbn )
	insertList( 'rft.issn', args.issn )
	insertList( 'rft_id', args.doi, 'info:doi/' )
	insertList( 'rft_id', args.pmid, 'info:pmid/' )
	insertList( 'rft_id', args.oclc, 'info:oclcnum/' )
	insertList( 'rft_id', args.url )
	
	-- referer : page Wikipedia ou se trouve cette référence
	insertList( 'rfr_id', 'frp.wikipedia.org:' .. mw.title.getCurrentTitle().fullText, 'info:sid/' )

	local contextObject = table.concat( lista, '&' )

	return '<span class="Z3988" title="' .. contextObject .. '"></span>'
end


return Comon
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy