Модуль:Entity Sprite/all: различия между версиями
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| Строка 138: | Строка 138: | ||
end | end | ||
local function getParents( | local function getParents(parentData, id) | ||
if not | if not parentData or type(parentData) ~= "table" or not id then | ||
return nil | return nil | ||
end | end | ||
local parents = parentData[id] | |||
if type(parents) ~= "table" then | |||
return nil | |||
if type( | |||
return | |||
end | end | ||
return | return parents | ||
end | end | ||
| Строка 168: | Строка 165: | ||
end | end | ||
local function shouldIncludeEntry( | local function shouldIncludeEntry(id, whitelistSet, blacklistSet, parentData) | ||
local parents = getParents( | local parents = getParents(parentData, id) | ||
if whitelistSet and not hasAnyParent(parents, whitelistSet) then | if whitelistSet and not hasAnyParent(parents, whitelistSet) then | ||
| Строка 182: | Строка 179: | ||
end | end | ||
local function filterSpriteData(spriteData, | local function filterSpriteData(spriteData, parentData, whitelistSet, blacklistSet, project) | ||
local result = {} | local result = {} | ||
for id, entry in pairs(spriteData) do | for id, entry in pairs(spriteData) do | ||
if shouldIncludeEntry(id, whitelistSet, blacklistSet, parentData) then | |||
if shouldIncludeEntry( | |||
if project == "" or JsonPaths.has(id, project) then | if project == "" or JsonPaths.has(id, project) then | ||
result[id] = entry | result[id] = entry | ||
| Строка 274: | Строка 269: | ||
table.insert(result, mw.getCurrentFrame():preprocess( | table.insert(result, mw.getCurrentFrame():preprocess( | ||
"{{Entity Sprite/Repeat|файлы=" .. table.concat(idLinks, " ") .. | "{{Entity Sprite/Repeat|файлы=" .. table.concat(idLinks, " ") .. | ||
"|перенаправление=" .. JsonPaths.prefixFile( | "|перенаправление=" .. JsonPaths.prefixFile(firstId) .. | ||
"|id=" .. firstId .. | "|id=" .. firstId .. | ||
"|спрайт=" .. spriteValue .. | "|спрайт=" .. spriteValue .. | ||
| Строка 311: | Строка 306: | ||
local dataPage = JsonPaths.get(json) | local dataPage = JsonPaths.get(json) | ||
local | local parentPage = JsonPaths.get("entity parent.json") | ||
local spriteDataRaw = mw.loadData(dataPage) | local spriteDataRaw = mw.loadData(dataPage) | ||
local | local parentDataRaw = mw.loadData(parentPage) | ||
local spriteData = normalizeData(spriteDataRaw) | local spriteData = normalizeData(spriteDataRaw) | ||
local | local parentData = normalizeData(parentDataRaw) | ||
if not spriteData or type(spriteData) ~= "table" then | if not spriteData or type(spriteData) ~= "table" then | ||
| Строка 323: | Строка 318: | ||
end | end | ||
if not | if not parentData or type(parentData) ~= "table" then | ||
return "Ошибка загрузки JSON: " .. | return "Ошибка загрузки JSON: " .. parentPage | ||
end | end | ||
local whitelistSet = buildSet(frame.args.whitelistParent) | local whitelistSet = buildSet(frame.args.whitelistParent) | ||
local blacklistSet = buildSet(frame.args.blacklistParent) | local blacklistSet = buildSet(frame.args.blacklistParent) | ||
local filteredData = filterSpriteData(spriteData, | local filteredData = filterSpriteData(spriteData, parentData, whitelistSet, blacklistSet, project) | ||
if action == "repeat" then | if action == "repeat" then | ||