Module:HeroData/nav
Jump to navigation
Jump to search
Overview
Generates hero navigation cards
Functions
For Template:Hero Navbox on Heroes, individual hero pages like Abrams, and the home page.
Examples
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 }}
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 }}
Parameters
- 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 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']
if in_herolabs ~= 'true' and in_herolabs ~= 'false' then
return 'in_herolabs must be either true or false as the first unnamed parameter'
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
this_in_herolabs = hero_data['InHeroLabs']
if this_in_herolabs == nil then this_in_herolabs = false end
if ((in_herolabs == 'true' and this_in_herolabs) or
(in_herolabs == 'false' and not hero_data['IsDisabled'] and not hero_data['InDevelopment'] and not this_in_herolabs)) then
local is_recommended = hero_data['IsRecommended']
if is_recommended == nil then
is_recommended = false
end
local hero_str = lang_module.get_string(hero_key) .. '|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|name=' .. 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)
return frame:preprocess(ret)
end
return p