Módulo:Character
Ir para navegação
Ir para pesquisar
A documentação para este módulo pode ser criada em Módulo:Character/doc
local p = {}
function p.generate(frame)
local args = frame:getParent().args
local html = mw.html.create('div')
local function getVideoURL(filename)
return tostring(mw.uri.fullUrl('Special:FilePath/' .. filename))
end
local tier = (args.tier or ""):lower()
local tierMap = {
bronze = "tier-bronze",
silver = "tier-silver",
gold = "tier-gold",
diamond = "tier-diamond"
}
local tierClass = tierMap[tier]
local box = html:tag('div')
:addClass('character-box')
:addClass(tierClass or '')
-- Header Section
local header = box:tag('div'):addClass('character-header')
local topbar = header:tag('div'):addClass('character-topbar')
-- Name/Title Block
local nameBox = topbar:tag('div'):addClass('character-name-box')
nameBox:wikitext(string.format('[[File:%s|class=topbar-icon|link=|alt=Medal]]', args.medal or 'Default_medal.png'))
local nameCategory = nameBox:tag('div'):addClass('character-name-category')
nameCategory:tag('div')
:addClass('name')
:wikitext(args.name or 'Default Character')
-- Classes
local classesDiv = nameCategory:tag('div'):addClass('classes')
for cls in mw.text.gsplit(args.class or '', '/', true) do
classesDiv:tag('div'):addClass('class'):wikitext(cls)
end
-- Description
header:tag('div')
:addClass('topbar-description')
:wikitext(args.desc or '')
-- Tabs
local tabs = header:tag('div'):addClass('character-tabs')
tabs:tag('div')
:addClass('tab-btn')
:attr('data-tab', 'weapon')
:wikitext('Weapon')
tabs:tag('div')
:addClass('tab-btn active')
:attr('data-tab', 'skills')
:wikitext('Skills')
tabs:tag('div')
:addClass('tab-btn')
:attr('data-tab', 'skins')
:wikitext('Skins')
-- Character Art
box:tag('div')
:css('text-align', 'center')
:wikitext(string.format('[[File:%s|class=character-art|link=|alt=Character art]]', args.image or 'Default_splash.png'))
-- Skills Tab
local skillsTab = box:tag('div')
:addClass('tab-content active')
:attr('id', 'skills')
local skillsBar = skillsTab:tag('div')
:addClass('skills-container')
-- Skills List
for i = 1, 21 do
local skillName = args['skill'..i..'-name']
if skillName then
skillsBar:tag('div')
:addClass('skill')
:attr('data-index', i)
:attr('data-name', skillName)
:attr('data-desc', args['skill'..i..'-desc'] or '')
:attr('data-attr', args['skill'..i..'-attr'] or '')
:attr('data-video', getVideoURL(args['skill'..i..'-video'] or ''))
:wikitext(string.format("[[File:%s|class=skill-icon|link=]]", args['skill'..i..'-icon'] or ''))
end
end
-- Skill Details Panel
local skillsContainer = skillsTab:tag('div')
:addClass('skills-details-container')
skillsContainer:tag('div')
:addClass('skill-description')
skillsContainer:tag('div')
:addClass('skill-video-container')
-- Skins Tab
local skinsTab = box:tag('div')
:addClass('tab-content')
:attr('id', 'skins')
local skinsCard = skinsTab:tag('div')
:addClass('skins-card')
skinsCard:tag('span')
:addClass('skins-title')
:wikitext('SKINS & SPOTLIGHTS')
local carouselWrapper = skinsCard:tag('div')
:addClass('skins-carousel-wrapper')
carouselWrapper:tag('div')
:addClass('skins-arrow left')
:wikitext('«')
local carousel = carouselWrapper:tag('div')
:addClass('skins-carousel')
-- Skins List
for j = 1, 11 do
local skinImage = args['skin'..j..'-image']
if skinImage then
local skinCard = carousel:tag('div')
:addClass('skin-card')
:attr('title', args['skin'..j..'-tooltip'] or '')
skinCard:tag('div')
:addClass('skin-banner')
:wikitext(string.format("[[File:%s|link=]]", args['skin'..j..'-banner'] or ''))
skinCard:tag('div')
:addClass('skin-image')
:wikitext(string.format("[[File:%s|link=]]", skinImage))
end
end
carouselWrapper:tag('div')
:addClass('skins-arrow right')
:wikitext('»')
return tostring(box)
end
return p