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

Нет описания правки
Нет описания правки
 
(не показаны 2 промежуточные версии этого же участника)
Строка 55: Строка 55:
end
end


local function render_from_args(args)
local function get_raw_arg(sources, key)
     local field = args[1]
    for _, source in ipairs(sources) do
     local label = args[2]
        if source and source[key] ~= nil then
            return source[key]
        end
    end
    return nil
end
 
local function render_from_frame(frame)
    local parent = frame:getParent()
    local sources = { frame.args, parent and parent.args }
     local field = get_raw_arg(sources, 1)
     local label = get_raw_arg(sources, 2)
     field = field and trim(field) or ''
     field = field and trim(field) or ''
     label = label and trim(label) or ''
     label = label and trim(label) or ''


     -- map base -> label -> value
     if field ~= '' and label ~= '' then
    local map = {}
         local value = get_raw_arg(sources, field .. '_' .. label)
    each_compound_arg(args, function(base, rem, v)
         if value ~= nil then
         local lab = trim(strip_trailing_digits(rem))
             return tostring(value)
        map[base] = map[base] or {}
        local cur = map[base][lab]
        if cur then
            map[base][lab] = cur .. '\n' .. tostring(v)
         else
             map[base][lab] = tostring(v)
         end
         end
    end)
    if field ~= '' and label ~= '' then
        local base = map[field]
        if base then return base[label] or '' end
     end
     end


     if field ~= '' and args[field] ~= nil then
     if field ~= '' then
        return trim(tostring(args[field]))
        local value = get_raw_arg(sources, field)
        if value ~= nil then
            return trim(tostring(value))
        end
     end
     end


Строка 87: Строка 90:


function p.main(frame)
function p.main(frame)
     local args = getArgs(frame, { removeBlanks = false })
     local parent = frame:getParent()
     local field = args[1]
     local field = get_raw_arg({ frame.args, parent and parent.args }, 1)


     if field == "json" then
     if field == "json" then
        local args = getArgs(frame, { removeBlanks = false })
         local json = collect_labels_from_args(args)
         local json = collect_labels_from_args(args)
         return mw.text.jsonEncode(json)
         return mw.text.jsonEncode(json)
     end
     end


     return render_from_args(args)
     return render_from_frame(frame)
end
end


return p
return p