Przejdź do zawartości

Wikipedysta:Persino/Gadget-StronicowyParser.js/AktualizacjaStron.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)
  • Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5.
  • Opera: Naciśnij klawisze Ctrl+F5.
StronicowyParser.AktualizacjaStron=function(fullname,kategoria_pozycji){
	this.fullname=((!fullname)?(StronicowyParser.pageinfo.fullname.replace(/[_\s]+/g," ")):fullname);
	this.tabcat=undefined;
	this.kategoria_pozycji=((!kategoria_pozycji)?('Strony z błędami skryptów'):kategoria_pozycji);
	this.prefix_kategorii_pozycji="Kategoria:";
	this.muteks_aktualizacja_stron=new StronicowyParser.Muteks();
	this.strona_aktualna=undefined;
	this.strona_aktualna_powtarzanie=undefined;
    this.PustaEdycjaStrony=async function(title){
		let params={
			action: 'edit',
			title: title,
			appendtext: '',
			nocreate: true,
			format: 'json',
			smaxage: 600,
			maxage: 600,
			prop: 'info|revisions',
		};
		await StronicowyParser.api.ZadaniaApi(params,'csrf').then((data)=>{console.log("Udało się zaaktualizować stronę: "+title);}).catch((data)=>{console.log("Nie udało się zaaktualizować strony: "+title,"Kod błędu: "+data);});
	};
	this.OdswiezanieStrony=async function(title){
		await StronicowyParser.api.ZadaniaApi({
			action: 'purge',
			titles: title,
			format: 'json',
			smaxage: 600,
			maxage: 600,
			prop: 'info|revisions',
		}).then((data)=>{console.log("Udało się odświeżyć stronę: "+title);}).catch((data)=>{console.log("Nie udało się odświeżyć strony: "+title,"Kod błędu: "+data);});
	};
	this.PustaEdycjaIOdswiezanieStrony=async function(title){
		let zmienna_this=this;
		setTimeout(async function(){zmienna_this.PustaEdycjaStrony(title);},0);
		setTimeout(async function(){zmienna_this.OdswiezanieStrony(title);},3000);
	};
	this.AktualizacjaCzlonkowKategorii=async function(kategoria){
		let tab_promise=new Array();
		let this_zmienne=this;
		let czy_tak=null;
		await StronicowyParser.api.ZadaniaApi({
			action: 'query',
			list: 'categorymembers',
			cmtitle: kategoria,
			cmtype: 'file|page|subcat',
			cmlimit: 500,
			format: 'json',
			smaxage: 600,
			maxage: 600,
		}).then(function(data){
			let category = data.query.categorymembers;
			for (let cat in category){
				czy_tak=true;
				let title=category[cat].title;
				if(title==this_zmienne.fullname){
					const promise_aktualna=(async function(){
						await this_zmienne.muteks_aktualizacja_stron.zablokuj();
						if((!this_zmienne.strona_aktualna)||(this_zmienne.strona_aktualna_powtarzanie)){
							this_zmienne.tabcat=this_zmienne.tabcat||await StronicowyParser.kategorie.StworzTabliceKategoriiZCatLinks();
							let czy_istnieje_blad=this_zmienne.tabcat[this_zmienne.kategoria_pozycji];
							if(czy_istnieje_blad){
								await this_zmienne.PustaEdycjaIOdswiezanieStrony(title);
								if(document.querySelector('body.action-view')){
									window.location.reload(true);
								}
								this_zmienne.this_zmienne.tabcat=undefined;
							}
							this_zmienne.strona_aktualna=true;
						}
						this_zmienne.muteks_aktualizacja_stron.odblokuj();
					})();
					tab_promise.push(promise_aktualna);
					continue;
				}
				const promise=this_zmienne.PustaEdycjaIOdswiezanieStrony(title);
				tab_promise.push(promise);
			}
		}).catch((data)=>{});
		
		if(tab_promise.length>0){
			await Promise.all(tab_promise).then(()=>{}).catch(()=>{});
		}
		return czy_tak;
	};
	this.AktualizacjaAktualnejStrony=async function(){
		let czy_tak=null;
		let wlasciwe=document.querySelector(":root > body:not(.ns-special)");
		if(wlasciwe!==null){
			let aktualizacja_strony=document.querySelector('#mw-content-text .mw-parser-output .aktualizacja_strony');
			if(aktualizacja_strony!==null){
				await this.PustaEdycjaIOdswiezanieStrony(this.fullname);
			}else{
				await this.muteks_aktualizacja_stron.zablokuj();
				if(!this.strona_aktualna){
					this.tabcat=this.tabcat||await StronicowyParser.kategorie.StworzTabliceKategoriiZCatLinks();
					if(this.tabcat[this.kategoria_pozycji]){
						await this.PustaEdycjaIOdswiezanieStrony(this.fullname);
						czy_tak=true;
						if(document.querySelector(':root > body.action-view:not(.ns-special)')){
							window.location.reload(true);
						}
						this.tabcat=undefined;
					}
					this.strona_aktualna=true;
				}
				this.muteks_aktualizacja_stron.odblokuj();
			}
		}
		return czy_tak;
	};
	this.PowtarzanieAktualizacji=async function(){
		this.strona_aktualna_powtarzanie=true;
		let aktualizacja_strony_nie_powtarzanie=document.querySelector('#mw-content-text .mw-parser-output .aktualizacja_strony_nie_powtarzanie');
		if(!this.aktualizacja_strony_nie_powtarzanie){
			let this_zmienne=this;
			let pelna_nazwa_pozycji=this.prefix_kategorii_pozycji+this.kategoria_pozycji;
			setInterval(async function(){
				 await this_zmienne.PustaEdycjaIOdswiezanieStrony(pelna_nazwa_pozycji);
				 let czy_tak=await this_zmienne.AktualizacjaCzlonkowKategorii(pelna_nazwa_pozycji);
				 if(czy_tak){
					await this_zmienne.PustaEdycjaIOdswiezanieStrony(pelna_nazwa_pozycji);
				 }
			}, 1000*60*10);
		}
	};
   this.AktualizacjaStronyAktualnejIStronyKategorii=async function(){
   		let pelna_nazwa_pozycji=this.prefix_kategorii_pozycji+this.kategoria_pozycji;
		if(pelna_nazwa_pozycji!=this.fullname){
			await this.PustaEdycjaIOdswiezanieStrony(pelna_nazwa_pozycji);
			const promise1=this.AktualizacjaAktualnejStrony();
			const promise2=this.AktualizacjaCzlonkowKategorii(pelna_nazwa_pozycji);
			let czy_tak=null;
			await Promise.all([promise1,promise2]).then((dane)=>{czy_tak=dane[0]||dane[1];}).catch(()=>{});
			if(czy_tak){
				await this.PustaEdycjaIOdswiezanieStrony(pelna_nazwa_pozycji);
			}
		}else{
			await this.PustaEdycjaIOdswiezanieStrony(pelna_nazwa_pozycji);
			let czy_tak=await this.AktualizacjaCzlonkowKategorii(pelna_nazwa_pozycji);
			if(czy_tak){
				await this.PustaEdycjaIOdswiezanieStrony(pelna_nazwa_pozycji);
			}
		}
	};
};
StronicowyParser.aktualizacja=new StronicowyParser.AktualizacjaStron();
StronicowyParser.aktualizacja.AktualizacjaStronyAktualnejIStronyKategorii();
StronicowyParser.aktualizacja.PowtarzanieAktualizacji();