Utente:Ricordisamoa/Gadget-collegamentipersonali.js
Questa pagina definisce alcuni parametri di aspetto e comportamento generale di tutte le pagine. Per personalizzarli vedi Aiuto:Stile utente.
Nota: dopo aver salvato è necessario pulire la cache del proprio browser per vedere i cambiamenti (per le pagine globali è comunque necessario attendere qualche minuto). Per Mozilla / Firefox / Safari: fare clic su Ricarica tenendo premuto il tasto delle maiuscole, oppure premere Ctrl-F5 o Ctrl-R (Command-R su Mac); per Chrome: premere Ctrl-Shift-R (Command-Shift-R su un Mac); per Konqueror: premere il pulsante Ricarica o il tasto F5; per Opera può essere necessario svuotare completamente la cache dal menù Strumenti → Preferenze; per Internet Explorer: mantenere premuto il tasto Ctrl mentre si preme il pulsante Aggiorna o premere Ctrl-F5.
/**
* Gadget-collegamentipersonali.js
* Aggiunge dei collegamenti personali al menu navigazione della sidebar.
* I collegamenti sono configurabili con una finestra di dialogo che si attiva dal menu strumenti.
* Riscritto da zero a partire da:
* http://it.wikipedia.org/w/index.php?title=MediaWiki:Collegamenti_personali.js&oldid=47557920
* http://it.wikipedia.org/w/index.php?title=MediaWiki:Gadget-collegamentipersonali.js&oldid=38993132
*
* @author [[Utente:Rotpunkt]]
* @author [[Utente:Ricordisamoa]]
*/
/* global mediaWiki, jQuery */
( function ( mw, $ ) {
'use strict';
var api = new mw.Api(),
optionKey = 'userjs-personallinks-links', // codice dell'opzione MediaWiki per i collegamenti personali
userLinks; // collegamenti personali dell'utente
function writeUserConfig( config ) {
api.postWithToken( 'options', {
action: 'options',
optionname: optionKey,
optionvalue: config
} )
.done( function ( data ) {
if ( data && data.options && data.options.result === 'Success' ) {
mw.notify( 'La configurazione dei collegamenti personali è stata aggiornata.' );
} else {
var msg = data && data.error ? ': ' + data.error.code + ' ' + data.error.info : '';
mw.notify( 'Errore nell\'aggiornare la configurazione dei collegamenti personali' +
' ' + msg );
}
} );
}
function updatePortletLinks() {
var url;
$( 'li[id^="t-gcp"]' ).remove();
$.each( userLinks, function ( i, userLink ) {
url = userLink[1].replace( '%TITOLO%', mw.config.get( 'wgPageName' ) );
url = url.replace( '%TITOLO2%', mw.config.get( 'wgTitle' ) );
mw.util.addPortletLink( 'p-navigation', url, userLink[0], 't-gcp' + i );
} );
}
function buildRow( userLink ) {
var $span, $input, $tr = $( '<tr>' ),
properties = {
'width': '100%',
'box-sizing': 'border-box',
'-moz-box-sizing': 'border-box',
'-webkit-box-sizing': 'border-box'
};
// icona spostamento
$span = $( '<span>' ).addClass( 'ui-icon ui-icon-arrowthick-2-n-s' );
$( '<td>' ).append( $span ).appendTo( $tr );
// input text
$input = $( '<input>' ).attr( 'type', 'text' ).val( userLink[0] ).css( properties );
$( '<td>' ).css( 'width', '20%' ).append( $input ).appendTo( $tr );
$input = $( '<input>' ).attr( 'type', 'text' ).val( userLink[1] ).css( properties );
$( '<td>' ).css( 'width', '78%' ).append( $input ).appendTo( $tr );
// checkbox
$( '<td>' ).append( $( '<input>' ).attr( 'type', 'checkbox' ) ).appendTo( $tr );
return $tr;
}
// Visualizza la finestra di dialogo per modificare i "collegamenti personali"
function showConfigDialog() {
var $table, $thead, $tbody, $tr, $checkbox;
$table = $( '<table>' );
$thead = $( '<thead>' ).appendTo( $table );
$tr = $( '<tr>' ).attr( 'bgcolor', 'lightgrey' ).appendTo( $thead );
$( '<th>' ).css( 'width', '2%' ).text( '' ).appendTo( $tr );
$checkbox = $( '<input>' )
.attr( 'id', 'gcp-selectall' )
.attr( 'type', 'checkbox' )
.attr( 'tabindex', '-1' )
.click( function () {
$( '#gcp-dialog :checkbox' ).prop( 'checked', this.checked );
} );
$( '<th>' ).css( 'width', '20%' ).text( 'Nome' ).appendTo( $tr );
$( '<th>' ).css( 'width', '78%' ).text( 'Indirizzo' ).appendTo( $tr );
$( '<th>' ).append( $checkbox ).appendTo( $tr );
$tbody = $( '<tbody>' ).appendTo( $table );
$.each( userLinks, function ( i, userLink ) {
$tbody.append( buildRow( userLink ) );
} );
$tbody.sortable( { handle: 'span' } );
$( '#gcp-dialog' ).html( $table );
// visualizza il dialog
$( '#gcp-dialog' ).dialog( {
title: 'Configurazione collegamenti personali',
width: 800,
height: 300,
modal: true,
buttons: {
'Aggiungi riga': function () {
$table.append( buildRow( ['', ''] ) );
},
'Cancella riga': function () {
$( '#gcp-dialog :checkbox:checked:not(#gcp-selectall)' ).parents( 'tr' ).remove();
$( '#gcp-selectall' ).attr( 'checked', false );
},
'Salva': function () {
// genera la nuova configurazione
var confLinks = $table.find( 'tr:has(td)' ).map( function () {
var $input = $( this ).find( 'input' );
return $.trim( $input.eq( 0 ).val() ) !== '' &&
$.trim( $input.eq( 1 ).val() ) !== '' ?
[[ $input.eq( 0 ).val(), $input.eq( 1 ).val() ]] : null;
} ).get(),
confLinksJSON = JSON.stringify( confLinks ),
userLinksJSON = JSON.stringify( userLinks );
// se necessario memorizza la configurazione nelle opzioni
if ( confLinksJSON === userLinksJSON ) {
mw.notify( 'I collegamenti personali non sono stati modificati.' );
} else {
writeUserConfig( confLinksJSON );
userLinks = confLinks;
// aggiorna i link
updatePortletLinks();
}
$( this ).dialog( 'close' );
},
'Annulla': function () {
$( this ).dialog( 'close' );
}
}
} );
}
$( window ).load( function () {
mw.loader.using( ['user.options', 'jquery.ui'], function () {
userLinks = mw.user.options.exists( optionKey ) ? JSON.parse( mw.user.options.get( optionKey ) ) : [];
// setup portletLink configurazione
$( mw.util.addPortletLink( 'p-tb', '#', 'Collegamenti personali' ) )
.click( function ( event ) {
event.preventDefault();
showConfigDialog();
} );
// setup dialog
$( '<div>' ).attr( 'id', 'gcp-dialog' ).appendTo( 'body' );
// setup collegamenti
if ( userLinks.length > 0 ) {
updatePortletLinks();
}
} );
} );
}( mediaWiki, jQuery ) );