« Module:Fix » : différence entre les versions

Une page de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
proprage
passage en déclaration locale des fonctions affichageBloc, affichageInline et generateMessage, qui ne sont pas utilisées en dehors de ce module
Ligne 21 : Ligne 21 :
end
end


function p.affichageBloc( args )
local function affichageBloc( args )
local background = args.background or ''
local background = args.background or ''
if background == '' then
if background == '' then
Ligne 48 : Ligne 48 :
end
end


function p.affichageInline( args , ajouterinfobulle )
local function affichageInline( args, ajouterinfobulle )
local html = mw.html.create( '' )
local html = mw.html.create( '' )
Ligne 78 : Ligne 78 :
end
end


function p.generateMessage( args, nommodele, modeinfobulle)-- Le dernier paramètre sert de booléen pour forcer une infobulle dans le lien interne.
local function generateMessage( args, nommodele, modeinfobulle )-- Le dernier paramètre sert de booléen pour forcer une infobulle dans le lien interne.
local modeinfobulle = modeinfobulle or false
local modeinfobulle = modeinfobulle or false
local messageloc=''
local messageloc=''
Ligne 118 : Ligne 118 :
return messageloc, infobulle_mise
return messageloc, infobulle_mise
end
end



function p.affichageFix( frame )
function p.affichageFix( frame )
Ligne 145 : Ligne 144 :


if args[1] and mw.text.trim(args[1]) ~= '' then
if args[1] and mw.text.trim(args[1]) ~= '' then
args.message2, infobulle_mise =p.generateMessage(args, nommodele)
args.message2, infobulle_mise = generateMessage(args, nommodele)
if necessiteCadre(args[1]) or args.bloc and args.bloc ~= ''
if necessiteCadre(args[1]) or args.bloc and args.bloc ~= ''
then
then
return p.affichageBloc( args )
return affichageBloc( args )
end
end
else
else
args.message2, infobulle_mise =p.generateMessage(args, nommodele, true)
args.message2, infobulle_mise = generateMessage(args, nommodele, true)
end
end


return p.affichageInline( args, not infobulle_mise )
return affichageInline( args, not infobulle_mise )
end
end



Version du 26 août 2021 à 11:16

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

Module utilisé par le métamodèle {{Fix}}, et indirectement par le modèle {{Référence nécessaire}} et dérivés.

local p = {}

local function necessiteCadre( contenu )
	if contenu:match( '\n[ \t]*\n' ) -- ligne vide (donc plusieurs paragraphes)
	or contenu:match( '\n[*#:]' )    -- liste à puces, liste numérotée, indentation
	then
		return true
	else
		return false
	end
end

-- utilisé par {{Citation}} et {{Citation étrangère}}
function p.necessiteCadre( frame )
	local contenu = frame.args[ 1 ]
	if necessiteCadre( contenu ) then
		return '1'
	else
		return ''
	end
end

local function affichageBloc( args )
	local background = args.background or ''
	if background == '' then
		background = 'white'
	end
	
	local html = mw.html.create( '' )
		:wikitext( '\n' )
		:tag( 'div' )
			:cssText( 'position:relative; margin-top:0.8em;')
			:tag( 'div' )
				:addClass( 'need_ref' )
				:cssText( 'cursor:help; overflow:hidden; padding-bottom:0;' )
				:css{ background = background }
				:attr{ title = args.titre }
				:wikitext( args[1], '\n' )
				:done()
			:tag( 'div' )
				:addClass( 'need_ref_tag' )
				:cssText( 'position:absolute; top:-0.6em; left:1em; padding:0 0.5em; font-size:80%; line-height:1em;')
				:css{ background = background }
				:wikitext( args.message2 )
		:allDone()
		
	return tostring( html )
end

local function affichageInline( args, ajouterinfobulle )
	local html = mw.html.create( '' )
	
	if args[1] and mw.text.trim(args[1]) ~= '' then
		html:tag( 'span' )
				:addClass( 'need_ref' )
				:cssText( 'cursor:help;' )
				:attr{ title = args.titre }
				:wikitext( mw.text.trim(args[1]) )
				:done()
		ajouterinfobulle=false--Facultatif, on pourrait accepter l'infobulle sur l'exposant quel que soit le cas.
	end
	if ajouterinfobulle then
		html:tag( 'sup' )
			:addClass( 'need_ref_tag' )
			:cssText ( 'padding-left:2px;' )
			:attr{ title = args.titre2 }
			:wikitext( args.message2 )
		:allDone()
	else
		html:tag( 'sup' )
			:addClass( 'need_ref_tag' )
			:cssText ( 'padding-left:2px;' )
			:wikitext( args.message2 )
		:allDone()
	end

	return tostring( html )
