Module:Fix

 Documentation

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, indentationthenreturn trueelsereturn falseendend-- utilisé par {{Citation}} et {{Citation étrangère}}function p.necessiteCadre( frame )local contenu = frame.args[ 1 ]if necessiteCadre( contenu ) thenreturn '1'elsereturn ''endendlocal function affichageBloc( args )local background = args.background or ''if background == '' thenbackground = 'white'endlocal 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 )endlocal function affichageInline( args, ajouterinfobulle )local html = mw.html.create( '' )if args[ 1 ] and args[ 1 ]:match( '%S' ) thenhtml: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.endif ajouterinfobulle thenhtml:tag( 'sup' ):addClass( 'need_ref_tag' ):cssText ( 'padding-left:2px;' ):attr{ title = args.titre2 }:wikitext( args.message2 ):allDone()elsehtml:tag( 'sup' ):addClass( 'need_ref_tag' ):cssText ( 'padding-left:2px;' ):wikitext( args.message2 ):allDone()endreturn tostring( html )endlocal 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 falselocal messageloc = ''local infobulle_mise = falseif args.message and args.message ~= '' thenlocal cible    if args.message_lien and args.message_lien ~= '' then    if args.message_lien == 'non' thencible = falseelsecible = args.message_lienendelsecible = args.messageendif cible thenif cible:sub( 1, 1 ) == ':' thencible = cible:sub( 2 )endif 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 internesmessageloc = '[[:' .. cible .. '|' .. '<span title="' .. args.titre2 ..'">&#91;' .. args.message .. '&#93;</span>' .. ']]'infobulle_mise = trueelsemessageloc = '[[:' .. 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.endelsemessageloc = '&#91;' .. args.message .. '&#93;'if not args.message:find( '%[%[' ) thenargs.titre2 = args.titreendend-- 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 messageif ( args.message:find( '%[' ) or args.message:find( '%]' ) ) and ( args.message_lien or '' ) ~= 'non' thenmessageloc = args.messageendelsemessageloc = '<span class="error">argument « message » manquant dans le modèle ' .. nommodele .. '.</span>'args.titre2 = "Erreur dans l'appel du modèle Fix"endreturn messageloc, infobulle_miseendfunction p.affichageFix( frame )local args = frame.getParent and frame:getParent().args or framelocal nommodele = frame.getParent and frame:getParent():getTitle() or frame:getTitle()local messageDate = ''local messageAide = ' ; v'local ponctuation = '.'if args.date and args.date ~= '' thenmessageDate = ' (demandé le ' .. args.date .. ')'elselocal infobulle_texte = mw.text.trim( ( args.infobulle or '' ):gsub( '%b<>', '' ) )if infobulle_texte ~= '' thenif infobulle_texte:match( '[!?…]$' ) thenmessageAide = ' V'ponctuation = ''endelsemessageAide = 'V'ponctuation = ''endendmessageAide = messageAide .. 'oir l\'aide.'args.titre = mw.text.trim( ( args.infobulle or '' ):gsub( '[,.;:]$', '' ) ) .. messageDate .. ponctuationargs.titre2 = mw.text.trim( ( args.infobulle or '' ):gsub( '[,.;:]$', '' ) ) .. messageDate .. messageAideif args[ 1 ] and args[ 1 ]:match( '%S' ) thenargs.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 )endelseargs.message2, infobulle_mise = generateMessage( args, nommodele, true )endreturn affichageInline( args, not infobulle_mise )endreturn p