Initiation au Lua avec Scribunto/Librairie Site
Présentation de la librairie Site
modifierLa librairie Site permet d'obtenir des renseignements sur le projet sur lequel le programme Lua tourne.
Objets de la librairie Site
modifierLes 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
modifiermw.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 :
55228 pages.
16900 articles.
83 fichiers.
946008 éditions.
76897 utilisateurs.
51 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
modifiermw.site.stats.usersInGroup( group )
Retourne le nombre d'utilisateurs dans le groupe indiqué.
mw.site.stats.pagesInCategory
modifiermw.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
modifiermw.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 :
20802 pages dans l'espace principal.
3497 pages dans l'espace discussion.
4843 pages dans l'espace utilisateur.
7449 pages dans l'espace discussion utilisateur.
1734 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.
1872 pages dans l'espace recherche.
482 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 900 pages dans l'espace principal. C'est parce-que les redirections ne sont pas comptées.
mw.site.siteName
modifierLa valeur de $wgSitename.
mw.site.currentVersion
modifierUne chaîne contenant la version actuelle de MediaWiki.
mw.site.interwikiMap
modifiermw.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
modifierTable contenant uniquement les espaces de nom de discussion, indexé par leur numéro. Voir mw.site.namespaces.
mw.site.scriptPath
modifierLa valeur de $wgScriptPath.
mw.site.server
modifierLa valeur de $wgServer.
mw.site.stylePath
modifierLa valeur de $wgStylePath.
mw.site.namespaces
modifierTable 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
modifierTable contenant uniquement les espaces de nom de sujets, indexés par leur numéro. Voir mw.site.namespaces.
mw.site.contentNamespaces
modifierTable contenant uniquement les espaces de nom de contenu, indexés par leur numéro. Voir mw.site.namespaces.