end

local function generateMessage( args, nommodele, modeinfobulle )-- Le dernier paramètre sert de booléen pour forcer une infobulle dans le lien interne.
	local modeinfobulle = modeinfobulle or false
	local messageloc=''
	local infobulle_mise=false
	if args.message and  args.message ~= '' then
    	if args.message_lien and  args.message_lien ~= '' then
    		if args.message_lien=='non' then
				messageloc= "[" .. args.message .. "]"
				if not args.message:find("%[%[") then
					args.titre2=args.titre
				end
			else
				if modeinfobulle==true then-- On force l'infobulle à l'intérieur. Il y aurait peut-être plus smple, avec un seul message et l'ajout d'une classe désactivant les infobulles sur les liens internes
					messageloc= "[[:" .. args.message_lien .. "|" .. '<span title="' .. args.titre2 ..'">&#91;' .. args.message .. "&#93;</span>" .. "]]"
					infobulle_mise=true
				else
					messageloc= "[[:" .. args.message_lien .. "|&#91;" .. args.message .. "&#93;]]"
					infobulle_mise=true--Facultatif mais on peut bien considérer inutile d'ajouter une autre infobulle autour de ce contenu. Cela est encore plus vrai si lien interne créé à la ligne précédente est sur l'intégralité du message.
				end
			end
		else
			if modeinfobulle==true then
				messageloc= "[[:" .. args.message .. "|" .. '<span title="' .. args.titre2 ..'">&#91;' .. args.message .. "&#93;</span>" .. "]]" .. tostring(table.concat(args))
				infobulle_mise=true
			else
				messageloc= "[[:" .. args.message .. "|&#91;" .. args.message .. "&#93;]]"
				infobulle_mise=true--Facultatif, idem plus haut
			end
		end
		-- trois lignes qui suivent : test temporaire à activer lors de la transition d'affichage pour les appels qui introduisent déjà un lien via le paramètre message
		if (args.message:find("%[") or args.message:find("%]")) and (args.message_lien or '')~='non' then
			messageloc= args.message
		end
	else
		messageloc= '<span class="error">argument « message » manquant dans le modèle ' .. nommodele .. '.</span>'
		args.titre2="Erreur dans l'appel du modèle Fix"
	end
    
	return messageloc, infobulle_mise
end

function p.affichageFix( frame )
	local args = frame.getParent and frame:getParent().args or frame
	local nommodele = frame.getParent and frame:getParent():getTitle() or frame:getTitle()
	local messageDate = ''
	local messageAide = ' ; v'
	local ponctuation="."
	if args.date and args.date ~= '' then
		messageDate = ' (demandé le ' .. args.date .. ')'
	else
		local infobulle_texte= mw.text.trim((args.infobulle or ''):gsub( '%b<>', '' ))
		if infobulle_texte ~= '' then
			if infobulle_texte:match( '[!?…]$' ) then
				messageAide = ' V'
				ponctuation=""
			end
		else
			messageAide = 'V'
			ponctuation=""
		end
	end
	messageAide = messageAide .. 'oir l\'aide.'
	args.titre = mw.text.trim(( args.infobulle or '' ):gsub( '[,.;:]$', '' )) .. messageDate .. ponctuation
	args.titre2 = mw.text.trim(( args.infobulle or '' ):gsub( '[,.;:]$', '' )) .. messageDate .. messageAide

	if args[1] and mw.text.trim(args[1]) ~= '' then
		args.message2, infobulle_mise = generateMessage(args, nommodele)
		if necessiteCadre(args[1]) or args.bloc and args.bloc ~= ''
		then
			return affichageBloc( args )
		end
	else
		args.message2, infobulle_mise = generateMessage(args, nommodele, true)
	end

	return affichageInline( args, not infobulle_mise )
end

return p