Модуль:Предмет: различия между версиями

мНет описания правки
мНет описания правки
Строка 2: Строка 2:
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs


-- Вспомогательная функция для формирования строки с файлом изображения
--------------------------------------------------------------------------------
-- Вспомогательные функции
--------------------------------------------------------------------------------
 
-- Формирует строку ссылки на изображение
local function formatImage(file, size)
local function formatImage(file, size)
return string.format("[[Файл:%s|%s]]", file, size)
return string.format("[[Файл:%s|%s]]", file, size)
end
end


-- Вспомогательная функция для формирования аргументов с заменой пустой строки и nil
-- Возвращает значение аргумента: если nil, то значение по умолчанию; если пустая строка, то пустую строку; иначе само значение
local function resolveArg(input, defaultValue)
local function resolveArg(input, defaultValue)
if input == nil then
if input == nil then
Строка 17: Строка 21:
end
end
end
end
-- Обёртка для вызова другого модуля через #invoke
local function invoke(frame, module, method, subMethod, extra, id)
local invocation = string.format("{{#invoke:%s|%s|%s|%s|%s}}", module, method, subMethod, extra, id)
return frame:preprocess(invocation)
end
-- Оборачивает текст в вики-ссылку, если цель задана
local function wrapLink(text, target)
if text == "" then
return ""
else
return string.format("[[%s|%s]]", target, text)
end
end
--------------------------------------------------------------------------------
-- Основная функция модуля
--------------------------------------------------------------------------------


function p.main(frame)
function p.main(frame)
Строка 23: Строка 46:
local argsRaw = getArgs(frame, { trim = false, removeBlanks = false })
local argsRaw = getArgs(frame, { trim = false, removeBlanks = false })


local id = args[1] or ""
-- Основные параметры
local size = args["size"] or "32px"
local id       = args[1] or ""
local prefix = args[2] or ""
local size     = args["size"] or "32px"
local prefix   = args[2] or ""
local vertical = argsRaw.vertical
local vertical = argsRaw.vertical


-- Получение данных о предмете через другие модули
-- Получаем данные о предмете через вызовы других модулей
local function invoke(module, method, subMethod, extra, id)
local itemStack    = invoke(frame, "Prototypes/Хранилище/Предмет", "main", "framing", "stack", id)
return frame:preprocess(string.format("{{#invoke:%s|%s|%s|%s|%s}}", module, method, subMethod, extra, id))
local itemContained = invoke(frame, "Prototypes/Хранилище/Предмет", "main", "framing", "contained", id)
end
local itemSlot      = invoke(frame, "Prototypes/Хранилище/Предмет", "main", "framing", "slot", id)
 
-- Для химии оборачиваем в CollapsibleMenu (из-за ошибки в модуле)
local itemStack    = invoke("Prototypes/Хранилище/Предмет", "main", "framing", "stack", id)
local itemChem = frame:preprocess(string.format("{{СollapsibleMenu|color=#3e7c82|{{#invoke:Prototypes/Хранилище/Предмет|main|chem|%s}}}}", id))
local itemContained = invoke("Prototypes/Хранилище/Предмет", "main", "framing", "contained", id)
local itemName = frame:preprocess(string.format("{{#invoke:Entity Lookup|getname|%s}}", id))
local itemSlot      = invoke("Prototypes/Хранилище/Предмет", "main", "framing", "slot", id)
-- Для химии оборачиваем в CollapsibleMenu, из-за ошибки модуля
local itemChem     = frame:preprocess(string.format("{{СollapsibleMenu|color=#3e7c82|{{#invoke:Prototypes/Хранилище/Предмет|main|chem|%s}}}}", id))
local itemName     = frame:preprocess(string.format("{{#invoke:Entity Lookup|getname|%s}}", id))


