Mudanças entre as edições de "Módulo:Character"
Ir para navegação
Ir para pesquisar
m (Limpou toda a página) Etiqueta: anulando |
m |
||
| Linha 1: | Linha 1: | ||
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 | |||
Edição das 20h01min de 8 de agosto de 2025
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