Initiation au Lua avec Scribunto/L'objet Title

Début de la boite de navigation du chapitre

Nous devons pas perdre de vue que le Lua a été implanté avec Scribunto afin de faciliter la gestion des pages se trouvant dans les différents projets de la fondation Wikimédia. Nous allons donc voir, dans ce chapitre, comment accéder à ces pages et plus précisément, comment accéder à divers renseignements concernant ces pages. Que ce soit le contenu des pages, le titre, ou d'autres renseignements, nous allons voir que nous disposons de toute une palette de fonctions utiles et pratiques qu’il nous faut bien maîtriser.

L'objet Title
Icône de la faculté
Chapitre no 13
Leçon : Initiation au Lua avec Scribunto
Chap. préc. :L'objet Frame
Chap. suiv. :L'objet URI

Exercices :

Sur l’objet Title
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Initiation au Lua avec Scribunto : L'objet Title
Initiation au Lua avec Scribunto/L'objet Title
 », n'a pu être restituée correctement ci-dessus.

L'objet Title modifier

La librairie Title modifier

Dans ce paragraphe, nous allons étudier en détail les fonctions se trouvant dans la librairie Title.


mw.title.new modifier

Cette commande est essentielle car c’est elle qui va créer un nouvel objet Title concernant la page passée en argument. Cette commande renvoie une table contenant tout ce qui est nécessaire pour obtenir des renseignements concernant la page rentrée en argument. Par exemple :

après :

local title1 = mw.title.new(page1)
local title2 = mw.title.new(page2)

Les tables title1 et title2 contiendront tout ce qui est nécessaire pour obtenir des renseignements respectivement sur les pages dont les noms sont contenus dans les variables page1 et page2.

Comme exemple d'application, voir tous les exemples donnés ci-dessous car, sans cette commande, aucun accès aux pages n'est possible.


  Nous devons aussi notez que cette commande est très vorace en temps d'exécution. En conséquence, il n’est pas autorisé de l’utiliser plus de 99 fois dans une même page. Voir : mw:Manual:$wgExpensiveParserFunctionLimit


  Contrairement à ce que l’on pourrait croire à priori, si la page entrée en argument n'existe pas, un objet title est tout de même créé. C'est à l'intérieur de cet objet title que l’on aura des indications sur l'existence ou non de la page

mw.title.equals modifier

mw.title.compare modifier

mw.title.getCurrentTitle modifier

Cette fonction crée un objet Title comme le ferait la fonction title.new mais concernant la page ou se trouve le module contenant la fonction. Si le module contenant cette fonction se trouve dans un modèle, la fonction retournera le titre de la page dans laquelle le modèle est placé.


Pour un exemple d'utilisation, voir le sous- paragraphe title.text plus bas, dans cette page.


mw.title.makeTitle modifier

Nous avons ici une troisième fonction qui créé un objet Title. Sa particularité est que le titre de la page, dont on veut créer l’objet Title, est fourni par morceaux à travers ses paramètres.

mw.title.makeTitle(Espace,titre,fragment, interwiki)

Pour le paramètre espace, on rentrera le numéro ou le nom de l'espace où se trouve la page.

Pour la Wikiversité, nous donnons la correspondance entre le numéro d'espace et le nom d'espace dans le tableau suivant :

  • 0 : Espace principal.
  • 1 : Discussion de l'espace principal.
  • 2 : Espace utilisateur.
  • 3 : Espace discussion utilisateur.
  • 4 : Espace Wikiversité.
  • 5 : Espace discussion Wikiversité.
  • 6 : Espace fichier.
  • 7 : Espace discussion fichier.
  • 8 : Espace média wiki.
  • 9 : Espace discussion média wiki.
  • 10 : Espace modèle.
  • 11 : Espace discussion modèle.
  • 12 : Espace aide.
  • 13 : Espace discussion aide.
  • 14 : Espace catégorie.
  • 15 : Espace discussion catégorie.
  • 102 : Espace projet
  • 103 : Espace discussion projet
  • 104 : Espace recherche
  • 105 : Espace discussion recherche
  • 106 : Espace faculté
  • 107 : Espace discussion faculté
  • 108 : Espace département
  • 109 : Espace discussion département
  • 110 : Espace transwiki
  • 111 : Espace discussion transwiki
  • 828 : Espace module
  • 829 : Espace discussion module



