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

Accès à la documentation


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