Модуль:Serialization/EntityTableSelector: различия между версиями
Pok (обсуждение | вклад) Нет описания правки Метка: отменено |
Pok (обсуждение | вклад) Нет описания правки Метка: ручная отмена |
||
| (не показано 9 промежуточных версий этого же участника) | |||
| Строка 196: | Строка 196: | ||
local renderTableById | local renderTableById | ||
local function | local function hasNestedCollapsible(content) | ||
if ( | if type(content) ~= "string" or content == "" then | ||
return | 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 suffix = "" | local suffix = "" | ||
| Строка 265: | Строка 290: | ||
suffix = suffix .. prob | suffix = suffix .. prob | ||
end | end | ||
local content = renderTableById(selector.tableId, visited, depth) | |||
if wrapped and suffix ~= "" then | if wrapped and suffix ~= "" then | ||
return wrapCollapsible("Группа предметов" .. suffix, content, depth) | |||
end | end | ||
return | return content | ||
end | end | ||
| Строка 285: | Строка 305: | ||
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 | ||
| Строка 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] = | result[#result + 1] = wrapCollapsible("Выпадают только вместе:", rendered, (depth or 0) + 1) | ||
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, (depth or 0) + 1) | ||
elseif childSelector["!type"] == "NestedSelector" then | elseif childSelector["!type"] == "NestedSelector" then | ||
result[#result + 1] = renderNestedSelector(childSelector, visited, true, depth or 0) | 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) | ||
| Строка 315: | Строка 333: | ||
end | end | ||
return | 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 | ||