Ir para o conteúdo

MediaWiki:Common.js

De Normas Regulamentadoras

Nota: Após publicar, você pode ter que limpar o "cache" do seu navegador para ver as alterações.

  • Firefox / Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)
  • Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)
  • Edge: Pressione Ctrl enquanto clica Recarregar, ou pressione Ctrl-F5.
  • Opera: Pressione Ctrl-F5.
/* Lógica de Agrupamento em Blocos Sólidos para o Infográfico */
$(document).ready(function() {
    var $container = $('#infografico-vigencia');
    if ($container.length === 0) return;

    var $itens = $container.find('.timeline-item');
    if ($itens.length === 0) return;

    var numeroBloco = 1;
    var grupoValido = [];

    var itensArray = $itens.toArray();
    $container.empty();

    for (var i = 0; i < itensArray.length; i++) {
        var $item = $(searchResults = itensArray[i]);
        var verbo = $item.data('verbo');

        grupoValido.push($item);

        if (verbo === 'R' || i === itensArray.length - 1) {
            var $wrapper = $('<div class="bloco-grupo bloco-' + numeroBloco + '"></div>');
            
            for (var j = 0; j < grupoValido.length; j++) {
                $wrapper.append(grupoValido[j]);
            }

            // SE FOR O BLOCO 1 (VERDE VIGENTE), INJETA O TÍTULO DE VIGÊNCIAS ANTES DELE
            if (numeroBloco === 1) {
                var $tituloVigencias = $('<div class="titulo-bloco-vigencias">Vigências</div>');
                $container.append($tituloVigencias);
            }

            $container.append($wrapper);

            grupoValido = [];
            numeroBloco++;
        }
    }
});

// Lógica do Sistema Orbital de Anexos com Tradução de Nomes, Auto-Ocultação e Tooltips Puros
$(document).ready(function() {
    var $containerOrbital = $('#sistema-orbital');
    if ($containerOrbital.length === 0) return;

    var $listaPlanetas = $containerOrbital.find('.planeta-satelite');
    var totalPlanetas = $listaPlanetas.length;

    // SE NÃO HOUVER ANEXOS, FAZ A CAIXA INTEIRA SUMIR DO LAYOUT
    if (totalPlanetas === 0) {
        $containerOrbital.closest('.caixa-orbital-container').hide();
        return;
    }

    // 1. EXTRAI E LIMPA O TOOLTIP DO SOL (NORMA CENTRO)
    var $sol = $containerOrbital.find('.bolha-centro');
    var apelidoSol = $containerOrbital.find('.shadow-apelido-sol').text().trim();
    
    if (apelidoSol) {
        $sol.attr('title', apelidoSol);
    }

    // Mapeamento de exceções para nomes visuais nas bolhas
    var mapeamentoNomes = {
        "30": "13-A",
        "50": "Glossário",
        "60": "(*)"
    };

    var raio = 96;     
    var centroX = 120; 
    var centroY = 120; 

    // 2. CONFIGURA CADA PLANETA (POSIÇÃO, NOME E TOOLTIP SEGURO)
    $listaPlanetas.each(function(index) {
        var $item = $(this);
        var idOrigem = $item.data('anexo').toString().trim();
        
        // Extrai o texto do apelido oculto vindo do Cargo
        var apelidoPlaneta = $item.find('.shadow-apelido-anexo').text().trim();

        if (apelidoPlaneta) {
            $item.attr('title', apelidoPlaneta);
        }
        
        // CORREÇÃO DE ACESSO: Localiza o span mesmo se ele estiver envelopado pela tag <a> do MediaWiki
        var $spanTexto = $item.find('.link-orbital span, span');
        
        // Define o texto visual interno da bolha respeitando as exceções
        if (mapeamentoNomes[idOrigem]) {
            if (mapeamentoNomes[idOrigem] === "Glossário" || mapeamentoNomes[idOrigem] === "(*)") {
                $spanTexto.html(mapeamentoNomes[idOrigem]);
            } else {
                $spanTexto.html("Anexo<br>" + mapeamentoNomes[idOrigem]);
            }
        } else {
            $spanTexto.html("Anexo<br>" + idOrigem);
        }

        // Distribuição matemática na órbita circular
        var angulo = (index * (2 * Math.PI) / totalPlanetas) - (Math.PI / 2); 
        var x = centroX + raio * Math.cos(angulo) - 22; 
        var y = centroY + raio * Math.sin(angulo) - 22; 

        $item.css({
            'left': x + 'px',
            'top': y + 'px',
            'width': '44px',  
            'height': '44px'
        });
    });
});


/* Lógica para Ativação de Notas Explicativas na Lauda */
$(document).ready(function() {
    $('.item-linha[data-nota]:not([data-nota=""])').each(function() {
        var textoNota = $(this).attr('data-nota');
        $(this).find('.item-nota-explicativa').attr('title', textoNota);
    });
});


/* Motor Injetor de Formulário Seguro (Máquina do Tempo dd/mm/aaaa) */
$(document).ready(function() {
    var $ancora = $('#ancora-maquina-tempo');
    if ($ancora.length === 0) return;

    // 1. INJETA O INPUT E O BOTÃO DIRETO PONTUALMENTE NA TELA
    var htmlForm = '<div style="margin-bottom: 8px;">' +
                   '<input type="text" id="mt-data-br" placeholder="dd/mm/aaaa" maxlength="10" style="width: 100%; padding: 7px; border: 1px solid #cbd5e0; border-radius: 4px; box-sizing: border-box; text-align: center; font-size: 13px; background: #ffffff !important; color: #2d3748 !important;">' +
                   '</div>' +
                   '<button type="button" id="btn-viajar-tempo" style="width: 100%; padding: 7px; background: #3182ce; color: white; border: none; border-radius: 4px; font-weight: bold; cursor: pointer; font-size: 12px;">Viajar no Tempo</button>';
    
    $ancora.html(htmlForm);

    // 2. MÁSCARA EM PORTUGUÊS (Adiciona as barras sozinhos no input)
    $(document).on('input', '#mt-data-br', function() {
        var v = $(this).val().replace(/\D/g, ''); // Remove letras
        if (v.length > 8) v = v.substring(0, 8);
        
        if (v.length > 4) {
            v = v.replace(/^(\d{2})(\d{2})(\d{4})$/, "$1/$2/$3");
        } else if (v.length > 2) {
            v = v.replace(/^(\d{2})(\d{1,2})$/, "$1/$2");
        }
        $(this).val(v);
    });

    // 3. CAPTURA O CLIQUE E TRADUZ PARA O CARGO (dd/mm/aaaa -> AAAA-MM-DD)
    $(document).on('click', '#btn-viajar-tempo', function() {
        var dataBr = $('#mt-data-br').val().trim();

        if (dataBr.length < 10) {
            alert('Por favor, digite a data completa no formato dd/mm/aaaa.');
            return;
        }

        var partes = dataBr.split('/');
        var dia = partes[0];
        var mes = partes[1];
        var ano = partes[2];

        var dataIso = ano + '-' + mes + '-' + dia;

        // Atualiza a URL mantendo a lauda limpa e enviando o filtro temporal
        var urlAtual = window.location.protocol + "//" + window.location.host + window.location.pathname;
        window.location.href = urlAtual + '?data_pesquisa=' + dataIso;
    });
});