Module:HeroData/nav: Difference between revisions

From The Deadlock Wiki
Jump to navigation Jump to search
Auto-detect language from subpage
Undo revision 23580 by Monster Domosed (talk)
Tag: Undo
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']
    -- Get current page title and extract language code
    local current_title = mw.title.getCurrentTitle()
-- Turn debug_mode from string to bool, default to false
    local subpage = current_title.subpageText
if debug_mode == nil then
    local lang_code = 'en' -- default to English
debug_mode = false
   
elseif debug_mode == 'true' then
    -- If there's a subpage and it's not empty and not "Sandbox", use it as language code
debug_mode = true
    if subpage and subpage ~= '' and subpage ~= 'Sandbox' then
elseif debug_mode == 'false' then
        lang_code = subpage
debug_mode = false
    end
end
   
    -- 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
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
   
    -- Only add subpage if not English
local subpage = ''
    local subpage_str = ''
if lang_code ~= nil and lang_code ~= 'en' then subpage = '/' .. lang_code end
    if lang_code ~= 'en' then  
        subpage_str = '/' .. lang_code  
--Iterate heroes
    end
local heroes = {}
   
for hero_key, hero_data in pairs(heroes_data) do
    -- Iterate heroes
if hero_data["Name"] ~= nil then
    local heroes = {}
-- if herolabs is requested, only needs to have herolabs=true
    for hero_key, hero_data in pairs(heroes_data) do
-- otherwise, needs to be not disabled, in development, nd herolabs is nil or false
        if hero_data["Name"] ~= nil then
local this_hero_status = hero_release_module.get_hero_release_status(hero_key)
            -- if herolabs is requested, only needs to have herolabs=true
            -- otherwise, needs to be not disabled, in development, nd herolabs is nil or false
if this_in_herolabs == nil then this_in_herolabs = false end
            local this_hero_status = hero_release_module.get_hero_release_status(hero_key)
           
if ((in_herolabs == 'true' and this_hero_status == 'HeroLabs') or
            if this_in_herolabs == nil then this_in_herolabs = false end
(in_herolabs == 'false' and this_hero_status == 'Released')) then
           
            if ((in_herolabs == 'true' and this_hero_status == 'HeroLabs') or
local is_recommended = hero_data['IsRecommended']
                (in_herolabs == 'false' and this_hero_status == 'Released')) then
if is_recommended == nil then
               
is_recommended = false
                local is_recommended = hero_data['IsRecommended']
end
                if is_recommended == nil then
                    is_recommended = false
local sub_page_str = ''
                end
               
                local hero_str = '|name=' .. lang_module.get_string(hero_key, nil, 'en') ..  
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)
                              '|link=' .. lang_module.get_string(hero_key, 'en') ..  
                              '|subpage=' .. subpage_str ..  
table.insert(heroes, hero_str)
                              '|recommended=' .. tostring(is_recommended)
end
               
end
                table.insert(heroes, hero_str)
end
            end
        end
--Order list alphabetically
    end
table.sort(heroes) --O(nlogn)
       
    -- Order list alphabetically
--Add each item to output
    table.sort(heroes) -- O(nlogn)
local ret = ''
   
for index, hero_name in ipairs(heroes) do
    -- Add each item to output
ret = ret .. '{{Hero card2' .. hero_name
    local ret = ''
ret = ret .. '|text_size=' .. text_size
    for index, hero_name in ipairs(heroes) do
ret = ret .. '|herolabs=' .. in_herolabs
        ret = ret .. '{{Hero card2' .. hero_name
ret = ret .. '|card_size=' .. card_size
        ret = ret .. '|text_size=' .. text_size
ret = ret .. '|sticker_size=' .. sticker_size
        ret = ret .. '|herolabs=' .. in_herolabs
ret = ret .. '|herolabs_text_size=' .. herolabs_text_size
        ret = ret .. '|card_size=' .. card_size
ret = ret .. '}} '
        ret = ret .. '|sticker_size=' .. sticker_size
end
        ret = ret .. '|herolabs_text_size=' .. herolabs_text_size
        ret = ret .. '}} '
--Remove the last space
    end
ret = string.sub(ret, 1, -(string.len(' '))-1)
   
    -- Remove the last space
    ret = string.sub(ret, 1, -(string.len(' '))-1)
if debug_mode then
   
return ret
    if debug_mode then
else -- evaluate wikitext if not in debug mode
        return ret
return frame:preprocess(ret)
    else -- evaluate wikitext if not in debug mode
end
        return frame:preprocess(ret)
    end
end
end
return p
return p

Revision as of 09:54, 31 March 2025

Overview

Generates hero navigation cards

Functions

get_hero_nav_cards

For Template:Hero Navbox on Heroes, individual hero pages like Abrams, and the home page.

Examples

First with debug_mode on, to help visualize what the output's source looks like.

{{#invoke:HeroData/nav|get_hero_nav_cards
|text_size=13
|card_size=88
|in_herolabs=false
|debug_mode=true
}}

Lua error at line 70: attempt to concatenate local 'sticker_size' (a nil value).

Now with debug_mode defaulted to false (off) to see actual visual output.

{{#invoke:HeroData/nav|get_hero_nav_cards
|text_size=13
|card_size=88
|in_herolabs=false
}}

Lua error at line 70: attempt to concatenate local 'sticker_size' (a nil value).

Parameters

  • text_size - Font size of the hero name
  • card_size - Size of the hero card
  • in_herolabs - Get hero labs heroes (there are none at the moment)
  • debug_mode - (OPTIONAL) Defaults to false. With true, the output is raw wikitext source that isn't processed, allowing to see more clearly what is ran.

debug_mode is the only optional parameter. All other parameters are required. Template:Hero card2 utilizes this with some default values, see there for suggested values.

get_hero_roster

For Template:Roster on Heroes, generate a list using Template:HeroRosterCard.

get_hero_bulletpoints

For navboxes such as Template:Quotes Navbox, generate a bulletpoint list of heroes.

Add the name of a subpage to link to specific subpages. It will still display only the hero name but link to the subpage instead.

Add variable "no_redlinks=true" to hide red links (non-existent pages).

Examples

{{#invoke:HeroData/nav|get_hero_bulletpoints}}

Script error: The function "get_hero_bulletpoints" does not exist.

To link to "/Movement" subpages:

{{#invoke:HeroData/nav|get_hero_bulletpoints|Movement}}

Script error: The function "get_hero_bulletpoints" does not exist.

Hide redlinks:

{{#invoke:HeroData/nav|get_hero_bulletpoints|Movement|no_redlinks=true}}

Script error: The function "get_hero_bulletpoints" does not exist.


local p = {}
local heroes_data = mw.loadJsonData("Data:HeroData.json")
local hero_release_module = require('Module:HeroData/release')
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 = frame.args['lang_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
	
	local subpage = ''
	if lang_code ~= nil and lang_code ~= 'en' then subpage = '/' .. lang_code 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 sub_page_str = ''
				
				
				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)
				
				table.insert(heroes, hero_str)
			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
	
	--Remove the last space
	ret = string.sub(ret, 1, -(string.len(' '))-1)
	
	
	if debug_mode then
		return ret
	else -- evaluate wikitext if not in debug mode
		return frame:preprocess(ret)
	end
end
return p