Jump to content

MediaWiki:Common.js: Difference between revisions

No edit summary
No edit summary
Line 3: Line 3:


// ==========================================================================
// ==========================================================================
     // CONTROLADOR DE DROPDOWN MANUAL NO ÍNDICE LATERAL (TOC) - SÓ ONDE HÁ FILHOS
     // CONTROLADOR DE DROPDOWN INDEPENDENTE NO ÍNDICE (TOC)
     // ==========================================================================
     // ==========================================================================
      
      
     // Alvo apenas nas linhas de link do índice ativo, ignorando o título principal do container
     // Almeja apenas os itens de lista internos, protegendo o cabeçalho global
     $('.vector-toc-list-item').each(function() {
     $('.vector-toc-contents .vector-toc-list .vector-toc-list-item').each(function() {
         var $listItem = $(this);
         var $listItem = $(this);
         var $subList = $listItem.children('.vector-toc-list');
         var $subList = $listItem.children('.vector-toc-list');
          
          
         // Regra restrita: Só adiciona a seta se houver uma lista interna E se essa lista tiver subcapítulos (li) lá dentro
         // Valida se o item tem subcapítulos reais com conteúdo
         if ($subList.length > 0 && $subList.children('.vector-toc-list-item').length > 0) {
         if ($subList.length > 0 && $subList.children('.vector-toc-list-item').length > 0) {
            var $link = $listItem.children('.vector-toc-link');
              
              
             // Evita duplicações inserindo o botão apenas se ele não existir
             // Cria a seta apenas se ela ainda não existir nesta linha
             if ($link.find('.toc-toggle-arrow').length === 0) {
             if ($listItem.children('.toc-toggle-arrow').length === 0) {
                // Criamos um elemento isolado para a seta para não misturar com o texto do link
                 var $arrow = $('<span class="toc-toggle-arrow">▶</span>');
                 var $arrow = $('<span class="toc-toggle-arrow">▶</span>');
                  
                  
                // Evento focado puramente na ação de expandir/recolher a árvore
                 $arrow.click(function(e) {
                 $arrow.click(function(e) {
                     e.preventDefault();   // Impede o salto de scroll para o link
                     e.preventDefault();
                     e.stopPropagation(); // Não deixa o clique ativar a navegação do link principal
                     e.stopPropagation();
                   
                    // Alterna o estado aberto/fechado na linha
                     $listItem.toggleClass('toc-expanded');
                     $listItem.toggleClass('toc-expanded');
                 });
                 });
                  
                  
                 // Adiciona a seta no início do link, garantindo um alinhamento limpo à esquerda
                 // IMPORTANTE: Adiciona a seta ANTES do link, solta no item de lista
                 $link.prepend($arrow);
                 $listItem.prepend($arrow);
             }
             }
         }
         }