Модуль:Сущность: различия между версиями
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| (не показаны 24 промежуточные версии этого же участника) | |||
| Строка 75: | Строка 75: | ||
end | end | ||
-- типы | -- типы | ||
if merged.tags and #merged.tags > 0 then | if merged.tags and #merged.tags > 0 then | ||
table.sort(merged.tags) | table.sort(merged.tags) | ||
| Строка 120: | Строка 120: | ||
end | end | ||
local function cardWrapper(frame, keyOrder, keyToTemplates, keySources, entityId) | local function cardWrapper(frame, keyOrder, keyToTemplates, keySources, entityId, noHeaders) | ||
local merged = { | local merged = { | ||
sections = {}, | sections = {}, | ||
| Строка 168: | Строка 168: | ||
merged.labelLists[section] = cur | merged.labelLists[section] = cur | ||
end | end | ||
if e.cardTag and e.cardTag ~= "" then | |||
if not merged.tagSet[e.cardTag] then | |||
merged.tagSet[e.cardTag] = true | |||
table.insert(merged.tags, e.cardTag) | |||
end | |||
end | end | ||
end | end | ||
| Строка 178: | Строка 178: | ||
end | end | ||
end | end | ||
if noHeaders then | |||
local hasLabel = false | |||
for _, v in pairs(merged.labelOverrides or {}) do | |||
if v and v ~= "" then hasLabel = true break end | |||
end | |||
if not hasLabel then | |||
for _, lst in pairs(merged.labelLists or {}) do | |||
if #lst > 0 then hasLabel = true break end | |||
end | |||
end | |||
local hasContent = false | |||
for _, v in pairs(merged.contentByKey or {}) do | |||
if v and v ~= "" then hasContent = true break end | |||
end | |||
if not hasLabel and not hasContent then | |||
return "" | |||
end | |||
end | |||
return buildCardCall(merged, entityId) | return buildCardCall(merged, entityId) | ||
end | end | ||
| Строка 229: | Строка 251: | ||
local cfg = configs[sw] or {} | local cfg = configs[sw] or {} | ||
if cfg.fullCard and sw == "card" then | if cfg.fullCard and sw == "card" then | ||
local outStr = cfg.wrapper(frame, keyOrder[sw], keyToTemplates[sw], keySources[sw], entityId) | local outStr = cfg.wrapper(frame, keyOrder[sw], keyToTemplates[sw], keySources[sw], entityId, noHeaders) | ||
if outStr and outStr ~= "" then table.insert(outLocal, outStr) end | if outStr and outStr ~= "" then table.insert(outLocal, outStr) end | ||
else | else | ||
| Строка 274: | Строка 296: | ||
local componentDefs = load_module_data("component.json") | local componentDefs = load_module_data("component.json") | ||
local | local prototypeStoreDefs = load_module_data("prototype_store.json") | ||
if not componentDefs or not | local componentStoreDefs = load_module_data("component_store.json") | ||
if not componentDefs or not prototypeStoreDefs or not componentStoreDefs then return "" end | |||
local foundComponents, foundPrototypes = {}, {} | local foundComponents, foundPrototypes = {}, {} | ||
| Строка 283: | Строка 306: | ||
if type(v) == "string" then | if type(v) == "string" then | ||
foundComponents[v] = true | foundComponents[v] = true | ||
end | end | ||
end | end | ||
| Строка 301: | Строка 315: | ||
if componentDefs[n] ~= nil then | if componentDefs[n] ~= nil then | ||
foundComponents[n] = true | foundComponents[n] = true | ||
elseif | elseif prototypeStoreDefs[n] ~= nil then | ||
foundPrototypes[n] = true | foundPrototypes[n] = true | ||
end | end | ||
| Строка 327: | Строка 341: | ||
local ok, dp = pcall(require, "Module:GetField") | local ok, dp = pcall(require, "Module:GetField") | ||
local errors = {} | local errors = {} | ||
local function processEntity(kind, name) | local function processEntity(kind, name, isStore) | ||
local pathName = lcfirst(name) | local pathName = lcfirst(name) | ||
local tplPath = kind .. "/" .. pathName | local tplPath = kind .. "/" .. pathName | ||
if isStore then | |||
tplPath = tplPath .. "/store" | |||
end | |||
local content = load_template_content(tplPath) | local content = load_template_content(tplPath) | ||
if not content then | if not content then | ||
| Строка 335: | Строка 353: | ||
return | return | ||
end | end | ||
local | local baseType = (kind and (kind:sub(1, 1):upper() .. kind:sub(2)) or "") | ||
local className = name .. | local classType = baseType | ||
if isStore then classType = classType .. "Store" end | |||
local className = name .. baseType | |||
local tplLabel = "Template:" .. tplPath | local tplLabel = "Template:" .. tplPath | ||
table.insert(errors, | table.insert(errors, | ||
"{{сущность/infobox|тип=" .. classType .. "|название=" .. className .. "|ссылка=" .. tplLabel .. "}}") | "{{сущность/infobox/base|тип=" .. classType .. "|название=" .. className .. "|ссылка=" .. tplLabel .. "}}") | ||
return | return | ||
end | end | ||
local parsed = getTemplateMeta(frame, tplPath) | local parsed = getTemplateMeta(frame, tplPath) | ||
for _, sw in ipairs(switches) do | for _, sw in ipairs(switches) do | ||
| Строка 402: | Строка 423: | ||
end | end | ||
end | end | ||
for compName, _ in pairs(foundComponents) do processEntity("component", compName, false) end | |||
for protoName, _ in pairs(foundPrototypes) do processEntity("prototype", protoName, false) end | |||
local | if type(componentStoreDefs) == "table" then | ||
local compStore = componentStoreDefs[id] | |||
for protoName | if type(compStore) == "table" then | ||
for compName in pairs(compStore) do | |||
processEntity("component", compName, true) | |||
end | |||
end | |||
end | |||
if type(prototypeStoreDefs) == "table" then | |||
local protoStore = prototypeStoreDefs[id] | |||
if type(protoStore) == "table" then | |||
for protoName in pairs(protoStore) do | |||
processEntity("prototype", protoName, true) | |||
end | |||
end | |||
end | |||
local out = {} | local out = {} | ||
if #errors > 0 then | |||
table.insert(out, '{{сущность/infobox|' .. table.concat(errors, "\n") .. '}}') | |||
end | |||
local blocks = renderBlocks(frame, switches, switchConfigs, switchKeyOrder, switchKeyToTemplates, switchKeySources, | local blocks = renderBlocks(frame, switches, switchConfigs, switchKeyOrder, switchKeyToTemplates, switchKeySources, | ||
hasWhitelist, id) | hasWhitelist, id) | ||
for _, b in ipairs(blocks) do table.insert(out, b) end | for _, b in ipairs(blocks) do table.insert(out, b) end | ||
return frame:preprocess(table.concat(out, "\n")) | return frame:preprocess(table.concat(out, "\n") .. "[[Категория:Сущности]]") | ||
end | end | ||
| Строка 574: | Строка 614: | ||
local valuePattern = mw.text.unstripNoWiki(args.value_pattern or "(.*)") | local valuePattern = mw.text.unstripNoWiki(args.value_pattern or "(.*)") | ||
local valueReplace = mw.text.unstripNoWiki(args.value_replace or "\\1") | local valueReplace = mw.text.unstripNoWiki(args.value_replace or "\\1") | ||
local pairPattern = mw.text.unstripNoWiki(args.pattern or "") | |||
local pairReplace = mw.text.unstripNoWiki(args.replace or "\\1") | |||
local out = {} | local out = {} | ||
| Строка 599: | Строка 642: | ||
text = apply_pattern(text, patt, repl) | text = apply_pattern(text, patt, repl) | ||
local line | |||
if outputType == "enum" then | if outputType == "enum" then | ||
line = text | |||
else | else | ||
line = bullet .. text | |||
end | end | ||
if pairPattern ~= "" then | |||
line = apply_pattern(line, pairPattern, pairReplace) | |||
end | |||
table.insert(out, line) | |||
end | end | ||
end | end | ||
| Строка 643: | Строка 693: | ||
if vStr ~= "" then | if vStr ~= "" then | ||
local line | |||
if outputType == "enum" then | if outputType == "enum" then | ||
line = vStr .. " " .. keyStr | |||
else | else | ||
line = bullet .. keyStr .. sep .. vStr | |||
end | |||
if pairPattern ~= "" then | |||
line = apply_pattern(line, pairPattern, pairReplace) | |||
end | end | ||
table.insert(out, line) | |||
end | end | ||
end | end | ||