MediaWiki:Common.js: Difference between revisions

From Medalist Wiki
No edit summary
No edit summary
Line 3: Line 3:
mw.loader.using(['mediawiki.api', 'mediawiki.util'], function() {
mw.loader.using(['mediawiki.api', 'mediawiki.util'], function() {
     $(function() {
     $(function() {
         // Create a simpler toggle that matches the existing navigation style
         // Create a simple mode selector as a normal navigation item
         var $toggleContainer = $(
         var $modeSelector = $(
             '<div class="content-mode-selector">' +
             '<li class="mw-list-item mode-nav-item">' +
                 '<div class="mode-toggle vector-menu-heading">' +
                '<span class="mode-text">Mode: <span class="current-mode">Anime</span></span>' +
                     'Mode: <span class="mode-label">Anime</span>' +
                 '<div class="mode-menu">' +
                    '<a class="mode-option" data-mode="anime">Anime Mode</a>' +
                     '<a class="mode-option" data-mode="manga">Manga Mode</a>' +
                 '</div>' +
                 '</div>' +
                '<div class="mode-options">' +
             '</li>'
                    '<a class="mode-option" data-mode="anime">Caught up to Anime</a>' +
                    '<a class="mode-option" data-mode="manga">Caught up to Manga</a>' +
                '</div>' +
             '</div>'
         );
         );


         // Insert it after the existing Mode: Manga text
         // Insert it into the navigation list at the top
         $('.vector-menu-portal:first').prepend($toggleContainer);
         $('#mw-navigation .vector-menu-content ul').first().prepend($modeSelector);
          
          
         // Initialize with stored preference
         // Initialize from stored preference
         var currentMode = localStorage.getItem('contentMode') || 'anime';
         var currentMode = localStorage.getItem('contentMode') || 'anime';
         updateContentDisplay(currentMode);
         updateContentDisplay(currentMode);
Line 29: Line 27:
             localStorage.setItem('contentMode', mode);
             localStorage.setItem('contentMode', mode);
             updateContentDisplay(mode);
             updateContentDisplay(mode);
            $('.mode-menu').removeClass('visible');
         });
         });


         // Toggle options visibility
         // Toggle menu visibility
         $('.mode-toggle').on('click', function() {
         $('.mode-text').on('click', function(e) {
             $('.mode-options').toggleClass('visible');
            e.preventDefault();
             $('.mode-menu').toggleClass('visible');
        });
 
        // Close menu when clicking elsewhere
        $(document).on('click', function(e) {
            if (!$(e.target).closest('.mode-nav-item').length) {
                $('.mode-menu').removeClass('visible');
            }
         });
         });
     });
     });
Line 47: Line 54:
     }
     }
      
      
     // Update interface
     // Update the mode display text
     $('.mode-label').text(mode.charAt(0).toUpperCase() + mode.slice(1));
     $('.current-mode').text(mode.charAt(0).toUpperCase() + mode.slice(1));
   
    // Update active state in menu
     $('.mode-option').removeClass('active');
     $('.mode-option').removeClass('active');
     $('.mode-option[data-mode="' + mode + '"]').addClass('active');
     $('.mode-option[data-mode="' + mode + '"]').addClass('active');
}
}

Revision as of 18:00, 6 February 2025

/* Any JavaScript here will be loaded for all users on every page load. */
// MediaWiki:Common.js
mw.loader.using(['mediawiki.api', 'mediawiki.util'], function() {
    $(function() {
        // Create a simple mode selector as a normal navigation item
        var $modeSelector = $(
            '<li class="mw-list-item mode-nav-item">' +
                '<span class="mode-text">Mode: <span class="current-mode">Anime</span></span>' +
                '<div class="mode-menu">' +
                    '<a class="mode-option" data-mode="anime">Anime Mode</a>' +
                    '<a class="mode-option" data-mode="manga">Manga Mode</a>' +
                '</div>' +
            '</li>'
        );

        // Insert it into the navigation list at the top
        $('#mw-navigation .vector-menu-content ul').first().prepend($modeSelector);
        
        // Initialize from stored preference
        var currentMode = localStorage.getItem('contentMode') || 'anime';
        updateContentDisplay(currentMode);
        
        // Handle mode selection
        $('.mode-option').on('click', function(e) {
            e.preventDefault();
            var mode = $(this).data('mode');
            localStorage.setItem('contentMode', mode);
            updateContentDisplay(mode);
            $('.mode-menu').removeClass('visible');
        });

        // Toggle menu visibility
        $('.mode-text').on('click', function(e) {
            e.preventDefault();
            $('.mode-menu').toggleClass('visible');
        });

        // Close menu when clicking elsewhere
        $(document).on('click', function(e) {
            if (!$(e.target).closest('.mode-nav-item').length) {
                $('.mode-menu').removeClass('visible');
            }
        });
    });
});

function updateContentDisplay(mode) {
    // Update content visibility
    $('.manga-content, .anime-content').hide();
    if (mode === 'manga') {
        $('.manga-content, .anime-content').show();
    } else {
        $('.anime-content').show();
    }
    
    // Update the mode display text
    $('.current-mode').text(mode.charAt(0).toUpperCase() + mode.slice(1));
    
    // Update active state in menu
    $('.mode-option').removeClass('active');
    $('.mode-option[data-mode="' + mode + '"]').addClass('active');
}