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

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


local function to_nowiki(v)
local function to_nowiki(v)
    local s = tostring(v)
     return "<nowiki>" .. v .. "</nowiki>"
     return "<nowiki>" .. s .. "</nowiki>"
end
end


Строка 258: Строка 257:


     local parts = {}
     local parts = {}
    local function append_table_json(key, value)
        local ok, json = pcall(mw.text.jsonEncode, value)
        if ok and json then
            parts[#parts + 1] = key .. "=" .. to_nowiki(json)
        end
    end
     local function walk(tbl, prefix)
     local function walk(tbl, prefix)
         local keys = {}
         local keys = {}
Строка 264: Строка 270:
         for _, k in ipairs(keys) do
         for _, k in ipairs(keys) do
             local v = tbl[k]
             local v = tbl[k]
             local key = (prefix == "" and tostring(k) or prefix .. "." .. tostring(k))
            local kStr = tostring(k)
             local key = (prefix == "" and kStr or prefix .. "." .. kStr)
             if type(v) == "table" then
             if type(v) == "table" then
                 if next(v) == nil then
                 if next(v) == nil then
                elseif is_array(v) then
                    local ok, json = pcall(mw.text.jsonEncode, v)
                    if ok and json then
                        parts[#parts + 1] = key .. "=" .. to_nowiki(json)
                    end
                 else
                 else
                     local ok, json = pcall(mw.text.jsonEncode, v)
                     append_table_json(key, v)
                     if ok and json then
                     if not is_array(v) then
                         parts[#parts + 1] = key .. "=" .. to_nowiki(json)
                         walk(v, key)
                     end
                     end
                    walk(v, key)
                 end
                 end
             else
             else
Строка 472: Строка 473:
     end
     end


    local target = tostring(compName)
     for _, v in ipairs(entry) do
     for _, v in ipairs(entry) do
         if tostring(v) == tostring(compName) then
         if tostring(v) == target then
             return "true"
             return "true"
         end
         end