Module:Tier List
Jump to navigation
Jump to search
Module:Tier_List
is used to generate tier lists directly within the wiki using HTML, and the existing character labels.
Usage
A tier list requires that arguments be present in order.
- The abbreviation for the game (IE: MBTL, MBAACC, etc)
- All of the tiers, ordered from top to bottom
Within a given tier, you must define the label for that tier (the letter that appears inside of the colored square) followed by a semicolon character (';').
Short Names in Labels
The tier list will attempt to find the appropriate icon and link for a given character. If you choose not to use the full name of a character, you must set up a necessary redirect from the short name to the full name. This applies to both the icon file and the character page itself.
For example: We want to show "Sol" on our tier list instead of "Sol Badguy". We must create 2 redirects.
- Redirect from
[[File:GGACR_Sol_Icon.png]]
to[[File:GGACR_Sol_Badguy_Icon.png]]
- Redirect from
[[GGACR/Sol]]
to[[GGACR/Sol_Badguy]]
Example
{{#invoke:Tier List|drawTierList |GGACR |S;Testament,Baiken,Zappa,Dizzy |A;Chipp,Axl,Faust,Millia,Jam |B;A.B.A,Potemkin,Sol,May |C;Kliff,Order-Sol,Justice,Slayer,Anji,Johnny |D;Robo-Ky,Eddie,I-No,Ky,Venom,Bridget }}
--[[
Module based on one by Tarkus Lee from Dustloop Wiki
--]]
require "math"
require "table"
local p = {}
function p.drawTierList(frame)
local wikitext = "<div class=\"tierList\">" -- initialize the wikitext with the container for the list
local GAME = frame.args[1]:gsub("%s+", "") -- capture the target game from the first arg
local GAMEFULL = frame.args[2]:gsub("%s+", "") -- capture the target game's full name from the second arg
local character = "default"
local numberOfTiers = tablelength(frame.args)
local colors = {'ff7f7f', 'ffbf7f', 'ffdf7f', 'ffff7f', 'bfff7f', '7fff7f', '7fffff', '7fbfff', '7f7fff', 'ff7fff', 'bf7fbf', 'cfcfcf', '858585', '3b3b3b'} -- i copied these from tiermaker
for index=3,numberOfTiers do
local currentTier = trim(frame.args[index]) -- use the argument at the current index as current tier data
local tierLabel = string.match(currentTier, '(.*);') -- capture tier label from all characters before first ';'
local color = colors[math.min(index-2, table.getn(colors))]
currentTier = string.match(currentTier, ";(.*)") -- remove the tier label from the current tier data
--Inject tier label
if index == 3 then -- first tier should have a rounded top corner
wikitext = wikitext .. "<div class=\"tierHeader\" style=\"background-color: #" .. color .. "; border-top-left-radius: 4px;\">" .. tierLabel .. "</div>"
elseif index == numberOfTiers then -- final tier has a rounded bottom corner
wikitext = wikitext .. "<div class=\"tierHeader\" style=\"background-color: #" .. color .. "; border-bottom-left-radius: 4px;\">" .. tierLabel .. "</div>"
else -- middle tiers are normal
wikitext = wikitext .. "<div class=\"tierHeader\" style=\"background-color: #" .. color .. ";\">" .. tierLabel .. "</div>"
end
-- open a new tier container
if index ~= numberOfTiers then
wikitext = wikitext .. "<div class=\"tierGroup tierUnderline\">"
else -- final tier does not have an underline
wikitext = wikitext .. "<div class=\"tierGroup\">"
end
-- iterate over tokens in current tier, separated by ',' character
for token in string.gmatch(currentTier, '([^,]+)') do
character = token
-- inject character label
local characterLabel = frame:expandTemplate{ title = 'Character Label', args = { GAME, GAMEFULL, character, '32px' } }
wikitext = wikitext .. "<div>" .. characterLabel .. "</div>"
end
-- close the current tier container
wikitext = wikitext .. "</div>"
end
-- close the entire tier list
wikitext = wikitext .. "</div>"
return wikitext
end
-- Return the size of a table by iterating over it and counting
function tablelength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
function trim(s)
return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end
return p