Модуль:Отображение званий
Перейти к навигации
Перейти к поиску
Для документации этого модуля может быть создана страница Модуль:Отображение званий/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