Jump to content

Module:HeroData/nav

From Deadlock Wiki

Overview[edit source]

Generates hero navigation cards

Functions[edit source]

get_hero_nav_cards[edit source]

For Template:Hero Navbox on Heroes, individual hero pages like Abrams, and the home page.

Examples[edit source]

First with debug_mode on, to help visualize what the output's source looks like.

{{#invoke:HeroData/nav|get_hero_nav_cards
|in_herolabs=true
|text_size=11
|card_size=card_size|88
|sticker_size=sticker_size|30
|herolabs_text_size=herolabs_text_size|6
|debug_mode=true
}}

{{Hero card2|name=Fathom|link=Fathom|subpage=|recommended=false|text_size=11|herolabs=true|card_size=88|sticker_size=30|herolabs_text_size=6}} {{Hero card2|name=Raven|link=Raven|subpage=|recommended=false|text_size=11|herolabs=true|card_size=88|sticker_size=30|herolabs_text_size=6}} {{Hero card2|name=Trapper|link=Trapper|subpage=|recommended=false|text_size=11|herolabs=true|card_size=88|sticker_size=30|herolabs_text_size=6}} {{Hero card2|name=Wrecker|link=Wrecker|subpage=|recommended=false|text_size=11|herolabs=true|card_size=88|sticker_size=30|herolabs_text_size=6}}


Now with debug_mode defaulted to false (off) to see actual visual output.

{{#invoke:HeroData/nav|get_hero_nav_cards
|in_herolabs=true
|text_size=11
|card_size=88
|sticker_size=30
|herolabs_text_size=6
}}

Hero Labs

Fathom

Hero Labs

Raven

Hero Labs

Trapper

Hero Labs

Wrecker

Parameters[edit source]

  • text_size - Font size of the hero name
  • card_size - Size of the hero card
  • sticker_size - Size of the Recommended or Hero lab stickers that appear in the top right corner
  • herolabs_text_size - Font size of the 'Hero Labs' text that appears for heroes in Hero Labs
  • debug_mode - (OPTIONAL) Defaults to false. With true, the output is raw wikitext source that isn't processed, allowing to see more clearly what is ran.

debug_mode is the only optional parameter. All other parameters are required. Template:Hero card2 utilizes this with some default values, see there for suggested values.


local p = {}
local heroes_data = mw.loadJsonData("Data:HeroData.json")
local hero_release_module = require('Module:HeroData/release')
local lang_module = require('Module:Lang')

-- for [[Template:Deadlock_Wiki/Heroes]] on home page, i.e. [[Template:Hero card2]]
function p.get_hero_nav_cards(frame)
    local in_herolabs = frame.args['in_herolabs'] -- true or false
    local text_size = frame.args['text_size']
    local card_size = frame.args['card_size']
    local sticker_size = frame.args['sticker_size']
    local herolabs_text_size = frame.args['herolabs_text_size']
    local debug_mode = frame.args['debug_mode']
	
	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 ~= '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
        if hero_data["Name"] ~= nil then
            -- if herolabs is requested, only needs to have herolabs=true
            -- otherwise, needs to be not disabled, in development, nd herolabs is nil or false
            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
                
                local hero_str = '|name=' .. lang_module.get_string(hero_key, nil, 'en') .. 
                               '|link=' .. lang_module.get_string(hero_key, 'en') .. 
                               '|subpage=' .. subpage_str .. 
                               '|recommended=' .. tostring(is_recommended)
                
                table.insert(heroes, hero_str)
            end
        end
    end
        
    -- Order list alphabetically
    table.sort(heroes) -- O(nlogn)
    
    -- Add each item to output
    local ret = ''
    for index, hero_name in ipairs(heroes) do
        ret = ret .. '{{Hero card2' .. hero_name
        ret = ret .. '|text_size=' .. text_size
        ret = ret .. '|herolabs=' .. in_herolabs
        ret = ret .. '|card_size=' .. card_size
        ret = ret .. '|sticker_size=' .. sticker_size
        ret = ret .. '|herolabs_text_size=' .. herolabs_text_size
        ret = ret .. '}} '
    end
    
    -- Remove the last space
    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
return p