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

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


local function getCollapsiblePrefix(depth)
local function hasNestedCollapsible(content)
     if (depth or 0) > 0 then
     if type(content) ~= "string" or content == "" then
         return "{{LinkCard/Сollapsible|развернуть=1|"
         return false
     end
     end


     return "{{LinkCard/Сollapsible|"
     return string.find(content, "{{LinkCard/Сollapsible|", 1, true) ~= nil
end
 
local function wrapCollapsible(title, content, depth)
    if trim(title) == "" then
        return content or ""
    end
 
    local prefix = "{{LinkCard/Сollapsible|"
    if (depth or 0) > 0 and not hasNestedCollapsible(content) then
        prefix = prefix .. "развернуть=1|"
    end
 
    return prefix .. "название=" .. title .. "|содержание=" .. (content or "") .. "}}"
end
end


Строка 217: Строка 230:


     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


Строка 229: Строка 250:
         if selector then
         if selector then
             local rendered = renderSelector(selector, visited, true, depth)
             local rendered = renderSelector(selector, visited, true, depth)
            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
Строка 247: Строка 273:
     end
     end


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


Строка 265: Строка 290:


         suffix = suffix .. prob
         suffix = suffix .. prob
        if suffix ~= "" then
            result[#result + 1] = getCollapsiblePrefix(depth) .. "название=Группа предметов" .. suffix .. "|содержание="
        end
     end
     end


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


     return table.concat(result)
     return content
end
end


Строка 285: Строка 305:
     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 = getCollapsiblePrefix(depth) .. "название=Группа предметов " .. normalizePercent(selector.weight, false) .. "|содержание="
         title = "Группа предметов " .. normalizePercent(selector.weight, false)
        wrapperEnd = "}}"
     elseif not hasWeight then
     elseif selector.weight == nil then
         title = "Может выпасть лишь один из:"
         wrapperStart = getCollapsiblePrefix(depth) .. "название=Может выпасть лишь один из:|содержание="
        wrapperEnd = "}}"
     end
     end


Строка 303: Строка 321:
                 local rendered = renderAllSelector(childSelector, visited, (depth or 0) + 1)
                 local rendered = renderAllSelector(childSelector, visited, (depth or 0) + 1)
                 if rendered ~= "" then
                 if rendered ~= "" then
                     result[#result + 1] = getCollapsiblePrefix((depth or 0) + 1) .. "название=Выпадают только вместе:|содержание=" .. rendered .. "}}"
                     result[#result + 1] = wrapCollapsible("Выпадают только вместе:", rendered, (depth or 0) + 1)
                 end
                 end
             elseif childSelector["!type"] == "GroupSelector" then
             elseif childSelector["!type"] == "GroupSelector" then
Строка 315: Строка 333:
     end
     end


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


Строка 379: Строка 397:
     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