Модуль:Сущность: различия между версиями

Нет описания правки
Нет описания правки
Строка 300: Строка 300:


     return frame:preprocess(table.concat(out, "\n"))
     return frame:preprocess(table.concat(out, "\n"))
end
local function is_array(tbl)
    local max = 0
    local count = 0
    for k in pairs(tbl) do
        if type(k) ~= "number" then
            return false
        end
        if k > max then max = k end
        count = count + 1
    end
    return count > 0 and max == count
end
end


Строка 315: Строка 328:
     local sep = args.sep or ": "
     local sep = args.sep or ": "


     local keys = {}
     local out = {}
    for k in pairs(data) do
        keys[#keys + 1] = k
    end
    table.sort(keys, function(a, b) return tostring(a) < tostring(b) end)


     local out = {}
     if is_array(data) then
    for _, k in ipairs(keys) do
        for _, v in ipairs(data) do
        local v = data[k]
            local text = ""
        local vStr
            if type(v) == "table" then
        if type(v) == "table" then
                if is_array(v) then
            local okJson, jsonVal = pcall(mw.text.jsonEncode, v)
                    if #v == 1 then
            if okJson and jsonVal then
                        text = tostring(v[1])
                vStr = jsonVal
                    elseif #v > 1 then
                        local parts = {}
                        for i = 1, #v do
                            parts[#parts + 1] = tostring(v[i])
                        end
                        text = table.concat(parts, ", ")
                    end
                else
                    local okJson, jsonVal = pcall(mw.text.jsonEncode, v)
                    if okJson and jsonVal then
                        text = jsonVal
                    end
                end
             else
             else
                 vStr = ""
                 text = tostring(v)
            end
            if text ~= "" then
                table.insert(out, bullet .. text)
             end
             end
        else
            vStr = tostring(v)
         end
         end
         if vStr ~= "" then
    else
            table.insert(out, bullet .. tostring(k) .. sep .. vStr)
        local keys = {}
         for k in pairs(data) do
            keys[#keys + 1] = k
        end
        table.sort(keys, function(a, b) return tostring(a) < tostring(b) end)
 
        for _, k in ipairs(keys) do
            local v = data[k]
            local vStr
            if type(v) == "table" then
                local okJson, jsonVal = pcall(mw.text.jsonEncode, v)
                if okJson and jsonVal then
                    vStr = jsonVal
                else
                    vStr = ""
                end
            else
                vStr = tostring(v)
            end
            if vStr ~= "" then
                table.insert(out, bullet .. tostring(k) .. sep .. vStr)
            end
         end
         end
     end
     end