Wikipedysta:Persino/Gadget-SzablonSubst.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.
(function(mw,$){
var SzablonSubst=new Array();

var czy_nie_gconfig=false;
SzablonSubst.SzablonSubst=function(){
	var szablonsubst_rozwijanie_szablonow_nie_na_stronie_zbiorczej=undefined;
	var szablonsubst_rozwijanie_szablonow_asynchroniczne_nie_na_stronie_zbiorczej=undefined;
	
	var szablonsubst_rozwijanie_szablonow_na_stronie_zbiorczej=undefined;	
	var szablonsubst_rozwijanie_szablonow_asynchroniczne_na_stronie_zbiorczej=undefined;
	
	var szablonsubst_nie_uwzgledniaj_edycji_sekcji=undefined;
	/**/
	if((window.gConfig!==undefined)&&(window.gConfig.register!==undefined)&&(window.gConfig.get!==undefined)){
		if(!czy_nie_gconfig){
			czy_nie_gconfig=true;
  			mw.messages.set({
				'SzablonSubst-name': 'Rozwijanie szablonów',
				'SzablonSubst-description-page': 'Wikibooks:StronicowyParser/SzablonSubst',
				'SzablonSubst-nie_uwzgledniaj_edycji_sekcji': 'Nie uwzględniaj edycji sekcji.',
				'SzablonSubst-rozwijanie_szablonow_nie_na_stronie_zbiorczej': 'Włącz rozwijanie szablonów, w JavaScript, nie na stronie zbiorczej.',
				'SzablonSubst-rozwijanie_szablonow_asynchroniczne_nie_na_stronie_zbiorczej': 'Włącz asynchroniczne rozwijanie szablonów, w JavaScript, nie na stronie zbiorczej.',
				'SzablonSubst-rozwijanie_szablonow_na_stronie_zbiorczej': 'Włącz rozwijanie szablonów, w JavaScript, na stronie zbiorczej.',
				'SzablonSubst-rozwijanie_szablonow_asynchroniczne_na_stronie_zbiorczej': 'Włącz asynchroniczne rozwijanie szablonów, w JavaScript, na stronie zbiorczej.',
  			});
  			gConfig.register('SzablonSubst', {name: mw.msg('SzablonSubst-name'), descriptionPage: mw.msg('SzablonSubst-description-page')}, [
  				{
					name: 'nie_uwzgledniaj_edycji_sekcji',
					desc: mw.msg('SzablonSubst-nie_uwzgledniaj_edycji_sekcji'),
					type: 'boolean',
					deflt: false,
		    		legacy: [window, 'wb_szablonsubst-nie_uwzgledniaj_edycji_sekcji']
				},
				{
					name: 'rozwijanie_szablonow_nie_na_stronie_zbiorczej',
					desc: mw.msg('SzablonSubst-rozwijanie_szablonow_nie_na_stronie_zbiorczej'),
					type: 'boolean',
					deflt: true,
		    		legacy: [window, 'wb_szablonsubst-rozwijanie_szablonow_nie_na_stronie_zbiorczej']
				},
				{
					name: 'rozwijanie_szablonow_asynchroniczne_nie_na_stronie_zbiorczej',
					desc: mw.msg('SzablonSubst-rozwijanie_szablonow_asynchroniczne_nie_na_stronie_zbiorczej'),
					type: 'boolean',
					deflt: false,
		    		legacy: [window, 'wb_szablonsubst-rozwijanie_szablonow_asynchroniczne_nie_na_stronie_zbiorczej']
				},
				{
					name: 'rozwijanie-szablonow_na_stronie_zbiorczej',
					desc: mw.msg('SzablonSubst-rozwijanie_szablonow_na_stronie_zbiorczej'),
					type: 'boolean',
					deflt: true,
		    		legacy: [window, 'wb_szablonsubst-rozwijanie_szablonow_na_stronie_zbiorczej']
				},
				{
					name: 'rozwijanie_szablonow_asynchroniczne_na_stronie_zbiorczej',
					desc: mw.msg('SzablonSubst-rozwijanie_szablonow_asynchroniczne_na_stronie_zbiorczej'),
					type: 'boolean',
					deflt: false,
		    		legacy: [window, 'wb_szablonsubst-rozwijanie_szablonow_asynchroniczne_na_stronie_zbiorczej']
				},		
			]);
		}
		
		szablonsubst_nie_uwzgledniaj_edycji_sekcji = (gConfig.get('SzablonSubst', 'nie_uwzgledniaj_edycji_sekcji')==true);
		szablonsubst_rozwijanie_szablonow_nie_na_stronie_zbiorczej = (gConfig.get('SzablonSubst', 'rozwijanie_szablonow_nie_na_stronie_zbiorczej')==true);
		szablonsubst_rozwijanie_szablonow_asynchroniczne_nie_na_stronie_zbiorczej = (gConfig.get('SzablonSubst', 'rozwijanie_szablonow_asynchroniczne_nie_na_stronie_zbiorczej')==true);
		
		szablonsubst_rozwijanie_szablonow_na_stronie_zbiorczej = (gConfig.get('SzablonSubst', 'rozwijanie_szablonow_na_stronie_zbiorczej')==true);
		szablonsubst_rozwijanie_szablonow_asynchroniczne_na_stronie_zbiorczej = (gConfig.get('SzablonSubst', 'rozwijanie_szablonow_asynchroniczne_na_stronie_zbiorczej')==true);
	}
	szablonsubst_nie_uwzgledniaj_edycji_sekcji=((szablonsubst_nie_uwzgledniaj_edycji_sekcji!=undefined)?szablonsubst_nie_uwzgledniaj_edycji_sekcji:false);
	szablonsubst_rozwijanie_szablonow_nie_na_stronie_zbiorczej=((szablonsubst_rozwijanie_szablonow_nie_na_stronie_zbiorczej!=undefined)?szablonsubst_rozwijanie_szablonow_nie_na_stronie_zbiorczej:true);
	szablonsubst_rozwijanie_szablonow_asynchroniczne_nie_na_stronie_zbiorczej=((szablonsubst_rozwijanie_szablonow_asynchroniczne_nie_na_stronie_zbiorczej!=undefined)?szablonsubst_rozwijanie_szablonow_asynchroniczne_nie_na_stronie_zbiorczej:false);
	
	szablonsubst_rozwijanie_szablonow_na_stronie_zbiorczej=((szablonsubst_rozwijanie_szablonow_na_stronie_zbiorczej!=undefined)?szablonsubst_rozwijanie_szablonow_na_stronie_zbiorczej:true);
	szablonsubst_rozwijanie_szablonow_asynchroniczne_na_stronie_zbiorczej=((szablonsubst_rozwijanie_szablonow_asynchroniczne_na_stronie_zbiorczej!=undefined)?szablonsubst_rozwijanie_szablonow_asynchroniczne_na_stronie_zbiorczej:false);	
	
	var promise_szablon;
	this.UstalanieZmiennychRozwijaniaSzablonowego=function(aktualna_strona){
		return DodatkiSkrypt.Scribunto.StronicowyParser.CzyStronaSubst(aktualna_strona).DodatkiSkryptThen(function(wikikod){
			if(wikikod){
				var szablonsubst_rozwijanie_szablonow=szablonsubst_rozwijanie_szablonow_na_stronie_zbiorczej;
				var szablonsubst_rozwijanie_szablonow_asynchroniczne=szablonsubst_rozwijanie_szablonow_asynchroniczne_na_stronie_zbiorczej
			}else{
				var szablonsubst_rozwijanie_szablonow=szablonsubst_rozwijanie_szablonow_nie_na_stronie_zbiorczej;
				var szablonsubst_rozwijanie_szablonow_asynchroniczne=szablonsubst_rozwijanie_szablonow_asynchroniczne_nie_na_stronie_zbiorczej;
			}
			return Promise.resolve([szablonsubst_rozwijanie_szablonow,szablonsubst_rozwijanie_szablonow_asynchroniczne]);
		});
	}

	promise_szablon=this.UstalanieZmiennychRozwijaniaSzablonowego();
	this_zmienna=this;
	var tab_num=new Array();
	//var tab_promise=new Array();
	//this.CzekanieNaZwolnienieWszystkichKorutynWTabeliObietnicSzablonSubst=function(promise){
	//	console.log(tab_promise.length)
	//	return DodatkiSkrypt.CzekanieNaZwolnienieWszystkichKorutynWTabeliObietnic(tab_promise);
	//}
	this.PobierzSzablon=function(element,nazwa,czy_numerowac,aktualna_strona){
		var promise_szablon_domyslna=promise_szablon;
		if(aktualna_strona){
			promise_szablon=this_zmienna.UstalanieZmiennychRozwijaniaSzablonowego(aktualna_strona);
		}
		return promise_szablon.DodatkiSkryptThen(function(data){
			var szablonsubst_rozwijanie_szablonow=data[0];var szablonsubst_rozwijanie_szablonow_asynchroniczne=data[1];
			var PobierzSzablon=function(element,nazwa,czy_numerowac){
				var tab_promise=new Array();
				if(!szablonsubst_rozwijanie_szablonow){return;}
				if(czy_numerowac==undefined){czy_numerowac=true;}	
				var szablon_js;
				if(!element){
					szablon_js=$('#mw-content-text .mw-parser-output .szablon_subst_js');
				}else{
					szablon_js=$(element).find('.szablon_subst_js');
				}
				if((szablon_js!==null)&&(szablon_js.length>0)){
					var tab_szablon_js=new Array();
					for(var i=0;i<szablon_js.length;++i){tab_szablon_js[i]=szablon_js[i];}
					for(var i=0;i<tab_szablon_js.length;++i){
						var element=tab_szablon_js[i];
						var potomek=((element)?($('.szablon_subst_js').find(element)):element);
						if((potomek===null)||(potomek.length==0)){
							var strona_szablon_js=undefined;
							var nazwa_strony=$(element).parent().first()[0].querySelector('.nazwa_strony');
							if(nazwa_strony){
								strona_szablon_js=DodatkiSkrypt.Szereg.Styl.UsuwanieZnacznikoweHTML(DodatkiSkrypt.Szereg.Styl.UsuwanieStyloweHTML(nazwa_strony.innerHTML));
								if(/^[_\s]*$/g.test(strona_szablon_js)){
									strona_szablon_js=undefined;
								}
							}
							if(!strona_szablon_js){
								strona_szablon_js=((nazwa)?nazwa:(DodatkiSkrypt.Info.page.fullname));
							}
							var zawartosc;
							var wzor_element=$(element).children("*");
							if((wzor_element!==null)&&(wzor_element.length>0)){
								zawartosc=element.innerHTML;
								for(var i=0;i<wzor_element.length;++i){
									var math=wzor_element[i].outerHTML;
									var math_temp=math;
						
									math=math.replace(/[\{\}\=\|]/g,function(s){
										var tab={
											"{":"{{(}}",
											"}":"{{)}}",
											"=":"{{=}}",
											"|":"{{!}}"
										};
										return tab[s]||s;
									}).replace(/>/g,"&amp;gt;").replace(/</g,"&amp;lt;").replace(/\//g,"&amp;#47;");
						
									math_temp=DodatkiSkrypt.Szereg.Norma.BezZnakowychSpecjalnychElementowychWIndywiduum(math_temp);
									var re=new RegExp(math_temp,"g");
							
									zawartosc=zawartosc.replace(re,math);
								}
							}else{
								zawartosc=element.innerHTML;
							}
							var grupa=zawartosc.match(/\|\s*grupa\s*=\s*[^\|\{\}<>]+/g);
							if(grupa!==null){
								var grupa_temp=grupa.toString();
								var grupa_temp2=grupa_temp;
								grupa_temp=DodatkiSkrypt.Szereg.Norma.BezZnakowychSpecjalnychElementowychWIndywiduum(grupa_temp);
								var re=new RegExp(grupa_temp,"g");
							
								grupa=grupa.toString().replace(/\|\s*grupa\s*=\s*/g,"").replace(/^\s*/g,"").replace(/\s*$/g,"");
								tab_num[grupa]=((tab_num[grupa])?tab_num[grupa]:0)+1;
							
								zawartosc=zawartosc.replace(re,grupa_temp2+"|numer szablonu="+tab_num[grupa]);
							}
					
							var promise=DodatkiSkrypt.api.ZadaniaApi({
								action: 'parse',
								format: 'json',
								prop: 'text',
								title: strona_szablon_js,
								text: ((szablonsubst_nie_uwzgledniaj_edycji_sekcji)?"__NOEDITSECTION__\n":"\n")+zawartosc,
								disabletoc: true,
								disablelimitreport: true,
								disablestylededuplication: true,
								contentmodel: 'wikitext',
							},null,true,i,false,true).DodatkiSkryptThen(function(data){
	    							var wikikod=data.parse.text['*'];
	    							var title=data.parse.title;
		    						var number=data.parse.text.number;
		    						wikikod=wikikod.replace(/&amp;gt;/g,">").replace(/&amp;lt;/g,"<").replace(/&amp;#47;/g,"/");
	    			
			    					var parent_szablon_js=szablon_js[number].parentNode;
		    						var element_div;
	    							if($(parent_szablon_js).hasClass('rodzic_szablon_subst_js')){
	    								element_div=parent_szablon_js;
	    							}else{
	    								element_div=szablon_js[number];
	    							}
		    						element_div.innerHTML=wikikod;
			    					element_div.setAttribute('nazwa_strony',title);
			    					element_div.classList.add('szablon_subst_js_zaanalizowany');

	    						return PobierzSzablon(element_div,nazwa,czy_numerowac);
							}).DodatkiSkryptCatch(function(error){console.log(error);});
							tab_promise.push(promise);
						}
					}
				}
				return Promise.all(tab_promise);
			};
			return PobierzSzablon(element,nazwa,czy_numerowac);
		}).DodatkiSkryptFinally(function(){
			promise_szablon=promise_szablon_domyslna;
		});
    }
    this.PobierzSzablonyStronyNieZbiorczej=function(){
    	//return $(document).DodatkiSkryptReady(function(){
    		return DodatkiSkrypt.Szereg.Zmienne["CzekajNaZbiórZmiennych"](StronaSubst,new Array("analiza_stron_zbiorczych")).DodatkiSkryptThen(function(){
    			var id_strony=$('#mw-content-text .mw-parser-output').first();
				if(id_strony.length>0){
    				return StronaSubst.analiza_stron_zbiorczych.AnalizujDalejSzablonSubst(id_strony[0]);
				}
    		}).DodatkiSkryptCatch(function(){});
    	//});
    }
}

var promise=new Promise(function(resolve,reject){
	function Czekaj(){
		if(window.DodatkiSkrypt){
			resolve(window.DodatkiSkrypt);
		}else{
			setTimeout(Czekaj,0);
		}
	}	
	Czekaj();
});
promise.then(function(DodatkiSkrypt){
	return DodatkiSkrypt.Szereg.Zmienne["CzekajNaZbiórZmiennych"](window,new Array("gConfig")).DodatkiSkryptThen(function(){
		SzablonSubst.szablony=new SzablonSubst.SzablonSubst();
		return DodatkiSkrypt.Szereg.Zmienne["CzekajNaZbiórZmiennych"](DodatkiSkrypt.Info,new Array("page")).DodatkiSkryptThen(function(){
			return DodatkiSkrypt.Scribunto.StronicowyParser.CzyStronaSubst().DodatkiSkryptThen(function(wikikod){
				if(!wikikod){
					DodatkiSkrypt.Scribunto.StronicowyParser.CzyStronaSubst().DodatkiSkryptThen(function(wikikod){
						if(!wikikod){
							SzablonSubst.szablony.PobierzSzablonyStronyNieZbiorczej();
						}
					});
				}
			});
		});
	});
});
window.SzablonSubst=SzablonSubst;
})(mediaWiki,jQuery);