Ir para o conteúdo

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

De Normas Regulamentadoras
Sem resumo de edição
Sem resumo de edição
Linha 41: Linha 41:
/* Página Normas - Sistema Orbital - Lógica do Sistema Orbital com Auto-Ocultação e Suporte a Apelidos Dinâmicos */
/* Página Normas - Sistema Orbital - Lógica do Sistema Orbital com Auto-Ocultação e Suporte a Apelidos Dinâmicos */
/* Lógica do Sistema Orbital de Anexos com Tradução de Nomes e Auto-Ocultação */
/* Lógica do Sistema Orbital de Anexos com Tradução de Nomes e Auto-Ocultação */
/* Lógica do Sistema Orbital de Anexos com Links Inteligentes e Auto-Ocultação */
$(document).ready(function() {
$(document).ready(function() {
     var $containerOrbital = $('#sistema-orbital');
     var $containerOrbital = $('#sistema-orbital');
Linha 53: Linha 54:
     }
     }


     // Mapeamento manual de nomes especiais mantido e expandido
    // 1. IDENTIFICA A PÁGINA ATUAL PELA URL DO NAVEGADOR
    var urlAtual = window.location.pathname;
    var idAnexoAtivo = null;
 
    if (urlAtual.indexOf('_AN_') !== -1 || urlAtual.indexOf(' AN ') !== -1) {
        // Captura o número do anexo no final da URL (ex: "NR-1_AN_1" ou "NR-1 AN 1")
        var partes = urlAtual.split(/_AN_| AN /i);
        if (partes.length > 1) {
            idAnexoAtivo = partes[1].trim();
        }
    } else {
        // Se não achou "AN" na URL, o usuário está na página mãe (Origem 0)
        idAnexoAtivo = "0";
    }
 
    // 2. DESABILITA O RE-CLIQUE COM PRECISÃO DO NAVEGADOR
    if (idAnexoAtivo === "0") {
        // Desativa o link do Sol (Origem 0)
        var $sol = $containerOrbital.find('.bolha-centro');
        var $spanSol = $sol.find('.nome-norma-centro').detach();
        $sol.empty().append($spanSol);
    }
 
     // Mapeamento manual de nomes especiais
     var mapeamentoNomes = {
     var mapeamentoNomes = {
         "30": "13-A",
         "30": "13-A",
Linha 68: Linha 92:
         var idOrigem = $item.data('anexo').toString().trim();
         var idOrigem = $item.data('anexo').toString().trim();
          
          
         // Aplica o rótulo corrigido em duas linhas conforme a regra solicitada
         // Se esta lua for a página aberta, remove o link e ativa a classe protetora
         if (mapeamentoNomes[idOrigem]) {
         if (idOrigem === idAnexoAtivo) {
            if (mapeamentoNomes[idOrigem] === "Glossário" || mapeamentoNomes[idOrigem] === "(*)") {
            $item.addClass('pagina-ativa');
                 $item.find('span').html(mapeamentoNomes[idOrigem]);
            var textoSimples = idOrigem;
            if (mapeamentoNomes[idOrigem]) {
                textoSimples = mapeamentoNomes[idOrigem];
            }
           
            if (textoSimples === "Glossário" || textoSimples === "(*)") {
                 $item.find('span').html(textoSimples);
             } else {
             } else {
                 $item.find('span').html("Anexo<br>" + mapeamentoNomes[idOrigem]);
                 $item.find('span').html("Anexo<br>" + textoSimples);
             }
             }
            // Remove a tag <a> de link de dentro dela
            var $spanLimpo = $item.find('span').detach();
            $item.empty().append($spanLimpo);
         } else {
         } else {
             $item.find('span').html("Anexo<br>" + idOrigem);
             // Luas normais mantêm o link padrão
            if (mapeamentoNomes[idOrigem]) {
                if (mapeamentoNomes[idOrigem] === "Glossário" || mapeamentoNomes[idOrigem] === "(*)") {
                    $item.find('span').html(mapeamentoNomes[idOrigem]);
                } else {
                    $item.find('span').html("Anexo<br>" + mapeamentoNomes[idOrigem]);
                }
            } else {
                $item.find('span').html("Anexo<br>" + idOrigem);
            }
         }
         }


Linha 91: Linha 133:
     });
     });
});
});


/* Lógica de Agrupamento em Blocos Sólidos para o Infográfico Histórico */
/* Lógica de Agrupamento em Blocos Sólidos para o Infográfico Histórico */

Edição das 20h11min de 15 de julho de 2026

/* Página Normas - Texto Principal  Lógica para Ativação de Notas Explicativas no texto de Norma/Anexo */
$(document).ready(function() {
    // Varre todas as notas sobrescritas que possuem conteúdo vindo do banco
    $('.item-nr .nota-sup').each(function() {
        var textoNota = $(this).text().trim();
        
        // Se a nota contiver texto (ex: [1]), transforma esse texto no Tooltip oficial
        if (textoNota && textoNota !== "[]") {
            $(this).attr('title', 'Nota Explicativa ' + textoNota);
        }
    });
});

