Модуль:Песочница/Pok: различия между версиями

мНет описания правки
Нет описания правки
 
(не показано 79 промежуточных версий этого же участника)
Строка 1: Строка 1:
local p = {}
local p = {}
local getArgs = require('Module:Arguments').getArgs


function p.main(frame)
function p.main(frame)
     local args = frame.args
     local args = getArgs(frame, { removeBlanks = false })
     local id = args[1]
    local name = args[1] or ""
     if not id then
     local attributes = args[2] or ""
         return "Ошибка: не указан обязательный параметр id."
     if name == "" then
         return "<span class=\"error\">Ошибка: не указано имя файла.</span>"
     end
     end
    local ext = (args["ext"] or "png"):gsub("^%.", "")
    local namespace = args["namespace"] or "Файл"
    local max = tonumber(args["max"]) or 50
    local include_base = (args["base"] ~= "no")


    -- Инициализация данных предмета
     local found = {}
     local itemStack    = frame:preprocess(string.format('{{#invoke:Prototypes/Хранилище/Предмет|main|framing|stack|%s}}', id))
    local itemContained = frame:preprocess(string.format('{{#invoke:Prototypes/Хранилище/Предмет|main|framing|contained|%s}}', id))
    local itemSlot    = frame:preprocess(string.format('{{#invoke:Prototypes/Хранилище/Предмет|main|framing|slot|%s}}', id))
    local itemChem    = frame:preprocess(string.format('{{СollapsibleMenu|color=#3e7c82|{{#invoke:Prototypes/Хранилище/Предмет|main|chem|%s}}}}', id))
    local itemName    = frame:preprocess("{{#invoke:Entity Lookup|getname|" .. id .. "}}")


    local prefix = args[2] or ""
     if include_base then
    local label = args["label"] or itemName
         local t = mw.title.new("Файл:" .. name .. "." .. ext)
    local size = args["size"] or "32px"
        if t and t.exists then
 
            table.insert(found, "")
    -- Формирование строки изображения
        end
    local image
     if args["image"] then
         image = string.format("[[Файл:%s|%s]]", args["image"], size)
    else
        image = string.format("[[Файл:%s.png|%s]]", id, size)
     end
     end


     -- Формирование ярлыка с ссылкой, если задана
     for i = 1, max do
    local labelOutput = label
        local t = mw.title.new("Файл:" .. name .. "-" .. i .. "." .. ext)
    if args["link"] then
         if t and t.exists then
        local linkTarget = args["link"]
             table.insert(found, "-" .. i)
        if linkTarget == "" then
            linkTarget = itemName
        end
         if label ~= "" then
             labelOutput = string.format("[[%s|%s]]", linkTarget, label)
        else
            labelOutput = ""
         end
         end
     end
     end


    -- Сбор информации в зависимости от наличия репозитория
     if #found == 0 then
    local additionalInfo
         return ""
     if args["repository"] then
         additionalInfo = itemStack .. " " .. labelOutput .. " " .. itemContained .. " " .. itemSlot .. " " .. itemChem
    else
        additionalInfo = prefix .. " " .. labelOutput
     end
     end


     local result = image .. " " .. additionalInfo
     local before = "[[" .. namespace .. ":" .. name
 
    local after = "." .. ext .. "|" .. attributes .. "]]"
    -- Формирование вывода через LinkCard, если указан обёртка
    if args["wrapper"] then
        local pixel = string.match(size, "(%d+)")
        local wrapperInfo
        if args["repository"] then
            wrapperInfo = label .. itemStack .. " " .. itemContained .. " " .. itemSlot .. " " .. itemChem
        else
            wrapperInfo = label .. prefix
        end
        local imageParam = args["image"] or (id .. ".png")
        local linkParam = args["link"]
        if not linkParam or linkParam == "" then
            linkParam = itemName
        end


        return frame:preprocess(string.format("{{LinkCard|name=%s|image=%s|pixel=%s|link=%s|SideStyle=1}}", wrapperInfo, imageParam, pixel, linkParam))
    local parts = {}
    table.insert(parts, "<choose before=\"" .. before .. "\" after=\"" .. after .. "\">")
    for _, suf in ipairs(found) do
        table.insert(parts, "<option>" .. suf .. "</option>")
     end
     end
    table.insert(parts, "</choose>")


     return frame:preprocess("<span>" .. result .. "</span>")
     return frame:preprocess(table.concat(parts, "\n"))
end
end


return p
return p