Module:HeroData/nav: Difference between revisionsGive feedback
Jump to navigation
Jump to search
Gammaton32 (talk | contribs) fixed my last change |
Gammaton32 (talk | contribs) 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'] | ||
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 | ||
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 | ||
-- 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 ..'}} • ' | |||
else | |||
ret = ret '{{HeroIcon='.. hero_object.wikitext | |||
ret = ret ..'}} • ' | |||
end | |||
end | |||
-- Remove the last bullet point | |||
ret = string.sub(ret, 1, -(string.len(' • '))-1) | |||
if debug_mode then | if debug_mode then | ||