MediaWiki:Common.js: mudanças entre as edições

De Grimopedia
Ir para navegação Ir para pesquisar
Sem resumo de edição
Etiqueta: Revertido
Sem resumo de edição
Etiqueta: Reversão manual
 
(5 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
/* ===== CTAs com <gallery> — bulletproof para várias versões do MW ===== */
// Navi clicável: {{Navi|mapa|x|y}} -> copia /navi mapa x y
@import url('https://fonts.googleapis.com/css2?family=Luckiest+Guy&display=swap');
mw.loader.using('mediawiki.util').then(function () {
    document.addEventListener('click', function (e) {
        var el = e.target.closest('.navi-copy');
        if (!el) return;


/* ============================================================
        var map = el.getAttribute('data-map');
  PALETA AURORA (global)
        var x   = el.getAttribute('data-x');
  ============================================================ */
        var y   = el.getAttribute('data-y');
:root{
  --aur-ink: #0f2b3a;
   --aur-blue: #1f6aa5;
   --aur-green: #24a137;
  --aur-yellow: #FFC72E;


  --aur-border: rgba(15,43,58,.10);
        var text = '/navi ' + map + ' ' + x + ' ' + y;
  --aur-border-strong: rgba(15,43,58,.16);
  --aur-line: rgba(15,43,58,.10);
  --aur-soft: rgba(15,43,58,.04);
  --aur-shadow: 0 10px 28px rgba(15,43,58,.10);
}


/* ============================================================
        if (navigator.clipboard && navigator.clipboard.writeText) {
  CONTAINER GERAL
            navigator.clipboard.writeText(text).then(function () {
  ============================================================ */
                mw.notify('Comando copiado: ' + text);
.broaurora-root{
            }, function () {
  max-width:1360px;
                alert('Comando: ' + text);
  margin:0 auto;
            });
  padding:0 16px;
        } else {
  box-sizing:border-box;
            var temp = document.createElement('textarea');
}
            temp.value = text;
            document.body.appendChild(temp);
            temp.select();
            document.execCommand('copy');
            document.body.removeChild(temp);
            mw.notify('Comando copiado: ' + text);
        }
    });
});


/* ============================================================
// ------------------------------------------------------------
  CTAs (gallery)
// Ícone automático para links do ItemDB do site
  ============================================================ */
