Wikipedysta:Persino/Gadget-StronicowyParser.js/GłównySkrypt.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 StronicowyParser=new Array();
StronicowyParser.Script=function(){
	let tablica_projekt=new Array();
	this.LoadScript=async function(skrypt,projekt,jezyk){
    	if(jezyk==null){jezyk=mw.config.get('wgContentLanguage');};
    	if(projekt==null){projekt=mw.config.get('wgSiteName');};
    	jezyk=jezyk.toLowerCase();
    	projekt=projekt.toLowerCase();
    	
    	let skrypty=skrypt.split("|");
    	let modules=new Array();
    	for(let p in skrypty){
    		let element_skrypt=skrypty[p].trim();
    		if(/^[\s_]*$/g.test(element_skrypt)){continue;}
    		let jaki_js=element_skrypt.match(/\.js[\s_]*$/g);
    		let jaki_css=element_skrypt.match(/\.css[\s_]*/g);
    	
    		let skrypt_nowe;
    		if((jaki_js)||(jaki_css)){
    			skrypt_nowe=element_skrypt.replace(/^[_\s]+/g,"").replace(/[_\s]+$/g,"").replace(/[\s_]+/g,"_").replace(/^([^:]*\S+)[\s_]*:[\s_]*/g,"$1:").replace(/^([^:]+):(.)/g,function(s){return s.toLowerCase();});
    			if((!((/^[Mm][Ee][Dd][Ii][Aa][Ww][Ii][Kk][Ii]/g.test(skrypt_nowe))&&((jaki_js)||(jaki_css))))
    				&&(!((/^[Uu][Ss][Ee][Rr]:/g.test(skrypt_nowe))&&((jaki_js)||(jaki_css))))
    	    			&&(!((/^[Mm][Oo][Dd][Uu][Ll][Ee]:/g.test(skrypt_nowe))&&(jaki_css)))
    	    				&&(!((/^[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee]:/g.test(skrypt_nowe))&&(jaki_css)))){
    	    					console.log("Nie załadowałem skryptu: "+skrypt+", kod języka: "+jezyk+", kod projektu="+projekt+".");
    	    			continue;
    			}
    		}else{
    			skrypt_nowe=element_skrypt.replace(/^[_\s]+/g,"").replace(/[_\s]+$/g,"").replace(/[\s_]+/g,"_");
    		}
    		if((tablica_projekt[jezyk])&&(tablica_projekt[jezyk][projekt])&&(tablica_projekt[jezyk][projekt][skrypt_nowe])){
  	    		continue;
    		}
    		if(!tablica_projekt[jezyk]){tablica_projekt[jezyk]=new Array();}
    		if(!tablica_projekt[jezyk][projekt]){tablica_projekt[jezyk][projekt]=new Array();}
    		if(!tablica_projekt[jezyk][projekt][skrypt_nowe]){tablica_projekt[jezyk][projekt][skrypt_nowe]=true;}
    		if(jaki_js!==null){
    			console.log("Ładuję skrypt JavaScript: "+element_skrypt);
				let script=document.createElement('script');
				script.setAttribute('type','text/javascript');
				let adres="//"+jezyk+"."+projekt+".org/w/index.php?action=raw&ctype=text/javascript&title="+encodeURIComponent(element_skrypt);
				script.setAttribute('src',adres)
				script.setAttribute('language','JavaScript');
				script.async=false;
				let element=document.querySelector('head')||document.querySelector('body');
				if(element.firstChild){
            		element.insertBefore(script,element.firstChild);
				}else{
					element.appendChild(script);
				}
    		}else if(jaki_css!==null){
    			console.log("Ładuję arkusz stylów CSS: "+element_skrypt);
    			let link=document.createElement('link');
    			link.setAttribute('rel','stylesheet');
    			link.setAttribute('type',"text/css");
    			let adres="//"+jezyk+"."+projekt+".org/w/index.php?action=raw&ctype=text/css&title="+encodeURIComponent(element_skrypt);
    			link.setAttribute('href',adres);
    			let head=document.querySelector('head');
				head.appendChild(link);
    		}else{
    			if(!modules){modules=new Array();}
    			modules.push(element_skrypt);
    		}
    	}
		if((modules)&&(modules.length>0)){
    		function LoadModule(element_skrypty){
    			console.log("Ładuję moduły: "+element_skrypty.join(","));
    			let script=document.createElement('script');
				script.setAttribute('type','text/javascript');
				let adres="//"+jezyk+"."+projekt+".org/w/load.php?lang=pl&modules="+encodeURIComponent(element_skrypty.join("|"));
				script.setAttribute('src',adres)
				script.setAttribute('language','JavaScript');
				script.async=false;
				let element=document.querySelector('head')||document.querySelector('body');
				if(element.firstChild){
            		element.insertBefore(script,element.firstChild);
				}else{
					element.appendChild(script);
				}
    		}
    		if((jezyk!=mw.config.get('wgContentLanguage').toLowerCase())||(projekt!=mw.config.get('wgSiteName').toLowerCase())){
    			LoadModule(modules);
    		}else{
    			let module_inne=undefined;
    			for(let p in modules){
    				let element_modul=modules[p];
    				console.log("Ładuję moduł: ", element_modul);
    				let status=mw.loader.getState(element_modul);
    				console.log("Status: "+status);
    				try{
    					if(status!="ready"){
    		    			await mw.loader.using([element_modul],function(require){}).then(()=>{}).catch(()=>{
    		    				if(!module_inne){module_inne=new Array();}
    		    				module_inne.push(element_modul);
    		    			});
    					}else{
    						mw.loader.load(element_modul);
    					}
    				}catch(error){};
    			}
    		    if((module_inne)&&(module_inne.length>0)){
    		    	try{
    		    		LoadModule(module_inne);
    		    	}catch(error){}
    		    }
    		}
    	}	
    }
    let this_zmienne=this;
    this.requireFile=function(script){
    	let scripts=mw.loader.moduleRegistry[script].script;
    	if(!scripts){
    		mw.loader.load(script);
    		return;
    	}
		let main=scripts.main;
    	if(/^[^\/]*$/g.test(main)){
    		main="";
    	}else{
    		main=main.replace(/[\/][^\/]*$/g,"");
    	}
    	function requireFun(file){
    		if(main!=""){
    			file=main+"/"+file;
    			file=file.replace(/\/\.\//g,"/");
    		}else{
    			file=file.replace(/^\.\//g,"");
    		}
			while(true){
				let tab_s=file.match(/\/[^\/]*\/\.\.\//g);
				if(tab_s==null){break;}
				if(tab_s.length>0){
					file=file.replace(tab_s[0].toString(),"/");
				}else{break;}
			}
    		console.log("Ładuję plik modułu: "+file);
    		return mw.loader.moduleRegistry[script].script.files[file];
    	}
    	function plikMain(file){
    	    if(file==null){
    			 let main=mw.loader.moduleRegistry[script].script.main;
    		     if(/^[^\/]*$/g.test(main)){
    		    	file="./"+main;
    		    }else{
    		    	file="."+(main.match(/\/[^\/]*$/g).toString());
    		    }
    		 }
    		 return file;
    	}
    	function require(file){
    		file=plikMain(file);
    		if((/^\.\//g.test(file))||(/^\.\.\//g.test(file))){
    			let ob=requireFun(file);
    			if(typeof(ob) == "function"){
    				console.log("Typ danych: function");
    				let module=new Array();let exports=new Array();
    				let c=ob(require,module,exports);
    				return module.exports;
    			}
    			console.log("Typ danych: "+typeof(ob));
    			return ob;
    		}
    		let element_modul=file;
    		console.log("Inny moduł: "+file);
    		let script=mw.loader.moduleRegistry[element_modul].script;
    		if(script){
    		    let main=mw.loader.moduleRegistry[element_modul].script.main;
    		    if(main){
    		    	let plik;
    		    	if(/^[^\/]*$/g.test(main)){
    		    		plik="./"+main;
    		    	}else{
    		    		plik="."+(main.match(/\/[^\/]*$/g).toString());
    		    	}
    				return this_zmienne.requireFile(element_modul)(plik);
    		    }
    		}else{
    			mw.loader.load(element_modul);
    		}
    	}
    	return require;
    }
};
StronicowyParser["LoadJavaScriptModuł"]=function(funkcja,zmienna){
	let kod="StronicowyParser[\""+funkcja+"\"]("+((zmienna)?zmienna:"")+")";
	StronicowyParser["LoadJavaScriptKod"](kod);
};
StronicowyParser["LoadJavaScriptKod"]=function(kod){
	let script=document.createElement('script');
	script.innerHTML=kod;
	script.setAttribute('type','text/javascript');
	script.setAttribute('language','JavaScript');
	script.async=false;
	let element=document.querySelector('head')||document.querySelector('body');
	if(element.firstChild){
        element.insertBefore(script,element.firstChild);
	}else{
		element.appendChild(script);
	}
};
StronicowyParser["CzekanieNaZmienną"]=function(zmienna,element){
	let czas=0;
	return new Promise((resolve,reject)=>{
		function Czekaj(){
			setTimeout(()=>{
				if(zmienna[element]){
					resolve();	
				}else{
					if(czas>1000*60){
						reject();
					}else{
						czas+=100;
						Czekaj();
					}
				}
			},100);	
		}
		Czekaj();
	});
};
StronicowyParser["CzekajNaZbiórZmiennych"]=async function(zmienna,tab){
	let tab_promise=new Array();
	for(let p in tab){
		tab_promise.push(StronicowyParser["CzekanieNaZmienną"](zmienna,tab[p]));
	}
	return Promise.all(tab_promise);
};
StronicowyParser["OgólneSkrypty"]=async function(){
	/*Biblioteki*/
	await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/Funkcje.js');
	await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/Nazwy.js');
	await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/InitInfo.js');
};
StronicowyParser["SpecjalistyczneSkrypty"]=async function(){
	/*Gadzety*/
	let tab_zmienne=new Array("pageinfo");
	let promise=StronicowyParser["CzekajNaZbiórZmiennych"](StronicowyParser,tab_zmienne);
	await promise.then(async function(){
	   /*gConfig*/
		await StronicowyParser.script.LoadScript('ext.gadget.gConfig','Wikipedia');
		await StronicowyParser.script.LoadScript('MediaWiki:Gadget-gConfig.css','Wikipedia');					
		await StronicowyParser.script.LoadScript('MediaWiki:Gadget-gConfig.js','Wikipedia');
		/*Ważne skrypty specjalistyczne*/
		await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/Moduł.js');
		await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/Tryb_ciemny.js');
		await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/Kategorie.js');
		await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/AktualizacjaStron.js');
		await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/Wyszukiwanie.js');
		await StronicowyParser.script.LoadScript('Template:Link_wewnętrzny/styles.css');
		await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/DymkiSubst.css');
		await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/DymkiSubst.js');
		await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/NumerSubst.js');
		await StronicowyParser.script.LoadScript('Template:Wzór/styles.css');
		await StronicowyParser.script.LoadScript('Template:TOC_limit/styles.css');
		await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/SzablonSubst.js');
		await StronicowyParser.script.LoadScript('User:Persino/Gadget-StronicowyParser.js/StronaSubst.js');
	}).catch(()=>{});
};
StronicowyParser["GłównaFunkcja"]=async function(){
	StronicowyParser.script=new StronicowyParser.Script();
	StronicowyParser["LoadJavaScriptModuł"]('OgólneSkrypty');
	StronicowyParser["LoadJavaScriptModuł"]('SpecjalistyczneSkrypty');
};
StronicowyParser["GłównaFunkcja"]();