-- Questo modulo implementa [[Template:Ns has subpages]].
-- Mentre il tempalte è estremamente semplice, questa informazione è resa
-- direttamente disponibili con Lua, in questo modo non srà necessario aggiornare 
-- il template ogni volta che viene aggiunto un nuovo namespace.

-- DA [[w:en:Special:Permalink/637438142]]

local p = {}

function p._main(ns, frame)
	-- Recupera il Namespace corrente se non fosse stato specificato.
	if not ns then
		ns = mw.title.getCurrentTitle().namespace
	end

	-- Controlla la tavola dei namespace da mw.site.namespaces. Questo dovrebbe
	-- funzionare per la maggior parte dei casi.
	local nsTable = mw.site.namespaces[ns]

	-- Prova ad usare la corrispondenza delle stringhe per ottenere il namespace 
	-- dal nome della pagina.
	-- Do a quick and dirty bad title check to try and make sure we do the same
	-- thing as {{NAMESPACE}} in most cases.
	if not nsTable and type(ns) == 'string' and not ns:find('[<>|%[%]{}]') then
		local nsStripped = ns:gsub('^[_%s]*:', '')
		nsStripped = nsStripped:gsub(':.*$', '')
		nsTable = mw.site.namespaces[nsStripped]
	end

	-- Se non trova corrispondenza prova la funzione parser {{NAMESPACE}},
	-- che dovrebbe trovare il resto dei casi. Non usare mw.title object,
	-- in quanto sarebbe troppo costoso per ogni nuova pagina testata.
	if not nsTable then
		frame = frame or mw.getCurrentFrame()
		local nsProcessed = frame:callParserFunction('NAMESPACE', ns)
		nsTable = nsProcessed and mw.site.namespaces[nsProcessed]
	end
	
	return nsTable and nsTable.hasSubpages
end

function p.main(frame)
	local ns = frame:getParent().args[1]
	if ns then
		ns = ns:match('^%s*(.-)%s*$') -- trim whitespace
		ns = tonumber(ns) or ns
	end
	local hasSubpages = p._main(ns, frame)
	return hasSubpages and 'yes' or ''
end

return p