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);
}
}
}
}