Initiation au Lua avec Scribunto/Librairie Site

Début de la boite de navigation du chapitre
Librairie Site
Icône de la faculté
Chapitre no 18
Leçon : Initiation au Lua avec Scribunto
Chap. préc. :Librairie Message
Chap. suiv. :Quelques compléments

Exercices :

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

Présentation de la librairie Site

modifier

La librairie Site permet d'obtenir des renseignements sur le projet sur lequel le programme Lua tourne.


Objets de la librairie Site

modifier

Les exemples de ce chapitre se trouveront dans le Module:Site


Nous commencerons par visualiser le contenu de la librairie Site grâce au programme suivant :

local p = {}

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

return p


{{#invoke:Site|visualisation}} nous donne :
À la clé stats, on trouve un objet de type : table
À la clé siteName, on trouve un objet de type : string
À la clé currentVersion, on trouve un objet de type : string
À la clé interwikiMap, on trouve un objet de type : function
À la clé talkNamespaces, on trouve un objet de type : table
À la clé scriptPath, on trouve un objet de type : string
À la clé server, on trouve un objet de type : string
À la clé stylePath, on trouve un objet de type : string
À la clé namespaces, on trouve un objet de type : table
À la clé subjectNamespaces, on trouve un objet de type : table
À la clé contentNamespaces, on trouve un objet de type : table


Nous voyons que nous avons une fonction, 5 tables et 5 chaînes de caractères.


Étudions ces objets :


mw.site.stats

modifier

mw.site.stats est une table contenant diverses statistiques. Pour nous mettre en appétit, nous commencerons donc par un programme permettant de visualiser le contenu de cette table.

local p = {}

function p.visustat()
	reponse = ""
	for index, objet in pairs(mw.site.stats) do
		reponse = reponse.."<br />À la clé "..index..", on trouve un objet de type : "..type(objet)
	end
	return reponse
end

return p


{{#invoke:Site|visustat}} nous donne :
À la clé articles, on trouve un objet de type : number
À la clé admins, on trouve un objet de type : number
À la clé usersInGroup, on trouve un objet de type : function
À la clé edits, on trouve un objet de type : number
À la clé users, on trouve un objet de type : number
À la clé pagesInCategory, on trouve un objet de type : function
À la clé files, on trouve un objet de type : number
À la clé pagesInNamespace, on trouve un objet de type : function
À la clé pages, on trouve un objet de type : number
À la clé activeUsers, on trouve un objet de type : number


Nous voyons déjà qu’il y a 7 nombres. En fait, il aurait pu y en avoir 8.


Les nombres disponibles de cette table sont :

  • pages : nombre de pages dans le wiki
  • articles : nombre d’articles dans le wiki
  • files : nombre de fichiers dans le wiki
  • edits : nombre d'éditions dans le wiki
  • views : nombre de visualisation dans le wiki. Non disponible si $wgDisableCounters est présent
  • users : nombre d'utilisateurs dans le wiki
  • activeUsers : nombre d'utilisateurs actifs dans le wiki
  • admins : nombre d'utilisateurs dans le groupe 'sysop' dans le wiki


Par curiosité, écrivons donc un autre programme donnant les statistiques de la Wikiversité :

local p = {}

function p.visuversite()
	reponse = "La Wikiversité comprend :<br />"
	reponse = reponse..mw.site.stats.pages.." pages.<br />"
	reponse = reponse..mw.site.stats.articles.." articles.<br />"
	reponse = reponse..mw.site.stats.files.." fichiers.<br />"
	reponse = reponse..mw.site.stats.edits.." éditions.<br />"
	reponse = reponse..mw.site.stats.users.." utilisateurs.<br />"
	reponse = reponse..mw.site.stats.activeUsers.." utilisateurs actifs.<br />"
	reponse = reponse..mw.site.stats.admins.." arministrateurs.<br />"
	return reponse
end

return p

{{#invoke:Site|visuversite}} nous donne : La Wikiversité comprend :
55314 pages.
16906 articles.
83 fichiers.
946834 éditions.
76983 utilisateurs.
48 utilisateurs actifs.
9 administrateurs.


Dans notre table mw.site.stats, nous avons vu qu’il y avait aussi trois fonctions. Les trois prochains paragraphes seront consacrés à étudier ces trois fonctions :


mw.site.stats.usersInGroup

modifier

mw.site.stats.usersInGroup( group )

Retourne le nombre d'utilisateurs dans le groupe indiqué.


mw.site.stats.pagesInCategory

modifier

mw.site.stats.pagesInCategory( category, which )

Cette fonction est coûteuse

Retourne des statistiques sur la catégorie. Si which est non précisé, vaut nil, ou "*", cette fonction retourne une table avec les éléments suivants :

  • all : total des éléments ci-dessous
  • subcats : nombre de sous-catégories
  • files : nombre de fichiers
  • pages : nombre de pages

Si which est l'une des clés ci-dessus seule la valeur correspondante est retournée, sous forme de nombre.

Chaque appel à cette fonction incrémente le compteur de « fonctions coûteuses ».


mw.site.stats.pagesInNamespace

modifier

mw.site.stats.pagesInNamespace( ns )

Retourne le nombre de pages dans l'espace de noms indiqué (indiqué par son numéro).

Nous allons enfin savoir combien il y a de pages dans chaque espace de la Wikiversité.

local p = {}

function p.visuespace()
	reponse = "La Wikiversité comprend :<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(0).." pages dans l'espace principal.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(1).." pages dans l'espace discussion.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(2).." pages dans l'espace utilisateur.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(3).." pages dans l'espace discussion utilisateur.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(4).." pages dans l'espace Wikiversité.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(5).." pages dans l'espace discussion Wikiversité.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(6).." pages dans l'espace fichier.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(7).." pages dans l'espace discussion fichier.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(8).." pages dans l'espace Média Wiki.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(9).." pages dans l'espace discussion Média Wiki.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(10).." pages dans l'espace modèle.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(11).." pages dans l'espace discussion modèle.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(12).." pages dans l'espace aide.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(13).." pages dans l'espace discussion aide.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(14).." pages dans l'espace catégorie.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(15).." pages dans l'espace discussion catégorie.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(102).." pages dans l'espace projet.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(103).." pages dans l'espace discussion projet.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(104).." pages dans l'espace recherche.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(105).." pages dans l'espace discussion recherche.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(106).." pages dans l'espace Faculté.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(107).." pages dans l'espace discussion Faculté.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(108).." pages dans l'espace Département.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(109).." pages dans l'espace discussion Département.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(110).." pages dans l'espace Transwiki.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(111).." pages dans l'espace discussion Transwiki.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(828).." pages dans l'espace module.<br />"
	reponse = reponse..mw.site.stats.pagesInNamespace(829).." pages dans l'espace discussion module.<br />"
	return reponse
end

return p

{{#invoke:Site|visuespace}} nous donne : La Wikiversité comprend :
20806 pages dans l'espace principal.
3498 pages dans l'espace discussion.
4843 pages dans l'espace utilisateur.
7515 pages dans l'espace discussion utilisateur.
1735 pages dans l'espace Wikiversité.
144 pages dans l'espace discussion Wikiversité.
83 pages dans l'espace fichier.
5 pages dans l'espace discussion fichier.
194 pages dans l'espace Média Wiki.
21 pages dans l'espace discussion Média Wiki.
3331 pages dans l'espace modèle.
192 pages dans l'espace discussion modèle.
213 pages dans l'espace aide.
33 pages dans l'espace discussion aide.
5043 pages dans l'espace catégorie.
751 pages dans l'espace discussion catégorie.
963 pages dans l'espace projet.
164 pages dans l'espace discussion projet.
1883 pages dans l'espace recherche.
484 pages dans l'espace discussion recherche.
209 pages dans l'espace Faculté.
86 pages dans l'espace discussion Faculté.
2110 pages dans l'espace Département.
147 pages dans l'espace discussion Département.
10 pages dans l'espace Transwiki.
5 pages dans l'espace discussion Transwiki.
380 pages dans l'espace module.
44 pages dans l'espace discussion module.

Remarque : Contrairement à ce que l’on voit ci-dessus, le mot magique {{NUMBEROFARTICLES}} nous indique seulement 16 906 pages dans l'espace principal. C'est parce-que les redirections ne sont pas comptées.


mw.site.siteName

modifier

La valeur de $wgSitename.


mw.site.currentVersion

modifier

Une chaîne contenant la version actuelle de MediaWiki.


mw.site.interwikiMap

modifier

mw.site.interwikiMap( filter )

Returns a table holding data about available interwiki prefixes. If filter is the string "local", then only data for local interwiki prefixes is returned. If filter is the string "!local", then only data for non-local prefixes is returned. If no filter is specified, data for all prefixes is returned. A "local" prefix in this context is one that is for the same project. For example, on the English Wikipedia, other-language Wikipedias are considered local, while Wiktionary and such are not.

Keys in the table returned by this function are interwiki prefixes, and the values are subtables with the following properties:

  • prefix - the interwiki prefix.
  • url - the URL that the interwiki points to. The page name is represented by the parameter $1.
  • isProtocolRelative - a boolean showing whether the URL is stored as a protocol-relative URL in the database. Note that if this is true, the URL in the "url" parameter will not be protocol-relative. Instead it will start with "http" or "https" depending on the protocol that the page is accessed with.
  • isLocal - whether the URL is for a site in the current project.
  • isCurrentWiki - whether the URL is for the current wiki.
  • isTranscludable - whether pages using this interwiki prefix are transcludable.
  • isExtraLanguageLink - whether the interwiki is listed in $wgExtraInterlanguageLinkPrefixes.
  • displayText - for links listed in $wgExtraInterlanguageLinkPrefixes, this is the display text shown for the interlanguage link. Nil if not specified.
  • tooltip - for links listed in $wgExtraInterlanguageLinkPrefixes, this is the tooltip text shown when users hover over the interlanguage link. Nil if not specified.


mw.site.talkNamespaces

modifier

Table contenant uniquement les espaces de nom de discussion, indexé par leur numéro. Voir mw.site.namespaces.


mw.site.scriptPath

modifier

La valeur de $wgScriptPath.


mw.site.server

modifier

La valeur de $wgServer.


mw.site.stylePath

modifier

La valeur de $wgStylePath.


mw.site.namespaces

modifier

Table contenant les informations sur tous les espaces de noms, indexés par leur numéro :

  • id : numéro de l'espace de noms
  • name : nom local de l'espace de noms
  • canonicalName : nom générique de l'espace de noms
  • displayName : fixé pour l'espace de noms 0 : le nom à utiliser pour affichage, car name vaut la chaîne vide sur la plupart des wikis
  • hasSubpages : est-ce que les sous-pages sont actives pour cet espace de noms
  • hasGenderDistinction : est-ce que l'espace de noms a des alias différents selon le genre
  • isCapitalized : est-ce que la première lettre des pages de cet espace de noms doit être mise en majuscule
  • isContent : est-ce un espace de noms pour du contenu
  • isIncludable : est-ce que les pages de cet espace de noms peuvent être transclues
  • isMovable : est-ce que les pages de cet espace de noms peuvent être déplacées
  • isSubject : est-ce que c’est un espace de noms de sujet (subject namespace)
  • isTalk : est un espace de noms de discussion
  • defaultContentModel : Le type de contenu par défaut pour l'espace de noms, sous forme de chaîne. (Voir mw:Manual:ContentHandler.)
  • aliases : liste des alias pour cet espace de noms
  • subject : référence vers l'espace de noms sujet de cet espace de noms
  • talk : référence vers l'espace de noms de discussion de cet espace de noms
  • associated : référence à l'espace de noms associé (Discussion MediaWiki pour MediaWiki par exemple, et vice-versa)

Une méta-table est présente pour permettre de chercher un espace de noms par son nom (localisé ou générique). Par exemple mw.site.namespaces[4] et mw.site.namespaces.Project retourneront la même chose.


mw.site.subjectNamespaces

modifier

Table contenant uniquement les espaces de nom de sujets, indexés par leur numéro. Voir mw.site.namespaces.


mw.site.contentNamespaces

modifier

Table contenant uniquement les espaces de nom de contenu, indexés par leur numéro. Voir mw.site.namespaces.