Module:HeroData/nav: Difference between revisions

Jump to navigation Jump to search
fixed my last change
added function for roster cards and bulletpoints (wip)
Line 12: Line 12:
     local herolabs_text_size = frame.args['herolabs_text_size']
     local herolabs_text_size = frame.args['herolabs_text_size']
     local debug_mode = frame.args['debug_mode']
     local debug_mode = frame.args['debug_mode']
    -- Variable to use {{HeroRosterCard}} instead.
    local roster = frame.args['roster']
local lang_code = lang_module.get_lang_code() -- Get the language code
local lang_code = lang_module.get_lang_code() -- Get the language code
Line 92: Line 90:
     local ret = ''
     local ret = ''
     for index, hero_object in ipairs(heroes) do
     for index, hero_object in ipairs(heroes) do
    if roster == 'true' then
    ret = ret .. '{{HeroRosterCard' .. hero_object.wikitext
    ret = ret .. '}} '
    else
         ret = ret .. '{{Hero card2' .. hero_object.wikitext
         ret = ret .. '{{Hero card2' .. hero_object.wikitext
         ret = ret .. '|text_size=' .. text_size
         ret = ret .. '|text_size=' .. text_size
Line 104: Line 98:
         ret = ret .. '}} '
         ret = ret .. '}} '
         end
         end
    end
      
      
     -- Remove the last space
     -- Remove the last space
     ret = string.sub(ret, 1, -(string.len(' '))-1)
     ret = string.sub(ret, 1, -(string.len(' '))-1)
   
    if debug_mode then
        return ret
    else -- evaluate wikitext if not in debug mode
        return frame:preprocess(ret)
    end
end
-- for [[Template:Roster]]
function p.get_hero_roster(frame)
local lang_code = lang_module.get_lang_code() -- Get the language code
   
    -- Turn debug_mode from string to bool, default to false
    if debug_mode == nil then
        debug_mode = false
    elseif debug_mode == 'true' then
        debug_mode = true
    elseif debug_mode == 'false' then
        debug_mode = false
    end
   
    if in_herolabs == nil then
    in_herolabs = 'false'
    end
    if in_herolabs ~= 'true' and in_herolabs ~= 'false' then
        return 'in_herolabs must be either true or false'
    end
   
    -- Only add subpage if not English
    local subpage_str = ''
    if lang_code ~= 'en' then
        subpage_str = '/' .. lang_code
    end
   
    -- Iterate heroes
    local heroes = {}
    for hero_key, hero_data in pairs(heroes_data) do
    -- hero_werewolf_transformed is consolidated in Silver's page
        if hero_data["Name"] ~= nil and hero_key ~= 'hero_werewolf_transformed' then
            local this_hero_status = hero_release_module.get_hero_release_status(hero_key)
           
            if this_in_herolabs == nil then this_in_herolabs = false end
           
            if ((in_herolabs == 'true' and this_hero_status == 'HeroLabs') or
                (in_herolabs == 'false' and this_hero_status == 'Released')) then
               
                local is_recommended = hero_data['IsRecommended']
                if is_recommended == nil then
                    is_recommended = false
                end
               
                -- Create a sort key for each hero to ensure correct alphabetical ordering.
                -- This logic handles special cases like "The Doorman" by looking for a "_sort" version of the hero's key in the language files.
                local hero_name = lang_module.get_string(hero_key, nil, 'en')
                local sort_key_to_find = hero_key .. '_sort'
                local potential_sort_key = lang_module.get_string(sort_key_to_find, nil, 'en')
               
                local sort_key
                -- The lang_module returns the requested key (wrapped in HTML) if a translation is not found.
                -- We detect this failure by checking if the returned string contains the key we originally searched for.
                if string.find(potential_sort_key, sort_key_to_find, 1, true) then
                    -- If the key is found in the result, it means the translation failed. Fall back to the hero's display name for sorting.
                    sort_key = hero_name
                else
                    -- If the key is NOT found, it means we received a valid sort key (e.g., "Doorman"). Use it.
                    sort_key = potential_sort_key
                end
                local hero_wikitext = '|name=' .. hero_name ..
                              '|key=' .. hero_key ..
                              '|link=' .. lang_module.get_string(hero_key, 'en') ..
                              '|subpage=' .. subpage_str ..
                              '|recommended=' .. tostring(is_recommended)
               
                -- Store the sort key and the wikitext together in a table for sorting.
                table.insert(heroes, {sort_key = sort_key, wikitext = hero_wikitext})
            end
        end
    end
       
    -- Sort the list of heroes alphabetically based on their assigned sort_key.
    table.sort(heroes, function(a, b)
        return a.sort_key < b.sort_key
    end)
   
    -- Build the final wikitext output from the now-sorted table.
    local ret = ''
    for index, hero_object in ipairs(heroes) do
        ret = ret .. '{{HeroRosterCard' .. hero_object.wikitext
        ret = ret .. '}}'
        end
   
    if debug_mode then
        return ret
    else -- evaluate wikitext if not in debug mode
        return frame:preprocess(ret)
    end
