Модуль:Навигация категорий

Материал из Кадровый состав НКВД 1935-1939
Перейти к: навигация, поиск

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

--[[ Доделать:
1. «Приказы за 01.1925» должны попадать в категории «Приказы» «Документы за 01.1925» и «Приказы за 1925»
2. Всем категориям надо ставить defaultsort по тем же принципам, что и документам
3. ??? Ввести категории «Приказы за ??.1925» для приказов только с годом
--]]
local pp = {}
local taba = {
	['Приказы ОГПУ СССР'] = { start = 1930, stop = 1934 },
	['Приказы НКВД СССР'] = { start = 1934, stop = 1946 },
	['Приказы НКГБ СССР'] = { start = 1941, stop = 1946 },
	['Приказы МВД СССР'] = { start = 1946, stop = 1959 },
	['Приказы МГБ СССР'] = { start = 1947, stop = 1953 },
	['Приказы КГБ СССР'] = { start = 1954, stop = 1959 },
	['Приказы НКО СССР'] = { start = 1935, stop = 1940 },
	['Постановления СНК СССР'] = { start = 1936, stop = 1945 },
	['Постановления СМ СССР'] = { start = 1952, stop = 1959 },
	['Постановления ЦИК и СНК СССР'] = { start = 1935, stop = 1937 },
	['Постановления ЦИК СССР'] = { start = 1923, stop = 1937 },
	['Постановления ЦИК РСФСР'] = { start = 1919, stop = 1922 },
	['Постановления ЦИК союзных республик'] = { start = 1922, stop = 1933 },
	['Указы Президиума Верховного Совета СССР'] = { start = 1938, stop = 1959 },
	['Указы Президента РФ'] = { start = 1991, stop = 1996 },
	['Приказы Реввоенсовета Республики'] = { start = 1919, stop = 1923 },
	['Приказы Реввоенсовета СССР'] = { start = 1923, stop = 1931 },
--	['Решения разных органов'] = { start = 1920, stop = 1933 },
	['Приказы командования военных формирований'] = { start = 1941, stop = 1946, bydate = true },
	['Прочие документы'] = { start = 1932, stop = 1959 },
	['Судебные решения и материалы следственных дел'] = { start = 1935, stop = 1939 },
	['Документы'] = { start = 1919, stop = 1959 },
	['Публикации'] = { start = 1989, stop = 2017 },
}
pp[''] = function ( frame )
	local myTitle = mw.title.getCurrentTitle().text
	local args = frame:getParent().args
	local ctg = mw.text.trim( args[1] or '' )
	local start = tonumber( mw.text.trim( args[2] or '0' ) )
	local stop = tonumber( mw.text.trim( args[3] or '0' ) )
	local month, year -- только для месячных категорий
	local out, u, v = {}
-- что-то за ххххххх: категория:что-то, категория:Документы за хххххх
-- документы за xxxxxx: категория:Документы
	if ctg == '' then
		repeat
			ctg, u, month, v = mw.ustring.match( myTitle, '^(.+) за ((..)%.(%d%d%d%d))$' )
			if ctg then 
				-- [ ctg за v год]; [ документы за u ]
				year = v
				v = ' за ' .. v .. ' год'
				u = ' за ' .. u
				break
			end
			ctg, u = mw.ustring.match( myTitle, '^(.+) за (.+) год$' )
			if ctg then 
				-- [ ctg ]; [ документы за u год ]
				v = ''
				u = ' за ' .. 	u .. ' год'
				break
			end
			ctg = mw.ustring.match( myTitle, '^(.+) без даты$' )
			if ctg then 
				-- [ ctg ]; [ документы без даты ]
				v = ''
				u = ' без даты'
				break
			end
			-- [ документы ]
			u = ''
			ctg = myTitle
		until true
		if v then
			table.insert( out, '[[Категория:' ..ctg .. v .. ']]' )
			table.insert( out, '\n: См. также <i>[[:Категория:' .. ctg .. v .. '|' .. ctg .. v .. ']]</i>\n' )
		end
	end
	if ctg ~= 'Документы' then
		table.insert( out, '[[Категория:Документы' .. u .. ']]' )
		table.insert( out, '\n: См. также <i>[[:Категория:Документы' .. u .. '|Документы ' .. u .. ']]</i>\n' )
	end
	if taba[ctg] then
		start = taba[ctg].start or 0
		stop = taba[ctg].stop or 0
	else
		return '[[Категория:Ошибки навигации по категориям]]'
	end
	if start == 0 or stop == 0 then
		return '[[Категория:Ошибки навигации по категориям]]'
	end
	table.insert( out, [==[
<table class="nkvd-ctg-table wikitable">
	<tr>
		<th>
			[[:Category:]==] .. ctg .. [==[ без даты|&nbsp;????&nbsp;]]
		</th>
		<th colspan=13>
			[[:Category:]==] .. ctg .. '|' .. ctg .. [==[]]
		</th>
	</tr>
]==] )
	for y = start, stop do
		table.insert( out, [==[
	<tr>
		<th>
			[[:Category:]==] .. ctg .. ' за ' .. y  .. ' год|&nbsp;' .. y ..[==[&nbsp;]]
		</th>
]==] )
		table.insert( out, [==[
		<td>
			[[:Category:]==]
			.. ctg .. ' за ??.' .. y  .. [==[|&nbsp;??&nbsp;]]
		</td>
]==] )
		for i = 1, 12 do
			if i < 10 then
				u = '0' .. i
			else
				u = i
			end
			table.insert( out, [==[
		<td>
			[[:Category:]==]
			.. ctg .. ' за ' .. u .. '.' .. y  .. '|&nbsp;' .. u .. [==[&nbsp;]]
		</td>
]==] )
		end
		table.insert( out, [==[
	</tr>
]==] )
	end
	table.insert( out, [==[
</table>
]==] )
	if taba[ctg].bydate and year then
		local m = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
		m = m[tonumber(month)]
		if m == 28 and tonumber(year) % 4 == 0 then
			m = 29
		end
		table.insert( out, '<table class=tab-dates><tr>' )
		local base = tostring( mw.uri.fullUrl( mw.title.getCurrentTitle().fullText ) ) .. '?pagefrom=%'
		for i = 1, m do
			table.insert( out, '<td>[' .. base .. string.format( '%2X' , 0x30 + i ) .. ' ' .. i .. ']</td>' )
		end
		table.insert( out, '</tr></table>' )
	end
	return table.concat( out )
end
return pp