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
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
/*************************************************************************** * scrollGallery v2.0, 2023-08-30 * Scrolling through Image Galleries * Original author: Roland Unger * Support of desktop and mobile views * Documentation: https://de.wikivoyage.org/wiki/Wikivoyage:Gadget-ScrollGallery.js * License: GPL-2.0+, CC-by-sa 3.0 ***************************************************************************/ /* eslint-disable mediawiki/class-doc */ ( function ( mw, $ ) { 'use strict'; var scrollGalleries = function() { const str = { prev : '◀', next : '▶', counter: '$1/$2' }; // preloadImages() is only used in mobile view. It substitutes the lazy // image mode which prevents loading hidden images. function preloadImages() { $( 'noscript' ).each( function() { var p = $( this ).next(); // <span class="lazy-image-placeholder" ...> if ( p.hasClass( 'lazy-image-placeholder' ) ) { var img = $( '<img />', { src : p.attr( 'data-src' ), width : p.attr( 'data-width' ), height: p.attr( 'data-height' ), alt : p.attr( 'data-alt' ) } ); p.replaceWith( img ); } } ); } function processEvent( event, diff ) { var target = $( event.target ), unit = target.closest( '.voy-ImageGrUnit' ), group = target.closest( '.voy-ImageGroup' ), imgs = $( '.voy-ImageGrUnit', group ), which = 0; imgs.each( function( index ) { if ( $( this ).is( unit ) ) { which = index; return false; // breaks } } ); which += diff; if ( which < 0 ) { which = imgs.length - 1; } else if ( which > imgs.length - 1 ) { which = 0; } imgs.each( function( index ) { $( this ).toggle( index == which ); } ); } function hideButton( button ) { button.attr( { class: 'voy-ImageNoLoop', title: '' } ); } function setButtonAttr( button, imgIndex, imgs, diff ) { button.attr( { class: 'voy-ImageButton', title: mw.format( str.counter, imgIndex, imgs.length ) } ) .click( function( event ) { processEvent( event, diff ); } ); } function makeImageHeaders( imgs, firstImg, showUnitHeader, noLoop ) { // for multiple images in a single scroll gallery imgs.each( function( index ) { var $this = $( this ), imgIndex; // add scroll buttons to the header if ( showUnitHeader ) { // setting link to the previous image var prevLink = $( '<span>' + str.prev + '</span>' ); // preventing loops at the first or large image if ( index === 0 && noLoop ) { hideButton( prevLink ); } else { imgIndex = ( index === 0 ) ? imgs.length : index; setButtonAttr( prevLink, imgIndex, imgs, -1 ); } // setting link to the next image var nextLink = $( '<span>' + str.next + '</span>' ); if ( index === imgs.length - 1 && noLoop ) { hideButton( nextLink ); } else { imgIndex = ( index === imgs.length - 1 ) ? 1 : index + 2; setButtonAttr( nextLink, imgIndex, imgs, 1 ); } // setting counter values between previous and next links var counter = mw.format( str.counter, index + 1, imgs.length ), imgHead = $( '<div class="voy-ImageGrUnitHeader voy-timeless-no-emoji"> ' + counter + ' </div>' ) .prepend( prevLink ) .append( nextLink ); $this.prepend( imgHead ); } $this.toggle( index == firstImg ); } ); } function makeScrollGalleryHeaders( galleries ) { // for multiple scroll galleries galleries.each( function() { var $this = $( this ), imgs = $( '.voy-ImageGrUnit', $this ); if ( imgs.length < 2 ) { return; } // getting gallery width excluding width of the header from // a (right) floated clone var clone = $this.clone(); $( '.voy-ImageGrUnit', clone ).show(); $( '.voy-ImageGroupHeader', clone ).hide(); clone.show() .css( { visibility: 'hidden', float: 'right' } ) .appendTo( $( 'body' ) ); $this.css( 'width', clone.width() + 'px' ); clone.remove(); var firstImg = 0; // starting with time-depending image var timeDependent = $this.hasClass( 'voy-timeDependent' ); if ( timeDependent ) { var timeNow = new Date(); timeNow = timeNow.getHours() + timeNow.getMinutes() / 60; firstImg = Math.floor( timeNow * imgs.length / 24 ); firstImg = Math.min( firstImg, imgs.length - 1 ); } var showUnitHeader = !$this.hasClass( 'voy-hideUnitHeader' ), noLoop = $this.hasClass( 'voy-noLoop' ); makeImageHeaders( imgs, firstImg, showUnitHeader, noLoop ); } ); } function init() { // for VisualEditor and Realtime Preview mw.hook( 'wikipage.content' ).add( function ( $content ) { // getting all scroll galleries var galleries = $( '.voy-ImageGroup', $content ); if ( !galleries.length ) { return; } preloadImages(); makeScrollGalleryHeaders( galleries ); } ); } return { init: init }; } (); $( scrollGalleries.init ); } ( mediaWiki, jQuery ) );