MediaWiki:Common.js: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
Contenuto aggiunto Contenuto cancellato
(vediamo se così va bene)
Nessun oggetto della modifica
 
(30 versioni intermedie di uno stesso utente non sono mostrate)
Riga 2: Riga 2:


/* AGGIUNTE NOSTRE */
/* AGGIUNTE NOSTRE */
/** Per Template:Alert, che mostra un popup minaccioso
* E anche per alertlink
*/


function AbilitaAlert()
{
var spanList = document.getElementsByClassName("alert-load");
var alertLinkList = document.getElementsByClassName("alert-link");
var i;
if(window.disableNonciAlert)
{
return;
}
if(!spanList.length)
{
return;
}
for(i=0;i<spanList.length;i=i+1)
{
alert(spanList[i].textContent);
}

if(!alertLinkList.length)
{
return;
}
for(i=0;i<alertLinkList.length;i=i+1)
{
alertLinkList[i].getElementsByClassName("new")[0].onclick=alert(alertLinkList[i].title);
alertLinkList[i].getElementsByClassName("external text")[0].onclick=alert(alertLinkList[i].title);
}
}
$(AbilitaAlert);


/** Per Template:Sottotitolo, che cambia il sottotitolo della pagina
/** Per Template:Sottotitolo, che cambia il sottotitolo della pagina
*/
*/


//trova il template e il suo contenuto HTML e lo scambia con il sotto titolo del sito, identificato tramite ID
function AbilitaSottotitolo()
function AbilitaSottotitolo()
{
{
Riga 54: Riga 23:
*/
*/


mw.loader.load( '/w/index.php?title=MediaWiki:Insertusername.js&action=raw&ctype=text/javascript' );
//mw.loader.load( '/w/index.php?title=MediaWiki:Insertusername.js&action=raw&ctype=text/javascript' );


function usernameReplace() {
function usernameReplace() {
Riga 65: Riga 34:
}
}
var defaultText = '<Anonimo>';
var defaultText = '<Anonimo>';
if(wgUserName) { //Se la variabile wgUserName ha un valore, significa che l'utente è loggato, e basta sostituirla dove previsto e uscire dalla funzione
if(wgUserName) {
spanList.text(wgUserName);
spanList.text(wgUserName); //Questa funzione esiste solo se l'oggetto su cui la usi è generato in JQuery
return;
return;
}
}
Riga 73: Riga 42:
}
}
var IP = undefined;
var IP = undefined;
$.ajax({ //chiama la API MediaWiki tramite AJAX per trovare i dati dell'utente che sta leggendo la pagina, componendo un URL con dei parametri
$.ajax({
url: wgServer + wgScriptPath + '/api.php?action=query&meta=userinfo&format=xml',
url: wgServer + wgScriptPath + '/api.php?action=query&meta=userinfo&format=xml', //nome sito + path di base per script e altre cose + riferimento all'API, ad una azione che deve compiere (una query) e a due parametri della suddetta
dataType: 'xml',
dataType: 'xml',
async: false,
async: false,
success: function(data) {
success: function(data) { //se la query ha buon fine ne estrae l'IP
IP = $('userinfo', data).attr('name');
IP = $('userinfo', data).attr('name');
}
}
Riga 89: Riga 58:
}
}
});
});
$( ".appellativi" ).css( "display", "inherit" );
$( ".appellativi" ).css( "display", "inherit" ); //dato che in questo punto ci arriva solo e slo se l'IP è stato estratto, posso tranquillamente rendere visibile l'appellativo per IP senza sminchiare niente lol
return;
return;
}
}
$(usernameReplace);
$(usernameReplace);


/** Supporto al Template:Libro**/
function LibroUpdate(libro,num){
var currPag=document.getElementById(''+libro.id + libro.currPage);
var newPag;
libro.currPage+=num;
newPag=document.getElementById(''+libro.id + libro.currPage);
if(newPag){
currPag.style.display="none";
newPag.style.display="inherit";
}
else libro.currPage-=num;
}

function attivaFrecce(libro){
var frecciaP=document.getElementById(libro.id +"Prev");
var frecciaN=document.getElementById(libro.id +"Next");
libro.currPage=1;
frecciaP.addEventListener('click',function(e){LibroUpdate(libro,-1)});
frecciaN.addEventListener('click',function(e){LibroUpdate(libro,1);});
}

function AttivaLibro(){
var bookList=document.getElementsByClassName("libroFlag");
if(bookList.length){
for(var i=0;i<bookList.length;i++){
attivaFrecce(bookList[i]);
}
}
}
$(AttivaLibro);

