Модуль:Serialization/EntityTableSelector: различия между версиями
Pok (обсуждение | вклад) Нет описания правки Метка: ручная отмена |
Pok (обсуждение | вклад) Нет описания правки |
||
| (не показано 11 промежуточных версий этого же участника) | |||
| Строка 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 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 suffix = "" | local suffix = "" | ||
| Строка 257: | Строка 277: | ||
suffix = suffix .. prob | suffix = suffix .. prob | ||
end | end | ||
local content = renderTableById(selector.tableId, visited) | |||
if wrapped and suffix ~= "" then | if wrapped and suffix ~= "" then | ||
return wrapCollapsible("Группа предметов" .. suffix, content) | |||
end | end | ||
return | return content | ||
end | end | ||
| Строка 277: | Строка 292: | ||
end | end | ||
local | local title = "" | ||
local | local hasWeight = rawget(selector, "weight") ~= nil | ||
if | if hasWeight and selector.weight ~= "default" then | ||
title = "Группа предметов " .. normalizePercent(selector.weight, false) | |||
elseif not hasWeight then | |||
elseif | title = "Может выпасть лишь один из:" | ||
end | end | ||
| Строка 295: | Строка 308: | ||
local rendered = renderAllSelector(childSelector, visited) | local rendered = renderAllSelector(childSelector, visited) | ||
if rendered ~= "" then | if rendered ~= "" then | ||
result[#result + 1] = " | result[#result + 1] = wrapCollapsible("Выпадают только вместе:", rendered) | ||
end | end | ||
elseif childSelector["!type"] == "GroupSelector" then | elseif childSelector["!type"] == "GroupSelector" then | ||
| Строка 307: | Строка 320: | ||
end | end | ||
return | 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 | ||