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) | 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 text_size = frame.args['text_size'] | ||
local card_size = frame.args['card_size'] | local card_size = frame.args['card_size'] | ||
local | local sticker_size = frame.args['sticker_size'] | ||
local debug_mode = frame.args['debug_mode'] | local herolabs_text_size = frame.args['herolabs_text_size'] | ||
local debug_mode = frame.args['debug_mode'] | |||
local | |||
local function get_language_from_subpage() | |||
-- Get the full page path (including subpages) | |||
local full_page_name = mw.title.getCurrentTitle().fullText | |||
-- Split path by slashes | |||
local parts = {} | local parts = {} | ||
for part in full_page_name:gmatch("[^/]+") do | |||
for | table.insert(parts, part) | ||
table.insert(parts, | |||
end | end | ||
local | -- Last part - potential language code | ||
local last_part = parts[#parts] or "" | |||
if | |||
-- Check for language codes matching: | |||
-- 1. Exactly 2 letters (like 'ru'), OR | |||
return | -- 2. 2 letters + hyphen + any characters (like 'zh-hans') | ||
if last_part:match("^[a-z][a-z]$") or last_part:match("^[a-z][a-z]%-[%w]+$") then | |||
-- Convert to lowercase and replace _ with - | |||
return last_part:lower():gsub("_", "-") | |||
end | end | ||
return "en" -- Default to English | |||
end | end | ||
local lang_code = get_language_from_subpage() -- 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' | |||
end | end | ||
local | -- Only add subpage if not English | ||
local subpage_str = '' | |||
if | if lang_code ~= 'en' then | ||
subpage_str = '/' .. lang_code | |||
end | end | ||
-- Iterate heroes | |||
-- | local heroes = {} | ||
for hero_key, hero_data in pairs(heroes_data) do | |||
if hero_data["Name"] ~= nil then | |||
-- if herolabs is requested, only needs to have herolabs=true | |||
-- otherwise, needs to be not disabled, in development, nd herolabs is nil or false | |||
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 | |||
local hero_str = '|name=' .. lang_module.get_string(hero_key, nil, 'en') .. | |||
'|link=' .. lang_module.get_string(hero_key, 'en') .. | |||
'|subpage=' .. subpage_str .. | |||
'|recommended=' .. tostring(is_recommended) | |||
table.insert(heroes, hero_str) | |||
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 card2' .. hero_name | |||
ret = ret .. '|text_size=' .. text_size | |||
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 .. '}} ' | |||
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 | ||
end | end | ||
return p | return p | ||