MediaWiki:Gadget-TabsSelection.js

Aus Wikivoyage

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
/***************************************************************************
 * tabsSelection v2.0, 2023-02-04
 * Selecting containers by their tabs
 * Original author: Roland Unger
 * Support of desktop and mobile views
 * Documentation: https://de.wikivoyage.org/wiki/Wikivoyage:Gadget-TabsSelection.js
 * License: GPL-2.0+, CC-by-sa 3.0
 ***************************************************************************/

( function ( $ ) {
	'use strict';

	var tabSelect = {};

	tabSelect.selectContainer = function( which, element ) {
		var i = 0, tabs, conts;

		tabs = $( '.voy-tab', element );
		tabs.each( function() {
			if ( i == which ) {
				$( this ).addClass( 'voy-mainTab' ).attr( 'title', '' );
			} else {
				$( this ).removeClass( 'voy-mainTab' )
					.attr( 'title', 'Zeige ' + $( this ).text() );
			}
			i++;
		});

		i = 0;
		conts = $( '.voy-tabbedContainer', element );
		conts.each( function() {
			$( this ).css( 'display', i == which ? 'block' : 'none' );
			i++;
		});
	};

	tabSelect.processEvent = function( event ) {
		var element, tabs, i = 0, which;
		if ( $( event.target ).hasClass( 'voy-mainTab' ) ) {
			return;
		}

		element = $( event.target ).closest( '.voy-tabbedContainers' );
		tabs = $( '.voy-tab', element );

		tabs.each( function() {
			if ( $( this ).is( event.target  ) ) {
				which = i;
			}
			i++;
		});
		tabSelect.selectContainer( which, element );
	};

	tabSelect.init = function() {
		var i, divs, tabs, conts, count;

		divs = $( '.voy-tabbedContainers' );
		if ( !divs.length ) {
			return;
		}
		$( '.voy-tabbedContainers .voy-tabsWrapper' ).addClass( 'voy-js' );

		divs.each( function() {
			tabs = $( '.voy-tab', $( this ) );
			conts = $( '.voy-tabbedContainer', $( this ) );
			count = Math.min(tabs.length, conts.length);
			if ( !count ) {
				return;
			}

			$( '.voy-tabsWrapper', $( this ) ).css( 'display', 'block' );
			tabs.click( function( event ) { 
				tabSelect.processEvent( event );
			} );
			if (tabs.length > count) {
				for ( i = count; i < tabs.length; i++ ) {
					tabs[ i ].style.display = 'none';
				}
			}
			tabSelect.selectContainer( 0, $( this ) );			
		});
	};

	$( tabSelect.init );

} ( jQuery ) );