# Initiation au Lua avec Scribunto/Librairie Site
## Présentation de la librairie Site

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

## Objets de la librairie Site

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 :
{{#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

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.
{{#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é :
{{#invoke:Site|visuversite}} nous donne : La Wikiversité comprend : 54845 pages. 16862 articles. 83 fichiers. 943935 éditions. 76618 utilisateurs. 55 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

mw.site.stats.usersInGroup( group )
Retourne le nombre d'utilisateurs dans le groupe indiqué.

#### mw.site.stats.pagesInCategory

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

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é.
{{#invoke:Site|visuespace}} nous donne : La Wikiversité comprend : 20782 pages dans l'espace principal. 3496 pages dans l'espace discussion. 4838 pages dans l'espace utilisateur. 7443 pages dans l'espace discussion utilisateur. 1731 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. 3330 pages dans l'espace modèle. 192 pages dans l'espace discussion modèle. 213 pages dans l'espace aide. 32 pages dans l'espace discussion aide. 5042 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. 1601 pages dans l'espace recherche. 475 pages dans l'espace discussion recherche. 209 pages dans l'espace Faculté. 86 pages dans l'espace discussion Faculté. 2108 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 862 pages dans l'espace principal. C'est parce-que les redirections ne sont pas comptées.

#### mw.site.siteName

La valeur de $wgSitename.

#### mw.site.currentVersion

Une chaîne contenant la version actuelle de MediaWiki.

#### mw.site.interwikiMap

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

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

#### mw.site.scriptPath

La valeur de $wgScriptPath.

#### mw.site.server

La valeur de $wgServer.

#### mw.site.stylePath

La valeur de $wgStylePath.

#### mw.site.namespaces

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

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

#### mw.site.contentNamespaces

Table contenant uniquement les espaces de nom de contenu, indexés par leur numéro. Voir mw.site.namespaces.
| Librairie Message | Quelques compléments |