Aller au contenu

Module:Nsm

Une page de Wikiversité, la communauté pédagogique libre.

Module principal pour "Namespace monitor". Ce module fournit une interface Lua au modèle {{Nsm}}.

Accès à la documentation


local p       = require("Module:Nsm/Lib") -- Bibliothèque NameSpace Monitor

-- Il faut "wrapper" les arguments
-- Soit ils proviennent du modèle unique "Nsm" via parent_frame    Hyp. -2
function get_ns(ns_arg, o) -- Ajouter gestion espace 0 sans label voir displayName
	local ns_id   = tonumber(ns_arg) -- nil si impossible number désigne id
	local ns_name = tostring(ns_arg) -- string désigne label
	local t = {} -- table pour données lib. Site
	if ns_id == nil then                -- si ns_id est nul
		t = mw.site.namespaces[ns_name] -- reçoit le label depuis la librairie scribunto
		if t~=nil then ns_id = t.id end -- reçoit ns_id Scribunto
		-- Attention Vérifier l'argument ns_name avant de rediriger vers l'espace principal
		-- sous-fonction pour convertir displayName en chaine sans parenthèse
		if ns_id == nil then   
			t = mw.site.namespaces[0]
			ns_name = t.displayName
			--Retire les parenthèses dans displayName : (Principal)
			--pour former le nom du module de fonctions Nsm/Principal
			--il faut un nom simple pour l'argument utilisateur
			ns_name = string.sub(ns_name, 2, (string.len(ns_name)-1))
			
		else ns_name = t.name end           -- Reçoit le nom Scribunto si espace principal reçoit displayName
	else -- numéro de l'espace en argument
		t = mw.site.namespaces[ns_id] -- la table mw.site de l'espace
		ns_name = t.name              -- le nom dans la librairie site
		if ns_name == '' then ns_name = t.displayName
			--Retire les parenthèses dans displayName : (Principal)
			--pour former le nom du module de fonctions Nsm/Principal
			ns_name = string.sub(ns_name, 2, (string.len(ns_name)-1))
		end
		end
	if o == 'id' then return ns_id else return ns_name end -- retourne le nom ou id
end

-- soit ils proviennent du module principal via frame #Invoke Nsm  Hyp. -1
-- soit il proviennent du sous-module via frame #Invoke Nsm/Label  Hyp.  O

function p.nsm(frame)
	local r = ''
	local t = {}                     -- table test
	local parent_frame = frame:getParent() -- Existe si modèle appel
	local frame_title = frame:getTitle() -- 
	if parent_frame.args[1] ~= nil then
		ns_id   = get_ns(parent_frame.args[1], 'id') -- determine le numero de l'espace
		ns_name = get_ns(parent_frame.args[1])  -- determine le nom
		frame.args[1] = parent_frame.args[2] --DECALAGE 1
		frame.args[2] = parent_frame.args[3] --DECALAGE 1

		nsm_sub_module  = load_module(ns_name) -- DECALAGE 1 + 1
		
		r = nsm_sub_module[frame.args[1]](parent_frame)
	--else -- Pas d'argument positioné dans frame parent
	--	r='Aucun argument : fonction par défaut (liste des espaces supervisés)'
	--	r = r.. tostring(frame_title)
	end
	if parent_frame.args[1] == nil and frame_title == "Module:Nsm" then
		r = r.. show_args(frame.args) ..'\n'
		r = r .. 'parent_frame : '..parent_frame:getTitle()..'\n'
		ns_id   = get_ns(frame.args[1], 'id') -- determine le numero de l'espace
		ns_name = get_ns(frame.args[1])  -- determine le nom
		r = r ..'\n'.. ns_id..ns_name..'\n'
		nsm_sub_module = load_module(ns_name)
		
		r = nsm_sub_module[frame.args[2]](frame)
	end
	return  r
end

function show_args(frame)  -- retourne les arguments de l'objet frame
	local r =''
	for k, v in pairs(frame) do
		r = r .. '* ' .. k .. ' ; ' .. tostring(v) ..'\n' end
	return r
end
 
function load_table(ns_id) -- MODIFIER reçoit table_name
	local ns_table = require("Module:Nsm/Table/"..tostring(ns_id)) 
	return ns_table
end
function load_module(ns_name) 
	local nsm_module = require("Module:Nsm/"..ns_name)
	return nsm_module
end

return p