/**Supporto al Template:Blink **/
function blink()
{
var blinkers=window.blinker;
for(var i=0;i<blinkers.length;i++)
{
if(blinkers[i].style.visibility=="inherit"){
blinkers[i].style.visibility="hidden";
} else {
blinkers[i].style.visibility="inherit";
}
}
}
function enableBlink(){
var blinkers=document.getElementsByClassName("blink");
if(blinkers){
window.blinker=blinkers;
setInterval(blink,125); //Sotto i 125 circa non funziona, per ragioni arcane
}
}
$(enableBlink);

/** Per Template:Alert, che mostra un popup minaccioso
* E anche per alertlink
*/

//mette tutti gli elementi che sono in span di classe alert-load e alert-link in due liste separate

function AbilitaAlert()
{
var spanList = document.getElementsByClassName("alert-load");
var alertLinkList = document.getElementsByClassName("alert-link");
var i;
if(window.disableNonciAlert)
{
return;
}
if(spanList.length) //Se ci sono alert da visualizzare cicla dentro la lista, visualizzandoli in ordine
{
for(i=0;i<spanList.length;i=i+1)
{
alert(spanList[i].textContent);
}
}
if(!alertLinkList.length)
{
return;
}
for(i=0;i<alertLinkList.length;i=i+1) //Se ci sono alertlink, invece, cicla tra quelli presenti nella lista e modifica l'attributo onclick, in modo che esegua la funzione desiderata dopo averci cliccato sopra
{
alertLinkList[i].setAttribute('onclick',"alert(\"" +alertLinkList[i].title+ "\")");
}
}
$(AbilitaAlert);
/** Per il Template:Abbr */
function attivaTooltip(){
var tooltips=document.getElementsByClassName("noncitip");
for (var i=0;i<tooltips.length;i++){
tooltips[i].onmouseover=function(e){ // nota nerd:currentTarget fa in modo che l'evento venga catturato SOLO sull'elemento con classe "noncitip", a cui è attaccato l'handler, e non su qualunque cosa possa essere presente al suo interno
var testo=e.currentTarget.getElementsByClassName("testotip")[0];
testo.style.display="block";
testo.style.bottom=(document.body.scrollHeight - window.scrollY - document.body.clientHeight) + "px";
};
tooltips[i].onmouseout=function(e){
var testo=e.currentTarget.getElementsByClassName("testotip")[0];
testo.style.display="none";
};
}
}

$(attivaTooltip);
/** SCOPIAZZATO DA WIKIPEDIA: https://it.wikipedia.org/w/index.php?title=MediaWiki:Common.js&oldid=102712037 **/
/** SCOPIAZZATO DA WIKIPEDIA: https://it.wikipedia.org/w/index.php?title=MediaWiki:Common.js&oldid=102712037 **/



Versione attuale delle 09:17, 11 mag 2022

/* Il codice JavaScript inserito qui viene caricato da ciascuna pagina, per tutti gli utenti. */

/* AGGIUNTE NOSTRE */


/** Per Template:Sottotitolo, che cambia il sottotitolo della pagina
*/

//trova il template e il suo contenuto HTML e lo scambia con il sotto titolo del sito, identificato tramite ID
function AbilitaSottotitolo()
{
	var $FakeText=$("#SubTitleText");
	var $Target=$("#siteSub");
	if($FakeText.length && $Target.length)
	{
		$Target.html($FakeText.html());
	}
}
$(AbilitaSottotitolo); 


/** per Template:USERNAME, che mostra il nome dell'utente che legge
*/

//mw.loader.load( '/w/index.php?title=MediaWiki:Insertusername.js&action=raw&ctype=text/javascript' ); 

function usernameReplace() {
	var spanList = $('span.insertusername');
    wgServer=mw.config.get("wgServer");
    wgScriptPath=mw.config.get("wgScriptPath");
	wgUserName=mw.config.get("wgUserName");
    if(!spanList.length) {
		return;
	}
	var defaultText = '<Anonimo>';
	if(wgUserName) { //Se la variabile wgUserName ha un valore, significa che l'utente è loggato, e basta sostituirla dove previsto e uscire dalla funzione 
		spanList.text(wgUserName); //Questa funzione esiste solo se l'oggetto su cui la usi è generato in JQuery
		return;
	}
	else {
		spanList.text(defaultText);
	}
	var IP = undefined;
	$.ajax({ //chiama la API MediaWiki tramite AJAX per trovare i dati dell'utente che sta leggendo la pagina, componendo un URL con dei parametri
		url: wgServer + wgScriptPath + '/api.php?action=query&meta=userinfo&format=xml', //nome sito + path di base per script e altre cose + riferimento all'API, ad una azione che deve compiere (una query) e a due parametri della suddetta
		dataType: 'xml',
		async: false,
		success: function(data) { //se la query ha buon fine ne estrae l'IP
			IP = $('userinfo', data).attr('name');
		}
	});
	if(!IP) {
		return;
	}
	spanList.each(function() {
		if($(this).text() == defaultText) {
			$(this).text(IP);
		}
	});
	$( ".appellativi" ).css( "display", "inherit" ); //dato che in questo punto ci arriva solo e slo se l'IP è stato estratto, posso tranquillamente rendere visibile l'appellativo per IP senza sminchiare niente lol
	return;
}
$(usernameReplace);

