MediaWiki:Common.js: Difference between revisions

From Ultimate Dragon Ball Online Wiki

Ravenalien (talk | contribs)
No edit summary
Ravenalien (talk | contribs)
No edit summary
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. */
$(function() {
mw.loader.using(['jquery'], function ($) {
     'use strict';
     'use strict';
   
    // Main tabs (Race selection)
    $(document).on('click', '.tab-navigation > .tab-nav > .tab-button', function(e) {
        e.preventDefault();
        var targetId = $(this).data('target');
        if (!targetId) return;


         // Update main tabs
    function initTabs() {
         $('.tab-navigation .tab-button').removeClass('active');
         // Main tab click handler
        $('.tab-content .tab-pane').removeClass('active');
         $('.tab-button').on('click', function(e) {
        $(this).addClass('active');
            e.preventDefault();
        $('#' + targetId).addClass('active');
           
 
            var $this = $(this);
        // Reset sub-tabs
             var targetId = $this.attr('data-target');
        var $subNav = $('#' + targetId).find('.sub-tab-navigation');
        if ($subNav.length) {
             var $firstSubTab = $subNav.find('.tab-button').first();
            $subNav.find('.tab-button').removeClass('active');
            $firstSubTab.addClass('active');
              
              
             var firstSubTargetId = $firstSubTab.data('target');
             // If this is a main tab
            $subNav.find('.tab-pane').removeClass('active');
            if ($this.parent('.tab-nav').parent('.tab-navigation').length) {
            $('#' + firstSubTargetId).addClass('active');
                // Deactivate all main tabs
        }
                $('.tab-navigation .tab-button').removeClass('active');
    });
                $this.addClass('active');
 
               
    // Sub-tab navigation
                // Hide all main content
    $(document).on('click', '.sub-tab-navigation > .tab-nav > .tab-button', function(e) {
                $('.tab-pane').removeClass('active');
        e.preventDefault();
                $('#' + targetId).addClass('active');
        var targetId = $(this).data('target');
               
        if (!targetId) return;
                // Reset sub-tabs to first tab
 
                if ($('#' + targetId + ' .sub-tab-navigation').length) {
        var $subNav = $(this).closest('.sub-tab-navigation');
                    var $subNav = $('#' + targetId + ' .sub-tab-navigation');
        $subNav.find('.tab-button').removeClass('active');
                    var $firstSubTab = $subNav.find('.tab-button').first();
        $subNav.find('.tab-pane').removeClass('active');
                   
        $(this).addClass('active');
                    $subNav.find('.tab-button').removeClass('active');
        $('#' + targetId).addClass('active');
                    $firstSubTab.addClass('active');
    });
                   
 
                    $subNav.find('.tab-pane').removeClass('active');
    // Set initial active states
                    $('#' + $firstSubTab.attr('data-target')).addClass('active');
    $('.tab-navigation').each(function() {
                }
        var $nav = $(this);
            }
        var $activeButton = $nav.find('.tab-button.active');
            // If this is a sub-tab
            else if ($this.parent('.tab-nav').parent('.sub-tab-navigation').length) {
                // Only update tabs within this sub-tab-navigation
                var $subNav = $this.closest('.sub-tab-navigation');
               
                $subNav.find('.tab-button').removeClass('active');
                $this.addClass('active');
               
                $subNav.find('.tab-pane').removeClass('active');
                $('#' + targetId).addClass('active');
            }
        });
          
          
         if ($activeButton.length === 0) {
         // Ensure initial states are set
            $activeButton = $nav.find('.tab-button').first().addClass('active');
        $('.tab-navigation').each(function() {
        }
            var $mainNav = $(this);
       
           
        var targetId = $activeButton.data('target');
            // Set first main tab active if none are
        if (targetId) {
            if (!$mainNav.find('.tab-button.active').length) {
            $('#' + targetId).addClass('active');
                var $firstMainTab = $mainNav.find('.tab-button').first();
                $firstMainTab.addClass('active');
                $('#' + $firstMainTab.attr('data-target')).addClass('active');
            }
              
              
             // Handle sub-tabs
             // For each main tab content
             var $subNav = $('#' + targetId).find('.sub-tab-navigation');
             $mainNav.find('.tab-button').each(function() {
            if ($subNav.length) {
                 var targetId = $(this).attr('data-target');
                 var $firstSubTab = $subNav.find('.tab-button').first();
                 var $mainContent = $('#' + targetId);
                 $firstSubTab.addClass('active');
                  
                  
                 var firstSubTargetId = $firstSubTab.data('target');
                 // If this tab has sub-tabs
                $('#' + firstSubTargetId).addClass('active');
                if ($mainContent.find('.sub-tab-navigation').length) {
             }
                    var $subNav = $mainContent.find('.sub-tab-navigation');
         }
                   
     });
                    // Set first sub-tab active if none are
                    if (!$subNav.find('.tab-button.active').length) {
                        var $firstSubTab = $subNav.find('.tab-button').first();
                        $firstSubTab.addClass('active');
                        $('#' + $firstSubTab.attr('data-target')).addClass('active');
                    }
                }
             });
         });
     }


     // Add map tooltips
     // Initialize when document is ready
     $('span.material-button a').each(function() {
     $(document).ready(function() {
         var href = $(this).attr('href');
         initTabs();
        if (href && href.indexOf('world-map') !== -1) {
            $(this).parent().attr('title', 'Click to view location on map');
            $(this).prepend('<span class="map-icon">🗺️ </span>');
        }
     });
     });


     // Image previews
     // Re-initialize when MediaWiki content changes
     $(document).on('mouseenter mouseleave', '.thumbimage', function(e) {
     mw.hook('wikipage.content').add(function() {
        var styles = e.type === 'mouseenter' ? {
         initTabs();
            'transform': 'scale(1.05)',
            'transition': 'transform 0.3s ease',
            'box-shadow': '0 8px 16px rgba(0,0,0,0.2)'
        } : {
            'transform': '',
            'box-shadow': ''
        };
         $(this).css(styles);
     });
     });
    // Mobile optimization
    if (window.matchMedia("only screen and (max-width: 768px)").matches) {
        $('.tab-nav').css({
            'overflow-x': 'auto',
            'white-space': 'nowrap',
            '-webkit-overflow-scrolling': 'touch'
        });
       
        $('.tab-button').css({
            'display': 'inline-block',
            'float': 'none'
        });
    }
});
});

