Module:SummonIconTable

From Liquipedia Wildcard Wiki

Overview[edit]

This module creates a responsive grid display of summons icons with automatic categorization into their houses.
It pulls data from Liquipedia's database and applies theme-appropriate styling.
By default this module show all heroes available.


You can either use invoke or simple template. For invoke use:

  • {{#invoke:Lua|invoke|module=SummonIconTable|fn=display}} (All Heroes)
  • {{#invoke:Lua|invoke|module=SummonIconTable|house=Malus|fn=display}}
  • {{#invoke:Lua|invoke|module=SummonIconTable|house=Lubabub|fn=display}}
  • {{#invoke:Lua|invoke|module=SummonIconTable|house=Chronos|fn=display}}

Parameters[edit]

|house= (optional)
Malus: Shows only summons within Malus house (cinnabar-theme-dark-bg)
Lubabub: Shows only summons within Lubabub house (forest-theme-dark-bg)
Chronos: Shows only summons within Chronos house (gold-bg-alt)

Usage Examples[edit]

  • All Summons
{{SummonIconTable}}
All Summons (268)
Aloe
Aloe Cleanse
Aloe Immobile
Aloe Mitigation
Aloe Overheal
Aloe Poison
Badaboom
Badaboom LastStand
Badaboom Leftover
Badaboom Overtime
Badaboom Rebirth
Badaboom Squad
Beakit
Beakit Chain
Beakit LastStand
Beakit Mitiation
Blitzbois
Blitzbois Fire
Blitzbois OnCast
Blitzbois Rampage
Broc
Broc Cleanse
Broc LastStand
Broc Overclock
Broc Poison
Broc Rampage
Broc Regeneration
Buckshot
Buckshot Aura
Buckshot LastStand
Buckshot LifeLink
Buckshot Overclock
Buckshot Overheal
Buckshot Overtime
Buckshot Poison
Buckshot Squad
Burnout
Burnout Chain
Burnout Evolved
Burnout Fire
Burnout Overtime
Burnout Squad
Cacticrue
Cacticrue LastStand
Cacticrue Poison
Cacticrue Rebirth
Cacticrue Regeneration
Cacticrue Taunt
Cactiking
Cactiking Evolved
Cactiking Immobile
Cactiking Leftover
Cactiking Poison
Cactiking Squad
Cactiking Taunt
Chonk
Chonk Aura
Chonk Immobile
Chonk Reflect
Chronodrop
Chronodrop Immobile
Chronodrop LastStand
Chronodrop Overclock
D.F.A.
D.F.A. Damage
D.F.A. Enraged
D.F.A. Evolved
D.F.A. Fire
D.F.A. Squad
Deadeye
Deadeye Aura
Deadeye Chain
Deadeye Hunter
Deadeye LastStand
Deadeye Partner
Deadeye TimeDilation
Deadeye Warp
Fendor
Fendor Aura
Fendor Evolved
Fendor Immobile
Fendor LastStand
Fendor Mitigation
Fendor Reflect
Flingshot
Flingshot Damage
Flingshot Evolved
Flingshot Mitigation
Flingshot Overclock
Floraphant
Floraphant Aura
Floraphant Damaged
Floraphant LastStand
Floraphant Squad
Floraphant Taunt
Furble
Furble Knockback
Furble OnCast
Furble Squad
Furble TimeDilation
Gorrit
Gorrit Aura
Gorrit Evolved
Gorrit Knockback
Gorrit Rampage
Gorrit Regeneration
Gorrit Taunt
Grumph
Grumph Enraged
Grumph Fire
Grumph Frenzy
Grumph Immobile
Grumph LastStand
Heartburn
Heartburn Chain
Heartburn Evolved
Heartburn Fire
Heartburn LastStand
Hornelius
Hornelius Evolved
Hornelius Frenzy
Hornelius Hunter
Hornelius Immobile
Hornelius OnCast
Infernus
Infernus Blitz
Infernus Evolved
Infernus LastStand
Infernus OnCast
Infernus Push
Infernus Rampage
Janz
Janz Chain
Janz Damaged
Janz Overclock
Janz Warp
Lavadrop
Lavadrop Blitz
Lavadrop LastStand
Lavadrop Leftover
Lumph
Lumph Cleanse
Lumph LastStand
Lumph Poison
Lumph Reflect
Lumph Regeneration
Magmalisk
Magmalisk Evolved
Magmalisk Frenzy
Magmalisk OnCast
Magmalisk Partner
Magmalisk Rampage
Magmalisk Rebirth
Pocus
Pocus Knockback
Pocus Lifelink
Pocus Rampage
Pocus Taunt
Punks
Punks LastStand
Punks Overclock
Punks Push
Punks Squad
Punks Taunt
Pyrokeet
Pyrokeet Enraged
Pyrokeet Fire
Pyrokeet LastStand
Pyrokeet Rampage
Pyrokeet Squad
RB-IT
RB-IT Evolved
RB-IT OnCast
RB-IT Warp
Razorpaw
Razorpaw Damaged
Razorpaw Frenzy
Razorpaw Hunter
Razorpaw OnCast
Razorpaw TimeDilation
Rekkit
Rekkit Enraged
Rekkit Frenzy
Rekkit LastStand
Rekkit OnCast
Rekkit Overclock
Rekkit Rampage
Sembler
Sembler Damage
Sembler Evolved
Sembler Mitigation
Sembler OnCast
Sembler Partner
Sembler Squad
Shellshock
Shellshock Evolved
Shellshock Immobile
Shellshock Rampage
Shellshock TimeDilation
Shooticrue
Shooticrue Enraged
Shooticrue LastStand
Shooticrue Leftover
Shooticrue OnCast
Shooticrue Overclock
Shooticrue TimeDilation
Shortfuse
Shortfuze Chain
Shortfuze Evolved
Shortfuze Fire
Shortfuze LastStand
Shortfuze Rampage
Skye
Skye Aura
Skye Cleanse
Skye Evolved
Skye OnCast
Skye Overclocked
Slowclaw
Slowclaw Frenzy
Slowclaw Poison
Slowclaw Rampage
Slowclaw Reflect
Spord
Spord Enraged
Spord LastStand
Spord Leftover
Spord OnCast
Spord Overtime
Spord Poison
Spord Rampage
Spord Squad
Spord Taunt
TD-PL
TD-PL Blitz
TD-PL Damaged
TD-PL Leftover
TD-PL OnCast
TD-PL Squad
Tailblazer
Tailblazer Aura
Tailblazer Lifelink
Tailblazer Mitigation
Tailblazer Overtime
Tailblazer Push
Vitadrop
Vitadrop Chain
Vitadrop Cleanse
Vitadrop LastStand
Vitadrop Lifelink
Vitadrop Regeneration
Volcrab
Volcrab Blitz
Volcrab Enraged
Volcrab Immobile
Volcrab LastStand
Volcrab Squad
Wotchy
Wotchy Damage
Wotchy Damaged
Wotchy Evolved
Wotchy Mitigation
Wotchy Partner
Wotchy Rampage
Zip-Zap
Zip-Zap Lifelink
Zip-Zap Overtime
Zip-Zap Squad
  • Only Summons in Malus House
{{SummonIconTable|house=Malus}}
 Malus (15)
Badaboom
Blitzbois
Burnout
D.F.A.
Grumph
Heartburn
Infernus
Lavadrop
Magmalisk
Punks
Pyrokeet
Rekkit
Shortfuse
Tailblazer
Volcrab

Copy/Paste[edit]

All Summons
{{SummonIconTable}}
Categorized Champions
{{SummonIconTable|house=Malus}}
{{SummonIconTable|house=Chronos}}
{{SummonIconTable|house=Lubabub}}


For more information on how to contribute, please refer to our Help:Edit an Article.



local Class = require('Module:Class')
local CharacterIcon = require('Module:CharacterIcon')
local Lua = require('Module:Lua')

local HtmlWidgets = Lua.import('Module:Widget/Html/All')
local Div = HtmlWidgets.Div

local SummonIconTable = {}

-- Constants for house themes and icons
local DEFAULT_CATEGORY = {theme = 'gray-theme-dark-bg', text = 'All Summons'}
local SUMMON_HOUSE = {
	['malus'] = {
		theme = 'wildcard-malus-theme',
		text = 'Malus',
		icon = 'File:Wildcard_gameasset_Malus_Faction_Icon_White.png'
	},
	['chronos'] = {
		theme = 'wildcard-chronos-theme',
		text = 'Chronos',
		icon = 'File:Wildcard_gameasset_Chronos_Faction_Icon_White.png'
	},
	['lubabub'] = {
		theme = 'wildcard-lubabub-theme',
		text = 'Lubabub',
		icon = 'File:Wildcard_gameasset_Lubabub_Faction_Icon_White.png'
	}
}

---Main function to display a table of summon icons based on provided arguments
---@param args table|nil
---@return Html
function SummonIconTable.display(args)
	args = args or {}
	-- Build conditions for the database query based on the provided arguments
	local conditions = SummonIconTable._buildConditions(args)
	-- Fetch summons from the database using the built conditions
	local summons = mw.ext.LiquipediaDB.lpdb('datapoint', {
		conditions = conditions,
		order = 'name asc',
		limit = 5000
	})

	-- Normalize results to ensure it's always a table of summons, even for single or invalid results
	if type(summons) == 'table' and summons.name then
		summons = {summons}
	elseif type(summons) ~= 'table' then
		summons = {}
	end

	local count = #summons
	-- Get category data (house or default) based on the arguments
	local categoryData = SummonIconTable._getCategoryData(args)
	-- Create and return the HTML structure with a header and body containing summon icons
	return Div{
		classes = {'white-text'},
		css = {['text-align'] = 'center', ['font-weight'] = 'bold'},
		children = {
			SummonIconTable._createHeader(categoryData, count),
			SummonIconTable._createBody(summons)
		}
	}
end

---Retrieve category data for the specified house, or use default if no house is provided
---@param args table
---@return table
function SummonIconTable._getCategoryData(args)
	local house = args.house and string.lower(args.house) or nil
	return SUMMON_HOUSE[house] or DEFAULT_CATEGORY
end

---Create the header section of the table, including house icon and text with summon count
---@param categoryData table
---@param count integer
---@return Html
function SummonIconTable._createHeader(categoryData, count)
	local headerText = categoryData.text
	local headerChildren = {}

	-- Add the house icon to the header if available
	if categoryData.icon then
		table.insert(headerChildren,
			'[[' .. categoryData.icon .. '|30x30px|link=]] '
		)
	end

	-- Append the formatted text with the total count of summons
	table.insert(headerChildren, string.format('%s (%d)', headerText, count))

	return Div{
		classes = {categoryData.theme},
		css = {padding = '5px 10px', ['font-size'] = '18px', ['border-radius'] = '0.5rem'},
		children = headerChildren
	}
end

---Create the body section of the table containing the summon icons
---@param summons table[]
---@return Html
function SummonIconTable._createBody(summons)
	return Div{
		css = {
			gap = '8px',
			padding = '8px',
			display = 'flex',
			['justify-content'] = 'center',
			['align-items'] = 'center',
			['flex-wrap'] = 'wrap'
		},
		children = SummonIconTable._generateSummonIcons(summons)
	}
end

---Generate a table of individual summon icon elements for display
---@param summons table[]
---@return table
function SummonIconTable._generateSummonIcons(summons)
	local icons = {}
	for _, entry in ipairs(summons) do
		if entry.name then
			-- Create a container Div for each summon icon with styling and zoom capability
			table.insert(icons, Div{
				classes = {'zoom-container'},
				css = {
					display = 'inline-block',
					padding = '2px',
					overflow = 'hidden',
					['vertical-align'] = 'middle',
				},
				children = {
					CharacterIcon.Icon{
						character = entry.name,
						size = 'x125px'
					}
				}
			})
		end
	end
	return icons
end

---Build the conditions string for the database query based on arguments
---@param args table
---@return string
function SummonIconTable._buildConditions(args)
	-- Initialize base conditions to filter for summons with names
	local conditions = {
		'[[type::Summon]]',
		'[[name::!]]'
	}
	-- Add house-specific condition if a house is provided in the arguments
	if args.house then
		table.insert(conditions, '[[extradata_house::' .. args.house .. ']]')
	end
	-- Concatenate conditions with ' AND ' to form the final query string
	return table.concat(conditions, ' AND ')
end

return Class.export(SummonIconTable)