Module:Site lib2
Ce module Lua propose d’afficher les propriétés des espaces de noms de la Wikiversité, contenues dans la librairie Lua-Scribunto mw.site ; par le biais du modèle Modèle:Site.
Fonctions
modifier- p.site([clé], [,clé2])
- Affiche propriétés du site, par défaut.
- L’argument clé permet de préciser le nom du paramètre dont vous souhaitez extraire la valeur.
- stats permet de visualiser les statistiques du site ; vous pouvez préciser le paramètre de table stats, en second argument.
- p.namespace([id|nom],[clé])
- Affiche liste des espaces de noms, par défaut.
- Vous pouvez préciser le numéro où le nom de l’espace dont vous souhaitez extraire les propriétés.
- Le second argument clé permet de préciser le nom du paramètre dont vous souhaitez extraire la valeur.
- p.interwiki([local|!local|préfixe], [clé])
- Affiche la table complète des liens interwiki, local ou !local pour filtrer les liens locaux et externes.
- Présisez le préfixe pour afficher la table interwiki.
- Précisez la clé pour extraire une valeur distincte de la table correspondant au préfixe.
Références
modifier- Manuel MediaWiki
- L’ensemble répond au besoin de supervision des espaces de noms, mis en évidences dans les expériences du laboratoire.
- L’écriture du module, sert de cadre de travail, pour la leçons Perfectionnement en Lua.
local p = {}
-- Ce module vise à afficher les données de la librairie Scribunto mw.site ; en particulier mw.site.namespaces et w.site.stat.
local site = mw.site -- La variable locale récupère l’objet
local namespaces = mw.site.namespaces
function p.site(frame) -- Version 2
local parent = frame:getParent()
if parent.args[1] ~=nil then frame.args[1] = parent.args[1] end
if parent.args[2] ~=nil then frame.args[2] = parent.args[2] end
if parent.args[3] ~=nil then frame.args[3] = parent.args[3] end
local key = frame.args[1] -- frame récupère la clé
local r = site[key] -- appel la clé de la table
if frame.args[1] == nil then r = form_table(site) end -- affiche toutes les clés
if type(site[key]) == 'table' then r = form_table(site[key]) end -- affiche toutes les clés de la table reçue en argument
local key2 = frame.args[2]
if type(site[key]) == 'table' and key2 ~= nil then r = site[key][key2] end -- affiche la valeur arg2 de la table arg1
if key == 'namespace' or key == 'namespaces' then -- traitement particulier pour la table namespaces
r = namespace(frame.args[2], frame.args[3]) -- appel de la sous-fonction avec les arguments numéro 2 et 3.
end
if key == 'interwikiMap' or key == 'interwiki' then
r = interwiki(frame.args[2], frame.args[3])
end
-- local r = ''
-- for k, v in pairs(parent.args) do
-- r = r .. '* ' .. k .. ' ; ' .. v .. '\n'
-- end
return r -- retourne le résultat
end
function p.interwiki(frame) -- à terminer
local r = interwiki(frame.args[2])
return r
end
function interwiki(option, key)
local r = ''
local t = site.interwikiMap()
if option == nil then r = showTable(site.interwikiMap()) end
if option == 'local' then r = showTable(site.interwikiMap('local')) end
if option == '!local' then r = showTable(site.interwikiMap('!local')) end
if option ~= 'local' and option ~= '!local' and option ~= nil then
r = showTable(t[option]) end
if key ~= nil then r = t[option][key] end
return r
end
function form_table(t)
local r = '<div style=\'-moz-column-count:2; -moz-column-gap:10px;\'>\n' -- Resultat sur 3 colonnes
for k, v in pairs(t) do --
if type(v) == 'string'or type(v)=='number' then r = r .. '* '.. k.. ': ' .. v .. '\n' end
if type(v) == 'boolean' then r = r ..'* '..k ..' : '..tostring(v)..'\n' --
end
end --Ajoute k et v au formulaire, si v est une chaine ou un nombre ou un booléen
r = r .. '</div>' --fin colonnes
return r
end
function form_namespaces(t) -- Résumé de tous les espaces de noms
local r = '; Liste des epaces de noms\n' -- Titre du formulaire
for k, v in pairs(t) do -- itération namespaces
r = r..': '..k..' ; ' .. v.name .. ' ; ' .. v.canonicalName
-- Ajouter nombre de pages
r = r .. '; \'\'Nombre de pages : \'\'' .. mw.site.stats.pagesInNamespace(v.id)
-- Ajouter données correspondantes de l'espace discussion
talk = v.associated
if talk ~= nil then r=r..'\n:::('..talk.id..' ' ..talk.name.. ') \'\'nombre de pages : \'\'' .. mw.site.stats.pagesInNamespace(talk.id)..'\n' else r=r..'\n' end
end
return r
end
function namespace(filter, key) -- Reçoit le numéro ou bien le label de l'espace ; appel form_ns() et retourne le formulaire des propriétés.
local r = '' -- Résultats
local ns_id = tonumber(filter) -- nil si impossible number désigne id
local ns_name = tostring(filter) -- string désigne label
local t = {} -- table des résulats
if ns_id == nil then -- si ns_id est nul
t = mw.site.namespaces[ns_name] -- reçoit le label
else -- si ns_id existe
t = mw.site.namespaces[ns_id] -- reçoit l'identifiant
end
if filter == nil then -- Si pas de table selectionnée
t = site.subjectNamespaces -- On ne tient compte que des
r = form_namespaces(t) -- espaces sujets et affiche le résumé
else
r = r .. form_table(t) -- Affiche formulaire pour l'espace de noms
end
if key ~= nil then r = t[key] end -- si clé indiquée affiche valeur
return r -- Retourne les données contenues dans la table namespaces
end
function p.namespace(frame) -- Reçoit le numéro ou bien le label de l'espace ; appel form_ns() et retourne le formulaire des propriétés.
local r = namespace(frame.args[1], frame.args[2])
return r -- Retourne le formulaire des propriétés scribunto de l'espace
end
function p.showTable(frame)
t = site
key1 = frame.args[1]
key2 = frame.args[2]
if key1 ~= nil then t = site[key1] end
if key2 ~= nil then
if tonumber(key2) ~= nil then t = t[tonumber(key2)] end
else t = t[key2]
end
local r = showTable(t)
return r
end
function showTable(t)
local r = '' -- Variable texte pour le résultat
for k, v in pairs(t) do -- Itération de la table
r = r .. '* ' .. tostring(k).. ' ; ' .. tostring(v) .. '\n'
end
return r
end
function p.pages_in_nsid(frame)
local result = mw.site.stats.pagesInNamespace(tonumber(frame.args[1]))
return result
end
function form_ns(t) -- Reçoit la table des propriétés de l'espace de nom ; retourne un formulaire de propriétés.
local r = '\n'
r = r .. '\'\'Label\'\' : ' .. t.name .. ' - \'\'Nom canonique\'\' : ' .. t.canonicalName..' - \'\'Identifiant\'\' : ' .. t.id ..'\n----\n'
if t.aliases ~= nil and table.maxn(t.aliases)>0 then
r = r ..': Alias'
for key, alias in pairs(t.aliases) do r = r ..' : ' ..alias end end
if t.isContent == true then r = r .. '\n:Espace de contenu' end
if t.hasSubpages == true then r = r .. '\n:Accepte les sous-pages\n' end
if t.hasGenderDistinction == true then r = r .. '\n:Distinction du genre\n' end
if t.isCapitalized == true then r = r .. '\n:Capitalisé' end
if t.isIncludable == true then r = r .. '\n:Peut être inclus' end
if t.isMovable == true then r = r .. '\n:Peut être déplacé' end
-- isSubject ; isTalk
if t.defaultContentModel ~= nil then r = r .. '\n:Modèle de contenu par défaut :' .. t.defaultContentModel ..'\n' end
r = r .. '\n:Nombre de pages : ' .. mw.site.stats.pagesInNamespace(t.id)
return r
end
return p