Aller au contenu

Module:Fix/Bac à sable

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 3 mars 2021 à 22:44 et modifiée en dernier par Ideawipik (discuter | contributions) (Ajout forçage de l'infobulle, dans le lien, sur le message en exposant. Note: pour la fonction generateMessage, on aurait aussi pu opter pour un unique paramètre (comme args) et altérer, dans affichageFix, la liste des arguments (args.modeinfobulle=true), juste avant l'appel concerné. Autre remarque. Il y aurait peut-être une alternative à tout ceci, en CSS (ou JS), afin de désactiver localement l'infobulle par défaut de MediaWiki sur les liens internes.). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 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 )
	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( args[1] )
				:done()
	end
	html:tag( 'sup' )
			:addClass( 'need_ref_tag' )
			:cssText ( 'padding-left:2px;' )
			:attr{ title = args.titre }
			:wikitext( args.message2 )
		:allDone()

	return tostring( html )
end

function p.generateMessage( args, modeinfobulle)-- le dernier paramètre sert de booleen pour forcer une infobulle dans le lien interne
	modeinfobulle = modeinfobulle or false
	local messageloc=''
	if args.message and  mw.text.trim(args.message) ~= '' then
    	if args.message_lien and  mw.text.trim(args.message_lien) ~= '' then
    		if args.message_lien=='non' then
				messageloc= "[" .. args.message .. "]"
			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.titre ..'">' .. args.message .. "</span>" .. "]]&#93;"
				else
					messageloc= "&#91;[[" .. args.message_lien .. "|" .. args.message .. "]]&#93;"
				end
			end
		else
			if modeinfobulle==true then
				messageloc= "&#91;[[" .. args.message .. "|" .. '<span title="' .. args.titre ..'">' .. args.message .. "</span>" .. "]]&#93;" .. tostring(table.concat(args))
			else
				messageloc= "&#91;[[" .. args.message .. "]]&#93;"
			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 manquant dans le modèle : message.</span>'
	end
	return messageloc
end


function p.affichageFix( frame )
	local args = frame.getParent and frame:getParent().args or frame
	
	local messageDate = ''
	local messageAide = ' ; v'
	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'
			end
		else
			messageAide = 'V'			
		end
	end
	messageAide = messageAide .. 'oir l\'aide'

	args.titre = mw.text.trim(( args.infobulle or '' ):gsub( '[,.;:]$', '' )) .. messageDate .. messageAide .. '.'

	if args[1] and mw.text.trim(args[1]) ~= '' then
		
		if args[1]:match('\n[ \t]*\n')
			or args[1]:match('\n[*#:]')
			or args.bloc and args.bloc ~= ''
		then
		    args.message2=p.generateMessage( args)
			return p.affichageBloc( args )
		end
		args.message2=p.generateMessage(args)
	else
		args.message2=p.generateMessage(args, true)
	end

	return p.affichageInline( args )
end

return p