Wikipedysta:Persino/Gadget-StronicowyParser.js/Kategorie.js

Z Wikibooks, biblioteki wolnych podręczników.

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.
StronicowyParser.Kategorie=function(){
	let zmienna_this=this;
	zmienna_this.StworzTabliceKategoriiZCatLinks=async function(){
		let tabcat=new Array();
		let catlinks=document.querySelector("#bodyContent > #catlinks.catlinks:not(.catlinks-allhidden)");
		if(catlinks){
			let a=catlinks.getElementsByTagName('a');
			if((a!==null)&&(a.length>0)){
  				let re_category_1=new RegExp("^\\/wiki\\/\\s*(.*)$","g");
  				let re_category_2=new RegExp("^\\/w\\/index\\.php\\?\\s*title\\s*=\\s*([^&]*).*$","g");
				for(let i=0;i<a.length;++i){
					let href=a[i].getAttribute('href');
					href=StronicowyParser.kodowanie.DecodeHtml(href,true);
					let czy_href_1=re_category_1.test(href);
					let czy_href_2=re_category_2.test(href);
					if(czy_href_1){
						href=StronicowyParser.kodowanie.DecodeWiki(href).replace(re_category_1,"$1");
					}else if(czy_href_2){
						href=StronicowyParser.kodowanie.DecodeWiki(href).replace(re_category_2,"$1");
					}
					if((czy_href_1)||(czy_href_2)){
						if(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g.test(href)){
							href=href.replace(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g,"");
							tabcat[href]=true;
						}
					}
				}
			}
		}
		return tabcat;
	}
	zmienna_this.StworzTabliceKategoriiStrony=async function(strona){
		let tab=new Array();
		await StronicowyParser.api.ZadaniaApi({
			action: 'query',
			format: 'json',
			prop: 'categories',
			titles: strona
		}).then(function(data){
			var pages = data.query.pages;
			for(let p in pages){
				pages[ p ].categories.forEach(function(cat){
					tab[cat.title.replace(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g,"")]=true;
				});
			}
		}).catch(()=>{});
		return tab;
	};
	zmienna_this.StworzTabliceKategoriiIKluczyZDanychWikikodu=async function(data){
		let categories=data.parse.categories;
		let tab_kategoria=new Array();
	    for(let i=0;i<categories.length;++i){
	    	let kat=StronicowyParser.kodowanie.DecodeWiki(categories[i]["*"]);
	    	let sortkey=categories[i]["sortkey"];
	    	let tak=true;
	    	for(let j=0;j<tab_kategoria.length;++j){
	    		if(tab_kategoria[j]==kat){
	    			tak=false;
	    			break;
	    		}
	    	}
	    	if(tak){
	    		tab_kategoria[kat]=sortkey||true;
	    	}
	    }
	    return tab_kategoria;
	}
	let muteks_cookie=new StronicowyParser.Muteks();
	zmienna_this.StworzCookieDlaKategoriiStrony=async function(data,klucz){		
		await muteks_cookie.zablokuj();
		klucz=klucz||"CzłonkowieKategorii:";
		let tabcat=await zmienna_this.StworzTabliceKategoriiIKluczyZDanychWikikodu(data);
		let catlinks=await zmienna_this.StworzTabliceKategoriiZCatLinks();
		let tab_kat=new Array();
		let fullname=StronicowyParser.kodowanie.DecodeWiki(StronicowyParser.pageinfo.fullname);
		for(let p in tabcat){
			
			let m="Kategoria:"+p;
			tab_kat[tab_kat.length]=m;
			
			let strona_do_kat=mw.cookie.get(m,klucz);
			
			let tab_strona_do_kat=((strona_do_kat)?(strona_do_kat.split("||")):(new Array()));
			let tak=true;
			for(let i=0;i<tab_strona_do_kat.length;++i){
				if(tab_strona_do_kat[i].match(/^[^|]*/g).toString()==fullname){
					tak=false;
					break;
				}
			}
			if(tak){
				let key=tabcat[p];
				tab_strona_do_kat[tab_strona_do_kat.length]=fullname+((typeof key == "string")?((key!="")?("|"+key):""):"");
				let wartosc=tab_strona_do_kat.join('||');
				mw.cookie.set(m,wartosc,{prefix: klucz});
			}
		}
		for(let p in catlinks){tab_kat.push("Kategoria:"+p);};
		
		let dane=mw.cookie.get(fullname,"CzłonkowieStron");
		let tab_dane=((dane)?(dane.split('|')):(new Array()));
		
		for(let i=0;i<tab_dane.length;++i){
			let kategoria=tab_dane[i];
			let kategoria_bez_prefiksu=kategoria.replace(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g,"");
			let tak=((!tabcat[kategoria_bez_prefiksu])&&(!catlinks[kategoria_bez_prefiksu]));
			if(tak){
				let tab_strona_do_kat=TworzTabliceCzasteczekKlucza(kategoria,klucz);
				if(tab_strona_do_kat!==null){
					for(let j=0;j<tab_strona_do_kat.length;){
						strona=tab_strona_do_kat[j];
						if(strona[0]==fullname){
							tab_strona_do_kat.splice(j,1);
						}else{	
							++j;
						}	
					}
					let str="";
					for(let k=0;k<tab_strona_do_kat.length;++k){
						str=((str!="")?("||"):"")+tab_strona_do_kat[k][0]+(((!tab_strona_do_kat[k][1])||(tab_strona_do_kat[k][1]!=""))?("|"+tab_strona_do_kat[k][1]):"");
					}
					mw.cookie.set(kategoria,str,{prefix: klucz});
				}
			}
		}
		mw.cookie.set(fullname,tab_kat.join('|'),{prefix:"CzłonkowieStron"});
		mw.cookie.set("Kategoria:Szablony z niejawnie błędnymi parametrami","Kategoria:Szablony - błędy szablonów||Kategoria:Kategorie||Kategoria:Kategorie dla kategorii|Błędy p||Plik:Burza_mozgu.png||Plik:C.pdf|Ag||Plik:Zanurkuj w Pythonie.pdf|Ah",{prefix:"CzłonkowieKategorii:"});
		mw.cookie.set("Kategoria:Szablon kategoria - nieistniejąca kategoria","Wikipedysta:Persino/brudnopis1||Wikipedysta:Persino/brudnopis||Kategoria:Szablony - błędy szablonów||Kategoria:Kategorie||Plik:Burza_mozgu.png||Plik:C.pdf|Ag||Plik:Zanurkuj w Pythonie.pdf|Ah",{prefix:"CzłonkowieKategorii:"});
		console.log(mw.cookie.get("Kategoria:Szablony z niejawnie błędnymi parametrami","CzłonkowieKategorii:"),"CCCCC")
		muteks_cookie.odblokuj();
	}
	
	let zdarzenia_muteks=new StronicowyParser.Muteks();
	zmienna_this.DodajSwojeInneZdarzeniaDoObsługiiDrzewaKategorii=async function(){
        async function InfoIleKategoria(){
                await zdarzenia_muteks.zablokuj();
                let id=this;
                let czas=0;
                function categoryTreeChildrenFun(resolve,reject){
                	let notice=$(id).parents('.CategoryTreeItem').siblings('.CategoryTreeChildren').children('.CategoryTreeNotice');
                	if((notice!==null)&&(notice.length>0)){
                		let komunikat=notice[0].innerHTML;
                		if((komunikat=="nic nie znaleziono")||(komunikat=="brak podkategorii")){
                			resolve("Dobrze");
                			return;
                		}
                	}
                	let el=$(id).parents('.CategoryTreeItem').siblings('.CategoryTreeChildren').children('.CategoryTreeSection');
                	if ((el!==null)&&(el.length>0)){resolve("Dobrze");}else{
                		if(czas>=30000){reject("Dobrze");}else{
                			setTimeout(() => {categoryTreeChildrenFun(resolve,reject);}, 300);
                			czas+=300;
                		}
                	}
                }
	       		await new Promise((resolve, reject) => {categoryTreeChildrenFun(resolve,reject);}).then(()=>{}).catch(()=>{});
	       		
	       	   $('body.ns-14 #mw-content-text .mw-category-generated > #mw-subcategories .CategoryTreeToggle, body #mw-content-text .mw-parser-output .CategoryTreeTag .CategoryTreeToggle').each((h,element)=>{
					$(element).off('click');
            	});
	       		
	       		let item=$(id).parent().parent();
	       		if((item!==null)&&(item.length>0)){
	       			await zmienna_this.ZaaktualizujInformacjeOKategorachiWPrzestrzeniKategorii(item[0]);
	       			await zmienna_this.DodajKategorieDoDrzewaKategoriiWKategoriach(item[0]);
	       		}
            	
            	$(id).data("ct-loaded",true);
        
        		await StronicowyParser.script.LoadScript('ext.categoryTree.styles');
				await StronicowyParser.script.LoadScript('ext.categoryTree');
        
        		try{
        			await mw.loader.using( ['ext.categoryTree'], function (){
						StronicowyParser.script.requireFile('ext.categoryTree')();
					});
        		}catch(error){};
				
				await $('body.ns-14 #mw-content-text .mw-category-generated > #mw-subcategories .CategoryTreeToggle, body #mw-content-text .mw-parser-output .CategoryTreeTag .CategoryTreeToggle').on('click', InfoIleKategoria);
				zdarzenia_muteks.odblokuj();
         }
		 $('body.ns-14 #mw-content-text .mw-category-generated > #mw-subcategories .CategoryTreeToggle, body #mw-content-text .mw-parser-output .CategoryTreeTag .CategoryTreeToggle').on('click', InfoIleKategoria);
	}
	async function IleJakichStron(klucz){
		let params = {
				action: 'expandtemplates',
				format: 'json',
				prop: 'wikitext',
				title: StronicowyParser.pageinfo.fullname,
				text: '{{#invoke:Techniczne|LiczbaStronJakoPozycjeDanejKategorii|kategoria='+klucz+'|typ=subcats|wyspecjalizowana=tak}}',
				smaxage: 600,
				maxage: 600,
				};

    	let ile_kategorii=0;
		await StronicowyParser.api.ZadaniaApi(params).then(function(data){
			ile_kategorii=parseInt(data.expandtemplates.wikitext);
		}).catch((error) => {});
			        	
		params = {
				action: 'expandtemplates',
				format: 'json',
				prop: 'wikitext',
				title: StronicowyParser.pageinfo.fullname,
				text: '{{#invoke:Techniczne|LiczbaStronJakoPozycjeDanejKategorii|kategoria='+klucz+'|typ=pages|wyspecjalizowana=tak}}',
				smaxage: 600,
				maxage: 600,
		};

	    let ile_stron=0;
		await StronicowyParser.api.ZadaniaApi(params).then(function(data){
				ile_stron=parseInt(data.expandtemplates.wikitext);
		}).catch((error) => {});
						
		params = {
				action: 'expandtemplates',
				format: 'json',
				prop: 'wikitext',
				title: StronicowyParser.pageinfo.fullname,
				text: '{{#invoke:Techniczne|LiczbaStronJakoPozycjeDanejKategorii|kategoria='+klucz+'|typ=files|wyspecjalizowana=tak}}',
				smaxage: 600,
				maxage: 600,
		};

	    let ile_plikow=0;
		await StronicowyParser.api.ZadaniaApi(params).then(function(data){
			ile_plikow=parseInt(data.expandtemplates.wikitext);
		}).catch((error) => {});
		return new Array(ile_kategorii,ile_stron,ile_plikow);
	}
	let tab_kategorie_strony_pliki={
		0:'subcat',
		1:'page',
		2:'file',
	}
	async function TablicaJakichWszystkichStron(klucz,czy_kategorie){
		let params = {
					action: 'query',
					list: 'categorymembers',
					cmtitle: klucz,
					cmlimit: 5000,
					cmprop: 'title|sortkeyprefix',
					cmtype: tab_kategorie_strony_pliki[czy_kategorie],	
					format: 'json',
					smaxage: 600,
					maxage: 600,
				};
        let tab=new Array();
		await StronicowyParser.api.ZadaniaApi(params).then(function(data){
				var category = data.query.categorymembers;
				for(let cat in category){
					let categorymembers=category[cat];
					let title=categorymembers.title;
					let sortkey=categorymembers.sortkeyprefix;
					tab[cat]=new Array(title.replace(/^[\s_]*/g,"").replace(/[\s_]*$/g,"").replace(/[\s_]+/g," "),sortkey);
				}
		}).catch((error) => {});
		return tab;
	}
	async function SortKey(href,tab_href,tab_strona_href_aktualnej_czasteczkowej_kategorii){
		let nazwa_przestrzeni=undefined;
		let nazwa_strony=undefined;
		let re_kategoria=/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g.test(href);
		let re_plik=/^[Pp][Ll][Ii][Kk]:/g.test(href);
		if((!re_kategoria)&&(!re_plik)){
			const nazwa_przestrzeni_promise=StronicowyParser.nazwy.NAZWAPRZESTRZENI(href);
			const nazwa_strony_promise=StronicowyParser.nazwy.NAZWASTRONY(href);
			
			await Promise.all([nazwa_przestrzeni_promise,nazwa_strony_promise]).then((values) =>{ 
				nazwa_przestrzeni=values[0];
				nazwa_strony=values[1];
			}).catch(()=>{});
			
		}else if(re_kategoria){
			nazwa_przestrzeni="";
			nazwa_strony=href.replace(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g,"");
		}else if(re_plik){
			nazwa_przestrzeni="";
			nazwa_strony=href.replace(/^[Pp][Ll][Ii][Kk]:/g,"");
		}
		for(let i=0;i<tab_href.length;++i){
			let title=tab_href[i][0];
			let sortkey=tab_href[i][1];
			if(title==href){
				return ((sortkey)?sortkey:"")+nazwa_strony+nazwa_przestrzeni;
			}
		}
         for(let i=0;i<tab_strona_href_aktualnej_czasteczkowej_kategorii.length;++i){
         	let tab_title=tab_strona_href_aktualnej_czasteczkowej_kategorii[i];
         	let title=tab_title[0].replace(/^[\s_]*/g,"").replace(/[\s_]*$/g,"").replace(/[\s_]+/g," ");
         	if(title==href){
         		return ((tab_title[1])?tab_title[1]:"")+nazwa_strony+nazwa_przestrzeni;
         	}
        }
		return nazwa_strony+nazwa_przestrzeni;
	}
	function TworzTabliceCzasteczekKlucza(href,klucz){
		let czasteczka_href=mw.cookie.get(href,(klucz||"CzłonkowieKategorii:"));
		if(!czasteczka_href){return null;}
		let tab_cookie=new Array();
		let tab_strona_do_kat=czasteczka_href.split("||");
		for(let i=0;i<tab_strona_do_kat.length;++i){
			let rozdziel_cookie=tab_strona_do_kat[i].split("|");
			tab_cookie.push(new Array(rozdziel_cookie[0],rozdziel_cookie[1]));
		}
		return tab_cookie;
	}
	function CzyTablicaCzasteczekPosiadaKategorie(tablica_stron){
	    for(let i=0;i<tablica_stron.length;++i){
	    	let kategoria=tablica_stron[i][0];
	    	if(/^[\s_]*[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa][\s_]*:.+$/g.test(kategoria)){
	    		return true;
	    	}
	    }
	    return false;
	}
	zmienna_this.DodajStronyDoAktualnejKategorii=async function(){
		let mw_category_generated=document.querySelector('body.ns-14 #mw-content-text .mw-category-generated');
		if(!mw_category_generated){return;}
		await muteks_cookie.zablokuj();
		let tab_strona_do_kat=TworzTabliceCzasteczekKlucza(StronicowyParser.kodowanie.DecodeWiki(StronicowyParser.pageinfo.fullname));
		muteks_cookie.odblokuj();
		if(!tab_strona_do_kat){return;}
		let category=false;let page=false;
		if(tab_strona_do_kat.length==0){return;}
		let ile_podkategorii=0;
		let ile_stron=0;
		let ile_plikow=0;
		
		for(let i=0;i<tab_strona_do_kat.length;++i){
			let pelna_nazwa_strony=tab_strona_do_kat[i][0].replace(/[\s_]+/g," ");
			if(pelna_nazwa_strony.match(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/)){
				++ile_podkategorii;
			}else if(pelna_nazwa_strony.match(/^[Pp][Ll][Ii][Kk]:/)){
				++ile_plikow;
			}else{
				++ile_stron;
			}
		}
		
		let mw_pages=mw_category_generated.querySelector('#mw-pages');
		let mw_subcategories=mw_category_generated.querySelector('#mw-subcategories');
		let media=mw_category_generated.querySelector('#mw-category-media');
		function PageLubCategory(mw_,page){
			if(!mw_){
			
				let div=document.createElement('div');
				div.setAttribute('id',((page)?'mw-pages':'mw-subcategories'));
			
				let h2=document.createElement('h2');
				h2.innerHTML=((page)?('Strony w kategorii „'+StronicowyParser.pageinfo.pagename.replace(/[\s_]+/g," ")+'"'):"Podkategorie");
				div.appendChild(h2);
				let p=document.createElement('p')
				p.innerHTML='Poniżej wyświetlono 0 spośród wszystkich 0 '+((page)?'stron':'podkategorii')+' w tej kategorii.';
				div.appendChild(p);
			
				let con=document.createElement('div');
				con.setAttribute('class','mw-content-ltr');
				con.setAttribute('dir','ltr');
				con.setAttribute('lang','pl')
				let mw_category=document.createElement('div');
				mw_category.setAttribute('class','mw-category');
				con.appendChild(mw_category);
				div.appendChild(con);
				if((mw_pages)&&(!page)){
					return mw_category_generated.insertBefore(div,mw_pages);
				}else{	
					return mw_category_generated.appendChild(div);
				}
			}
			return mw_;
		}
        if(((!mw_pages)&&(!mw_subcategories)&&(!media))&&((ile_stron>0)||(ile_podkategorii>0)||(ile_plikow>0))){
			mw_category_generated.innerHTML="";
        }
        let tab_mw_=new Array();
        let tab_mw_muteks=new Array();
        let tab_co=new Array();
		if(ile_stron>0){
			if((!mw_pages)&&(ile_stron>0)){
				mw_pages=PageLubCategory(mw_pages,true);
			}
			tab_mw_.push(mw_pages);
			tab_co.push(1);
			tab_mw_muteks.push(new StronicowyParser.Muteks())
		}
		if(ile_podkategorii>0){
			if((!mw_subcategories)&&(ile_podkategorii>0)){
				mw_subcategories=PageLubCategory(mw_subcategories,false);
			}
			tab_mw_.push(mw_subcategories);
			tab_co.push(0);
			tab_mw_muteks.push(new StronicowyParser.Muteks())
		}
		
		let tab_promise=new StronicowyParser.GenerowaneObiekty();
		for(let d=0;d<tab_mw_.length;++d){
			let strona_mutkat=new StronicowyParser.Muteks();
			tab_promise.wygeneruj(1);
			(async function(tab_mw_,tab_mw_muteks,d){
				let elem=tab_mw_[d];
				if(elem==mw_subcategories){
					if(ile_podkategorii>0){
						await StronicowyParser.script.LoadScript('ext.categoryTree.styles');
						await StronicowyParser.script.LoadScript('ext.categoryTree');
					}else{
						return;
					}
				}else if(elem==mw_pages){
					if(ile_stron>0){
					}else{
						return;
					}
				}
				let mutkat=tab_mw_muteks[d];
				let mw_category=elem.querySelector('.mw-category');
				if(mw_category){
					let a_linki_istniejace;
					if(elem==mw_subcategories){
						a_linki_istniejace=$(elem).find('.mw-category > .mw-category-group > ul > li > .CategoryTreeSection > .CategoryTreeItem > a');
					}else if(elem==mw_pages){
						a_linki_istniejace=$(elem).find('.mw-category > .mw-category-group  > ul > li > a');
					}else{
						return;
					}
					let tab_a=new Array();
				
					for(let i=0;i<a_linki_istniejace.length;++i){
						let href=StronicowyParser.kodowanie.DecodeHtml(a_linki_istniejace[i].getAttribute('href'),true).replace(/\/wiki\//g,"");
						tab_a[href]=true;
					}
					let tab_href=await TablicaJakichWszystkichStron(StronicowyParser.kodowanie.DecodeWiki(StronicowyParser.pageinfo.fullname),tab_kategorie_strony_pliki[tab_co[d]]);
					
					let tab_klucz_href_poprzednie=undefined;
					if(a_linki_istniejace.length>0){
						let href_pierwsze=StronicowyParser.kodowanie.DecodeHtml(a_linki_istniejace[0].getAttribute('href'),true).replace(/\/wiki\//g,"");
						for(let i=0;i<tab_href.length;++i){
							let href_aktualne=tab_href[i][0];
							if(href_pierwsze==href_aktualne){
								break;
							}else{
								let sortkey=tab_href[i][1];
								tab_klucz_href_poprzednie=new Array(sortkey,href_aktualne);
							}
						}
					}
					let klucz_href_poprzednie=undefined;
					if(tab_klucz_href_poprzednie){
						await (async function (){
							let przestrzen;let nazwa_strony;
							const przestrzen_promise=StronicowyParser.nazwy.NAZWAPRZESTRZENI(tab_klucz_href_poprzednie[1]);
							const nazwa_strony_promise=StronicowyParser.nazwy.NAZWASTRONY(tab_klucz_href_poprzednie[1]);
							await Promise.all([przestrzen_promise, nazwa_strony_promise]).then((values) => {
								przestrzen=values[0];
								nazwa_strony=values[1];
							}).catch(()=>{});
					
							klucz_href_poprzednie=tab_klucz_href_poprzednie[0]+nazwa_strony+przestrzen;
						})();
					}
					for(let k=0;k<tab_strona_do_kat.length;++k){
						tab_promise.wygeneruj(1);
						(async function(tab_strona_do_kat,k){
							let klucze=tab_strona_do_kat[k];
							async function CzyWchodzic(){
         						await strona_mutkat.zablokuj();
								if(tab_a[klucze[0]]){strona_mutkat.odblokuj();return false;}
    							tab_a[klucze[0]]=true;
    							strona_mutkat.odblokuj();
    							return true;
         					}
							if(await CzyWchodzic()){
								if(
									(((mw_pages)&&(elem==mw_pages))&&(!/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g.test(klucze[0]))&&(!/^[Pp][Ll][Ii][Kk]:/g.test(klucze[0])))
									||((mw_subcategories)&&(elem==mw_subcategories)&&(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g.test(klucze[0])))){
									
									let przestrzen;let nazwa_strony;let pelna_nazwa_strony;
									if(elem==mw_pages){
										const przestrzen_promise=StronicowyParser.nazwy.NAZWAPRZESTRZENI(klucze[0]);
										const nazwa_strony_promise=StronicowyParser.nazwy.NAZWASTRONY(klucze[0]);
										await Promise.all([przestrzen_promise, nazwa_strony_promise]).then((values) => {
											przestrzen=values[0];
											nazwa_strony=values[1];
										}).catch(()=>{});
									}else{
										przestrzen="";
										nazwa_strony=klucze[0].replace(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g,"");
									}
									
									let sortkey=((klucze[1])?(klucze[1]):"")+nazwa_strony+przestrzen;
									
									let czy_strony=(!klucze[0].match(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g));
									let pierwsza_litera=sortkey.substring(0,1).toUpperCase();
				       
									async function DodawajKategorieDoStronyKategorii(klucz,pierwsza_litera){
				        				let div=document.createElement('div');
			    	    				div.setAttribute('class','CategoryTreeSection');
			        					let div2=document.createElement('div');
			        					div2.setAttribute('class','CategoryTreeItem');
				        				let div3=document.createElement('div');
				        				div3.setAttribute('class','CategoryTreeChildren');
				        				div3.style.display='none';
				        	
			        					let tab=await IleJakichStron(klucz);
										let ile_podkategorii=tab[0];
										let ile_stron=tab[1];
										let ile_plikow=tab[2];
			        	
					        			let span;
					        			if(ile_podkategorii>0){
					        				span=document.createElement('span');
				    	    				span.setAttribute('class','CategoryTreeBullet')
			    	    	
				    	    				let span2=document.createElement('span');
				        					span2.setAttribute('class','CategoryTreeToggle CategoryTreeToggleHandlerAttached');
				        					span2.setAttribute('data-ct-title',nazwa_strony);
				        					span2.setAttribute('data-ct-state','collapsed');
					        				span2.setAttribute('title','rozwiń');
				    	    				span.appendChild(span2);
				        					let spacja=document.createTextNode(" ");
				        					span.appendChild(spacja);
					        			}else{
					        				span=document.createElement('span');
					        				span.setAttribute('class','CategoryTreeEmptyBullet');
				    	    			}
			    	    				div2.appendChild(span);
				    	    			let a=document.createElement('a');
				        				a.setAttribute('href',"/wiki/"+klucz);
					        			a.setAttribute('title', klucz.replace(/[\s_]+/g,"_"));
				    	    			a.innerHTML=nazwa_strony;
				        				div2.appendChild(a);
				        				let text=document.createTextNode(" ");
					        			div2.appendChild(text);
					        			let span_ile=document.createElement('span');
					        			span_ile.setAttribute('title',"Zawiera "+ile_podkategorii+" podkategorie, "+ile_stron+" stron i "+ile_plikow+" plików")
				    	    			span_ile.setAttribute('dir','ltr');
			        		
			    	    				if(parseInt(ile_podkategorii)+parseInt(ile_stron)+parseInt(ile_plikow)>0){
					    	    			let tab=new Array();
					        				if(ile_podkategorii>0){
					        					tab[tab.length]=ile_podkategorii+" kat.";
						        			}
						        			if(ile_stron>0){
						        				tab[tab.length]=ile_stron+" str.";
					    	    			}
					        				if(ile_plikow>0){
				    	    					tab[tab.length]=ile_plikow+" pl.";
					        				}
						        			span_ile.innerHTML="("+tab.join(" ,")+")";
							    		}else{
					        				span_ile.innerHTML="(pusta)";
					        			}
			        	
			    	    				div2.appendChild(span_ile);
				        				div.appendChild(div2);
				        				div.appendChild(div3);
				        	
					        			if(!pierwsza_litera){
					        				let li=document.createElement('li');
				    	    				li.appendChild(div)
				        					return li;
			    	    				}
			        	
					        			let divg=document.createElement('div');
										divg.setAttribute('class','mw-category-group');
										let h3=document.createElement('h3');
										h3.innerHTML=pierwsza_litera;
										divg.appendChild(h3);
			        	
				    	    			let ul=document.createElement('ul');
										let li=document.createElement('li');
										li.appendChild(div);
										ul.appendChild(li);
										divg.appendChild(ul)
				        				return divg;
				        			}
									function DodawajStronyDoStronyKategorii(klucz,pierwsza_litera){
										if(!pierwsza_litera){
											let a=document.createElement('a');
											a.setAttribute('href','/wiki/'+klucz);
											a.setAttribute('title',klucz.replace(/[\s_]+/g," "));
											a.innerHTML=klucz.replace(/[\s_]+/g," ");
											let li=document.createElement('li');
											li.appendChild(a);
											return li;
										}
										let div=document.createElement('div');
										div.setAttribute('class','mw-category-group');
										let h3=document.createElement('h3');
										h3.innerHTML=pierwsza_litera;
										div.appendChild(h3);
										let ul=document.createElement('ul');
										let li=document.createElement('li');
										let a=document.createElement('a');
										a.setAttribute('href','/wiki/'+klucz);
										a.setAttribute('title',klucz.replace(/[\s_]+/g," "));
										a.innerHTML=klucz.replace(/[\s_]+/g," ");
										li.appendChild(a);
										ul.appendChild(li);
										div.appendChild(ul);
										return div;
									}
									await mutkat.zablokuj();
									let tak=true;
									if(mw_category.innerHTML==""){
            	    					let div=czy_strony?DodawajStronyDoStronyKategorii(klucze[0],pierwsza_litera):await DodawajKategorieDoStronyKategorii(klucze[0],pierwsza_litera);
										mw_category.appendChild(div);
										tak=undefined;
									}else{
											let mw_category_group=$(mw_category).children();
											if((mw_category_group!==null)&&(mw_category_group.length>0)){
												for(let i=0;i<mw_category_group.length;++i){
													let element=mw_category_group[i];
													let litera=element.querySelector('h3').innerHTML;
													if(i==0){
														if(klucz_href_poprzednie){
															let tab1=new Array(sortkey,klucz_href_poprzednie).sort();
															let tab2=(new Array(sortkey,litera)).sort();
															
															if((pierwsza_litera!=litera)&&(tab1[1]==sortkey)&&(tab2[0]==sortkey)){
																let div=czy_strony?DodawajStronyDoStronyKategorii(klucze[0],pierwsza_litera):await DodawajKategorieDoStronyKategorii(klucze[0],pierwsza_litera);
																mw_category.insertBefore(div,element);
																tak=undefined;
																break;
															}
														}else{
															let tab2=(new Array(sortkey,litera)).sort();
															if(tab2[0]==sortkey){	
																let div=czy_strony?DodawajStronyDoStronyKategorii(klucze[0],pierwsza_litera):await DodawajKategorieDoStronyKategorii(klucze[0],pierwsza_litera);
																mw_category.insertBefore(div,element);
																tak=undefined;
																break;
															}
														}
													}
											    	if(litera!==pierwsza_litera){
														let tab1=(new Array(sortkey,litera)).sort();
														if(tab1[1]==sortkey){
															let element2=mw_category_group[i+1];
															if(element2){
																let litera2=element2.querySelector('h3').innerHTML;
																let tab2=(new Array(sortkey,litera2)).sort();
																if(tab2[0]==sortkey){
																	let div=czy_strony?DodawajStronyDoStronyKategorii(klucze[0],pierwsza_litera):await DodawajKategorieDoStronyKategorii(klucze[0],pierwsza_litera);
																	mw_category.insertBefore(div,element2)
																	tak=undefined;
																	break;
																}
															}else{
																let p_=elem.querySelector('p');
											    				let ile_stron=parseInt(p_.innerHTML.replace(/^([^\d]+)(\d+)([^\d]+)(\d+)([^\d]+)$/g,"$2"));
												    			let ile_wszystkich_stron=parseInt(p_.innerHTML.replace(/^([^\d]+)(\d+)([^\d]+)(\d+)([^\d]+)$/g,"$4"));
												    			if((ile_stron==ile_wszystkich_stron)||((ile_stron<=ile_wszystkich_stron)&&(ile_stron<=200))){
																	let div=czy_strony?DodawajStronyDoStronyKategorii(klucze[0],pierwsza_litera):await DodawajKategorieDoStronyKategorii(klucze[0],pierwsza_litera);
																	mw_category.appendChild(div);
																	tak=undefined;
																	break;
												    			}
															}
												    	}
													}else{
														let ul=element.querySelector('ul');
														let li=$(ul).children();
														if((li!==null)&&(li.length>0)){
															let poprzedni_klucz=undefined;
															for(let j=0;j<li.length;++j){
																let a=li[j].querySelector('a');
																let href=a.getAttribute('href');
																href=StronicowyParser.kodowanie.DecodeHtml(href,true);
																href=href.replace(/^\/wiki\//g,"");
																async function Li(klucz){
																	let li=czy_strony?DodawajStronyDoStronyKategorii(klucz,null):await DodawajKategorieDoStronyKategorii(klucz,null);
																	return li;
																}
																if(j==0){
																	group=true;
																	if(klucz_href_poprzednie){
																		let klucz_href=await SortKey(href,tab_href,tab_strona_do_kat);
																		let tab1=(new Array(sortkey,klucz_href)).sort();
																		let tab2=new Array(sortkey,klucz_href_poprzednie).sort();
																			
																		if((tab1[0]==sortkey)&&(tab2[1]==sortkey)){
																			let li2=await Li(klucze[0]);
																			ul.insertBefore(li2,li[0]);
																			tak=undefined;
																			break;
																		}
																	}else{
																		let klucz_href=await SortKey(href,tab_href,tab_strona_do_kat);
																		let tab1=(new Array(sortkey,klucz_href)).sort();
																		if(tab1[0]==sortkey){
																			let li2=await Li(klucze[0]);
																			ul.insertBefore(li2,li[0]);
																			tak=undefined;
																			break;
																		}
																	}
																}
																let klucz_href1=poprzedni_klucz||await SortKey(href,tab_href,tab_strona_do_kat);
														        if(li[j+1]){
																	let a2=li[j+1].querySelector('a');
																	let href2=a2.getAttribute('href');
																	href2=StronicowyParser.kodowanie.DecodeHtml(href2,true);
																	href2=href2.replace(/^\/wiki\//g,"")
																	let klucz_href2=await SortKey(href2,tab_href,tab_strona_do_kat);
																	poprzedni_klucz=klucz_href2;
															
																	let tab1=(new Array(sortkey,klucz_href1)).sort();let tab2=(new Array(sortkey,klucz_href2)).sort();
																		
																	if((tab1[1]==sortkey)&&(tab2[0]==sortkey)){
																		let li2=await Li(klucze[0]);
																    	ul.insertBefore(li2,li[j+1]);
																    	poprzedni_klucz=undefined;
																		tak=undefined;
																    	break;
																	}else{
																		poprzedni_klucz=klucz_href2;
																	}
																}else{
																	let p=elem.querySelector('p');
												    				let ile_stron=parseInt(p.innerHTML.replace(/^([^\d]+)(\d+)([^\d]+)(\d+)([^\d]+)$/g,"$2"));
												    				let ile_wszystkich_stron=parseInt(p.innerHTML.replace(/^([^\d]+)(\d+)([^\d]+)(\d+)([^\d]+)$/g,"$4"));
												    				if((ile_stron==ile_wszystkich_stron)||((ile_stron<=ile_wszystkich_stron)&&(ile_stron<=200))){
																		let li2=await Li(klucze[0]);
																		ul.appendChild(li2);
																		poprzedni_klucz=undefined;
																		tak=undefined;
																		break;
																	}
																}
															}
														}
													}
											}
										}
									}
				
									let li_=$(elem).find(':not(.CategoryTreeChildren) li');
									if(li_.length>6){
										let mw_category=elem.querySelector('.mw-category');
										if(!$(mw_category).hasClass('mw-category-columns')){
											mw_category.classList.add('mw-category-columns');
										}
									}
									if(!tak){
			  							let p_=elem.querySelector('p');
										function replace(s,s1,s2,s3,s4,s5){
											return s1+li_.length+s3+(parseInt(s4)+1)+s5;
										}
										p_.innerHTML=p_.innerHTML.replace(/^([^\d]+)(\d+)([^\d]+)(\d+)([^\d]+)$/g,replace);
									}
									mutkat.odblokuj();
								}
							}
							tab_promise.zwolnij()
						})(tab_strona_do_kat,k);
					}
				}
				tab_promise.zwolnij();
			})(tab_mw_,tab_mw_muteks,d);
		}
		if(ile_plikow>0){
			await StronicowyParser.script.LoadScript('mediawiki.page.gallery.styles');
			await StronicowyParser.script.LoadScript('mmv');
			if(!media){
				let div=document.createElement('div');
				div.setAttribute('id','mw-category-media');
				let h2=document.createElement('h2');
				h2.innerHTML='Pliki w kategorii „'+StronicowyParser.pageinfo.pagename.replace(/[\s_]+/g," ")+'”';
				div.appendChild(h2);
				let p=document.createElement('p');
				p.innerHTML='Poniżej wyświetlono 0 spośród wszystkich 0 plików w tej kategorii.';
				div.appendChild(p);
				let ul=document.createElement('ul');
				ul.setAttribute('class','gallery mw-gallery-traditional');
				div.appendChild(ul);
				mw_category_generated.appendChild(div);
			}
			let tab_ul_kontener=$("body.ns-14 #mw-content-text .mw-category-generated > #mw-category-media > ul.gallery.mw-gallery-traditional");
			if((tab_ul_kontener!==null)&&(tab_ul_kontener.length>0)){
				let ul_kontener=tab_ul_kontener[0];
				let li=$(ul_kontener).children('li.gallerybox');
				async function Li(plik){
						let li=document.createElement('li');
						li.setAttribute('class','gallerybox')
						li.setAttribute('style','width: 155px');
						let div=document.createElement('div');
						div.setAttribute('style','width: 155px')
						div=li.appendChild(div);
						let div_thumb=document.createElement('div');
						div_thumb.setAttribute('class','thumb')
						div_thumb.setAttribute('style','width: 150px;height:150px;');
						div_thumb=div.appendChild(div_thumb);
						
						let div_nast=document.createElement('div');
						div_nast=div_thumb.appendChild(div_nast);
						let url;let width;let urls;let height;let size;let pagecount;let thumburl;
						await StronicowyParser.api.ZadaniaApi({
							action: 'query',
							format: 'json',
							prop: 'imageinfo',
							iiprop: 'url|size',
							iiurlwidth: 85,
							titles: plik,
							smaxage: 600,
							maxage: 600,
						}).then(function(data){
							let pages=data.query.pages;
							for(let p in pages){
								let imageinfo=pages[p].imageinfo[0];
								url=((imageinfo.thumburl)?(imageinfo.thumburl.replace(/^[Hh][Tt][Tt][Pp][Ss]?:\/\//g,"//")):(imageinfo.url.replace(/^[Hh][Tt][Tt][Pp][Ss]?:\/\//g,"//")));
								let urls2=imageinfo.responsiveUrls;
								let i=0;
								urls=new Array();
								for(let p in urls2){
									urls[i]=urls2[p].replace(/^[Hh][Tt][Tt][Pp][Ss]?:\/\//g,"//")+" "+p+"x";
									++i;
								}
								width=imageinfo.width;
								height=imageinfo.height;
								size=imageinfo.size;
								pagecount=imageinfo.pagecount;
								break;
							}
						}).catch(()=>{});
						
						let a=document.createElement('a');
						a.setAttribute('href',"/wiki/"+plik.replace(/[\s_]+/g,"_"));
						a.setAttribute('class','image');
						let img=document.createElement('img');
						img.setAttribute('width','120');
						img.setAttribute('height','114');
						img.setAttribute('alt',plik);
						if(urls.length>0){
							img.setAttribute('srcset',urls.join(" "));
						}
						img.setAttribute('src',url);
						img.setAttribute('decoding','async');
						img.setAttribute('data-file-width',width)
						img.setAttribute('data-file-height',height)
						if(width>height){
							let new_height=parseInt((height/width)*120);
							img.setAttribute('width',120);
							img.setAttribute('height',new_height);
							div_nast.setAttribute('style','margin:'+(parseInt((150-new_height)/2))+'px auto')
						}else{
							let new_width=parseInt((width/height)*120);
							img.setAttribute('width',new_width);
							img.setAttribute('height',120);
							div_nast.setAttribute('style','margin:'+(parseInt((150-120)/2))+'px auto')
						}
						a.appendChild(img);
						
						div_nast.appendChild(a);
						
						let div_opis=document.createElement('div');
						div_opis.setAttribute('class','gallerytext');
						div_opis=div.appendChild(div_opis);
						a=document.createElement('a')
						a.setAttribute('href','/wiki/'+plik);
						a.setAttribute('class','galleryfilename galleryfilename-truncate');
						a.setAttribute('title',plik.replace(/[\s_]+/g," "));
						a.innerHTML=plik.replace(/^[Pp][Ll][Ii][Kk]:/g,"").replace(/[\s_]+/g," ");
						div_opis.appendChild(a);
						let size_new=0+" B";
						if(size/1024<1){
							size_new=size+" B";
						}else if(size/1024<1024){
							size_new=parseInt(size/1024*100)/100+" KB";
						}else if(size/1024/1024<1024){
							size_new=Math.round(size/1024/1024*100)/100+" MB";
						}else if(size/1024/1024/1024<1024){	
							size_new=Math.round(size/1024/1024/1024*100)/100+" GB";
						}else{
							size_new=size+" B";
						}
						let tekst=document.createTextNode(" "+width+" × "+height+((pagecount)?(", "+pagecount+" stron"):"")+"; "+size_new);
						div_opis.appendChild(tekst);
						return li;
					}
					tab_promise.wygeneruj(1);
					(async function (){
						let tab_href=await TablicaJakichWszystkichStron(StronicowyParser.kodowanie.DecodeWiki(StronicowyParser.pageinfo.fullname),tab_kategorie_strony_pliki[2]);
						let a_linki_istniejace=li.children('div').children('div.thumb').children('div').children('a');
						let tab_klucz_href_poprzednie=undefined;
						if(a_linki_istniejace.length>0){
							let href_pierwsze=StronicowyParser.kodowanie.DecodeHtml(a_linki_istniejace[0].getAttribute('href'),true).replace(/\/wiki\//g,"");
							for(let i=0;i<tab_href.length;++i){
								let href_aktualne=tab_href[i][0];
								if(href_pierwsze==href_aktualne){
									break;
								}else{
									let sortkey=tab_href[i][1];
									tab_klucz_href_poprzednie=new Array(sortkey,href_aktualne);
								}
							}
						}
						let klucz_href_poprzednie;
						if(tab_klucz_href_poprzednie){
							klucz_href_poprzednie=tab_klucz_href_poprzednie[0]+tab_klucz_href_poprzednie[1].replace(/^[Pp][Ll][Ii][Kk]:/g,"");
						}
						let tab_a=new Array();
						for(let i=0;i<a_linki_istniejace.length;++i){
							let href=StronicowyParser.kodowanie.DecodeHtml(a_linki_istniejace[i].getAttribute('href'),true).replace(/\/wiki\//g,"");
							tab_a[href]=true;
						}
						let strona_mutkat=new StronicowyParser.Muteks();
						let mutplik=new StronicowyParser.Muteks();
						let tak=true;
						for(let i=0;i<tab_strona_do_kat.length;++i){
							let klucze=tab_strona_do_kat[i];
							async function CzyWchodzic(){
         						await strona_mutkat.zablokuj();
								if(tab_a[klucze[0]]){strona_mutkat.odblokuj();return false;}
    							tab_a[klucze[0]]=true;
    							strona_mutkat.odblokuj();
    							return true;
         					}
							if(/^[Pp][Ll][Ii][Kk]:/g.test(tab_strona_do_kat[i][0])){
								if(await CzyWchodzic()){
									await mutplik.zablokuj();
									let li=$(ul_kontener).children('li.gallerybox');
									let a=li.children('div').children('div.thumb').children('div').children('a');
									if((a===null)||(a.length==0)){
										let li=await Li(tab_strona_do_kat[i][0]);
										li=ul_kontener.appendChild(li);
										tak=undefined;
									}else{
										let tab_plik=tab_strona_do_kat[i];
										let klucz=((tab_plik[1])?tab_plik[1]:"")+tab_plik[0].replace(/^[Pp][Ll][Ii][Kk]:/g,"");
										let klucz_poprzednie=undefined;
										for(let j=0;j<a.length;++j){
											let li=$(a[j]).parents('li');
											let href=a[j].getAttribute('href').replace(/\/wiki\//g,"");
											href=StronicowyParser.kodowanie.DecodeHtml(href,true);
											
											let klucz_href=klucz_poprzednie||await SortKey(href,tab_href,tab_strona_do_kat);
											
											if(j==0){
												if(klucz_href_poprzednie){
													let tab1=new Array(klucz_href_poprzednie,klucz).sort();
													let tab2=new Array(klucz_href,klucz).sort();
													if((tab[1]==klucz)&&(tab2[0]==klucz)){
														let _li=await Li(tab_strona_do_kat[i][0]);
														ul_kontener.insertBefore(_li,li[0]);
														tak=undefined;
														break;
													}
												}else{
													let tab1=new Array(klucz_href,klucz).sort();
													if(tab1[0]==klucz){
														let _li=await Li(tab_strona_do_kat[i][0]);
														ul_kontener.insertBefore(_li,li[0]);
														tak=undefined;
														break;
													}
												}
											}
											let tab1=new Array(klucz_href,klucz).sort();
											if(a[j+1]){
												let href2=a[j+1].getAttribute('href').replace(/\/wiki\//g,"");
												href2=StronicowyParser.kodowanie.DecodeHtml(href2,true);
												let klucz_href2=await SortKey(href2,tab_href,tab_strona_do_kat);
												klucz_poprzednie=klucz_href2;
												let tab2=new Array(klucz_href2,klucz).sort();
												if((tab1[1]==klucz)&&(tab2[0]==klucz)){
													let _li=await Li(tab_strona_do_kat[i][0]);
													let li=$(a[j+1]).parents('li');
													ul_kontener.insertBefore(_li,li[0]);
													tak=undefined;
													break;
												}
											}else{
												let p=$('body.ns-14 #mw-content-text .mw-category-generated > #mw-category-media > p')[0];
												let ile_stron=parseInt(p.innerHTML.replace(/^([^\d]+)(\d+)([^\d]+)(\d+)([^\d]+)$/g,"$2"));
												let ile_wszystkich_stron=parseInt(p.innerHTML.replace(/^([^\d]+)(\d+)([^\d]+)(\d+)([^\d]+)$/g,"$4"));
												if((ile_stron==ile_wszystkich_stron)||((ile_stron<=ile_wszystkich_stron)&&(ile_stron<=200))){
														let _li=await Li(tab_strona_do_kat[i][0]);
														ul_kontener.appendChild(_li);
														tak=undefined;
														break;
												}
											}
										}
									}
									if(!tak){
										function replace(s,s1,s2,s3,s4,s5){
											let li=$(ul_kontener).children('li.gallerybox');
											return s1+li.length+s3+(parseInt(s4)+1)+s5;
										}
										let p=$('body.ns-14 #mw-content-text .mw-category-generated > #mw-category-media > p')[0];
										p.innerHTML=p.innerHTML.replace(/^([^\d]+)(\d+)([^\d]+)(\d+)([^\d]+)$/g,replace);
									}
									mutplik.odblokuj();
								}
							}
						}
						tab_promise.zwolnij();
				    })();
			   }
		}
		await StronicowyParser.CzekajNaZakaczenie(tab_promise);
	}
	zmienna_this.ZaaktualizujInformacjeOKategorachiWPrzestrzeniKategorii=async function(item){
		 let mutkat=new StronicowyParser.Muteks();
         
         let categoryTreebullet=((item==null)?$('body.ns-14 #mw-content-text .mw-category-generated > #mw-subcategories > * > .mw-category  > .mw-category-group > ul > li > .CategoryTreeSection > .CategoryTreeItem'):$(item).siblings('.CategoryTreeChildren').children(".CategoryTreeSection").children(".CategoryTreeItem"));
         
         if((categoryTreebullet!==null)&&(categoryTreebullet.length>0)){
         	let tab_promise=new StronicowyParser.GenerowaneObiekty();
         	for(let i=0;i<categoryTreebullet.length;++i){
         		tab_promise.wygeneruj(1);
         		(async function(categoryTreebullet,i){
         			await mutkat.zablokuj();
         			if(!categoryTreebullet[i].tak){
         				categoryTreebullet[i].tak=true;
         				let a=categoryTreebullet[i].querySelector('a');
         				let href=a.getAttribute('href').replace(/^\/wiki\//g,"");
         				href=StronicowyParser.kodowanie.DecodeHtml(href,true);
         				await muteks_cookie.zablokuj();
         				let tab_strona_href=TworzTabliceCzasteczekKlucza(href);
         				muteks_cookie.odblokuj();
         				if(tab_strona_href!==null){
         					if(tab_strona_href.length>0){
         						let ile_kategorii=0;let ile_plikow=0;let ile_stron=0;
         						for(let k=0;k<tab_strona_href.length;++k){
         							let strona=tab_strona_href[k][0];
         							if(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g.test(strona)||/^[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]:/g.test(strona)){
         								++ile_kategorii;
         							}else if(/^[Pp][Ll][Ii][Kk]:/g.test(strona)||/^[Ff][Ii][LL][Ee]:/g.test(strona)){
         								++ile_plikow;
         							}else{
         								++ile_stron;
         							}
         						}
         					
         						let dzieci=$(categoryTreebullet[i]).children();
         						let span_ile;
         						if(dzieci.length>0){
         							span_ile=categoryTreebullet[i].lastChild;
         							let title=span_ile.getAttribute('title');
         							if(/^[^\d]+(\d+)[^\d]+(\d+)[^\d]+(\d+)[^\d]+$/g.test(title)){
			        					ile_kategorii=parseInt(title.replace(/^[^\d]+(\d+)[^\d]+(\d+)[^\d]+(\d+)[^\d]+$/g,"$1"))+ile_kategorii;
			        					ile_stron=parseInt(title.replace(/^[^\d]+(\d+)[^\d]+(\d+)[^\d]+(\d+)[^\d]+$/g,"$2"))+ile_stron;
			    						ile_plikow=parseInt(title.replace(/^[^\d]+(\d+)[^\d]+(\d+)[^\d]+(\d+)[^\d]+$/g,"$3"))+ile_plikow;
									}
         						};
								let span;
							
				        		if(ile_kategorii>0){
				        			span=document.createElement('span');
			    	    			span.setAttribute('class','CategoryTreeBullet')
			        		
			        				let span2=document.createElement('span');
			        				span2.setAttribute('class','CategoryTreeToggle CategoryTreeToggleHandlerAttached');
				        			span2.setAttribute('data-ct-title',href.replace(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g,"").replace(/[\s_]+/g,"_"));
				        			span2.setAttribute('data-ct-state','collapsed');
				        			span2.setAttribute('title','rozwiń');
				        			span.appendChild(span2);
			    	    		}else{
			        				span=document.createElement('span');
			        				span.setAttribute('class','CategoryTreeEmptyBullet');
			        			}
	
				        		let span_full=$(a).parent().find('span').first();
				        		if((span_full!==null)&&(span_full.length>0)){
				        			span_full[0].outerHTML=span.outerHTML;
				        		}
							
								if(dzieci.length>2){
         							span_ile.setAttribute('title',"Zawiera "+ile_kategorii+" podkategorie, "+ile_stron+" stron i "+ile_plikow+" plików")
									span_ile.setAttribute('dir','ltr');
			        	
									if(parseInt(ile_kategorii)+parseInt(ile_stron)+parseInt(ile_plikow)>0){
				    					let tab=new Array();
				    					if(ile_kategorii>0){
				        					tab[tab.length]=ile_kategorii+" kat.";
										}
										if(ile_stron>0){
					    					tab[tab.length]=ile_stron+" str.";
										}
										if(ile_plikow>0){
				    						tab[tab.length]=ile_plikow+" pl.";
				    					}
										span_ile.innerHTML="("+tab.join(", ")+")";
									}else{
										 span_ile.innerHTML="(pusta)";
									}
								}
							}
						}
						categoryTreebullet[i].tak=true;
         			}
         			mutkat.odblokuj();
         			tab_promise.zwolnij();
         		})(categoryTreebullet,i);
         	}
         	await StronicowyParser.CzekajNaZakaczenie(tab_promise);
        }
	}
	zmienna_this.DodajKategorieDoDrzewaKategoriiWKategoriach=async function(item){
		if(!item.tak_drzewo_kategorii){
			item.tak_drzewo_kategorii=true;
			let a_linki_istniejace=$(item).siblings('.CategoryTreeChildren').children('.CategoryTreeSection').children('.CategoryTreeItem').children('a');
			let tab_a=new Array();
			for(let i=0;i<a_linki_istniejace.length;++i){
				let href=StronicowyParser.kodowanie.DecodeHtml(a_linki_istniejace[i].getAttribute('href'),true).replace(/\/wiki\//g,"");
				tab_a[href]=true;
			}
        	let a=item.querySelector('a');
        	let href=a.getAttribute('href').replace(/^\/wiki\//g,"");
        	href=StronicowyParser.kodowanie.DecodeHtml(href,true);
        	await muteks_cookie.zablokuj();
        	let tab_strona_href_aktualnej_czasteczkowej_kategorii=TworzTabliceCzasteczekKlucza(href);
        	muteks_cookie.odblokuj();
        	if(tab_strona_href_aktualnej_czasteczkowej_kategorii!==null){
         		if(tab_strona_href_aktualnej_czasteczkowej_kategorii.length>0){
         			let tab_href=await TablicaJakichWszystkichStron(href,true);
         			let mutkat=new StronicowyParser.Muteks();let strona_mutkat=new StronicowyParser.Muteks();
         			let tab_promise=new Array();
         			for(let j=0;j<tab_strona_href_aktualnej_czasteczkowej_kategorii.length;++j){
         				tab_promise.wygeneruj(1);
         				(async function(tab_strona_href_aktualnej_czasteczkowej_kategorii,j,tab_href){
         					let tab_strona=tab_strona_href_aktualnej_czasteczkowej_kategorii[j];
							
							let nazwa_strony=tab_strona[0].replace(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g,"");
         					let klucz=((tab_strona[1])?tab_strona[1]:"")+nazwa_strony;
         					async function CzyWchodzic(){
         						await strona_mutkat.zablokuj();
								if(tab_a[tab_strona[0]]){strona_mutkat.odblokuj();return false;}
    							tab_a[tab_strona[0]]=true;
    							strona_mutkat.odblokuj();
    							return true;
         					}
         					if(await CzyWchodzic()){
		         				if(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g.test(tab_strona[0])||/^[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]:/g.test(tab_strona[0])){
		         					
		         					await muteks_cookie.zablokuj();
						    	    let tab_strona_href=TworzTabliceCzasteczekKlucza(tab_strona[0]);
						    	    muteks_cookie.odblokuj();
						    	    
		         					await mutkat.zablokuj();
    		     					let $link=$($(item).find('.CategoryTreeToggle')[0]).data('ct-loaded');
        		 					let child_puste=item.querySelector('.CategoryTreeEmptyBullet');
         							if(child_puste){
         								let span=document.createElement('span');
			    			    		span.setAttribute('class','CategoryTreeBullet')
			        			
			        					let span2=document.createElement('span');
					        			span2.setAttribute('class','CategoryTreeToggle CategoryTreeToggleHandlerAttached');
						        		span2.setAttribute('data-ct-title',nazwa_strony);
							        	span2.setAttribute('data-ct-state','collapsed');
							        	span2.setAttribute('title','rozwiń');
						    	    	span.appendChild(span2);
						        		let spacja=document.createTextNode(" ");
						        		span.appendChild(spacja);
							        	child_puste.outerHTML=span.outerHTML;
    		     					}
					    		    let categorytreesection=document.createElement('div');
						        	categorytreesection.setAttribute('class','CategoryTreeSection');
					        				
							        let categorytreeitem=document.createElement('div');
						    	    categorytreeitem.setAttribute('class','CategoryTreeItem');
						        	let tab=await IleJakichStron(tab_strona[0]);
							        let ile_kategorii=tab[0];let ile_stron=tab[1];let ile_plikow=tab[2];
							        
						        	if(tab_strona_href){
						    	    	for(let k=0;k<tab_strona_href.length;++k){
					    	    			let strona_kategorii=tab_strona_href[k][0];
					        				if(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g.test(strona_kategorii)){
				        						++ile_kategorii;
							        		}else if(/^[Pp][Ll][Ii][Kk]:/g.test(strona_kategorii)){
							        			++ile_plikow;
						        			}else{
						        				++ile_stron;
						        			}
				    		    		}
				        			}
				        				
				        			function InfoItem(item)	{
				        				let tekst=document.createTextNode(' ');
				        				let span_tekst=document.createElement('span');
				        				span_tekst.setAttribute('dir','ltr');
				        				span_tekst.setAttribute('title',"Zawiera "+ile_kategorii+" podkategorii, "+ile_stron+" stron i "+ile_plikow+" plików")
				        				if((ile_kategorii==0)&&(ile_stron==0)&&(ile_plikow==0)){
				        					span_tekst.innerHTML="(pusta)";
				        				}else{
				        					tekst_ile=((ile_kategorii>0)?(ile_kategorii+" kat."):"");
				        					tekst_ile=tekst_ile+((tekst_ile!="")?((ile_stron>0)?", ":""):"")+((ile_stron>0)?(ile_stron+" str."):"");
				        					tekst_ile=tekst_ile+((tekst_ile!="")?((ile_plikow>0)?", ":""):"")+((ile_plikow>0)?(ile_plikow+" pl."):"");
				        					span_tekst.innerHTML="("+tekst_ile+")";
				        				}
				        				item.appendChild(tekst);
				        				item.appendChild(span_tekst);
				        			}
				        				
						        	if(ile_kategorii>0){
						        		let span=document.createElement('span');
					    	    		span.setAttribute('class','CategoryTreeBullet')
			    		    			let span2=document.createElement('span');
			        					span2.setAttribute('class','CategoryTreeToggle CategoryTreeToggleHandlerAttached');
				        				span2.setAttribute('data-ct-title',nazwa_strony.replace(/[\s_]+/g,"_"));
				        				span2.setAttribute('data-ct-state','collapsed');
				        				span2.setAttribute('title','rozwiń');
						        		span.appendChild(span2);
						        		let spacja=document.createTextNode(" ");
						        		span.appendChild(spacja);
						        		categorytreeitem.appendChild(span);
						        	}else{
				    		    		let span=document.createElement('span');
				        				span.setAttribute('class','CategoryTreeEmptyBullet');
				        				categorytreeitem.appendChild(span);
					        			let spacja=document.createTextNode(" ");
					        			categorytreeitem.appendChild(spacja);
						        	}
					        			
						        	let a=document.createElement('a')
					    	    	a.setAttribute('href',"/wiki/"+tab_strona[0]);
					        		a.setAttribute('title',tab_strona[0]);
						        	a.innerHTML=nazwa_strony;

					    	    	categorytreeitem.appendChild(a);
					    	    	
					    	    	InfoItem(categorytreeitem);
					        				
					        		categorytreesection.appendChild(categorytreeitem);
						        	let children_nowe=document.createElement('div');
					    	    	children_nowe.setAttribute('class','CategoryTreeChildren');
					        		children_nowe.style.display="none";
						        	categorytreesection.appendChild(children_nowe);
						        	
									let a_linki_istniejace_aktualne=$(item).siblings('.CategoryTreeChildren').children('.CategoryTreeSection').children('.CategoryTreeItem').children('a');
						        	if((child_puste)||(a_linki_istniejace_aktualne.length==0)){
					    	    		let children_nowe=$(item).siblings('.CategoryTreeChildren')[0];
					        			children_nowe.innerHTML="";
					        			children_nowe.appendChild(categorytreesection);
						        	}else{
					        			if((a_linki_istniejace_aktualne!==null)&&(a_linki_istniejace_aktualne.length>0)){
					        				klucz_href_poprzednie=undefined;
					        				for(let s=0;s<a_linki_istniejace_aktualne.length;++s){
				    	    					let href=a_linki_istniejace_aktualne[s].getAttribute('href');
					    	    				href=StronicowyParser.kodowanie.DecodeHtml(href,true);
					        					href=href.replace(/\/wiki\//g,"");
					        					let klucz_href=await SortKey(href,tab_href,tab_strona_href_aktualnej_czasteczkowej_kategorii);
					        					if(s==0){
					        						let posortowane=(new Array(klucz,klucz_href)).sort();
					        						if(posortowane[0]==klucz){
				    	    							let child=$(a_linki_istniejace_aktualne[s]).parent('.CategoryTreeItem').parent('.CategoryTreeSection').parent('.CategoryTreeChildren');
					    	    						if((child!==null)&&(child.length>0)){
					    	    							child[0].insertBefore(categorytreesection,$(a_linki_istniejace_aktualne[s]).parent().parent()[0]);
					    	    							break;
					    	    						}
					        						}else if(s+1==a_linki_istniejace_aktualne.length){
				    	    							let child=$(a_linki_istniejace_aktualne[s]).parent().parent().parent();
				    		    						if((child!==null)&&(child.length>0)){
				        									child[0].appendChild(categorytreesection);
				        									break;
				    	    							}
				        							}
				        							klucz_href_poprzednie=klucz_href;
					        					}else if(s+1==a_linki_istniejace_aktualne.length){
					        						let posortowane=(new Array(klucz,klucz_href)).sort();
					        						if(posortowane[1]==klucz){
					        							let child=$(a_linki_istniejace_aktualne[s]).parent().parent().parent();
					    	    						if((child!==null)&&(child.length>0)){
				    	    								child[0].appendChild(categorytreesection);
				    	    								break;
				    		    						}
				        							}else{
				        								let child=$(a_linki_istniejace_aktualne[s]).parent().parent().parent();
					    	    						if((child!==null)&&(child.length>0)){
						        							child[0].insertBefore(categorytreesection,$(a_linki_istniejace_aktualne[s]).parent().parent()[0]);
						        							break;
				    		    						}
				        							}	
				        							klucz_href_poprzednie=klucz_href;
						        				}else{
						        					let tab1=(new Array(klucz,klucz_href_poprzednie)).sort();let tab2=(new Array(klucz,klucz_href)).sort();
						        					if((tab1[1]==klucz)&&(tab2[0]==klucz)){
						        						let child=$(a_linki_istniejace_aktualne[s]).parent().parent().parent();
					    	    						if((child!==null)&&(child.length>0)){
						        							child[0].insertBefore(categorytreesection,$(a_linki_istniejace_aktualne[s]).parent().parent()[0]);
						        							break;
				    		    						}
					        						}
					        						klucz_href_poprzednie=klucz_href;
				    	    					}
				        					}
				        				}
					        		}
					        		mutkat.odblokuj();
				        		}	
         					}
         					tab_promise.zwolnij();
         				})(tab_strona_href_aktualnej_czasteczkowej_kategorii,j,tab_href);
         			}	
         			await StronicowyParser.CzekajNaZakaczenie(tab_promise);
         		}	
         	}	
		}	
	}	
	zmienna_this.DodajDoCategoryTreeElementy=async function(){
		let item=$("#mw-content-text .mw-parser-output .CategoryTreeTag > .CategoryTreeSection > .CategoryTreeItem");
		if((item!==null)&&(item.length>0)){
			await StronicowyParser.script.LoadScript('ext.categoryTree.styles');
			await StronicowyParser.script.LoadScript('ext.categoryTree');
			for(let i=0;i<item.length;++i){
				await zmienna_this.DodajKategorieDoDrzewaKategoriiWKategoriach(item[i]);
			}
		}
	}
	zmienna_this.DolaczOdNowaZdarzeniaSystemoweKategorii=async function(zdarzenia,categorytree){
		let oryginal=document.querySelector('body.ns-14 #mw-content-text .mw-category-generated > #mw-subcategories');
		if((categorytree)&&(oryginal!==null)){
			let kopia=oryginal.cloneNode(true);
			oryginal.outerHTML=kopia.outerHTML;
		}
		let oryginalcategorytree=$("#mw-content-text .mw-parser-output .CategoryTreeTag");
		if((oryginalcategorytree!==null)&&(oryginalcategorytree.length>0)){
			for(let i=0;i<oryginalcategorytree.length;++i){
				let kopia=oryginalcategorytree[i].cloneNode(true);
				oryginalcategorytree[i].outerHTML=kopia.outerHTML;
			}
		}
		if(zdarzenia){
				await StronicowyParser.script.LoadScript('ext.categoryTree.styles');
				await StronicowyParser.script.LoadScript('ext.categoryTree');
				try{
					await mw.loader.using( ['ext.categoryTree'], await async function (){
						StronicowyParser.script.requireFile('ext.categoryTree')();
					});
				}catch(error){};
		}
	}
}
StronicowyParser.LinkiKategorii=function(){
	let tab_cat;
	let kat=new StronicowyParser.Kategorie();
	this.PobierzKategorieStrony=async function(){
		tab_cat=await kat.StworzTabliceKategoriiZCatLinks();
	}
	this.AnalizaKategorii=async function(data){
		await StronicowyParser.muteks.zablokuj();
	    let categories=data.parse.categories;
	    if(categories.length>0){
	        let bodycontent=document.querySelector('#bodyContent');
	    	let czy_catlinks=document.querySelector('#bodyContent > #catlinks.catlinks-allhidden');
	    	let czy_catlinks_nieukryte=document.querySelector("#bodyContent > #catlinks.catlinks:not(.catlinks-allhidden)");
	    	if(!czy_catlinks_nieukryte){
	    		let catlinks=document.createElement('div');
	    		catlinks.setAttribute('id',"catlinks");
	    		catlinks.setAttribute("class","catlinks");
	    		catlinks.setAttribute("data-mw","interface")
	    		if(czy_catlinks){
	    			czy_catlinks.outerHTML=catlinks.outerHTML;
	    		}else{
	    			bodycontent.appendChild(catlinks);
	    		}
			}
			let catlinks=document.querySelector("#bodyContent > #catlinks.catlinks");
			if(catlinks){
	    		let catlinks_normal=document.querySelector("#bodyContent > #catlinks.catlinks #mw-normal-catlinks");
	        	let catlinks_hidden=document.querySelector("#bodyContent > #catlinks.catlinks #mw-hidden-catlinks");
	    		for(let l=0;l<categories.length;++l){
	    			let cattab=categories[l];
	    			let cat=cattab["*"].replace(/^[\s_]*/g,"").replace(/[\s_]*$/g,"").replace(/[\s_]+/g," ");
	    			if(!tab_cat[cat]){
	    				tab_cat[cat]=true;
	    				let a=document.createElement('a');
	    				a.href="/wiki/Kategoria:"+StronicowyParser.kodowanie.EncodeHtml(cat);
	    				a.innerHTML=cat;
	    				if((cattab["missing"]!=null)&&(cattab["missing"]=="")){
                    		a.classList.add('new');
                    		a.setAttribute('title',"Kategoria:"+cat+" (strona nie istnieje)");
                    	}else{
                    	    a.setAttribute('title',"Kategoria:"+cat);
                    	}
	    				let li=document.createElement('li');
	    				li.innerHTML=a.outerHTML;
	    				if((cattab["hidden"]!=null)&&(cattab["hidden"]=="")){
	    					if(!catlinks_hidden){
	    						let catlinks_hidden_div=document.createElement('div');
	    						catlinks_hidden_div.setAttribute("id","mw-hidden-catlinks");
	    						catlinks_hidden_div.setAttribute("class","mw-hidden-catlinks mw-hidden-cats-user-shown");
	    						catlinks_hidden_div.innerHTML="Ukryta kategoria: <ul></ul>";
	    						let catlinkihtml=document.querySelector("#bodyContent .catlinks");
	    						catlinks_hidden=catlinkihtml.appendChild(catlinks_hidden_div);
	    					}
	    					let ul=catlinks_hidden.querySelector('ul');
	    			    	ul.appendChild(li);
	    				}else{
	    					if(!catlinks_normal){
		    					let catlinks_normal_div=document.createElement('div');
		    					catlinks_normal_div.setAttribute("id","mw-normal-catlinks");
	    						catlinks_normal_div.setAttribute("class","mw-normal-catlinks");
	    						let a=document.createElement('a');
	    						a.setAttribute('href',"/wiki/Specjalna:Kategorie");
	    						a.setAttribute('title',"Specjalna:Kategorie");
	    						a.innerHTML="Kategoria";
		    					catlinks_normal_div.appendChild(a);
		    					catlinks_normal_div.innerHTML=catlinks_normal_div.innerHTML+":";
	    						let ul=document.createElement('ul');
	    						catlinks_normal_div.appendChild(ul);
	    						catlinks_normal=catlinks.insertBefore(catlinks_normal_div,catlinks.firstChild);
	    					}
	    					let ul=catlinks_normal.querySelector('ul');
	    					ul.appendChild(li);
	    				}
	    			}
	    		}
	    		let action_view=document.querySelector('body.action-view');
	    		if(action_view){
	    			kat.StworzCookieDlaKategoriiStrony(data,null);
	    		}
	    	}
		}else{
			let action_view=document.querySelector('body.action-view');
	    	if(action_view){
	    		kat.StworzCookieDlaKategoriiStrony(data,null);
	    	}
		}
		StronicowyParser.muteks.odblokuj();
	}
}
StronicowyParser.kategorie=new StronicowyParser.Kategorie();
(async function(){
	let ns_14=document.querySelector("body.ns-14 #mw-content-text .mw-category-generated, body.ns-14 #mw-content-text .mw-parser-output .CategoryTreeTag");
	
	if(ns_14){
		await StronicowyParser.kategorie.DolaczOdNowaZdarzeniaSystemoweKategorii(false,true);
		await StronicowyParser.kategorie.DodajStronyDoAktualnejKategorii();
		
	    const promise1=StronicowyParser.kategorie.DodajDoCategoryTreeElementy();
		const promise2=StronicowyParser.kategorie.ZaaktualizujInformacjeOKategorachiWPrzestrzeniKategorii();
		
		await Promise.all([promise1,promise2]).then((values) => {}).catch(()=>{});
		
		await StronicowyParser.kategorie.DolaczOdNowaZdarzeniaSystemoweKategorii(true,true);
		await StronicowyParser.kategorie.DodajSwojeInneZdarzeniaDoObsługiiDrzewaKategorii();
	}else{
			let categorytreetag=document.querySelector("body:not(.ns-14) #mw-content-text .mw-parser-output .CategoryTreeTag");
			if(categorytreetag){
					await StronicowyParser.kategorie.DolaczOdNowaZdarzeniaSystemoweKategorii(false,false);
		
					await StronicowyParser.kategorie.DodajDoCategoryTreeElementy();
		
					await StronicowyParser.kategorie.DolaczOdNowaZdarzeniaSystemoweKategorii(true,false);
					await StronicowyParser.kategorie.DodajSwojeInneZdarzeniaDoObsługiiDrzewaKategorii();
			}
	}
})();