MediaWiki:Common.js

Aus Wikidebatten
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Gehe zu Menü → Einstellungen (Opera → Einstellungen auf dem Mac) und dann auf Datenschutz & Sicherheit → Browserdaten löschen → Gespeicherte Bilder und Dateien.
/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios en cada carga de página */

function moveSearchBar( $content ) {
	// Sélectionner l'élément #p-search
    var pSearchElement = document.getElementById('p-search');

    // Sélectionner l'élément #mw-page-base
    var mwPageBaseElement = document.getElementById('mw-page-base');

    // Vérifier si les deux éléments existent
    if (pSearchElement && mwPageBaseElement) {
        // Déplacer #p-search avant #mw-page-base
        mwPageBaseElement.parentNode.insertBefore(pSearchElement, mwPageBaseElement);
        // Ajouter display: block à #p-search
        pSearchElement.style.display = 'block';
    }
}
mw.hook( 'wikipage.content' ).add( moveSearchBar );

$(document).ready(function() {
	// Copier le sommaire dans le menu latéral en supprimant les éléments toc-level-2
	var toc = $('#toc');
	var sidetoc = toc.clone().attr('id', 'sidetoc');
	sidetoc.find('.toclevel-2').remove();
	var panel = $('#mw-panel');
	panel.append(sidetoc);
	$('#sidetoc').hide();
});

$(window).scroll(function() {
	var breadcrumb = $(document).find('#fil-ariane');
	var mwPanelElement = $('#mw-panel');
	var mwPanelOffset = mwPanelElement.offset().top + mwPanelElement.outerHeight();
	var scrollTop = $(window).scrollTop();

	if (mwPanelOffset < scrollTop) {
		if (breadcrumb.length) {
			var breadcrumbHeight = $('#fil-ariane').height();
			var sidetocOffset = breadcrumbHeight;
			$('#sidetoc').css('top', sidetocOffset + 'px');
			$('#sidetoc').show();
		} else {
			$('#sidetoc').show();
		}
	} else {
		$('#sidetoc').hide();
	}
});

$(document).ready(function() {
	var h2Elements = $('#bodyContent h2');
	var toctextElements = $('#sidetoc .toclevel-1 a .toctext');

	function updateActiveElement() {
		var activeElementIndex = -1;
		var mouseY = $(window).scrollTop() + $(window).height() / 2;

		h2Elements.each(function(index) {
			var currentH2 = $(this);
			var nextH2 = h2Elements.eq(index + 2);

			var currentH2Offset = currentH2.offset().top;
			var nextH2Offset = nextH2.length ? nextH2.offset().top : $(document).height();

			if (currentH2Offset <= mouseY && nextH2Offset > mouseY) {
				activeElementIndex = index;
				return false; // Sortir de la boucle each
			}
		});

		// Appliquer le style aux éléments du sommaire en fonction de l'élément actif
		toctextElements.removeClass('active');
		if (activeElementIndex !== -1) {
			toctextElements.eq(activeElementIndex).addClass('active');
		}
	}

	$(window).scroll(function() {
		updateActiveElement();
	});

	$(window).mousemove(function() {
		updateActiveElement();
	});
});

