MediaWiki:Gadget-LinkComplete.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-LinkComplete.js
* Funzione di autocompletamento dei wikilink, si attiva con Tab o Ctrl+Spazio.
* Riscritto da zero a partire da:
* http://it.wikipedia.org/w/index.php?title=MediaWiki:Gadget-LinkComplete.js&oldid=51953861
* che a sua volta lo importava da:
* http://en.wikipedia.org/wiki/User:Zocky/LinkComplete.js
*
* @author [[Utente:Rotpunkt]]
*/
/*global mediaWiki, jQuery */
( function ( mw, $ ) {
'use strict';
// Classe per la funzione di autocompletamento
function AutoComplete( pos, text, el ) {
var position = pos,
initialText = text,
element = el,
pages = null,
currPage = 0,
currContinue = null,
prevContinue = null,
currText = text;
// Ritorna la lista delle pagine che iniziano con prefix ( in JSON )
function getPages( prefix, pcontinue, pageHandler ) {
$.ajax( {
url: mw.util.wikiScript( 'api' ),
data: {
action: 'query',
list: 'allpages',
apprefix: prefix,
apcontinue: pcontinue,
aplimit: '50',
apfilterredir: 'nonredirects',
format: 'json',
rawcontinue: ''
},
async: false,
dataType: 'json'
} )
.done( function ( data ) {
if ( data.query && data.query.allpages.length > 0 ) {
pageHandler( data.query.allpages, data['query-continue'] ?
data['query-continue'].allpages.apcontinue : null );
}
} );
}
// Inserisce il nome della pagina nell'area di modifica
function dump() {
// preserva il case del primo carattere
if ( initialText.length > 0 ) {
pages[currPage].title = initialText.charAt( 0 ) + pages[currPage].title.substring( 1 );
}
$( element ).textSelection( 'encapsulateSelection',
{ pre: pages[currPage].title, selectionStart: position,
selectionEnd: position + currText.length, replace: true } );
currText = pages[currPage].title;
// aggiorna currPage
if ( currPage >= pages.length - 1 ) {
if ( currContinue ) {
pages = null;
} else if ( prevContinue ) {
prevContinue = null;
pages = null;
} else {
currPage = 0;
}
} else {
currPage += 1;
}
}
AutoComplete.prototype.getCurrText = function () {
return currText;
};
AutoComplete.prototype.complete = function () {
// eventualmente ottiene la lista di pagine
if ( !pages ) {
getPages( initialText, currContinue, function ( retPages, pcontinue ) {
pages = retPages;
prevContinue = currContinue;
currContinue = pcontinue;
currPage = 0;
} );
}
if ( pages ) {
dump();
}
};
}
$( function () {
// previene con Firefox l'azione di default del tasto Tab
var tabDefault = true, ac;
$( '#wpTextbox1, #wpUploadDescription' ).keydown( function ( event ) {
var pos, text;
if ( ( !event.altKey && !event.shiftKey && !event.ctrlKey && !event.metaKey && event.keyCode === 9 ) ||
( !event.altKey && !event.shiftKey && event.ctrlKey && !event.metaKey && event.keyCode === 32 ) ) {
tabDefault = true;
pos = $( event.target ).textSelection( 'getCaretPosition' );
text = $( event.target ).val().replace( /\r\n/g, '\n' ).substring( 0, pos );
pos = text.lastIndexOf( '[[' ) + 2;
text = text.substring( pos );
if ( pos >= 2 && !/[\[\]\{\}\r\n\|]/.test( text ) ) {
tabDefault = false;
event.preventDefault();
if ( !ac || text !== ac.getCurrText() ) {
ac = new AutoComplete( pos, text, event.target );
}
ac.complete();
}
}
} );
$( '#wpTextbox1, #wpUploadDescription' ).keypress( function ( event ) {
if ( !event.altKey && !event.shiftKey && !event.ctrlKey && !event.metaKey && event.keyCode === 9 ) {
return tabDefault;
}
} );
} );
}( mediaWiki, jQuery ) );