Pour le paramètre titre, on rentrera le titre de la page, sans préfixe.


Pour le paramètre fragment, on rentrera le fragment. Qu’est ce qu'un fragment ? voir à le propos la page Identificateur de fragment


Pour le paramètre interwiki, voir la page Interwiki


Les deux derniers paramètres fragment et interwiki sont facultatifs (ouf!)


 

Question : Pourquoi s’embêter avec la fonction mw.title.makeTitle ? Pourquoi ne pas prendre la fonction mw.title.new et taper simplement en paramètre le nom de la page avec son préfixe ?

Réponse : Pour des besoins de programmation, les paramètres de la fonction mw.title.makeTitle peuvent être variables et sont fournis par d'autres fonctions ou des variables. En fait la fonction mw.title.makeTitle se trouvera dans un module placé dans un modèle qui sera placé dans un grand nombre de pages et l’objet Title que l’on voudra obtenir dépendra de la page où est placé le modèle.


Nous donnons ci-dessous un exemple simple :

local p = {}

function p.creation(frame)
	local reponse = ""
	local title = mw.title.makeTitle(frame.args[1],frame.args[2])
	reponse = reponse.."<br>Le titre de la page dont on vient de créer l’objet Title est : "..title.prefixedText
	return reponse
end

return p

(Voir title.prefixedText que nous avons utilisé dans le programme)


