Module:Bac à sable
Apparence
Ceci est le module dédié aux tests génériques de la communauté Wikiversité. Vous êtes libre de le modifier, pour vos tests personnels.
Prenez soin de vérifier que personne ne soit en train de l’utiliser en consultant l’historique ; auquel cas vous pouvez créer un module sur le modèle suivant :
< Module:Bac à sable/Votre nom >
local p = {}
-- Tests Regex
local t = {'Document', 'document', 'documents', 'Documents', 'page', 'ligne'}
function p.reg1()
local r = ''
local motif = '[Dd]ocument'
for k, v in pairs(t) do
-- utiliser foncton texte, une simple equivalence ne suffit pas (v ~= motif)
if mw.ustring.find(v, motif) then r = r .. '# ' .. v ..'\n' end
end
return r
end
-- 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 == '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' 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 = '' -- Formulaire vierge
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.
return r
end
function form_namespaces(t) -- Résumé de tous les espaces de noms
local r = ''
for k, v in pairs(t) do
r = r..': '..k..' ; ' .. v.name .. ' ; ' .. v.canonicalName
-- Ajouter nombre de pages
r = r .. '; ' .. 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.. ')\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
return p