MediaWiki:Common.js: differenze tra le versioni

Da Semi del Verbo, l'enciclopedia dell'influenza del Vangelo sulla cultura
Nessun oggetto della modifica
Nessun oggetto della modifica
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 172: Riga 172:
}
}
}
}
 
$( checkAutocollapse );
$( checkAutocollapse );
}( mediaWiki, jQuery ) );
}( mediaWiki, jQuery ) );

Versione attuale delle 16:26, 22 mar 2023

/**
 * Mantenere il codice di MediaWiki:Common.js il più breve possibile, in quanto è caricato
 * da ciascuna pagina, per tutti gli utenti che navigano sulla versione desktop.
 * Creare piuttosto accessori abilitati di default (gli accessori sono infatti moduli
 * ottimizzati del ResourceLoader con la possibilità di aggiungere dipendenze, ecc.).
 */
/* global mediaWiki, jQuery */

( function ( mw, $ ) {
	'use strict';

	// ============================
	//     Caricamento script
	// ============================

	/**
	 * Ricerca in Wikidata
	 */
	if (
		mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search' ||
		( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgCanonicalSpecialPageName' ) === false )
	) {
		mw.loader.load( '//en.wikipedia.org/w/index.php?title=MediaWiki:Wdsearch.js&action=raw&ctype=text/javascript' );
	}

	/**
	 * Menu interprogetto nella sidebar, vedi anche [[Modulo:Interprogetto]]
	 */
	//importScript( 'MediaWiki:InterProject.js' );

	// ============================
	//     Modifica HTML pagine
	// ============================

	/**
	 * Portlets
	 */
	function addPortlets() {
		mw.loader.using( 'mediawiki.util' )
			.done( function () {
				// Collegamento diretto alla pagina di upload di Commons nel portlet Strumenti
				mw.util.addPortletLink( 'p-tb', '//commons.wikimedia.org/wiki/Commons:Upload/it', 'Carica su Commons',
					't-uploadcommons', 'Carica file multimediali su Wikimedia Commons', '', '#t-specialpages' );

				// In "Pagina principale" aggiunge il link alla lista completa di tutte le pagine
				if (
					mw.config.get( 'wgIsMainPage' ) ||
					mw.config.get( 'wgPageName' ) === "Discussione:Pagina_principale"
				) {
					var link = mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/Lista_di_Wikipedie',
						'Lista completa', 'interwiki-completelist', 'Lista completa delle Wikipedie' );
					$( link ).css( 'font-weight', 'bold' );
				}
			} )
			.fail( function () {
				console.warn( 'MediaWiki:Common.js - Impossibile aggiungere link nella sidebar.' );
			} );
	}

	$( addPortlets );

	/**
	 * Aggiunge un combobox a [[MediaWiki:Edittools]] per selezionare un gruppo di caratteri speciali.
	 */
	function comboboxEdittools() {
		var $specialChars = $( '#specialchars' );
		if ( $specialChars.length ) {
			var $select = $( '<select>' ).change( function () {
				$specialChars.find( 'p' ).hide();
				$specialChars.find( 'option:selected' ).data().show();
			} );
			$specialChars.find( 'p' ).each( function () {
				$( '<option>' ).html( $( this ).attr( 'id' ).replace( /_/g, ' ' ) )
					.data( $( this ) ).appendTo( $select );
			} );
			$specialChars.prepend( $select );
			$select.change();
		}
	}

	$( comboboxEdittools );

	// ============================
	//    Supporto ai template
	// ============================

	/**
	 * Utilizzata con [[template:Titolo errato]] per cambiare il titolo di una pagina,
	 * cerca un HTML (creato dal template) contenente:
	 * <div id="RealTitleBanner"><span id="RealTitle">titolo</span></div>
	 * Si può disattivare con un elemento con id="DisableRealTitle".
	 * Importata inizialmente da [[en:MediaWiki:Common.js]].
	 */
	function checkRealTitleBanner() {
		// Possibilità di disabilitarlo
		if ( window.disableCheckRealTitleBanner ) {
			return;
		}

		var $realTitleBanner = $( '#RealTitleBanner' );
		if ( $realTitleBanner.length && !$( '#DisableRealTitle' ).length ) {
			var $realTitle = $realTitleBanner.find( '#RealTitle' );
			var $firstH1 = $( 'h1:first' );
			if ( $realTitle.length && $firstH1.length ) {
				$realTitleBanner.hide();
				$firstH1.html( $realTitle.html() );
				document.title = $realTitle.text() + ' - Wikipedia';
			}
		}
	}

	$( checkRealTitleBanner );

	/**
	 * Utilizzata con [[template:Galleria]] per creare una galleria di immagini,
	 * cerca un HTML (creato dal template) contenente:
	 * <div class="ImageGroup"><div class="ImageGroupUnits">immagini</div></div>
	 * Idea originale da [[fr:MediaWiki:Common.js]] del 2007.
	 * @author [[it:User:Rotpunkt]]
	 */
	function updateImageGroup( currImg, $images, $countInfo, $prevLink, $nextLink ) {
		$images.hide().eq( currImg ).show();
		$countInfo.html( '(' + ( currImg + 1 ) + '/' + $images.length + ')' );
		$prevLink.toggle( currImg !== 0 );
		$nextLink.toggle( currImg !== $images.length - 1 );
	}

	function initImageGroup() {
		$( 'div.ImageGroup > div.ImageGroupUnits' ).each( function ( i, imageGroupUnits ) {
			var currImg = 0;
			var $images = $( imageGroupUnits ).children( '.center' );
			var $countInfo = $( '<kbd>' ).css( 'font-size', '110%' );
			var $prevLink =	$( '<a>' )
				.attr( 'href', '#' ).attr( 'title', 'Immagine precedente' )
				.text( '◀' ).css( 'text-decoration', 'none' )
				.click( function ( e ) {
					e.preventDefault();
					updateImageGroup( currImg -= 1, $images, $countInfo, $prevLink, $nextLink );
				} );
			var $nextLink =	$( '<a>' )
				.attr( 'href', '#' ).attr( 'title', 'Immagine successiva' )
				.text( '▶' ).css( 'text-decoration', 'none' )
				.click( function ( e ) {
					e.preventDefault();
					updateImageGroup( currImg += 1, $images, $countInfo, $prevLink, $nextLink );
				} );
			updateImageGroup( currImg, $images, $countInfo, $prevLink, $nextLink );
			$( imageGroupUnits ).prepend( $prevLink, $countInfo, $nextLink );
		} );
	}

	$( initImageGroup );

	/**
	 * Utilizzata con [[Template:Navbox]]: se presente più di una table
	 * con classi navbox e mw-collapsible, quelle con autocollapse si chiudono da sole.
	 * @author [[it:User:Rotpunkt]]
	 */
	function checkAutocollapse() {
		if ( $( 'table.navbox.mw-collapsible' ).length > 1 ) {
			$( 'table.navbox.mw-collapsible.autocollapse' ).each( function ( i, el ) {
				if ( !$( el ).hasClass( 'mw-collapsed' ) ) {
					// makeCollapsible a volte è eseguita prima, a volte successivamente al Common.js,
					// se è già stata eseguita, non resta che simulare un click.
					if ( $( el ).data( 'mw-made-collapsible' ) ) {
						$( el ).find( '.mw-collapsible-toggle' ).click();
					} else {
						$( el ).addClass( 'mw-collapsed' );
					}
				}
			} );
		}
	}
	
	$( checkAutocollapse );
}( mediaWiki, jQuery ) );