Aller au contenu

Module:Nsm/Lib

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

Librairie principale de fonctions pour l’outil wmflabs/fr-wikiversity-ns aussi appelé Namespace monitor. Cette Bibliothèque regroupe les fonctions, communes aux suivi des différents espaces de noms et utilise les librairies suivantes :

Module:Nsm/Lib/Sub la première version de la librairie principale, contient les sous-fonctions.
Module:Nsm/Lib/Sortable class est responsable de la production des tableaux wikitexte.
Module:Nsm/Lib/Category regroupe les fonctions relatives aux catégories.
  • prop() affiche les nombres de pages, total, pages racines et sous-pages.
  • stat_sub() affiche les statistiques sur les sous-pages.
  • racine() affiche un tableau triable des facultés, le nombre de départements attachés et le nombre de sous-pages (dans l'espace de nom Faculté).
  • pages(|filtre) affiche toutes les pages de l’espace et accepte l’argument filtre pour limiter les pages affichées.
  • group() affiche les groupes de pages à partir de la racine et le nombre de sous-pages correspondant.
  • redir() affiche toutes les redirections de l’espace.
  • sub_lost() montre les sous-pages dont la page supérieure est absente.

info Documentation du Module:Nsm/Lib : v · d · m · h.


local p = {}
local import_lib   = require("Module:Nsm/Lib/Sub")            -- Sous fonctions
local sortable_lib = require("Module:Nsm/Lib/Sortable class") -- Tableaux wikitexte
local lib_category = require("Module:Nsm/Lib/Category")       -- Fonctions catégories

function p.redir(frame) -- Par défaut liste les pages de redirection de l'espace ; l'option o=nombre/taux permet d'afficher individuellement le nombre ou le taux de redirection. Voir redir() split_redir() et redir_tx() dans la libraririe.
	local r = '; redir() : La fonction liste les redirections, de l\'espace de noms. \n'
	local col = {'page', 'nsep', 'cible', 'date1'}  -- Colonnes à afficher
	--if frame.args['sortie'] == 'nombre' then r = compte(t) end
	local to = {}      --Table Output
	if frame.args['o'] == nil then to = redir(t_pages) --, ns_id
		r = r .. st_print(to, col, '-i')end
	if frame.args['o'] == 'nombre' then r = t_prop.redirection end
	if frame.args['o'] == 'taux'   then r = redir_tx(t_prop) end
	return r
end
--[[
function p.redir_tx(frame)
	local r = ''
	local parent_frame = frame:getParent() -- Test si parent_frame est nil
	-- nil donc c'est le modèle qui appel ici il faut décaler de 2 arguments ?
	if parent_frame == nil then frame.args[1] = frame.args[3] end
	if frame.args[1] == 'nombre' then r = t_prop.redirection end
	if frame.args[1] == 'taux'   then r = redir_tx(t_prop) end
	--r = r .. tostring(frame.args[3])
	return r
end
]]--

function p.pages(frame) --Affiche la liste des pages de l'espace de nom, dans un tableau triable ; frame['t'] = talk pour l'espace de discussion associé.
	local result = '; pages(nom=) : La liste des pages est filtrable, vous pouvez limiter la liste en précisant le nom des pages que vous souhaitez afficher.\n'
	--local result = '' -- Debogage affiche les arguments sous le tableau
	local t = {}      -- Input Table
	local parent_frame = frame:getParent() -- Récupare l'objet frame parent
	if frame.args['t'] == 'talk' then -- test argument nommé
		t = talk_pages                -- affecte la table de l'espace discussion
		label = talk_label            -- definit label !?
	else
		t = t_pages end  -- Sinon utilise la table par défaut
	if frame.args['nom'] ~= nil then t = filtre(t, frame.args['nom']) end
	if parent_frame == nil then --Test si parent_frame est nil donc c'est le modèle qui appel ici il faut décaler de 2 arguments
		t = pages(t, frame.args['nom'])
		for k, v in pairs(frame.args) do result = result .. '* parent_frame : '..k..' ; ' .. tostring(v)..'\n' end --Debug ajoute parent_arguments sous tableau
	else
		t = pages(t, frame.args['nom']) --, filtre, label)
		result = result ..prefix(lang, label) 
		for k, v in pairs(frame.args) do result = result .. '* current_frame : '..k..' ; ' .. tostring(v)..'\n' end -- Debug Ajoute les argument current frame sous tableau
	end
	local col = {'page', 'nsep', 'cible', 'date1'}
	result = result .. st_print(t, col, '-i')
	return result
