Модуль:Предмет: различия между версиями
Материал из Space Station 14 Вики
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
(не показано 37 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
local p = {} | local p = {} | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
-- Функция-формировщик для возвращения строки #invoke | |||
local function invoke(module, method, sub, extra, id) | |||
return string.format("{{#invoke:%s|%s|%s|%s|%s}}", | |||
module, method, sub or "", extra or "", id or "") | |||
end | |||
-- Форматирование изображения | |||
local function formatImage(file, size) | |||
return string.format("[[Файл:%s|%s|link=]]", file, size) | |||
end | |||
-- Обёртка для ссылки | |||
local function wrapLink(text, target) | |||
if text == "" then return "" end | |||
return string.format("[[%s|%s]]", target, text) | |||
end | |||
function p.main(frame) | function p.main(frame) | ||
local | local argsRaw = getArgs(frame, { trim = false, removeBlanks = false }) | ||
local args = {} | |||
for k, v in pairs(argsRaw) do | |||
if v ~= "" then args[k] = v end | |||
end | |||
local id = args[1] or "" | |||
local | local size = args.size or "32px" | ||
local | local prefix = args[2] or "" | ||
local | local repoM = argsRaw.repository ~= nil | ||
local | local wrapM = argsRaw.wrapper ~= nil | ||
local | local vert = argsRaw.vertical ~= nil | ||
local | -- Имя и метка | ||
local label = | local rawLabel = argsRaw.label or argsRaw.l | ||
local | local nameStr = invoke("Entity Lookup", "getname", id) | ||
local label = rawLabel == nil and nameStr or (rawLabel == "" and "" or rawLabel) | |||
local rawLink = argsRaw.link | |||
local labelOut = rawLink ~= nil | |||
and wrapLink(label, rawLink == "" and nameStr or rawLink) | |||
or label | |||
local | -- Изображение | ||
local | local rawImg = argsRaw.image or argsRaw.img | ||
if | local img = "" | ||
if rawImg == nil then | |||
img = formatImage(id..".png", size) | |||
elseif rawImg ~= "" then | |||
img = formatImage(rawImg, size) | |||
end | |||
if argsRaw.imageTooltip then | |||
img = string.format( | |||
"{{#invoke:Entity Lookup|createimagetooltip|Файл:%s.png|%s|Мета=%s,link=}}", | |||
id, id, size | |||
) | |||
end | end | ||
-- | -- Репозиторий | ||
local | local repoStr = "" | ||
if repoM then | |||
if | repoStr = table.concat({ | ||
invoke("Prototypes/Хранилище/Предмет", "main", "framing|contained", id), | |||
invoke("Prototypes/Хранилище/Предмет", "main", "framing|slot", id), | |||
invoke("Prototypes/Хранилище/Предмет", "main", "framing|chem", id), | |||
}, " ") | |||
end | end | ||
-- | -- Основная сборка | ||
local | local parts = {} | ||
if vert then | |||
table.insert(parts, | |||
if | string.format( | ||
"<span style='display:inline-flex;flex-direction:column;align-items:center;'>%s<b>%s</b></span>", | |||
img, labelOut | |||
) | |||
) | |||
table.insert(parts, invoke("Prototypes/Хранилище/Предмет", "main", "framing|stack", id)) | |||
table.insert(parts, prefix) | |||
else | else | ||
table.insert(parts, | |||
string.format("<span style='display:inline-block;'>%s%s</span>", img, repoStr) | |||
) | |||
table.insert(parts, labelOut) | |||
table.insert(parts, invoke("Prototypes/Хранилище/Предмет", "main", "framing|stack", id)) | |||
table.insert(parts, prefix) | |||
end | end | ||
-- Обёртка LinkCard | |||
if wrapM then | |||
-- | local pixel = size:match("(%d+)") | ||
if | local linkParam = rawLink and (rawLink == "" and nameStr or rawLink) or "" | ||
local pixel = | local side = vert and "" or "|SideStyle=1" | ||
local | local card = string.format( | ||
"{{LinkCard|name=%s %s %s|pin=%s|image-full=%s|pixel=%s|link=%s%s}}", | |||
labelOut, | |||
invoke("Prototypes/Хранилище/Предмет", "main", "framing|stack", id), | |||
prefix, | |||
repoStr, | |||
img, | |||
local | pixel, | ||
linkParam, | |||
side | |||
) | |||
return frame:preprocess(card) | |||
local | |||
end | end | ||
return frame:preprocess("<span>" .. | -- Финальный вывод | ||
return frame:preprocess("<span>" .. table.concat(parts, " ") .. "</span>") | |||
end | end | ||
return p | return p |
Текущая версия от 23:20, 21 апреля 2025
Для документации этого модуля может быть создана страница Модуль:Предмет/doc
local p = {}
local getArgs = require('Module:Arguments').getArgs
-- Функция-формировщик для возвращения строки #invoke
local function invoke(module, method, sub, extra, id)
return string.format("{{#invoke:%s|%s|%s|%s|%s}}",
module, method, sub or "", extra or "", id or "")
end
-- Форматирование изображения
local function formatImage(file, size)
return string.format("[[Файл:%s|%s|link=]]", file, size)
end
-- Обёртка для ссылки
local function wrapLink(text, target)
if text == "" then return "" end
return string.format("[[%s|%s]]", target, text)
end
function p.main(frame)
local argsRaw = getArgs(frame, { trim = false, removeBlanks = false })
local args = {}
for k, v in pairs(argsRaw) do
if v ~= "" then args[k] = v end
end
local id = args[1] or ""
local size = args.size or "32px"
local prefix = args[2] or ""
local repoM = argsRaw.repository ~= nil
local wrapM = argsRaw.wrapper ~= nil
local vert = argsRaw.vertical ~= nil
-- Имя и метка
local rawLabel = argsRaw.label or argsRaw.l
local nameStr = invoke("Entity Lookup", "getname", id)
local label = rawLabel == nil and nameStr or (rawLabel == "" and "" or rawLabel)
local rawLink = argsRaw.link
local labelOut = rawLink ~= nil
and wrapLink(label, rawLink == "" and nameStr or rawLink)
or label
-- Изображение
local rawImg = argsRaw.image or argsRaw.img
local img = ""
if rawImg == nil then
img = formatImage(id..".png", size)
elseif rawImg ~= "" then
img = formatImage(rawImg, size)
end
if argsRaw.imageTooltip then
img = string.format(
"{{#invoke:Entity Lookup|createimagetooltip|Файл:%s.png|%s|Мета=%s,link=}}",
id, id, size
)
end
-- Репозиторий
local repoStr = ""
if repoM then
repoStr = table.concat({
invoke("Prototypes/Хранилище/Предмет", "main", "framing|contained", id),
invoke("Prototypes/Хранилище/Предмет", "main", "framing|slot", id),
invoke("Prototypes/Хранилище/Предмет", "main", "framing|chem", id),
}, " ")
end
-- Основная сборка
local parts = {}
if vert then
table.insert(parts,
string.format(
"<span style='display:inline-flex;flex-direction:column;align-items:center;'>%s<b>%s</b></span>",
img, labelOut
)
)
table.insert(parts, invoke("Prototypes/Хранилище/Предмет", "main", "framing|stack", id))
table.insert(parts, prefix)
else
table.insert(parts,
string.format("<span style='display:inline-block;'>%s%s</span>", img, repoStr)
)
table.insert(parts, labelOut)
table.insert(parts, invoke("Prototypes/Хранилище/Предмет", "main", "framing|stack", id))
table.insert(parts, prefix)
end
-- Обёртка LinkCard
if wrapM then
local pixel = size:match("(%d+)")
local linkParam = rawLink and (rawLink == "" and nameStr or rawLink) or ""
local side = vert and "" or "|SideStyle=1"
local card = string.format(
"{{LinkCard|name=%s %s %s|pin=%s|image-full=%s|pixel=%s|link=%s%s}}",
labelOut,
invoke("Prototypes/Хранилище/Предмет", "main", "framing|stack", id),
prefix,
repoStr,
img,
pixel,
linkParam,
side
)
return frame:preprocess(card)
end
-- Финальный вывод
return frame:preprocess("<span>" .. table.concat(parts, " ") .. "</span>")
end
return p