MediaWiki:Searchbox.js

Vai alla navigazione Vai alla ricerca

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, e comunque qualche minuto di preghiera non guasta. 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 menu Strumenti → Preferenze; per Internet Explorer: mantenere premuto il tasto Ctrl mentre si preme il pulsante Aggiorna o premere Ctrl-F5.

// Search box for Mediawiki
// (c) 2006 [[User:Zocky]], released under GPL
//------------- Prelevato da: http://en.wikipedia.org/wiki/User:Zocky/SearchBox.js ---------------------

importStylesheetURI('http://nonciclopedia.wikia.com/index.php?title=Utente:Nonciclopediologo/Searchbox.css&action=raw&ctype=text/css');

var sr$t;
var sr$f;
var sr$s;
var sr$r;
var sr$w;
var sr$i;
var sr$re;
var sr$mc;

function srBack() {
	if(sr$s.attr('value') === '') {
		sr$t.focus();
		return;
	}
	if(sr$re.attr('checked') == 'checked') {
		var searchString = sr$s.attr('value');
	}
	else {
		searchString = sr$s.attr('value').replace(/([\[\]\{\}\|\.\*\?\(\)\$\^\\])/g, '\\$1');
	}
	searchString = '(' + searchString + ')(?![\\s\\S]*' + searchString + ')';
	if(sr$mc.attr('checked') == 'checked') {
		var re = new RegExp(searchString);
	}
	else {
		var re = new RegExp(searchString, 'i');
	}
	var res = re.exec(sr$t.attr('value').substring(0, sr$t[0].selectionStart));
	if(!res) {
		var res = re.exec(sr$t.attr('value'));
	}
	if(res) {
		sr$t[0].selectionStart = res.index;
		sr$t[0].selectionEnd = res.index + res[1].length;
	}
	else {
		sr$t[0].selectionStart = sr$t[0].selectionEnd;
	}
	srSync();
}

function srNext() {
	if(sr$s.attr('value') === '') {
		sr$t.focus();
		return;
	}
	if(sr$re.attr('checked') == 'checked') {
		var searchString = sr$s.attr('value');
	}
	else {
		searchString = sr$s.attr('value').replace(/([\[\]\{\}\|\.\*\?\(\)\$\^\\])/g, '\\$1');
	}
	searchString = '(' + searchString + ')(?![\\s\\S]*' + searchString + ')';
	if(sr$mc.attr('checked') == 'checked') {
		var re = new RegExp(searchString, 'g');
	}
	else {
		var re = new RegExp(searchString, 'gi');
	}
	re.lastIndex = sr$t[0].selectionEnd;
	var res = re.exec(sr$t.attr('value'));
	if(!res) {
		re.lastIndex = 0;
		var res = re.exec(sr$t.attr('value'));
	}
	if(res) {
		sr$t[0].selectionStart = res.index;
		sr$t[0].selectionEnd = res.index + res[0].length;
	}
	else {
		sr$t[0].selectionStart = sr$t[0].selectionEnd;
	}
	srSync();
}

function srReplace() {
	var sels = sr$t[0].selectionStart;
	var sele = sr$t[0].selectionEnd;
	var selr = sr$t.attr('value').length - sele;
	if(sr$s.attr('value') == '' || sels == sele) {
		sr$t.focus();
		return;
	}
	if(sr$re.attr('checked') == 'checked') {
		var searchString = sr$s.attr('value');
		var replaceString = sr$r.attr('value');
	}
	else {
		searchString = sr$s.attr('value').replace(/([\[\]\{\}\|\.\*\?\(\)\$\^\\])/g, '\\$1');
		replaceString = sr$r.attr('value').replace(/([\$\\])/g, '\\$1');
	}
	if(sr$mc.attr('checked') == 'checked') {
		var re = new RegExp(searchString, 'g');
	}
	else {
		var re = new RegExp(searchString, 'gi');
	}
	re.lastIndex = sels;
	var res = re.exec(sr$t.attr('value'));
	var $$ = 0;
	if(res && res.index == sels && res[0].length == sele - sels) {
		if(sr$re.attr('checked') == 'checked') {
			replaceString = replaceString.replace(/\\\\/g, '&backslash;');
			var replaceBits = (' ' + replaceString).split(/(?=\$\d)/);
			replaceString = replaceBits[0].substring(1);
			for(var i = 1; i < replaceBits.length; i++) {
				$$ = replaceBits[i][1] - '0';
				if($$<res.length) {
					replaceString += res[$$] + replaceBits[i].substring(2);
				}
				else {
					replaceString += replaceBits[i];
				}
			}
			replaceString = replaceString.replace(/\\n/, '\n').replace (/&backslash;/g, '\\ ').replace(/&dollar;/g, '\$');
		}
		sr$t.attr('value', sr$t.attr('value').substring(0, sels) + replaceString + sr$t.attr('value').substring(sele));
	}
	sr$t[0].selectionStart = sels;
	sr$t[0].selectionEnd = sr$t.attr('value').length - selr;
	srSync();
}

