MediaWiki:Gadget-BreadcrumbTrail.js

Hinweis: Leere nach dem Veröffentlichen 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/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
// <nowiki>
/***************************************************************************
 * Gadget-BreadcrumbTrail.js v1.0, 2023-02-01
 * Shortens breadcrumb trail in mobile view
 * Original author: Roland Unger
 * Documentation: https://de.wikivoyage.org/wiki/Gadget-BreadcrumbTrail.js
 * License: GPL-2.0+, CC-by-sa 3.0
 ***************************************************************************/

( function ( $ ) {
	'use strict';
    
	const btnTitle = 'Schalter öffnet und schließt eine Liste mit allen Brotkrümel-Links.',
		buttonId = 'voy-bct-button',
		buttonDown = 'voy-bct-button-down',
		buttonUp = 'voy-bct-button-up',
		bctListId = 'voy-bct-list',
		minCount = 3;

	var timeout;

	function removeBctList( tag ) {
		clearTimeout( timeout );
		$( '#' + bctListId ).remove();
		$( '#' + buttonId, tag ).addClass( buttonDown )
			.removeClass( buttonUp );
	}

    function replaceBreadcrumbTrail() {
		var tag = $( '.skin-minerva .ext-geocrumbs-breadcrumbs' ).first();
		if ( tag.length === 0 ) {
			return;
		}

		var bctButton, breadcrumbs, count, i,
			changed = false, innerHTML = tag.html().trim();

		// Replace Breadcrumb trail if more than three members
		innerHTML = innerHTML.replace( /&gt;/g, '>' );
		if ( innerHTML.indexOf( '<bdi><a href="/wiki/' ) === 0 &&
			innerHTML.indexOf( ' > ' ) > 0 ) {
			breadcrumbs = innerHTML.split( ' > ' ).map( function( item ) {
				return item.trim();
			});
			count = breadcrumbs.length;
			if ( count > minCount ) {
				innerHTML = breadcrumbs[ 0 ] +
					' &gt; <a id="' + buttonId + '" href="#">…</a>';
				for ( i = count + 1 - minCount; i < count; i++ ) {
					innerHTML += ' &gt; ' + breadcrumbs[ i ];
				}
				tag.html( innerHTML );
				changed = true;
			}
		}
		if ( !changed ) {
			return;
		}

		// Show BCT list on click
		bctButton = $( '#' + buttonId, tag )
			.addClass( buttonDown )
			.attr( 'title', btnTitle )
				.click( function() {
					var bctList = $( '#' + bctListId );
					if ( bctList.length ) {
						removeBctList( tag );
					} else {
						var offset = tag.offset();
						var top = offset.top + tag.outerHeight();
						var left = offset.left;
						bctList = $( '<div></div>' )
							.attr( { 'id': bctListId, role: 'dialog' } )
							.css( { 'position': 'absolute', 'left': left, 'top': top } );
						$( 'body' ).append( bctList );
						var ul = $( '<ul></ul>' );
						for ( i = 1; i < breadcrumbs.length - 1; i++ ) {
							ul.append( $( '<li></li>' ).html( breadcrumbs[ i ] ) );
						}
						bctList.append( ul );
						timeout = setTimeout( function() { removeBctList( tag ); }, 10000 );
						bctButton.addClass( buttonUp )
							.removeClass( buttonDown );
					}
			});
	}
	$( replaceBreadcrumbTrail );

} ( jQuery ) );

// </nowiki>