/* Pour créer un menu déroulant dans la barre personnelle */
function personalDropdown() {
	// Toujours forcer l’affichage inline du bloc #p-personal
	var personalBlock = document.getElementById('p-personal');
	if (personalBlock) {
		personalBlock.style.display = 'inline';
	}

	// Vérifier si l’utilisateur est connecté ou anonyme
	var userPage = document.getElementById('pt-userpage');
	if (userPage) {
		// Cas utilisateur connecté
		var ul = document.querySelector('.vector-menu-content-list');
		var startElement = document.getElementById('pt-mytalk');
		var endElement = document.getElementById('pt-logout');

		var dropdownLi = document.createElement('li');
		dropdownLi.style.position = 'relative';
		dropdownLi.style.paddingTop = '2px';

		var dropdownLink = document.createElement('a');
		dropdownLink.href = '#';
		dropdownLink.style.cursor = 'pointer';
		dropdownLink.style.height = '24px';
		dropdownLink.style.display = 'inline-block';

		var avatarSpan = document.createElement('span');
		avatarSpan.style.backgroundImage = 'linear-gradient(transparent,transparent),url(/w/skins/Vector/resources/skins.vector.styles/images/user-avatar.svg?b7f58)';
		avatarSpan.style.backgroundRepeat = 'no-repeat';
		avatarSpan.style.width = '24px';
		avatarSpan.style.height = '26px';
		avatarSpan.style.display = 'inline-block';
		avatarSpan.style.opacity = '0.85';

		var arrowSpan = document.createElement('span');
		arrowSpan.style.backgroundImage = 'linear-gradient(transparent,transparent),url(/w/skins/Vector/resources/skins.vector.styles/images/arrow-down.svg?e7827)';
		arrowSpan.style.height = '20px';
		arrowSpan.style.width = '12px';
		arrowSpan.style.display = 'inline-block';
		arrowSpan.style.backgroundRepeat = 'no-repeat';
		arrowSpan.style.opacity = '0.85';

		dropdownLink.appendChild(avatarSpan);
		dropdownLink.appendChild(arrowSpan);

		dropdownLi.appendChild(dropdownLink);

		var dropdownMenu = document.createElement('ul');
		dropdownMenu.style.display = 'none';
		dropdownMenu.className = 'pt-dropdown';

		var currentElement = startElement;
		while (currentElement && currentElement !== endElement.nextElementSibling) {
			var nextElement = currentElement.nextElementSibling;
			dropdownMenu.appendChild(currentElement);
			currentElement = nextElement;
		}

		dropdownLi.appendChild(dropdownMenu);

		var notificationsNotice = document.getElementById('pt-notifications-notice');
		notificationsNotice.parentNode.insertBefore(dropdownLi, notificationsNotice.nextSibling);

		dropdownLink.onclick = function(e) {
			e.preventDefault();
			if (dropdownMenu.style.display === 'block') {
				dropdownMenu.style.display = 'none';
			} else {
				dropdownMenu.style.display = 'block';
			}
		};

		document.addEventListener('click', function(e) {
			if (!dropdownLi.contains(e.target)) {
				dropdownMenu.style.display = 'none';
			}
		});
	} else {
		// Cas utilisateur anonyme
		var ul = document.querySelector('.vector-menu-content-list');
		var startElement = document.getElementById('pt-anontalk');
		var endElement = document.getElementById('pt-login');

		var dropdownLi = document.createElement('li');
		dropdownLi.style.position = 'relative';
		dropdownLi.style.paddingTop = '2px';

		var dropdownLink = document.createElement('a');
		dropdownLink.href = '#';
		dropdownLink.style.cursor = 'pointer';
		dropdownLink.style.height = '24px';
		dropdownLink.style.display = 'inline-block';

		var avatarSpan = document.createElement('span');
		avatarSpan.style.backgroundImage = 'linear-gradient(transparent,transparent),url(/w/skins/Vector/resources/skins.vector.styles/images/user-avatar.svg?b7f58)';
		avatarSpan.style.backgroundRepeat = 'no-repeat';
		avatarSpan.style.height = '21px';
		avatarSpan.style.width = '24px';
		avatarSpan.style.display = 'inline-block';
		avatarSpan.style.opacity = '0.85';

		var arrowSpan = document.createElement('span');
		arrowSpan.style.backgroundImage = 'linear-gradient(transparent,transparent),url(/w/skins/Vector/resources/skins.vector.styles/images/arrow-down.svg?e7827)';
		arrowSpan.style.height = '21px';
		arrowSpan.style.width = '12px';
		arrowSpan.style.display = 'inline-block';
		arrowSpan.style.backgroundRepeat = 'no-repeat';
		arrowSpan.style.verticalAlign = 'middle';
		arrowSpan.style.opacity = '0.85';

		dropdownLink.appendChild(avatarSpan);
		dropdownLink.appendChild(arrowSpan);

		dropdownLi.appendChild(dropdownLink);

		var dropdownMenu = document.createElement('ul');
		dropdownMenu.style.display = 'none';
		dropdownMenu.className = 'pt-dropdown';

		var currentElement = startElement;
		while (currentElement && currentElement !== endElement.nextElementSibling) {
			var nextElement = currentElement.nextElementSibling;
			dropdownMenu.appendChild(currentElement);
			currentElement = nextElement;
		}

		dropdownLi.appendChild(dropdownMenu);

		var anonUserPage = document.getElementById('pt-anonuserpage');
		anonUserPage.parentNode.insertBefore(dropdownLi, anonUserPage.nextSibling);

		dropdownLink.onclick = function(e) {
			e.preventDefault();
			if (dropdownMenu.style.display === 'block') {
				dropdownMenu.style.display = 'none';
			} else {
				dropdownMenu.style.display = 'block';
			}
		};

		document.addEventListener('click', function(e) {
			if (!dropdownLi.contains(e.target)) {
				dropdownMenu.style.display = 'none';
			}
		});
	}
}
personalDropdown();


