Mudanças entre as edições de "Usuário Discussão:Ttuzu"
Ir para navegação
Ir para pesquisar
(→Widget:Persona: nova seção) |
|||
| Linha 1: | Linha 1: | ||
(function () { | |||
const personaData = document.getElementById('persona-data'); | |||
if (!personaData) { | |||
. | console.error('Persona widget: não se encontrou #persona-data!'); | ||
return; | |||
} | } | ||
. | // Extração de dados | ||
const nome = personaData.dataset.nome || ''; | |||
const tier = personaData.dataset.tier || ''; | |||
const classe = personaData.dataset.classe || ''; | |||
const image = personaData.dataset.image || ''; | |||
let habilidades = []; | |||
let skins = []; | |||
// Função auxiliar para parsear strings raw em objetos | |||
const parseRawString = (rawString) => { | |||
const data = []; | |||
if (!rawString) return data; | |||
const lines = rawString.split('||').map(line => line.trim()).filter(Boolean); | |||
lines.forEach(line => { | |||
const parts = line.split('\n').map(p => p.trim()).filter(Boolean); | |||
const item = {}; | |||
parts.forEach(part => { | |||
if (part.startsWith('')) { | |||
// Ignorar comentários | |||
return; | |||
} | } | ||
const eqIndex = part.indexOf('='); | |||
if (eqIndex > -1) { | |||
const key = part.substring(0, eqIndex).trim(); | |||
const value = part.substring(eqIndex + 1).trim(); | |||
item[key] = value; | |||
} | |||
}); | |||
if (Object.keys(item).length > 0) { | |||
data.push(item); | |||
} | |||
}); | |||
return data; | |||
}; | |||
. | habilidades = parseRawString(personaData.dataset.habilidadesraw); | ||
skins = parseRawString(personaData.dataset.skinsraw); | |||
.cuadros-container | // Referências aos elementos HTML | ||
const tabBtns = document.querySelectorAll('.persona-tabs .tab-btn'); | |||
const cuadrosContainer = document.querySelector('.cuadros-container'); | |||
const abilityNameText = document.querySelector('.descripcion-container .ability-name-text'); | |||
const abilityLevelText = document.querySelector('.descripcion-container .ability-level-text'); | |||
const abilityDesc = document.querySelector('.descripcion-container .ability-desc'); | |||
const abilityVideo = document.querySelector('.descripcion-container .ability-video'); | |||
const abilityVideoSource = abilityVideo.querySelector('source'); | |||
const abilityAttributesContainer = document.querySelector('.descripcion-container .ability-attributes'); | |||
const artPersonagem = document.querySelector('.art-personagem'); | |||
const personaName = document.querySelector('.persona-name'); | |||
const personaTier = document.querySelector('.persona-tier'); | |||
const personaClass = document.querySelector('.persona-class'); | |||
. | // Preencher informações do header do personagem | ||
if (artPersonagem) artPersonagem.src = image; | |||
if (personaName) personaName.textContent = nome; | |||
} | if (personaTier) personaTier.textContent = `Tier: ${tier}`; | ||
} | if (personaClass) personaClass.textContent = `Classe: ${classe}`; | ||
// Estado atual | |||
let currentActiveTab = 'habilidades'; | |||
let currentActiveIndex = 0; // Índice da habilidade/skin ativa | |||
// Função para renderizar os ícones (habilidades ou skins) | |||
const renderIcons = (items, type) => { | |||
cuadrosContainer.innerHTML = ''; // Limpar antes de renderizar | |||
items.forEach((item, index) => { | |||
const cuadro = document.createElement('div'); | |||
cuadro.classList.add('cuadro'); | |||
cuadro.style.backgroundImage = `url('${item.icon || item.image}')`; | |||
cuadro.dataset.index = index; | |||
cuadro.dataset.type = type; | |||
. | cuadro.addEventListener('click', () => { | ||
selectItem(index, type); | |||
}); | |||
cuadrosContainer.appendChild(cuadro); | |||
}); | |||
}; | |||
// Função para exibir detalhes da habilidade/skin | |||
const displayItemDetails = (item, type) => { | |||
// Limpa atributos anteriores | |||
abilityAttributesContainer.innerHTML = ''; | |||
if (type === 'habilidades') { | |||
abilityNameText.textContent = item.nome || ''; | |||
abilityLevelText.textContent = `Level: ${item.level || ''}`; | |||
abilityDesc.textContent = item.desc || ''; | |||
. | // Renderizar atributos dinamicamente | ||
if (item.atr) { | |||
const atrParts = item.atr.split(',').map(p => p.trim()); | |||
for (let i = 0; i < atrParts.length; i += 2) { | |||
const iconPath = atrParts[i]; | |||
const value = atrParts[i + 1]; | |||
if (iconPath && value !== undefined && value !== null) { // Verifique se o valor não é null/undefined | |||
const attributeDiv = document.createElement('div'); | |||
const attributeImg = document.createElement('img'); | |||
attributeImg.src = iconPath; | |||
attributeImg.alt = "Atributo"; | |||
attributeDiv.appendChild(attributeImg); | |||
attributeDiv.appendChild(document.createTextNode(value)); | |||
abilityAttributesContainer.appendChild(attributeDiv); | |||
} | |||
} | |||
} | |||
} | |||
. | if (item.video) { | ||
abilityVideoSource.src = item.video; | |||
} | abilityVideo.load(); | ||
abilityVideo.style.display = 'block'; | |||
} else { | |||
abilityVideoSource.src = ''; | |||
abilityVideo.style.display = 'none'; | |||
} | |||
} else { // Skins | |||
abilityNameText.textContent = item.nome || ''; | |||
abilityLevelText.textContent = ''; | |||
abilityDesc.textContent = item.desc || ''; | |||
abilityVideoSource.src = ''; | |||
abilityVideo.style.display = 'none'; | |||
} | |||
}; | |||
// Função para selecionar um item (habilidade ou skin) | |||
const selectItem = (index, type) => { | |||
const items = type === 'habilidades' ? habilidades : skins; | |||
const selectedItem = items[index]; | |||
// Atualizar classe 'active' nos ícones | |||
document.querySelectorAll('.cuadro').forEach(cuadro => { | |||
cuadro.classList.remove('active'); | |||
}); | |||
const activeCuadro = cuadrosContainer.querySelector(`.cuadro[data-index="${index}"][data-type="${type}"]`); | |||
if (activeCuadro) { | |||
activeCuadro.classList.add('active'); | |||
} | |||
displayItemDetails(selectedItem, type); | |||
currentActiveIndex = index; | |||
} | currentActiveTab = type; | ||
}; | |||
. | // Event Listeners para as abas | ||
tabBtns.forEach(btn => { | |||
btn.addEventListener('click', () => { | |||
const tabType = btn.dataset.tab; | |||
// Remover 'active' de todas as abas | |||
tabBtns.forEach(b => b.classList.remove('active')); | |||
// Adicionar 'active' à aba clicada | |||
btn.classList.add('active'); | |||
if (tabType === 'habilidades') { | |||
renderIcons(habilidades, 'habilidades'); | |||
if (habilidades.length > 0) { | |||
} | selectItem(0, 'habilidades'); | ||
} else { | |||
abilityNameText.textContent = 'Nenhuma Habilidade'; | |||
abilityLevelText.textContent = ''; | |||
abilityDesc.textContent = ''; | |||
abilityAttributesContainer.innerHTML = ''; | |||
abilityVideoSource.src = ''; | |||
abilityVideo.style.display = 'none'; | |||
} | |||
} else { // Skins | |||
renderIcons(skins, 'skins'); | |||
if (skins.length > 0) { | |||
selectItem(0, 'skins'); | |||
} else { | |||
abilityNameText.textContent = 'Nenhuma Skin'; | |||
abilityLevelText.textContent = ''; | |||
abilityDesc.textContent = ''; | |||
abilityAttributesContainer.innerHTML = ''; | |||
abilityVideoSource.src = ''; | |||
abilityVideo.style.display = 'none'; | |||
} | |||
} | |||
}); | |||
}); | |||
. | // Inicialização: renderizar habilidades e selecionar a primeira por padrão | ||
if (habilidades.length > 0) { | |||
renderIcons(habilidades, 'habilidades'); | |||
selectItem(0, 'habilidades'); | |||
} else if (skins.length > 0) { | |||
document.querySelector('.tab-btn[data-tab="skins"]').click(); | |||
} else { | |||
cuadrosContainer.innerHTML = '<p style="color: #bbb; text-align: center; width: 100%;">Nenhum conteúdo disponível.</p>'; | |||
abilityNameText.textContent = 'Nenhum Conteúdo'; | |||
abilityLevelText.textContent = ''; | |||
abilityDesc.textContent = ''; | |||
abilityAttributesContainer.innerHTML = ''; | |||
abilityVideoSource.src = ''; | |||
abilityVideo.style.display = 'none'; | |||
} | } | ||
})(); | |||
== Widget:Persona == | == Widget:Persona == | ||
Edição das 22h31min de 10 de junho de 2025
(function () {
const personaData = document.getElementById('persona-data');
if (!personaData) {
console.error('Persona widget: não se encontrou #persona-data!');
return;
}
// Extração de dados const nome = personaData.dataset.nome || ; const tier = personaData.dataset.tier || ; const classe = personaData.dataset.classe || ; const image = personaData.dataset.image || ; let habilidades = []; let skins = [];
// Função auxiliar para parsear strings raw em objetos
const parseRawString = (rawString) => {
const data = [];
if (!rawString) return data;
const lines = rawString.split('||').map(line => line.trim()).filter(Boolean);
lines.forEach(line => {
const parts = line.split('\n').map(p => p.trim()).filter(Boolean);
const item = {};
parts.forEach(part => {
if (part.startsWith()) {
// Ignorar comentários
return;
}
const eqIndex = part.indexOf('=');
if (eqIndex > -1) {
const key = part.substring(0, eqIndex).trim();
const value = part.substring(eqIndex + 1).trim();
item[key] = value;
}
});
if (Object.keys(item).length > 0) {
data.push(item);
}
});
return data;
};
habilidades = parseRawString(personaData.dataset.habilidadesraw); skins = parseRawString(personaData.dataset.skinsraw);
// Referências aos elementos HTML
const tabBtns = document.querySelectorAll('.persona-tabs .tab-btn');
const cuadrosContainer = document.querySelector('.cuadros-container');
const abilityNameText = document.querySelector('.descripcion-container .ability-name-text');
const abilityLevelText = document.querySelector('.descripcion-container .ability-level-text');
const abilityDesc = document.querySelector('.descripcion-container .ability-desc');
const abilityVideo = document.querySelector('.descripcion-container .ability-video');
const abilityVideoSource = abilityVideo.querySelector('source');
const abilityAttributesContainer = document.querySelector('.descripcion-container .ability-attributes');
const artPersonagem = document.querySelector('.art-personagem');
const personaName = document.querySelector('.persona-name');
const personaTier = document.querySelector('.persona-tier');
const personaClass = document.querySelector('.persona-class');
// Preencher informações do header do personagem
if (artPersonagem) artPersonagem.src = image;
if (personaName) personaName.textContent = nome;
if (personaTier) personaTier.textContent = `Tier: ${tier}`;
if (personaClass) personaClass.textContent = `Classe: ${classe}`;
// Estado atual let currentActiveTab = 'habilidades'; let currentActiveIndex = 0; // Índice da habilidade/skin ativa
// Função para renderizar os ícones (habilidades ou skins)
const renderIcons = (items, type) => {
cuadrosContainer.innerHTML = ; // Limpar antes de renderizar
items.forEach((item, index) => {
const cuadro = document.createElement('div');
cuadro.classList.add('cuadro');
cuadro.style.backgroundImage = `url('${item.icon || item.image}')`;
cuadro.dataset.index = index;
cuadro.dataset.type = type;
cuadro.addEventListener('click', () => {
selectItem(index, type);
});
cuadrosContainer.appendChild(cuadro);
});
};
// Função para exibir detalhes da habilidade/skin
const displayItemDetails = (item, type) => {
// Limpa atributos anteriores
abilityAttributesContainer.innerHTML = ;
if (type === 'habilidades') {
abilityNameText.textContent = item.nome || ;
abilityLevelText.textContent = `Level: ${item.level || }`;
abilityDesc.textContent = item.desc || ;
// Renderizar atributos dinamicamente
if (item.atr) {
const atrParts = item.atr.split(',').map(p => p.trim());
for (let i = 0; i < atrParts.length; i += 2) {
const iconPath = atrParts[i];
const value = atrParts[i + 1];
if (iconPath && value !== undefined && value !== null) { // Verifique se o valor não é null/undefined
const attributeDiv = document.createElement('div');
const attributeImg = document.createElement('img');
attributeImg.src = iconPath;
attributeImg.alt = "Atributo";
attributeDiv.appendChild(attributeImg);
attributeDiv.appendChild(document.createTextNode(value));
abilityAttributesContainer.appendChild(attributeDiv);
}
}
}
if (item.video) {
abilityVideoSource.src = item.video;
abilityVideo.load();
abilityVideo.style.display = 'block';
} else {
abilityVideoSource.src = ;
abilityVideo.style.display = 'none';
}
} else { // Skins
abilityNameText.textContent = item.nome || ;
abilityLevelText.textContent = ;
abilityDesc.textContent = item.desc || ;
abilityVideoSource.src = ;
abilityVideo.style.display = 'none';
}
};
// Função para selecionar um item (habilidade ou skin)
const selectItem = (index, type) => {
const items = type === 'habilidades' ? habilidades : skins;
const selectedItem = items[index];
// Atualizar classe 'active' nos ícones
document.querySelectorAll('.cuadro').forEach(cuadro => {
cuadro.classList.remove('active');
});
const activeCuadro = cuadrosContainer.querySelector(`.cuadro[data-index="${index}"][data-type="${type}"]`);
if (activeCuadro) {
activeCuadro.classList.add('active');
}
displayItemDetails(selectedItem, type);
currentActiveIndex = index;
currentActiveTab = type;
};
// Event Listeners para as abas
tabBtns.forEach(btn => {
btn.addEventListener('click', () => {
const tabType = btn.dataset.tab;
// Remover 'active' de todas as abas
tabBtns.forEach(b => b.classList.remove('active'));
// Adicionar 'active' à aba clicada
btn.classList.add('active');
if (tabType === 'habilidades') {
renderIcons(habilidades, 'habilidades');
if (habilidades.length > 0) {
selectItem(0, 'habilidades');
} else {
abilityNameText.textContent = 'Nenhuma Habilidade';
abilityLevelText.textContent = ;
abilityDesc.textContent = ;
abilityAttributesContainer.innerHTML = ;
abilityVideoSource.src = ;
abilityVideo.style.display = 'none';
}
} else { // Skins
renderIcons(skins, 'skins');
if (skins.length > 0) {
selectItem(0, 'skins');
} else {
abilityNameText.textContent = 'Nenhuma Skin';
abilityLevelText.textContent = ;
abilityDesc.textContent = ;
abilityAttributesContainer.innerHTML = ;
abilityVideoSource.src = ;
abilityVideo.style.display = 'none';
}
}
});
});
// Inicialização: renderizar habilidades e selecionar a primeira por padrão
if (habilidades.length > 0) {
renderIcons(habilidades, 'habilidades');
selectItem(0, 'habilidades');
} else if (skins.length > 0) {
document.querySelector('.tab-btn[data-tab="skins"]').click();
} else {
cuadrosContainer.innerHTML = '
Nenhum conteúdo disponível.
';
abilityNameText.textContent = 'Nenhum Conteúdo';
abilityLevelText.textContent = ;
abilityDesc.textContent = ;
abilityAttributesContainer.innerHTML = ;
abilityVideoSource.src = ;
abilityVideo.style.display = 'none';
}
})();
Widget:Persona
(function () {
const personaData = document.getElementById('persona-data');
if (!personaData) {
console.error('Persona widget: não se encontrou #persona-data!');
return;
}
// Extração de dados const nome = personaData.dataset.nome || ; const tier = personaData.dataset.tier || ; const classe = personaData.dataset.classe || ; const image = personaData.dataset.image || ; let habilidades = []; let skins = [];
// Função auxiliar para parsear strings raw em objetos
const parseRawString = (rawString) => {
const data = [];
if (!rawString) return data;
const lines = rawString.split('||').map(line => line.trim()).filter(Boolean);
lines.forEach(line => {
const parts = line.split('\n').map(p => p.trim()).filter(Boolean);
const item = {};
parts.forEach(part => {
if (part.startsWith()) {
// Ignorar comentários
return;
}
const eqIndex = part.indexOf('=');
if (eqIndex > -1) {
const key = part.substring(0, eqIndex).trim();
const value = part.substring(eqIndex + 1).trim();
item[key] = value;
}
});
if (Object.keys(item).length > 0) {
data.push(item);
}
});
return data;
};
habilidades = parseRawString(personaData.dataset.habilidadesraw); skins = parseRawString(personaData.dataset.skinsraw);
// Referências aos elementos HTML
const tabBtns = document.querySelectorAll('.persona-tabs .tab-btn');
const cuadrosContainer = document.querySelector('.cuadros-container');
const abilityNameText = document.querySelector('.descripcion-container .ability-name-text');
const abilityLevelText = document.querySelector('.descripcion-container .ability-level-text');
const abilityDesc = document.querySelector('.descripcion-container .ability-desc');
const abilityVideo = document.querySelector('.descripcion-container .ability-video');
const abilityVideoSource = abilityVideo.querySelector('source');
const abilityAttributesContainer = document.querySelector('.descripcion-container .ability-attributes');
const artPersonagem = document.querySelector('.art-personagem');
const personaName = document.querySelector('.persona-name');
const personaTier = document.querySelector('.persona-tier');
const personaClass = document.querySelector('.persona-class');
// Preencher informações do header do personagem
if (artPersonagem) artPersonagem.src = image;
if (personaName) personaName.textContent = nome;
if (personaTier) personaTier.textContent = `Tier: ${tier}`;
if (personaClass) personaClass.textContent = `Classe: ${classe}`;
// Estado atual let currentActiveTab = 'habilidades'; let currentActiveIndex = 0; // Índice da habilidade/skin ativa
// Função para renderizar os ícones (habilidades ou skins)
const renderIcons = (items, type) => {
cuadrosContainer.innerHTML = ; // Limpar antes de renderizar
items.forEach((item, index) => {
const cuadro = document.createElement('div');
cuadro.classList.add('cuadro');
cuadro.style.backgroundImage = `url('${item.icon || item.image}')`;
cuadro.dataset.index = index;
cuadro.dataset.type = type;
cuadro.addEventListener('click', () => {
selectItem(index, type);
});
cuadrosContainer.appendChild(cuadro);
});
};
// Função para exibir detalhes da habilidade/skin
const displayItemDetails = (item, type) => {
// Limpa atributos anteriores
abilityAttributesContainer.innerHTML = ;
if (type === 'habilidades') {
abilityNameText.textContent = item.nome || ;
abilityLevelText.textContent = `Level: ${item.level || }`;
abilityDesc.textContent = item.desc || ;
// Renderizar atributos dinamicamente
if (item.atr) {
const atrParts = item.atr.split(',').map(p => p.trim());
for (let i = 0; i < atrParts.length; i += 2) {
const iconPath = atrParts[i];
const value = atrParts[i + 1];
if (iconPath && value !== undefined && value !== null) { // Verifique se o valor não é null/undefined
const attributeDiv = document.createElement('div');
const attributeImg = document.createElement('img');
attributeImg.src = iconPath;
attributeImg.alt = "Atributo";
attributeDiv.appendChild(attributeImg);
attributeDiv.appendChild(document.createTextNode(value));
abilityAttributesContainer.appendChild(attributeDiv);
}
}
}
if (item.video) {
abilityVideoSource.src = item.video;
abilityVideo.load();
abilityVideo.style.display = 'block';
} else {
abilityVideoSource.src = ;
abilityVideo.style.display = 'none';
}
} else { // Skins
abilityNameText.textContent = item.nome || ;
abilityLevelText.textContent = ;
abilityDesc.textContent = item.desc || ;
abilityVideoSource.src = ;
abilityVideo.style.display = 'none';
}
};
// Função para selecionar um item (habilidade ou skin)
const selectItem = (index, type) => {
const items = type === 'habilidades' ? habilidades : skins;
const selectedItem = items[index];
// Atualizar classe 'active' nos ícones
document.querySelectorAll('.cuadro').forEach(cuadro => {
cuadro.classList.remove('active');
});
const activeCuadro = cuadrosContainer.querySelector(`.cuadro[data-index="${index}"][data-type="${type}"]`);
if (activeCuadro) {
activeCuadro.classList.add('active');
}
displayItemDetails(selectedItem, type);
currentActiveIndex = index;
currentActiveTab = type;
};
// Event Listeners para as abas
tabBtns.forEach(btn => {
btn.addEventListener('click', () => {
const tabType = btn.dataset.tab;
// Remover 'active' de todas as abas
tabBtns.forEach(b => b.classList.remove('active'));
// Adicionar 'active' à aba clicada
btn.classList.add('active');
if (tabType === 'habilidades') {
renderIcons(habilidades, 'habilidades');
if (habilidades.length > 0) {
selectItem(0, 'habilidades');
} else {
abilityNameText.textContent = 'Nenhuma Habilidade';
abilityLevelText.textContent = ;
abilityDesc.textContent = ;
abilityAttributesContainer.innerHTML = ;
abilityVideoSource.src = ;
abilityVideo.style.display = 'none';
}
} else { // Skins
renderIcons(skins, 'skins');
if (skins.length > 0) {
selectItem(0, 'skins');
} else {
abilityNameText.textContent = 'Nenhuma Skin';
abilityLevelText.textContent = ;
abilityDesc.textContent = ;
abilityAttributesContainer.innerHTML = ;
abilityVideoSource.src = ;
abilityVideo.style.display = 'none';
}
}
});
});
// Inicialização: renderizar habilidades e selecionar a primeira por padrão
if (habilidades.length > 0) {
renderIcons(habilidades, 'habilidades');
selectItem(0, 'habilidades');
} else if (skins.length > 0) {
document.querySelector('.tab-btn[data-tab="skins"]').click();
} else {
cuadrosContainer.innerHTML = '
Nenhum conteúdo disponível.
';
abilityNameText.textContent = 'Nenhum Conteúdo';
abilityLevelText.textContent = ;
abilityDesc.textContent = ;
abilityAttributesContainer.innerHTML = ;
abilityVideoSource.src = ;
abilityVideo.style.display = 'none';
}
})();