Editing Module:HeroData/navGive feedback
Jump to navigation
Jump to search
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
| Latest revision | Your text | ||
| Line 3: | Line 3: | ||
local hero_release_module = require('Module:HeroData/release') | local hero_release_module = require('Module:HeroData/release') | ||
local lang_module = require('Module:Lang') | 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 == nil then | |||
in_herolabs = 'false' | |||
-- | end | ||
if | 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 | end | ||
-- Iterate heroes | |||
local heroes = {} | local heroes = {} | ||
for hero_key, hero_data in pairs(heroes_data) do | 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 | 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) | 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 | if ((in_herolabs == 'true' and this_hero_status == 'HeroLabs') or | ||
(in_herolabs == 'false' and this_hero_status == 'Released')) then | (in_herolabs == 'false' and this_hero_status == 'Released')) then | ||
local is_recommended = hero_data['IsRecommended'] | 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 hero_name = lang_module.get_string(hero_key, nil, 'en') | ||
local sort_key_to_find = hero_key .. '_sort' | local sort_key_to_find = hero_key .. '_sort' | ||
local potential_sort_key = lang_module.get_string(sort_key_to_find, nil, 'en') | local potential_sort_key = lang_module.get_string(sort_key_to_find, nil, 'en') | ||
local sort_key | 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 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 | sort_key = hero_name | ||
else | 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 | sort_key = potential_sort_key | ||
end | end | ||
local hero_wikitext = '|name=' .. hero_name .. | |||
'|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}) | |||
table.insert(heroes, | |||
end | end | ||
end | end | ||
end | end | ||
-- Sort heroes | -- Sort the list of heroes alphabetically based on their assigned sort_key. | ||
table.sort(heroes, function(a, b) | table.sort(heroes, function(a, b) | ||
return a.sort_key < b.sort_key | return a.sort_key < b.sort_key | ||
end) | end) | ||
-- Build the final wikitext output from the now-sorted table. | |||
local ret = '' | |||
for index, hero_object in ipairs(heroes) do | |||
ret = ret .. '{{Hero card2' .. hero_object.wikitext | |||
-- | ret = ret .. '|text_size=' .. text_size | ||
ret = ret .. '|herolabs=' .. in_herolabs | |||
local | 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 | if debug_mode then | ||
return ret | return ret | ||
else | else -- evaluate wikitext if not in debug mode | ||
return frame:preprocess(ret) | return frame:preprocess(ret) | ||
end | end | ||
| Line 94: | Line 111: | ||
-- for [[Template:Roster]] | -- for [[Template:Roster]] | ||
function p.get_hero_roster(frame) | function p.get_hero_roster(frame) | ||
local | |||
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 | end | ||
local ret = | -- 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 | if debug_mode then | ||
return ret | return ret | ||
else | else -- evaluate wikitext if not in debug mode | ||
return frame:preprocess(ret) | return frame:preprocess(ret) | ||
end | end | ||
| Line 115: | Line 203: | ||
-- for [[Template:Quotes Navbox]] etc. | -- for [[Template:Quotes Navbox]] etc. | ||
p.get_hero_bulletpoints = function(frame) | 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 | end | ||
if in_herolabs == nil then | |||
in_herolabs = 'false' | |||
if | |||
end | end | ||
if in_herolabs ~= 'true' and in_herolabs ~= 'false' then | |||
return 'in_herolabs must be either true or false' | |||
end | end | ||
local | -- Only add subpage if not English | ||
local subpage_str = '' | |||
if | if lang_code ~= 'en' then | ||
subpage_str = '/' .. lang_code | |||
end | end | ||
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 | end | ||
local ret = | -- 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 | ||
return ret | return ret | ||
else | else -- evaluate wikitext if not in debug mode | ||
return frame:preprocess(ret) | return frame:preprocess(ret) | ||
end | end | ||