Модуль:Stats

Материал из in.wiki
Перейти к навигации Перейти к поиску

Для документации этого модуля может быть создана страница Модуль:Stats/doc

local nouns = {
	[0]		= { singular = 'статья', dual = 'статьи', plural = 'статей' },
	[196]	= { singular = 'документ', dual = 'документа', plural = 'документов' },
	[3000]	= { singular = 'новость', dual = 'новости', plural = 'новостей' },
	[3002]	= { singular = 'материал', dual = 'материала', plural = 'материалов' }
}

local namespaces = mw.site.namespaces
local ask = mw.smw.ask
local lang, lower = mw.getContentLanguage (), mw.ustring.lower

local function stats (ns)
	local name = namespaces [ns].name
	local nouns, noun = nouns [ns], lower (name)
	local forms = nouns
		and { nouns.singular, nouns.dual, nouns.plural }
		or { noun, noun, noun }

	local count = ask {
		'[[' .. name .. ':+]] [[Дата создания::+]]',
		format = 'count'
	}
	if count > 0 then
		return '<span class="nowrap">'
			.. "<big>'''[[Служебная:Все_страницы/" .. name .. ':|'
			.. tostring (count)
			.. "]]'''</big> "
			.. lang:plural (count, forms)
			.. '</span>'
	end
end

local functions, all = {}, {}
for ns, config in pairs (namespaces) do
	if config.isContent then
		all [#all + 1] = ns
		local func = function (frame)
			return stats (ns)
		end
		functions [ns] = func
		functions [config.name] = func
		functions [lower (config.name)] = func		
		functions [lower (config.canonicalName)] = func
	end
end

local list = mw.text.listToText

local function all_stats (frame)
	local reports = {}
	for _, ns in ipairs (all) do
		reports [#reports + 1] = stats (ns)
	end
	return list (reports)
end

functions.all = all_stats
functions ['всё'] = all_stats
functions ['все'] = all_stats

return functions