Module:Fix/Bac à sable

 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 = {}

function p.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

function p.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

function p.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= "&#91;[[" .. args.message_lien .. "|" .. '<span title="' .. args.titre2 ..'">' .. args.message .. "</span>" .. "]]&#93;"--CHOIX
					messageloc= "[[" .. args.message_lien .. "|" .. '<span title="' .. args.titre2 ..'">&#91;' .. args.message .. "&#93;</span>" .. "]]"
					infobulle_mise=true
				else
					--messageloc= "&#91;[[" .. args.message_lien .. "|" .. args.message .. "]]&#93;"--CHOIX
					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= "&#91;[[" .. args.message .. "|" .. '<span title="' .. args.titre2 ..'">' .. args.message .. "</span>" .. "]]&#93;" .. tostring(table.concat(args))--CHOIX
				messageloc= "[[" .. args.message .. "|" .. '<span title="' .. args.titre2 ..'">&#91;' .. args.message .. "&#93;</span>" .. "]]" .. tostring(table.concat(args))
				infobulle_mise=true
			else
				--messageloc= "&#91;[[" .. args.message .. "]]&#93;"--CHOIX
				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 =p.generateMessage(args, nommodele)
		if args[1]:match('\n[ \t]*\n')
			or args[1]:match('\n[*#:]')
			or args.bloc and args.bloc ~= ''
		then
			return p.affichageBloc( args )
		end
	else
		args.message2, infobulle_mise =p.generateMessage(args, nommodele, true)
	end

	return p.affichageInline( args, not infobulle_mise )
end

return p