Module:HeroData/nav: Difference between revisions

Jump to navigation Jump to search
Undo revision 23580 by Monster Domosed (talk)
Tag: Undo
Auto-detect language from subpage
Line 6: Line 6:
-- for [[Template:Deadlock_Wiki/Heroes]] on home page, i.e. [[Template:Hero card2]]
-- 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 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 sticker_size = frame.args['sticker_size']
    local sticker_size = frame.args['sticker_size']
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 = frame.args['lang_code']
   
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 = {}
    for part in full_page_name:gmatch("[^/]+") do
        table.insert(parts, part)
    end
   
    -- Last part - potential language code
    local last_part = parts[#parts] or ""
   
    -- Check for language codes matching:
    -- 1. Exactly 2 letters (like 'ru'), OR
    -- 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
   
    return "en" -- Default to English
end
-- Turn debug_mode from string to bool, default to false
local lang_code = get_language_from_subpage() -- Get the language code
if debug_mode == nil then
   
debug_mode = false
    -- Turn debug_mode from string to bool, default to false
elseif debug_mode == 'true' then
    if debug_mode == nil then
debug_mode = true
        debug_mode = false
elseif debug_mode == 'false' then
    elseif debug_mode == 'true' then
debug_mode = false
        debug_mode = true
end
    elseif debug_mode == 'false' then
        debug_mode = false
    end


if in_herolabs ~= 'true' and in_herolabs ~= 'false' then
    if in_herolabs ~= 'true' and in_herolabs ~= 'false' then
return 'in_herolabs must be either true or false'
        return 'in_herolabs must be either true or false'
end
    end
   
local subpage = ''
    -- Only add subpage if not English
if lang_code ~= nil and lang_code ~= 'en' then subpage = '/' .. lang_code end
    local subpage_str = ''
    if lang_code ~= 'en' then  
--Iterate heroes
        subpage_str = '/' .. lang_code  
local heroes = {}
    end
for hero_key, hero_data in pairs(heroes_data) do
   
if hero_data["Name"] ~= nil then
    -- Iterate heroes
-- if herolabs is requested, only needs to have herolabs=true
    local heroes = {}
-- otherwise, needs to be not disabled, in development, nd herolabs is nil or false
    for hero_key, hero_data in pairs(heroes_data) do
local this_hero_status = hero_release_module.get_hero_release_status(hero_key)
        if hero_data["Name"] ~= nil then
            -- if herolabs is requested, only needs to have herolabs=true
if this_in_herolabs == nil then this_in_herolabs = false end
            -- 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 ((in_herolabs == 'true' and this_hero_status == 'HeroLabs') or
           
(in_herolabs == 'false' and this_hero_status == 'Released')) then
            if this_in_herolabs == nil then this_in_herolabs = false end
           
local is_recommended = hero_data['IsRecommended']
            if ((in_herolabs == 'true' and this_hero_status == 'HeroLabs') or
if is_recommended == nil then
                (in_herolabs == 'false' and this_hero_status == 'Released')) then
is_recommended = false
               
end
                local is_recommended = hero_data['IsRecommended']
                if is_recommended == nil then
local sub_page_str = ''
                    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 .. '|recommended=' .. tostring(is_recommended)
                local hero_str = '|name=' .. lang_module.get_string(hero_key, nil, 'en') ..  
                              '|link=' .. lang_module.get_string(hero_key, 'en') ..  
table.insert(heroes, hero_str)
                              '|subpage=' .. subpage_str ..  
end
                              '|recommended=' .. tostring(is_recommended)
end
               
end
                table.insert(heroes, hero_str)
            end
--Order list alphabetically
        end
table.sort(heroes) --O(nlogn)
    end
       
--Add each item to output
    -- Order list alphabetically
local ret = ''
    table.sort(heroes) -- O(nlogn)
for index, hero_name in ipairs(heroes) do
   
ret = ret .. '{{Hero card2' .. hero_name
    -- Add each item to output
ret = ret .. '|text_size=' .. text_size
    local ret = ''
ret = ret .. '|herolabs=' .. in_herolabs
    for index, hero_name in ipairs(heroes) do
ret = ret .. '|card_size=' .. card_size
        ret = ret .. '{{Hero card2' .. hero_name
ret = ret .. '|sticker_size=' .. sticker_size
        ret = ret .. '|text_size=' .. text_size
ret = ret .. '|herolabs_text_size=' .. herolabs_text_size
        ret = ret .. '|herolabs=' .. in_herolabs
ret = ret .. '}} '
        ret = ret .. '|card_size=' .. card_size
end
        ret = ret .. '|sticker_size=' .. sticker_size
        ret = ret .. '|herolabs_text_size=' .. herolabs_text_size
--Remove the last space
        ret = ret .. '}} '
ret = string.sub(ret, 1, -(string.len(' '))-1)
    end
   
    -- Remove the last space
if debug_mode then
    ret = string.sub(ret, 1, -(string.len(' '))-1)
return ret
   
else -- evaluate wikitext if not in debug mode
    if debug_mode then
return frame:preprocess(ret)
        return ret
end
    else -- evaluate wikitext if not in debug mode
        return frame:preprocess(ret)
    end
end
end
return p
return p