Jump to content

MediaWiki:Common.js: Difference between revisions

No edit summary
No edit summary
 
(25 intermediate revisions by the same user not shown)
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
/* Any JavaScript here will be loaded for all users on every page load. */


$(document).ready(function() {
 
     // Procura o link de PROBES na sidebar (que tem uma lista debaixo dele)
// Força o menu lateral a expandir (Vector 2022) se estiver colapsado
    $('.mw-sidebar-navigation li, .vector-main-menu li').each(function() {
mw.hook('wikipage.content').add(function () {
         var $li = $(this);
     if (document.documentElement.classList.contains('vector-feature-main-menu-pinned-disabled')) {
         var $nextUl = $li.next('ul'); // Deteta se há sublinks (os 3 asteriscos)
         var pinButton = document.getElementById('vector-main-menu-dropdown-checkbox');
       
         if (pinButton) {
        if ($nextUl.length > 0 || $li.find('ul').length > 0) {
            // Remove a classe de desativado e força o estado expandido
             var $subList = $nextUl.length > 0 ? $nextUl : $li.find('ul');
            document.documentElement.classList.remove('vector-feature-main-menu-pinned-disabled');
           
             document.documentElement.classList.add('vector-feature-main-menu-pinned-enabled');
            // Esconde os sublinks inicialmente
        }
            $subList.hide();
    }
           
});
            // Adiciona uma seta clicável antes do texto do link
 
            var $toggle = $('<span class="menu-toggle-arrow" style="cursor:pointer; margin-right:8px; display:inline-block; transition: transform 0.2s;">▶</span>');
 
             $li.prepend($toggle);
// Força o MediaWiki a carregar os módulos básicos em qualquer tipo de sessão (anónima ou registada)
           
mw.loader.using(['mediawiki.util', 'jquery'], function () {
             // Faz com que ao clicar na seta ou no link de PROBES, o menu abra/feche
 
             $toggle.add($li.children('a')).on('click', function(e) {
    // Lista de secções principais com subpáginas.
                 // Se clicou na seta, não deixa o navegador seguir o link '#'
    // Para adicionares uma nova secção no futuro, basta acrescentar o nome aqui.
                 if ($(e.target).hasClass('menu-toggle-arrow') || $li.children('a').attr('href').indexOf('#') !== -1) {
    var sidebarSections = ['SENSBLUE MONARCH', 'SENSBLUE ATLAS'];
                    e.preventDefault();
 
                    $subList.slideToggle('fast');
    function setupSidebarDropdowns() {
                   
        // Alvo exclusivo: Apenas o menu de navegação da skin, ignorando o índice de conteúdos (Contents) da página
                    // Roda a seta para baixo quando aberto
        var $sidebar = $('.vector-main-menu, #mw-panel');
                     var isHidden = $subList.is(':hidden');
        if (!$sidebar.length) return;
                    $toggle.css('transform', isHidden ? 'rotate(0deg)' : 'rotate(90deg)');
 
        sidebarSections.forEach(function (sectionName) {
             var slug = sectionName.replace(/ /g, '_');
 
             // 1. Identifica as subpáginas desta secção pelo URL (funciona para qualquer subpágina, incluindo novas)
             $sidebar.find('li').each(function () {
                 var $li = $(this);
                 var $link = $li.find('a, .mw-selflink').first();
                var href = $link.attr('href') || '';
                var isSubpage = href.indexOf(slug + '/') !== -1;
 
                if (isSubpage) {
                     $li.addClass('wiki-submenu').attr('data-group', slug);
                 }
                 }
             });
             });
         }
 
     });
            // 2. Procura o item pai (ex: "SENSBLUE MONARCH") na barra lateral
            var $parentLi = $sidebar.find('li').filter(function () {
                var text = $(this).clone().children().remove().end().text().trim() || $(this).text().trim();
                return text === sectionName;
            }).first();
 
            // 3. Injeta a seta nativa se encontrar o link e ainda não a tiver
            if ($parentLi.length && !$parentLi.find('.wiki-toggle-btn').length) {
 
                $parentLi.css({
                    'display': 'flex',
                    'align-items': 'center',
                    'justify-content': 'flex-start'
                });
 
                $parentLi.find('a, .mw-selflink, span').css({
                    'display': 'inline',
                    'width': 'auto'
                });
 
                var $toggleBtn = $('<span class="wiki-toggle-btn"></span>');
                $parentLi.append($toggleBtn);
 
                $toggleBtn.on('click', function (e) {
                    e.preventDefault();
                    e.stopPropagation();
 
                    $sidebar.find('.wiki-submenu[data-group="' + slug + '"]').toggleClass('is-open');
                    $(this).toggleClass('is-active');
                });
            }
         });
     }
 
    // GATILHO COMPATÍVEL COM ANÓNIMOS: Executa em múltiplos estágios do carregamento
    $(document).ready(setupSidebarDropdowns);
    $(window).on('load', setupSidebarDropdowns);
    mw.hook('wikipage.content').add(setupSidebarDropdowns);
});
});






// ==========================================================================
// CONTROLADOR DE DROPDOWN NO ÍNDICE (TOC) - VERSÃO VISUAL FINAL
// ==========================================================================
// ==========================================================================
    // CONTROLADOR DE DROPDOWN NO ÍNDICE (TOC) - VERSÃO VISUAL FINAL
    // ==========================================================================
      
      
     $('.vector-toc-contents .vector-toc-list .vector-toc-list-item').each(function() {
     $('.vector-toc-contents .vector-toc-list .vector-toc-list-item').each(function() {