Модуль:GetField: различия между версиями
Pok (обсуждение | вклад) мНет описания правки Метка: отменено |
Pok (обсуждение | вклад) мНет описания правки Метки: ручная отмена отменено |
||
| Строка 136: | Строка 136: | ||
local moduleName = "Module:" .. baseUser .. pagePath .. "/data" | local moduleName = "Module:" .. baseUser .. pagePath .. "/data" | ||
local ok, data = pcall(mw.loadData, moduleName) | local ok, data = pcall(mw.loadData, moduleName) | ||
if not ok or not data then return "" end | if not ok or not data then | ||
return "" | |||
end | |||
local entry = data[id] or data["default"] or {} | local entry = data[id] or data["default"] or {} | ||
local | local flat = {} | ||
local function walk(tbl, prefix) | local function walk(tbl, prefix) | ||
if type(tbl) ~= "table" then | |||
flat[prefix] = format_value(tbl) | |||
return | |||
end | |||
if prefix ~= "" then | |||
flat[prefix] = format_value(tbl) | |||
end | |||
if is_array(tbl) then | |||
else | local max = 0 | ||
for k in pairs(tbl) do if type(k) == "number" and k > max then max = k end end | |||
for i = 1, max do | |||
local v = tbl[i] | |||
local key = (prefix == "" and tostring(i) or prefix .. "." .. tostring(i)) | |||
if type(v) == "table" then | |||
walk(v, key) | |||
else | |||
flat[key] = format_value(v) | |||
end | |||
end | |||
else | |||
for k, v in pairs(tbl) do | |||
local key = (prefix == "" and tostring(k) or prefix .. "." .. tostring(k)) | |||
if type(v) == "table" then | |||
walk(v, key) | |||
else | |||
flat[key] = format_value(v) | |||
end | |||
end | end | ||
end | end | ||
| Строка 160: | Строка 176: | ||
walk(entry, "") | walk(entry, "") | ||
local parts = {} | |||
for k, v in pairs(flat) do | |||
table.insert(parts, tostring(k) .. "=" .. tostring(v)) | |||
end | |||
return table.concat(parts, "|") | return table.concat(parts, "|") | ||
end | end | ||
return p | return p | ||