Wikipedysta:Persino/Gadget-DodatkiSkrypt3.js/Api.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.Api=new Array();
DodatkiSkrypt.Api.PotrzebneFunkcje=new Array();
DodatkiSkrypt.Api.PotrzebneFunkcje.PotrzebnyNumerZapytania=function(wikikod){
    var div=document.createElement('div');
    div.innerHTML=wikikod;
  
    var hn=$(div).children(".hn")[0];
    if(!hn){return;}
    var classlist=hn.classList;
    var c=undefined;
    for(var s=0;s<classlist.length;++s){
    	if(/^hn_\d+$/g.test(classlist[s])){
    		c=classlist[s].replace(/^hn_/g,"");
    		c=parseInt(c);
    		if(isNaN(c)){return undefined;}
    		return new Array(c,hn);
    	}
    }
    return undefined;
};
/*Funkcja generująca kolejkę strumieni new mw.Api();*/
DodatkiSkrypt.Api.CzekajNaZadaniaApi=function(){
	var generator=new DodatkiSkrypt.LicznikGenerowanychKorutyn();
	var category_fun=undefined;
	var muteks_kategoria=new DodatkiSkrypt.Muteks();
	var muteks_api=new DodatkiSkrypt.Muteks();
	
	this.ZadaniaApi=function(params,token,dodaj_kategorie,numer,opakuj_kategorie,przytnij_tekst,czy_ignorowac_bledy,czy_ignorowac_bledy_lua,czy_zapisywac_wyniki){
		var ileLoad=function(){
			return new Promise(function(resolve,reject){
				function Czekaj(){
					$(document).DodatkiSkryptReady(function(){
						generator._wygeneruj(1);
						var liczba_wywolan_api=generator._length;
						if(liczba_wywolan_api<3000){
							resolve();
						}else{
							setTimeout(Czekaj,0);
						}
					},null,muteks_api);
				}
				Czekaj();
			});
		}
		var loadStrona=function(){
			var czy_kategorie=((!token)&&(dodaj_kategorie)&&(params.action)&&(params.action=="parse"));
						
			var opakowanie_kategorii=((czy_kategorie)?(((opakuj_kategorie)?("{{OpakujKategorieZeSortowaniem|"):"")+((przytnij_tekst)?("{{PrzytnijTekst|"+params.text+"}}"):(params.text))+((opakuj_kategorie)?("}}"):"")):params.text);
			var numer_int=parseInt(numer);
			params.text=(((czy_kategorie)&&(!isNaN(numer_int))&&(params.text))?("<div class=\"hn hn_"+numer_int+"\">\n"+opakowanie_kategorii+"\n</div>"):(opakowanie_kategorii));
			params.prop=(((czy_kategorie)&&(params.prop))?(params.prop+"|categories"):params.prop);
			if(czy_kategorie){
				console.log("Ładuję wikikod na stronie o nazwie: "+(params.title||"brak nazwy")+"...");
				console.log("Kod rozwijany: "+params.text+".");
			}
			var PobierzDaneStron=function(params){
				if((!czy_zapisywac_wyniki)||(!czy_kategorie)){
					try{
						return (new mw.Api()).post(params);
					}catch(error){
						return Promise.reject(null);
					}
				}else{
					return DodatkiSkrypt.DodatkiSkryptUserOption.PobierzDaneStron((params.title||"brak nazwy"),params,function(){
						try{
							return (new mw.Api()).post(params);
						}catch(error){
							return Promise.reject(null);
						}
					});
				}
			}
			function OperujNaSerwerze(token,params){
				try{
					return (new mw.Api()).postWithToken(token,params);
				}catch(error){
					return Promise.reject(null);
				}
			}
			return ((token)?(OperujNaSerwerze(token,params)):(PobierzDaneStron(params))).DodatkiSkryptThen(function(data){
				if(czy_kategorie){
					/**/
					$(document).DodatkiSkryptReady(function(){
						if(!category_fun){
							category_fun=new DodatkiSkrypt.Kategorie.ListaKategoriiStrony();
							category_fun.PobierzKategorieStrony();
						}
						category_fun.AnalizaKategorii(data);
					},null,muteks_kategoria);
					/**/
					var strony_z_bledami_skryptow=false;
					var categories=data.parse.categories;
					for(var c=0;c<categories.length>0;++c){
						var cattab=categories[c];
						var cat=cattab["*"].replace(/^[\s_]*/g,"").replace(/[\s_]*$/g,"").replace(/[\s_]+/g," ");
						if(cat=="Strony z błędami skryptów"){
							strony_z_bledami_skryptow=true;
						}
					}

					var zawartosc=data.parse.text['*'];
					var div_kontener=document.createElement('div');
					div_kontener.innerHTML=zawartosc;
					$(div_kontener).find('.ext-discussiontools-emptystate').remove();
										
					var mw_parser_output=$(div_kontener).children('.mw-parser-output').first();
					var tab_hn;
					if(mw_parser_output.length>0){
						tab_hn=DodatkiSkrypt.Api.PotrzebneFunkcje.PotrzebnyNumerZapytania(mw_parser_output[0].innerHTML);
					}else{
						tab_hn=DodatkiSkrypt.Api.PotrzebneFunkcje.PotrzebnyNumerZapytania(div_kontener.innerHTML);
					}
					var div;
					if(tab_hn!==undefined){
						var length=tab_hn[0];
						data.parse.text.number=length;
						div=tab_hn[1];
					}else{
						data.parse.text.number=0;
						if(mw_parser_output.length>0){
							div=mw_parser_output[0];
						}else{
							div=div_kontener;
						}		
					}
					$(div).children('section.mf-section-0:only-child').each(function(i,element){
						element.outerHTML=element.innerHTML;
					});
					$(div).children('p:only-child').each(function(i,element){
						element.outerHTML=element.innerHTML;
					});
									
					var selflink=((czy_ignorowac_bledy)?false:($(div).find('> a.mw-selflink.selflink:only-child, > .ocwkzks > .obkwk > a.mw-selflink.selflink:only-child')));
										
					var str_fun_scribunto_error=$(div).find('.scribunto-error');
					
					div.innerHTML=div.innerHTML.replace(/<!--.*-->/g,"");	
					
					if((strony_z_bledami_skryptow)||(str_fun_scribunto_error.length>0)||((selflink)&&(selflink.length>0))){
						console.log("---------------------------------------")
						console.log("Strona bazowa: "+data.parse.title+".");
						console.log("Wywołanie: "+params.text+".");
						if(str_fun_scribunto_error.length>0){
							console.log("Liczba błędów skryptów Lua na stronie: "+str_fun_scribunto_error.length+".");
						}
						if(selflink.length>0){
							console.log("Liczba wywołań szablonów, które nie istnieją: "+selflink.length+".");
						}
						console.log("Uzyskano wygenerowaną zawartość zapytania: "+div.innerHTML+".");
						console.log("Numer wywołania: "+data.parse.text.number+".");
  	 					console.log('+++++++++++++++++++++++++++++++++++++++');
					}
					data.parse.text['*']=((((czy_ignorowac_bledy_lua)||((!strony_z_bledami_skryptow)&&(str_fun_scribunto_error.length==0)))&&((!selflink)||(selflink.length==0)))?(div.innerHTML.trim()):null);
				}
				$(document).DodatkiSkryptReady(function(){
					generator._zwolnij();
				},null,muteks_api);
				return Promise.resolve(data);
			}).DodatkiSkryptCatch(function(data){
				if(!data){
					return;
				}else if(czy_kategorie){
					console.log("---------------------------------------");
					console.log("Uzyskano wyjątek zapytania, oto jego parametry:");
					console.log("Strona bazowa: "+params.title+".");
					console.log("Wywołanie: "+params.text+".");
					console.log("Wygenerowana zawartość zapytania: "+data+".");
					if((czy_kategorie)&&(typeof numer=="number")&&(params.text)){
						console.log("Numer wywołania: "+numer+".");
					}
					console.log("+++++++++++++++++++++++++++++++++++++++")
				}
				$(document).DodatkiSkryptReady(function(){
					generator._zwolnij();
				},null,muteks_api);
				return Promise.reject(data);
			});
		}
		return Promise.all([ileLoad()]).DodatkiSkryptThen(function(data){
			return loadStrona();
		}).DodatkiSkryptCatch(function(data){return Promise.reject();});
	}
};
DodatkiSkrypt.api=new DodatkiSkrypt.Api.CzekajNaZadaniaApi();