Модуль:Обратная ссылка[править введение]
Этот модуль используется для преобразования аргумента в название файла из общего хранилища (локальные перенаправления на такие файлы не работают). Списки соответствий задаются отдельными страницами, которые могут быть как Lua-модулями, так и JSON-файлами, что предпочтительнее, если для построения списка не требуется сложная логика.
Преобразование осуществляется функцией reverseLink
. Вне модулей она может использоваться через шаблон {{Обратная ссылка}}
.
Использование[править код]
Функция принимает два обязательных неименованных аргумента: первый — русскоязычное название, второй — страница со списком преобразований. Последняя также может быть задана по названию аргумента страница
.
Следующие два аргумента (могут быть указаны под названиями префикс
и суффикс
) соответственно задают префикс и суффикс цели ссылки. Если они не указаны, то будут по возможности использоваться значения, заданные в странице соответствий (в объекте или подтаблице настройки
).
По умолчанию функция возвращает значение nil
, если произошла ошибка при загрузке страницы соответствий (например, если её нет или в ней синтаксическая ошибка), а также если не найдено соответствие указанному названию. Если задать дополнительный аргумент строгий
не с пустым значением, то в этих случаях вместо возвращения nil
возникнет ошибка модуля.
Зависимости[править код]
- Модуль:Специальные утилиты — функции
tryLoadData
иtryLoadJsonData
для загрузки страниц соответствий. - Страницы преобразований
local p = {}
local utils = require([[Модуль:Специальные утилиты]])
-- Выдаёт файл с англовики по русскоязычному названию ({{Обратная ссылка}})
function p.reverseLink(f)
local args = f
if f == mw.getCurrentFrame() then
args = f:getParent().args
end
-- Базовые аргументы
local link = mw.text.trim(args[1] or '')
local pageName = 'Модуль:Обратная ссылка/' .. mw.text.trim(args["страница"] or args[2] or '')
local strict = mw.text.trim(args["строгий"] or '') ~= ''
-- Загрузка страницы соответствий
local page
if pageName:find('%.json$') then
page = utils.tryLoadJsonData(pageName)
else
page = utils.tryLoadJsonData(pageName .. '.json') or utils.tryLoadData(pageName)
end
if not page then
if strict then
page = pageName
if not pageName:find('%.json$') then
page = page .. ".json» или «" .. pageName
end
error("Ошибка при загрузке страницы соответствий «" .. page .. "»")
else
return nil
end
end
-- Ищем значение
local rLink = page["ссылки"][link]
if not rLink then
if strict then
error("Не найдено соответствия для значения «" .. link .. "»")
else
return nil
end
end
-- Префикс и суффикс
local prefix = args["префикс"] or args[3] or (page["настройки"] and page["настройки"]["префикс"]) or ''
local suffix = args["суффикс"] or args[4] or (page["настройки"] and page["настройки"]["суффикс"]) or ''
-- Возвращаем ссылку
return prefix .. rLink .. suffix
end
-- Возвращает содержимое указанной страницы в JSON-формате ({{Обратная ссылка/json}})
function p.pageAsJson(f)
local args = f:getParent().args
local pageName = 'Модуль:Обратная ссылка/' .. mw.text.trim(args[1] or '')
-- Пробуем загрузить страницу
local page
if pageName:find('%.json$') then
page = utils.tryLoadJsonData(pageName)
else
page = utils.tryLoadJsonData(pageName .. '.json') or utils.tryLoadData(pageName)
end
return mw.text.jsonEncode(page)
end
return p