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

De Grimopedia
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
Linha 1: Linha 1:
// Navi clicável - baseado na estrutura do bROWiki
// Navi clicável - formato igual ao bROWiki: <div class="navi-copy"><span>mapa</span><span>x</span><span>y</span></div>
mw.loader.using('mediawiki.util').then(function () {
mw.loader.using('mediawiki.util').then(function () {


Linha 30: Linha 30:
         var y    = spans[2].textContent.trim();
         var y    = spans[2].textContent.trim();


         // Limpa o conteúdo original
         // Limpa conteúdo original
         while (div.firstChild) {
         while (div.firstChild) {
             div.removeChild(div.firstChild);
             div.removeChild(div.firstChild);

Edição das 11h48min de 6 de novembro de 2025

// Navi clicável - formato igual ao bROWiki: <div class="navi-copy"><span>mapa</span><span>x</span><span>y</span></div>
mw.loader.using('mediawiki.util').then(function () {

    function copiarTexto(text) {
        if (navigator.clipboard && navigator.clipboard.writeText) {
            return navigator.clipboard.writeText(text);
        }
        // fallback antigo
        return new Promise(function (resolve, reject) {
            try {
                var temp = document.createElement('textarea');
                temp.value = text;
                document.body.appendChild(temp);
                temp.select();
                document.execCommand('copy');
                document.body.removeChild(temp);
                resolve();
            } catch (e) {
                reject(e);
            }
        });
    }

    function montarNavi(div) {
        var spans = div.getElementsByTagName('span');
        if (spans.length < 3) return;

        var mapa = spans[0].textContent.trim();
        var x    = spans[1].textContent.trim();
        var y    = spans[2].textContent.trim();

        // Limpa conteúdo original
        while (div.firstChild) {
            div.removeChild(div.firstChild);
        }

        // Texto clicável
        var texto = document.createElement('div');
        texto.className = 'navi-copy-text';
        texto.textContent = '(' + mapa + ' ' + x + ', ' + y + ')';

        // Mensagem "copiado"
        var aviso = document.createElement('div');
        aviso.className = 'navi-copied';
        aviso.textContent = 'Comando copiado!';
        aviso.style.display = 'none';

        div.appendChild(texto);
        div.appendChild(aviso);

        texto.addEventListener('click', function () {
            var cmd = '/navi ' + mapa + ' ' + x + ' ' + y;

            copiarTexto(cmd).then(function () {
                aviso.style.display = 'inline';
                setTimeout(function () {
                    aviso.style.display = 'none';
                }, 1500);

                if (mw && mw.notify) {
                    mw.notify('Comando copiado: ' + cmd);
                }
            }).catch(function () {
                alert('Comando: ' + cmd);
            });
        });
    }

    // Aplica em todos os .navi-copy da página
    document.querySelectorAll('.navi-copy').forEach(montarNavi);
});