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"]();