Revision as of 06:42, 26 February 2025

/* Any JavaScript here will be loaded for all users on every page load. */
mw.loader.using(['jquery'], function ($) {
    'use strict';

    function initTabs() {
        // Main tab click handler
        $('.tab-button').on('click', function(e) {
            e.preventDefault();
            
            var $this = $(this);
            var targetId = $this.attr('data-target');
            
            // If this is a main tab
            if ($this.parent('.tab-nav').parent('.tab-navigation').length) {
                // Deactivate all main tabs
                $('.tab-navigation .tab-button').removeClass('active');
                $this.addClass('active');
                
                // Hide all main content
                $('.tab-pane').removeClass('active');
                $('#' + targetId).addClass('active');
                
                // Reset sub-tabs to first tab
                if ($('#' + targetId + ' .sub-tab-navigation').length) {
                    var $subNav = $('#' + targetId + ' .sub-tab-navigation');
                    var $firstSubTab = $subNav.find('.tab-button').first();
                    
                    $subNav.find('.tab-button').removeClass('active');
                    $firstSubTab.addClass('active');
                    
                    $subNav.find('.tab-pane').removeClass('active');
                    $('#' + $firstSubTab.attr('data-target')).addClass('active');
                }
            }
            // If this is a sub-tab
            else if ($this.parent('.tab-nav').parent('.sub-tab-navigation').length) {
                // Only update tabs within this sub-tab-navigation
                var $subNav = $this.closest('.sub-tab-navigation');
                
                $subNav.find('.tab-button').removeClass('active');
                $this.addClass('active');
                
                $subNav.find('.tab-pane').removeClass('active');
                $('#' + targetId).addClass('active');
            }
        });
        
        // Ensure initial states are set
        $('.tab-navigation').each(function() {
            var $mainNav = $(this);
            
            // Set first main tab active if none are
            if (!$mainNav.find('.tab-button.active').length) {
                var $firstMainTab = $mainNav.find('.tab-button').first();
                $firstMainTab.addClass('active');
                $('#' + $firstMainTab.attr('data-target')).addClass('active');
            }
            
            // For each main tab content
            $mainNav.find('.tab-button').each(function() {
                var targetId = $(this).attr('data-target');
                var $mainContent = $('#' + targetId);
                
                // If this tab has sub-tabs
                if ($mainContent.find('.sub-tab-navigation').length) {
                    var $subNav = $mainContent.find('.sub-tab-navigation');
                    
                    // Set first sub-tab active if none are
                    if (!$subNav.find('.tab-button.active').length) {
                        var $firstSubTab = $subNav.find('.tab-button').first();
                        $firstSubTab.addClass('active');
                        $('#' + $firstSubTab.attr('data-target')).addClass('active');
                    }
                }
            });
        });
    }

    // Initialize when document is ready
    $(document).ready(function() {
        initTabs();
    });

    // Re-initialize when MediaWiki content changes
    mw.hook('wikipage.content').add(function() {
        initTabs();
    });
});