« Module:Fix » : différence entre les versions
(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) |
m (1 version importée) |
(Aucune différence)
|
Dernière version du 1 juin 2024 à 11:44
La documentation pour ce module peut être créée à Module:Fix/doc
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 ..'">[' .. args.message .. ']</span>' .. ']]' infobulle_mise = true else messageloc = '[[:' .. cible .. '|[' .. args.message .. ']]]' 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 = '[' .. args.message .. ']' 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