end
-- for [[Template:Quotes Navbox]] etc.
p.get_hero_bulletpoints = function(frame)
local subpage = frame.args['1']
local lang_code = lang_module.get_lang_code() -- Get the language code
   
    -- Turn debug_mode from string to bool, default to false
    if debug_mode == nil then
        debug_mode = false
    elseif debug_mode == 'true' then
        debug_mode = true
    elseif debug_mode == 'false' then
        debug_mode = false
    end
   
    if in_herolabs == nil then
    in_herolabs = 'false'
    end
    if in_herolabs ~= 'true' and in_herolabs ~= 'false' then
        return 'in_herolabs must be either true or false'
    end
   
    -- Only add subpage if not English
    local subpage_str = ''
    if lang_code ~= 'en' then
        subpage_str = '/' .. lang_code
    end
   
    -- Iterate heroes
    local heroes = {}
    for hero_key, hero_data in pairs(heroes_data) do
    -- hero_werewolf_transformed is consolidated in Silver's page
        if hero_data["Name"] ~= nil and hero_key ~= 'hero_werewolf_transformed' then
            local this_hero_status = hero_release_module.get_hero_release_status(hero_key)
           
            if this_in_herolabs == nil then this_in_herolabs = false end
           
            if ((in_herolabs == 'true' and this_hero_status == 'HeroLabs') or
                (in_herolabs == 'false' and this_hero_status == 'Released')) then
               
                local is_recommended = hero_data['IsRecommended']
                if is_recommended == nil then
                    is_recommended = false
                end
               
                -- Create a sort key for each hero to ensure correct alphabetical ordering.
                -- This logic handles special cases like "The Doorman" by looking for a "_sort" version of the hero's key in the language files.
                local hero_name = lang_module.get_string(hero_key, nil, 'en')
                local sort_key_to_find = hero_key .. '_sort'
                local potential_sort_key = lang_module.get_string(sort_key_to_find, nil, 'en')
               
                local sort_key
                -- The lang_module returns the requested key (wrapped in HTML) if a translation is not found.
                -- We detect this failure by checking if the returned string contains the key we originally searched for.
                if string.find(potential_sort_key, sort_key_to_find, 1, true) then
                    -- If the key is found in the result, it means the translation failed. Fall back to the hero's display name for sorting.
                    sort_key = hero_name
                else
                    -- If the key is NOT found, it means we received a valid sort key (e.g., "Doorman"). Use it.
                    sort_key = potential_sort_key
                end
                local hero_wikitext = hero_name
               
                -- Store the sort key and the wikitext together in a table for sorting.
                table.insert(heroes, {sort_key = sort_key, wikitext = hero_wikitext})
            end
        end
    end
       
    -- Sort the list of heroes alphabetically based on their assigned sort_key.
    table.sort(heroes, function(a, b)
        return a.sort_key < b.sort_key
    end)
   
    -- Build the final wikitext output from the now-sorted table.
    local ret = ''
    for index, hero_object in ipairs(heroes) do
    if subpage then
            ret = ret .. '{{PageRef|'.. hero_object.wikitext
            ret = ret .. '|alt_link='.. hero_object.wikitext
            ret = ret .. '/'.. subpage
            ret = ret ..'}} &bull; '
        else
            ret = ret '{{HeroIcon='.. hero_object.wikitext
            ret = ret ..'}} &bull; '
        end
        end
   
        -- Remove the last bullet point
    ret = string.sub(ret, 1, -(string.len(' &bull; '))-1)
      
      
     if debug_mode then
     if debug_mode then