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

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.
//var DodatkiSkrypt=DodatkiSkrypt ||new Array();
DodatkiSkrypt.Kategorie=new Array();
DodatkiSkrypt.Kategorie.StworzTabliceKategoriiZCatLinks=function(){
	var tabcat=new Array();
	var catlinks=document.querySelector("#bodyContent > #catlinks.catlinks:not(.catlinks-allhidden)");
	if(catlinks){
		var a=catlinks.getElementsByTagName('a');
		if((a!==null)&&(a.length>0)){
  			var re_category_1=new RegExp("^\\/wiki\\/\\s*(.*)$","g");
  			var re_category_2=new RegExp("^\\/w\\/index\\.php\\?\\s*title\\s*=\\s*([^&]*).*$","g");
			for(var i=0;i<a.length;++i){
				var href=a[i].getAttribute('href');
				href=DodatkiSkrypt.Libre.Kodowanie.DecodeHtml(href,true);
				var czy_href_1=re_category_1.test(href);
				var czy_href_2=re_category_2.test(href);
				if(czy_href_1){
					href=DodatkiSkrypt.Libre.Kodowanie.DecodeWiki(href).replace(re_category_1,"$1");
				}else if(czy_href_2){
					href=DodatkiSkrypt.Libre.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;
}
DodatkiSkrypt.Kategorie.StworzTabliceKategoriiStrony=function(strona){
	var tab=new Array();
	return DodatkiSkrypt.api.ZadaniaApi({
		action: 'query',
		format: 'json',
		prop: 'categories',
		titles: strona
	}).DodatkiSkryptThen(function(data){
		var pages = data.query.pages;
		for(var p in pages){
			pages[ p ].categories.forEach(function(cat){
				tab[cat.title.replace(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g,"")]=true;
			});
		}
		return Promise.resolve(tab);
	}).catch(function(){return Promise.reject();});
};
DodatkiSkrypt.Kategorie.StworzTabliceKategoriiIKluczyZDanychWikikodu=function(data){
	var categories=data.parse.categories;
	var tab_kategoria=new Array();
	for(var i=0;i<categories.length;++i){
	    var kat=DodatkiSkrypt.Libre.Kodowanie.DecodeWiki(categories[i]["*"]);
	    var sortkey=categories[i]["sortkey"];
	    var tak=true;
	    for(var 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;
}
DodatkiSkrypt.Kategorie.TworzTabliceCzasteczekKlucza=function(href,klucz){
	var czasteczka_href=DodatkiSkrypt.DodatkiSkryptUserOption.get(href,(klucz||"CzłonkowieKategorii:"));
	return czasteczka_href.DodatkiSkryptThen(function(czasteczka_href){
		if(!czasteczka_href){return null;}
		var tab_cookie=new Array();
		var tab_strona_do_kat=czasteczka_href.split("||");
		for(var i=0;i<tab_strona_do_kat.length;++i){
			var rozdziel_cookie=tab_strona_do_kat[i].split("|");
			tab_cookie.push(new Array(rozdziel_cookie[0],rozdziel_cookie[1]));
		}
		return tab_cookie;
	});
}
DodatkiSkrypt.Kategorie.StworzCookieDlaKategoriiStrony=function(data,klucz){		
	klucz=klucz||"CzłonkowieKategorii:";
	var tabcat=DodatkiSkrypt.Kategorie.StworzTabliceKategoriiIKluczyZDanychWikikodu(data);
	var catlinks=DodatkiSkrypt.Kategorie.StworzTabliceKategoriiZCatLinks();
	var tab_kat=new Array();
	var fullname=DodatkiSkrypt.Libre.Kodowanie.DecodeWiki(DodatkiSkrypt.Info.page.fullname);
	for(var p in tabcat){
			
		(function(p){
			var m="Kategoria:"+p;
			tab_kat[tab_kat.length]=m;
				
			var strona_do_kat=DodatkiSkrypt.DodatkiSkryptUserOption.get(m,klucz);
			strona_do_kat.DodatkiSkryptThen(function(strona_do_kat){
				var tab_strona_do_kat=((strona_do_kat)?(strona_do_kat.split("||")):(new Array()));
				var tak=true;
				for(var i=0;i<tab_strona_do_kat.length;++i){
					if(tab_strona_do_kat[i].match(/^[^|]*/g).toString()==fullname){
						tak=false;
						break;
					}
				}
				if(tak){
					var key=tabcat[p];
					tab_strona_do_kat[tab_strona_do_kat.length]=fullname+((typeof key == "string")?((key!="")?("|"+key):""):"");
					var wartosc=tab_strona_do_kat.join('||');
					DodatkiSkrypt.DodatkiSkryptUserOption.set(m,wartosc,klucz);
				}
			});
		})(p);
	}
	for(var p in catlinks){tab_kat.push("Kategoria:"+p);};
		
	var dane=DodatkiSkrypt.DodatkiSkryptUserOption.get(fullname,"CzłonkowieStron");
	dane.then(function(dane){
		var tab_dane=((dane)?(dane.split('|')):(new Array()));
		
		for(var i=0;i<tab_dane.length;++i){
			(function(i){
				var kategoria=tab_dane[i];
				var kategoria_bez_prefiksu=kategoria.replace(/^[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]:/g,"");
				var tak=((!tabcat[kategoria_bez_prefiksu])&&(!catlinks[kategoria_bez_prefiksu]));
				if(tak){
					var tab_strona_do_kat=DodatkiSkrypt.Kategorie.TworzTabliceCzasteczekKlucza(kategoria,klucz);
					tab_strona_do_kat.DodatkiSkryptThen(function(tab_strona_do_kat){
						if(tab_strona_do_kat!==null){
							for(var 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;
								}	
							}
							var str="";
							for(var 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]):"");
							}
							DodatkiSkrypt.DodatkiSkryptUserOption.set(kategoria,str,klucz);
						}
					});
				}
			})(i);
		}
	});
}
DodatkiSkrypt.Kategorie.ListaKategoriiStrony=function(){
	var tab_cat;
	this.PobierzKategorieStrony=function(){
		tab_cat=DodatkiSkrypt.Kategorie.StworzTabliceKategoriiZCatLinks();
	}
	this.AnalizaKategorii=function(data){
	    var categories=data.parse.categories;
	    if(categories.length>0){
	        var bodycontent=document.querySelector('#bodyContent');
	    	var czy_catlinks=document.querySelector('#bodyContent > #catlinks.catlinks-allhidden');
	    	var czy_catlinks_nieukryte=document.querySelector("#bodyContent > #catlinks.catlinks:not(.catlinks-allhidden)");
	    	if(!czy_catlinks_nieukryte){
	    		var 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);
	    		}
			}
			var catlinks=document.querySelector("#bodyContent > #catlinks.catlinks");
			if(catlinks){
	    		var catlinks_normal=document.querySelector("#bodyContent > #catlinks.catlinks #mw-normal-catlinks");
	        	var catlinks_hidden=document.querySelector("#bodyContent > #catlinks.catlinks #mw-hidden-catlinks");
	    		for(var l=0;l<categories.length;++l){
	    			var cattab=categories[l];
	    			var cat=cattab["*"].replace(/^[\s_]*/g,"").replace(/[\s_]*$/g,"").replace(/[\s_]+/g," ");
	    			if(!tab_cat[cat]){
	    				tab_cat[cat]=true;
	    				var a=document.createElement('a');
	    				a.href="/wiki/Kategoria:"+DodatkiSkrypt.Libre.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);
                    	}
	    				var li=document.createElement('li');
	    				li.innerHTML=a.outerHTML;
	    				function DodajDoCatlinksBrakujacePozycjeUl(catlinks_normal_hidden){
	    					var ul=catlinks_normal_hidden.querySelector('ul');
	    					if(!ul){
	    						var ul_tw=document.createElement('ul');
	    						if((catlinks_normal_hidden.lastChild)&&($(catlinks_normal_hidden.lastChild).hasClass('noprint'))){
	    							ul=catlinks_normal_hidden.insertBefore(ul_tw,catlinks_normal_hidden.lastChild);
	    							var noprint=catlinks_normal_hidden.removeChild(catlinks_normal_hidden.lastChild);
	    							var li_noprint=document.createElement('li');
	    							li_noprint.setAttribute('class',"noprint");
	    							for(var node of noprint.childNodes){
	    								li_noprint.appendChild(node);
	    							}
	    							ul.appendChild(li_noprint);
	    						}else{
	    							ul=catlinks_normal_hidden.appendChild(ul_tw);
	    						}
	    					}
	    					if((ul.previousSibling)&&($(ul.previousSibling).hasClass('noprint'))){
	    						catlinks_normal_hidden.removeChild(ul.previousSibling);
	    					}
	    					return ul;
	    				}
	    				function DodajPozycjeLiDoUl(catlinks_normal_hidden,li){
	    					var ul=catlinks_normal_hidden.querySelector('ul');
	    					if((ul.lastChild)&&($(ul.lastChild).hasClass('noprint'))){
	    						ul.insertBefore(li,ul.lastChild)
	    					}else{
	    						ul.appendChild(li);
	    					}
	    				}
	    				if((cattab["hidden"]!=null)&&(cattab["hidden"]=="")){
	    					if(!catlinks_hidden){
	    						var 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>";
	    						var catlinkihtml=document.querySelector("#bodyContent .catlinks");
	    						catlinks_hidden=catlinkihtml.appendChild(catlinks_hidden_div);
	    					}
	    					var ul=DodajDoCatlinksBrakujacePozycjeUl(catlinks_hidden);
	    					DodajPozycjeLiDoUl(catlinks_hidden,li);
	    				}else{
		    				if(!catlinks_normal){
			    				var catlinks_normal_div=document.createElement('div');
			    				catlinks_normal_div.setAttribute("id","mw-normal-catlinks");
	    						catlinks_normal_div.setAttribute("class","mw-normal-catlinks");
	    						var 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+":";
		    					var ul=document.createElement('ul');
	    						catlinks_normal_div.appendChild(ul);
	    						if(catlinks.firstChild){
	    							catlinks_normal=catlinks.insertBefore(catlinks_normal_div,catlinks.firstChild);
	    						}else{
	    							catlinks_normal=catlinks.appendChild(catlinks_normal_div);
	    						}
	    					}
	    					var ul=DodajDoCatlinksBrakujacePozycjeUl(catlinks_normal);
	    					DodajPozycjeLiDoUl(catlinks_normal,li)
		    			}
		    		}
	    		}
	    		var action_view=document.querySelector('body.action-view');
	    		if(action_view){
	    			DodatkiSkrypt.Kategorie.StworzCookieDlaKategoriiStrony(data,null);
	    		}
	    	}
		}else{
			var action_view=document.querySelector('body.action-view');
	    	if(action_view){
	    		DodatkiSkrypt.Kategorie.StworzCookieDlaKategoriiStrony(data,null);
	    	}
		}
	}
}