Модуль:Отображение званий

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

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

local pp = {}
local tools = require( 'Module:Tools' )
local perstools = require( 'Module:PersTools' )
local ranksTable = require( 'Модуль:Звания' )
local refTools = require( 'Module:RefTools' )

local marker = {
	icon = 'star',
	[3] = 'Упоминание звания в документах',
	[4] = 'Предыдущее звание при присвоении нового',
	[6] = 'Лишение звания',
	[8] = 'Присвоение звания — ОТМЕНЕНО',
	[10] = 'Лишение звания — ОТМЕНЕНО',
	[11] = 'Отмена решения',
	[12] = 'Присвоение звания',
	[14] = 'Лишен звания',
}



function pp.display( query, queryCount, showP )
	local tmp

	if queryCount == 0 then
		return '<p class="nkvd-no-rank">Отсутствуют сведения о присвоении званий.</p>'
	end
	table.sort( query, function ( a, b )
			return ( a.cDate or '' ) < ( b.cDate or '' )
				or ( a.cDate or '' ) == ( b.cDate or '' )
					and tonumber( a.origin ) < tonumber( b.origin )
		end
	)

	local cRank, cRow, cLast, cFirst, cMiddle -- , cDisambig
	for i, row in ipairs( query ) do
		if row['#eq'] or ( showP and row['#ap'] ) then
			if row.rank == cRank
					and ( row.reference or '' ) ==  ''
					and ( not showP or (row.nLast == cLast and row.nFirst == cFirst and row.nMiddle == cMiddle ) ) then
				query[cRow].controlled = query[cRow].controlled or {}
				table.insert( query[cRow].controlled, i )
				row.collapsed = true
			else
				cRank, cLast, cFirst, cMiddle, cRow
					= row.rank, row.nLast, row.nFirst, row.nMiddle, i
			end
		end
	end

	local out
	if showP then
		out = '<th> </th>'
	else
		out = ''
	end

	out = { [==[
<table class="nkvd-rank-table">
  <tr class="nkvd-table-th">]==] .. out .. [==[
    <th> </th>
    <th> </th>
    <th class="nkvd-table-date">дата</th>
     <th style="width:2em;"> </th><!-- collapse marker -->
   <th class="nkvd-table-rank">звание</th>
    <th class="nkvd-table-source">источник</th>
  </tr>
]==] }
	cRank = false
	local ourTitle = mw.title.getCurrentTitle().text
	for i, row in ipairs( query ) do
		if row['#eq'] or ( showP and row['#ap'] ) then
			local classes = ''
			if row.collapsed then
				classes = ' mw-collapsible mw-collapsed'
				cRank = true
			end
			table.insert( out,
				'<tr id="mw-customcollapsible-rank-' .. i .. '" class="nkvd-table-row-' .. row.origin .. classes .. '">' )
			if showP then
				table.insert( out, '<td class="nkvd-table-person">' .. perstools.makePersonLink( row ) .. '</td>' )
			end
			table.insert( out,
				perstools.fixedColumns( row.origin, marker, row.cDate, row.cDate__precision ) )
			if row.controlled then
				table.insert( out, '<td><i class="fa fa-sign-out fa-rotate-90 fa-lg mw-customtoggle-rank-' .. table.concat( row.controlled, ' mw-customtoggle-rank-' )
					.. '" title="Имеется несколько последовательных записей о том же звании" style="color:#0645AD; cursor:pointer"></i></td>' )
			else
				table.insert( out, '<td></td>' )
			end
			tmp = row.rank
			if tmp == '-' then
				tmp = '<i>нет звания</i>'
			elseif row.origin ~= '11' then
				tmp = tools.db( ranksTable, row.rank, 'кто' )
				if not tmp then
					tmp = row.rank -- ошибка вообще-то. Звания нет в таблице
				end

			--[===[
				if row.origin ~= '14' and  row.origin ~= '10' then
					local diap, res = tools.db( ranksTable, row.rank, 'diap' )
					if diap and row.rankDate ~= '' then
						local res = #diap+1
						for i, mx in ipairs( diap ) do
							if row.rankDate < mx[1] then
								res = i
								break
							end
						end
						res = res - 1
						if res == 0 or diap[res][2] == '!' then
							res = tmp .. ' (не могло присваиваться в указанный период)'
						else
							res = tmp .. diap[res][2]
						end
	--					tmp = tmp .. '[[Категория:Звание:' .. res .. ']]'
					else
	--					tmp = tmp .. '[[Категория:Звание:' .. tmp .. ']]'
					end
				end
			--]===]
			end
			table.insert( out,
				'<td class="nkvd-table-rank">' .. tmp .. '</td>' )
			local doc, persdoc = row._pageName, (row.alias or '')
			if doc == ourTitle then
				if persdoc == '' then
					persdoc = 'см. дополнительные материалы'
				end
			else
				if persdoc == '' then
					persdoc = mw.title.new( doc ).text
				end
				persdoc = '[[' .. doc .. '|' .. persdoc .. ']]'
			end
			table.insert( out, '<td class="nkvd-table-source">' .. persdoc )

			table.insert( out, refTools.makeRef( row.reference ) )
			table.insert( out, '</td>' )
			table.insert( out, '</tr>\n' )
		end
	end
	table.insert( out, '</table>\n' )

	if cRank then
--		table.insert( out, '<p style="font-size:87%">Последовательные повторные упоминания одного и того же звания были свернуты.</p>' )
	end
	return table.concat( out )
end
return pp