Модуль:Serialization/EntityTableSelector: различия между версиями
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| (не показано 7 промежуточных версий этого же участника) | |||
| Строка 183: | Строка 183: | ||
local amount = formatAmount(selector.amount) | local amount = formatAmount(selector.amount) | ||
local prob = "" | local prob = "" | ||
local probPart = "" | |||
if type(selector.prob) == "number" then | if type(selector.prob) == "number" then | ||
| Строка 190: | Строка 191: | ||
end | end | ||
return "{{предмет|" .. id .. "|" .. amount .. | if prob ~= "" then | ||
probPart = ' <span>' .. prob .. '</span>' | |||
end | |||
return "{{предмет|" .. id .. "|" .. amount .. probPart .. "|wrapper=1|repository=1|link=}}" | |||
end | end | ||
| Строка 196: | Строка 201: | ||
local renderTableById | local renderTableById | ||
local function wrapCollapsible(title, content) | |||
local function wrapCollapsible(title, content | |||
if trim(title) == "" then | if trim(title) == "" then | ||
return content or "" | return content or "" | ||
end | end | ||
return '{{LinkCard/Сollapsible|развернуть=1|название=' .. title .. '|содержание=<span class="grid-item-adaptive grid-adaptive" style="gap:6px; align-items:start;">' .. (content or "") .. '}}' | |||
end | end | ||
| Строка 240: | Строка 232: | ||
end | end | ||
local function renderChildren(children, visited | local function renderChildren(children, visited) | ||
if type(children) ~= "table" then | if type(children) ~= "table" then | ||
return "" | return "" | ||
| Строка 249: | Строка 241: | ||
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) | ||
if rendered ~= "" then | if rendered ~= "" then | ||
result[#result + 1] = rendered | result[#result + 1] = rendered | ||
| Строка 264: | Строка 256: | ||
end | end | ||
local function renderAllSelector(selector, visited | local function renderAllSelector(selector, visited) | ||
return renderChildren(selector.children, visited | return renderChildren(selector.children, visited) | ||
end | end | ||
local function renderNestedSelector(selector, visited, wrapped | local function renderNestedSelector(selector, visited, wrapped) | ||
if trim(selector.tableId) == "" then | if trim(selector.tableId) == "" then | ||
return "" | return "" | ||
| Строка 292: | Строка 284: | ||
end | end | ||
local content = renderTableById(selector.tableId, visited | local content = renderTableById(selector.tableId, visited) | ||
if wrapped and suffix ~= "" then | if wrapped and suffix ~= "" then | ||
return wrapCollapsible("Группа предметов" .. suffix, content | return wrapCollapsible("Группа предметов" .. suffix, content) | ||
end | end | ||
| Строка 300: | Строка 292: | ||
end | end | ||
local function renderGroupSelector(selector, visited | local function renderGroupSelector(selector, visited) | ||
if type(selector.children) ~= "table" then | if type(selector.children) ~= "table" then | ||
return "" | return "" | ||
| Строка 319: | Строка 311: | ||
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) | ||
if rendered ~= "" then | if rendered ~= "" then | ||
result[#result + 1] = wrapCollapsible("Выпадают только вместе:", rendered | result[#result + 1] = wrapCollapsible("Выпадают только вместе:", 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) | ||
elseif childSelector["!type"] == "NestedSelector" then | elseif childSelector["!type"] == "NestedSelector" then | ||
result[#result + 1] = renderNestedSelector(childSelector, visited, true | 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) | ||
| Строка 333: | Строка 325: | ||
end | end | ||
return wrapCollapsible(title, table.concat(result) | return wrapCollapsible(title, table.concat(result)) | ||
end | end | ||
renderTableById = function(tableId, visited | renderTableById = function(tableId, visited) | ||
visited = visited or {} | visited = visited or {} | ||
tableId = trim(tableId) | tableId = trim(tableId) | ||
| Строка 358: | Строка 350: | ||
end | end | ||
local result = renderSelector(selector, visited, false | local result = renderSelector(selector, visited, false) | ||
visited[tableId] = nil | visited[tableId] = nil | ||
return result | return result | ||
end | end | ||
renderSelector = function(selector, visited, wrapped | renderSelector = function(selector, visited, wrapped) | ||
selector = normalizeSelector(selector) | selector = normalizeSelector(selector) | ||
if not selector then | if not selector then | ||
| Строка 372: | Строка 364: | ||
return formatContent(selector) | return formatContent(selector) | ||
elseif selector["!type"] == "AllSelector" then | elseif selector["!type"] == "AllSelector" then | ||
return renderAllSelector(selector, visited | return renderAllSelector(selector, visited) | ||
elseif selector["!type"] == "GroupSelector" then | elseif selector["!type"] == "GroupSelector" then | ||
return renderGroupSelector(selector, visited | return renderGroupSelector(selector, visited) | ||
elseif selector["!type"] == "NestedSelector" then | elseif selector["!type"] == "NestedSelector" then | ||
return renderNestedSelector(selector, visited, wrapped ~= false | return renderNestedSelector(selector, visited, wrapped ~= false) | ||
end | end | ||
| Строка 410: | Строка 402: | ||
end | end | ||
return frame:preprocess(renderSelector(selector, {}, false | return frame:preprocess(renderSelector(selector, {}, false)) | ||
end | end | ||
return p | return p | ||