/** Supporto al Template:Libro**/
function LibroUpdate(libro,num){
	var currPag=document.getElementById(''+libro.id + libro.currPage);
	var newPag;
	libro.currPage+=num;
	newPag=document.getElementById(''+libro.id + libro.currPage);
	if(newPag){
		currPag.style.display="none";
		newPag.style.display="inherit";
	}
	else libro.currPage-=num;
}

function attivaFrecce(libro){
	var frecciaP=document.getElementById(libro.id +"Prev");
	var frecciaN=document.getElementById(libro.id +"Next");
	libro.currPage=1;
	frecciaP.addEventListener('click',function(e){LibroUpdate(libro,-1)});
	frecciaN.addEventListener('click',function(e){LibroUpdate(libro,1);});
}

function AttivaLibro(){
	var bookList=document.getElementsByClassName("libroFlag");
	if(bookList.length){
		for(var i=0;i<bookList.length;i++){
			attivaFrecce(bookList[i]);
		}
	}
}
$(AttivaLibro);

/**Supporto al Template:Blink **/
function blink()
{
	var blinkers=window.blinker;
	for(var i=0;i<blinkers.length;i++)
	{
		if(blinkers[i].style.visibility=="inherit"){
			blinkers[i].style.visibility="hidden";
		} else {
			blinkers[i].style.visibility="inherit";
		}
	}
}
function enableBlink(){
	var blinkers=document.getElementsByClassName("blink");
	if(blinkers){
	window.blinker=blinkers;
	setInterval(blink,125); //Sotto i 125 circa non funziona, per ragioni arcane
	}
}
$(enableBlink);

/** Per Template:Alert, che mostra un popup minaccioso
 * E anche per alertlink
*/

//mette tutti gli elementi che sono in span di classe alert-load e alert-link in due liste separate 

function AbilitaAlert()
{
var spanList = document.getElementsByClassName("alert-load");
var alertLinkList = document.getElementsByClassName("alert-link");
var i;
if(window.disableNonciAlert)
{
	return;
}
if(spanList.length) //Se ci sono alert da visualizzare cicla dentro la lista, visualizzandoli in ordine
	{
	for(i=0;i<spanList.length;i=i+1)
	{
		alert(spanList[i].textContent);
	}
}
if(!alertLinkList.length)
	{
		return;
	}
	for(i=0;i<alertLinkList.length;i=i+1) //Se ci sono alertlink, invece, cicla tra quelli presenti nella lista e modifica l'attributo onclick, in modo che esegua la funzione desiderata dopo averci cliccato sopra
	{
		alertLinkList[i].setAttribute('onclick',"alert(\"" +alertLinkList[i].title+ "\")");
	}
}
$(AbilitaAlert);
/** Per il Template:Abbr */
function attivaTooltip(){
	var tooltips=document.getElementsByClassName("noncitip");
	for (var i=0;i<tooltips.length;i++){
		tooltips[i].onmouseover=function(e){ // nota nerd:currentTarget fa in modo che l'evento venga catturato SOLO sull'elemento con classe "noncitip", a cui è attaccato l'handler, e non su qualunque cosa possa essere presente al suo interno
			var testo=e.currentTarget.getElementsByClassName("testotip")[0];
			testo.style.display="block";
			testo.style.bottom=(document.body.scrollHeight - window.scrollY - document.body.clientHeight) + "px";
		};
		tooltips[i].onmouseout=function(e){
			var testo=e.currentTarget.getElementsByClassName("testotip")[0];
			testo.style.display="none";
		};
	}
}	

$(attivaTooltip);
/** SCOPIAZZATO DA WIKIPEDIA: https://it.wikipedia.org/w/index.php?title=MediaWiki:Common.js&oldid=102712037 **/

