Editing Module:HeroData/navGive feedback
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 | -- if herolabs is requested, only needs to have herolabs=true | ||
-- otherwise, needs to be not disabled, in development, and herolabs is nil or false | |||
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 and store an object instead of a string ===== | |||
local hero_name = lang_module.get_string(hero_key, nil, 'en') | local hero_name = lang_module.get_string(hero_key, nil, 'en') | ||
local | local sort_key = hero_name | ||
-- If the name starts with "The ", make the sort key the rest of the string | |||
if string.sub(sort_key, 1, 4) == "The " then | |||
-- | sort_key = string.sub(sort_key, 5) -- "Doorman" | ||
if string. | |||
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}) | |||
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 = '' | |||
-- ===== Access the wikitext property of the hero object ===== | |||
for index, hero_object in ipairs(heroes) do | |||
-- | ret = ret .. '{{Hero card2' .. hero_object.wikitext | ||
ret = ret .. '|text_size=' .. text_size | |||
local | 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 .. '}} ' | |||
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 | ||