Модуль:Обратная ссылка: различия между версиями
Внешний вид
Spark108 (обсуждение | вклад) м 1 версия импортирована |
поддержка устаревших обозначений |
||
Строка 3: | Строка 3: | ||
local utils = require([[Модуль:Специальные утилиты]]) | local utils = require([[Модуль:Специальные утилиты]]) | ||
-- Выдаёт | -- Выдаёт название файла с англовики по русскоязычному названию ({{Обратная ссылка}}) | ||
function p.reverseLink(f) | function p.reverseLink(f) | ||
local args = f | local args = f | ||
Строка 42: | Строка 42: | ||
else | else | ||
return nil | return nil | ||
end | |||
end | |||
-- Если соответствие в табличном формате, его можно объявить устаревшим | |||
local deprecated | |||
if type(rLink) == "table" then | |||
if args["помечать устаревшие"] then | |||
deprecated = rLink["устарел"] | |||
end | |||
rLink = rLink["название"] | |||
if not rLink and strict then | |||
error("Не найдено названия для значения «" .. link .. "»") | |||
end | end | ||
end | end | ||
Строка 50: | Строка 62: | ||
-- Возвращаем ссылку | -- Возвращаем ссылку | ||
return prefix .. rLink .. suffix | return prefix .. rLink .. suffix, deprecated | ||
end | end | ||
Версия от 08:58, 17 мая 2025
Для документации этого модуля может быть создана страница Модуль:Обратная ссылка/doc
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 deprecated
if type(rLink) == "table" then
if args["помечать устаревшие"] then
deprecated = rLink["устарел"]
end
rLink = rLink["название"]
if not rLink and strict then
error("Не найдено названия для значения «" .. link .. "»")
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, deprecated
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