// - Procura links que contenham /information/itemdb/{id}
.mw-parser-output .bro-cta-gallery{
// - Injeta um ícone (24x24) antes do texto do link
  display:flex !important;
// - Usa imagens locais do site: /img/item/{id}.png
  justify-content:center;
//   (se não existir, cai no unknown.png)
  align-items:stretch;
// ------------------------------------------------------------
  gap:18px;
mw.loader.using('mediawiki.util').then(function () {
  flex-wrap:nowrap;
   margin:0 auto 0 !important;
  padding:0 !important;
  border:0 !important;
  background:transparent !important;
}


.mw-parser-output .bro-cta-gallery .gallerybox,
    function applyItemIcons(root) {
.mw-parser-output .bro-cta-gallery li.gallerybox{
        root = root || document;
  float:none !important;
  margin:0 !important;
  padding:0 !important;
  border:0 !important;
  background:transparent !important;
  box-shadow:none !important;
  display:block !important;
  vertical-align:middle !important;
  flex:0 1 300px;
  max-width:340px;
  box-sizing:border-box;
}


.mw-parser-output .bro-cta-gallery .thumb,
        // Pega todos os links para o ItemDB do site
.mw-parser-output .bro-cta-gallery .thumbinner{
        var links = root.querySelectorAll('a[href*="/information/itemdb/"]:not(.aur-item-link)');
  margin:0 !important;
  padding:0 !important;
  border:0 !important;
  background:transparent !important;
  box-shadow:none !important;
}


.mw-parser-output .bro-cta-gallery .gallerytext,
        links.forEach(function (a) {
.mw-parser-output .bro-cta-gallery .gallerycaption,
            // evita duplicar
.mw-parser-output .bro-cta-gallery .magnify{
            if (a.getAttribute('data-aur-noicon') === '1') return;
  display:none !important;
}


.mw-parser-output .bro-cta-gallery img{
            if (a.dataset && a.dataset.aurItemIconApplied) return;
  display:block;
  width:100%;
  height:auto;
  transition:transform .22s ease;
  transform-origin:center center;
}


.mw-parser-output .bro-cta-gallery .gallerybox:hover img{
            // tenta extrair o ID do item
  transform:scale(1.04);
            var m = a.href.match(/\/information\/itemdb\/(\d+)/);
}
            if (!m) return;


@media (max-width: 900px){
            var id = m[1];
  .mw-parser-output .bro-cta-gallery{
    flex-wrap:wrap;
    gap:14px;
  }


  .mw-parser-output .bro-cta-gallery .gallerybox,
            // marca como aplicado
  .mw-parser-output .bro-cta-gallery li.gallerybox{
            if (a.dataset) a.dataset.aurItemIconApplied = "1";
    flex:1 1 100%;
    max-width:300px;
  }
}


/* ============================================================
            // NÃO força layout aqui — deixa o Common.css controlar o estilo do "pill"
  BANNER INFORMAÇÕES
            // Só garantimos que o ícone exista antes do texto.
  ============================================================ */
            var icon = document.createElement("span");
.mw-parser-output .bro-info-banner{
            icon.style.width = "24px";
  text-align:center;
            icon.style.height = "24px";
  margin:8px 0 4px;
            icon.style.flex = "0 0 24px";
  padding:0 !important;
            icon.style.display = "inline-block";
  border:0 !important;
            icon.style.backgroundSize = "contain";
  background:transparent !important;
            icon.style.backgroundRepeat = "no-repeat";
  box-shadow:none !important;
            icon.style.borderRadius = "6px";
}
            icon.style.backgroundColor = "rgba(0,0,0,.04)";


.mw-parser-output .bro-info-banner > *{
            // tenta imagem real do item
  margin:0 auto !important;
            var url = "https://grimopedia.com.br/img/item/" + id + ".png";
  padding:0 !important;
            var fallback = "https://grimopedia.com.br/img/item/unknown.png";
  border:0 !important;
  background:transparent !important;
  box-shadow:none !important;
}


.mw-parser-output .bro-info-banner .thumb,
            icon.style.backgroundImage = "url('" + url + "')";
.mw-parser-output .bro-info-banner .thumbinner,
.mw-parser-output .bro-info-banner .image,
.mw-parser-output .bro-info-banner .floatnone,
.mw-parser-output .bro-info-banner .center,
.mw-parser-output .bro-info-banner .center > *,
.mw-parser-output .bro-info-banner a,
.mw-parser-output .bro-info-banner span{
  margin:0 auto !important;
  padding:0 !important;
  border:0 !important;
  background:transparent !important;
  box-shadow:none !important;
  width:auto !important;
  max-width:none !important;
}


.mw-parser-output .bro-info-banner .magnify,
            // fallback se a imagem não existir
.mw-parser-output .bro-info-banner .gallerytext,
            var test = new Image();
.mw-parser-output .bro-info-banner .gallerycaption{
            test.onload = function () {};
  display:none !important;
            test.onerror = function () {
}
                icon.style.backgroundImage = "url('" + fallback + "')";
            };
            test.src = url;


.mw-parser-output .bro-info-banner img{
            // injeta antes do texto do link
  display:block;
            a.prepend(icon);
  margin:0 auto;
        });
  width:760px;
    }
  max-width:100%;
  height:auto;
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  transition:transform .22s ease;
  transform-origin:center center;
}


.mw-parser-output .bro-info-banner:hover img{
    // aplica no carregamento
  transform:scale(1.04);
    document.addEventListener("DOMContentLoaded", function () {
}
        applyItemIcons(document);
    });


/* ============================================================
    // aplica também quando conteúdo é carregado via ajax/VE
  HOME / BLOCOS
     if (mw && mw.hook) {
  ============================================================ */
        mw.hook('wikipage.content').add(function ($content) {
.mw-parser-output .bro-home-section{
            applyItemIcons($content[0] || document);
  background:#fff;
        });
  border-radius:18px;
     }
  margin:10px 0 20px;
});
  border:1px solid #e9ecef;
  box-shadow:0 8px 22px rgba(15,43,58,.10);
  overflow:hidden;
}
 
