MediaWiki:Gadget-tb-formatHistory.js

Da Cathopedia, l'enciclopedia cattolica.
Vai alla navigazione Vai alla ricerca

Nota: Dopo aver salvato le preferenze, perché i cambi abbiano effetto, devi bypassare la cache del tuo browser. Mozilla / Firefox / Safari: tieni premuto Shift mentre clicchi Reload, o premi Ctrl-Shift-R (Cmd-Shift-R per Apple Mac); Google Chrome: premi Ctrl o Shift mentre clicchi F5; IE: premi Ctrl mentre clicchi Refresh, o premi Ctrl-F5; Konqueror:: clicca semplicemente il pulsante di Reload, o premi F5; se usi Opera devi cancellare completamente la chache nel menu Tools→Preferences.

// Author: it:Utente:Baruneju
// Usage:
//     * incollare la cronologia
//     * selezionare la cronologia incollata
//     * premere il tasto
// Si otterrà un cassetto intitolato "Cronologia" contente tutto il testo selezionato
// in cui a ogni riga della cronologia incollata saranno aggiunti wikilink alla pagina utente, 
// alla pagina di discussione e ai contributi.
// Eventuali oggetti di modifica contenenti richiami a template saranno circondati da <nowiki>
// per evitare espansione del template. La parte finale con "(annulla)" sarà rimossa.
// Il codice deriva da insertTags presente in //it.wikipedia.org/skins-1.5/common/edit.js
// La funzione "sostituzione" e le regex sono opera mia quindi richiedo la citazione dell'autore :-P
function refactorChrono()
{
    WEUpdateTextarea();
 
    tagOpen = "{{cassetto|Cronologia|";
    tagClose = "}}";
    var txtarea;
 
    txtarea = document.getElementById('wpTextbox1');
 
    var selText, isSample = false;
 
    if (document.selection  && document.selection.createRange) { // IE/Opera
 
	//save window scroll position
	if (document.documentElement && document.documentElement.scrollTop)
		var winScroll = document.documentElement.scrollTop
	else if (document.body)
		var winScroll = document.body.scrollTop;
	//get current selection  
	txtarea.focus();
	var range = document.selection.createRange();
	selText = range.text;
 
	range.text = sostituzione(range.text);
	range.text = tagOpen + range.text + tagClose;
	range.select();   
	//restore window scroll position
	if (document.documentElement && document.documentElement.scrollTop)
		document.documentElement.scrollTop = winScroll
	else if (document.body)
		document.body.scrollTop = winScroll;
 
} else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla
 
	//save textarea scroll position
	var textScroll = txtarea.scrollTop;
	//get current selection
	txtarea.focus();
	var startPos = txtarea.selectionStart;
	var endPos = txtarea.selectionEnd;
	selText = txtarea.value.substring(startPos, endPos);
 
	selText = sostituzione(selText)
 
	txtarea.value = txtarea.value.substring(0, startPos)
		+ tagOpen + selText + tagClose
		+ txtarea.value.substring(endPos, txtarea.value.length);
	//set new selection
	if (isSample) {
		txtarea.selectionStart = startPos + tagOpen.length;
		txtarea.selectionEnd = startPos + tagOpen.length + selText.length;
	} else {
		txtarea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length;
		txtarea.selectionEnd = txtarea.selectionStart;
	}
	//restore textarea scroll position
	txtarea.scrollTop = textScroll;
    }
    WEUpdateFrame();
 
    function sostituzione(testo)
    {
        //regex per eliminare la testa
	testa = /^\s*((\*|\#)\s\(corr\)\s*\(prec\)|\(diff\))/mg;
        // regex per eliminare la coda
        coda = /\((rollback \| )?annulla\)$/mg;
        //regex principale
        regex = /^(\s)*(\d\d:\d\d,\s*\d\d?\s*[a-z][a-z][a-z]\s*\d\d\d\d\s*)(\. \. )?(([^\(])*)\s*\(discussione( \| contributi)?( \| blocca)?(.*)/mg;
        // testo da visualizzare
        risultato="* $2 [[Utente:$4|$4]] ([[Discussioni utente:$4|discussione]] <nowiki>|</nowiki> [[Speciale:Contributi/$4|contributi]] $8";
 
	testo = testo.replace(testa,"");
        testo = testo.replace(coda,"");
        testo = testo.replace(regex,risultato);
	testo = testo.replace(/\{\{(.*)\}\}/g,"<nowiki>{{</nowiki>$1<nowiki>}}</nowiki>");
        return testo;
    }
}

addOnloadHook(function() {
    addToolbarButton('tb-formatHistory', 'javascript:refactorChrono()', '//upload.wikimedia.org/wikipedia/commons/3/3f/Button_attendre.png', 'Crono', 'Usage: Incollare la cronologia, selezionarla, premere il tasto');
});