function srReplaceall() {
	if(!sr$s.attr('value')) {
		sr$t.focus();
		return;
	}
	var sels = sr$t[0].selectionStart;
	var sele = sr$t[0].selectionEnd;
	var selr = sr$t.attr('value').length - sele;
	var reps;
	if(sr$re.attr('checked') == 'checked') {
		var searchString = sr$s.attr('value');
		var replaceString = sr$r.attr('value').replace(/\\\\/, '&backslash;').replace(/\\n/, '\n').replace(/&backslash;/, '\\');
	}
	else {
		searchString = sr$s.attr('value').replace(/([\[\]\{\}\|\.\*\?\(\)\$\^\\])/g, '\\$1');
		replaceString = sr$r.attr('value').replace(/([\$\\])/g, '\\$1');
	}
	if(sele > sels) {
		reps = sr$t.attr('value').substring(sels, sele);
	}
	else {
		reps = sr$t.attr('value');
	}
	if(sr$mc.attr('checked') == 'checked') {
		var re = new RegExp(searchString, 'g');
	}
	else {
		var re = new RegExp(searchString, 'gi');
	}
	var replaceCounter = 0;
	var replaceFunc = function() {
		replaceCounter++;
		return replaceString;
	};
	reps = reps.replace(re, replaceFunc);
	if(sele > sels) {
		sr$t.attr('value', sr$t.attr('value').substring(0, sels) + reps + sr$t.attr('value').substring(sele));
	}
	else {
		sr$t.attr('value', reps);
	}
	sr$t[0].selectionStart = sels;
	sr$t[0].selectionEnd = sele > sels ? sr$t.attr('value').length - selr : sels;
	window.status = replaceCounter + ' occorrenze di ' + searchString + ' sostituite.';
	srSync();
}

function srToggleCase() {
	var sels = sr$t[0].selectionStart;
	var sele = sr$t[0].selectionEnd;
	var selr = sr$t.attr('value').length - sele;
	var selt = sr$t.attr('value').substring(sels, sele);
	if(sele > sels) {
		if(selt == selt.toUpperCase()) {
			selt = selt.toLowerCase();
		}
		else if(selt == selt.toLowerCase() && sele - sels > 1) {
			selt = selt.substring(0, 1).toUpperCase() + selt.substring(1).toLowerCase();
		}
		else {
			selt = selt.toUpperCase();
		}
		sr$t.attr('value', sr$t.attr('value').substring(0, sels) + selt + sr$t.attr('value').substring(sele));
		sr$t[0].selectionStart = sels;
		sr$t[0].selectionEnd = sele > sels ? sr$t.attr('value').length - selr : sels;
	}
	srSync();
}

function srSync() {
	var allLines = 0;
	var lineNo = 0;
	var w = sr$t.cols - 5;
	var dummy = sr$t.attr('value').split('\n');
	for(var i = 0; i < dummy.length; i++){
		allLines += Math.ceil(dummy[i].length / w);
	}
	var dummy = sr$t.attr('value').substring(0, sr$t[0].selectionStart).split('\n');
	for(var i = 0; i < dummy.length; i++){
		lineNo += Math.ceil(dummy[i].length / w);
	}
	sr$t.scrollTop = sr$t.scrollHeight * (lineNo - 10) / allLines;
	sr$t.focus();
}

