Benutzer:Der Buckesfelder/SkriptInstaller.js

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 24. Oktober 2013 um 02:22 Uhr durch Equazcion (Diskussion | Beiträge) (adding progress messages). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
 // Never do anything in article space
 if(wgNamespaceNumber!=0){

 // Handle .js pages
 if((wgPageName.lastIndexOf('.js')==wgPageName.length-3)&&(wgAction=='view')&&(wgNamespaceNumber>-1)){

 // Exclude users' own common.js and skin.js pages
 varfixedUn=wgUserName.replace(/ /g,'_');
 if((wgPageName!='User:'+fixedUn+'/common.js')&&
 (wgPageName!='User:'+fixedUn+'/monobook.js')&&
 (wgPageName!='User:'+fixedUn+'/vector.js')&&
 (wgPageName!='User:'+fixedUn+'/modern.js')&&
 (wgPageName!='User:'+fixedUn+'/cologneblue.js')&&
 (wgPageName!='User:Equazcion/ScriptInstaller.js')){
 importStylesheet('User:Equazcion/ScriptInstaller.css');

 // Set a flag so the rest of the script knows we're on a .js page
 varjsPage=true;

 // Append the install link to the header, along with a "scriptInstallerLink" class for use by the rest of the script
 $('h1#firstHeading').append('<span style="font-size:0.8em;font-weight:bold;" id="'+wgPageName+'" class="scriptInstallerLink jsPage"></span>');
 }
 }

 // If script links are found on the page, start the music. Detection is based on span tags with "scriptInstallerLink" class, which are added by {{userscript}}.
 // Also run if we're on User:Equazcion/scriptInstaller, where we'll simply provide access to the installed script list and uninstall links
 if((($('span.scriptInstallerLink').length>0)&&(wgAction!='submit')&&(wgAction!='edit'))||(wgPageName=='User:Equazcion/ScriptInstaller')){

 if(jsPage!=true)importStylesheet('User:Equazcion/ScriptInstaller.css');// Stylesheet already fetched above on .js pages
 if(wgPageName=='User:Equazcion/ScriptInstaller')varhomePage=true;// Set a flag if we're running the limited User:Equazcion/ScriptInstaller functions

 // Set URL prefix
 varpre=location.protocol+'//'+wgPageContentLanguage+'.'+wgNoticeProject+'.org'+'/w/index.php?title=';

 // Set interface text
 varinstallerTitle='You currently have the following scripts installed <div class="titleBadge"><a href="'+pre+'User:Equazcion/ScriptInstaller'+'">Script Installer</a></div>';
 varinstallerMessage='Only scripts installed using <span style="font-weight:bold">Script Installer</span> are shown here. To uninstall a script, click "Uninstall".';
 varpipe='<span style="font-size:1.1em;"> | </span>';
 varinstallerLink='Install';
 varinstalled='Installed';
 varunInstallerLink='Uninstall';
 varnoauto='Must be installed manually';

 // Set up the regex pattern for later
 varregexObject=newRegExp('importScript\\(\'(.*)\'\\); \\/\\/Linkback: \\[\\[.*?\\]\\] Added by Script installer',["i"]);

 // Create array for installed script paths
 varinstalledScripts=[];

 // Append the box of installed scripts. Hide unless we're on a designated installation page
 $('div#contentSub').after('<div hidden="hidden" class="scriptInstaller"></div>');

 // Set parameters for common.js ajax request	
 varrequest4={
 action:"query",
 titles:"User:"+mw.config.get("wgUserName")+"/common.js",
 prop:"revisions|info",
 intoken:"edit",
 rvprop:"content",
 indexpageids:1,
 format:"xml"
 };

 // Do common.js ajax request
 $.get(mw.config.get("wgScriptPath")+"/api.php",request4,function(response4){

 // Grab common.js content and split by lines 
 varlines=$(response4).find('rev').text().split('\n');

 // Use the regex to iterate through the lines, looking for the ones that ScriptInstaller added
 $.each(lines,function(index,value){
 varmatch=regexObject.exec(value);

 // Put the paths of the matches into the array of installed scripts
 if(match!=null){
 installedScripts.push(match[1]);
 }
 });

 // If none were found, remove the installed script list box. Otherwise fade-in the box and set up the toggle link
 if(installedScripts.length<1){
 $('div.scriptInstaller').remove();
 }elseif((wgPageName=='Wikipedia:WikiProject_User_scripts/Scripts')||(wgPageName=='Wikipedia:WikiProject_User_scripts')||
 (wgPageName=='Wikipedia:User_scripts')||(jsPage==true)||(homePage==true)){

 // Insert script list toggle link
 vartoggleMessage=((jsPage==true)||(homePage==true))?'Show installed script list':'Hide installed script list';
 $('.firstHeading').append(' <a style="font-weight:bold;font-size:10px" class="scriptinstallerTog" href="#bbx">'+toggleMessage+'</a>');

 // The function to set the toggle link to
 functionsetScriptInstallerToggle(){
 $('.scriptinstallerTog').click(function(){
 if($('.scriptinstallerTog').html()=="Show installed script list"){
 $('.scriptInstaller').fadeIn(500);
 $('.scriptinstallerTog').html('Hide installed script list');
 }else{
 $('.scriptInstaller').fadeOut(200);
 $('.scriptinstallerTog').html('Show installed script list');
 }
 });
 }

 // Set the toggle link function. Also fade the box in initially, if we're at the script listing page.
 if((jsPage!=true)&&(homePage!=true)){
 setTimeout(function(){
 $('.scriptInstaller').fadeIn(800,function(){setScriptInstallerToggle();});
 },500);
 }else{
 setScriptInstallerToggle();
 }
 }

 // Start building the code for display of the installed list. Iterate through each installed script in the array
 varinstalledList='<ul style="list-style-type:none;">';
 $.each(installedScripts,function(index,value){

 // For each script already installed, change the install links (into "installed" messages) that are on the current page (if any)
 $('span.scriptInstallerLink[id="'+encodeURIComponent(value).replace('%3A',':').replace(/\//g,'.2F').replace(/ /g,'_').replace(/%/g,'.').replace(/\.20/g,'_')+'"]')
 .attr('id','installed'+index)
 .addClass('installed')
 .html(installed)
 .css('font-weight','bold');
 if(jsPage==true)
 $('span.scriptInstallerLink[id="'+value.replace(/ /g,'_')+'"]')
 .attr('id','installed'+index)
 .addClass('installed')
 .html(installed)
 .css('font-weight','bold');

 // Add an HTML list element for each installed script, containing .js and uninstall links
 installedList=installedList+'<li>'+
 '<a href="#installerLink" class="unInstallerLink">'+unInstallerLink+'</a>: '+
 '<a href="'+pre+value+'">'+decodeURIComponent(value)+'</a>'+
 '</li>';
 });

 // Cap off the list of installed scripts
 installedList=installedList+'</ul>';

 // Build and append the rest if the list box code, and insert our constructed list of installed scripts
 $('.scriptInstaller').html('<div class="installerTitle">'+installerTitle+'</div>'+
 '<div class="container1">'+
 '<div class="installerMessage">'+installerMessage+'</div>'+
 '<div class="uninstallList">'+installedList+'</div>'+
 '</div>');

 // Iterate through each line in the installed list and set the click function for their uninstall links
 $('.scriptInstaller li').each(function(){
 varpath=$(this).find('a:last').html();
 $(this).find('a:first').click(function(){

 $('body').append('<div class="overlay" style="background-color:#000;opacity:.4;position:fixed;'+
 'top:0;left:0;width:100%;height:100%;z-index:500;"></div>');

 $('body').prepend('<div class="arcProg" style="font-weight:bold;box-shadow: 7px 7px 5px #000;font-size:0.9em;line-height:1.5em;'+
 'z-index:501;opacity:1;position:fixed;width:50%;left:25%;top:30%;background:#F7F7F7;border:#222 ridge 1px;padding:20px;"></div>');

 $('.arcProg').append('<div>Uninstalling <span style="font-weight:normal;color:#003366;">'+path+'</span>...</div>');

 // Set parameters for the first uninstall ajax request that occurs when the uninstall link is clicked
 varrequest5={
 action:"query",
 titles:"User:"+mw.config.get("wgUserName")+"/common.js",
 prop:"revisions|info",
 intoken:"edit",
 rvprop:"content",
 indexpageids:1,
 dataType:"xml",
 format:"xml"
 };

 // Send the request
 $.get(mw.config.get("wgScriptPath")+"/api.php",request5,function(response5){

 //Grab common.js content and find/replace our line with nothing, thereby removing the script
 varcontent=$(response5).find('rev').text();
 varnewText=content.replace("\n"+"importScript('"+path+"'); //Linkback: [["+path+"]] Added by Script installer","");

 // Set paraemeters for the ajax post that replaces common.js with our edited version
 varrequest6={
 action:"edit",
 title:"User:"+mw.config.get("wgUserName")+"/common.js",
 text:newText,
 summary:"[[User:Equazcion/ScriptInstaller|Script Installer]]: Removed [["+path+"]]",
 token:mw.user.tokens.get("editToken")
 };

 // Send the ajax post to save the new common.js, then reload the current page
 $.post(mw.config.get("wgScriptPath")+"/api.php",request6,function(response6){
 $('.arcProg').append('<div><span style="color:#00008C">Done!</span> Reloading...</div>');
 location.reload();
 });
 });
 });
 });
 });

 // Iterate through each templated (via {{userscript}}) script on the page
 $('span.scriptInstallerLink').each(function(){

 // Get the script path, which the template places in the span's ID
 varpath=$(this).attr('id');
 path=path.replace(/.2F/g,'/').replace(/\_/g,' ');

 // If there's more than one dot left in the path, assume percent encoding was converted to dots. Leave the last dot for ".js"
 if((path.split(".").length-1)>1){
 varparts=path.split('.');
 path=parts.slice(0,-1).join('%')+'.'+parts.slice(-1);
 }

 // If this path leads to a valid en-wiki .js script in userspace or wikipedia space, add an install link
 if(((path.toLowerCase().substring(0,5)=="user:")||(path.toLowerCase().substring(0,10)=='wikipedia:'))&&(path.lastIndexOf('.js')==path.length-3)){
 //var pipe = (jsPage == true) ? '' : ' | ';
 $(this).html('<a href="#installerLink" class="installerLink">'+installerLink+'</a>')
 .before(pipe);

 // Set the click function for the install link
 $(this).find('a.installerLink').click(function(){

 $('body').append('<div class="overlay" style="background-color:#000;opacity:.4;position:fixed;'+
 'top:0;left:0;width:100%;height:100%;z-index:500;"></div>');

 $('body').prepend('<div class="arcProg" style="font-weight:bold;box-shadow: 7px 7px 5px #000;font-size:0.9em;line-height:1.5em;'+
 'z-index:501;opacity:1;position:fixed;width:50%;left:25%;top:30%;background:#F7F7F7;border:#222 ridge 1px;padding:20px;"></div>');

 $('.arcProg').append('<div>Installing <span style="font-weight:normal;color:#003366;">'+path+'</span>...</div>');

 // Set ajax parameters for the ajax post that occurs when the install link is clicked 
 varrequest1={
 action:"edit",
 title:"User:"+mw.config.get("wgUserName")+"/common.js",
 appendtext:"\nimportScript('"+decodeURIComponent(path)+"'); //Linkback: [["+decodeURIComponent(path)+"]] Added by Script installer",
 summary:"[[User:Equazcion/ScriptInstaller|Script Installer]]: Added [["+path+"]]",
 token:mw.user.tokens.get("editToken")
 };

 // Send the ajax post, which appends our new importScript line to common.js, then reload the current page
 $.post(mw.config.get("wgScriptPath")+"/api.php",request1,function(response1){
 $('.arcProg').append('<div><span style="color:#00008C">Done!</span> Reloading...</div>');
 location.reload();
 });
 });
 }else{
 // If this is not a valid path to an en-wiki .js script in user or wikipedia space, add a "must install manually" message
 $(this).html(' | <span class="noauto">'+noauto+'</span>');
 }
 });
 }
 }
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Benutzer:Der_Buckesfelder/SkriptInstaller.js&oldid=128811288"