Module:Abilities/utils: Difference between revisions

Sur (talk | contribs)
m testing a generic table accessor function
mNo edit summary
Tag: Manual revert
 
(21 intermediate revisions by 5 users not shown)
Line 19: Line 19:
end
end
return nil
return nil
end
-- Returns the key of the hero whose ability name is passed as an argument
--{{#invoke:Abilities/utils|find_hero_by_ability|ABILITY_NAME}}--
p.find_hero_by_ability = function(frame)
local ability_name = frame.args[1]
if not ability_name or ability_name == "" then
return "Missing Ability Name"
end
-- Normalize input for case-insensitive comparison
local normalized_input = string.lower(ability_name)
-- Iterate through all heroes in the data
for hero_key, ui_data in pairs(data) do
-- Check each ability for this hero
for ability_num, ability in pairs(ui_data) do
local current_name = lang.get_string(ability.Key)
if string.lower(current_name) == normalized_input then
return hero_key
end
end
end
return "Hero Not Found"
end
end


-- Add prefix and postfix labels to a value. Eg. "32" -> "32s"
-- Add prefix and postfix labels to a value. Eg. "32" -> "32s"
function p.format_value_with_prepost(key, value, frame, exclude_plus)
function p.format_value_with_prepost(key, value, frame, exclude_plus)
if (exclude_plus == nil) then exclude_plus = false end
if (value == nil) then return nil end
if (value == nil) then return nil end
Line 50: Line 77:
prefix = '+'
prefix = '+'
end
end
-- if no prefix on positive value, add a '+'
end
else
if value > 0 then
-- Do not assign a minus sign if value is already negative
prefix = '+'
if (prefix == '-' and value < 0) then
end
prefix = ''
end
end
Line 67: Line 94:
prefix..value,  
prefix..value,  
postfix,
postfix,
uom_style = 'font-size: 12px;'
uom_style = 'font-size: 0.8em; color: #9C9C9C'
}
}
}
}
Line 75: Line 102:


function p.get_notes_source_page_name(ability_key)  
function p.get_notes_source_page_name(ability_key)  
local ability_name_en = data["Name"]
local ability_name_localized = lang.get_string(ability_key)
local ability_name_localized = lang.get_string(ability_key)
local notes_str_localized = dictionary_module.translate('Notes', nil, '')
local notes_str_localized = dictionary_module.translate('Notes', nil, '')
Line 95: Line 121:
return notes_source_page
return notes_source_page
end
-- Generic function to traverse the table
function p.get_value(frame)
local args = frame.args
local value = data
for i = 1, #args do
local key = args[i]
-- Try converting numeric keys
local num_key = tonumber(key)
if num_key and value[num_key] ~= nil then
key = num_key
end
if type(value) == "table" then
value = value[key]
else
return "Error: Attempted to index non-table at key '" .. tostring(key) .. "'"
end
if value == nil then
return "Error: Invalid key path at '" .. tostring(key) .. "'"
end
end
return value
end
end


return p
return p