Модуль:Entity Sprite: различия между версиями

мНет описания правки
мНет описания правки
Строка 3: Строка 3:
-- Загрузка данных
-- Загрузка данных
local function loadData(filePath)
local function loadData(filePath)
     if jsonData == nil then
     local page = mw.title.new(filePath)
        local page = mw.title.new(filePath)
    local content = page and page:getContent()
        local content = page and page:getContent()
    return content and mw.text.jsonDecode(content) or nil
        jsonData = content and mw.text.jsonDecode(content) or nil
    end
    return jsonData
end
end


-- Проверка равенства двух таблиц
-- Проверка равенства двух таблиц
Строка 74: Строка 70:
     end
     end
     return nil
     return nil
end
local function cleanTable(tbl)
    for k in pairs(tbl) do
        tbl[k] = nil
    end
end
end


Строка 111: Строка 101:
             end
             end
             local firstId = group[1].id
             local firstId = group[1].id
             table.insert(result, "{{Entity Sprite/Image|" .. entry.id .. "|" .. spritePath .. "}}")
             table.insert(result, mw.getCurrentFrame():preprocess("{{Entity Sprite/Repeat|" .. table.concat(idLinks, " ") .. "|" .. firstId .. "}}"))
         end
         end
     end
     end


     return mw.getCurrentFrame():preprocess(table.concat(result, "\n"))
     return table.concat(result, "\n")
end
end


-- Создаём индекс для путей
-- Создаём индекс для путей
local function createSpritePathIndex(data)
local function createSpritePathIndex(data)
     if spritePathCache == nil then
     local index = {}
        spritePathCache = {}
    for _, entry in ipairs(data) do
        for _, entry in ipairs(data) do
        local spritePath = getSpritePath(entry)
            local spritePath = getSpritePath(entry)
        if spritePath then
            if spritePath then
            index[spritePath] = entry.id
                spritePathCache[spritePath] = entry.id
            end
         end
         end
     end
     end
     return spritePathCache
     return index
end
end


Строка 235: Строка 223:
         return nil  
         return nil  
     elseif param == "image" and secondaryParam then
     elseif param == "image" and secondaryParam then
         return getSpritePath(secondaryParam) or "Ошибка: Спрайт не найден."
         for _, entry in ipairs(data) do
            if entry.id == secondaryParam then
                return getSpritePath(entry) or "Ошибка: Спрайт не найден."
            end
        end
        return "Ошибка: ID не найден."
     elseif param == "image" or param == "path" then
     elseif param == "image" or param == "path" then
         local result = {}
         local result = {}
Строка 249: Строка 242:
         return generateDefaultTemplate(data, frame.args)
         return generateDefaultTemplate(data, frame.args)
     end
     end
    cleanTable(spritePathIndex)
cleanTable(jsonData)
end
end


return p
return p