Модуль:Проверка протокола
Материал из Справочника наблюдателя
Описание модуля[]
Документация отсутствует!
Вы можете создать документацию ( создать ).
Задавайте категории на странице документации, а не здесь! Показать подстраницы
Задавайте категории на странице документации, а не здесь! Показать подстраницы
local p = {}
local ids = {
'1', '2', '3', '4', '4u', '4up', '4ut', '5', '6', '7', '8', '9', '10', '11',
'11a', '11b', '11v', '11g', '11d', '11e',
'11w', '11z', 'X', 'Npv', '12', 'PV',
}
local codes = {
'1', '2', '3', '4', '4у', '4уп', '4ут', '5', '6', '7', '8', '9', '10', '11',
'11а', '11б', '11в', '11г', '11д', '11е',
'11ж', '11з', 'Х', 'Нпв', '12', 'ПВ',
}
local standard = {
'1', '2', '3', '4', '-', '-', '4ут:0', '5', '6', '7', '8', '9', '10', '11',
'11а', '11б', '11в', '11г', '11д', '11е',
'11ж', '11з', 'Х', '-', '12', 'ПВ',
}
local special = {
-- '1', '2', '3', '4', '4u', '4up', '4ut', '5', '6', '7', '8', '9', '10', '11',
nil, nil, nil, nil, true, true, true, nil, nil, nil, nil, nil, nil, nil,
--'11a', '11b', '11v', '11g', '11d', '11e',
nil, nil, nil, nil, nil, nil,
--'11w', '11z', 'X', 'Npv', '12', 'PV',
nil, nil, true, true, nil, nil,
}
local strpr = require( 'Модуль:Строки протокола' )
function p.Parse( frame )
local args = frame.args
-- local args=frame
local arra0 = mw.uri.decode( args[1] )
local cands = mw.uri.decode( args[2] or '' )
local nov = tonumber( args[3] ) or 1
local config = args[4] or ''
if ( arra0 or '' ) == '' then
return
end
-- arra = n:x,...
local arra
if arra0 == 'standard' then
arra = standard
else
arra = mw.text.split( arra0, ',', true )
end
if #arra ~= #ids then
return frame:expandTemplate{ title = 'error', args = { 'Неверное число элементов: ' .. #arra .. ' «' .. arra0 .. '»' } }
end
local k, code, value, s, spec
local addr = tostring( mw.uri.fullUrl( mw.title.getCurrentTitle().prefixedText ) )
if nov <= 1 then
nov = 1
s = ''
else
s = '<p class="copro-hide-config">Число голосов у избирателя: <b>' .. nov .. '</b>.</p>'
end
if cands == '' then
cands = ',,,,,'
end
if config ~= '' then
config = '<div id="copro-config">[[#0|Конфигурировать]]</div>'
.. '<p id="copro-config-intro" class="copro-hide" style="font-size:87%;">'
.. '<b>Для конфигурирования набора строк протокола рекомендуется использовать [[/Помощник|помощник]].</b><br>'
.. 'После этого вам останется лишь внести фамилии кандидатов и, при необходимости, исправить нумерацию строк. '
.. 'Вы можете редактировать подсвеченные бледно-желтым фоном номера строк и имена кандидатов. Строки, у которых вы '
.. 'уберете номер, будут исключены из таблицы (но если вы поставите в них значения показателя, то этот показатель '
.. 'все равно будет участвовать в проверке контрольных соотношений). Так, например, имеет смысл поставить значение '
.. '«0» строке <b>4ут</b>, если на выборах не предполагается досрочное голосование отдельных групп избирателей в удаленных '
.. 'и труднодоступных местностях. То же самое имеет смысл сделать со строкой <b>4у</b>, если досрочное голосование проходит '
.. 'только в ТИК. Получившийся результат редактирования таблицы доступен по ссылке <i>«Ссылка на этот расчет»</i> справа вверху.</p>'
end
url = '?rows=' .. table.concat( arra, ',' ) .. '&nov=' .. nov .. '&cands=' .. mw.uri.encode(cands)
local page = {}
table.insert( page, [[
<div id="copro-addr" data-baseurl="]] .. addr .. [[">[]] ..
addr .. url .. [[ Ссылка на этот расчет]</div>
]] .. config .. [[<div id="copropar" data-nov="]] .. nov .. [[">]] .. s .. [[ </div>
<div id="coprotab">
]] )
for i = 1, #arra-2 do
k = mw.ustring.find( arra[i], ':', 1, true )
if k then
code = mw.ustring.sub( arra[i], 1, k-1 )
value = mw.text.trim( mw.ustring.sub( arra[i], k+1, -1 ) ) or ''
else
code = arra[i]
value = '—'
end
code = mw.text.trim( code )
if code == '' or code == '-' then
s = ' copro-hide'
code='—'
else
s = ''
end
if special[i] then
spec = ' copro-spec'
else
spec = ''
end
table.insert( page, [[
<div class="coprorow]] .. s .. [[" id="copro-row-]] .. ids[i] .. [[">
<div class="copro copro-text]] .. spec .. [[" id="copro-text-]] .. ids[i] .. [[">]] .. strpr.FullName( { ['args'] = { tostring (codes[i]) } } ) .. [[</div>
<div class="copro copro-short]] .. spec .. [[" id="copro-short-]] .. ids[i] .. [[">]] .. strpr.ShortName( { ['args'] = { tostring (codes[i]) } } ) .. [[</div>
<div class="copro copro-N]] .. spec .. [[" id="copro-N-]] .. ids[i] .. [[">]] .. code .. [[</div>
<div class="copro copro-value" id="copro-value-]] .. ids[i] .. [[">]] .. value .. [[</div>
<div class="copro copro-min" id="copro-min-]] .. ids[i] .. [["></div>
<div class="copro copro-max" id="copro-max-]] .. ids[i] .. [["></div>
</div>
]] )
end
cands = mw.text.split( cands, ',', true )
local candcode = tonumber( arra[#arra-1] )
if not candcode then
return frame:expandTemplate{ title = 'error', args = { 'Номер первой строки с данными о кандидатах «' .. arra[#arra-1] .. '» не число!' } }
end
local candid = tonumber( ids[#ids-1] )
for i = 1, #cands do
k = mw.ustring.find( cands[i], ':', 1, true )
if k then
code = mw.ustring.sub( cands[i], 1, k-1 )
value = mw.text.trim( mw.ustring.sub( cands[i], k+1, -1 ) ) or ''
else
code = cands[i]
value = '—'
end
code = mw.text.trim( code )
if code == '' then
code = 'Кандидат № ' .. i
end
table.insert( page, [[
<div class="coprorow" id="copro-row-]] .. candid .. [[">
<div class="copro copro-text copro-cand" id="copro-text-]] .. candid .. [[">]] .. code .. [[</div>
<div class="copro copro-short copro-short-cand" id="copro-short-]] .. candid .. [[">]] .. code .. [[</div>
<div class="copro copro-N" id="copro-N-]] .. candid .. [[">]] .. candcode .. [[</div>
<div class="copro copro-value" id="copro-value-]] .. candid .. [[">]] .. value .. [[</div>
<div class="copro copro-min" id="copro-min-]] .. candid .. [["></div>
<div class="copro copro-max" id="copro-max-]] .. candid .. [["></div>
</div>
]] )
candid = candid+1
candcode = candcode+1
end
-- Против всех
k = mw.ustring.find( arra[#arra], ':', 1, true )
if k then
code = mw.ustring.sub( arra[#arra], 1, k-1 )
value = mw.text.trim( mw.ustring.sub( arra[#arra], k+1, -1 ) ) or ''
else
code = arra[#arra]
value = '—'
end
code = mw.text.trim( code )
if code == '-' then
s = ' copro-hide'
code = '—'
else
s = ''
code = candcode
end
table.insert( page, [[
<div class="coprorow]] .. s .. [[" id="copro-row-]] .. ids[#ids] .. [[">
<div class="copro copro-text" id="copro-text-]] .. ids[#ids] .. [[">]] .. strpr.FullName( { ['args'] = { 'ПВ' } } ) .. [[</div>
<div class="copro copro-short" id="copro-short-]] .. ids[#ids] .. [[">]] .. strpr.ShortName( { ['args'] = { 'ПВ' } } ) .. [[</div>
<div class="copro copro-N" id="copro-N-]] .. ids[#ids] .. [[">]] .. code .. [[</div>
<div class="copro copro-value" id="copro-value-]] .. ids[#ids] .. [[">]] .. value .. [[</div>
<div class="copro copro-min" id="copro-min-]] .. ids[#ids] .. [["></div>
<div class="copro copro-max" id="copro-max-]] .. ids[#ids] .. [["></div>
</div>
]] )
-- <div class="mw-collapsible mw-collapsed" style="float:none" data-collapsetext="▼ Свернуть журнал расчетов" data-expandtext="► Развернуть журнал расчетов">
table.insert ( page, [[
</div>
<div class="mw-collapsible mw-collapsed colleft" data-collapsetext=" " data-expandtext=" ">
<p><b> Журнал расчетов</b></p>
<div id="coprolog" class="mw-collapsible-content"></div>
</div>
]] )
return table.concat( page, '\n' )
end
return p