function srInit() {
	if($('#wpTextbox1').length) {
		var srBoxCode = $('<div></div>').attr('id', 'srForm');
		var br = $('<br />');
		var table = $('<table></table>').attr('id', 'srBox').css('border-spacing', '2px');
		var tr = $('<tr></tr>');
		var td1 = $('<td></td>').css('vertical-align', 'bottom');
		var label = $('<label></label>').attr('for', 'srSearch').css({
			'color': 'black',
			'font-size': '80%'
		}).text('Cerca');
		var input = $('<input />').attr({
			'id': 'srSearch',
			'type': 'text',
			'accesskey': 'F',
			'tabindex': '8',
			'value': '',
			'onkeypress': 'event.which == 13 && srNext();'
		});
		td1.append(label, '<br />', input);
		var td2 = td1.clone();
		$('label', td2).attr('for', 'srReplace').text('Sostituisci con:');
		$('input', td2).attr({
			'id': 'srReplace',
			'accesskey': 'G',
			'tabindex': '9',
			'value': '',
			'onkeypress': 'event.which == 13 && srNext();'
		});
		var td3 = $('<td></td>').css('vertical-align', 'top');
		var input1 = $('<input />').attr({
			'id': 'srCase',
			'type': 'checkbox',
			'tabindex': '10',
			'onclick': 'sr$t.focus();'
		});
		var label1 = $('<label></label>').attr('for', 'srCase').css({
			'color': 'black',
			'font-size': '80%'
		}).text('maiuscole/minuscole');
		var input2 = $('<input />').attr({
			'id': 'srRegexp',
			'type': 'checkbox',
			'tabindex': '11',
			'onclick': 'sr$t.focus();'
		});
		var label2 = $('<label></label>').attr('for', 'srRegexp').css({
			'color': 'black',
			'font-size': '80%'
		}).text('usa regexp');
		var link1 = $('<a></a>').attr({
			'title': 'Trova testo precedente [alt-2]',
			'accesskey': '2',
			'onclick': 'srBack();',
			'onmouseover': 'sr$t.focus();'
		}).text('<');
		var link2 = $('<a></a>').attr({
			'title': 'Trova testo successivo [alt-3]',
			'accesskey': '3',
			'onclick': 'srNext();',
			'onmouseover': 'sr$t.focus();'
		}).css('margin-right', '0.6em').text('Trova >');
		var link3 = $('<a></a>').attr({
			'title': 'Trova e sostituisce il testo precedente [alt-4]',
			'accesskey': '4',
			'onclick': 'srReplace(); srBack();',
			'onmouseover': 'sr$t.focus();'
		}).text('<');
		var link4 = $('<a></a>').attr({
			'title': 'Trova e sostituisce il testo selezionato',
			'onclick': 'srReplace();',
			'onmouseover': 'sr$t.focus();'
		}).text('Sostituisci');
		var link5 = $('<a></a>').attr({
			'title': 'Trova e sostituisce il testo successivo [alt-5]',
			'accesskey': '5',
			'onclick': 'srNext();',
			'onmouseover': 'sr$t.focus();'
		}).css('margin-right', '0.6em').text('>');
		var link6 = $('<a></a>').attr({
			'title': 'Sostituisci tutto [alt-7]',
			'accesskey': '7',
			'onclick': 'srReplaceall();',
			'onmouseover': 'sr$t.focus();'
		}).text('Sostituisci tutto');
		td3.append(input1, label1, ' ', input2, label2, br, link1, ' ', link2, ' ', link3, ' ', link4, ' ', link5, ' ', link6);
		tr.append(td1, td2, td3);
		table.append(tr);
		srBoxCode.append(table);
		var ep = $('#searchInput');
		if(ep.length) {
			ep.removeAttr('accesskey');
		}
		sr$t = $('#wpTextbox1');
		sr$w = sr$t.css('width');
		var sr = $('<div></div>');
		sr.append(srBoxCode);
		var im = $('<span></span>');
		var link1 = $('<a></a>').attr({
			'id': 'SearchIcon',
			'onclick': 'srShowHide();'
		});
		var img1 = $('<img />').attr({
			'title': 'Cerca/Sostituisci',
			'alt': 'Cerca/Sostitiusci',
			'src': 'http://upload.wikimedia.org/wikipedia/commons/1/12/Button_find.png'
		}).css({
			'cursor': 'pointer',
			'border-width': '0',
			'height': '22px',
			'width': '23px'
		});
		link1.append(img1);
		var link2 = link1.clone().attr('onclick', 'srToggleCase();').removeAttr('id');
		$('img', link2).attr({
			'title': 'Maiuscole/Minuscole',
			'alt': 'Maiuscole/Minuscole',
			'src': 'http://upload.wikimedia.org/wikipedia/commons/1/12/Button_case.png'
		});
		im.append(link1, link2);
		var ep = $('#toolbar');
		if(ep.length) {
			ep.append(im);
		}
		else {
			var ep = $('#editform');
			ep.before(im);
		}
		sr$i = $('#SearchIcon');
		sr$i.attr('accesskey', 'F');
		$(':first-child', sr).hide();
		var ep = $('#editform');
		ep.before(sr);
		sr$f = $('#srForm');
		sr$s = $('#srSearch');
		sr$r = $('#srReplace');
		sr$re = $('#srRegexp');
		sr$mc = $('#srCase');
	}
}

function srShowHide() {
	if(sr$f.css('display') == 'none') {
		sr$f.removeAttr('accesskey').css('width', '100%').show();
		$('*', sr$f).show();
	}
	else {
		sr$f.attr('accesskey', 'F').css('width', sr$w).hide();
	}
}

hooksCustom.push(srInit);
//