Wikipedysta:Malarz pl/wp si.js

Z Wikipedii, wolnej encyklopedii

Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.

  • Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
  • Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
  • Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
  • Opera: Naciśnij klawisze Ctrl+F5.
mw.hook('userjs.wp_sk.ready').add(function (wp_sk)
{
	// <nowiki>
	wp_sk.mm_rFriendlyIbox = function(a,nazwa,zaw) {
		//
		// poprawiam nazwę
		//
		nazwa = nazwa.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");  // trim
		nazwa = nazwa.substring(0,1).toUpperCase() + nazwa.substring(1);

		//
		// usuwam komentarze
		//
		zaw = zaw.replace(/<!-- <liczba>/, '<!--');
		zaw = zaw.replace(/ *<!--[^>]*--> *\n/g, '\n');

		//
		// jak został komentarz lub nie ma parametrów to kończymy
		//
		if (zaw.indexOf('<!--')!=-1 || zaw.indexOf('|')==-1)
		{
			return a;
		}

		//
		// escapowanie parametrów
		//
		zaw = zaw.replace(/<<<(#+)>>>/g,'<<<#$1>>>');
		// wewnętrzne szablony
		zaw = zaw.replace(/\{\{(([^\{\}]+)?(\{\{[^\{\}]+\}\})?)*\}\}/g,function(a){ return a.replace(/\|/g,'<<<#>>>') });
		// wewnętrzne linki
		zaw = zaw.replace(/\[\[[^\]]+\]\]/g,function(a){ return a.replace(/\|/g,'<<<#>>>') });

		//
		// sprzątanie
		//
		// del pustych
		zaw = zaw.replace(/\|\s*(?=\|)/g, function(a) {return (a.indexOf('\n')==-1)?'':'\n'}).replace(/\|\s*$/g, "");
		zaw = zaw.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");  // trim

		// przeniesienie | na początek wiersza (zawsze)
		zaw = '\n'+zaw+'\n';
		zaw = zaw.replace(/\s*\|\s*/g, '\n |');

		//
		// odescapowanie
		//
		zaw = zaw.replace(/<<<#>>>/g,'|').replace(/<<<#(#+)>>>/g,'<<<$1>>>');

		//
		// liczba znakow przed "="
		//
		var dlugosc = 0;
		
		//
		// szukam dlugości w instrukcji TD szablonu
		//
		var timeoutID = null;
		var request = $.ajax('/w/index.php?title=Szablon:'+nazwa+'/opis&action=raw');
	
		request.done(function(data) {
			var m = data.match(/"format": "\{\{_\\n \|(_+) = _\\n\}\}\\n"/),
				format = m && m[1] || '';
			dlugosc = format.length;
		}).always(function() {
			clearTimeout(timeoutID);
		});
	
		timeoutID = setTimeout(request.abort, 20000);
	
		if (dlugosc === 0) {
			// dla niekórych dlugosc ustawiam na stałe
			if (nazwa.match(/^Jednostka administracyjna infobox/)) {
				dlugosc = 31;
			} else if (nazwa.match(/^Zwierzę infobox/)) {
				dlugosc = 22;
			} else if (nazwa.match(/^Takson infobox/)) {
				dlugosc = 20;
			} else if (nazwa.match(/^Biogram infobox/)) {
				dlugosc = 26;
			} else if (nazwa.match(/^Dzielnica infobox/)) {
				dlugosc = 26;
			} else {
				var zawartosc = zaw;
				// obliczam długość najdłuższej nazwy parametru
				while (zawartosc.length) {
					var linia1 = zawartosc.substr(0, zawartosc.indexOf('\n'));
					zawartosc = zawartosc.substr(zawartosc.indexOf('\n')+1);
					if (linia1.match(/^ *\|[0-9a-zA-Z\*\. \t\_\-\*\/\(\)\?\,\:ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]*\=/)){
						linia1 = linia1.replace(/^ *\|([^=]*)=.*$/, '$1');
						linia1 = linia1.replace(/^[ \t]*([^ \t])/, '$1');
						linia1 = linia1.replace(/([^ \t])[ \t]*$/, '$1');
						dlugosc = (dlugosc>linia1.length) ? dlugosc : linia1.length;
					}
				}
			}
		}

		// przerabiam wywołania parametrów
		var nowazaw = '';
		while (zaw.length) {
			var linia2 = zaw.substr(0, zaw.indexOf('\n'));
			zaw = zaw.substr(zaw.indexOf('\n')+1);
			if (linia2.match(/^ *\|[0-9a-zA-Z\*\. \t\_\-\*\/\(\)\?\,\:ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]*\=/)){
				nazwapar = linia2.replace(/^ *\|([^=]*)=.*$/, '$1');
				nazwapar = nazwapar.replace(/^[ \t]*([^ \t])/, '$1');
				nazwapar = nazwapar.replace(/([^ \t])[ \t]*$/, '$1');
				if (!(nazwapar.match(/^(stopni|minut|sekund)(N|E|S|W|_szer|_dł)$/))) {
					while (nazwapar.length<dlugosc)  nazwapar += ' ';
				}
				parametr = linia2.replace(/^ *\|[^=]* *=(.*)$/, '$1');
				parametr = parametr.replace(/^ *([^ ])/, '$1');
				parametr = parametr.replace(/([^ ])[ \n]*$/, '$1');
				if (parametr == "?")
					parametr = "";
				parametr = parametr.replace(/ *<\/?br ?\/?>$/gi, '');

				nowazaw += ' |' + nazwapar + ' = ' + parametr + '\n';
				//alert(' |' + nazwapar + ' = ' + parametr);
			} else {
				nowazaw += linia2 + '\n';
			}
		}

		// składam do kupy nowy ibox
		return '{{' + nazwa + nowazaw + '}}';
	};
	// </nowiki>

	wp_sk.rFriendlyIbox = wp_sk.mm_rFriendlyIbox;
	wp_sk.extension += "+[[WP:SK/mSI|mSI.v2.1]]";
});