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

Une page de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
si des éléments se trouvaient à côté du cadre, par exemple une image, il n'était plus possible de cliquer sur ceux-ci, les liens ne fonctionnaient plus (exemple) ; après de nombreux essais, voici la seule solution que j'ai trouvée
 
(13 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
local p = {}
local p = {}


function p.affichageBloc( args )
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 ''
local background = args.background or ''
if background == '' then
if background == '' then
background = 'white'
background = 'white'
end
end

local html = mw.html.create( '' )
local html = mw.html.create( '' )
:wikitext( '\n' )
:wikitext( '\n' )
:tag( 'div' )
:tag( 'div' )
:cssText( 'position:relative; margin-top:0.8em;')
:cssText( 'position:relative; display:table; margin-top:0.8em;' )
:tag( 'div' )
:tag( 'div' )
:addClass( 'need_ref' )
:addClass( 'need_ref' )
Ligne 16 : Ligne 36 :
:css{ background = background }
:css{ background = background }
:attr{ title = args.titre }
:attr{ title = args.titre }
:wikitext( args[1], '\n' )
:wikitext( args[ 1 ], '\n' )
:done()
:done()
:tag( 'div' )
:tag( 'div' )
:addClass( 'need_ref_tag' )
:addClass( 'need_ref_tag' )
:cssText( 'position:absolute; top:-0.6em; left:1em; padding:0 0.5em; font-size:80%; line-height:1em;')
:cssText( 'position:absolute; top:-0.6em; left:1em; padding:0 0.5em; font-size:80%; line-height:1em;' )
:css{ background = background }
:css{ background = background }
:wikitext( args.message2 )
:wikitext( args.message2 )
:allDone()
:allDone()

return tostring( html )
return tostring( html )
end
end


function p.affichageInline( args , ajouterinfobulle )
local function affichageInline( args, ajouterinfobulle )
local html = mw.html.create( '' )
local html = mw.html.create( '' )

if args[1] and mw.text.trim(args[1]) ~= '' then
if args[ 1 ] and args[ 1 ]:match( '%S' ) then
html:tag( 'span' )
html:tag( 'span' )
:addClass( 'need_ref' )
:addClass( 'need_ref' )
:cssText( 'cursor:help;' )
:cssText( 'cursor:help;' )
:attr{ title = args.titre }
:attr{ title = args.titre }
:wikitext( mw.text.trim(args[1]) )
:wikitext( mw.text.trim( args[ 1 ] ) )
:done()
:done()
ajouterinfobulle=false--Facultatif, on pourrait accepter l'infobulle sur l'exposant quel que soit le cas.
ajouterinfobulle = false -- Facultatif, on pourrait accepter l'infobulle sur l'exposant quel que soit le cas.
end
end
if ajouterinfobulle then
if ajouterinfobulle then
Ligne 58 : 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 = ''
local infobulle_mise=false
local infobulle_mise = false
if args.message and args.message ~= '' then
if args.message and args.message ~= '' then
local cible
if args.message_lien and args.message_lien ~= '' then
if args.message_lien=='non' then
if args.message_lien and args.message_lien ~= '' then
if args.message_lien == 'non' then
messageloc= "[" .. args.message .. "]"
cible = false
if not args.message:find("%[%[") then
args.titre2=args.titre
end
else
else
cible = args.message_lien
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
end
else
else
cible = args.message
if modeinfobulle==true then
end
--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))
if cible then
infobulle_mise=true
if cible:sub( 1, 1 ) == ':' then
cible = cible:sub( 2 )
end
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 = '[[:' .. cible .. '|' .. '<span title="' .. args.titre2 ..'">&#91;' .. args.message .. '&#93;</span>' .. ']]'
infobulle_mise = true
else
else
--messageloc= "&#91;[[" .. args.message .. "]]&#93;"--CHOIX
messageloc = '[[:' .. cible .. '|&#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.
messageloc= "[[" .. args.message .. "|&#91;" .. args.message .. "&#93;]]"
end
infobulle_mise=true--Facultatif, idem plus haut
else
messageloc = '&#91;' .. args.message .. '&#93;'
if not args.message:find( '%[%[' ) then
args.titre2 = args.titre
end
end
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
-- 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
if ( args.message:find( '%[' ) or args.message:find( '%]' ) ) and ( args.message_lien or '' ) ~= 'non' then
messageloc= args.message
messageloc = args.message
end
end
else
else
messageloc= '<span class="error">argument « message » manquant dans le modèle ' .. nommodele .. '.</span>'
messageloc = '<span class="error">argument « message » manquant dans le modèle ' .. nommodele .. '.</span>'
args.titre2="Erreur dans l'appel du modèle Fix"
args.titre2 = "Erreur dans l'appel du modèle Fix"
end
end

return messageloc, infobulle_mise
return messageloc, infobulle_mise
end
end



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


if args[1] and mw.text.trim(args[1]) ~= '' then
if args[ 1 ] and args[ 1 ]:match( '%S' ) 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 ~= '' then -- attention, on ne trimme pas args[ 1 ]
if args[1]:match('\n[ \t]*\n')
return affichageBloc( args )
or args[1]:match('\n[*#:]')
or args.bloc and args.bloc ~= ''
then
return p.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



Dernière version du 18 décembre 2022 à 14:24

 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; display:table; 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 args[ 1 ]:match( '%S' ) 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
		local cible
    	if args.message_lien and args.message_lien ~= '' then
    		if args.message_lien == 'non' then
				cible = false
			else
				cible = args.message_lien
			end
		else
			cible = args.message
		end

		if cible then
			if cible:sub( 1, 1 ) == ':' then
				cible = cible:sub( 2 )
			end
			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 = '[[:' .. cible .. '|' .. '<span title="' .. args.titre2 ..'">&#91;' .. args.message .. '&#93;</span>' .. ']]'
				infobulle_mise = true
			else
				messageloc = '[[:' .. cible .. '|&#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
		else
			messageloc = '&#91;' .. args.message .. '&#93;'
			if not args.message:find( '%[%[' ) then
				args.titre2 = args.titre
			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 args[ 1 ]:match( '%S' ) then
		args.message2, infobulle_mise = generateMessage( args, nommodele )
		if necessiteCadre( args[ 1 ] ) or args.bloc and args.bloc ~= '' then -- attention, on ne trimme pas args[ 1 ]
			return affichageBloc( args )
		end
	else
		args.message2, infobulle_mise = generateMessage( args, nommodele, true )
	end

	return affichageInline( args, not infobulle_mise )
end

return p