Модуль:Проверка протокола

Материал из Справочника наблюдателя
Перейти к:навигация, поиск

(i)      Описание модуля[]

Документация отсутствует!


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 .. [[&nbsp;</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="&#9660; Свернуть журнал расчетов" data-expandtext="&#9658; Развернуть журнал расчетов">

	table.insert ( page, [[
		</div>
		<div class="mw-collapsible mw-collapsed colleft" data-collapsetext="&#xF0D7;  " data-expandtext="&#xF0DA;  ">
			<p><b>&nbsp;&nbsp;Журнал&nbsp;расчетов</b></p>
			<div id="coprolog" class="mw-collapsible-content"></div>
		</div>
	]] )
	return table.concat( page, '\n' )
end

return p