Модуль:ГВР
ХӀокху модулах лаьцна хааман Модуль:ГВР/doc агӀо кхолла мега
local p = {};
require('strict');
function p.render(frame)
local str = {}
local cats = {}
local pFrame = frame:getParent();
local args = mw.clone(pFrame.args);
setmetatable(args, nil);
-- Берутся из шаблона
local numero;
local nombre;
numero = args[1];
nombre = args[2];
-- Вспомогательные - длины номера и названия
local numlon;
local nomlon;
if numero == nil then
numlon = 0;
else
numlon = string.len(numero);
end
if ((nombre == nil) or (nombre == ' ')) then
nomlon = 0;
else
nomlon = string.len(nombre);
end
-- Постоянные компоненты вывода
local archiveurl;
local gvr;
local mpr;
local date;
local archivedate;
local archivenombre;
local lang;
archiveurl = 'https://web.archive.org/web/20131015092212/http://www.mnr.gov.ru/files/part/0306_perechen.rar';
gvr = '[[Государственный водный реестр]]';
mpr = '[[Министерство природных ресурсов и экологии Российской Федерации|Минприроды России]]';
date = '— 2009. — 29 марта.';
archivedate = '15 октября 2013';
archivenombre = 'арх';
lang = '[[русский язык|рус]].';
-- Возможные ошибки
local error_cats = {
['sin_nombre'] = 'К:Википедия:Шаблон:ГВР (некорректное использование: не указано название объекта)',
['sin_numero'] = 'К:Википедия:Шаблон:ГВР (некорректное использование: не указан номер объекта)',
['numero_incorrecto'] = 'К:Википедия:Шаблон:ГВР (некорректное использование: номер неверной длины)'
}
local errors = {
['sin_nombre'] = '{{error|Необходимо задать название объекта.}}',
['sin_numero'] = '{{error|Необходимо задать номер объекта.}}',
['numero_incorrecto'] = '{{error|Номер имеет некорректную длину.}}'
}
-- Проверка корректности заполнения параметров
-- Отрисовка ошибки по коду
local function expandError(code)
return mw.getCurrentFrame():preprocess(errors[code]) .. ' '
end
if nomlon == 0 then
table.insert(str, expandError('sin_nombre'));
table.insert(cats, 'sin_nombre');
end
if numlon == 0 then
table.insert(str, expandError('sin_numero'));
table.insert(cats, 'sin_numero');
end
if ((numlon ~= 0) and (numlon ~= 6) and (numlon ~= 23)) then
table.insert(str, expandError('numero_incorrecto'));
table.insert(cats, 'numero_incorrecto');
end
-- Отрисовка всех категорий ошибок по их кодам
local function expandCats(cats)
local str = {};
local frame = mw.getCurrentFrame();
for _, cat in pairs(cats) do
table.insert(str, '[[' .. error_cats[cat] .. ']]')
end
return frame:preprocess(table.concat(str))
end
-- Ссылка на сайт в зависимости от длины номера
local url;
local site;
if numlon == 23 then
url = 'https://verum.wiki/index.php?claster=gvr&q=' .. numero .. '';
site = 'verum.wiki'
else if numlon == 6 then
url = 'http://textual.ru/gvr/index.php?card=' .. numero .. '';
site = 'textual.ru'
else
url = '';
site = '???'
end
end
-- Формирование вывода
-- Формирование ссылки + название
local link;
if nomlon == 0 then
link = '[' .. url .. ' Водный объект]';
else
link = '[' .. url .. ' ' .. nombre .. ']';
end
-- Формирование архивной ссылки
local archivelink;
archivelink = '[' .. archiveurl .. ' ' .. archivenombre .. '].';
-- Сам вывод
table.insert(str, link);
table.insert(str, ' : [' .. lang .. '] / ' .. site .. ' // ' .. gvr .. ' : [');
table.insert(str, archivelink);
table.insert(str, ' ' .. archivedate .. '] / ' .. mpr .. '. ' .. date .. '');
if #cats ~= 0 and mw.title.getCurrentTitle():inNamespace(0) then
table.insert(str, expandCats(cats));
end
return table.concat(str)
end
return p;