Module:Nsm
Module principal pour "Namespace monitor". Ce module fournit une interface Lua au modèle {{Nsm}}.
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