Introduction au Lua/Scribunto objet Title
Un module Lua-Scribunto pour Mediawiki, est une page de l'espace de nom "Module" qui utilise une table comme variable locale pour stocker ses fonctions et variables mais aussi pour renvoyer la réponse à la fin du processus[1].
Le chapitre bibliothèques Scribunto, étudie les fonctions spécifiques permettant ou facilitant l'usage de Lua sur une plateforme MediaWiki. Il s'agit des fonctions ajoutées par la bibliothèque Scribunto au langage Lua. Cette leçon vous apprendra comment utiliser la Librairie Title du module Scribunto, nous abordons dans un premier temps les propriétés de l'Objet Title.
Prérequis
[modifier | modifier le wikicode]Cette leçon suppose que vous ayez assimilé la leçon Tables.
Créer un script Lua Scribuntu qui utilise la librairie Titre
[modifier | modifier le wikicode]- Accéder au Module:Sandbox.
- Supprimer le code existant.
- Ajouter le code suivant et enregistrer la page:
local p = {}
function p.canTalk(frame)
local title = mw.title.getCurrentTitle()
return ';canTalk\n:' .. tostring(title.canTalk) .. '\n'
end
function p.baseText(frame)
local title = mw.title.getCurrentTitle()
return ';baseText\n:' .. tostring(title.baseText) .. '\n'
end
function p.exists(frame)
local title = mw.title.getCurrentTitle()
return ';exists\n:' .. tostring(title.exists) .. '\n'
end
function p.fileExists(frame)
local title = mw.title.getCurrentTitle()
return ';fileExists\n:' .. tostring(title.fileExists) .. '\n'
end
function p.fragment(frame)
local title = mw.title.getCurrentTitle()
return ';fragment\n:' .. title.fragment .. '\n'
end
function p.fullText(frame)
local title = mw.title.getCurrentTitle()
return ';fullText\n:' .. title.fullText .. '\n'
end
function p.id(frame)
local title = mw.title.getCurrentTitle();
return ';id\n:' .. title.id .. '\n'
end
function p.inNamespace(frame)
local title = mw.title.getCurrentTitle();
return ';inNamespace\n:' .. tostring(title:inNamespace(0)) .. '\n'
end
function p.inNamespaces(frame)
local title = mw.title.getCurrentTitle();
return ';inNamespaces\n:' .. tostring(title:inNamespaces(0)) .. '\n'
end
function p.interwiki(frame)
local title = mw.title.getCurrentTitle();
return ';interwiki\n:' .. title.interwiki .. '\n'
end
function p.isContentPage(frame)
local title = mw.title.getCurrentTitle();
return ';isContentPage\n:' .. tostring(title.isContentPage) .. '\n'
end
function p.isExternal(frame)
local title = mw.title.getCurrentTitle();
return ';isExternal\n:' .. tostring(title.isExternal) .. '\n'
end
function p.isLocal(frame)
local title = mw.title.getCurrentTitle();
return ';isLocal\n:' .. tostring(title.isLocal) .. '\n'
end
function p.isRedirect(frame)
local title = mw.title.getCurrentTitle();
return ';isRedirect\n:' .. tostring(title.isRedirect) .. '\n'
end
function p.isSpecialPage(frame)
local title = mw.title.getCurrentTitle();
return ';isSpecialPage\n:' .. tostring(title.isSpecialPage) .. '\n'
end
function p.isSubpage(frame)
local title = mw.title.getCurrentTitle();
return ';isSubpage\n:' .. tostring(title.isSubpage) .. '\n'
end
function p.isTalkPage(frame)
local title = mw.title.getCurrentTitle();
return ';isTalkPage\n:' .. tostring(title.isTalkPage) .. '\n'
end
function p.nsText(frame)
local title = mw.title.getCurrentTitle();
return ';nsText\n:' .. title.nsText .. '\n'
end
function p.prefixedText(frame)
local title = mw.title.getCurrentTitle()
return ';prefixedText\n:' .. title.prefixedText .. '\n'
end
function p.rootText(frame)
local title = mw.title.getCurrentTitle()
return ';rootText\n:' .. title.rootText .. '\n'
end
function p.subjectNsText(frame)
local title = mw.title.getCurrentTitle()
return ';subjectNsText\n:' .. title.subjectNsText .. '\n'
end
function p.subpageText(frame)
local title = mw.title.getCurrentTitle()
return ';subpageText\n:' .. title.subpageText .. '\n'
end
function p.text(frame)
local title = mw.title.getCurrentTitle()
return ';text\n:' .. title.text .. '\n'
end
function p.isSubpageOf(frame)
local title = mw.title.getCurrentTitle();
local text = mw.text.trim(frame.args[1])
local namespace = mw.text.trim(frame.args[2])
local title2 = mw.title.new(text, namespace)
return ';isSubpageOf:' ..namespace .. ':' .. text .. '\n:' .. tostring(title:isSubpageOf(title2)) .. '\n'
end
function p.getContent(frame)
local text = mw.text.trim(frame.args[1])
local namespace = mw.text.trim(frame.args[2])
local title = mw.title.new(text, namespace)
return ';getContent\n' .. title:getContent() .. '\n'
end
function p.newtitleobject(frame)
local text = mw.text.trim(frame.args[1])
local namespace = mw.text.trim(frame.args[2])
local title = mw.title.new(text, namespace)
return ';mw.title.new()\n:' .. title.id .. ' - ' .. title.fullText .. '\n'
end
return p
Tester votre nouveau script
[modifier | modifier le wikicode]- Rendez-vous sur "votre page de test" ou utiliser la page de discussion de cette leçon.
- Ajouter le code suivant et enregistrer la page:
{{#invoke:Sandbox|baseText}} {{#invoke:Sandbox|canTalk}} {{#invoke:Sandbox|exists}} {{#invoke:Sandbox|fileExists}} {{#invoke:Sandbox|fragment}} {{#invoke:Sandbox|fullText}} {{#invoke:Sandbox|id}} {{#invoke:Sandbox|inNamespace}} {{#invoke:Sandbox|inNamespaces}} {{#invoke:Sandbox|interwiki}} {{#invoke:Sandbox|isContentPage}} {{#invoke:Sandbox|isExternal}} {{#invoke:Sandbox|isLocal}} {{#invoke:Sandbox|isRedirect}} {{#invoke:Sandbox|isSpecialPage}} {{#invoke:Sandbox|isSubpage}} {{#invoke:Sandbox|isTalkPage}} {{#invoke:Sandbox|nsText}} {{#invoke:Sandbox|prefixedText}} {{#invoke:Sandbox|rootText}} {{#invoke:Sandbox|subjectNsText}} {{#invoke:Sandbox|subpageText}} {{#invoke:Sandbox|text}} {{#invoke:Sandbox|isSubpageOf|Laboratoire|Discussion Projet}} {{#invoke:Sandbox|getContent|Laboratoire/Lua/Introduction|Discussion Projet}} {{#invoke:Sandbox|newtitleobject|Sandbox|Module}}
Le résultat doit correspondre à ceci
[modifier | modifier le wikicode]
- baseText
- Informatique/Programmation/Lua
- canTalk
- true
- exists
- true
- fileExists
- nil
- fragment
- fullText
- Discussion:Informatique/Programmation/Lua/Title
- id
- 59771
- inNamespace
- false
- inNamespaces
- false
- interwiki
- isContentPage
- false
- isExternal
- false
- isLocal
- true
- isRedirect
- false
- isSpecialPage
- false
- isSubpage
- true
- isTalkPage
- true
- nsText
- Discussion
- prefixedText
- Discussion:Informatique/Programmation/Lua/Title
- rootText
- Informatique
- subjectNsText
- ????
- subpageText
- Title
- text
- Informatique/Programmation/Lua/Title
- isSubpageOf
- Discussion:Informatique/Programmation
- true
- getContent
Bienvenus aux lecteurs
[modifier | modifier le wikicode]Un message spécial aux lecteurs de la leçon Scribunto objet Title. Ils découvrent le contenu le cette page de discussion Discussion:Informatique/Programmation/Lua/Introduction ; par le biais de Scribunto, le Wikitexte est interprété, les modèles ne sont pas transclus.
{{Traduit de|en|Lua/Introduction|8 janvier 2016|33959}}
PS: Si vous souhaitez participer au document, un modèle de page où leçon est disponible Modèle pour ce document. Youni Verciti (discussion) 23 avril 2016 à 15:36 (UTC)
- mw.title.new()
- 58915 - Module:Sandbox
Comprendre le nouveau script
[modifier | modifier le wikicode]Pou comprendre votre nouveau script Lua:
local title = mw.title.getCurrentTitle()
récupère l'objet titre de la page courante et l'assigne à la variable nomméetitle
. Chaque objet titre dispose de toutes les propriétés suivantes:title.canTalk
retourne vrai si le titre (contenu dans l'objet) peut avoir une page de discussion.title.baseText
retourne la base, la première partie du titre, où la page parent si il s'agit d'une sous-page.title.exists
retourne vrai si le titre existe.title.fileExists
retourne vrai si le fichier ou l'image existe.title.fragment
retourne l'indicateur de fragment plus connu sous le nom#Tag
, s'il existe.title.fullText
retourne le texte complet du titre de la page.title.id
retourne l'identifiant unique de la page.title:inNamespace(0)
retourne vrai si le titre de la page est dans l'espace de noms donné.title:inNamespaces(0)
retourne vrai si le titre de la page est dans l'un des espaces de noms donnés...title.interwiki
retourne le préfixe interwiki du titre, s'il existe.title.isContentPage
indique si la page est dans un espace de noms de contenu.title.isExternal
retourne vrai si le titre dispose d'un préfixe interwiki.title.isLocal
retourne vrai si le titre est dans ce projet wiki.title.isRedirect
retourne vrai si le titre est une redirection.title.isSpecialPage
retourne vrai si le titre est une page spéciale.title.isSubpage
retourne vrai si le titre correspond à une sous-page.title.isTalkPage
retourne vrai si le titre correspond à une page de discussion.title.nsText
retourne le texte de l'espace de noms correspondant à l'objet titre.title.prefixedText
retourne le titre de la page, avec l'espace de noms et le prefixe interwiki affichés.title.rootText
retourne la partie dite racine du titre, sans aucun préfixe.title.subjectNsText
le nom de l'espace de noms sujet de la page...title.subpageText
si c'est une sous-page, juste le nom de la sous-page. Sinon identique àtitle.text
.title.text
retourne le texte du titre sans préfixes.title:isSubpageOf(title2))
retourne vrai si le titre correspond à une sous-page de la page donnée en argumenttitle2
.title:getContent()
retourne le texte complet de la page.mw.text.trim
supprime d’éventuels espaces inutiles, les argumentsframe.args[x]
passés au module sont affectés aux variablestext
etnamespace
.local title = mw.title.new(text, namespace)
crée un nouvel objet titre selon les paramètres passés au module. Pour transclure les modèles utiliser frame:expandTemplate().mw.title.new(text, namespace)
la fonction MediaWiki title.new créé un nouvel objet titre avec les argumentstext
etnamespace
passés lors de l'appel au module par{{#INVOKE...}}
.
Conclusion
[modifier | modifier le wikicode]Félicitation! Vous êtes capable de créer, tester et comprendre un script Lua qui contient des fonctions de la librairie Title de la bibliothèque Scribunto. Retourner à la page principale et choisissez une autre leçon Lua et Scribuntu pour MediaWiki.
Voir aussi
[modifier | modifier le wikicode]Références
[modifier | modifier le wikicode]