Aller au contenu

Module:Fix

Cette page fait l’objet d’une mesure de semi-protection étendue.
Une page de Wikipédia, l'encyclopédie libre.

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.

localp={}

localfunctionnecessiteCadre(contenu)
ifcontenu:match('\n[\t]*\n')-- ligne vide (donc plusieurs paragraphes)
orcontenu:match('\n[*#:]')-- liste à puces, liste numérotée, indentation
then
returntrue
else
returnfalse
end
end

-- utilisé par {{Citation}} et {{Citation étrangère}}
functionp.necessiteCadre(frame)
localcontenu=frame.args[1]
ifnecessiteCadre(contenu)then
return'1'
else
return''
end
end

localfunctionaffichageBloc(args)
localbackground=args.background
localcolor=args.color
ifbackground==nilorbackground==''then
background='var(--background-color-base, #fff)'
end
ifcolor==nilorcolor==''then
color='var(--color-base, #202122)'
end

localhtml=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,color=color}
: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,color=color}
:wikitext(args.message2)
:allDone()

returntostring(html)
end

localfunctionaffichageInline(args,ajouterinfobulle)
localhtml=mw.html.create('')

ifargs[1]andargs[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
ifajouterinfobullethen
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

returntostring(html)
end

localfunctiongenerateMessage(args,nommodele,modeinfobulle)-- Le dernier paramètre sert de booléen pour forcer une infobulle dans le lien interne.
localmodeinfobulle=modeinfobulleorfalse
localmessageloc=''
localinfobulle_mise=false
ifargs.messageandargs.message~=''then
localcible
ifargs.message_lienandargs.message_lien~=''then
ifargs.message_lien=='non'then
cible=false
else
cible=args.message_lien
end
else
cible=args.message
end

ifciblethen
ifcible:sub(1,1)==':'then
cible=cible:sub(2)
end
ifmodeinfobulle==truethen-- 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;'
ifnotargs.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('%[')orargs.message:find('%]'))and(args.message_lienor'')~='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

returnmessageloc,infobulle_mise
end

functionp.affichageFix(frame)
localargs=frame.getParentandframe:getParent().argsorframe
localnommodele=frame.getParentandframe:getParent():getTitle()orframe:getTitle()
localmessageDate=''
localmessageAide='; v'
localponctuation='.'
ifargs.dateandargs.date~=''then
messageDate=' (demandé le '..args.date..')'
else
localinfobulle_texte=mw.text.trim((args.infobulleor''):gsub('%b<>',''))
ifinfobulle_texte~=''then
ifinfobulle_texte:match('[!?…]$')then
messageAide=' V'
ponctuation=''
end
else
messageAide='V'
ponctuation=''
end
end
messageAide=messageAide..'oir l\'aide.'
args.titre=mw.text.trim((args.infobulleor''):gsub('[,.;:]$',''))..messageDate..ponctuation
args.titre2=mw.text.trim((args.infobulleor''):gsub('[,.;:]$',''))..messageDate..messageAide

ifargs[1]andargs[1]:match('%S')then
args.message2,infobulle_mise=generateMessage(args,nommodele)
ifnecessiteCadre(args[1])orargs.blocandargs.bloc~=''then-- attention, on ne trimme pas args[ 1 ]
returnaffichageBloc(args)
end
else
args.message2,infobulle_mise=generateMessage(args,nommodele,true)
end

returnaffichageInline(args,notinfobulle_mise)
end

returnp