Module:HeroData/nav: Difference between revisions

From Deadlock Wiki
Jump to navigation Jump to search
Sur (talk | contribs)
m concat card to ret earlier
Sur (talk | contribs)
m now sorts the heroes alphabetically
Line 10: Line 10:
end
end
local ret = ''
local heroes = {}
for hero_key, hero_data in pairs(heroes_data) do
for hero_key, hero_data in pairs(heroes_data) do
local card
local card = ''
if hero_data["Name"] ~= nil and hero_data["IsDisabled"] == false then
if hero_data["Name"] ~= nil and hero_data["IsDisabled"] == false then
if (hero_data["InDevelopment"] == false and current_or_upcoming == 'Current' or hero_data["InDevelopment"] == true and current_or_upcoming == 'Upcoming') then
if (hero_data["InDevelopment"] == false and current_or_upcoming == 'Current' or hero_data["InDevelopment"] == true and current_or_upcoming == 'Upcoming') then
card = '{{Hero Card Nav|Hero=' .. lang_module.get_string(hero_key) .. '}}'
table.insert(heroes, lang_module.get_string(hero_key))
ret = ret .. card .. ' '
end
end
end
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 Card Nav|Hero=' .. hero_name .. '}} '
end
--Remove the last space
ret = string.sub(ret, 1, -(string.len(' '))-1)
return frame:preprocess(ret)
return frame:preprocess(ret)
end
end


return p
return p

Revision as of 02:52, 16 October 2024

Overview

Generates hero navigation cards

Functions

get_hero_nav_cards

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
}}

First parameter must be Current or Upcoming


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
}}

First parameter must be Current or Upcoming

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:Hero Navbox]], i.e. {{Hero Card Nav|Hero=Abrams}} {{Hero Card Nav|Hero=Bebop}}
function p.get_hero_nav_cards(frame)
	local current_or_upcoming = frame.args[1]
	if current_or_upcoming ~= 'Current' and current_or_upcoming ~= 'Upcoming' then
		return 'First parameter must be Current or Upcoming'
	end
	
	local heroes = {}
	for hero_key, hero_data in pairs(heroes_data) do
		local card = ''
		
		if hero_data["Name"] ~= nil and hero_data["IsDisabled"] == false then
			if (hero_data["InDevelopment"] == false and current_or_upcoming == 'Current' or hero_data["InDevelopment"] == true and current_or_upcoming == 'Upcoming') then
				table.insert(heroes, lang_module.get_string(hero_key))
			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 Card Nav|Hero=' .. hero_name .. '}} '
	end
	
	--Remove the last space
	ret = string.sub(ret, 1, -(string.len(' '))-1)
	
	return frame:preprocess(ret)
end

return p