-- Обработка ярлыка
-- Обработка ярлыка
Строка 46: Строка 66:
-- Обработка изображения
-- Обработка изображения
local rawImage = argsRaw.image or argsRaw.img
local rawImage = argsRaw.image or argsRaw.img
local image = ""
local image
if rawImage == nil then
if rawImage == nil then
image = formatImage(id .. ".png", size)
image = formatImage(id .. ".png", size)
else
else
if rawImage ~= "" then
image = (rawImage ~= "") and formatImage(rawImage, size) or ""
image = resolveArg(formatImage(rawImage, size), formatImage(id .. ".png", size))
else
image = ""
end
end
end


-- Обработка Tooltip. Если указан imageTooltip, переопределяем image
-- Если указан imageTooltip, переопределяем изображение
if argsRaw.imageTooltip ~= nil then
if argsRaw.imageTooltip ~= nil then
image = frame:preprocess(string.format(
image = frame:preprocess(string.format(
"{{#invoke:Entity Lookup|createimagetooltip|Файл:%s.png|%s|Мета=%s}}", id, id, size))
"{{#invoke:Entity Lookup|createimagetooltip|Файл:%s.png|%s|Мета=%s}}",
id, id, size
))
end
end


-- Обработка rawLink
-- Обработка ссылки
local rawLink = argsRaw.link
local rawLink = argsRaw.link
local labelOutput = label
local labelOutput = (rawLink ~= nil) and wrapLink(label, (rawLink == "" and itemName or rawLink)) or label
-- Если параметр link вызван, то:
-- если он пустой, то берём itemName, иначе - текст.
if rawLink ~= nil then
local linkTarget = (rawLink == "" and itemName) or rawLink
if label ~= "" then
labelOutput = string.format("[[%s|%s]]", linkTarget, label)
else
labelOutput = ""
end
end


-- Формирование описания репозитория
-- Формирование описания репозитория
local repository = ""
local repository = (argsRaw.repository == nil) and prefix or table.concat({ itemContained, itemSlot, itemChem }, " ")
if argsRaw.repository == nil then
repository = prefix
else
repository = table.concat({ itemContained, itemSlot, itemChem }, " ")
end


-- Формирование итогового результата
-- Формирование итогового блока с изображением и описанием
local imagerepository = ""
local imagerepository, result
local result = ""
-- Если передан параметр vertical, применяем вертикальное форматирование
if vertical ~= nil then
if vertical ~= nil then
imagerepository = string.format("<span style='display:inline-flex;flex-direction:column;align-items:center;'>%s<b>%s</b></span>", image, labelOutput)
imagerepository = string.format(
"<span style='display:inline-flex;flex-direction:column;align-items:center;'>%s<b>%s</b></span>",
image, labelOutput
)
result = table.concat({ imagerepository, itemStack, prefix }, " ")
result = table.concat({ imagerepository, itemStack, prefix }, " ")
else
else
imagerepository = "<span>" .. image .. repository .. "</span>"
imagerepository = string.format("<span>%s%s</span>", image, repository)
result = table.concat({ imagerepository, labelOutput, itemStack, prefix }, " ")
result = table.concat({ imagerepository, labelOutput, itemStack, prefix }, " ")
end
end


-- Если указан wrapper, формируем LinkCard
-- Если задан параметр wrapper, формируем LinkCard
if argsRaw.wrapper ~= nil then
if argsRaw.wrapper ~= nil then
local pixel = string.match(size, "(%d+)")
local pixel = string.match(size, "(%d+)")
local linkParam = ""
local linkParam = (rawLink ~= nil) and ((rawLink == "" and itemName) or rawLink) or ""
if rawLink ~= nil then
-- Если vertical не задан, добавляем SideStyle=1
linkParam = (rawLink == "" and itemName) or rawLink
end
 
-- Если vertical передан, не добавляем SideStyle=1
local sideStyle = (vertical ~= nil) and "" or "|SideStyle=1"
local sideStyle = (vertical ~= nil) and "" or "|SideStyle=1"


Строка 115: Строка 114:
end
end


return frame:preprocess("<span>" .. result .. "</span>")
return frame:preprocess(string.format("<span>%s</span>", result))
end
end


return p
return p