Initiation au Lua avec Scribunto/Librairie HTML
Présentation
modifiermw.html
est une interface fluide pour construire du code HTML complexe pour Lua. Le code est ainsi à la fois plus concis et plus clair. Un objet mw.html peut être créé en utilisant mw.html.create
.
Un exemple de base pourrait ressembler à ceci :
local div = mw.html.create( 'div' )
div
:attr( 'id', 'testdiv' )
:css( 'width', '100%' )
:wikitext( 'Du texte' )
:tag( 'hr' )
return tostring( div )
-- Sortie : <div id="testdiv" style="width:100%;">Du texte<hr /></div>
Fonctions de la librairie HTML
modifierLes exemples de ce chapitre se trouveront dans le Module:Html
Nous commencerons par visualiser le contenu de la librairie HTML grâce au programme suivant :
local p = {}
function p.visualisation(frame)
reponse = ""
for index, objet in pairs(mw.html) do
reponse = reponse.."<br>À la clé "..index..", on trouve un objet de type : "..type(objet)
end
return reponse
end
return p
{{#invoke:Html|visualisation}} nous donne :
À la clé create, on trouve un objet de type : function
Nous voyons qu’il y a une seule fonction directement accessible, mais il y a aussi plusieurs méthodes.
Étudions en détail cette fonctions :
mw.html.create
modifiermw.html.create( tagName, args )
Crée un nouvel objet mw.html contenant un élément html tagName
. Vous pouvez également passer une chaîne vide au paramètre tagName
afin de créer un objet mw.html vide.
args
peut être une table avec les clés suivantes :
args.selfClosing
: Forcer la balise courante à se fermer, même si mw.html ne la reconnaît pas comme autofermanteargs.parent
: Parent de l'instance de mw.html actuel (destiné à un usage interne)
Méthodes de la librairie HTML
modifiermw.html:node
modifierhtml:node( builder )
Ajoute un nœud enfant (builder
) à l'instance mw.html actuelle.
mw.html:wikitext
modifierhtml:wikitext( ... )
Ajoute un nombre indéterminé de wikitexte à l’objet mw.html.
mw.html:newline
modifierhtml:newline()
Ajoute une nouvelle ligne à l’objet mw.html.
mw.html:tag
modifierhtml:tag( tagName, args )
Ajoute un nouveau nœud enfant tagName
, et renvoie une instance mw.html représentant le nouveau nœud. Le paramètre args
est identique à celui de mw.html.create
mw.html:attr
modifierhtml:attr( name, value )
html:attr( table )
Définie un attribut HTML name
avec comme valeur value
sur le noeud.
Alternativement, une table contenant le couple d'attribut nom->valeur peut être passée.
mw.html:getAttr
modifierhtml:getAttr( name )
Obtiens la valeur d'un attribut HTML précédemment définie en utilisant html:attr()
avec le nom (name
) donné.
mw.html:addClass
modifierhtml:addClass( class )
Ajoute un nom de classe à l'attribut de classe du noeud.
mw.html:css
modifierhtml:css( name, value )
html:css( table )
Définie une propriété CSS name
avec comme valeur value
sur le noeud.
Alternativement, une table contenant le couple de propriété nom->valeur peut être passée.
mw.html:cssText
modifierhtml:cssText( css )
Ajoute du code CSS brut à l'attribut du nœud courant.
mw.html:done
modifierhtml:done()
Renvoie le noeud parent dans lequel le nœud courant a été créé. Comme jQuery.end, il s'agit d'une fonction pratique pour permettre la construction de plusieurs nœuds enfants pour être chainés en une seule déclaration.
mw.html:allDone
modifierhtml:allDone()
Comme html:done()
, mais traverse tout le chemin vers le noeud racine de l'arbre et le retourne.
Étude du contenu d'un objet mw.html
modifierNous commencerons par visualiser le contenu d'un objet mw.html grâce au programme suivant :
local p = {}
function p.visualise(frame)
reponse = ""
html = mw.html.create(essai)
for index, objet in pairs(html) do
reponse = reponse.."<br>À la clé "..index..", on trouve un objet de type : "..type(objet)
end
return reponse
end
return p
{{#invoke:Html|visualise}} nous donne :
À la clé nodes, on trouve un objet de type : table
À la clé styles, on trouve un objet de type : table
À la clé attributes, on trouve un objet de type : table
À la clé selfClosing, on trouve un objet de type : boolean
Étudions ces objets :
html.nodes
modifier
html.styles
modifier
html.attributes
modifier
html.selfClosing
modifier