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 ~= 'true' and in_herolabs ~= 'false' then | |||
return 'in_herolabs must be either true or false' | |||
return | |||
end | end | ||
-- Only add subpage if not English | |||
local subpage_str = '' | |||
if lang_code ~= 'en' then | |||
subpage_str = '/' .. lang_code | |||
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 | ||
if hero_data["Name"] ~= nil then | |||
if hero_data["Name"] ~= nil | |||
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 | |||
-- ===== FINAL, CORRECT LOGIC START ===== | |||
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 | ||
-- | -- string.find returns nil if the substring is not found. | ||
-- This is our check to see if the translation module failed and returned the key itself. | |||
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 | ||
-- Failure case: The returned string contains the key we looked for. Fall back to the display name. | |||
sort_key = hero_name | sort_key = hero_name | ||
else | else | ||
-- Success case: The returned string is a valid translation (like "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) | |||
table.insert(heroes, {sort_key = sort_key, wikitext = hero_wikitext}) | |||
-- ===== FINAL, CORRECT LOGIC END ===== | |||
table.insert(heroes, | |||
end | end | ||
end | end | ||
end | end | ||
-- | -- Use a custom sort function | ||
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) | ||
-- Add each item to output | |||
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 .. '}} ' | |||
for | |||
end | 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 | ||