Mudanças entre as edições de "Widget:Droflax"

De Wiki Gla
Ir para navegação Ir para pesquisar
 
(412 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
<includeonly>
<div class="language-switch">
<div class="personaje-box">
   <a data-lang="pt"><img src="https://upload.wikimedia.org/wikipedia/en/0/05/Flag_of_Brazil.svg" width="32" height="24"></a>
   <div class="personaje-header">
  <a data-lang="es"><img src="https://upload.wikimedia.org/wikipedia/commons/9/9a/Flag_of_Spain.svg" width="32" height="24"></a>
    <div class="personaje-info">
  <a data-lang="en"><img src="https://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg" width="32" height="24"></a>
      <div class="nombre">{{{nombre}}}</div>
  <a data-lang="pl"><img src="https://upload.wikimedia.org/wikipedia/en/1/12/Flag_of_Poland.svg" width="32" height="24"></a>
      <div class="tier">Tier: {{{tier}}}</div>
</div>
      <div class="clase">Clase: {{{clase}}}</div>
    </div>
    <img src="{{{imagen}}}" alt="Arte del personaje" />
    <div class="personaje-tabs">
      <button class="tab-btn active" data-tab="habilidades">Habilidades</button>
      <button class="tab-btn" data-tab="skins">Skins</button>
    </div>
  </div>


  <div class="tab-content active" id="habilidades">
<style>
    <div class="habilidades-container">
.language-switch {
      <div class="prueba">
  display: flex;
        <div class="cuadros-container"></div>
  gap: 6px;
        <div class="descripcion-container"></div>
  margin: 8px 0;
        <div class="atributos-container"></div>
  justify-content: center;
      </div>
}
      <div class="video-container"></div>
.language-switch img {
    </div>
  border: 1px solid #ccc;
   </div>
   border-radius: 6px;
 
  cursor: pointer;
   <div class="tab-content" id="skins">
   transition: transform 0.2s ease, border-color 0.2s ease;
    <!-- Skins se insertan aquí -->
}
  </div>
.language-switch img:hover {
</div>
  transform: scale(1.1);
  border-color: #333;
}
.language-switch img.active {
  border-color: #000;
}
</style>


<script type="text/javascript">
<script>
(function () {
(function () {
   const habilidades = JSON.parse(`{{{habilidadesJson}}}`);
   let currentLang = 'pt'; // idioma por defecto
  const skins = JSON.parse(`{{{skinsJson}}}`);


   const cuadrosContainer = document.querySelector('.cuadros-container');
   const langSwitch = document.querySelector('.language-switch');
   const descripcionContainer = document.querySelector('.descripcion-container');
   if (langSwitch) {
  const atributosContainer = document.querySelector('.atributos-container');
    langSwitch.querySelectorAll('a[data-lang]').forEach(btn => {
  const videoContainer = document.querySelector('.video-container');
      btn.addEventListener('click', () => {
  const contenedorSkins = document.querySelector("#skins");
        currentLang = btn.dataset.lang;
  const cuadros = [];
        langSwitch.querySelectorAll('img').forEach(img => img.classList.remove('active'));
        btn.querySelector('img').classList.add('active');


  // Tabs
        const active = document.querySelector('.skill-icon.active');
  const buttons = document.querySelectorAll(".tab-btn");
        if (active) active.click();
  const contents = document.querySelectorAll(".tab-content");
      });
    });


  buttons.forEach(btn => {
    // Activar la bandera por defecto
     btn.addEventListener("click", () => {
     const defaultBtn = langSwitch.querySelector('a[data-lang="pt"] img');
      buttons.forEach(b => b.classList.remove("active"));
    if (defaultBtn) defaultBtn.classList.add('active');
      contents.forEach(c => c.classList.remove("active"));
  }


      btn.classList.add("active");
  const oldClicks = document.querySelectorAll('.skill-icon');
      const tab = btn.getAttribute("data-tab");
  oldClicks.forEach(el => {
       document.getElementById(tab).classList.add("active");
    el.addEventListener('click', () => {
    });
       const name = el.dataset.nome || '';
  });
      const rawDesc = el.dataset.desc || '';
      let descText = '';


  contenedorSkins.innerHTML = generarHTMLSkins(skins);
      try {
        const obj = JSON.parse(rawDesc);
        descText = obj[currentLang] || obj['pt'] || '';
      } catch (e) {
        descText = rawDesc; // fallback si no es un JSON
      }


  habilidades.forEach((hab, index) => {
      const attrs = el.dataset.atr || '';
    const div = document.createElement('div');
      const descBox = document.querySelector('.desc-box');
    div.classList.add('cuadro');
      if (descBox) {
    div.innerHTML = `<img src="${hab.icon}" alt="${hab.nombre}" style="width: 100%; height: 100%; object-fit: cover;">`;
        descBox.innerHTML = `<div class="skill-title"><h3>${name}</h3></div>${renderAttributes(attrs)}<div class="desc">${descText}</div>`;
    div.title = hab.nombre;
       }
    div.addEventListener('click', () => {
      descripcionContainer.innerHTML = `
        <h3 style="margin-bottom: 4px; color: white;">${hab.nombre}</h3>
        <p style="margin: 0 0 6px;">Level: ${hab.level}</p>
        <p>${hab.descripcion}</p>
      `;
      atributosContainer.innerHTML = generarHTMLAtributos(hab.atributos);
      videoContainer.innerHTML = `
        <video id="video-habilidad" width="100%" height="250" controls loop playsinline>
          <source src="${hab.video}" type="video/webm">
          Tu navegador no soporta este video.
        </video>`;
       cuadros.forEach(c => c.classList.remove('activo'));
      div.classList.add('activo');
     });
     });
    cuadros.push(div);
    cuadrosContainer.appendChild(div);
   });
   });
  if (cuadros.length > 0) cuadros[0].click();
  function generarHTMLAtributos(valoresStr) {
    const valores = valoresStr.split(',').map(v => v.trim());
    const labels = ["Recarga", "Energía", "Poder PVE", "Poder PVP"];
    const icons = [
      "/images/b/b1/Icon-cooldown.png",
      "/images/3/38/Icon-energy.png",
      "/images/7/7a/Icon-pve.png",
      "/images/5/5f/Icon-pvp.png"
    ];
    return `
      <h4 class="attribute-title">Atributos</h4>
      <div class="attribute--cardsContainer">
        ${valores.map((valor, i) => {
          let formatted;
          if (valor === "-") {
            formatted = "-";
          } else {
            let num = parseInt(valor);
            formatted = (i === 1 && !isNaN(num)) ? `${num > 0 ? '+' : ''}${num}` : valor;
          }
          return `
            <span class="simple-tooltip simple-tooltip-inline tooltipstered" data-simple-tooltip="<p><b>${labels[i]}</b></p>">
              <div class="cardAttribute">
                <img src="${icons[i]}" class="cardAttribute--icon">
                <h2 class="cardAttribute--value">${formatted}${i === 0 && formatted !== '-' ? ' seg' : ''}</h2>
              </div>
            </span>`;
        }).join('')}
      </div>
    `;
  }
  function generarHTMLSkins(listaSkins) {
    return `
      <div class="card-skins">
        <span class="card-skins-title">Skins</span>
        <div class="skins--container">
          ${listaSkins.map(skin => `
            <span class="simple-tooltip simple-tooltip-inline tooltipstered" data-simple-tooltip="<center><b>${skin.tooltip}</b></center>">
              <img class="skins--imageSkin" src="${skin.imagen}" alt="">
            </span>`).join('')}
        </div>
      </div>
    `;
  }
})();
})();
</script>
</script>
</includeonly>
<style>
    .personaje-box {
        background: #1e1e1e;
        border-radius: 12px;
        padding: 16px;
        color: #fff;
        font-family: 'Segoe UI', sans-serif;
        max-width: 1100px;
        margin: auto;
        border: 2px solid #444;
    }
    .personaje-header {
        display: flex;
        gap: 20px;
        border-bottom: 2px solid #555;
        padding-bottom: 10px;
        flex-direction: column;
    }
    .personaje-header img {
        width: 230px;
        position: absolute;
        right: 16%;
    }
    .personaje-info .nombre {
        font-size: 32px;
        font-weight: bold;
    }
    .personaje-info .tier,
    .personaje-info .clase {
        font-size: 16px;
        color: #bbb;
    }
    .personaje-tabs {
        margin-block: 4px;
        display: flex;
        gap: 12px;
        justify-content: flex-start;
    }
    .tab-btn {
        padding: 8px 20px;
        background: #333;
        color: white;
        border: none;
        border-radius: 8px;
        font-size: 18px;
        cursor: pointer;
    }
    .tab-btn.active {
        background: #007bff;
        font-weight: bold;
    }
    .tab-content {
        display: none;
        margin-top: 20px;
        animation: fadeIn 0.4s ease;
    }
    .tab-content.active {
        display: block;
    }
    .habilidades-container {
        display: flex;
        gap: 20px;
    }
    .prueba {
        flex: 1;
        display: flex;
        flex-direction: column;
        gap: 10px;
    }
    .cuadros-container {
        display: flex;
        justify-content: center;
        flex-wrap: wrap;
        gap: 10px;
        width: 100%;
    }
    .cuadros-container .cuadro {
        width: 60px;
        height: 60px;
        border-radius: 5px;
        cursor: pointer;
    }
    .cuadro.activo {
        border: 1px solid #007bff;
    }
    .descripcion-container,
    .atributos-container {
        padding: 10px;
        background-color: #715757;
        border-radius: 5px;
    }
    .video-container {
        width: 400px;
        height: 200px;
        flex-shrink: 0;
        align-self: center;
        background-color: #000;
    }
    .attribute--cardsContainer {
        display: flex;
        justify-content: center;
        gap: 20px;
        flex-wrap: wrap;
        margin-top: 10px;
        background: unset;
        border: unset;
    }
    .cardAttribute {
        width: 80px;
        height: 90px;
        background-color: #473838;
        border-radius: 8px;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        text-align: center;
        padding: 5px;
        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
        transition: transform 0.2s;
    }
    .cardAttribute--icon {
        height: 28px;
        margin-bottom: 14px;
    }
    .cardAttribute--value {
        font-size: 14px !important;
        font-weight: bold;
        margin: 0 !important;
        color: white;
        border-bottom: unset;
    }
    .attribute-title,
    .card-skins-title {
        font-size: 1.4em;
        text-align: center;
        justify-self: center;
        letter-spacing: 1px;
        font-family: sans-serif !important;
        border-bottom: 2px solid #9d9c9c;
        color: white !important;
        padding-bottom: 8px;
        margin-bottom: 16px;
        width: 75%;
    }
    .card-skins {
        padding: 16px;
        border-radius: 12px;
        box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
        margin-top: 20px;
    }
    .card-skins-title {
        display: block;
        border-bottom: unset;
        font-size: 18px;
        font-weight: bold;
        margin-bottom: 12px;
    }
    .skins--container {
        display: flex;
        gap: 16px;
        flex-wrap: wrap;
        justify-content: center;
    }
    .skins--imageSkin {
        width: 200px;
        height: auto;
        background-color: #fefefe;
        border-radius: 6px;
        border: 1px solid #ccc;
        transition: transform 0.2s;
    }
    .skins--imageSkin:hover {
        transform: scale(1.05);
    }
    @keyframes fadeIn {
        from {
            opacity: 0;
        }
        to {
            opacity: 1;
        }
    }
</style>

Edição atual tal como às 06h05min de 31 de agosto de 2025

 <a data-lang="pt"><img src="https://upload.wikimedia.org/wikipedia/en/0/05/Flag_of_Brazil.svg" width="32" height="24"></a>
 <a data-lang="es"><img src="https://upload.wikimedia.org/wikipedia/commons/9/9a/Flag_of_Spain.svg" width="32" height="24"></a>
 <a data-lang="en"><img src="https://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg" width="32" height="24"></a>
 <a data-lang="pl"><img src="https://upload.wikimedia.org/wikipedia/en/1/12/Flag_of_Poland.svg" width="32" height="24"></a>

<style> .language-switch {

 display: flex;
 gap: 6px;
 margin: 8px 0;
 justify-content: center;

} .language-switch img {

 border: 1px solid #ccc;
 border-radius: 6px;
 cursor: pointer;
 transition: transform 0.2s ease, border-color 0.2s ease;

} .language-switch img:hover {

 transform: scale(1.1);
 border-color: #333;

} .language-switch img.active {

 border-color: #000;

} </style>

<script> (function () {

 let currentLang = 'pt'; // idioma por defecto
 const langSwitch = document.querySelector('.language-switch');
 if (langSwitch) {
   langSwitch.querySelectorAll('a[data-lang]').forEach(btn => {
     btn.addEventListener('click', () => {
       currentLang = btn.dataset.lang;
       langSwitch.querySelectorAll('img').forEach(img => img.classList.remove('active'));
       btn.querySelector('img').classList.add('active');
       const active = document.querySelector('.skill-icon.active');
       if (active) active.click();
     });
   });
   // Activar la bandera por defecto
   const defaultBtn = langSwitch.querySelector('a[data-lang="pt"] img');
   if (defaultBtn) defaultBtn.classList.add('active');
 }
 const oldClicks = document.querySelectorAll('.skill-icon');
 oldClicks.forEach(el => {
   el.addEventListener('click', () => {
     const name = el.dataset.nome || ;
     const rawDesc = el.dataset.desc || ;
     let descText = ;
     try {
       const obj = JSON.parse(rawDesc);
       descText = obj[currentLang] || obj['pt'] || ;
     } catch (e) {
       descText = rawDesc; // fallback si no es un JSON
     }
     const attrs = el.dataset.atr || ;
     const descBox = document.querySelector('.desc-box');
     if (descBox) {

descBox.innerHTML = `

${name}

${renderAttributes(attrs)}

${descText}

`;

     }
   });
 });

})(); </script>