/* Tabela NR 04 Anexo 1 */
$(function() {
    // Função genérica para alternar visibilidade e limpar descendentes
    $('.linha-nivel-1, .linha-nivel-2, .linha-nivel-3').on('click', function(e) {
        e.stopPropagation();
        
        var nivelAtual = parseInt($(this).attr('class').match(/linha-nivel-(\d)/)[1]);
        var proximoNivel = nivelAtual + 1;
        
        // Se a linha já estiver aberta, estamos fechando (recolhendo)
        if ($(this).hasClass('aberto')) {
            // Remove a classe 'aberto' desta linha
            $(this).removeClass('aberto');
            
            // Fecha todos os descendentes (recursivo)
            $(this).nextUntil('.linha-nivel-' + nivelAtual).removeClass('show aberto');
        } else {
            // Se estamos abrindo:
            $(this).addClass('aberto');
            
            // Mostra apenas os filhos imediatos (do próximo nível)
            $(this).nextUntil('.linha-nivel-' + nivelAtual).filter('.linha-nivel-' + proximoNivel).addClass('show');
        }
    });
});


/* Página Normas - Sistema Orbital - Lógica do Sistema Orbital com Auto-Ocultação e Suporte a Apelidos Dinâmicos */
/* Lógica do Sistema Orbital de Anexos com Tradução de Nomes e Auto-Ocultação */
/* Lógica do Sistema Orbital de Anexos com Links Inteligentes e Auto-Ocultação */
$(document).ready(function() {
    var $containerOrbital = $('#sistema-orbital');
    var $listaPlanetas = $containerOrbital.find('.planeta-satelite');
    var totalPlanetas = $listaPlanetas.length;

    if (totalPlanetas === 0) {
        $containerOrbital.closest('.caixa-orbital-container').hide();
        return;
    } else {
        $containerOrbital.closest('.caixa-orbital-container').show();
    }

    // 1. IDENTIFICA A PÁGINA ATUAL PELA URL DO NAVEGADOR
    var urlAtual = window.location.pathname; 
    var idAnexoAtivo = null;

    if (urlAtual.indexOf('_AN_') !== -1 || urlAtual.indexOf(' AN ') !== -1) {
        // Captura o número do anexo no final da URL (ex: "NR-1_AN_1" ou "NR-1 AN 1")
        var partes = urlAtual.split(/_AN_| AN /i);
        if (partes.length > 1) {
            idAnexoAtivo = partes[1].trim();
        }
    } else {
        // Se não achou "AN" na URL, o usuário está na página mãe (Origem 0)
        idAnexoAtivo = "0";
    }

    // 2. DESABILITA O RE-CLIQUE COM PRECISÃO DO NAVEGADOR
    if (idAnexoAtivo === "0") {
        // Desativa o link do Sol (Origem 0)
        var $sol = $containerOrbital.find('.bolha-centro');
        var $spanSol = $sol.find('.nome-norma-centro').detach();
        $sol.empty().append($spanSol);
    }

    // Mapeamento manual de nomes especiais
    var mapeamentoNomes = {
        "30": "13-A",
        "50": "Glossário",
        "60": "(*)"
    };

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

    $listaPlanetas.each(function(index) {
        var $item = $(this);
        var idOrigem = $item.data('anexo').toString().trim();
        
        // Se esta lua for a página aberta, remove o link e ativa a classe protetora
        if (idOrigem === idAnexoAtivo) {
            $item.addClass('pagina-ativa');
            var textoSimples = idOrigem;
            if (mapeamentoNomes[idOrigem]) {
                textoSimples = mapeamentoNomes[idOrigem];
            }
            
            if (textoSimples === "Glossário" || textoSimples === "(*)") {
                $item.find('span').html(textoSimples);
            } else {
                $item.find('span').html("Anexo<br>" + textoSimples);
            }
            // Remove a tag <a> de link de dentro dela
            var $spanLimpo = $item.find('span').detach();
            $item.empty().append($spanLimpo);
        } else {
            // Luas normais mantêm o link padrão
            if (mapeamentoNomes[idOrigem]) {
                if (mapeamentoNomes[idOrigem] === "Glossário" || mapeamentoNomes[idOrigem] === "(*)") {
                    $item.find('span').html(mapeamentoNomes[idOrigem]);
                } else {
                    $item.find('span').html("Anexo<br>" + mapeamentoNomes[idOrigem]);
                }
            } else {
                $item.find('span').html("Anexo<br>" + idOrigem);
            }
        }

        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 de Agrupamento em Blocos Sólidos para o Infográfico Histórico */
$(document).ready(function() {
    var $container = $('#infografico-vigencia');
    if ($container.length === 0) return;

    // Aguarda um instante para garantir que o Cargo renderizou todas as linhas na tela
    setTimeout(function() {
        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 = $(itensArray[i]);
            var verbo = $item.data('verbo');

            grupoValido.push($item);

            // A cada portaria de Redação 'R' ou no final da fila, fecha o bloco sólido
            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]);
                }

                // Injeta o rótulo "Vigências" acima do Bloco 1 (Verde)
                if (numeroBloco === 1) {
                    var $tituloVigencias = $('<div class="titulo-bloco-vigencias">Vigências</div>');
                    $container.append($tituloVigencias);
                }

                $container.append($wrapper);
                grupoValido = [];
                numeroBloco++;
            }
        }
    }, 50);
});