User:Zabshk/sk.js

// /* *\    Moduł sprzątania kodu

Opis: http://pl.wikipedia.org/wiki/WP:SK

Copyright: ©2007-2011 Maciej Jaros (pl:User:Nux, en:User:EcceNux) Licencja: GNU General Public License v2		http://opensource.org/licenses/gpl-license.php

Szczególne podziękowania dla: * Wikipedysta:ABach - za zebranie i opracowanie długiej listy elementów do sprzątania * Wikipedysta:Malarz pl - za garść kolejnych elementów do sprzątania * Wikipedysta:BartekChom - za pomysły i gotowe wyrażenia regularne * Wikipedysta:Gregul - za garść wyrażeń regularnych * Wikipedysta:PMG - za wytrwałe i szczegółowe testowanie * Wikipedysta:ToSter - za testy i pomysły na nowe rozwiązania * Wikipedysta:Beau - za inspiracje i poprawki \* */

// // Moduły zewnętrzne dla projektów siostrzanych // if ( ( typeof sel_t ) !== 'object' ) { mw.loader.load( '//pl.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=MediaWiki:Gadget-sel_t.js' ); }

/* =====================================================	Object Init ===================================================== */

if ( typeof( wp_sk_show_as_button ) === 'undefined' ) { window.wp_sk_show_as_button = true; } if ( typeof( wp_sk_redir_enabled ) === 'undefined' ) { window.wp_sk_redir_enabled = false; }

if (window.wp_sk) {	alert('Błąd krytyczny - konflikt nazw!\n\nJeden ze skryptów używa już nazwy wp_sk jako zmienną globalną.'); } window.wp_sk = {}; wp_sk.version = '2.7.58'; wp_sk.extension = '';

/* =====================================================	Function: wp_sk.debug(htxt)

Wyświetlenie komunikatu html jeśli debug aktywny ===================================================== */ wp_sk.debug = function (htxt) {	if (typeof wp_sk_debug_enabled!='undefined' && wp_sk_debug_enabled && typeof nux_debug=='function') {		nux_debug(htxt); } };

/* =====================================================	Function: wp_sk.button

Dodaje przycisk sprzątania ===================================================== */ wp_sk.button = function { var that = this; mw.loader.using( "ext.gadget.lib-toolbar", function {		toolbarGadget.addButton( { title: 'Sprzątanie kodu (wer. ' + that.version + ')', alt: 'SK', id: 'wp_sk_img_btn', oldIcon: '//upload.wikimedia.org/wikipedia/commons/2/2e/Button_broom.png', newIcon: '//commons.wikimedia.org/w/thumb.php?f=Broom%20icon.svg&w=22', onclick: function { that.cleanup( document.getElementById( 'wpTextbox1' ) ); }		} );	} ); };