{{#invoke:Title|creation|12|Maintenance à l'aide du Lua}} nous donne :
Le titre de la page dont on vient de créer l’objet Title est : Aide:Maintenance à l'aide du Lua


Objets en relation avec l’objet Title modifier

Tous les exemples de ce paragraphe se trouvent dans le Module:Title


Les objets que nous allons étudier dans ce paragraphe se trouvent dans l’objet Title. Nous commencerons donc par écrire une fonction p.visualisation permettant de les visualiser.


local p = {}

function p.visualisation(frame)
	title = mw.title.new(frame.args[1])
	reponse = ""
	for index, objet in pairs(title) do
		reponse = reponse.."<br />À la clé '''"..index.."''', on trouve un objet de type : "..type(objet)
	end
	return reponse
end

return p


{{#invoke:Title|visualisation|{{PAGENAME}}}} nous donne :
À la clé isRedirect, on trouve un objet de type : boolean
À la clé fullUrl, on trouve un objet de type : function
À la clé canonicalUrl, on trouve un objet de type : function
À la clé fragment, on trouve un objet de type : string
À la clé subjectPageTitle, on trouve un objet de type : table
À la clé nsText, on trouve un objet de type : string
À la clé thePartialUrl, on trouve un objet de type : string
À la clé text, on trouve un objet de type : string
À la clé prefixedText, on trouve un objet de type : string
À la clé isTalkPage, on trouve un objet de type : boolean
À la clé exists, on trouve un objet de type : boolean
À la clé talkPageTitle, on trouve un objet de type : table
À la clé inNamespace, on trouve un objet de type : function
À la clé isSubpageOf, on trouve un objet de type : function
À la clé canTalk, on trouve un objet de type : boolean
À la clé rootText, on trouve un objet de type : string
À la clé hasSubjectNamespace, on trouve un objet de type : function
À la clé partialUrl, on trouve un objet de type : function
À la clé isSubpage, on trouve un objet de type : boolean
À la clé isLocal, on trouve un objet de type : boolean
À la clé talkNsText, on trouve un objet de type : string
À la clé basePageTitle, on trouve un objet de type : table
À la clé baseText, on trouve un objet de type : string
À la clé interwiki, on trouve un objet de type : string
À la clé isExternal, on trouve un objet de type : boolean
À la clé subjectNsText, on trouve un objet de type : string
À la clé isSpecialPage, on trouve un objet de type : boolean
À la clé subPageTitle, on trouve un objet de type : function
À la clé inNamespaces, on trouve un objet de type : function
À la clé id, on trouve un objet de type : number
À la clé subpageText, on trouve un objet de type : string
À la clé localUrl, on trouve un objet de type : function
À la clé redirectTarget, on trouve un objet de type : boolean
À la clé isContentPage, on trouve un objet de type : boolean
À la clé fullText, on trouve un objet de type : string
À la clé cascadingProtection, on trouve un objet de type : table
À la clé rootPageTitle, on trouve un objet de type : table
À la clé contentModel, on trouve un objet de type : string
À la clé protectionLevels, on trouve un objet de type : table
À la clé namespace, on trouve un objet de type : number
À la clé getContent, on trouve un objet de type : function


Nous voyons que nous avons un grand nombre d'objets à étudier, alors ne perdons pas de temps !


title.Redirect modifier

title.Redirect indique si la page est une redirection.


Exemple :

local p = {}

function p.redirection(frame)
	local page = frame.args[1]
	local title = mw.title.new(page)
	if title.Redirect then
		return "<br />La page '''"..page.."''' est une redirection."
	else
		return "<br />La page '''"..page.."''' n’est pas une redirection."
	end
end

return p

{{#invoke:Title|redirection|Bac à sable}} nous donne :
La page Bac à sable n’est pas une redirection.


{{#invoke:Title|redirection|Aide:Maintenance à l'aide du Lua}} nous donne :
La page Aide:Maintenance à l'aide du Lua n’est pas une redirection.


(Et l’on constate que cela ne marche pas ! un bon point pour celui qui trouvera pourquoi ! )


title.fullUrl modifier


title.fullUrl est de type function. title.fullUrl(query, proto) Retourne l'URL complète de la page (avec optionnellement un "query", une chaîne ou une table). proto est optionnel et permet de préciser "http", "https", "relative" (par défaut), ou "canonical".


title.canonicalUrl modifier


title.canonicalUrl est de type function. title.canonicalUrl(query) retourne l'URL canonique de la page (avec optionnellement un "query", une chaîne ou une table)


title.fragment modifier


title.fragment est de type string et donne le fragment (voir w:Identificateur de fragment).


title.subjectPageTitle modifier


identique à mw.title.makeTitle( mw.site.namespaces[title.namespace].subject.id, title.text ).


title.isExternal modifier


indique si la page a un interwiki


title.thePartialUrl modifier


title.text modifier

title.text contient le titre de la page concernée par l’objet Title. On imagine facilement qu’il serait absurde de créer un objet Title en utilisant la fonction mw.title.new pour avoir le titre d'une page car justement le titre de la page est fourni en argument à la fonction mw.title.new. L'objet Title sera donc, dans ce cas, logiquement fourni par la fonction mw.title.getCurrentTitle ou par la fonction mw.title.makeTitle.


Écrivons, par exemple, une fonction p.titre qui nous indique le titre de la page que nous sommes en train de lire !

local p = {}

function p.titre()
	local titr = mw.title.getCurrentTitle()
	return "Le titre de cette page est : "..titr.text
end

return p

{{#invoke:Title|titre}} nous donne : Le titre de cette page est : Initiation au Lua avec Scribunto/L'objet Title


title.prefixedText modifier

title.prefixedText est de type string. Cette variable contient le titre de la page avec l'espace de noms ainsi que l'interwiki.

Si l’on souhaite avoir en plus le fragment, on utilisera à la place title.fullText

Donnons un exemple :

Le programme, ci-dessous, créé un objet Title et affiche le nom complet de la page concernée

local p = {}

function p.creation(frame)
	local reponse = ""
	local title = mw.title.makeTitle(frame.args[1],frame.args[2])
	reponse = reponse.."<br>Le titre de la page dont on vient de créer l’objet Title est : "..title.prefixedText
	return reponse
end

return p


{{#invoke:Title|creation|Aide|Maintenance à l'aide du Lua}} nous donne :
Le titre de la page dont on vient de créer l’objet Title est : Aide:Maintenance à l'aide du Lua


title.isTalkPage modifier

indique si la page est une page de discussion

Exemple :

local p = {}

function p.discussion(frame)
	local page = frame.args[1]
	local title = mw.title.new(page)
	if title.isTalkPage then
		return "<br />La page '''"..page.."''' est une page de discussion."
	else
		return "<br />La page '''"..page.."''' n’est pas une page de discussion."
	end
end

return p

{{#invoke:Title|discussion|Discussion:Initiation au Lua avec Scribunto}} nous donne :
La page Discussion:Initiation au Lua avec Scribunto est une page de discussion.


{{#invoke:Title|discussion|Aide:Maintenance à l'aide du Lua}} nous donne :
La page Aide:Maintenance à l'aide du Lua n’est pas une page de discussion.


title.exists modifier

C'est un booléen qui nous indique si la page existe. Ceci peut paraître bizarre dans la mesure où l’on pourrait croire que, si une page n'existe pas, la fonction mw.title.new() devrait nous retourner nil. C'est faux ! Si la page n'existe pas alors l’objet title est tout de même créé, mais le booleen title.exists sera à false. Nous allons vérifier ce que l’on vient de dire en faisant un programme qui nous indique si, d'une part, l’objet title existe et si, d’autre part, la page associée à cet objet title existe.


local p = {}

function p.existe(frame)
	local reponse = ""
	local page = frame.args[1]
	local title = mw.title.new(page)
	if title then
		reponse = reponse.."L'objet title existe "
	else
		reponse = reponse.."L'objet title n'existe pas "
	end
	if title.exists then
		reponse = reponse.."et la page existe. "
	else
		reponse = reponse.."et la page n'existe pas. "
	end
	return reponse
end

return p


{{#invoke:Title|existe|Bof}} nous donne : L'objet title existe et la page n'existe pas.


{{#invoke:Title|existe|Aide:Maintenance à l'aide du Lua}} nous donne : L'objet title existe et la page existe.


title.talkPageTitle modifier

Cette commande est identique à mw.title.makeTitle( mw.site.namespaces[title.namespace].talk.id, title.text ), ou à nil si la page ne peut pas avoir de page de discussion.

Plus simplement, cette commande créé un objet title pour la page de discussion associée à la page dont on a créé un objet title appelé title

Par exemple si, sur la Wikiversité, on a créé un objet title pour une page de l'espace principal appelé title, cette commande est identique a mw.title.makeTitle( 1 , title.text ). Car 1 est le numéro d'espace pour une page de discussion de l'espace principal.


title.inNamespace modifier


title.inNamespace est de type function. title.inNamespace(ns) indique si la page est dans l'espace de noms indiqué. ns peut être toute clé trouvée dans mw.site.namespaces.


title.isSubpageOf modifier


title.isSubpageOf est de type function. title.isSubpageOf(title2) indique si la page est une sous-page de title2.


title.canTalk modifier

indique si la page peut avoir une page de discussion

Exemple :

local p = {}

function p.discute(frame)
	local page = frame.args[1]
	local title = mw.title.new(page)
	if title.canTalk then
		return "<br />La page '''"..page.."''' peut avoir une page de discussion."
	else
		return "<br />La page '''"..page.."''' ne peut pas avoir une page de discussion."
	end
end

return p

{{#invoke:Title|discute|Spécial:Nouvelles pages}} nous donne :
La page Spécial:Nouvelles pages ne peut pas avoir une page de discussion.


{{#invoke:Title|discute|Aide:Maintenance à l'aide du Lua}} nous donne :
La page Aide:Maintenance à l'aide du Lua peut avoir une page de discussion.


title.getContent modifier

Cette commande retourne le contenu de la page concernée par l’objet Title. Contrairement à ce que l’on pourrait penser a priori, l'argument de cette commande est l’objet Title retourné par la commande mw.title.new et pas le nom de la page dont on extrait le contenu. Par exemple, on écrira :

local title = mw.title.new(page)
local texte = title.getContent(title)

C'est-à-dire que l’on commence par créer un objet Title (ici la table title) et on passe cette table comme argument de la fonction title.getContent pour recueillir dans la variable texte le contenu de la page dont le titre était dans la variable page.

 

Question : Pourquoi n'existe-t-il pas une fonction qui permettrait d'obtenir directement le contenu d'une page en donnant le nom de cette page en argument ? Ce qui éviterait la création d'un objet Title et devrait permettre ainsi de gagner en temps d'exécution !

Réponse : (Si vous avez la réponse à cette question, veuillez remplacer cette phrase entre parenthèse par celle-ci)


Donnons un exemple concret en écrivant une fonction p.mot qui permet de dire si un mot se trouve dans la page : Statique/Présentation de la leçon.

local p = {}

function p.mot(frame)
	local mot = frame.args[1]
	local page = "Statique/Présentation de la leçon"
	local title = mw.title.new(page)
	local texte = title.getContent(title)
	local position = mw.ustring.find(texte,mot)
	if position then
		return "Le mot "..mot.." a été trouvé en position "..position
	else
		return "Le mot "..mot.." n'a pas été trouvé dans la page"
	end
end

return p

{{#invoke:Title|mot|système}} nous donne : Le mot système a été trouvé en position 78

{{#invoke:Title|mot|cacahuète}} nous donne : Le mot cacahuète n'a pas été trouvé dans la page


title.hasSubjectNamespace modifier

hasSubjectNamespace est de type function. hasSubjectNamespace(ns) indique si l'espace de noms sujet de la page est dans l'espace de noms indiqué. ns peut être toute clé trouvée dans mw.site.namespaces


title.partialUrl modifier


title.partialUrl est de type function. title.partialUrl(text) retourne text encodé comme une URL


title.isSubpage modifier

Indique si la page est une sous-page.

Exemple :

local p = {}

function p.souspage(frame)
	local page = frame.args[1]
	local title = mw.title.new(page)
	if title.isSubpage then
		return "<br />La page '''"..page.."''' est une sous-page."
	else
		return "<br />La page '''"..page.."''' n’est pas une sous-page."
	end
end

return p

{{#invoke:Title|souspage|Initiation au Lua avec Scribunto/L'objet Frame}} nous donne :
La page Initiation au Lua avec Scribunto/L'objet Frame est une sous-page.


{{#invoke:Title|souspage|Aide:Maintenance à l'aide du Lua}} nous donne :
La page Aide:Maintenance à l'aide du Lua n’est pas une sous-page.


title.isSpecialPage modifier

Indique si la page est dans l'espace de noms "Spécial:"

Exemple :

local p = {}

function p.special(frame)
	local page = frame.args[1]
	local title = mw.title.new(page)
	if title.isSpecialPage then
		return "<br />La page '''"..page.."''' est une page spéciale."
	else
		return "<br />La page '''"..page.."''' n’est pas une page spéciale."
	end
end

return p

{{#invoke:Title|special|Spécial:Nouvelles pages}} nous donne :
La page Spécial:Nouvelles pages est une page spéciale.


{{#invoke:Title|special|Aide:Maintenance à l'aide du Lua}} nous donne :
La page Aide:Maintenance à l'aide du Lua n’est pas une page spéciale.


title.basePageTitle modifier

title.basePageTitle est une fonction qui retourne un nouvel objet title. Si title est un objet title concernant une sous-page, alors title.basePageTitle retourne un objet title concernant la page ayant pour sous-page, la sous-page du premier objet title.

Plus précisément, si title est par exemple l’objet title de la page : Recherche:Les asticots/Introduction, title.basePageTitle retournera un objet title associé à la page : Recherche:Les asticots

Bien sur, si le premier objet title concerne une page qui n’est pas une sous-page, le deuxième objet title, créé par title.basePageTitle, concernera la même page


Écrivons un petit programme pour mieux comprendre la syntaxe et voir l'effet sur différents types de pages :

local p = {}

function p.basepagetitle(frame)
	local reponse = ""
	local page = frame.args[1]
	local title = mw.title.new(page)
	local titlebase = title.basePageTitle
	reponse = reponse.."<br>Le premier objet title concerne la page : "..title.prefixedText
	reponse = reponse.."<br>Le deuxième objet title concerne la page : "..titlebase.prefixedText
	return reponse
end

return p


{{#invoke:Title|basepagetitle|Bof/Niouf}} nous donne :
Le premier objet title concerne la page : Bof/Niouf
Le deuxième objet title concerne la page : Bof (bien que la page Bof/Niouf n'existe pas!)


{{#invoke:Title|basepagetitle|Aide:Maintenance à l'aide du Lua}} nous donne :
Le premier objet title concerne la page : Aide:Maintenance à l'aide du Lua
Le deuxième objet title concerne la page : Aide:Maintenance à l'aide du Lua


{{#invoke:Title|basepagetitle|Recherche:Les fonds patrimoniaux des bibliothèques publiques/Parchemin et cuir}} nous donne :
Le premier objet title concerne la page : Recherche:Les fonds patrimoniaux des bibliothèques publiques/Parchemin et cuir
Le deuxième objet title concerne la page : Recherche:Les fonds patrimoniaux des bibliothèques publiques


Nous voyons aussi que title.basePageTitle est identique à mw.title.makeTitle(title.namespace,title.baseText)


title.baseText modifier

title.baseText est un objet de type string. Si l’on a affaire à une sous-page, title.baseText donne le titre de la page dont c’est la sous-page, sans préfixe d'espace. Sinon title.baseText a le même effet que title.text. Nous voyons alors que title.baseText est l'équivalent de {{BASEPAGENAME}} dans la syntaxe wiki. Écrivons un petit programme pour voir comment se comporte title.baseText avec un choix de page donnée en argument :

local p = {}

function p.base(frame)
	local reponse = ""
	local page = frame.args[1]
	local title = mw.title.new(page)
	reponse = reponse.."Pour la page : '''"..page.."''', ''title.baseText'' nous donne : '''"..title.baseText.."'''."
	return reponse
end

return p


{{#invoke:Title|base|Bof/Niouf}} nous donne : Pour la page : Bof/Niouf, title.baseText nous donne : Bof. (bien que la page Bof/Niouf n'existe pas!)


{{#invoke:Title|base|Aide:Maintenance à l'aide du Lua}} nous donne : Pour la page : Aide:Maintenance à l'aide du Lua, title.baseText nous donne : Maintenance à l'aide du Lua.


{{#invoke:Title|base|Recherche:Les fonds patrimoniaux des bibliothèques publiques/Parchemin et cuir}} nous donne : Pour la page : Recherche:Les fonds patrimoniaux des bibliothèques publiques/Parchemin et cuir, title.baseText nous donne : Les fonds patrimoniaux des bibliothèques publiques.


title.nsText modifier


title.nsText est de type string et donne le nom de l'espace de noms de la page concernée.


title.isLocal modifier

Indique si la page est locale au projet. Par exemple sur en: tous les Wikipédias sont considérés comme locaux mais pas les Wiktionnaires.

Exemple :

local p = {}

function p.locale(frame)
	local page = frame.args[1]
	local title = mw.title.new(page)
	if title.isLocal then
		return "<br />La page '''"..page.."''' est locale au projet."
	else
		return "<br />La page '''"..page.."''' n’est pas locale au projet."
	end
end

return p

{{#invoke:Title|locale|Initiation au Lua avec Scribunto}} nous donne :
La page Initiation au Lua avec Scribunto est locale au projet.


{{#invoke:Title|locale|en:wikt:amandantium}} nous donne :
La page en:wikt:amandantium est locale au projet.


(ça n'a pas l'air de marcher, à revoir)


title.fullText modifier


title.fullText est de type string et donne le titre de la page, avec l'espace de nom, l'interwiki et le fragment.


title.subPageTitle modifier


title.subPageTitle est de type function. subPageTitle(text) est identique à mw.title.makeTitle( title.namespace, title.text .. '/' .. text )


title.inNamespaces modifier


title.inNamespaces est de type function. title.inNamespaces(...) indique si la page est dans l'un des espaces de nom indiqués. Les espaces de noms peuvent être toute clé trouvée dans mw.site.namespaces.


title.id modifier

C'est un objet de type number qui nous donne l'identifiant de la page. Chaque page créée sur un Wiki a un identifiant. La première page créée a l'identifiant 1. La deuxième page créée a l'identifiant 2 et ainsi de suite. Si la page n'existe pas, ce nombre sera égal à 0. Nous allons vérifier ce que l’on vient de dire en faisant un programme qui nous indique si la page entrée en argument existe et quel est son identifiant.


local p = {}

function p.identifiant(frame)
	local reponse = ""
	local page = frame.args[1]
	local title = mw.title.new(page)
	if title.exists then
		reponse = reponse.."La page existe. "
	else
		reponse = reponse.."La page n'existe pas. "
	end
	reponse = reponse.."L'identifiant de la page est "..title.id
	return reponse
end

return p


{{#invoke:Title|identifiant|Bof}} nous donne : La page n'existe pas. L'identifiant de la page est 0


{{#invoke:Title|identifiant|Aide:Maintenance à l'aide du Lua}} nous donne : La page existe. L'identifiant de la page est 51770


title.subpageText modifier

title.subpageText est un objet de type string. Si l’on a affaire à une sous-page, title.subpageText donne le suffixe de la page. Sinon title.subpageText a le même effet que title.text. Nous voyons alors que title.subpageText est l'équivalent de {{SUBPAGENAME}} dans la syntaxe wiki. Écrivons un petit programme pour voir comment se comporte title.subpageText avec un choix de page donnée en argument :

local p = {}

function p.subpage(frame)
	local reponse = ""
	local page = frame.args[1]
	local title = mw.title.new(page)
	reponse = reponse.."Pour la page : '''"..page.."''', ''title.subpageText'' nous donne : '''"..title.subpageText.."'''."
	return reponse
end

return p


{{#invoke:Title|subpage|Bof/Niouf}} nous donne : Pour la page : Bof/Niouf, title.subpageText nous donne : Niouf. (bien que la page Bof/Niouf n'existe pas!)


{{#invoke:Title|subpage|Aide:Maintenance à l'aide du Lua}} nous donne : Pour la page : Aide:Maintenance à l'aide du Lua, title.subpageText nous donne : Maintenance à l'aide du Lua.


{{#invoke:Title|subpage|Recherche:Les fonds patrimoniaux des bibliothèques publiques/Parchemin et cuir}} nous donne : Pour la page : Recherche:Les fonds patrimoniaux des bibliothèques publiques/Parchemin et cuir, title.subpageText nous donne : Parchemin et cuir.


title.subjectNsText modifier


title.subjectNsText est de type string et donne le nom de l'espace de noms sujet de la page.


title.rootText modifier


title.rootText est de type string et donne le titre de la page de base sans préfixe si l’on se trouve dans une sous-page. Sinon est identique à title.text.


indique si la page est une sous-page


title.isContentPage modifier

Indique si la page est dans un espace de noms de contenu.

Exemple :

local p = {}

function p.contenu(frame)
	local page = frame.args[1]
	local title = mw.title.new(page)
	if title.isContentPage then
		return "<br />La page '''"..page.."''' est une page de contenu."
	else
		return "<br />La page '''"..page.."''' n’est pas une page de contenu."
	end
end

return p

{{#invoke:Title|contenu|Initiation au Lua avec Scribunto}} nous donne :
La page Initiation au Lua avec Scribunto est une page de contenu.


{{#invoke:Title|contenu|Bac à sable}} nous donne :
La page Bac à sable est une page de contenu.


{{#invoke:Title|contenu|Recherche:Évolution prébiotique}} nous donne :
La page Recherche:Évolution prébiotique est une page de contenu.


{{#invoke:Title|contenu|Faculté:Informatique}} nous donne :
La page Faculté:Informatique n’est pas une page de contenu.


{{#invoke:Title|contenu|Aide:Maintenance à l'aide du Lua}} nous donne :
La page Aide:Maintenance à l'aide du Lua n’est pas une page de contenu.


Il semblerait que seules les pages de l'espace principal, y compris les redirections, soient des pages de contenu.


title.cascadingProtection modifier


title.rootPageTitle modifier


identique à mw.title.makeTitle( title.namespace, title.rootText )


title.localUrl modifier


title.localUrl est de type function. title.localUrl(query) retourne l'URL locale de la page (avec optionnellement un "query", une chaîne ou une table)


title.contentModel modifier


Le type de contenu pour ce titre, sous forme de chaîne. Voir mw:Manual:ContentHandler.


title.protectionLevels modifier


title.interwiki modifier


title.interwiki est de type string et donne le préfixe interwiki. S'il n'y a pas de préfixe interwiki, la chaîne de caractère retournée est vide.


title.namespace modifier

title.namespace est de type number et permet d'obtenir le numéro d'espace dans lequel se trouve la page consernée.

local p = {}

function p.num_espace(frame)
	local page = frame.args[1]
	local title = mw.title.new(frame.args[1])
	return "<br />La page '''"..page.."''' se trouve dans l'espace de numéro : ".. title.namespace
end

return p

{{#invoke:Title|num_espace|Aide:Maintenance à l'aide du Lua}} nous donne :
La page Aide:Maintenance à l'aide du Lua se trouve dans l'espace de numéro : 12