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

Модуль обеспечивает работу шаблона {{ГВР}}.

Подробнее об использовании шаблона см. его документацию.

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;