Модуль: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
     if not ok or not data then return "" end
 
    local entry = data[id] or data["default"] or {}
    if type(entry) ~= "table" then
         return ""
         return ""
     end
     end


     local entry = data[id] or data["default"] or {}
     local parts = {}
 
    local flat = {}
     local function walk(tbl, prefix)
     local function walk(tbl, prefix)
         if type(tbl) ~= "table" then
         local keys = {}
            flat[prefix] = format_value(tbl)
        for k in pairs(tbl) do table.insert(keys, k) end
            return
         table.sort(keys, function(a, b) return tostring(a) < tostring(b) end)
        end
         for _, k in ipairs(keys) do
         if prefix ~= "" then
             local v = tbl[k]
            flat[prefix] = format_value(tbl)
            local key = (prefix == "" and tostring(k) or prefix .. "." .. tostring(k))
        end
            if type(v) == "table" then
         if is_array(tbl) then
                walk(v, key)
            local max = 0
            else
            for k in pairs(tbl) do if type(k) == "number" and k > max then max = k end end
                table.insert(parts, key .. "=" .. tostring(v))
             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
Строка 176: Строка 160:


     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