Widget:TesteBossYawnv2
<main class="boss-container-teste">
</main>
<script> (function() {
function escapeHtml(str) {
if (!str) return ;
return str.replace(/[&<>]/g, m => ({
'&': '&',
'<': '<',
'>': '>'
}[m]));
}
// Note: Removi o "async" pois agora tudo é síncrono e instantâneo
function bossRender(root, diff) {
const data = JSON.parse(root.dataset.json);
const d = data[diff];
const content = root.querySelector(".boss-content");
if (!content || !d) return;
// Atualiza o título apenas se necessário
const titulo = root.querySelector(".boss-titulo");
if (data.nome && titulo) titulo.textContent = data.nome;
let html = `
// Requisitoshtml += `
Requisitos
- `;
(d.requisitos || []).forEach(r => html += `
- ${escapeHtml(r)} `); if (!(d.requisitos || []).length) html += `
- Nenhum requisito `; html += `
// Grid recompensashtml += `
// Recompensas Garantidashtml += `
Recompensas Garantidas
- `;
(d.recompensas || []).forEach(r => html += `
- ${escapeHtml(r)} `); if (!(d.recompensas || []).length) html += `
- Nenhuma recompensa garantida `; html += `
// Possíveis Recompensas (O HTML já vem pronto do Módulo Lua)html += `
Possíveis Recompensas
`; if (d.recompensasRenderizadas) {
// Inserimos o HTML direto (imagens e tooltips processados pela Wiki)
html += d.recompensasRenderizadas;
} else {
html += `- Nenhuma recompensa possível
}html += `
`;
content.innerHTML = html;
// Atualiza botão ativo
root.querySelectorAll('.boss-diff-btn').forEach(btn => {
btn.classList.toggle('active', btn.dataset.diff === diff);
});
}
function init() {
document.querySelectorAll('.boss-component').forEach(root => {
if (root.dataset.initialized === 'true') return;
root.dataset.initialized = 'true';
const buttons = root.querySelectorAll('.boss-diff-btn');
buttons.forEach(btn => {
btn.addEventListener('click', (e) => {
const diff = e.currentTarget.dataset.diff;
bossRender(root, diff);
});
});
// Renderização inicial
bossRender(root, 'normal');
});
}
// Inicialização padrão do MediaWiki
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
if (typeof mw !== 'undefined' && mw.hook) {
mw.hook('wikipage.content').add(init);
}
})(); </script>
<style> .boss-container-teste {
font-family: 'Segoe UI', Roboto, Arial, sans-serif; max-width: 900px; margin: 0 auto; background-color: #3a3a3c; border-radius: 12px; overflow: hidden; color: #e0e0e0; display: flex; text-align: center; justify-content: center; flex-direction: column;
}
/* Título do boss */ .boss-titulo {
font-size: 42px; font-weight: bold; color: #5488ad; margin: 0 0 12px 0; letter-spacing: 1px;
}
/* Botões de dificuldade */ .boss-diff-buttons {
display: flex; justify-content: center; text-align: center; gap: 4px; padding: 16px 20px; border-bottom: 2px solid #3a3a3c;
}
.boss-diff-btn {
background: #3a3a3c; border: none; color: #e0e0e0; padding: 10px 28px; border-radius: 8px; font-weight: bold; cursor: pointer; transition: all 0.2s; font-size: 14px; letter-spacing: 1px;
}
.boss-diff-btn:hover {
background: #5488ad; color: white;
}
.boss-diff-btn.active {
background: #5488ad; color: white; box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);
}
/* Conteúdo principal */ .boss-content {
padding: 24px 28px;
}
/* Introdução */ .boss-content em {
color: #a0a0a0; display: block; margin-bottom: 28px; padding-bottom: 16px; border-bottom: 1px solid #3a3a3c; font-style: italic; font-size: 14px;
}
/* Subtítulos (Localização, Requisitos, etc) */ .boss-content h3 {
color: #5488ad; margin: 24px 0 12px 0; font-size: 16px; font-weight: bold; text-transform: uppercase; letter-spacing: 1.5px;
}
.boss-content h3:first-of-type {
margin-top: 0;
}
/* Grid */ .boss-content-grid {
display: flex; text-align: center; justify-content: center; gap: 10px;
}
/* Requisitos */ .boss-content-requisitos{
background-color: #1f1f20; padding: 6px;
}
/* Recompensas */
/* Listas */ .boss-content ul {
margin: 0; padding-left: 24px; list-style-type: none;
}
.boss-content li {
margin: 10px 0; color: #d0d0d0; position: relative; padding-left: 20px;
}
.boss-content li::before {
content: "▸"; color: #5488ad; position: absolute; left: 0;
}
/* Linha divisória entre seções */ .boss-content hr {
border: none; border-top: 1px solid #3a3a3c; margin: 20px 0;
}
/* Responsivo */ @media (max-width: 600px) {
.boss-diff-buttons {
justify-content: center;
flex-wrap: wrap;
gap: 8px;
}
.boss-diff-btn {
padding: 8px 20px;
font-size: 12px;
}
.boss-content {
padding: 20px;
}
.boss-content h2 {
font-size: 24px;
}
.boss-content h3 {
font-size: 14px;
}
} </style>