Модуль:Serialization/EntityTableSelector: различия между версиями
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки Метка: отменено |
||
| Строка 190: | Строка 190: | ||
end | end | ||
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) | ||
| Строка 211: | Строка 219: | ||
end | end | ||
local function renderChildren(children, visited) | local function renderChildren(children, visited, depth) | ||
if type(children) ~= "table" then | if type(children) ~= "table" then | ||
return "" | return "" | ||
| Строка 220: | Строка 228: | ||
local selector = normalizeSelector(child) | local selector = normalizeSelector(child) | ||
if selector then | if selector then | ||
local rendered = renderSelector(selector, visited, true) | local rendered = renderSelector(selector, visited, true, depth) | ||
if rendered ~= "" then | if rendered ~= "" then | ||
result[#result + 1] = rendered | result[#result + 1] = rendered | ||
| Строка 230: | Строка 238: | ||
end | end | ||
local function renderAllSelector(selector, visited) | local function renderAllSelector(selector, visited, depth) | ||
return renderChildren(selector.children, visited) | return renderChildren(selector.children, visited, depth) | ||
end | end | ||
local function renderNestedSelector(selector, visited, wrapped) | local function renderNestedSelector(selector, visited, wrapped, depth) | ||
if trim(selector.tableId) == "" then | if trim(selector.tableId) == "" then | ||
return "" | return "" | ||
| Строка 259: | Строка 267: | ||
if suffix ~= "" then | if suffix ~= "" then | ||
result[#result + 1] = " | result[#result + 1] = getCollapsiblePrefix(depth) .. "название=Группа предметов" .. suffix .. "|содержание=" | ||
end | end | ||
end | end | ||
result[#result + 1] = renderTableById(selector.tableId, visited) | result[#result + 1] = renderTableById(selector.tableId, visited, depth) | ||
if wrapped and suffix ~= "" then | if wrapped and suffix ~= "" then | ||
| Строка 272: | Строка 280: | ||
end | end | ||
local function renderGroupSelector(selector, visited) | local function renderGroupSelector(selector, visited, depth) | ||
if type(selector.children) ~= "table" then | if type(selector.children) ~= "table" then | ||
return "" | return "" | ||
| Строка 281: | Строка 289: | ||
if selector.weight ~= nil and selector.weight ~= "default" then | if selector.weight ~= nil and selector.weight ~= "default" then | ||
wrapperStart = " | wrapperStart = getCollapsiblePrefix(depth) .. "название=Группа предметов " .. normalizePercent(selector.weight, false) .. "|содержание=" | ||
wrapperEnd = "}}" | wrapperEnd = "}}" | ||
elseif selector.weight == nil then | elseif selector.weight == nil then | ||
wrapperStart = " | wrapperStart = getCollapsiblePrefix(depth) .. "название=Может выпасть лишь один из:|содержание=" | ||
wrapperEnd = "}}" | wrapperEnd = "}}" | ||
end | end | ||
| Строка 293: | Строка 301: | ||
if childSelector then | if childSelector then | ||
if childSelector["!type"] == "AllSelector" then | if childSelector["!type"] == "AllSelector" then | ||
local rendered = renderAllSelector(childSelector, visited) | local rendered = renderAllSelector(childSelector, visited, (depth or 0) + 1) | ||
if rendered ~= "" then | if rendered ~= "" then | ||
result[#result + 1] = " | result[#result + 1] = getCollapsiblePrefix((depth or 0) + 1) .. "название=Выпадают только вместе:|содержание=" .. rendered .. "}}" | ||
end | end | ||
elseif childSelector["!type"] == "GroupSelector" then | elseif childSelector["!type"] == "GroupSelector" then | ||
result[#result + 1] = renderGroupSelector(childSelector, visited) | result[#result + 1] = renderGroupSelector(childSelector, visited, (depth or 0) + 1) | ||
elseif childSelector["!type"] == "NestedSelector" then | elseif childSelector["!type"] == "NestedSelector" then | ||
result[#result + 1] = renderNestedSelector(childSelector, visited, true) | result[#result + 1] = renderNestedSelector(childSelector, visited, true, (depth or 0) + 1) | ||
elseif childSelector["!type"] == "EntSelector" then | elseif childSelector["!type"] == "EntSelector" then | ||
result[#result + 1] = formatContent(childSelector) | result[#result + 1] = formatContent(childSelector) | ||
| Строка 310: | Строка 318: | ||
end | end | ||
renderTableById = function(tableId, visited) | renderTableById = function(tableId, visited, depth) | ||
visited = visited or {} | visited = visited or {} | ||
tableId = trim(tableId) | tableId = trim(tableId) | ||
| Строка 332: | Строка 340: | ||
end | end | ||
local result = renderSelector(selector, visited, false) | local result = renderSelector(selector, visited, false, depth) | ||
visited[tableId] = nil | visited[tableId] = nil | ||
return result | return result | ||
end | end | ||
renderSelector = function(selector, visited, wrapped) | renderSelector = function(selector, visited, wrapped, depth) | ||
selector = normalizeSelector(selector) | selector = normalizeSelector(selector) | ||
if not selector then | if not selector then | ||
| Строка 346: | Строка 354: | ||
return formatContent(selector) | return formatContent(selector) | ||
elseif selector["!type"] == "AllSelector" then | elseif selector["!type"] == "AllSelector" then | ||
return renderAllSelector(selector, visited) | return renderAllSelector(selector, visited, depth) | ||
elseif selector["!type"] == "GroupSelector" then | elseif selector["!type"] == "GroupSelector" then | ||
return renderGroupSelector(selector, visited) | return renderGroupSelector(selector, visited, depth) | ||
elseif selector["!type"] == "NestedSelector" then | elseif selector["!type"] == "NestedSelector" then | ||
return renderNestedSelector(selector, visited, wrapped ~= false) | return renderNestedSelector(selector, visited, wrapped ~= false, depth) | ||
end | end | ||
| Строка 379: | Строка 387: | ||
end | end | ||
return frame:preprocess(renderSelector(selector, {}, false)) | return frame:preprocess(renderSelector(selector, {}, false, 0)) | ||
end | end | ||
return p | return p | ||