Модуль:Serialization/EntityTableSelector: различия между версиями

Нет описания правки
Метка: ручная отмена
Нет описания правки
 
(не показано 11 промежуточных версий этого же участника)
Строка 190: Строка 190:
     end
     end


return "{{предмет|".. id .."|" .. amount .. " <span>" .. prob .. "</span>|wrapper=1|repository=1}}"
    return "{{предмет|" .. id .. "|" .. amount .. " <span>" .. prob .. "</span>|wrapper=1|repository=1}}"
end
end


local renderSelector
local renderSelector
local renderTableById
local renderTableById
local function wrapCollapsible(title, content)
    if trim(title) == "" then
        return content or ""
    end
    return '{{LinkCard/Сollapsible|развернуть=1|название=' .. title .. '|содержание=<span class="grid-item-adaptive grid-adaptive" style="gap:6px; align-items:start;">' .. (content or "") .. '}}'
end


local function renderPlainEntries(entries)
local function renderPlainEntries(entries)
Строка 209: Строка 217:


     return table.concat(result)
     return table.concat(result)
end
local function renderPlainEntry(entry)
    if type(entry) ~= "table" or trim(entry.id) == "" then
        return ""
    end
    return formatContent(entry)
end
end


Строка 221: Строка 237:
         if selector then
         if selector then
             local rendered = renderSelector(selector, visited, true)
             local rendered = renderSelector(selector, visited, true)
            if rendered ~= "" then
                result[#result + 1] = rendered
            end
        else
            local rendered = renderPlainEntry(child)
             if rendered ~= "" then
             if rendered ~= "" then
                 result[#result + 1] = rendered
                 result[#result + 1] = rendered
Строка 239: Строка 260:
     end
     end


    local result = {}
     local suffix = ""
     local suffix = ""


Строка 257: Строка 277:


         suffix = suffix .. prob
         suffix = suffix .. prob
        if suffix ~= "" then
            result[#result + 1] = "{{LinkCard/Сollapsible|название=Группа предметов" .. suffix .. "|содержание="
        end
     end
     end


     result[#result + 1] = renderTableById(selector.tableId, visited)
     local content = renderTableById(selector.tableId, visited)
 
     if wrapped and suffix ~= "" then
     if wrapped and suffix ~= "" then
         result[#result + 1] = "}}"
         return wrapCollapsible("Группа предметов" .. suffix, content)
     end
     end


     return table.concat(result)
     return content
end
end


Строка 277: Строка 292:
     end
     end


     local wrapperStart = ""
     local title = ""
     local wrapperEnd = ""
     local hasWeight = rawget(selector, "weight") ~= nil


     if selector.weight ~= nil and selector.weight ~= "default" then
     if hasWeight and selector.weight ~= "default" then
         wrapperStart = "{{LinkCard/Сollapsible|название=Группа предметов " .. normalizePercent(selector.weight, false) .. "|содержание="
         title = "Группа предметов " .. normalizePercent(selector.weight, false)
        wrapperEnd = "}}"
     elseif not hasWeight then
     elseif selector.weight == nil then
         title = "Может выпасть лишь один из:"
         wrapperStart = "{{LinkCard/Сollapsible|название=Может выпасть лишь один из:|содержание="
        wrapperEnd = "}}"
     end
     end


Строка 295: Строка 308:
                 local rendered = renderAllSelector(childSelector, visited)
                 local rendered = renderAllSelector(childSelector, visited)
                 if rendered ~= "" then
                 if rendered ~= "" then
                     result[#result + 1] = "{{LinkCard/Сollapsible|название=Выпадают только вместе:|содержание=" .. rendered .. "}}"
                     result[#result + 1] = wrapCollapsible("Выпадают только вместе:", rendered)
                 end
                 end
             elseif childSelector["!type"] == "GroupSelector" then
             elseif childSelector["!type"] == "GroupSelector" then
Строка 307: Строка 320:
     end
     end


     return wrapperStart .. table.concat(result) .. wrapperEnd
     return wrapCollapsible(title, table.concat(result))
end
end


Строка 371: Строка 384:
     local selector = normalizeSelector(data)
     local selector = normalizeSelector(data)
     if not selector then
     if not selector then
        local plainEntry = renderPlainEntry(data)
        if plainEntry ~= "" then
            return frame:preprocess(plainEntry)
        end
         local plainEntries = renderPlainEntries(data)
         local plainEntries = renderPlainEntries(data)
         if plainEntries ~= "" then
         if plainEntries ~= "" then