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. */
mw.loader.using(['jquery', 'mediawiki.util']).done(function ($) {
$(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;


    // Wait for wiki content to be ready
        // Update main tabs
    mw.hook('wikipage.content').add(function($content) {
        $('.tab-navigation .tab-button').removeClass('active');
        console.log('Setting up tab navigation');
         $('.tab-content .tab-pane').removeClass('active');
          
        $(this).addClass('active');
        try {
        $('#' + targetId).addClass('active');
            // Main tabs (Race selection)
            $content.find('.tab-button').on('click', function(e) {
                e.preventDefault();
                var targetId = $(this).data('target');
                if (!targetId) return;


                // Handle main tab navigation
        // Reset sub-tabs
                if ($(this).closest('.tab-navigation').length) {
        var $subNav = $('#' + targetId).find('.sub-tab-navigation');
                    // Update main tabs
        if ($subNav.length) {
                    $('.tab-navigation .tab-button').removeClass('active');
            var $firstSubTab = $subNav.find('.tab-button').first();
                    $('.tab-content .tab-pane').removeClass('active');
            $subNav.find('.tab-button').removeClass('active');
                    $(this).addClass('active');
            $firstSubTab.addClass('active');
                    $('#' + targetId).addClass('active');
           
            var firstSubTargetId = $firstSubTab.data('target');
            $subNav.find('.tab-pane').removeClass('active');
            $('#' + firstSubTargetId).addClass('active');
        }
    });


                    // Reset sub-tabs
    // Sub-tab navigation
                    var $subNav = $('#' + targetId).find('.sub-tab-navigation');
    $(document).on('click', '.sub-tab-navigation > .tab-nav > .tab-button', function(e) {
                    if ($subNav.length) {
        e.preventDefault();
                        var $firstSubTab = $subNav.find('.tab-button').first();
        var targetId = $(this).data('target');
                        $subNav.find('.tab-button').removeClass('active');
        if (!targetId) return;
                        $firstSubTab.addClass('active');
                       
                        var firstSubTargetId = $firstSubTab.data('target');
                        $subNav.find('.tab-pane').removeClass('active');
                        $('#' + firstSubTargetId).addClass('active');
                    }
                }
                // Handle sub-tab navigation
                else if ($(this).closest('.sub-tab-navigation').length) {
                    var $subNav = $(this).closest('.sub-tab-navigation');
                    $subNav.find('.tab-button').removeClass('active');
                    $subNav.find('.tab-pane').removeClass('active');
                    $(this).addClass('active');
                    $('#' + targetId).addClass('active');
                }
            });


            // Set initial active states
        var $subNav = $(this).closest('.sub-tab-navigation');
            $content.find('.tab-navigation').each(function() {
        $subNav.find('.tab-button').removeClass('active');
                var $nav = $(this);
        $subNav.find('.tab-pane').removeClass('active');
                var $activeButton = $nav.find('.tab-button.active');
        $(this).addClass('active');
               
        $('#' + targetId).addClass('active');
                if ($activeButton.length === 0) {
    });
                    $activeButton = $nav.find('.tab-button').first().addClass('active');
                }
               
                var targetId = $activeButton.data('target');
                if (targetId) {
                    $('#' + targetId).addClass('active');
                   
                    // Handle sub-tabs
                    var $subNav = $('#' + targetId).find('.sub-tab-navigation');
                    if ($subNav.length) {
                        var $firstSubTab = $subNav.find('.tab-button').first();
                        $firstSubTab.addClass('active');
                       
                        var firstSubTargetId = $firstSubTab.data('target');
                        $('#' + firstSubTargetId).addClass('active');
                    }
                }
            });


            // Add map tooltips
    // Set initial active states
            $content.find('span.material-button a').each(function() {
    $('.tab-navigation').each(function() {
                var href = $(this).attr('href');
        var $nav = $(this);
                if (href && href.indexOf('world-map') !== -1) {
        var $activeButton = $nav.find('.tab-button.active');
                    $(this).parent().attr('title', 'Click to view location on map');
       
                    $(this).prepend('<span class="map-icon">🗺️ </span>');
        if ($activeButton.length === 0) {
                }
            $activeButton = $nav.find('.tab-button').first().addClass('active');
            });
        }
 
       
            // Image previews
        var targetId = $activeButton.data('target');
             $content.find('.thumbimage').on('mouseenter mouseleave', function(e) {
        if (targetId) {
                var styles = e.type === 'mouseenter' ? {
             $('#' + targetId).addClass('active');
                    'transform': 'scale(1.05)',
           
                    'transition': 'transform 0.3s ease',
            // Handle sub-tabs
                    'box-shadow': '0 8px 16px rgba(0,0,0,0.2)'
            var $subNav = $('#' + targetId).find('.sub-tab-navigation');
                } : {
             if ($subNav.length) {
                    'transform': '',
                 var $firstSubTab = $subNav.find('.tab-button').first();
                    'box-shadow': ''
                $firstSubTab.addClass('active');
                };
                $(this).css(styles);
            });
 
            // Mobile optimization
             if (window.matchMedia("only screen and (max-width: 768px)").matches) {
                 $content.find('.tab-nav').css({
                    'overflow-x': 'auto',
                    'white-space': 'nowrap',
                    '-webkit-overflow-scrolling': 'touch'
                });
                  
                  
                 $content.find('.tab-button').css({
                 var firstSubTargetId = $firstSubTab.data('target');
                    'display': 'inline-block',
                $('#' + firstSubTargetId).addClass('active');
                    'float': 'none'
                });
             }
             }
        } catch (error) {
            console.error('Error in tab initialization:', error);
         }
         }
     });
     });
    // Add map tooltips
    $('span.material-button a').each(function() {
        var href = $(this).attr('href');
        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
    $(document).on('mouseenter mouseleave', '.thumbimage', function(e) {
        var styles = e.type === 'mouseenter' ? {
            '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:39, 26 February 2025

/* Any JavaScript here will be loaded for all users on every page load. */
$(function() {
    '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
        $('.tab-navigation .tab-button').removeClass('active');
        $('.tab-content .tab-pane').removeClass('active');
        $(this).addClass('active');
        $('#' + targetId).addClass('active');

        // Reset sub-tabs
        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');
            $subNav.find('.tab-pane').removeClass('active');
            $('#' + firstSubTargetId).addClass('active');
        }
    });

    // Sub-tab navigation
    $(document).on('click', '.sub-tab-navigation > .tab-nav > .tab-button', function(e) {
        e.preventDefault();
        var targetId = $(this).data('target');
        if (!targetId) return;

        var $subNav = $(this).closest('.sub-tab-navigation');
        $subNav.find('.tab-button').removeClass('active');
        $subNav.find('.tab-pane').removeClass('active');
        $(this).addClass('active');
        $('#' + targetId).addClass('active');
    });

    // Set initial active states
    $('.tab-navigation').each(function() {
        var $nav = $(this);
        var $activeButton = $nav.find('.tab-button.active');
        
        if ($activeButton.length === 0) {
            $activeButton = $nav.find('.tab-button').first().addClass('active');
        }
        
        var targetId = $activeButton.data('target');
        if (targetId) {
            $('#' + targetId).addClass('active');
            
            // Handle sub-tabs
            var $subNav = $('#' + targetId).find('.sub-tab-navigation');
            if ($subNav.length) {
                var $firstSubTab = $subNav.find('.tab-button').first();
                $firstSubTab.addClass('active');
                
                var firstSubTargetId = $firstSubTab.data('target');
                $('#' + firstSubTargetId).addClass('active');
            }
        }
    });

    // Add map tooltips
    $('span.material-button a').each(function() {
        var href = $(this).attr('href');
        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
    $(document).on('mouseenter mouseleave', '.thumbimage', function(e) {
        var styles = e.type === 'mouseenter' ? {
            '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'
        });
    }
});