Модуль:Дорожная карта
Материал из Справочника наблюдателя
Документация отсутствует!
Вы можете создать документацию ( создать ).
Задавайте категории на странице документации, а не здесь! Показать подстраницы
Задавайте категории на странице документации, а не здесь! Показать подстраницы
local p = {}
local family = 'Дорожная карта'
local tab = mw.loadData( 'Модуль:' .. family .. '/Параметры')
local billModule = require ('Модуль:Ссылки на закон')
local function defValue ( val, def)
if (val or '') == '' then
return def
end
return val
end
function tableFlip (x)
if x then
local y = {}
for k, v in pairs (x) do
y [mw.text.trim(tostring(v))] = mw.text.trim(tostring(k))
end
return y
end
end
function prostr (fedNo, code)
if code == true then
return fedNo
end
local n1 = tab.regions [code[1]].strpr [fedNo]
local n2
if #code == 1 then
n2 = n1
elseif #code == 2 then
n2 = tab.regions [code[2]].strpr [fedNo]
else -- #code > 2
for i = 2, #code do
if tab.regions [code[i]].strpr [fedNo] ~= n1 then
n2 = 1
break
end
end
if n2 then
n1,n2 = nil,nil
end
end
local res
if not n1 then
res = '<span class="rm-nonumber">' .. fedNo .. '</span>'
else
res = n1
end
if n2 ~= n1 then
if not n2 then
res = res .. '/<span class="rm-nonumber">' .. fedNo .. '</span>'
else
res = res .. n2
end
end
return res
end
function checkMarker (s)
return mw.ustring.gsub (s, '%(/(.-)/%)', '<span class="rm-marker">[<span>%1</span>]</span>')
end
function addBill (view, textPara, code, link, addl, addc, sect, subs)
return billModule.parseBill (textPara, code, addc, sect, subs, view == 'Экран', link, addl, checkMarker)
--[==[
if (textPara or '') == '' then
return nil
end
if not addl then
addl = ':Статья '
end
if not addc then
addc = 'ст.'
end
local testA, testS = mw.ustring.match (textPara, '^%s*(%d[%d%.%-−]+)%s*:([^,;]+)$')
if testA then
textPara = '<_' .. testA .. ':' .. mw.ustring.gsub (testS, '%+', ', ') .. '_>'
else
testA = mw.ustring.match (textPara, '^%s*(%d[%d%.%-−]+)%s*$')
if testA then
textPara = '<_' .. testA .. '_>'
end
end
if view ~= 'Экран' then
textPara = mw.ustring.gsub (textPara , '<_([^#][^:]-)_>', addc .. ' %1')
textPara = mw.ustring.gsub (textPara, '<_([^#][^:]-):%s*(%d[^:]-)_>', sect .. ' %2 ' .. addc .. ' %1')
textPara = mw.ustring.gsub (textPara, '<_([^#][^:]-):%s*(%d[^:]-):%s*([^:]-)_>', subs .. ' %3 ' .. sect .. ' %2 ' .. addc .. ' %1')
textPara = mw.ustring.gsub (textPara, '<_([^#][^:]-):(.-)_>', '%2 ' .. addc .. ' %1')
else
textPara = mw.ustring.gsub (textPara , '<_([^#][^:]-)_>', '[[' .. link .. addl .. '%1|' .. addc .. ' %1]]')
textPara = mw.ustring.gsub (textPara, '<_([^#][^:]-):%s*(%d[^:]-)_>', '[[' .. link .. addl .. '%1|' .. sect .. ' %2 ' .. addc .. ' %1]]')
textPara = mw.ustring.gsub (textPara, '<_([^#][^:]-):%s*(%d[^:]-):%s*([^:]-)_>', '[[' .. link .. addl .. '%1|' .. subs .. ' %3 ' .. sect .. ' %2 ' .. addc .. ' %1]]')
textPara = mw.ustring.gsub (textPara, '<_([^#][^:]-):(.-)_>', '[[' .. link .. addl .. '%1|%2 ' .. addc .. ' %1]]')
end
return '<b>' .. code .. ':</b> ' .. checkMarker (textPara)
--]==]
end
------------------------------------------------------------------- Формирование
-- Функция вызывается из основного шаблона [[Шаблон:Дорожная карта]] и
-- использует его параметры.
-- * Выполняет нормализацию параметров
-- * При вызове с параметром «вид=Экран» возвращает URL экранной формы (вызов
-- страницы [[Избирательная кампания/Дорожная карта]] с параметрами в URL
-- * При вызове с параметрами вид=(формат печати) заказывает a2f и
-- возвращает текст, содержащий ссылку на экранную форму и версию для печати.
--------------------------------------------------------------------------------
p ['Формирование'] = function (frame)
local gArgs = frame:getParent ().args
-- тип --
local countMethod = mw.ustring.lower(defValue (gArgs['тип'], 'ручной'))
if not tab.methods [countMethod] then
return 'Ошибка: недопустимое значение параметра «тип»'
elseif type (tab.methods [countMethod]) == 'string' then
countMethod = tab.methods [countMethod]
end
-- место, регион --
local pageName = mw.title.getCurrentTitle().baseText
--[==[
local pageCity, pageReg, pageDate = mw.ustring.match (pageName, '^(.+) %((.+)%)%, (%d%d%.%d%d%.%d%d%d%d)$')
if not pageCity then
pageCity, pageDate = mw.ustring.match (pageName, '^(.+)%, (%d%d%.%d%d%.%d%d%d%d)$')
pageReg = ''
end
local city = defValue (gArgs ['место'], pageCity or '_')
local reg = defValue (gArgs ['регион'], pageReg or '')
-- дата --
local vDate = defValue (gArgs ['дата'], pageDate or '')
local d,m,y = mw.ustring.match (vDate, '^(%d%d)%.(%d%d)%.(%d%d%d%d)$')
if d then
local months = {'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'}
d = tonumber (d)
m = months [tonumber(m)]
y = tonumber (y)
vDate = d .. ' ' .. m .. ' ' .. y .. ' года'
end
--]==]
local city, reg, vDate = '-', '-', '-'
-- код --
local code = defValue (gArgs ['код'], 'все')
-- кампаний --
local campCount = tonumber (gArgs ['кампаний'] or 1) or 1
if campCount < 1 then
campCount = '1'
end
-- округов --
local constCount = gArgs ['округов'] or ''
if constCount == 'нет' or constCount == '1' then
constCount = ''
end
-- твиттер --
local twitter = defValue (gArgs ['твиттер'], 'выборы')
twitter = mw.ustring.gsub (twitter, '#', '')
-- вид --
local view = mw.ustring.lower (defValue (gArgs ['вид'], 'Экран'))
view = mw.ustring.upper (mw.ustring.sub (view,1,1)) .. mw.ustring.sub (view,2,-1)
if view == 'Нет' then
view = 'Экран'
end
if not tab.views[view] then
return 'Ошибка: несуществующий вид печатной формы: ' .. view
end
local res = tostring (mw.uri.fullUrl( 'Избирательные кампании/' .. family , 'code=' .. code .. '&method=' .. countMethod .. '&flags=' .. (gArgs ['условия'] or '') .. '&view=Экран'))
if view ~= 'Экран' then
local label = defValue (gArgs ['метка'], view .. ', ' .. tab.methods [countMethod].file)
res = '[' .. res .. ' ' .. label .. ']' .. frame:callParserFunction{ name = '#a2f',
args = { 'Избирательные кампании/' .. family .. '/Файл doc/pattern',
pageName .. '/' .. city .. '!' .. reg .. '!' .. vDate .. '!' .. code .. '!' .. campCount .. '!' .. (gArgs ['кандидатов'] or '') .. '!' .. view .. '!' .. constCount .. '!' .. countMethod
.. '!' .. (gArgs ['условия'] or '') .. '!' .. twitter .. '!' .. (gArgs ['смс'] or ''),
pageName .. ' [' .. label .. '].doc'
} }
res = res .. ' ([http://www.nablawiki.ru/images/ArticleToFile/'
.. mw.uri.encode(pageName .. ' [' .. label .. '].doc', 'PATH')
.. ' версия для печати])'
.. ' [[Категория:Страницы, формирующие дорожные карты]]'
end
return res
end
---------------------------------------------------- Формирование печатной формы
-- Вызов этой функции с параметром {{FULLPAGENAME}} должен являться единственным
-- содержимым страницы «Избирательные кампании/Дорожная карта/Файл doc/pattern»,
-- которая вызывается срабатыванием a2f. Параметр (имя страницы) определяется
-- заказом a2f, там в единую строку собраны все входные параметры.
-- Выполняет вызов страницы «Избирательные кампании/Дорожная карта/Файл doc/
-- pattern/имя-печатной формы» со всеми параметрами
--------------------------------------------------------------------------------
-- Формат заголовка страницы
-- 1 2 3 4 5 6 7 8 9 10 11 12 13
-- {{BASEPAGENAME}}/{{{место|}}}!{{{регион|}}}!{{{дата|}}}!{{{код|}}}!{{{кампаний|}}}!{{{кандидатов|}}}!{{{вид|}}}!{{{округов|}}}!{{{тип|}}}!{{{условия|}}}!{{{твиттер|}}}!{{{смс}}}
-- BASEPAGENAME должно относиться к странице «кампания/Дорожная карта» (либо к ее включению на странице кампании), поэтому можно
-- считать, что там также содержится «место, дата» либо «место (регион), дата».
p ['Формирование печатной формы'] = function (frame)
local basePageName, headerCity, headerReg, headerDate, headerCode, headerCampCount, headerCandCount, headerView, headerConstCount, headerMethod, headerFlags, twitter, sms =
mw.ustring.match (frame.args[1], '^([^/]+)/([^!]*)!([^!]*)!([^!]*)!([^!]*)!([^!]*)!([^!]*)!([^!]*)!([^!]*)!([^!]*)!([^!]*)!([^!]*)!([^!]*)$')
if not tab.views[headerView] or headerView == 'Экран' then
return 'Неверные параметры! «' .. frame.args[1] .. '»: ' .. headerView
end;
-- разбор места и даты делается только здесь, потому что иначе заголовок страницы превосходит ограничение Mediawiki в 255 байтов
-- место, регион --
headerCity, headerReg, headerDate = mw.ustring.match (basePageName, '^(.+) %((.+)%)%, (%d%d%.%d%d%.%d%d%d%d)$')
if not headerCity then
headerCity, headerDate = mw.ustring.match (basePageName, '^(.+)%, (%d%d%.%d%d%.%d%d%d%d)$')
headerReg = ''
end
if not headerCity then
headerCity, headerReg, headerDate = '_', '', ''
end
-- дата --
local d,m,y = mw.ustring.match (headerDate, '^(%d%d)%.(%d%d)%.(%d%d%d%d)$')
if d then
local months = {'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'}
d = tonumber (d)
m = months [tonumber(m)]
y = tonumber (y)
headerDate = d .. ' ' .. m .. ' ' .. y .. ' года'
end
-- Вызываем pattern печатной формы нужного вида, передаем все параметры — это залог их глобальности
return frame:expandTemplate {title = ':Избирательные кампании/' .. family .. '/Файл doc/pattern/' .. (tab.views [headerView].redirect or headerView),
args = {headerCity=headerCity, headerReg=headerReg, headerDate=headerDate, code=headerCode, headerCampCount=headerCampCount,
headerCandCount=headerCandCount, method=headerMethod, headerConstCount=headerConstCount, view=headerView, flags=headerFlags, twitter=twitter, sms=sms }}
end
--[[ Функция вызывается со страницы
«Избирательные кампании/Дорожная карта (х)/Файл doc/pattern/Компактная»
К моменту вызова функции уже сформированы все html-заголовки вплоть до
<body> и главного div, определяющего печатный формат страницы.
]]
p ['Шапка компактной формы'] = function (frame)
local gArgs = frame:getParent ().args
countMethod = tab.methods [gArgs.method].name
local headerCity, headerDate = gArgs.headerCity, gArgs.headerDate
if headerCity == '' then
headerCity = ' '
end
if headerDate == '' then
headerDate = ' '
end
local a, b = mw.ustring.match (headerDate, '^(.+ .+) (20.. года)$')
if b then
headerDate = a .. '<br>' .. b
end
local res = [[
<table class="nwrm-hdr">
<tr>
<td class="nwrm-hdr-title">ДОРОЖНАЯ КАРТА</td>
<td class="nwrm-hdr-space"> </td>
<td class="nwrm-hdr-date">]] .. headerDate .. [[</td>
<td class="nwrm-hdr-space"> </td>
<td class="nwrm-hdr-city">]] .. headerCity .. '<span class="nwrm-hdr-reg"><br>' .. gArgs.headerReg .. '</span></td>'
if gArgs.headerConstCount ~= '' then
res = res .. [[
<td class="nwrm-hdr-space"> </td>
<td class="nwrm-hdr-constituency">№ округа</td>]]
end
res = res .. [[
<td class="nwrm-hdr-space"> </td>
<td class="nwrm-hdr-district">№ УИК</td>
</tr>
</table>
<table class="rm-2col">
<tr>
<td><p class="nwrm-hdr-c">∇ <i>nablawiki.ru, 2020. Концепция К−З−К, 2012</i></p></td>
<td><p class="nwrm-hdr-type">]] .. countMethod ..[[</p></td>
</tr>
</table>
]]
return res
end
--[[ Функция вызывается со страницы
«Избирательные кампании/Дорожная карта (х)/Файл doc/pattern/Блокнот»
((( !!!! это не так, все берем из parent frame
с передачей всех параметров, сформированных для этой страницы функцией
'Формирование печатной формы'. Имена параметров следует согласовать
с параметрами исходного шаблона («Шаблон:Дорожная карта (3)/Печатная форма»,
который нужно переименовать в просто «Дорожная карта (х)»).
!!!! )))
К моменту вызова функции уже сформированы все html-заголовки вплоть до
<body> и, возможно, главных div, определяющих формат страницы.
]]
p ['Шапка блокнота'] = function (frame)
local gArgs = frame:getParent ().args
countMethod = tab.methods [gArgs.method].name
local headerCity, headerReg, headerDate = gArgs.headerCity, gArgs.headerReg, gArgs.headerDate
if headerCity == '' then
headerCity, headerReg = headerReg, ''
end
if headerDate == '' then
headerDate = ' '
end
return [[
<table class="nwrm-hdr"><tr><td>
<p class="nwrm-hdr-title">«ДОРОЖНЫЙ БЛОКНОТ»</p>
<p class="nwrm-hdr-subtitle1">общественного контролёра в участковой избирательной комиссии</p>
<p class="nwrm-hdr-subtitle2">(наблюдателя, представителя СМИ, члена УИК с правом совещательного голоса)</p>
<p class="nwrm-hdr-city">]] .. headerCity .. [[</p>
<p class="nwrm-hdr-reg">]] .. headerReg .. [[</p>
<p class="nwrm-hdr-date">]] .. headerDate .. [[</p>
<p class="nwrm-hdr-type">]] .. countMethod ..[[</p>
</td></tr></table>
<div style="text-align:left; ">
<p class="rm-blockName">Личные данные:</p>
<table style="width:61%; border-collapse: collapse; "><tr><td class="nwrm-hdr-anketa">Фамилия: </td><td style="border-bottom: 0.25pt solid black; width:100%"> </td></tr></table>
<table style="width:61%; border-collapse: collapse; "><tr><td class="nwrm-hdr-anketa">Имя: </td><td style="border-bottom: 0.25pt solid black; width:100%"> </td></tr></table>
<table style="width:61%; border-collapse: collapse; "><tr><td class="nwrm-hdr-anketa">Отчество: </td><td style="border-bottom: 0.25pt solid black; width:100%"> </td></tr></table>
<table style="width:61%; border-collapse: collapse; "><tr><td class="nwrm-hdr-anketa">Мобильный телефон: </td><td td style="text-align:right; "> </td><td class="nwrm-hdr-anketa">+7 ( __ __ __ ) __ __ __ — __ __ — __ __</td></tr></table>
<p class="rm-blockName">Место наблюдения:</p>
<table style="width:100%; border-collapse: collapse; "><tr><td class="nwrm-hdr-anketa">Район, населенный пункт: </td><td style="border-bottom: 0.25pt solid black; width:100%"> </td></tr></table>
<table style="border-collapse: collapse; "><tr><td class="nwrm-hdr-anketa">Номер избирательного участка: </td><td>__ __ __ __</td></tr></table>
</div>
<p class="rm-pagebreak"> </p>
]]
end
--[[Функция работает на основную (хронологическую) таблицу для компактной, новой и экранной форм.
]]
p ['Заголовок основной таблицы'] = function (frame)
local gArgs = frame:getParent ().args
local view = gArgs.view
local rowspan = ' rowspan=2'
if view =='Новая' then
rowspan = ''
end
local res = [[
<table class="rm">
<tr>
<th]] .. rowspan .. [[><p class="rmp-th">Контролируемое событие</p></th>
]]
if gArgs.view ~= 'Экран' then
res = res .. [[
<th]] .. rowspan .. [[><p class="rmp-th">кол-во/<br>время</p></th>
]]
end
if gArgs.view == 'Компактная' then
res = res .. [[
<th]] .. rowspan .. [[><p class="rmp-th">да</p></th>
<th]] .. rowspan .. [[><p class="rmp-th">нет</p></th>
]]
end
if gArgs.view ~= 'Новая' then
res = res .. [[
<th colspan=2 style="border-bottom:0; "><p class="rmp-th" style="text-align:right; ">Куда писать жалобу</p></th>
]]
else
res = res .. [[
<th ><p class="rmp-th">Каким законом установлено</p></th>
]]
end
res = res .. [[
<th]] .. rowspan .. [[><p class="rmp-th">Норма об отв-сти</p></th>
]]
if gArgs.view == 'Экран' then
res = res .. [[
<th]] .. rowspan .. [[><p class="rmp-th">Полезные ссылки</p></th>
]]
end
if gArgs.view ~= 'Новая' then
res = res .. [[
</tr>
<tr>
<th ><p class="rmp-th">Каким законом установлено</p></th>
<th style="border-top:0"><p class="rmp-th"> </p></th>
]]
end
return res .. [[
</tr>
]]
end
--[[Функция работает на основную (хронологическую) таблицу для компактной и новой форм.
]]
p ['Завершение основной таблицы'] = function (frame)
local gArgs = frame:getParent ().args
local view = gArgs.view
local res = [[
<tr>
<td class="rm-constrLabel">α</td>
<td> </td>
]]
if view == 'Компактная' then
res = res .. [[
<td> </td>
<td> </td>
]]
end
res = res .. [[
<td class="rm-constrLabel">β</td>
]]
if view == 'Компактная' then
res = res .. [[
<td class="rm-constrLabel-small">γ</td>
]]
end
return res .. [[
<td class="rm-constrLabel">δ</td>
</tr>
</table><!-- Покончили с главной таблицей -->
<p class="rm-text">α, β, γ, δ — метки для «Конструктора жалоб» (см. последнюю страницу).</p>
<p class="rm-text"> </p>
]]
end
p ['Заголовок таблицы хардкора'] = function (frame)
local gArgs = frame:getParent ().args
local view = gArgs.view
local res = [[
<table class="rm">
<tr>
<td class="rm-constrLabel">α</td>
<td class="rm-constrLabel">β</td>
]]
if view == 'Компактная' then
res = res .. [[
<td class="rm-constrLabel-small">γ</td>
]]
end
return res .. [[
<td class="rm-constrLabel">δ</td>
</tr>
]]
end
--[[Функция работает на основную (хронологическую) таблицу для блокнота.
]]
p ['Заголовок основной таблицы блокнота'] = function (frame)
return '<table class="rm">'
end
--------------------------------------------------------------------------------
-- Формирование заголовка раздела
p ['Раздел'] = function (frame)
local ownArgs = frame.args
local gArgs = frame:getParent().args
local code, method, view, flags, chapter = gArgs.code, gArgs.method, gArgs.view, gArgs.flags, gArgs.chapter
if not tab.methods [method].incC then
return ''
end
if view ~= 'Блокнот' then
return ' <tr>\n <td class="rm-section" colspan=' .. tab.views[view].cols .. '><p class="rmp-section">' .. ownArgs [1] .. '</p></td>\n </tr>\n'
else
return [[
<tr style="page-break-inside: avoid; ">
<td class="rm-section" colspan=]] .. tab.views[view].cols .. '><p style="page-break-after:avoid; "><span class="rm-section-t"> ' .. mw.text.trim (ownArgs [1]) .. [[. </span></p></td>
</tr>
<tr style="page-break-inside: avoid; ">
<th rowspan=2 ><p style="page-break-after:avoid; ">№</p></th>
<th rowspan=2 ><p style="page-break-after:avoid; ">Действие или событие</p></th>
<th rowspan=2 ><p style="page-break-after:avoid; ">Да?</p></th>
<th colspan=2 style="text-align:right; border-bottom:0; "><p style="page-break-after:avoid; ">Комиссия, куда жаловаться</p></th>
<th rowspan=2 ><p style="page-break-after:avoid; ">Ответственность</p></th>
</tr>
<tr>
<th ><p style="page-break-after:avoid; ">Норма</p></th>
<th style="border-top:0"><p style="page-break-after:avoid; "> </p></th>
</tr>
]]
end
end
--------------------------------------------------------------------------------
-- Формирование заголовка ветвления
p ['Ветка'] = function (frame)
local ownArgs = frame.args
local gArgs = frame:getParent().args
local code, method, view, flags, chapter = gArgs.code, gArgs.method, gArgs.view, gArgs.flags, gArgs.chapter
local forMethod = mw.text.trim (mw.ustring.lower (ownArgs [1]))
local txt = mw.text.trim (ownArgs [2])
local class
if not code then
return '<b>(' .. ownArgs[1] .. ') ' .. ownArgs[2] .. '</b><br>'
end
if forMethod == 'коиб' then
if tab.methods[method].incK == 1 then
class = 'outside'
txt = 'О действиях при наличии КОИБ см. раздел «' .. txt .. '» на вкладыше'
elseif (tab.methods[method].incK == 3) and not tab.methods[method].incC then
class = 'section'
txt = txt .. ' (КОИБ)'
else
return nil
end
elseif forMethod == 'ручной' then
if tab.methods[method].incM == 1 then
class = 'outside'
txt = 'О действиях при ручном подсчете см. раздел «' .. txt .. '» на вкладыше'
elseif tab.methods[method].incM == 3 and not tab.methods[method].incC then
class = 'section'
txt = txt .. ' (ручной подсчет)'
else
return nil
end
else
class = 'section'
txt = 'НЕВЕРНОЕ УКАЗАНИЕ СПОСОБА ПОДСЧЕТА ДЛЯ ВЕТВЛЕНИЯ: «' .. ownArgs [1] .. '»!'
end
return [[
<tr>
<td class="rm-]] .. class .. [[" colspan=]] .. tab.views[view].cols .. [[><p class="rmp-]] .. class ..[[">]] .. txt .. [[</p></td>
</tr>
]]
end
--------------------------------------------------------------------------------
-- Формирование основной строки таблицы
-- Передаваемые параметры:
---- событие=Событие
---- совет=Совет
---- если=список-условий
---- для=список-кодов
---- кроме=список-кодов
---- дляКОИБ=тоже/нет/текст
p ['Строка'] = function (frame)
local ownArgs = frame.args
local gArgs = frame:getParent().args
local code, method, view, flags, chapter = gArgs.code, gArgs.method, gArgs.view, gArgs.flags, gArgs.chapter
local univers
function prostr1 (x)
return prostr (x, univers or code)
end
if not code then
return ownArgs['событие'] .. '<br>'
end
local debugFlag = defValue (ownArgs ['debug'], nil)
-- разбираемся со статусом строки по отношению к КОИБ
-- дляКОИБ = (пусто) | нет | да
local forkoib = ownArgs ['дляКОИБ'] or ''
local koibLabel
if (forkoib == '') then
if not tab.methods[method].incC then
return ''
end
elseif forkoib == 'нет' then
if tab.methods[method].incM < 2 then
return ''
end
koibLabel = -1
else -- значит, да!
if tab.methods[method].incK < 2 then
return ''
end
koibLabel = 1
end
-- с точки зрения КОИБ строка точно рисуется, с пометкой или без
if code == 'все' then
univers = true
code = {}
for k,v in pairs (tab.regions) do
table.insert (code, k)
end
table.sort (code)
elseif code == 'нет' then
code = nil
else
code = mw.text.split (code, ',', true)
end
local codeSet
if code then
codeSet = tableFlip (code)
end
local forCode = ownArgs ['для']
if forCode == '' then
forCode = nil
end
if forCode then
if not codeSet then
return '' -- нас интересуют только универсальные строки
end
forCode = mw.text.split (forCode, ',', true)
end
local forNoCode = ownArgs ['кроме']
if forNoCode == '' then
forNoCode = nil
end
if forNoCode then
forNoCode = mw.text.split (forNoCode, ',', true)
end
if forCode and forNoCode then
return 'Ошибка: либо туда, либо сюда :: ' .. ownArgs['событие']
end
if not univers then
local yes
if forCode then
for i, val in ipairs (forCode) do
if codeSet [mw.text.trim (val)] then
yes = true
break
end
end
elseif forNoCode then
for i, val in ipairs (forNoCode) do
if codeSet [mw.text.trim (val)] then
yes = true
break
end
end
yes = not yes
else
yes = true
end
if not yes then
return -- не подходит
end
end
-- строку надо показывать, если
-- все указанные в forFlags условия выполняются (присутствуют во flags), или
-- flags не указан и (ЗАМЕНЯЕМ НА "ИЛИ", т.к. даже ФЗГ имеет флаги) режим univers
-- в forFlags значение может быть с минусом (отрицание)
if flags == '' then -- если флаги не заданы, то берем флаги первого указанного региона
flags = tab.regions [ code[1] or tab.fzgCode ].flags
elseif flags == 'нет' then
flags = ''
end
flags = mw.ustring.lower (flags)
if flags == '' then
flags = nil
else
flags = mw.text.split (flags, ',', true)
flags = tableFlip (flags)
end
if flags ['доср-уик'] or flags ['доср-тик'] then
flags ['доср'] = true
end
if flags ['доср'] or flags ['доср-ог'] or flags ['доср-цик'] then
flags ['доср-все'] = true
end
local forFlags = ownArgs ['если']
if forFlags == '' then
forFlags = nil
end
if forFlags then
forFlags = mw.text.split (mw.ustring.lower(forFlags), ',', true)
end
if flags and forFlags then
if flags ['доср-уик'] or flags ['доср-тик'] then
flags ['доср'] = true
end
local condName
yes = true
for i, val in ipairs (forFlags) do
condName = mw.text.trim (val)
if ( mw.ustring.sub (condName, 1, 1) == '-' and flags [mw.ustring.sub (condName, 2, -1)] )
or ( mw.ustring.sub (condName, 1, 1) ~= '-' and not flags [condName] ) then
-- if condName == '-мм' then
-- return '<tr><td>ОБЛОМ ' .. mw.dumpObject( flags ) .. '</td></tr>'
-- end
yes = false
break
end
end
if not univers and not yes then
return -- должны выполняться все условия
end
elseif forFlags and not flags and not univers then
return
end
-- по условиям проходим
local outres = {}
table.insert (outres, ' <tr style="page-break-inside: avoid; ">\n')
if view == 'Блокнот' then
local colorClass
if koibLabel == -1 then
colorClass = 'rm-manualNumber'
elseif koibLabel == 1 then
colorClass = 'rm-koibNumber'
else
colorClass = 'rm-Number'
end
table.insert (outres, ' <td class="' .. colorClass ..'"><p> </p></td>\n')
end
table.insert (outres, ' <td class="rm-situation"><p class="rmp-situation">')
if view ~= 'Блокнот' then
if koibLabel == 1 and tab.methods[method].incK == 2 then
table.insert (outres, '<span class="rm-only-K"> K </span> ')
elseif koibLabel == -1 and tab.methods[method].incM == 2 then
table.insert (outres, '<span class="rm-only-R"> Р </span> ')
end
end
if univers and forCode then
for key,val in ipairs (forCode) do
table.insert (outres, '<span class="rm-reg-marker-reg">(' .. val .. ')</span> ')
end
end
if univers and forNoCode then
for key,val in ipairs (forNoCode) do
table.insert (outres, '<span class="rm-reg-marker-noreg">(−' .. val .. ')</span> ')
end
end
if univers and forFlags then
for key,val in ipairs (forFlags) do
table.insert (outres, '<span class="rm-reg-marker">[' .. val .. ']</span> ')
end
end
local txt = checkMarker (ownArgs ['событие'])
table.insert (outres, (mw.ustring.gsub (txt, '<_#(.-)_>', prostr1 )))
txt = ownArgs ['совет'] or ''
if txt ~= '' then
table.insert (outres, '. <span class="rm-hint">' .. txt .. '</span>')
end
table.insert (outres, '</p></td>\n')
if chapter == 'main' and (view == 'Компактная' or view == 'Новая') then
txt = ownArgs ['показатель']
if txt == 'есть' or txt == 'да' then
txt = ' <td class="rm-data"><p class="rmp-data">'
else
txt = ' <td class="rm-data-X"><p class="rmp-data-X">X'
end
table.insert (outres, txt .. '</p></td>\n')
if view == 'Компактная' then
table.insert (outres, '<td class="rm-yes"> </td>\n <td class="rm-no"> </td>\n')
end
elseif view == 'Блокнот' then
table.insert (outres, ' <td class="rm-yes"><span style="font-size:16pt;">❑</span><br>(да)</td>\n')
end
-- НПА
table.insert (outres, ' <td class="rm-rule"><p class="rmp-rule">')
if univers and forFlags then
for key,val in ipairs (forFlags) do
table.insert (outres, '<span class="rm-reg-marker">[' .. val .. ']</span> ')
end
end
local billtab = {}
table.insert (billtab, addBill (view, ownArgs ['все'],
tab.regions[tab.fzgCode].code, tab.regions[tab.fzgCode].link, tab.regions[tab.fzgCode].addl, tab.regions[tab.fzgCode].addc, tab.regions[tab.fzgCode].sect, tab.regions[tab.fzgCode].subs))
table.insert (billtab, addBill (view, ownArgs ['КОИБ'],
tab.regions[tab.koibCode].code, tab.regions[tab.koibCode].link, tab.regions[tab.koibCode].addl, tab.regions[tab.koibCode].addc, tab.regions[tab.koibCode].sect, tab.regions[tab.koibCode].subs))
if code then
for i = 1, #code do
table.insert (billtab, addBill (view, ownArgs [code[i]],
tab.regions[code[i]].code, tab.regions[code[i]].link, tab.regions[code[i]].addl, tab.regions[code[i]].addc, tab.regions[code[i]].sect, tab.regions[code[i]].subs))
if tab.regions[code[i]].code1 then
table.insert (billtab, addBill (view, ownArgs [code[i]..'+'],
tab.regions[code[i]].code1, tab.regions[code[i]].link1, tab.regions[code[i]].addl1, tab.regions[code[i]].addc1, tab.regions[code[i]].sect1, tab.regions[code[i]].subs1))
end
end
end
table.insert (outres, table.concat (billtab, '; '))
table.insert (outres, '</p></td>\n')
if view ~= 'Новая' then
table.insert (outres, ' <td class="rm-addr"><p class="rmp-addr">' .. (ownArgs['куда'] or '') .. '</p></td>\n')
end
table.insert (outres, ' <td class="rm-penalty"><p class="rmp-penalty">')
billtab = {}
table.insert (billtab, addBill (view, ownArgs ['КоАП'], 'КоАП', 'НПА:Кодекс Российской Федерации об административных правонарушениях', nil, nil, 'ч.', 'п.'))
table.insert (billtab, addBill (view, ownArgs ['УК'], 'УК', 'НПА:Уголовный кодекс Российской Федерации', nil, nil, 'ч.', 'п.'))
table.insert (outres, table.concat (billtab, '; '))
table.insert (outres, '</p></td>\n')
if view == 'Экран' then
table.insert (outres, ' <td class="rm-links">' .. (ownArgs['ТС'] or '') ..
' <span class="doclink" style="font-weight:bold; font-style:italic">' .. (ownArgs['жалоба'] or '') .. '</span></td>\n') -- rm-???
end
table.insert (outres, ' </tr>\n')
return table.concat (outres)
end
p ['Сокращения'] = function (frame)
local ownArgs = frame.args
local gArgs = frame:getParent().args
local code, method, view, flags, chapter = gArgs.code, gArgs.method, gArgs.view, gArgs.flags, gArgs.chapter
local outres = {}
local univers
if code == 'все' then
univers = true
code = {}
for k,v in pairs (tab.regions) do
table.insert (code, k)
end
table.sort (code)
elseif code == 'нет' then
code = {}
else
code = mw.text.split (code, ',', true)
end
if not univers then
table.insert (code, 1, tab.fzgCode)
if tab.methods[method].incK ~= 0 then
table.insert (code, 2, tab.koibCode)
end
end
for key, val in ipairs (code) do
table.insert (outres, '<p class="rm-abbr"><b>' .. tab.regions[val].code .. '</b> — ' .. tab.regions[val].name .. '</p>')
if tab.regions[val].code1 then
table.insert (outres, '<p class="rm-abbr"><b>' .. tab.regions[val].code1 .. '</b> — ' .. tab.regions[val].name1 .. '</p>')
end
end
table.insert (outres, '<p class="rm-abbr"><b>ИМН</b> — «Порядок подачи заявления о включении избирателя в список избирателей по месту нахождения...» (пост. ЦИК от 06.06.2018 № 161/1316−7)</p>')
table.insert (outres, '<p class="rm-abbr"><b>ДГЦИК</b> — «Порядок досрочного голосования... с применением дополнительных форм организации голосования... 13.09.2020» (пост. ЦИК от 24.07.2020 № 260/1916−7)</p>')
table.insert (outres, '<p class="rm-abbr"><b>КоАП</b> — Кодекс РФ об административных правонарушениях</p>')
table.insert (outres, '<p class="rm-abbr"><b>УК</b> — Уголовный кодекс РФ</p>')
table.insert (outres, '<p class="rm-abbr"><b>ПРГ</b> — право решающего голоса (или член комиссии с правом решающего голоса</p>')
table.insert (outres, '<p class="rm-abbr"><b>ПСГ</b> — право совещательного голоса (или член комиссии с правом совещательного голоса</p>')
table.insert (outres, '<p class="rm-abbr"><b>ТИК</b> — территориальная (или иная вышестоящая) комиссия</p>')
table.insert (outres, '<p class="rm-abbr"><b>УИК</b> — участковая избирательная комиссия</p>')
table.insert (outres, '<p class="rm-abbr"><b>УФП</b> — увеличенная форма протокола</p>')
table.insert (outres, '<p class="rm-abbr"><b>ст.</b> — статья, <b>п.</b> — пункт, <b>ч.</b> — часть, <b>п/п</b> — подпункт</p>')
return table.concat (outres)
end
p ['Таблица сведений о выездах'] = function (frame)
local gArgs = frame:getParent().args
local code, method, view, flags, chapter, twitter = gArgs.code, gArgs.method, gArgs.view, gArgs.flags, gArgs.chapter, gArgs.twitter
twitter = '#' .. mw.ustring.gsub (twitter, ' ', ' #')
if view == 'Экран' or not tab.methods[method].incC then
return ''
end
return [==[
<tr style="page-break-inside: avoid; ">
<td colspan=]==] .. tab.views[view].cols .. [==[>
<table class="rm-2col">
<tr>
<td class="rm-left">
<table class="rm-box1">
<tr>
<td style="text-align:right; font-size:16pt; line-height: 16pt; mso-line-height-rule: exactly; font-weight: bold; ">8 (800) 333 33 50</td>
<td style="padding-left: 3pt; ">Сообщайте о нарушениях<br>Получайте консультации<br>Бесплатные звонки из любой точки России</td>
</tr>
<tr>
<td style="text-align:right; font-size:12pt; line-height: 12pt; mso-line-height-rule: exactly; font-style: italic; font-weight: bold; ">www.kartanarusheniy.org</td>
<td style="padding-left: 3pt; ">Следите за ситуацией<br>по «Карте нарушений»</td>
</tr>
<tr>
<td style="text-align:right; font-size:12pt; line-height: 12pt; mso-line-height-rule: exactly; font-style: italic; font-weight: bold; ">]==] .. twitter .. [==[</td>
<td style="padding-left: 3pt; ">Освещайте события дня в социальных сетях</td>
</tr>
</table>
<p class="rm-blockName" style="margin-top:12pt; ">Сведения о явке избирателей (не путайтесь в надомниках!)</p>
<table class="rm" style="border-width:0; ">
<tr>
<td style="width:2.1cm; height:16pt; border-left:none; "><p class="rmp-counting">По состоянию<br>на ... <i>(время)</i></p></td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td style="height:16pt; border-left:none; "><p class="rmp-counting">Явка по данным<br>комиссии</p></td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td style="height:16pt; border-left:none; border-bottom:none; "><p class="rmp-counting">Явка по данным<br>наблюдателей</p></td>
<td style="border-left:none; border-bottom:none; "> </td>
<td style="border-left:none; border-bottom:none; "> </td>
<td style="border-left:none; border-bottom:none; "> </td>
<td style="border-left:none; border-bottom:none; "> </td>
<td style="border-left:none; border-bottom:none; "> </td>
<td style="border-left:none; border-bottom:none; "> </td>
</tr>
</table>
</td>
<td class="rm-spaceLR"></td>
<td class="rm-right">
<p class="rm-blockName">Сведения о выездах для голосования вне помещения</p>
<table class="rm" style="border-width:0; ">
<tr>
<th><p class="rmp-home-th">Объявлено <i>(время)</i></p></th>
<th><p class="rmp-home-th">Выехали <i>(время)</i></p></th>
<th><p class="rmp-home-th">Набл. есть?</p></th>
<th><p class="rmp-home-th">№ ящика</p></th>
<th><p class="rmp-home-th">Размер выписки</p></th>
<th><p class="rmp-home-th">Взято бюллетеней</p></th>
<th><p class="rmp-home-th">Число отказов</p></th>
<th><p class="rmp-home-th">Сверх плана</p></th>
<th style="border-right:none; "><p class="rmp-home-th">Вернулись <i>(время)</i></p></th>
</tr>
<tr>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; border-right:none; "> </td>
</tr>
<tr>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; border-right:none; "> </td>
</tr>
<tr>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; border-right:none; "> </td>
</tr>
<tr>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; border-right:none; "> </td>
</tr>
<tr>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; "> </td>
<td style="height:16pt; border-right:none; "> </td>
</tr>
<tr>
<td style="height:16pt; border-bottom: none; "> </td>
<td style="height:16pt; border-bottom: none; "> </td>
<td style="height:16pt; border-bottom: none; "> </td>
<td style="height:16pt; border-bottom: none; "> </td>
<td style="height:16pt; border-bottom: none; "> </td>
<td style="height:16pt; border-bottom: none; "> </td>
<td style="height:16pt; border-bottom: none; "> </td>
<td style="height:16pt; border-bottom: none; "> </td>
<td style="height:16pt; border-bottom: none; border-right:none; "> </td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
]==]
end
function makeReport (code, candCount, dosrU, dosrT, dosrOG, otkr, nostr4, ou)
function strprComp (aaa, bbb)
local aaad, bbbd = tonumber (aaa), tonumber (bbb)
local aaal, bbbl = '0', '0'
if not aaad then
aaad = tonumber (mw.ustring.sub (aaa,1,-2))
aaal = mw.ustring.sub (aaa,-1,-1)
end
if not bbbd then
bbbd = tonumber (mw.ustring.sub (bbb,1,-2))
bbbl = mw.ustring.sub (bbb,-1,-1)
end
return aaad < bbbd or (aaad == bbbd and aaal < bbbl)
end
local outres = {}
local setS0 = tab.regions [code].strpr
local setS = tableFlip (setS0) -- setS - набор пар loc=fed
if nostr4 and not (dosrOG or dosrU) then
setS [setS0 ['4']] = nil
end
setS [setS0 ['12']] = nil
local dosr = dosrU or dosrT -- or dosrOG (досрочное голосование отдельных групп не влечет отдельного подсчета)
if not ou and setS0['11а'] then
setS[setS0['11а']], setS[setS0['11б']], setS[setS0['11в']],
setS[setS0['11г']], setS[setS0['11д']], setS[setS0['11е']]
= nil, nil, nil, nil, nil, nil
end
function printCell (locCode)
-- т.к. в основном протоколе всегда не меньше 11 строк, жалобы и досрочка всегда будут только в самой правой колонке
local color = ''
if setS [locCode] then -- это обычный код
table.insert (outres, ' <td class="rm-strpr-str">' .. tab.strprText[setS [locCode]] .. '</td><td class="rm-strpr-num">' .. locCode .. '</td>')
else
if locCode == 'пустышка' then
table.insert (outres, ' <td class="rm-strpr-str" colspan=4> </td>\n')
return
elseif locCode == 'доЗгл' then
table.insert (outres, ' <td class="rm-strpr-dosrHeader" colspan=4>Отдельный подсчет<br>по бюллетеням проголосовавших досрочно</td>\n')
return
elseif locCode == 'жалобы' then
table.insert (outres, ' <td class="rm-strpr-str" colspan=2 style="width:17.93%;">'.. tab.strprText ['жалобы'] .. '</td>')
else -- досрочные показатели
table.insert (outres, ' <td class="rm-strpr-dosr" colspan=2 style="width:17.93%;">'.. tab.strprText [locCode] .. '</td>')
color = '-dosr'
end
end
local doText = ' '
if setS [locCode] == '4' then
if not dosrT then
doText = '= 0'
elseif not (dosrOG or dosrU) then
doText = '= [' .. setS0['3'] .. ']'
end
elseif setS [locCode] == '3' then
if not ( dosrT or dosrU or dosrOG ) then
doText = '= 0'
end
end
table.insert (outres, '<td class="rm-strpr-data1' .. color ..'"> </td><td class="rm-strpr-data2' .. color ..'">' .. doText .. '</td>\n')
end
local arrayS = {}
for loc,fed in pairs (setS) do
table.insert (arrayS, loc)
end
table.sort (arrayS, strprComp) -- arrayS - отсортированный массив loc
local m = #arrayS % 3
if (m == 0 and dosr) or (m == 1) or (m == 2 and not dosr) then
table.insert (arrayS, 'жалобы') -- Число жалоб
end
if dosr then
if m == 0 then
table.insert (arrayS, 'доЗгл') -- Заголовок досрочки
end
table.insert (arrayS, 'доВсего')
table.insert (arrayS, 'доДей')
table.insert (arrayS, 'доНедей')
table.insert (arrayS, 'доНеуст')
elseif m == 1 then
table.insert (arrayS, 'пустышка') -- пустышка
end
m = math.floor (#arrayS / 3 + 0.1) -- это всегда целое
table.insert (outres, ' <table class="rm-strpr">\n')
for i = 1, m do
table.insert (outres, ' <tr>\n')
printCell (arrayS [i])
printCell (arrayS [i+m])
printCell (arrayS [i+2*m])
table.insert (outres, ' </tr>\n') --<td>' .. ( arrayS [i+2*m] or '???' ) .. '</td>
end
table.insert (outres, [[
</table>
<table class="rm-strpr">
<tr>
<td class="rm-strpr-header" colspan=12>Результаты кандидатов</td>
</tr>
]] )
if dosr then
table.insert (outres, [[
<tr>
<td class="rm-strpr-header" colspan=2>Кандидат</td>
<td class="rm-strpr-header" colspan=2 style="border-left-width: 0.25pt; ">Общий итог</td>
<td class="rm-strpr-dosrHeader" colspan=2 style="border-left-width: 0.25pt; ">Отд. подсчет досроч.</td>
<td class="rm-strpr-header" colspan=2>Кандидат</td>
<td class="rm-strpr-header" colspan=2 style="border-left-width: 0.25pt; ">Общий итог</td>
<td class="rm-strpr-dosrHeader" colspan=2 style="border-left-width: 0.25pt; ">Отд. подсчет досроч.</td>
</tr>
]] )
m = math.floor ((candCount+1) / 2 + .1)
else
m = math.floor ((candCount+2) / 3 + .1)
end
for i = tonumber(setS0 ['12']), tonumber(setS0 ['12']) + m - 1 do
table.insert (outres, ' <tr>\n')
table.insert (outres, ' <td class="rm-strpr-str"> </td><td class="rm-strpr-num">' .. i .. '</td><td class="rm-strpr-data1"> </td><td class="rm-strpr-data2"> </td>')
if dosr then
table.insert (outres, '<td class="rm-strpr-data1-dosr"> </td><td class="rm-strpr-data2-dosr"> </td>\n')
table.insert (outres, ' <td class="rm-strpr-str-plus"> </td><td class="rm-strpr-num">' .. (i+m) .. '</td><td class="rm-strpr-data1"> </td><td class="rm-strpr-data2"> </td>')
table.insert (outres, '<td class="rm-strpr-data1-dosr"> </td><td class="rm-strpr-data2-dosr"> </td>\n')
else
table.insert (outres, ' <td class="rm-strpr-str"> </td><td class="rm-strpr-num">' .. (i+m) .. '</td><td class="rm-strpr-data1"> </td><td class="rm-strpr-data2"> </td>\n')
table.insert (outres, ' <td class="rm-strpr-str"> </td><td class="rm-strpr-num">' .. (i+2*m) .. '</td><td class="rm-strpr-data1"> </td><td class="rm-strpr-data2"> </td>\n')
end
table.insert (outres, ' </tr>\n')
end
table.insert (outres, ' </table>\n')
return table.concat (outres)
end
p ['Таблица итогов голосования'] = function (frame)
local gArgs = frame:getParent().args
local code, method, view, chapter, candCount, flags = gArgs.code, gArgs.method, gArgs.view, gArgs.chapter, gArgs.headerCandCount, gArgs.flags
code = mw.text.split (code,',') or ''
if code == '' or code =='все' or code == 'нет' then
code = tab.fzgCode
else
code = mw.text.trim (code [1])
end
if flags == '' then -- если флаги не заданы, то берем флаги первого указанного региона
flags = tab.regions [code].flags
elseif flags == 'нет' then
flags = ''
end
flags = mw.ustring.lower (flags)
if flags == '' then
flags = {}
else
flags = mw.text.split (flags, ',', true)
flags = tableFlip (flags)
end
return makeReport (code, candCount, flags ['доср-уик'], flags ['доср-тик'], flags ['доср-ог'], false, flags['без-строки-тик'], flags['оу'])
end
p ['SMS-ЦИК и ящики'] = function (frame)
local gArgs = frame:getParent().args
local code, method, view, chapter, constCount, flags, sms = gArgs.code, gArgs.method, gArgs.view, gArgs.chapter, gArgs.headerConstCount, gArgs.flags, gArgs.sms
code = mw.text.split (code,',') or ''
if code == '' or code =='все' or code == 'нет' then
code = tab.fzgCode
else
code = mw.text.trim (code [1])
end
if flags == '' then -- если флаги не заданы, то берем флаги первого указанного региона
flags = tab.regions [code].flags
elseif flags == 'нет' then
flags = ''
end
flags = mw.ustring.lower (flags)
if flags == '' then
flags = {}
else
flags = mw.text.split (flags, ',', true)
flags = tableFlip (flags)
end
if sms == '' then
sms = '(код)'
end
local outres = {}
table.insert (outres, [[
<table class="rm-2col">
<tr>
]] )
if flags ['доср-ог'] then
table.insert (outres, [[
<td class="rm-2col-2d3">
<p class="rm-blockName">Обработка переносных ящиков при подсчете</p>
<table class="rm">
<tr>
<td class="rm-rule" style="width: 1.5cm; height: 16pt; "><p class="rmp-mob-count">№ ящика</p></td>
<td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td>
<td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td>
</tr>
<tr>
<td class="rm-rule" style="height: 16pt; "><p class="rmp-mob-count">досрочное / надомное</p></td>
<td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td>
<td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td>
</tr>
<tr>
<td class="rm-rule" style="height: 16pt; "><p class="rmp-mob-count">Пломбы проверены?</p></td>
<td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td>
<td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td>
</tr>
<tr>
<td class="rm-rule" style="height: 16pt; "><p class="rmp-mob-count">Заявлений</p></td>
<td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td>
<td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td>
</tr>
<tr>
<td class="rm-rule" style="height: 16pt; "><p class="rmp-mob-count">Бюллетеней</p></td>
<td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td>
<td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td><td style="width: 10%; "> </td>
</tr>
</table>
</td>
]] )
else
table.insert (outres, [[
<td class="rm-left">
<p class="rm-blockName">Обработка переносных ящиков при подсчете</p>
<table class="rm">
<tr>
<td class="rm-rule" style="width: 1.5cm; height: 16pt; "><p class="rmp-mob-count">№ ящика</p></td><td style="width: 33.3%; "> </td><td style="width: 33.3%; "> </td><td style="width: 33.3%; "> </td>
</tr>
<tr>
<td class="rm-rule" style="height: 16pt; "><p class="rmp-mob-count">Пломбы проверены?</p></td><td> </td><td> </td><td> </td>
</tr>
<tr>
<td class="rm-rule" style="height: 16pt; "><p class="rmp-mob-count">Заявлений</p></td><td> </td><td> </td><td> </td>
</tr>
<tr>
<td class="rm-rule" style="height: 16pt; "><p class="rmp-mob-count">Бюллетеней</p></td><td> </td><td> </td><td> </td>
</tr>
</table>
</td>
]] )
end
table.insert (outres, ' <td class="rm-spaceLR"></td>\n')
if flags ['доср-ог'] then
table.insert (outres, ' <td class="rm-2col-1d3">')
else
table.insert (outres, ' <td class="rm-right">')
end
table.insert (outres, [[
<p class="rm-text" style="text-align: right; font-size:14pt; line-height:100%; font-weight:bold; ">SMS−ЦИК (903) 767 62 42 </p>
]] )
if flags ['доср-ог'] then
table.insert (outres, [[
<p class="rm-text"> </p>
]] )
end
table.insert (outres, [[
<p class="rm-text" style="text-align: right; ">Как только итоги голосования станут<br>известны, отправьте sms-сообщение:</p>
<p class="rm-text" style="text-align: right; font-size:10pt; line-height:100%; font-weight:bold; ">]] .. sms .. ' ')
if constCount ~= '' then
table.insert (outres, '(округ) ')
end
table.insert (outres, '(№ УИК) ')
table.insert (outres, '[' .. tab.regions [code].strpr ['10'] .. '] ')
table.insert (outres, '[' .. tab.regions [code].strpr ['11'] .. '] ')
table.insert (outres, '[' .. tab.regions [code].strpr ['12'] .. ']...</p>\n')
if flags ['доср-ог'] then
table.insert (outres, [[
<p class="rm-text"> </p>
]] )
end
table.insert (outres, [[
<p class="rm-text" style="text-align: right; ">Переданные в СМС-ЦИК результаты доступны<br>по адресу: <i>http://sms-cik.org/elections/]] .. sms .. [[</i></p>
</td>
]] )
table.insert (outres, [[
</tr>
</table>
]] )
return table.concat (outres)
end
--[===[
table.insert (outres, [[
<table class="rm-sms0">
<table class="rm-sms">
<tr>
<td style="font-size:14pt; line-height:100%; text-align:right; font-weight:bold; ">SMS−ЦИК (902) 114 80 11 </td>
<td>Как только результат голосования стал<br>известен, отправьте sms-сообщение —</td>
<td style="font-size:14pt; line-height:100%; text-align:right; font-weight:bold; "> ]] .. sms .. ' ')
if constCount ~= '' then
table.insert (outres, '(округ) ')
end
table.insert (outres, '(№ УИК) ')
table.insert (outres, '[' .. tab.regions [code].strpr ['10'] .. '] ')
table.insert (outres, '[' .. tab.regions [code].strpr ['11'] .. '] ')
table.insert (outres, '[' .. tab.regions [code].strpr ['12'] .. ']...</td>\n')
table.insert (outres, [[
</tr>
</table>
</table>
]] )
return table.concat (outres)
end
--]===]
return p