.mw-parser-output .bro-home-head{
  background:linear-gradient(90deg,#2F53C8,#4972E9,#2F53C8);
  padding:12px 20px;
  text-align:center;
}
 
.mw-parser-output .bro-home-title{
  font-family:'Luckiest Guy', Impact, 'Arial Black', system-ui, sans-serif;
  color:#FFD23C;
  margin:0;
  font-size:clamp(1.15rem,1.8vw,1.55rem);
  font-weight:900;
  letter-spacing:.4px;
  -webkit-text-stroke:0.6px rgba(0,0,0,.9);
  text-shadow:
    .5px 0 0 rgba(0,0,0,.7), -.5px 0 0 rgba(0,0,0,.7),
     0 .5px 0 rgba(0,0,0,.7),  0 -.5px 0 rgba(0,0,0,.7);
}
 
.mw-parser-output .bro-home-cards{
  display:flex;
  flex-wrap:wrap;
  gap:14px;
  padding:16px;
  align-items:stretch;
  box-sizing:border-box;
}
 
.mw-parser-output .bro-home-card{
  flex:1 1 280px;
  min-width:260px;
  border:1px solid rgba(36,161,55,.28);
  border-radius:14px;
  padding:14px;
  background:#fff;
  box-sizing:border-box;
}
 
.mw-parser-output .bro-home-card.bro-home-card-wide{
  flex:1.18 1 330px;
  min-width:300px;
}
 
.mw-parser-output .bro-home-card.plain{
  border:none;
  padding:0;
  background:transparent;
}
 
.mw-parser-output .bro-home-card-title{
  color:#1a2a3a;
  font-size:1.05em;
  margin:0 0 8px;
  border-bottom:1px solid rgba(36,161,55,.40);
  padding-bottom:6px;
  text-align:center;
}
 
/* ===== grids internos ===== */
.mw-parser-output .bro-home-grid-2{
  display:grid;
  grid-template-columns:1.22fr 1fr;
  gap:8px;
}
 
.mw-parser-output .bro-home-grid-3{
  display:grid;
  grid-template-columns:1fr 1.28fr .88fr;
  gap:8px;
}
 
.mw-parser-output .bro-home-subcard{
  border:1px solid rgba(36,161,55,.28);
  border-radius:12px;
  padding:10px;
  background:#fff;
  box-sizing:border-box;
  min-width:0;
}
 
@media (max-width: 1100px){
  .mw-parser-output .bro-home-grid-3{
    grid-template-columns:1fr;
  }
}
 
/* ajuste fino para grids internos */
.mw-parser-output .bro-home-card .bro-home-grid-2 .broaurora-link,
.mw-parser-output .bro-home-card .bro-home-grid-3 .broaurora-link{
  padding:8px 9px;
  gap:8px;
  line-height:1.12;
}
 
/* títulos internos opcionais */
.mw-parser-output .bro-home-subtitle{
  margin:0 0 10px;
  padding-bottom:6px;
  border-bottom:1px solid rgba(36,161,55,.25);
  text-align:center;
  color:#1a2a3a;
  font-size:1em;
  font-weight:700;
}
 
@media (max-width: 900px){
  .mw-parser-output .bro-home-cards{
    padding:14px;
    gap:12px;
  }
 
  .mw-parser-output .bro-home-grid-2{
    grid-template-columns:1fr;
  }
 
  .mw-parser-output .bro-home-grid-3{
    grid-template-columns:1fr;
  }
}
 
@media (max-width: 640px){
  .mw-parser-output .bro-home-cards{
    padding:12px;
    gap:10px;
  }
 
  .mw-parser-output .bro-home-card{
    flex:1 1 100%;
    min-width:0;
    padding:12px;
  }
 
  .mw-parser-output .bro-home-head{
     padding:10px 14px;
  }
}
 
/* ============================================================
  LINKS BONITINHOS
  ============================================================ */
.mw-parser-output .broaurora-link{
  display:flex;
  align-items:center;
  gap:8px;
  padding:8px 10px;
  border:1px solid rgba(36,161,55,.30) !important;
  border-radius:11px;
  background:#fff;
  color:var(--aur-ink) !important;
  text-decoration:none !important;
  box-shadow:0 1px 0 rgba(15,43,58,.03);
  transition:transform .16s ease, box-shadow .16s ease, border-color .16s ease, background .16s ease, color .16s ease;
  line-height:1.12;
  min-width:0;
}
 
.mw-parser-output .broaurora-link:hover{
  transform:scale(1.01);
  border-color:rgba(36,161,55,.50) !important;
  background:#f5fbff;
  color:var(--aur-blue) !important;
  box-shadow:0 6px 16px rgba(41,109,162,.12);
}
 
.mw-parser-output .broaurora-link img,
.mw-parser-output .broaurora-link .bro-ico{
  flex:0 0 auto;
}
 
/* texto do link pode quebrar de forma mais bonita */
.mw-parser-output .broaurora-link a,
.mw-parser-output .broaurora-link span,
.mw-parser-output .broaurora-link{
  overflow-wrap:break-word;
  word-break:normal;
}
 
.mw-parser-output ul.bro-list{
  list-style:none;
  margin:0;
  padding:0;
}
 
.mw-parser-output ul.bro-list > li{
  margin:6px 0;
}
 
/* ============================================================
  NAVI (/navi clicável)
  ============================================================ */
.mw-parser-output .navi-copy{
  cursor:pointer;
  display:inline;
  white-space:nowrap;
  padding:0 2px;
  color:#008000;
  font-weight:normal;
  text-decoration:none;
}
 
.mw-parser-output .navi-copy:hover{
  color:#00a000;
  text-decoration:underline;
}
 
/* ============================================================
  ItemDB — clean (sem [1] de link externo)
  ============================================================ */
.mw-parser-output a.external::after,
.mw-parser-output a.external.text::after{
  display:none !important;
  content:"" !important;
}
 
.mw-parser-output a[href*="/information/itemdb/"]{
  display:inline-flex !important;
  align-items:center !important;
  gap:8px !important;
  padding:0 !important;
  border:0 !important;
  background:transparent !important;
  border-radius:0 !important;
  text-decoration:none !important;
  line-height:24px !important;
  vertical-align:middle !important;
  color:var(--aur-ink) !important;
  font-weight:600;
  transform:none !important;
  transition:color .12s ease;
}
 
.mw-parser-output a[href*="/information/itemdb/"]:hover{
  color:var(--aur-blue) !important;
  text-decoration:underline !important;
}
 
.mw-parser-output a[href*="/information/itemdb/"] > span:first-child{
  width:24px !important;
  height:24px !important;
  flex:0 0 24px !important;
  border-radius:6px !important;
  background-color:transparent !important;
}

Edição atual tal como às 15h27min de 15 de julho de 2026

// Navi clicável: {{Navi|mapa|x|y}} -> copia /navi mapa x y
mw.loader.using('mediawiki.util').then(function () {
    document.addEventListener('click', function (e) {
        var el = e.target.closest('.navi-copy');
        if (!el) return;

        var map = el.getAttribute('data-map');
        var x   = el.getAttribute('data-x');
        var y   = el.getAttribute('data-y');

        var text = '/navi ' + map + ' ' + x + ' ' + y;

        if (navigator.clipboard && navigator.clipboard.writeText) {
            navigator.clipboard.writeText(text).then(function () {
                mw.notify('Comando copiado: ' + text);
            }, function () {
                alert('Comando: ' + text);
            });
        } else {
            var temp = document.createElement('textarea');
            temp.value = text;
            document.body.appendChild(temp);
            temp.select();
            document.execCommand('copy');
            document.body.removeChild(temp);
            mw.notify('Comando copiado: ' + text);
        }
    });
});

// ------------------------------------------------------------
// Ícone automático para links do ItemDB do site
// - Procura links que contenham /information/itemdb/{id}
// - Injeta um ícone (24x24) antes do texto do link
// - Usa imagens locais do site: /img/item/{id}.png
//   (se não existir, cai no unknown.png)
// ------------------------------------------------------------
mw.loader.using('mediawiki.util').then(function () {

    function applyItemIcons(root) {
        root = root || document;

        // Pega todos os links para o ItemDB do site
        var links = root.querySelectorAll('a[href*="/information/itemdb/"]:not(.aur-item-link)');

        links.forEach(function (a) {
            // evita duplicar
            if (a.getAttribute('data-aur-noicon') === '1') return;

            if (a.dataset && a.dataset.aurItemIconApplied) return;

            // tenta extrair o ID do item
            var m = a.href.match(/\/information\/itemdb\/(\d+)/);
            if (!m) return;

            var id = m[1];

            // marca como aplicado
            if (a.dataset) a.dataset.aurItemIconApplied = "1";

            // NÃO força layout aqui — deixa o Common.css controlar o estilo do "pill"
            // Só garantimos que o ícone exista antes do texto.
            var icon = document.createElement("span");
            icon.style.width = "24px";
            icon.style.height = "24px";
            icon.style.flex = "0 0 24px";
            icon.style.display = "inline-block";
            icon.style.backgroundSize = "contain";
            icon.style.backgroundRepeat = "no-repeat";
            icon.style.borderRadius = "6px";
            icon.style.backgroundColor = "rgba(0,0,0,.04)";

            // tenta imagem real do item
            var url = "https://grimopedia.com.br/img/item/" + id + ".png";
            var fallback = "https://grimopedia.com.br/img/item/unknown.png";

            icon.style.backgroundImage = "url('" + url + "')";

            // fallback se a imagem não existir
            var test = new Image();
            test.onload = function () {};
            test.onerror = function () {
                icon.style.backgroundImage = "url('" + fallback + "')";
            };
            test.src = url;

            // injeta antes do texto do link
            a.prepend(icon);
        });
    }

    // aplica no carregamento
    document.addEventListener("DOMContentLoaded", function () {
        applyItemIcons(document);
    });

    // aplica também quando conteúdo é carregado via ajax/VE
    if (mw && mw.hook) {
        mw.hook('wikipage.content').add(function ($content) {
            applyItemIcons($content[0] || document);
        });
    }
});