/* =====================================================	Function: wp_sk.warning(input)

Dodaje ostrzeżenie i likwiduje je	po wciśnięciu odpowiedniego przycisku ===================================================== */ wp_sk.warning = function { var $summary = jQuery( '#wpSummary' ); if ( this.nochanges ) { // kolorowanka, gdy bez zmian $summary.css( 'border', '2px solid #696' ); } else if ( mw.config.get( 'wgArticleId' ) > 0 ) { $summary.css( 'border', '' );

var text = $summary.val;

var summary1 = 'po czyszczeniu kodu przejrzyj wykonane zmiany!'; var summary2 = mw.config.get( 'wp-sk-summary', 'WP:SK' );

if ( text.indexOf( summary1 ) > -1 || text.indexOf( summary2 ) > -1 ) { // opis już jest, nie potrzeba następnego return; }

if ( text !== '' ) { text += ', '; }		text += summary1; $summary.val( text ); $summary.addClass( 'summaryWarning' );

var $diff = jQuery( '#wpDiff' ); $diff.addClass( 'summaryWarning' ); $diff.click( function {			$summary.val( $summary.val.replace( summary1, summary2 + wp_sk.extension) );		} ); } };

/* =====================================================	Function: wp_sk.cleanup(input)

Główna funkcja inicjująca i wywołująca funkcję czyszczącą ===================================================== */ wp_sk.cleanup = function (input) {	// default input if (!input) {		input = document.getElementById('wpTextbox1'); }	//	// Pobierz zaznaczony fragment (całość jeśli nic nie zaznaczone) //	var str = sel_t.getSelStr(input, true); // OMG - IE & Opera fix str = str.replace(/\r\n/g, '\n');

//	// Wywołanie czyszciciela //	str = str.replace(/\n+$/,''); // bez końcowych enterów var str_pre = str; str = wp_sk.cleaner(str); wp_sk.nochanges = (str==str_pre);

//	// zapisanie zmian //	if (!wp_sk.nochanges) {		sel_t.qsetSelStr(input, str, true); }

input.focus;

wp_sk.warning; };

/* =====================================================	Function: wp_sk.cleaner(str)

Funkcja czyszcząca podany na wejściu ciąg znaków str. Zwraca przetworzony ciąg znaków. ===================================================== */ wp_sk.cleaner = function (str) {	//	// ukrywanie obszarów w tagach: nowiki, pre, source i math str = wp_sk.nowiki.hide(str);

//	// sprzątanie podstawowe str = wp_sk.cleanerLinks(str);		// wikilinki str = wp_sk.cleanerTpls(str);		// szablony str = wp_sk.nowiki.filehide(str);	// ukrywamy nazwy plików

str = wp_sk.cleanerWikiVaria(str);	// pozostałe wikiskładniowe str = wp_sk.cleanerTXT(str);		// poza składniowe

if (wp_sk.projectSpecificCleanup) { str = wp_sk.projectSpecificCleanup(str); }

//	// końcowe porządkowanie międzywiki itp str = wp_sk.cleanerMagicLinks(str);

//	// przywrócenie ukrytych tagów str = wp_sk.nowiki.show(str);

return str; };

/* =====================================================	Function: wp_sk.cleanerLinks(str)

Sprzątanie wikilinków ===================================================== */ wp_sk.cleanerLinks = function (str) {	// http://→[http://...] str = str.replace(/\[\[([a-z]+:\/\/[^\|\]]+)\]\]/g, '[$1]'); // ...→... str = str.replace(/\[\[([^|#\]]*)([^|\]]*)(\||\]\])/g, wp_sk.rLinkdecode); // wyjątek dla Spark-Renault SRT_01E str = str.replace(/\[\[Spark-Renault SRT 01E\]\]/g, 'Spark-Renault SRT_01E');

// poprawa nazw przestrzeni i drobne okoliczne str = str.replace(/\[\[(:?) *(image|grafika|file) *: *([^ ])/gi, function (a,dw,co,l1) {return '[['+dw+'Plik:'+l1.toUpperCase;} );	str = str.replace(/\[\[(:?) *(category|kategoria) *: *([^ ])/gi, function (a,dw,co,l1) {return '[['+dw+'Kategoria:'+l1.toUpperCase;} );	str = str.replace(/\[\[ *(:?) *(template|szablon) *: *([^ ])/gi, function (a,dw,co,l1) {return '[[Szablon:'+l1.toUpperCase;} );	str = str.replace(/\[\[ *(:?) *(special|specjalna) *: *([^ ])/gi, function (a,dw,co,l1) {return '[[Specjalna:'+l1.toUpperCase;} );

str = str.replace(/\[\[ *:? *[Dd]yskusja( [a-z]*) *: */g, '[[Dyskusja$1:');

// usunięcie klucza sortowania kat. jeśli w całości jest prefiksem nazwy artykułu lub nazwą artykułu if (str.search(/\{\{[ ]*(DEFAULTSORT|DOMYŚLNIESORTUJ|SORTUJ)[ ]*:/)==-1) {		str = str.replace(/\[\[(Kategoria:[^\|\[\]\n]+)\|([^\|\[\]\n]+)\]\]/gi,			function (a,kat,klucz)			{				if (wgTitle.indexOf(klucz)===0)					return +kat+				;				return a;			}		); }

// zbędne w obrazkach str = str.replace(/(\]');	// kropka	// -mid spacje	/* // zawiesza FF w niektórych warunkach, psuje niektóre opisy	str = str.replace(/(\)/g, function(a,g1,gmid,gn) {		return g1+ gmid.replace(/\s/g,'') +gn; });	*/

// usuwanie [[:pl:	str = str.replace(/\[\[ *:? *pl *: */g, '[[');

// stare przestrzenie str = str.replace(/\[\[Dyskusja Wikipedysty/g, '[[Dyskusja wikipedysty');

// [[link|| -> [[link|	str = str.replace(/\[\[ *([^\]\|:]+) *\| *\| */g, '[[$1|');

//	// (ro)zwijanie wikilinków // link > link i linka > linka //str = str.replace(/\[\[([^|\]])([^|\]]*)\|([^\]])\2([a-zA-ZżółćęśąźńŻÓŁĆĘŚĄŹŃ]*)\]\]/g, function (a, w1_1, w_rest, w2_1, poza)	str = str.replace(/\[\[([^|\]])([^|\]]*)\|([^\]])\2([a-zżółćęśąźń]*)\]\]/g, function (a, w1_1, w_rest, w2_1, poza) {		return (w1_1.toUpperCase==w2_1.toUpperCase) ? +w2_1+w_rest++poza : a;	});	// linker > linker	//str = str.replace(/\[\[([^|\]]+)\|([^|\]]+)\]\]([a-zA-ZżółćęśąźńŻÓŁĆĘŚĄŹŃ]+)/g, '$2$3');	str = str.replace(/\[\[([^|\]]+)\|([^|\[\]]+)\]\]([a-zżółćęśąźń]+)/g, '$2$3');

// usuwanie spacji w wikilinkach str = str.replace(/\[\[ *([^\]\|:]*[^\]\| ]) *\|/g, '');	str = str.replace(/([^ \t\n])\[\[ +/g, '$1 [[');	str = str.replace(/\[\[ +/g, '[[');	str = str.replace(/([^ \t\n])\[\[([^\]\|:]+)\| +/g, '$1 [[$2|');	str = str.replace(/\[\[([^\]\|:]+)\| +/g, '[[$1|');	str = str.replace(/([^ \|]) +\]\]([^ \t\na-zA-ZżółćęśąźńŻÓŁĆĘŚĄŹŃ])/g, '$1 $2');	str = str.replace(/([^ \|]) +\]\]([^a-zA-ZżółćęśąźńŻÓŁĆĘŚĄŹŃ])/g, '$1]]$2');

// sklejanie skrótów linkowych str = str.replace(/m\.? ?\[\[n\.? ?p\.? ?m\.?\]\]/g, 'm n.p.m.');

// korekty dat - niepotrzebny przecinek str = str.replace(/(\[\[[0-9]+ (stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)\]\]), (\[\[[0-9]{4}\]\])/g, '$1 $3');

// linkowanie do wieków str = str.replace(/\[\[([XVI]{1,5}) [wW]\.?\]\]/g, '$1 w.'); str = str.replace(/\[\[([XVI]{1,5}) [wW]\.?\|/g, '');	str = str.replace(/\[\[(III|II|IV|VIII|VII|VI|IX|XIII|XII|XI|XIV|XV|XVIII|XVII|XVI|XIX|XXI|XX)\]\]/g, '[[$1 wiek|$1');	str = str.replace(/\[\[(III|II|IV|VIII|VII|VI|IX|XIII|XII|XI|XIV|XV|XVIII|XVII|XVI|XIX|XXI|XX)\|/g, '[[$1 wiek|');

// rozwijanie typowych linków str = str.replace(/\[\[ang\.\]\]/g, 'ang.'); str = str.replace(/\[\[cz\.\]\]/g, 'cz.'); str = str.replace(/\[\[fr\.\]\]/g, 'fr.'); str = str.replace(/\[\[łac\.\]\]/g, 'łac.'); str = str.replace(/\[\[niem\.\]\]/g, 'niem.'); str = str.replace(/\[\[pol\.\]\]/g, 'pol.'); str = str.replace(/\[\[pl\.\]\]/g, 'pol.'); str = str.replace(/\[\[ros\.\]\]/g, 'ros.'); str = str.replace(/\[\[(((G|g)iga|(M|m)ega|(K|k)ilo)herc|[GMk]Hz)\|/g, '[[herc|');

// skracanie szablonu Dziennik Ustaw str = str.replace(/\{{2}\s*Dziennik\s+Ustaw\s*\|\s*rok\s*=\s*(\d+)\s*\|\s*numer\s*=\s*(\d+)\s*\|\s*pozycja\s*=\s*(\d+)\s*\}{2}/gi, '');

return str; }; /* =====================================================	Function: wp_sk.cleanerTpls(str)

Sprzątanie szablonów ===================================================== */ wp_sk.cleanerTpls = function (str) {	// niepotrzebna przestrzeń str = str.replace(/\{\{ *([Tt]emplate|[Ss]zablon|msg) *: */g, '{{'); // polski DEFAULTSORT str = str.replace(/\{\{ *(DEFAULTSORT|DOMYŚLNIESORTUJ) *: */g, '{{SORTUJ:');

// zbędne spacje w szablonach jedno wierszowych str = str.replace(/\{\{[ \t]+([^\n\{\} ]+)[ \t]*\}\}/g, '{{$1}}').replace(/\{\{([^\n\{\}]+?)[ \t]+\}\}/g, '{{$1}}');

// mala litera wewnatrz {{lang|...}} str = str.replace(/((\{\{lang\|[^}_]+)((_[^}]+)\}\}))/gi, function (a, fil, first, rest) {	return first.toLowerCase+rest;}); // poprawki lang i nowy multilang str = str.replace(/\{\{lang\|cz\}\}/g, '{{lang|cs}}'); str = str.replace(/\{\{lang\|dk\}\}/g, '{{lang|da}}'); str = str.replace(/\{\{lang\|nb\}\}/g, '{{lang|no}}'); str = str.replace(/(\{\{lang\|[a-z-]+\}\}[\t ]*){2,10}/g, function(a) {		return '{{lang'+a.replace(/\{\{lang\|([a-z-]+)\}\}\s*/g, '|$1')+'}}';	});

// wciąganie {{lang}} do szablonów cytowania str = str.replace(/{{(cytuj [^{}]+?)}} {{lang\|([a-z-]+)}}/gi, '{{$1 | język = $2}}');

// ujednolicanie nazw szablonów (tabela poniżej) str = str.replace(/\{\{([sS]\||)([^{}\n\|]+)(\||\}\})/g, function(a, pre, nazwa, post)	{		nazwa = nazwa.toLowerCase;		if (wp_sk.sz_redirs_tab[nazwa])		{			a = '{{'+pre + wp_sk.sz_redirs_tab[nazwa] + post;		}		return a;	});

str = str.replace(/\{\{commons\|Category:/gi, '{{commonscat|');

// poprawka, bo FF wywala się na czołgach np. http://pl.wikipedia.org/w/index.php?title=T-72&diff=14511491&oldid=14437344 str = str.replace(//g, function(a) {		a			.replace(/\{/g,'###comment_klamra_l###')			.replace(/\}/g,'###comment_klamra_r###')		;		return a;	}); // uczłowieczanie szablonów str = str.replace(/\{\{([^|}]+?[ _]infobo[^|}]+)((?:[^{}]|[^{}][{}][^{}]|\{\{(?:[^{}]|[^{}][{}][^{}]|\{\{[^{}]+\}\})+\}\})+)\}\}/g, wp_sk.rFriendlyIbox); // rev poprawki str = str.replace(//g, function(a) {		a			.replace(/###comment_klamra_l###/g, '{')			.replace(/###comment_klamra_r###/g, '}')		;		return a;	});

return str; }; /* =====================================================	Function: wp_sk.cleanerWikiVaria(str)

Sprzątanie pozostałych elementów wikiskładni ===================================================== */ wp_sk.cleanerWikiVaria = function (str) {	if ( mw.config.get( 'wp-sk-fix-wikipedia-sections', true ) ) { // unifikacja nagłówkowa str = str.replace(/[ \n\t]*\n? *(Zobacz|Patrz) (też|także|również):* *?[ \t]*\n[ \t\n]*/gi, '\n\n== Zobacz też ==\n'); str = str.replace(/[ \n\t]*\n? *(Zobacz|Patrz) (też|także|również):* *?[ \t]*(.+)/gi, function(a, w1, w2, linki)		{			if (linki.indexOf('[')!=-1)			{				// add first list el.				linki = '* ' + linki;				// next?				if (linki.indexOf(',')!=-1)				{					// escape in-link and in-tpl comma					var escape_fun = function(a){ return a.replace(/,/g,'<<<#>>>') };					linki = linki.replace(/\[\^\[\+\]\]/g, escape_fun);					linki = linki.replace(/\{\{[^\{\}]+\}\}/g, escape_fun);					// split					linki = linki.replace(/,[ \t]*/g, '\n* ');					// unescape					linki = linki.replace(/<<<#>>>/g,',');				}			}			return '\n\n== Zobacz też ==\n'+linki;		}); str = str.replace(/[ \n\t]*\n(=+) *(Zobacz|Patrz) (te[zźż]|tak[zźż]e|r[oó]wnie[zźż]):* *=+[ \n\t]*/gi, '\n\n$1 Zobacz też $1\n'); str = str.replace(/[ \n\t]*\n? *((Zewn[eę]trzn[ey] )?(Linki?|Łącza|Stron[ay]|Zobacz w (internecie|sieci))( zewn[eę]trzn[aey])?):* *?[ \n\t]*/gi, '\n\n== Linki zewnętrzne ==\n'); str = str.replace(/[ \n\t]*\n(=+) *((Zewn[eę]trzn[ey] )?(Linki?|Łącza|Stron[ay]|Zobacz w (internecie|sieci))( zewn[eę]trzn[aey])?):* *=+[ \n\t]*/gi, '\n\n$1 Linki zewnętrzne $1\n'); str = str.replace(/[ \n\t]*\n(=+) *([ŹŻZ]r[óo]d[łl]a):* *=+[ \n\t]*/gi, '\n\n$1 Źródła $1\n'); }

// nagłówki str = str.replace(/(^|\n)(=+) *([^=\n].*?)[ :]*\2(?=\s)/g, '$1$2 $3 $2'); // =a= > = a =, =a:= > = a = str = str.replace(/(^|\n)(=+[^=\n]+=+)[\n]{2,}/g, '$1$2\n');	// jeden \n

if ( mw.config.get( 'wp-sk-fix-wikipedia-sections', true ) ) { // przypisy - szablon str = str.replace(/\n== Przypisy ==[ \t\n]+/g, '\n{{Przypisy}}'); str = str.replace(/\n(={3,}) Przypisy \1[ \t\n]+/g, '\n{{Przypisy|stopień= $1}}'); str = str.replace(/\{\{Przypisy\|stopień==/g, '{{Przypisy|stopień= ='); }

// przypisy - przyprzątnięcia /*	// rozwijamy {{r}}, bo kod niżej pracuje na -ach str = str.replace(/{{r((?:\|[^|}]+)*)}}/g, function(a, inside) {		return inside.replace(/\|([^|}]+)/g, function(b, name) { // escape'ujemy " w nazwach			return ' ';		});	});	*/	str = str.replace(/<(ref[^<>\/]*?)[ ]*> *<\/ref>/g, "<$1 />");	// puste na pojedynczy	str = str.replace(/[ \t]+(]|\{\{[Ff]akt(?:\|data=[0-9\-]+)?\}\})/g, '$1');		// bez białych przed	// nowe linie przed ref w references	str = str.replace(/( |\{\{Przypisy[\s\S]*?\|\s*przypisy\s*=|\{\{Uwagi[\s\S]*?\|\s*uwagi\s*=|\{\{Przypisy-lista[\s\S]*?\|\s*l\. kolumn\s*=\s*[0-9]+\s*\|\s*1=|\{\{Przypisy-lista[\s\S]*?\|\s*(1\s*=)|\{\{Przypisy-lista[\s\S]*?\|)((?: \n)|(\{{2}(?:odn|r|u)\|[^}]+\}{2}))+)/gi, "$2$1");	// przecinek	str = str.replace(/((?:\s|^)[^& ]*);((?:(?:)|(\{{2}(?:odn|r|u)\|[^}]+\}{2}))+)/gi, "$1$2;");	// średnik	str = str.replace(/([a-zA-Z\u00C0-\u017F]{5}|[\[\]{}"”'>])[.]((?:(?:)|(\{{2}(?:odn|r|u)\|[^}]+\}{2}))+)/gi, "$1$2.");	// długi wyraz lub znak specjalny str = str.replace(/([a-zA-Z00C0-017F][aeiouyąę])[.]([']*(?:(?:)|(\{{2}(?:odn|r|u)\|[^}]+\}{2}))+)/gi, "$1$2.");	// krótki z samogłoską str = str.replace(/(<\/ref>|\{{2}(?:odn|r|u)\|[^}]+\}{2})\.(?=[!?,.:;…]\s)/gi, '$1');	// kropka przed innym interpunkcyjnym /*	// zwijamy z powrotem do {{r}} str = str.replace(/< *ref *name *= *(?:"([^">\n]+)"|'([^'>\n]+)'|([^\s'"\/]+)) *\/ *>/g, function(a, name1, name2, name3) {		return "{{r|" + (name1||name2||name3) + "}}";	}); // łączymy kolejne wywołania postaci {{r}}{{r}} // nie działa dla wywołań z parametrami grupaN= str = str.replace(/(\{\{r(\|([^|}]+))+\}\}\s*)+/g, function(refs) {		return refs.replace(/\}\}\s*\{\{r\|/g, '|');	}); */

// fakty i interpunkcja str = str.replace(/([,])(\{\{[Ff]akt(?:\|data=[0-9\-]+)?\}\})/g, "$2$1");	// przecinek str = str.replace(/((?:\s|^)[^& ]*);(\{\{[Ff]akt(?:\|data=[0-9\-]+)?\}\})/g, "$1$2;");	// średnik str = str.replace(/([a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]{5}|[\[\]{}"”'>])[.](\{\{[Ff]akt(?:\|data=[0-9\-]+)?\}\})/g, "$1$2.");	// długi wyraz lub znak specjalny	str = str.replace(/([a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ][aeiouyąę])[.](\{\{[Ff]akt(?:\|data=[0-9\-]+)?\}\})/g, "$1$2.");	// krótki z samogłoską

// listy ze spacjami str = str.replace(/(\n[#*:;]+)(?![ \t\n#*:;{]|if[a-z]* ?:|switch ?:|time ?:|rel2abs ?:|titleparts ?:)/g, '$1 ');

// rozwijanie linków w listach str = str.replace(/\n\*[ \t]*\[(http:\/\/[^ \n\]]+)\]/g, "\n* [$1 $1]");

// galerie fix cooked by ToSter str = str.replace(/";	});

return str; }; /* =====================================================	Function: wp_sk.cleanerTXT(str)

Sprzątanie nie związane bezpośrednio z wikiskładnią ===================================================== */ wp_sk.cleanerTXT = function (str) {	// usuwanie unikodowych znaków sterujących str = str.replace(/[\u200B\uFEFF\u200E]/g, '');

// korekty dat // występuje w interwiki (hr) //str = str.replace(/([0-9])\. *(stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)/g, '$1 $2')	// niepotrzebna kropka // problem z nazwami plików //str = str.replace(/([^0-9])0([0-9]) *(stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia)/g, '$1$2 $3');	// niepotrzebne 0

// poprawkowate różne (kolejność jest istotna!) str = str.replace(/&deg;/g, '°'); str = str.replace(/&sum;/g, '∑'); str = str.replace(/&larr;/g, '←'); str = str.replace(/&rarr;/g, '→'); str = str.replace(/&uarr;/g, '↑'); str = str.replace(/&darr;/g, '↓'); str = str.replace(/&dagger;/g, '†'); str = str.replace(/ o<\/sup>/g, '°');

str = str.replace(/(\[[^[\]|]*)([%‰°])/g, '$1<<<$2>>>'); // nie zmieniamy spacji w linkach, nazwach plików ....	str = str.replace(/([0-9]) (%|‰)/g, '$1$2');	str = str.replace(/([0-9]) (°)(?![A-Z])/gi, '$1$2'); // tylko sam stopien; bez np.: °Blg, °C, °F, °Ld itp.	str = str.replace(/([0-9])(°[CF])/g, '$1 $2'); // spacja	str = str.replace(/(\[[^[\]|]*)<<<([%‰°])>>>/g, '$1$2'); // przywracamy poprzednie linki ....

str = str.replace(/<\/?br ?\/?>/gi, ' ');

// dopisanie kropki itp str = str.replace(/ (tzw|tzn) /g, ' $1. '); str = str.replace(/([ \n])ok\.([0-9])/g, '$1ok. $2'); //str = str.replace(/([ \n])ok ([^ ])/g, '$1ok. $2'); str = str.replace(/ d\/s /g, ' ds. '); str = str.replace(/ wg\. /g, ' wg ');

// sklejanie skrótów str = str.replace(/m\.? ?(npm\.?|n[. ]{1,3}p[. ]{1,3}m\.?)/g, 'm n.p.m.'); str = str.replace(/ m\. in\./g, ' m.in.'); str = str.replace(/ o\. o\./g, ' o.o.');

// Sprawy wagi Państwowej ;-)	str = str.replace(/(gmina wiejska w powiecie [a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\-]+ województwa [a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\-]+) II Rzeczpospolitej/g, '$1 II Rzeczypospolitej');

return str; }; /* =====================================================	Function: wp_sk.cleanerMagicLinks(str)

Sprzątanie końcowe magicznych linków i elementów powiązanych - międzywiki, medale dla nich i kategorie. ===================================================== */ wp_sk.cleanerMagicLinks = function (str) {	// zbieranie str = wp_sk.cat.gather(str); str = wp_sk.iWiki.gather(str); str = wp_sk.iWikiFA.gather(str); str = wp_sk.iWikiGA.gather(str); str = wp_sk.iWikiFL.gather(str);

// usuwanie pozostawionych przy zbieraniu i innych wielokrotnych, pustych wierszy str = str.replace(/[\n]{3,}/g, '\n\n');

// wstawienie na koniec (call not copy to have "this") str = str.replace(/\s*$/, function(a) {return wp_sk.cat.output(a)}); str = str.replace(/\s*$/, function(a) {return wp_sk.iWikiFA.output(a)}); str = str.replace(/\s*$/, function(a) {return wp_sk.iWikiGA.output(a)}); str = str.replace(/\s*$/, function(a) {return wp_sk.iWikiFL.output(a)}); str = str.replace(/\s*$/, function(a) {return wp_sk.iWiki.output(a)});

return str; };

/* =====================================================	Funkcje wspomagające porządkowanie          {START} - */ // // Sprzątanie infoboksów // wp_sk.rFriendlyIbox = function (a,nazwa,zaw) {	if (zaw.indexOf('>>/g,'<<<#$1>>>'); 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 zaw = '\n'+zaw+'\n'; zaw = zaw.replace(/\s*\|(\s*)/g, function(a, post)	{		if (a.indexOf('\n')==-1)		{			return a;		}		else if (post.indexOf('\n')==-1)		{			return '\n |'+post;		}		else		{			return '\n | ';		}	});

// puste spacje po znakach = zaw = zaw.replace(/=\n/g, '= \n');

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

//	// Zakończenie //	return '{{'+nazwa.substring(0,1).toUpperCase+nazwa.substring(1)+zaw+'}}'; }; // // Dekodowanie linków // wp_sk.rLinkdecode = function(a,name,anchor,end) {	try {		name=decodeURIComponent(name); anchor=decodeURIComponent(anchor.replace(/\.([0-9A-F]{2})/g,'%$1')); a='[['+name+anchor+end;	}	catch(err){}

a = a.replace(/\{\{/g, '.7B.7B'); a = a.replace(/\}\}/g, '.7D.7D'); a = a.replace(/802\x11/g, '802.11'); return a.replace(/_/g,' '); }; /* -	Funkcje wspomagające porządkowanie         {KONIEC} ===================================================== */

/* =====================================================	Klasy wspomagające porządkowanie            {START} - */ /* =====================================================	Class: wp_sk.nowiki

Ukrywanie obszarów w tagach: nowiki, pre, source i math

.hide(str) ukrywanie tagów specjalnych wraz z ich wnętrzami .show(str) przywrócenie ukrytych tagów ===================================================== */ // // object init // wp_sk.nowiki = {};

// // .hide(str) // wp_sk.nowiki.hide = function(str) {	//	// escapowanie przed nowikowe str = str.replace(/<<<(#*[0-9]+)>>>/g, '<<<#$1>>>'); //	// właściwe ukrywanie var re = /<(nowiki|pre|source|math|includeonly|noinclude)(|[ \t\n][^>]*)>/g; var m;	wp_sk.nowiki.tags = []; // póki znaleziono tag otwierający for (wp_sk.nowiki.t_i = 0; (m=re.exec(str))!==null; wp_sk.nowiki.t_i++) {		var start, end, re_end; start = m.index; // odszukanie końca:  re_end = new RegExp("", "g"); m = re_end.exec(str.substring(re.lastIndex)); end = (m===null) ? str.length : re.lastIndex+re_end.lastIndex; // dopisanie do tablicy zawartości wp_sk.nowiki.tags[wp_sk.nowiki.t_i] = str.substring(start,end); // zamiana całości znalezionego obszaru na: << >> str = str.substring(0,start)+"<<<"+wp_sk.nowiki.t_i+">>>"+str.substring(end); // szukanie od startu, bo część znaków już usunięto re.lastIndex = start; }	//	// komentarze str = str.replace(//g, function(comment) {		wp_sk.nowiki.t_i++;		wp_sk.nowiki.tags[wp_sk.nowiki.t_i] = comment;		return "<<<"+wp_sk.nowiki.t_i+">>>";	}); return str; }; // // .filehide(str) // wp_sk.nowiki.filehide = function(str) {	str = str.replace(/\[\[(:? *plik *: *[^\]\|]*)/ig, function(comment,filelink) {		wp_sk.nowiki.t_i++;		wp_sk.nowiki.tags[wp_sk.nowiki.t_i] = filelink;		return "[[<<<"+wp_sk.nowiki.t_i+">>>";	});	return str; }; // // .show(str) // wp_sk.nowiki.show = function(str) {	var max_depth = 3;	// tagi	for (var i=0; i>>/g, function (a, i)		{			return wp_sk.nowiki.tags[i];		});		if (str.search(/<<<([0-9]+)>>>/)==-1) {			break;		}	}	// odescapowanie nowikowe	str = str.replace(/<<<#(#*[0-9]+)>>>/g, '<<<$1>>>');

return str; };

/* =====================================================	Class: wp_sk.cat

Zbieranie, porządkowanie i wstawianie kategorii

.gather(str) zbieranie kategorii ze str ze zwrotem nowego str .output(a) porządkuje i zwraca wikitekst z kategoriami; parametr a jest nieistotny .getDefSort zwraca wyrażenie regularne dla defaultsort .newDefSort szukanie nowego (najpopularniejszego) defaultsort

.art_def_sort znaleziony w artykule defaultsort .def_sort wybrany dla artykułu defsort .arr tablica z kategoriami ('nazwa|sorotwanie') .arr_i indeks pomocniczy, a także liczba elementów w arr ===================================================== */ // object init wp_sk.cat = {}; // // .gather(str) // wp_sk.cat.gather = function(str) {	//	// zbiórka i kasowanie wp_sk.cat.arr = []; wp_sk.cat.arr_i = 0; wp_sk.cat.art_def_sort = ''; wp_sk.cat.map = []; str = str.replace(/\{\{SORTUJ:([^\{\}]+|\{\{[^\{\}]+\}\})\}\}(?:[ \t]+\n)?/g, function(a, ds){wp_sk.cat.art_def_sort=ds; return ''}); str = str.replace(/(?:\n[ \t]+)?\[\[Kategoria:([^\]\[]+)\]\](?:[ \t]+\n)?/g, function(a, cat) {		if (!wp_sk.cat.map[cat]) {			wp_sk.cat.arr[wp_sk.cat.arr_i++]=cat;			wp_sk.cat.map[cat] = 1;		}		return '';	}); wp_sk.cat.def_sort = wp_sk.cat.art_def_sort;

return str; }; function PolishCollator { // Source: https://pl.wiktionary.org/wiki/MediaWiki:Gadget-sk.js	var orderArray = ['aä', 'ą', 'ã', 'á', 'b', 'c', 'ć', 'd', 'e', 'ę', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'ł', 'm', 'n', 'oö', 'ó', 'p', 'q', 'r', 's', 'ś', 't', 'uü', 'v', 'w', 'x', 'y', 'z', 'ź', 'ż']; var orderHash = {};

// Prepare orderHash for ( var i = 0; i < orderArray.length; i++ ) { var items = orderArray[i].split( '' ); for ( var j = 0; j < items.length; j++ ) { orderHash[items[j]] = i;		} }

/**	 * Compares two strings. */	this.compare = function( a, b ) { var len = Math.min( a.length, b.length ); a = a.toLocaleLowerCase; b = b.toLocaleLowerCase;

for ( var i = 0; i < len; i++ ) { var aValue = orderHash[a.charAt( i )]; var bValue = orderHash[b.charAt( i )];

if ( aValue == null || bValue == null ) { return a.charAt( i ).localeCompare( b.charAt( i ) ); } else if ( aValue > bValue ) { return 1; } else if ( aValue < bValue ) { return -1; }		}		if ( a.length < b.length ) { return -1; } else if ( a.length > b.length ) { return 1; } else { return 0; }	};

return this; }

// // .output(a) // wp_sk.cat.output = function (a) {	if (wp_sk.cat.arr_i==0) {		return a;	} var str = mw.config.get( 'wp-sk-categories-head', '\n' );

//	// sortowanie (jeśli dostępna odpowiednia funkcja) if ( mw.config.get( 'wp-sk-sort-categories', false ) ) { var collator = new PolishCollator; wp_sk.cat.arr.sort( function( a, b ) {			return collator.compare( a, b );		} ); }

//	// ustawienie regexp dla defaultsort (wg starego lub znalezionego) var reDefSort = wp_sk.cat.getDefSort;

//	// zbędne spacje for (var i=0; i<wp_sk.cat.arr_i; i++) {		if (/^.+\| $/.test(wp_sk.cat.arr[i]) == false) {			wp_sk.cat.arr[i] = wp_sk.cat.arr[i].replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");	// trim }	}

//	// "wyświetlanie" kategorii if (reDefSort!="") // jeśli jest jakiś defaultsort {		str += '\n{{SORTUJ:'+wp_sk.cat.def_sort+'}}'; for (var i=0; i<wp_sk.cat.arr_i; i++) {			// jeśli nie było defaultsort i puste, to dodajemy domyślne, żeby nie psuć if (!wp_sk.cat.art_def_sort.length && wp_sk.cat.arr[i].indexOf('|')==-1) {				str += '\n'; }			else {				wp_sk.cat.arr[i] = wp_sk.cat.arr[i].replace(reDefSort,'');	// usuwanie klucza str += '\n'; }		}	}	else {		for (var i=0; i1) {		wp_sk.cat.def_sort = wp_sk.cat.newDefSort; }

var reDefSort=""; if (wp_sk.cat.def_sort!="") {		// zamiana na regexp (żeby uniknąć częściowych dopasowań) reDefSort = wp_sk.cat.def_sort.replace(/([{}\[\]\\|.*?$^])/g, '\\$1'); reDefSort = new RegExp('\\|'+reDefSort+'$'); }

return reDefSort; } // // .newDefSort // wp_sk.cat.newDefSort = function {	var def_sort = '';

//	// sprawdzenie, czy wybrano jakiś klucz sortowania w kategoriach var sort_i; for (sort_i=0; sort_i0) total_sort_num++; }	//	// jeśli mało kluczy (byłoby dużo {{PAGENAME}}), to bez domyślnego klucza if (total_sort_num*2<wp_sk.cat.arr_i) //<50% {		return ''; }

//	// jeśli wybrano jakieś sorotwanie, to szukamy nowego klucza (wg popularności) if (sort_i!=wp_sk.cat.arr_i) {		//		//		var def_sort_num = 0; var def_sort_forbiden = ['!', ' ', '*', '+']; for (var i = sort_i; i<wp_sk.cat.arr_i; i++)	// zaczynamy od już znalezionego {			var j, tmp_def_sort, tmp_def_sort_re, tmp_def_sort_num;

// dochodzimy do klucza kandydującego for (j = i; j<wp_sk.cat.arr_i && wp_sk.cat.arr[j].indexOf('|')<0; j++); if (j==wp_sk.cat.arr_i) break; i = j;

// klucz tmp_def_sort = wp_sk.cat.arr[j].substr(wp_sk.cat.arr[j].indexOf('|')+1); if (def_sort == tmp_def_sort)	// już był {				continue; }			// zamiana na regexp (żeby uniknąć częściowych dopasowań) tmp_def_sort_re = tmp_def_sort.replace(/([{}\[\]\\|.*?$^])/g, '\\$1');	// escapowanie znaków regexpowych tmp_def_sort_re = new RegExp('\\|'+tmp_def_sort_re+'$');

// liczenie wystąpień var tmp_def_sort_num=1; for (j++; j tmp_def_sort_num) {				continue; }			if (tmp_def_sort_num*2>wp_sk.cat.arr_i && def_sort_forbiden.indexOf(tmp_def_sort)<0) //>50% || nie niedozwolone {				def_sort_num = tmp_def_sort_num; def_sort = tmp_def_sort; }		}	}

return def_sort; }

/* =====================================================	Class: wp_sk.iWiki

Zbieranie, porządkowanie i wstawianie interwiki

.gather(str) zbieranie interwiki ze str ze zwrotem nowego str .output(a) porządkuje i zwraca wikitekst z interwiki; parametr a jest nieistotny .comp(a, b)		porównuje a z b i zwraca wartość odpowiednią dla funkcji sort

.order tablica z językami ustawionymi wg kolejności wg której mają być sortowane interwiki .arr tablica z interwiki ([język, artykuł]) .arr_i indeks pomocniczy, a także liczba elementów w arr ===================================================== */ // object init wp_sk.iWiki = new Object; // // .gather(str) // wp_sk.iWiki.gather = function(str) {	wp_sk.iWiki.arr = new Array; wp_sk.iWiki.arr_i = 0; str = str.replace(		// wg: http://meta.wikimedia.org/wiki/List_of_Wikipedias		/\[\[\s*([a-z\-]+)\s*:([^\]\|\[]+)\]\](?:[ \t]+\n)?/gi,		function (a, lang, art)		{			lang = lang.toLowerCase; // blah			// wg: http://svn.wikimedia.org/svnroot/mediawiki/trunk/phase3/maintenance/interwiki.sql			if (wp_sk.iWiki.order.indexOf(lang) >= 0) // czy na pewno interwiki			{				wp_sk.iWiki.arr[wp_sk.iWiki.arr_i] = new Array(lang,art);				wp_sk.iWiki.arr_i++;				return '';			}			else			{				return a;			}		}	);

return str; } // // .output(a) // wp_sk.iWiki.output = function (a) {	if (wp_sk.iWiki.arr_i==0) {		return a;	} var str = '\n';

wp_sk.iWiki.arr.sort(wp_sk.iWiki.comp); // alfabetycznie wg kodu literowego for (var i=0; i wp_sk.iWiki.order.indexOf(b[0])) {		return 1; }	// else return 0; } // wg http://meta.wikimedia.org/wiki/Interwiki_sorting_order#By_order_of_alphabet.2C_based_on_local_language // Pomoc:Interwiki wp_sk.iWiki.order = [ 'ace', 'kbd', 'af', 'ak', 'als', 'am', 'ang', 'ab', 'ar', 'an', 'arc', 'roa-rup', 'frp', 'as', 'ast', 'gn', 'av', 'ay', 'az', 'bm', 'bn', 'bjn', 'zh-min-nan', 'nan', 'map-bms', 'ba', 'be', 'be-x-old', 'bh', 'bcl', 'bi', 'bg', 'bar', 'bo', 'bs', 'br', 'bxr', 'ca', 'cv', 'ceb', 'cs', 'ch', 'cbk-zam', 'ny', 'sn', 'tum', 'cho', 'co', 'cy', 'da', 'dk', 'pdc', 'de', 'dv', 'nv', 'dsb', 'dz', 'mh', 'et', 'el', 'eml', 'en', 'myv', 'es', 'eo', 'ext', 'eu', 'ee', 'fa', 'hif', 'fo', 'fr', 'fy', 'ff', 'fur', 'ga', 'gv', 'gag', 'gd', 'gl', 'gan', 'ki', 'glk', 'gu', 'got', 'hak', 'xal', 'ko', 'ha', 'haw', 'hy', 'hi', 'ho', 'hsb', 'hr', 'io', 'ig', 'ilo', 'bpy', 'id', 'ia', 'ie', 'iu', 'ik', 'os', 'xh', 'zu', 'is', 'it', 'he', 'jv', 'kl', 'kn', 'kr', 'pam', 'krc', 'ka', 'ks', 'csb', 'kk', 'kw', 'rw', 'rn', 'sw', 'kv', 'kg', 'ht', 'ku', 'kj', 'ky', 'mrj', 'lad', 'lbe', 'lo', 'ltg', 'la', 'lv', 'lb', 'lez', 'lt', 'lij', 'li', 'ln', 'jbo', 'lg', 'lmo', 'hu', 'mk', 'mg', 'ml', 'mt', 'mi', 'mr', 'xmf', 'arz', 'mzn', 'ms', 'cdo', 'mwl', 'mdf', 'mo', 'mn', 'mus', 'my', 'nah', 'na', 'fj', 'nl', 'nds-nl', 'cr', 'ne', 'new', 'ja', 'nap', 'ce', 'frr', 'pih', 'no', 'nb', 'nn', 'nrm', 'nov', 'ii', 'oc', 'mhr', 'or', 'om', 'ng', 'hz', 'uz', 'pa', 'pi', 'pfl', 'pag', 'pnb', 'pap', 'ps', 'koi', 'km', 'pcd', 'pms', 'tpi', 'nds', 'pl', 'tokipona', 'tp', 'pnt', 'pt', 'aa', 'kaa', 'crh', 'ty', 'ksh', 'ro', 'rmy', 'rm', 'qu', 'rue', 'ru', 'sah', 'se', 'sm', 'sa', 'sg', 'sc', 'sco', 'stq', 'st', 'nso', 'tn', 'sq', 'scn', 'si', 'simple', 'sd', 'ss', 'sk', 'sl', 'cu', 'szl', 'so', 'ckb', 'srn', 'sr', 'sh', 'su', 'fi', 'sv', 'tl', 'ta', 'kab', 'roa-tara', 'shi', 'tt', 'te', 'tet', 'th', 'ti', 'tg', 'to', 'chr', 'chy', 've', 'tr', 'tk', 'tw', 'udm', 'bug', 'uk', 'ur', 'ug', 'za', 'vec', 'vep', 'vi', 'vo', 'fiu-vro', 'wa', 'zh-classical', 'vls', 'war', 'wo', 'wuu', 'ts', 'yi', 'yo', 'zh-yue', 'diq', 'zea', 'bat-smg', 'zh', 'zh-tw', 'zh-cn', ]

/* =====================================================	Class: wp_sk.iWikiFA | iWikiGA | iWikiFL

Zbieranie, porządkowanie i wstawianie interwikowych szablonów Featured Articles

.gather(str) zbieranie szablonów FA ze str ze zwrotem nowego str .output(a) porządkuje i zwraca wikitekst z szablonami FA; parametr a jest nieistotny

.arr tablica z szablonami FA ([język, artykuł]) .arr_i indeks pomocniczy, a także liczba elementów w arr ===================================================== */ // object init wp_sk.iWikiFA = { 're': /\{\{[Ll]ink FA\|([a-z\-]{2,3}|simple|ru-sib|be-x-old|zh-yue|map-bms|zh-min-nan|nds-nl|bat-smg|zh-classical|fiu-vro|roa-rup|tokipona|cbk-zam|roa-tara)\}\}(?:[ \t]+\n)?/g, 'out_szablon' : 'Link FA' } // // .gather(str) // wp_sk.iWikiFA.gather = function(str) {	var arr = new Array; var arr_i = 0; // wg: http://meta.wikimedia.org/wiki/List_of_Wikipedias str = str.replace(		this.re,		function (a, lang)		{			// wg: http://svn.wikimedia.org/svnroot/mediawiki/trunk/phase3/maintenance/interwiki.sql			if (wp_sk.iWiki.order.indexOf(lang) >= 0) // czy na pewno interwiki			{				arr[arr_i] = lang;				arr_i++;				return '';			}			else			{				return a;			}		}	); this.arr = arr; this.arr_i = arr_i;

return str; } // // .output(a) // wp_sk.iWikiFA.output = function (a) {	if (this.arr_i==0) {		return a;	} var str = '\n';

this.arr.sort(wp_sk.iWiki.comp); // alfabetycznie wg kodu literowego // funkcja wspólna wp_sk.iWiki for (var i=0; i<this.arr_i; i++) {		str += '\n{{'+this.out_szablon+'|'+this.arr[i]+'}}'; }

return str; }

// // iWikiGA // // object init wp_sk.iWikiGA = { 're': /\{\{[Ll]ink GA\|([a-z\-]{2,3}|simple|ru-sib|be-x-old|zh-yue|map-bms|zh-min-nan|nds-nl|bat-smg|zh-classical|fiu-vro|roa-rup|tokipona|cbk-zam|roa-tara)\}\}(?:[ \t]+\n)?/g, 'out_szablon' : 'Link GA' } // rest as above wp_sk.iWikiGA.gather = wp_sk.iWikiFA.gather; wp_sk.iWikiGA.output = wp_sk.iWikiFA.output;

// // iWikiFL // // object init wp_sk.iWikiFL = { 're': /\{\{[Ll]ink FL\|([a-z\-]{2,3}|simple|ru-sib|be-x-old|zh-yue|map-bms|zh-min-nan|nds-nl|bat-smg|zh-classical|fiu-vro|roa-rup|tokipona|cbk-zam|roa-tara)\}\}(?:[ \t]+\n)?/g, 'out_szablon' : 'Link FL' } // rest as above wp_sk.iWikiFL.gather = wp_sk.iWikiFA.gather; wp_sk.iWikiFL.output = wp_sk.iWikiFA.output;

/* =====================================================	Class: wp_sk.redir

Poprawianie redrictów. Przynajmniej na razie bazuje na podglądzie artykułu, w którym redirecty są oznaczone specjalną klasą (mw-redirect).

.init inicjowanie poprawek przez wstawienie ikonki przetwarzania wyszukanie redirectów i wysłanie wstępnego żądania do serwera o rozwinięcie redirectów .resp(res) funkcja przyjmująca odpowiedzieć (res) z serwera i przetwarzająca ją na tabelką rozwinięć redirectów

.arr	- tabela rozwinięć redirectów wykorzystywana wewnętrznie .arr_i	- indeks używany przy tworzeniu tabeli .url	- url wstępnego zapytania, potrzebny w razie konieczności kontynuowania żądań (wymóg API) ===================================================== */ // // object init // wp_sk.redir = new Object;

wp_sk.redir.linkPrefix = document.location.protocol + "//" + document.location.hostname + mw.config.get( 'wgArticlePath' ).replace( '$1', '' );

wp_sk.redir.extractTitle = function( link ) { if ( link.substring( 0, this.linkPrefix.length ) != this.linkPrefix ) { return null; }

return decodeURIComponent( link.substring( this.linkPrefix.length ).replace( /_/g, ' ' ) ).replace( /#.*$/, '' ); }

// // .init // wp_sk.redir.init = function {	wp_sk.redir.base_url = mw.util.wikiScript('api') + '?action=query&redirects&format=json&titles=';

// ograniczenie czasowe, ale tylko w podglądzie (żeby nie zamęczyć serwerów) if (wgAction=='submit') {		if (document.cookie.indexOf('wpsk_redir_time_disable=1')!=-1) {			return; }		else {			var d = new Date; d = new Date(d.getTime+300000); //+5min (il. sekund * 1000) document.cookie = "wpsk_redir_time_disable=1; path=/; expires=" + d.toGMTString; }	}

var elWikiBody = document.getElementById('wikiPreview'); if (elWikiBody) {		//		// szukanie przekierowań wp_sk.redir.urls = new Array; wp_sk.redir.urls[0] = new Array; var url_i = url_j = 0; var as = jQuery("a.mw-redirect"); for (var i=0; i=50)	// ograniczenie API {					if (url_i>=4)	// max (4+1)x50 linków {						break; }					url_j = 0; wp_sk.redir.urls[++url_i] = new Array; }			}		}		//		// ostateczne przygotowanie i wysyłanie żądania if (wp_sk.redir.urls[0].length>0) {			var $notice = jQuery(' Sprawdzanie linków do przekierowań... '); jQuery('#wpTextbox1').before($notice);

// na znalezione redirecty wp_sk.redir.arr = new Array; wp_sk.redir.arr_i = 0;

// przygotowanie pierwszej porcji wp_sk.redir.urls_i = 0; var url = wp_sk.redir.urls[wp_sk.redir.urls_i].join('|'); wp_sk.redir.url = wp_sk.redir.base_url+url; wp_sk.redir.full_prev_url = wp_sk.redir.url; //wp_sk.debug(' ['+wp_sk.redir.urls_i+']['+wp_sk.redir.urls[wp_sk.redir.urls_i].length+'] '); // run var that = this; jQuery.getJSON( wp_sk.redir.url, null, function( result ) {				that.resp( result );			} ); }	} }

// // .resp(res) // wp_sk.redir.resp = function (jres) {	var that = this;

// zbiórka tłumaczenia redirectów var txtescape = /([\\^\$\*\+\?\.\(\)\[\]\{\}\:\=\!\|\,\-])/g; for (var r in jres.query.redirects) {		r = jres.query.redirects[r]; wp_sk.redir.arr[wp_sk.redir.arr_i++] = { 'rdir' : r.from, 'art' : r.to		} //wp_sk.debug('['+(wp_sk.redir.arr_i-1)+']rdir:'+r.from+' art:'+r.to); }	// kontynuacja? if (jres['query-continue']!=null) {		var continue_url = wp_sk.redir.url + '&plcontinue='+encodeURIComponent(jres['query-continue'].links.plcontinue); if (wp_sk.redir.full_prev_url != continue_url)	// api potential bug workaround {			wp_sk.redir.full_prev_url = continue_url; jQuery.getJSON( continue_url, null, function( result ) {				that.resp( result );			} ); return; }		else {			//wp_sk.debug('<p style="font-weight:bold;font-size:200%">Warning! Query continue loop. '); }	}	// kolejna porcja linków else if (wp_sk.redir.urls_i < wp_sk.redir.urls.length-1) {		var url = wp_sk.redir.urls[++wp_sk.redir.urls_i].join('|'); wp_sk.redir.url = wp_sk.redir.base_url+url; wp_sk.redir.full_prev_url = wp_sk.redir.url; //wp_sk.debug(' ['+wp_sk.redir.urls_i+']['+wp_sk.redir.urls[wp_sk.redir.urls_i].length+'] '); jQuery.getJSON( wp_sk.redir.url, null, function( result ) {			that.resp( result );		} ); return; }

/*	// debug - start var str; // szukane str = '' for (var i=0;i<wp_sk.redir.urls.length;i++) for (var j=0;j<wp_sk.redir.urls[i].length;j++) str += '\nwp.urls['+i+']['+j+']='+ wp_sk.redir.urls[i][j] ;	wp_sk.debug(' '+str+' ');

// znalezione str = '' for (var i=0;i<wp_sk.redir.arr.length;i++) str += '\nwp.rdirs['+i+']='+ wp_sk.redir.arr[i].rdir ;	wp_sk.debug(' '+str+' '); // debug - end */

// przygotowanie funkcji podmiany redirectów wp_sk.cleanerLinks_orig = wp_sk.cleanerLinks; wp_sk.cleanerLinks = function (str) {		var reTxtEscape = /([\\^\$\*\+\?\.\(\)\[\]\{\}\:\=\!\|\,\-])/g; for (var page in wp_sk.redir.arr) {			page = wp_sk.redir.arr[page]; var re = page.rdir.replace(reTxtEscape,'\\$1'); if (re.search(/^[a-zżółćęśąźń]/i)==0) {				re = '['+ re[0].toLowerCase + re[0].toUpperCase +']' + re.substr(1); }			var re = new RegExp('\\[\\[('+re+')(\\||\\]\\])', 'g'); str = str.replace(re, function (a, art, end)			{				return  ? '|' : '|'+art+);			}); }

return wp_sk.cleanerLinks_orig(str);	// dopiero teraz, żeby poprawiać także zmienione linki }

jQuery( "#wp-sk-redir-notice" ).remove;

var el = document.getElementById( 'wp_sk_img_btn' ); if ( toolbarGadget.wikieditor ) { el.src = '//commons.wikimedia.org/w/thumb.php?f=Broom%20icon%20R.svg&w=22'; } else { el.src = '//upload.wikimedia.org/wikipedia/commons/3/31/Button_broom_R.png'; } } /* -	Klasy wspomagające porządkowanie           {KONIEC} ===================================================== */

/* =====================================================	Function: Array.prototype.indexOf(elt)

Dostępna normalnie: Gecko>1.8b2 ===================================================== */ if (!Array.prototype.indexOf) {	Array.prototype.indexOf = function(elt /*, from*/) {		var len = this.length;

var from = Number(arguments[1]) || 0; from = (from < 0) ? Math.ceil(from) : Math.floor(from); if (from < 0) from += len;

for (from < len; from++) {			if (from in this && this[from] === elt) return from; }		return -1; }; }

wp_sk.sz_redirs_tab = {};

/* =====================================================	OnLoad ===================================================== */

jQuery( document ).ready( function {	if ( mw.config.get( 'wgAction' ) != 'submit' && mw.config.get( 'wgAction' ) != 'edit' ) {		return;	}

if ( wp_sk_show_as_button ) { wp_sk.button; }

// ktoś może mieć ustawiony podgląd od razu przy edycji - wówczas działa od razu if ( wp_sk_redir_enabled ) { wp_sk.redir.init; } } );

//