MediaWiki:Common.js: Difference between revisions
No edit summary |
No edit summary |
||
Line 2: | Line 2: | ||
mw.loader.using(['mediawiki.api', 'mediawiki.util'], function() { | mw.loader.using(['mediawiki.api', 'mediawiki.util'], function() { | ||
$(function() { | $(function() { | ||
// Create | // Create a single unified toggle button with dropdown | ||
var $ | var $toggleContainer = $('<li class="vector-menu-dropdown vector-menu vector-menu-portal mw-list-item" id="content-mode-toggle">' + | ||
'<span> | '<a class="vector-menu-heading vector-menu-checkbox-expanded">' + | ||
'</a>' | '<span class="vector-menu-heading-label">Mode: </span>' + | ||
'<span class="mode-label">Anime</span>' + | |||
'</a>' + | |||
'<ul>' + | '<div class="vector-menu-content">' + | ||
'<ul class="menu">' + | |||
'<li data-mode="anime"><a>Caught up to Anime</a></li>' + | '<li data-mode="anime"><a>Caught up to Anime</a></li>' + | ||
'<li data-mode="manga"><a>Caught up to Manga</a></li>' + | '<li data-mode="manga"><a>Caught up to Manga</a></li>' + | ||
'</ul>' + | '</ul>' + | ||
'</div>'); | '</div>' + | ||
'</li>'); | |||
// Insert | |||
$(' | // Insert at the start of the left navigation | ||
$('#mw-panel .vector-menu-portal:first').before($toggleContainer); | |||
// Get user's current preference | // Get user's current preference | ||
Line 25: | Line 24: | ||
// Handle toggle clicks | // Handle toggle clicks | ||
$(' | $('#content-mode-toggle .menu li').on('click', function() { | ||
var mode = $(this).data('mode'); | var mode = $(this).data('mode'); | ||
localStorage.setItem('contentMode', mode); | localStorage.setItem('contentMode', mode); | ||
updateContentDisplay(mode); | updateContentDisplay(mode); | ||
}); | |||
// Toggle dropdown on click | |||
$('#content-mode-toggle > a').on('click', function(e) { | |||
e.preventDefault(); | |||
$('#content-mode-toggle').toggleClass('vector-menu-expanded'); | |||
}); | }); | ||
}); | }); | ||
Line 42: | Line 47: | ||
} | } | ||
// Update | // Update menu state | ||
$(' | $('#content-mode-toggle .menu li').removeClass('active'); | ||
$(' | $('#content-mode-toggle .menu li[data-mode="' + mode + '"]').addClass('active'); | ||
// Update | // Update label | ||
$('#content-toggle | $('#content-mode-toggle .mode-label').text(mode.charAt(0).toUpperCase() + mode.slice(1)); | ||
} | } |
Revision as of 17:55, 6 February 2025
/* Any JavaScript here will be loaded for all users on every page load. */
mw.loader.using(['mediawiki.api', 'mediawiki.util'], function() {
$(function() {
// Create a single unified toggle button with dropdown
var $toggleContainer = $('<li class="vector-menu-dropdown vector-menu vector-menu-portal mw-list-item" id="content-mode-toggle">' +
'<a class="vector-menu-heading vector-menu-checkbox-expanded">' +
'<span class="vector-menu-heading-label">Mode: </span>' +
'<span class="mode-label">Anime</span>' +
'</a>' +
'<div class="vector-menu-content">' +
'<ul class="menu">' +
'<li data-mode="anime"><a>Caught up to Anime</a></li>' +
'<li data-mode="manga"><a>Caught up to Manga</a></li>' +
'</ul>' +
'</div>' +
'</li>');
// Insert at the start of the left navigation
$('#mw-panel .vector-menu-portal:first').before($toggleContainer);
// Get user's current preference
var currentMode = localStorage.getItem('contentMode') || 'anime';
updateContentDisplay(currentMode);
// Handle toggle clicks
$('#content-mode-toggle .menu li').on('click', function() {
var mode = $(this).data('mode');
localStorage.setItem('contentMode', mode);
updateContentDisplay(mode);
});
// Toggle dropdown on click
$('#content-mode-toggle > a').on('click', function(e) {
e.preventDefault();
$('#content-mode-toggle').toggleClass('vector-menu-expanded');
});
});
});
function updateContentDisplay(mode) {
$('.manga-content, .anime-content').hide();
if (mode === 'manga') {
$('.manga-content, .anime-content').show();
} else {
$('.anime-content').show();
}
// Update menu state
$('#content-mode-toggle .menu li').removeClass('active');
$('#content-mode-toggle .menu li[data-mode="' + mode + '"]').addClass('active');
// Update label
$('#content-mode-toggle .mode-label').text(mode.charAt(0).toUpperCase() + mode.slice(1));
}