end
function p.doc(frame) -- p.doc( |avec |sans |is) La fonction utilise les valeurs is_doc, have_doc et own_doc collectées avec Python ; pour afficher la liste de pages, associée à celle des sous-pages  documentation quand disponible. 'avec' filtre les pages documentées, 'sans' liste les pages sans docuemntation, 'is' affiche uniquement les documentations. 
	local it = r_pages
	if frame.args['u'] == 'no' then it = user_tpl(r_pages, 'no')  end
	if frame.args['nom'] ~= nil then it = filtre(it, frame.args['nom']) end
	local t = doc(it, frame.args[1])             -- Table des résultats
	local col = {'page', 'own_doc', 'nsep', 'cible'}              -- Selection des colonnes
	return st_print(t, col, '-i')
end

-- test provisoire replacer cette sous-fonction avec les autres
function doc(it, f) -- input table, filtre
	local to = {}   -- table output, résultats
	if f == nil then             -- Par défaut retourne les pages (module/template)
		for k, v in pairs(it) do -- et documentation assosciée si disponible
			if v.is_doc == nil then to[k] = it[k] end end end
	if f == 'sans' then          -- Filtre les pages sans sous-page documentation
		for k, v in pairs(it) do -- n'est pas une doc et n'a pas de doc
			if v.is_doc == nil and v.have_doc == nil then	to[k] = it[k] end end end
	if f == 'avec' then          -- Filtre les pages qui disposent d'une documentation
		for k, v in pairs(it) do -- sur la base du booléen have_doc
			if v.have_doc == true then	to[k] = it[k] end end end
	if f == 'is' then            -- Filtre uniquement les documentations 
		for k, v in pairs(it) do if v.is_doc == true then	to[k] = it[k] 
				col = {'page'} end end end -- Retourne la liste des pages Documentation	
	return to
end

function p.chk_cat(frame) -- Reçoit le nom court de la catégorie compare les articles
	local r = chk_cat(frame.args[1], t_root) -- avec les pages racines de l'espace !
	return r -- voir Namespace lib chk_cat()
end

function p.find_cat(frame) -- FRAME Cherche les catégories pour les pages racines
	local l_cat = find_cat(t_root, pfix)
	return l_cat
end

function p.category_members(frame) -- Modifier Affichage le contenu d'une catégorie 2 colonnes articles et sous-catégories.
	local t = category_members(frame.args[1])
	local col = {'page', 'articles', 'subcats', 'all_in_cat'}
	local r = st_print(t, col, '-i')
	return r
end

function p.sub_lost(frame) -- Affiche les sous-pages "perdues" c'est-à-dire sans page parent.
	local result = sub_lost(t_pages) -- SUIVRe EXCLURE REDIRECTIONS
	local col = {'page', 'nsep', 'cible'} --nsub pas disponible
	return st_print(result, col, '-i') --result --TEST
end

function p.prop(frame) --Affiche les propriétés de l'espace de nom ; frame['t'] = talk permet d'afficher les propriétés de l'espace de discussion relatif.
	local r = '' 
	if frame.args['t'] == 'talk' then r = ns_prop(talk_prop) else r = ns_prop(t_prop) end
	return r
end

function p.group(frame) -- Voir group() dans la libraririe et sub_lost()
	local result = group(t_pages, t_sub, frame, label)
	return result
end

function p.racine(frame) -- Voir racine() dans la libraririe
	local result = racine(t_root, t_sub, frame, label)
	return result
end
function p.racine_old(frame) -- Voir racine() dans la libraririe
	local result = racine(t_pages, frame, label)
	return result
end

function p.stat_sub(frame) -- Affiche le nombre de pages par niveau
	local r = ns_stat_sub(t_pages) 
	return r
end

--DEBUG
function p.nsm_base_text() -- Calcul base_text à partir de regex sur v.page
	r=''
	for k, v in pairs(t_pages) do
		r =r .. '* '..v.page..'\n' --provoque NOT ENOUGH MEMORY
		z = mw.ustring.match(v.page, '.*/')
		if z ~= nil then
			z = mw.ustring.sub(z, 0, (mw.ustring.len(z)-1))
			r = r ..'* '.. z ..'\n'
			end
		end -- Liste les pages et le basetexte correspondant
	return r
end
return p