Initiation au Lua avec Scribunto/Librairie HTML
Présentation
[modifier | modifier le wikicode]mw.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
[modifier | modifier le wikicode]Les 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
[modifier | modifier le wikicode]mw.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
[modifier | modifier le wikicode]mw.html:node
[modifier | modifier le wikicode]html:node( builder )
Ajoute un nœud enfant (builder
) à l'instance mw.html actuelle.
mw.html:wikitext
[modifier | modifier le wikicode]html:wikitext( ... )
Ajoute un nombre indéterminé de wikitexte à l’objet mw.html.
mw.html:newline
[modifier | modifier le wikicode]html:newline()
Ajoute une nouvelle ligne à l’objet mw.html.
mw.html:tag
[modifier | modifier le wikicode]html: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
[modifier | modifier le wikicode]html: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
[modifier | modifier le wikicode]html: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
[modifier | modifier le wikicode]html:addClass( class )
Ajoute un nom de classe à l'attribut de classe du noeud.
mw.html:css
[modifier | modifier le wikicode]html: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
[modifier | modifier le wikicode]html:cssText( css )
Ajoute du code CSS brut à l'attribut du nœud courant.
mw.html:done
[modifier | modifier le wikicode]html: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
[modifier | modifier le wikicode]html: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
[modifier | modifier le wikicode]Nous 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 | modifier le wikicode]
html.styles
[modifier | modifier le wikicode]
html.attributes
[modifier | modifier le wikicode]
html.selfClosing
[modifier | modifier le wikicode]