| Latest revision |
Your text |
| Line 1: |
Line 1: |
| local p = {}
| |
| local commonutils = require "Module:Utilities"
| |
| local lang = require"Module:Lang"
| |
| local dictionary_module = require("Module:Dictionary")
| |
|
| |
| local data = mw.loadJsonData("Data:AbilityCards.json") | | local data = mw.loadJsonData("Data:AbilityCards.json") |
|
| |
|
| -- returns the table of a specific item' | | -- returns the table of a specific item |
| function p.get_ability_card_data(hero_key, ability_num) | | function get_ability_card_data(hero_name, ability_num) |
| if(hero_key == nil) then return nil end | | local hero_key = get_hero_key(hero_name) |
| | if(hero_key == nil) then return "Hero Not Found" end |
| return data[hero_key][tonumber(ability_num)] | | return data[hero_key][tonumber(ability_num)] |
| end | | end |
|
| |
|
| function p.get_hero_key(hero_name) | | function get_hero_key(hero_name) |
| for i, hero in pairs(data) do | | for i, hero in pairs(data) do |
| if hero["Name"] == hero_name then | | if hero["Name"] == hero_name then |
| Line 20: |
Line 16: |
| return nil | | return nil |
| end | | 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
| |
|
| |
| -- Add prefix and postfix labels to a value. Eg. "32" -> "32s"
| |
| 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
| |
|
| |
| local prefix = lang.get_string(string.format("%s_prefix",key))
| |
| local postfix = lang.get_string(string.format("%s_postfix",key))
| |
|
| |
| -- Default pre/post fix to empty string, as they may not exist
| |
| if (prefix == nil) then prefix = '' end
| |
| if (postfix == nil) then postfix = '' end
| |
|
| |
| -- If string ends with 'm', then set the postfix to 'm' and remove it
| |
| if commonutils.string_endswith(tostring(value), 'm') then
| |
| value = tonumber(value:sub(1, -2))
| |
| postfix = 'm'
| |
| end
| |
|
| |
| -- If string ends with 's', then set the postfix to 's' and remove it
| |
| if commonutils.string_endswith(tostring(value), 's') then
| |
| value = tonumber(value:sub(1, -2))
| |
| postfix = 's'
| |
| end
| |
|
| |
| if (prefix == '{s:sign}') then
| |
| if value < 0 then
| |
| prefix = '-'
| |
| else
| |
| prefix = '+'
| |
| end
| |
| end
| |
|
| |
| -- Do not assign a minus sign if value is already negative
| |
| if (prefix == '-' and value < 0) then
| |
| prefix = ''
| |
| end
| |
|
| |
| -- some use cases don't require the '+' symbol prefix
| |
| if exclude_plus == true and prefix == '+' then
| |
| prefix = ''
| |
| end
| |
|
| |
| value_and_uom = frame:expandTemplate{
| |
| title = 'Template:ValueAndUom',
| |
| args = {
| |
| prefix..value,
| |
| postfix,
| |
| uom_style = 'font-size: 0.8em; color: #9C9C9C'
| |
| }
| |
| }
| |
|
| |
| return value_and_uom
| |
| end
| |
|
| |
| function p.get_notes_source_page_name(ability_key)
| |
| local ability_name_localized = lang.get_string(ability_key)
| |
| local notes_str_localized = dictionary_module.translate('Notes', nil, '')
| |
|
| |
| --Determine notes link
| |
| local notes_source_page
| |
| local notes_untranslated_msg = ''
| |
| -- if either "Notes" string or ability_name is not able to be localized,
| |
| -- use an english link instead, as transcluded content relies on it
| |
| if (ability_name_localized == '') or (notes_str_localized == '') then
| |
| notes_source_page = ability_name_en .. '/' .. dictionary_module.translate('Notes', 'en', '')
| |
| if notes_str_localized=='' then
| |
| notes_untranslated_msg = '<br>' .. dictionary_module.translate('NotesNeedsTranslation') .. ' [[Template:Translate]]' .. "<br>"
| |
| end
| |
| else
| |
| notes_source_page = ability_name_localized .. '/' .. notes_str_localized
| |
| end
| |
| notes_source_page = "User:Sur/" .. notes_source_page --temp
| |
|
| |
| return notes_source_page
| |
| end
| |
|
| |
| return p
| |