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

Нет описания правки
Метки: ручная отмена отменено
Нет описания правки
Метка: ручная отмена
Строка 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 getCollapsiblePrefix(depth)
    if (depth or 0) > 0 then
        return "{{LinkCard/Сollapsible|развернуть=1|"
    end
    return "{{LinkCard/Сollapsible|"
end


local function renderPlainEntries(entries)
local function renderPlainEntries(entries)
Строка 219: Строка 211:
end
end


local function renderChildren(children, visited, depth)
local function renderChildren(children, visited)
     if type(children) ~= "table" then
     if type(children) ~= "table" then
         return ""
         return ""
Строка 228: Строка 220:
         local selector = normalizeSelector(child)
         local selector = normalizeSelector(child)
         if selector then
         if selector then
             local rendered = renderSelector(selector, visited, true, depth)
             local rendered = renderSelector(selector, visited, true)
             if rendered ~= "" then
             if rendered ~= "" then
                 result[#result + 1] = rendered
                 result[#result + 1] = rendered
Строка 238: Строка 230:
end
end


local function renderAllSelector(selector, visited, depth)
local function renderAllSelector(selector, visited)
     return renderChildren(selector.children, visited, depth)
     return renderChildren(selector.children, visited)
end
end


local function renderNestedSelector(selector, visited, wrapped, depth)
local function renderNestedSelector(selector, visited, wrapped)
     if trim(selector.tableId) == "" then
     if trim(selector.tableId) == "" then
         return ""
         return ""
Строка 267: Строка 259:


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


     result[#result + 1] = renderTableById(selector.tableId, visited, depth)
     result[#result + 1] = renderTableById(selector.tableId, visited)


     if wrapped and suffix ~= "" then
     if wrapped and suffix ~= "" then
Строка 280: Строка 272:
end
end


local function renderGroupSelector(selector, visited, depth)
local function renderGroupSelector(selector, visited)
     if type(selector.children) ~= "table" then
     if type(selector.children) ~= "table" then
         return ""
         return ""
Строка 289: Строка 281:


     if selector.weight ~= nil and selector.weight ~= "default" then
     if selector.weight ~= nil and selector.weight ~= "default" then
         wrapperStart = getCollapsiblePrefix(depth) .. "название=Группа предметов " .. normalizePercent(selector.weight, false) .. "|содержание="
         wrapperStart = "{{LinkCard/Сollapsible|название=Группа предметов " .. normalizePercent(selector.weight, false) .. "|содержание="
         wrapperEnd = "}}"
         wrapperEnd = "}}"
     elseif selector.weight == nil then
     elseif selector.weight == nil then
         wrapperStart = getCollapsiblePrefix(depth) .. "название=Может выпасть лишь один из:|содержание="
         wrapperStart = "{{LinkCard/Сollapsible|название=Может выпасть лишь один из:|содержание="
         wrapperEnd = "}}"
         wrapperEnd = "}}"
     end
     end
Строка 301: Строка 293:
         if childSelector then
         if childSelector then
             if childSelector["!type"] == "AllSelector" then
             if childSelector["!type"] == "AllSelector" then
                 local rendered = renderAllSelector(childSelector, visited, (depth or 0) + 1)
                 local rendered = renderAllSelector(childSelector, visited)
                 if rendered ~= "" then
                 if rendered ~= "" then
                     result[#result + 1] = getCollapsiblePrefix((depth or 0) + 1) .. "название=Выпадают только вместе:|содержание=" .. rendered .. "}}"
                     result[#result + 1] = "{{LinkCard/Сollapsible|название=Выпадают только вместе:|содержание=" .. rendered .. "}}"
                 end
                 end
             elseif childSelector["!type"] == "GroupSelector" then
             elseif childSelector["!type"] == "GroupSelector" then
                 result[#result + 1] = renderGroupSelector(childSelector, visited, (depth or 0) + 1)
                 result[#result + 1] = renderGroupSelector(childSelector, visited)
             elseif childSelector["!type"] == "NestedSelector" then
             elseif childSelector["!type"] == "NestedSelector" then
                 result[#result + 1] = renderNestedSelector(childSelector, visited, true, (depth or 0) + 1)
                 result[#result + 1] = renderNestedSelector(childSelector, visited, true)
             elseif childSelector["!type"] == "EntSelector" then
             elseif childSelector["!type"] == "EntSelector" then
                 result[#result + 1] = formatContent(childSelector)
                 result[#result + 1] = formatContent(childSelector)
Строка 318: Строка 310:
end
end


renderTableById = function(tableId, visited, depth)
renderTableById = function(tableId, visited)
     visited = visited or {}
     visited = visited or {}
     tableId = trim(tableId)
     tableId = trim(tableId)
Строка 340: Строка 332:
     end
     end


     local result = renderSelector(selector, visited, false, depth)
     local result = renderSelector(selector, visited, false)
     visited[tableId] = nil
     visited[tableId] = nil
     return result
     return result
end
end


renderSelector = function(selector, visited, wrapped, depth)
renderSelector = function(selector, visited, wrapped)
     selector = normalizeSelector(selector)
     selector = normalizeSelector(selector)
     if not selector then
     if not selector then
Строка 354: Строка 346:
         return formatContent(selector)
         return formatContent(selector)
     elseif selector["!type"] == "AllSelector" then
     elseif selector["!type"] == "AllSelector" then
         return renderAllSelector(selector, visited, depth)
         return renderAllSelector(selector, visited)
     elseif selector["!type"] == "GroupSelector" then
     elseif selector["!type"] == "GroupSelector" then
         return renderGroupSelector(selector, visited, depth)
         return renderGroupSelector(selector, visited)
     elseif selector["!type"] == "NestedSelector" then
     elseif selector["!type"] == "NestedSelector" then
         return renderNestedSelector(selector, visited, wrapped ~= false, depth)
         return renderNestedSelector(selector, visited, wrapped ~= false)
     end
     end


Строка 387: Строка 379:
     end
     end


     return frame:preprocess(renderSelector(selector, {}, false, 0))
     return frame:preprocess(renderSelector(selector, {}, false))
end
end


return p
return p