/**
 * Mantenere il codice di MediaWiki:Common.js il più breve possibile, in quanto è caricato
 * da ciascuna pagina, per tutti gli utenti.
 * Se possibile creare invece un accessorio abilitato 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' );
	} DISABILITATO */

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

	/**
	 * Esempio di diff in Aiuto:Diff
	 */
	if ( mw.config.get( 'wgPageName' ) === 'Aiuto:Diff' ) {
		mw.loader.load( 'mediawiki.diff.styles' );
	}

	// ============================
	//     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" ) {
					mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/Lista_di_Wikipedie',
						'Lista completa', 'interwiki-completelist', 'Lista completa delle Wikipedie' );
				}
			} )
			.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 );


	/** A NOI NON SERVE
	 * Toglie "Soggetto/Intestazione" nelle creazioni delle discussioni al Bar
	
	if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &&
		 mw.config.get( 'wgPageName' ).indexOf( 'Wikipedia:Bar/' ) === 0 &&
		 mw.config.get( 'wgAction' ) === 'edit' &&
		 document.URL.indexOf( '&section=new&preload=' ) !== -1) {
		$( function () {
			document.getElementById( 'wpSummaryLabel' ).style.display = 'none';
			document.getElementById( 'wpSummary' ).style.display = 'none';
		} );
	} 
	**/
	
	// ============================
	//    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.
		 * (Sì. Può essere fastidioso... :)
		 */
		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();
			}
		}
	}

	$( 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 ) );

/* Normalizzazione dei caratteri particolari per l'ordinamento alfabetico nelle tabelle sortable.
   In futuro potrebbe diventare default e non più necessario, vedi [[phab:T72157]] */

mw.config.set( 'tableSorterCollation', {'á':'a','à':'a','ă':'a','â':'a','ǎ':'a','å':'a','ä':'a','ã':'a','ā':'a','ȁ':'a',
'Á':'A','À':'A','Ă':'A','Â':'A','Ǎ':'A','Å':'A','Ä':'A','Ã':'A','Ā':'A','Ȁ':'A',
'ć':'c','ĉ':'c','č':'c','ç':'c',
'Ć':'C','Ĉ':'C','Č':'C','Ç':'C',
'đ':'d','ð':'d',
'Đ':'D','Ð':'D',
'é':'e','è':'e','ê':'e','ě':'e','ë':'e','ẽ':'e','ȩ':'e','ę':'e','ē':'e','ȅ':'e','ė':'e',
'É':'E','È':'E','Ê':'E','Ě':'E','Ë':'E','Ẽ':'E','Ȩ':'E','Ę':'E','Ē':'E','Ȅ':'E','Ė':'E',
'ǵ':'g','ğ':'g','ĝ':'g','ǧ':'g',
'Ǵ':'G','Ğ':'G','Ĝ':'G','Ǧ':'G',
'í':'i','ì':'i','ĭ':'i','î':'i','ǐ':'i','ï':'i','ĩ':'i','ī':'i','ȉ':'i',
'Í':'I','Ì':'I','Ĭ':'I','Î':'I','Ǐ':'I','Ï':'I','Ĩ':'I','Ī':'I','Ȉ':'I',
'ľ':'l','ł':'l',
'Ľ':'L','Ł':'L',
'ń':'n','ǹ':'n','ň':'n','ñ':'n',
'Ń':'N','Ǹ':'N','Ň':'N','Ñ':'N',
'ó':'o','ò':'o','ŏ':'o','ô':'o','ǒ':'o','ö':'o','ő':'o','õ':'o','ø':'o','ō':'o','ȍ':'o',
'Ó':'O','Ò':'O','Ŏ':'O','Ô':'O','Ǒ':'O','Ö':'O','Ő':'O','Õ':'O','Ø':'O','Ō':'O','Ȍ':'O',
'ŕ':'r','ř':'r',
'Ŕ':'R','Ř':'R',
'ś':'s','ṥ':'s','ŝ':'s','š':'s','ş':'s','ș':'s',
'Ś':'S','Ṥ':'S','Ŝ':'S','Š':'S','Ş':'S','Ș':'S',
'ţ':'t','ț':'t',
'Ţ':'T','Ț':'T',
'ú':'u','ù':'u','ŭ':'u','û':'u','ǔ':'u','ü':'u','ű':'u','ũ':'u','ū':'u','ȕ':'u',
'Ú':'U','Ù':'U','Ŭ':'U','Û':'U','Ǔ':'U','Ü':'U','Ű':'U','Ũ':'U','Ū':'U','Ȕ':'U',
'ý':'y','ỳ':'y','ÿ':'y','ỹ':'y',
'Ý':'Y','Ỳ':'Y','Ÿ':'Y','Ỹ':'Y',
'ź':'z','ž':'z',
'Ź':'Z','Ž':'Z'} );