Модуль:JsonPaths: различия между версиями
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| Строка 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 = | path = trim(path) | ||
if path == "Corvax" then | if path == "Corvax" then | ||
| Строка 13: | Строка 19: | ||
local function resolvePath(path) | local function resolvePath(path) | ||
path = | 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 = | path = trim(args.path or "") | ||
if path == "" then | if path == "" then | ||
path = | 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 = | rel = trim(rel) | ||
if rel == "" then | if rel == "" then | ||
return "" | return "" | ||