Module:Bac à sable

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 >


Éditer cette documentation


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