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

мНет описания правки
Метка: отменено
мНет описания правки
Метки: ручная отмена отменено
Строка 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 {}
    if type(entry) ~= "table" then
        return ""
    end


     local parts = {}
     local flat = {}
     local function walk(tbl, prefix)
     local function walk(tbl, prefix)
         local keys = {}
         if type(tbl) ~= "table" then
        for k in pairs(tbl) do table.insert(keys, k) end
            flat[prefix] = format_value(tbl)
         table.sort(keys, function(a, b) return tostring(a) < tostring(b) end)
            return
        for _, k in ipairs(keys) do
        end
            local v = tbl[k]
        if prefix ~= "" then
            local key = (prefix == "" and tostring(k) or prefix .. "." .. tostring(k))
            flat[prefix] = format_value(tbl)
            if type(v) == "table" then
        end
                walk(v, key)
         if is_array(tbl) then
             else
            local max = 0
                 table.insert(parts, key .. "=" .. tostring(v))
            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