Module:RaceData: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
mNo edit summary |
||
| (7 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
-- Function to get race info | local p = {} | ||
local categoryColors = { | |||
["Standard"] = "#4CAF50", | |||
["Elven"] = "#9C27B0", | |||
["Minx"] = "#FF9800", | |||
["Feline"] = "#795548", | |||
["Dwarven"] = "#607D8B", | |||
["Banished"] = "#F44336", | |||
["Demonic"] = "#9C27B0", | |||
["Aquatic"] = "#2196F3", | |||
["Hybrid"] = "#FF5722", | |||
} | |||
local raceData = { | |||
["Banished (Frog)"] = { | |||
displayName = "Banished (Frog)", | |||
category = "Banished", | |||
subrace = "Frog", | |||
color = "#F44336", | |||
description = "Frog-like banished creatures with amphibious abilities." | |||
}, | |||
["Human"] = { | |||
displayName = "Human", | |||
category = "Standard", | |||
color = "#4CAF50", | |||
description = "Standard human race with versatile capabilities." | |||
}, | |||
["Banished (Armor Spirit)"] = { | |||
displayName = "Banished (Armor Spirit)", | |||
category = "Banished", | |||
subrace = "Armor Spirit", | |||
color = "#F44336", | |||
description = "Spiritual beings bound to armor, cast out from their realm." | |||
}, | |||
["Minx (Dragon-kin)"] = { | |||
displayName = "Minx (Dragon-kin)", | |||
category = "Minx", | |||
subrace = "Dragon-kin", | |||
color = "#FF9800", | |||
description = "Dragon-blooded minx with draconic features." | |||
}, | |||
["Mortal"] = { | |||
displayName = "Mortal", | |||
category = "Standard", | |||
color = "#4CAF50", | |||
description = "Mortal beings with finite lifespans and diverse backgrounds." | |||
}, | |||
["Minx"] = { | |||
displayName = "Minx", | |||
category = "Minx", | |||
subrace = "Base", | |||
color = "#FF9800", | |||
description = "Base minx race with feline characteristics." | |||
}, | |||
["Elf"] = { | |||
displayName = "Elf", | |||
category = "Elven", | |||
color = "#9C27B0", | |||
description = "Elegant, long-lived beings with affinity for nature and magic." | |||
}, | |||
["Banished (Giant)"] = { | |||
displayName = "Banished (Giant)", | |||
category = "Banished", | |||
subrace = "Giant", | |||
color = "#F44336", | |||
description = "Gigantic banished beings with immense strength." | |||
}, | |||
["Minx (Tiger)"] = { | |||
displayName = "Minx (Tiger)", | |||
category = "Minx", | |||
subrace = "Tiger", | |||
color = "#FF9800", | |||
description = "Tiger-striped minx with predatory instincts." | |||
}, | |||
["Minx (Moon Cat)"] = { | |||
displayName = "Minx (Moon Cat)", | |||
category = "Minx", | |||
subrace = "Moon Cat", | |||
color = "#FF9800", | |||
description = "Lunar-aligned minx with mystical abilities." | |||
}, | |||
["Minx-Giant"] = { | |||
displayName = "Minx-Giant", | |||
category = "Hybrid", | |||
subrace = "Minx-Giant", | |||
color = "#FF5722", | |||
description = "Hybrid of Minx and Giant characteristics." | |||
}, | |||
["Mortal/Vampire"] = { | |||
displayName = "Mortal/Vampire", | |||
category = "Hybrid", | |||
subrace = "Mortal-Vampire", | |||
color = "#FF5722", | |||
description = "Hybrid beings with both mortal and vampiric traits." | |||
}, | |||
["Fox Minx"] = { | |||
displayName = "Fox Minx", | |||
category = "Minx", | |||
subrace = "Fox", | |||
color = "#FF9800", | |||
description = "Fox-like minx with cunning and agility." | |||
}, | |||
["Gothic Demon"] = { | |||
displayName = "Gothic Demon", | |||
category = "Demonic", | |||
subrace = "Gothic", | |||
color = "#9C27B0", | |||
description = "Dark, gothic-themed demonic beings." | |||
}, | |||
["Felinyan"] = { | |||
displayName = "Felinyan", | |||
category = "Feline", | |||
color = "#795548", | |||
description = "Feline humanoids with graceful movements." | |||
}, | |||
["Dwarf"] = { | |||
displayName = "Dwarf", | |||
category = "Dwarven", | |||
color = "#607D8B", | |||
description = "Stout, sturdy beings skilled in craftsmanship." | |||
}, | |||
["Banished"] = { | |||
displayName = "Banished", | |||
category = "Banished", | |||
color = "#F44336", | |||
description = "Beings cast out from their original realms." | |||
}, | |||
["Demonkind"] = { | |||
displayName = "Demonkind", | |||
category = "Demonic", | |||
color = "#9C27B0", | |||
description = "Demonic beings with infernal powers." | |||
}, | |||
["Siren"] = { | |||
displayName = "Siren", | |||
category = "Aquatic", | |||
subrace = "Moon Priestess", | |||
color = "#2196F3", | |||
description = "Aquatic beings with enchanting voices and lunar connections." | |||
} | |||
} | |||
-- Function to get race info (for Template:RaceInfo) | |||
function p.getRaceInfo(frame) | function p.getRaceInfo(frame) | ||
local raceName = frame.args[1] or mw.text.trim(frame:getParent().args[1] or "") | local raceName = frame.args[1] or mw.text.trim(frame:getParent().args[1] or "") | ||
| Line 14: | Line 175: | ||
local color = race.color or categoryColors[race.category] or "#666666" | local color = race.color or categoryColors[race.category] or "#666666" | ||
local | local pageName = race.displayName .. " (Race)" | ||
local | |||
-- Build tooltip text | |||
local tooltipText = "<strong>" .. race.displayName .. "</strong>" | |||
tooltipText = tooltipText .. "<br><small>Category: " .. race.category .. "</small>" | |||
if race.subrace then | |||
tooltipText = tooltipText .. "<br><small>Subrace: " .. race.subrace .. "</small>" | |||
end | |||
if race.description then | |||
tooltipText = tooltipText .. "<br><br>" .. race.description | |||
end | |||
tooltipText = tooltipText .. '<br><br><small>Click for full race page →</small>' | |||
-- Create the tooltip container with proper MediaWiki link | |||
local output = '<span class="race-tooltip-container">' | |||
output = output .. '[[' .. pageName .. '|<span class="race-link" style="color: ' .. color .. ';">' .. race.displayName .. '</span>]]' | |||
output = output .. '<div class="race-tooltip">' .. tooltipText .. '</div>' | |||
output = output .. '</span>' | |||
-- Add categories | |||
output = output .. '[[Category:' .. race.category .. ' Characters]]' | |||
output = output .. '[[Category:' .. race.displayName .. ' Characters]]' | |||
local | return output | ||
end | |||
-- Function to get race infobox for race pages | |||
function p.getRaceInfobox(frame) | |||
local raceName = frame.args[1] or mw.text.trim(frame:getParent().args[1] or "") | |||
if raceName == "" then | |||
return "Error: No race name provided" | |||
end | |||
local race = raceData[raceName] | |||
if not race then | |||
return "Error: Race '" .. raceName .. "' not found" | |||
end | |||
local color = race.color or categoryColors[race.category] or "#666666" | |||
local pageName = race.displayName .. " (Race)" | |||
local output = { '<table class="race-infobox" style="border: 2px solid ' .. color .. '; background: #f9f9f9; padding: 10px; margin: 10px 0; width: 300px; float: right; clear: right;">' } | |||
- | table.insert(output, '<tr><th colspan="2" style="background: ' .. color .. '; color: white; padding: 8px; text-align: center;">Race Information</th></tr>') | ||
table.insert(output, '<tr><td><strong> | table.insert(output, '<tr><td style="padding: 8px; vertical-align: top;"><strong>Race Name:</strong></td><td style="padding: 8px;">' .. race.displayName .. '</td></tr>') | ||
table.insert(output, '<tr><td style="padding: 8px; vertical-align: top;"><strong>Category:</strong></td><td style="padding: 8px;"><span style="background-color: ' .. color .. '; color: white; padding: 2px 6px; border-radius: 3px;">' .. race.category .. '</span></td></tr>') | |||
if race.subrace then | if race.subrace then | ||
table.insert(output, '<tr><td><strong>Subrace:</strong></td><td>' .. race.subrace .. '</td></tr>') | table.insert(output, '<tr><td style="padding: 8px; vertical-align: top;"><strong>Subrace:</strong></td><td style="padding: 8px;">' .. race.subrace .. '</td></tr>') | ||
end | end | ||
if race.description then | if race.description then | ||
table.insert(output, '<tr><td | table.insert(output, '<tr><td style="padding: 8px; vertical-align: top;"><strong>Description:</strong></td><td style="padding: 8px; font-size: 0.9em;">' .. race.description .. '</td></tr>') | ||
end | end | ||
table.insert(output, '<tr><td colspan="2" style="padding: 8px; border-top: 1px solid #ddd;"><strong>Characters:</strong><br/>[[Category:' .. race.displayName .. ' Characters|View all characters of this race]]</td></tr>') | |||
table.insert(output, '</table>') | table.insert(output, '</table>') | ||
return table.concat(output, '') | |||
end | |||
-- Function to get race link with colored badge | |||
function p.getRaceLink(frame) | |||
local raceName = frame.args[1] or mw.text.trim(frame:getParent().args[1] or "") | |||
if raceName == "" then | |||
return "[[Category:Unknown Race]]" | |||
end | |||
local race = raceData[raceName] | |||
if not race then | |||
return "[[Category:Unknown Race]]" | |||
end | |||
local color = race.color or categoryColors[race.category] or "#666666" | |||
local pageName = race.displayName .. " (Race)" | |||
-- | local output = '<span class="race-badge" style="display: inline-block; background-color: ' .. color .. '; color: white; padding: 2px 8px; border-radius: 12px; font-size: 0.9em; font-weight: bold;">' | ||
output = output .. '[[' .. pageName .. '|' .. race.displayName .. ']]' | |||
output = output .. '</span>' | |||
output = output .. '[[Category:' .. race.category .. ' Characters]]' | |||
return | return output | ||
end | end | ||
return p | |||
Latest revision as of 10:24, 22 January 2026
Documentation for this module may be created at Module:RaceData/doc
local p = {}
local categoryColors = {
["Standard"] = "#4CAF50",
["Elven"] = "#9C27B0",
["Minx"] = "#FF9800",
["Feline"] = "#795548",
["Dwarven"] = "#607D8B",
["Banished"] = "#F44336",
["Demonic"] = "#9C27B0",
["Aquatic"] = "#2196F3",
["Hybrid"] = "#FF5722",
}
local raceData = {
["Banished (Frog)"] = {
displayName = "Banished (Frog)",
category = "Banished",
subrace = "Frog",
color = "#F44336",
description = "Frog-like banished creatures with amphibious abilities."
},
["Human"] = {
displayName = "Human",
category = "Standard",
color = "#4CAF50",
description = "Standard human race with versatile capabilities."
},
["Banished (Armor Spirit)"] = {
displayName = "Banished (Armor Spirit)",
category = "Banished",
subrace = "Armor Spirit",
color = "#F44336",
description = "Spiritual beings bound to armor, cast out from their realm."
},
["Minx (Dragon-kin)"] = {
displayName = "Minx (Dragon-kin)",
category = "Minx",
subrace = "Dragon-kin",
color = "#FF9800",
description = "Dragon-blooded minx with draconic features."
},
["Mortal"] = {
displayName = "Mortal",
category = "Standard",
color = "#4CAF50",
description = "Mortal beings with finite lifespans and diverse backgrounds."
},
["Minx"] = {
displayName = "Minx",
category = "Minx",
subrace = "Base",
color = "#FF9800",
description = "Base minx race with feline characteristics."
},
["Elf"] = {
displayName = "Elf",
category = "Elven",
color = "#9C27B0",
description = "Elegant, long-lived beings with affinity for nature and magic."
},
["Banished (Giant)"] = {
displayName = "Banished (Giant)",
category = "Banished",
subrace = "Giant",
color = "#F44336",
description = "Gigantic banished beings with immense strength."
},
["Minx (Tiger)"] = {
displayName = "Minx (Tiger)",
category = "Minx",
subrace = "Tiger",
color = "#FF9800",
description = "Tiger-striped minx with predatory instincts."
},
["Minx (Moon Cat)"] = {
displayName = "Minx (Moon Cat)",
category = "Minx",
subrace = "Moon Cat",
color = "#FF9800",
description = "Lunar-aligned minx with mystical abilities."
},
["Minx-Giant"] = {
displayName = "Minx-Giant",
category = "Hybrid",
subrace = "Minx-Giant",
color = "#FF5722",
description = "Hybrid of Minx and Giant characteristics."
},
["Mortal/Vampire"] = {
displayName = "Mortal/Vampire",
category = "Hybrid",
subrace = "Mortal-Vampire",
color = "#FF5722",
description = "Hybrid beings with both mortal and vampiric traits."
},
["Fox Minx"] = {
displayName = "Fox Minx",
category = "Minx",
subrace = "Fox",
color = "#FF9800",
description = "Fox-like minx with cunning and agility."
},
["Gothic Demon"] = {
displayName = "Gothic Demon",
category = "Demonic",
subrace = "Gothic",
color = "#9C27B0",
description = "Dark, gothic-themed demonic beings."
},
["Felinyan"] = {
displayName = "Felinyan",
category = "Feline",
color = "#795548",
description = "Feline humanoids with graceful movements."
},
["Dwarf"] = {
displayName = "Dwarf",
category = "Dwarven",
color = "#607D8B",
description = "Stout, sturdy beings skilled in craftsmanship."
},
["Banished"] = {
displayName = "Banished",
category = "Banished",
color = "#F44336",
description = "Beings cast out from their original realms."
},
["Demonkind"] = {
displayName = "Demonkind",
category = "Demonic",
color = "#9C27B0",
description = "Demonic beings with infernal powers."
},
["Siren"] = {
displayName = "Siren",
category = "Aquatic",
subrace = "Moon Priestess",
color = "#2196F3",
description = "Aquatic beings with enchanting voices and lunar connections."
}
}
-- Function to get race info (for Template:RaceInfo)
function p.getRaceInfo(frame)
local raceName = frame.args[1] or mw.text.trim(frame:getParent().args[1] or "")
if raceName == "" then
return '<span class="race-error">Unknown Race</span>[[Category:Unknown Race]]'
end
local race = raceData[raceName]
if not race then
return '<span class="race-error">Race Not Found</span>[[Category:Unknown Race]]'
end
local color = race.color or categoryColors[race.category] or "#666666"
local pageName = race.displayName .. " (Race)"
-- Build tooltip text
local tooltipText = "<strong>" .. race.displayName .. "</strong>"
tooltipText = tooltipText .. "<br><small>Category: " .. race.category .. "</small>"
if race.subrace then
tooltipText = tooltipText .. "<br><small>Subrace: " .. race.subrace .. "</small>"
end
if race.description then
tooltipText = tooltipText .. "<br><br>" .. race.description
end
tooltipText = tooltipText .. '<br><br><small>Click for full race page →</small>'
-- Create the tooltip container with proper MediaWiki link
local output = '<span class="race-tooltip-container">'
output = output .. '[[' .. pageName .. '|<span class="race-link" style="color: ' .. color .. ';">' .. race.displayName .. '</span>]]'
output = output .. '<div class="race-tooltip">' .. tooltipText .. '</div>'
output = output .. '</span>'
-- Add categories
output = output .. '[[Category:' .. race.category .. ' Characters]]'
output = output .. '[[Category:' .. race.displayName .. ' Characters]]'
return output
end
-- Function to get race infobox for race pages
function p.getRaceInfobox(frame)
local raceName = frame.args[1] or mw.text.trim(frame:getParent().args[1] or "")
if raceName == "" then
return "Error: No race name provided"
end
local race = raceData[raceName]
if not race then
return "Error: Race '" .. raceName .. "' not found"
end
local color = race.color or categoryColors[race.category] or "#666666"
local pageName = race.displayName .. " (Race)"
local output = { '<table class="race-infobox" style="border: 2px solid ' .. color .. '; background: #f9f9f9; padding: 10px; margin: 10px 0; width: 300px; float: right; clear: right;">' }
table.insert(output, '<tr><th colspan="2" style="background: ' .. color .. '; color: white; padding: 8px; text-align: center;">Race Information</th></tr>')
table.insert(output, '<tr><td style="padding: 8px; vertical-align: top;"><strong>Race Name:</strong></td><td style="padding: 8px;">' .. race.displayName .. '</td></tr>')
table.insert(output, '<tr><td style="padding: 8px; vertical-align: top;"><strong>Category:</strong></td><td style="padding: 8px;"><span style="background-color: ' .. color .. '; color: white; padding: 2px 6px; border-radius: 3px;">' .. race.category .. '</span></td></tr>')
if race.subrace then
table.insert(output, '<tr><td style="padding: 8px; vertical-align: top;"><strong>Subrace:</strong></td><td style="padding: 8px;">' .. race.subrace .. '</td></tr>')
end
if race.description then
table.insert(output, '<tr><td style="padding: 8px; vertical-align: top;"><strong>Description:</strong></td><td style="padding: 8px; font-size: 0.9em;">' .. race.description .. '</td></tr>')
end
table.insert(output, '<tr><td colspan="2" style="padding: 8px; border-top: 1px solid #ddd;"><strong>Characters:</strong><br/>[[Category:' .. race.displayName .. ' Characters|View all characters of this race]]</td></tr>')
table.insert(output, '</table>')
return table.concat(output, '')
end
-- Function to get race link with colored badge
function p.getRaceLink(frame)
local raceName = frame.args[1] or mw.text.trim(frame:getParent().args[1] or "")
if raceName == "" then
return "[[Category:Unknown Race]]"
end
local race = raceData[raceName]
if not race then
return "[[Category:Unknown Race]]"
end
local color = race.color or categoryColors[race.category] or "#666666"
local pageName = race.displayName .. " (Race)"
local output = '<span class="race-badge" style="display: inline-block; background-color: ' .. color .. '; color: white; padding: 2px 8px; border-radius: 12px; font-size: 0.9em; font-weight: bold;">'
output = output .. '[[' .. pageName .. '|' .. race.displayName .. ']]'
output = output .. '</span>'
output = output .. '[[Category:' .. race.category .. ' Characters]]'
return output
end
return p