/* global mw, $ */
(function () {
	function buildLangMenu() {
		var $userPageItem = $('#pt-userpage');
		if (!$userPageItem.length) {
			return;
		}
		// ✅ Si aucun lien interlangue, on arrête tout
		var $interwikiLinks = $('li.interlanguage-link');
		if ($interwikiLinks.length === 0) {
			clearInterval(waitForReady);
			return;
		}

		/* -------- Construction du bloc -------- */
		var $menuWrapper = $('<div>').addClass('menu-langues');

		var $icon = $('<span>').addClass('menu-langues-icon');
		var $toggle = $('<span>')
			.addClass('menu-langues-toggle')
			.text('Deutsch');

		// Remplace ul par un div
		var $dropdown = $('<div>')
			.addClass('languages-dropdown')
			.css('display', 'none');

		var $header = $('<div>')
			.addClass('langues-disponibles')
			.text($interwikiLinks.length > 0 ? 'Andere Sprachen' : 'Keine weiteren Sprachen verfügbar')
			.css('cursor', 'default');

		$dropdown.append($header);

		// Nouveau <ul> pour y insérer les liens interlangues
		if ($interwikiLinks.length > 0) {
			var $list = $('<ul>');
			$interwikiLinks.appendTo($list);
			$dropdown.append($list);
		}

		/* -------- Bouton « Modifier les liens interlangues » -------- */
		var $editButton = $('#bouton-modifier-interlangue');
		if ($editButton.length) {
			var $link = $editButton.find('a').first();
			if ($link.length) {
				var $newLink = $link.clone()
					.text('Modifier les liens interlangues')
					.css({
						color: 'inherit',
						textDecoration: 'none',
						cursor: 'pointer'
					});

				$('<div>')
					.addClass('modifier-langues')
					.append($newLink)
					.appendTo($dropdown);
			}
			$editButton.remove();
		}

		/* -------- Assemblage final -------- */
		$menuWrapper
			.append($icon)
			.append($toggle)
			.append($dropdown);

		$userPageItem.before($menuWrapper);

		/* -------- Comportement déroulant -------- */
		$menuWrapper.on('click', function (e) {
			e.stopPropagation();
			$dropdown.toggle();
			$menuWrapper.toggleClass('open');
		});

		$(document).on('click', function () {
			$dropdown.hide();
			$menuWrapper.removeClass('open');
		});

		clearInterval(waitForReady);
	}

	var waitForReady = setInterval(buildLangMenu, 300);
})();