Module:TemplateHelpers: Difference between revisions

// via Wikitext Extension for VSCode
Tag: Reverted
// via Wikitext Extension for VSCode
Tag: Manual revert
Line 191: Line 191:


-- Retrieves a field value from args using either multiple possible keys or a single key
-- Retrieves a field value from args using either multiple possible keys or a single key
-- Supports case-insensitive lookup by default with special handling for known uppercase fields
-- Supports case-insensitive lookup by default
function p.getFieldValue(args, field)
function p.getFieldValue(args, field)
     -- Create a cache key for this lookup
     if field.keys then
    local cacheKey = p.generateCacheKey("getFieldValue", field, args)
        for _, key in ipairs(field.keys) do
   
            -- First try exact match to maintain backward compatibility
    -- Use the caching wrapper
            if args[key] and args[key] ~= "" then
    return p.withCache(cacheKey, function()
                return key, args[key]
        -- Handle field with keys array
            end
        if field.keys then
           
            for _, key in ipairs(field.keys) do
            -- Then try lowercase version
                -- First try exact match to maintain backward compatibility
            local lowerKey = key:lower()
                if args[key] and args[key] ~= "" then
            if args[lowerKey] and args[lowerKey] ~= "" and lowerKey ~= key then
                    return key, args[key]
                return lowerKey, args[lowerKey]
                end
               
                -- Special handling for known uppercase fields
                if key == "ID" and args["id"] and args["id"] ~= "" then
                    return "ID", args["id"]
                end
               
                -- Then try lowercase version
                local lowerKey = key:lower()
                if args[lowerKey] and args[lowerKey] ~= "" and lowerKey ~= key then
                    return key, args[lowerKey] -- Return original key for consistency
                end
             end
             end
            return nil, nil
         end
         end
          
         return nil, nil
        -- Handle field with single key
    end
        local key = field.key
   
       
    -- First try exact match
        -- First try exact match
    if args[field.key] and args[field.key] ~= "" then
        if args[key] and args[key] ~= "" then
        return field.key, args[field.key]
            return key, args[key]
    end
        end
   
       
    -- Then try lowercase version
        -- Special handling for known uppercase fields
    local lowerKey = field.key:lower()
        if key == "ID" and args["id"] and args["id"] ~= "" then
    if args[lowerKey] and args[lowerKey] ~= "" and lowerKey ~= field.key then
            return "ID", args["id"]
        return lowerKey, args[lowerKey]
        end
    end
       
   
        -- Then try lowercase version
    return field.key, nil
        local lowerKey = key:lower()
        if args[lowerKey] and args[lowerKey] ~= "" and lowerKey ~= key then
            return key, args[lowerKey] -- Return original key for consistency
        end
       
        return key, nil
    end)
end
end