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

Нет описания правки
Нет описания правки
Строка 1: Строка 1:
local p = {}
local p = {}
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
local entityCache = {}
local function trim(value)
    return mw.text.trim(value or "")
end


local function normalizePath(path)
local function normalizePath(path)
     path = mw.text.trim(path or "")
     path = trim(path)


     if path == "Corvax" then
     if path == "Corvax" then
Строка 13: Строка 19:


local function resolvePath(path)
local function resolvePath(path)
     path = mw.text.trim(path or "")
     path = trim(path)
     if path ~= "" then
     if path ~= "" then
         return normalizePath(path)
         return normalizePath(path)
Строка 24: Строка 30:


     local args = getArgs(frame)
     local args = getArgs(frame)
     path = mw.text.trim(args.path or "")
     path = trim(args.path or "")


     if path == "" then
     if path == "" then
         path = mw.text.trim(frame:preprocess("{{#var:JsonPath}}") or "")
         path = trim(frame:preprocess("{{#var:JsonPath}}") or "")
     end
     end


     return normalizePath(path)
     return normalizePath(path)
end
function p.project(path)
    return resolvePath(path)
end
local function getEntityDataTitle(path)
    path = resolvePath(path)
    if path == "" then
        return ""
    end
    return "Модуль:IanComradeBot/" .. path .. "/entity project.json/data"
end
local function loadEntityIds(path)
    path = resolvePath(path)
    if path == "" then
        return nil
    end
    if entityCache[path] ~= nil then
        return entityCache[path]
    end
    local title = getEntityDataTitle(path)
    local ok, data = pcall(mw.loadData, title)
    if not ok or type(data) ~= "table" then
        entityCache[path] = {}
        return entityCache[path]
    end
    entityCache[path] = data
    return data
end
local function arrayContains(list, value)
    if type(list) ~= "table" then
        return false
    end
    for _, item in ipairs(list) do
        if item == value then
            return true
        end
    end
    return false
end
function p.has(id, path)
    id = trim(id)
    if id == "" then
        return ""
    end
    path = resolvePath(path)
    if path == "" then
        return ""
    end
    local ids = loadEntityIds(path)
    if arrayContains(ids, id) then
        return true
    end
    return false
end
end


function p.get(rel, path)
function p.get(rel, path)
     rel = mw.text.trim(rel or "")
     rel = trim(rel)
     if rel == "" then
     if rel == "" then
         return ""
         return ""