„MediaWiki:Gadget-PB2.js“ – Versionsunterschied

Florian Adler (Diskussion | Beiträge)
K Akt. auf Anfrage: http://de.wikipedia.org/w/index.php?title=Wikipedia%3AAdministratoren%2FAnfragen&diff=60716025&oldid=60713979
STBR (Diskussion | Beiträge)
(kein Unterschied)

Version vom 17. Juni 2009, 22:46 Uhr

// script for [[:de:Wikipedia:Persönliche Bekanntschaften]] (2nd part)
// author: [[:de:Benutzer:Euku]]
// <nowiki>

// use global variables to avoid problems with ' and "
var pbRequest = {
  textToBeAdded: '',
  comment: ''
};

var bigUserList;

function loadFile(file) {
     xmlHttp = null;
     if (typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); }
     if (!xmlHttp) {
        try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); }
        catch(e) {
            try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
            catch(e) { throw 'Konnte keinen XMLHttpRequest erstellen. Breche monobook.js ab.'; }
        }
     }
     if (xmlHttp) {
        var now = new Date();
        xmlHttp.open('GET', wgServer + '/w/index.php?title='+ file +'&action=raw&ctype=text/javascript&ts=' + now.getMonth() + now.getDate() + now.getHours() + now.getMinutes(), false);
        xmlHttp.send(null);
        return (xmlHttp.responseText);
     }
     return false;
 }

// creates a new attribute
// e.g. newAttrib("href", "bla") returns
//     href="bla" as an attribute for the <a>-tag
function newAttrib(name, attrib) {
   var tmpAttrib = document.createAttribute(name);
   tmpAttrib.nodeValue = attrib;
   return tmpAttrib;
}

function showErrorMesage(htmlText) {
   var intro = '<div style="float:center; border: 1px solid black; padding: 8px; background-color:white;"><img height="17" width="20" longdesc="/wiki/Bild:Zeichen_101.svg" alt="Achtung" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Zeichen_101.svg/20px-Zeichen_101.svg.png"/>&nbsp;'
   var reload = ' <a href="javascript:startGUI()">erneut versuchen</a>';
   document.getElementById("no-gadget-active").innerHTML = intro + htmlText + reload + '</div>';
}

function AmIin() {
   // load user list
   var rawText = loadFile(persBekannt.userList);
   if (!rawText) {
   	showErrorMesage('Ein Fehler ist aufgetreten. Benutzerliste konnte nicht geladen werden. Melde es bitte <a href="/wiki/Benutzer:Euku">Benutzer:Euku</a>!');
   	return;
   }
   // remove "<" and ">" to prevent hacks, split text in to array
   var userNameArray = rawText.replace(/(?:\<|\>)/g, "FEHLER").split('\n');
   for (i in userNameArray)
       if (wgUserName == userNameArray[i])
           return true;
   return false;
}

function loadBigUserList() {
   var rawTextBig = loadFile(persBekannt.bigUserList);
   var searchRegEx = /\{\{\/DB\-Link\|(\d+)\|([^\|]+)\|([^}]*)\}\}/g;
   var searchRes;
   var userListArray = new Array();
   var i = 0;
   while (searchRes = searchRegEx.exec(rawTextBig)) {
      userListArray[i] = [searchRes[1], searchRes[2], searchRes[3]];
      i++;
   }
   return userListArray;
}

function AddMeToThisList() {
   if (AmIin()) {
       showErrorMesage('Du bist bereits in der Liste eingetragen.');
       return;
   }
   tellUserToWait();

   // concat the string to save
   pbRequest.textToBeAdded = "{{Wikipedia:Persönliche Bekanntschaften/neuer Benutzer|Name=" + wgUserName + "|Zeit=~~~~~}}";
   pbRequest.comment = "füge mich selbst hinzu";
   addTextAndSavePage();
}

// waits until parent.saveFrame.document.getElementById("editform") is loaded
function waitForSave1() {
   if (parent.saveFrame == null || parent.saveFrame.document == null || parent.saveFrame.document.getElementById('wpDiff') == null){
       var now = new Date(); // timeout after 20 sec.
       if (timeoutStart + 20000 > now.getTime()) {
          window.setTimeout("waitForSave1()", 300);
       } else {
          showErrorMesage("Es ist ein Fehler aufgetreten (Timeout nach 20 Sekunden)! Möglicherweise bringt es etwas den Vorgang zu wiederholen. Ein Grund könnte ein Bearbeitungskonflikt sein.<br />Wenn du den Fehler berichten willst, gib bitte auch folgende Informationen an:<br /><pre>Browser: " + navigator.userAgent + "<br />Skript-Version: " + persBekannt.PBJSversion + "<br />parent.saveFrame: " + parent.saveFrame + "<br />parent.saveFrame.document: " + parent.saveFrame.document + "<br />parent.saveFrame.document.getElementById('wpDiff'): " + parent.saveFrame.document.getElementById('wpDiff') +"<br />Fehler in waitForSave1</pre>");
       }
   } else {
       parent.saveFrame.document.getElementById("editform").wpSummary.value = pbRequest.comment;
       parent.saveFrame.document.getElementById("wpTextbox1").value += pbRequest.textToBeAdded;
       parent.saveFrame.document.getElementById("editform").submit(); // press 'save'
       waitForSave2();
   }
}

// waits until parent.saveFrame is saved
function waitForSave2() {
   // alernatives for other browsers
   if (parent.saveFrame.document.URL == wgServer + '/wiki/' + persBekannt.requestPage || 
       encodeURI(parent.saveFrame.document.URL) == wgServer + '/wiki/' + persBekannt.requestPage) {
       // load current page again
       window.location.href = wgServer + '/wiki/' + persBekannt.workPage + '?action=purge';
   } else {
       var now = new Date(); // timeout after 20 sec.
       if (timeoutStart + 20000 > now.getTime()) {
          window.setTimeout("waitForSave2()", 300);
       } else {
          showErrorMesage("Es ist ein Fehler aufgetreten (Timeout nach 20 Sekunden)! Möglicherweise bringt es etwas den Vorgang zu wiederholen.<br />Wenn du den Fehler berichten willst gib bitte auch folgende Informationen an:<br /><pre>Browser: " + navigator.userAgent + "<br />Skript-Version: " + persBekannt.PBJSversion + "<br />parent.saveFrame: " + parent.saveFrame + "<br />parent.saveFrame.document: " + parent.saveFrame.document + "<br />parent.saveFrame.document.getElementById('wpDiff'): " + parent.saveFrame.document.getElementById('wpDiff') +"<br />parent.saveFrame.document.URL: " + parent.saveFrame.document.URL + "<br />Fehler in waitForSave2</pre>");
       }
   }
}

// add hidden iframe, add text and save it
function addTextAndSavePage() {
   // 'id' is needed for IE7.0
   window.document.getElementById("no-gadget-active").innerHTML += '<iframe name="saveFrame" id="saveFrame" src="' + wgServer + wgScriptPath + '/index.php?title='+ persBekannt.requestPage + '&action=edit" width=0 height=0></iframe>';
   var now = new Date();
   timeoutStart = now.getTime();
   window.setTimeout("waitForSave1()", 1000);
}

function saveACKForm(eventP) {
     if ((eventP != null) && (eventP != "klick")) {
        var pressedKey = (eventP.keyCode ? eventP.keyCode : (eventP.which ? eventP.which : eventP.charCode));
        if (pressedKey != 13) // enter was pressed in input-field
           return;
     } else if (eventP != "klick") {
        return;
     }
     var confirmed = document.getElementById('confirmed').value;
     var comment = document.getElementById('comment').value;
     if (confirmed == "null") {
         showErrorMesage('Du musst jemanden auswählen, den du bestätigen willst!');
         return;
     }
     if (comment.indexOf("}}") > -1 || comment.indexOf("{{") > -1) {
         alert("Im Kommentar darf weder '{{' noch '}}' vorkommen.");
         return;
     }
     tellUserToWait();
     pbRequest.textToBeAdded = "{{Wikipedia:Persönliche Bekanntschaften/neue Bestätigung|Bestätiger=" + wgUserName + "|Bestätigter=" + confirmed + "|Kommentar=" + comment + "|Zeit=~~~~~}}";
     pbRequest.comment = "Bestätige [[User:" + confirmed + "|" + confirmed + "]]";
     addTextAndSavePage();
}

function tellUserToWait() {
   // tell the user to wait
   document.getElementById('no-gadget-active').innerHTML = 'bitte warten ... ';
   var newElement = document.createElement("img");
       newElement.setAttributeNode(newAttrib("src", "http://upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif"));
       newElement.setAttributeNode(newAttrib("width", 18));
       newElement.setAttributeNode(newAttrib("id", "busyImg"));
       newElement.setAttributeNode(newAttrib("height", 18));
   document.getElementById("no-gadget-active").appendChild(newElement);
}
// Updates the link to the userpage when 'onchage' is fired in the select-field
function updateUserLink() {
   var userDBId = -1;
   var userToConfirm = document.getElementById("confirmed").value;
   for (var i = 0; i < bigUserList.length; i++)
     if (userToConfirm == bigUserList[i][1]) {
        userDBId = bigUserList[i][0];
        break;
     }
   if (userDBId != -1)
      var dbText = '<br />→ <small><a target="_blank" href="http://purwin.de/WP_PB/t_ready.cfm?bekannte_ID=' + userDBId + '">erhaltene Bestätigungen</a></small>';
   else
      var dbText = '';

   if (document.getElementById("confirmed").value == "null")
      document.getElementById("userPageLink").innerHTML = "";
   else
      document.getElementById("userPageLink").innerHTML = '→ <small><a target="_blank" href="/wiki/Benutzer:' + document.getElementById("confirmed").value + '">Benutzerseite</a></small>' + dbText;
}

function showFormToACKsomeone() {
   // load big user list
   bigUserList = loadBigUserList();
   for (var i = 0; i < bigUserList.length; i++)
     if (wgUserName == bigUserList[i][1]) {
         if ("unbestätigt" == bigUserList[i][2]) {
       	   showErrorMesage('Du hast noch keine drei verschiedenen Bestätigungen erhalten und darfst somit noch nicht selber Bestätigungen vergeben. Warte bitte bis dich jemand bestätigt!');
           return;
         } else
           break;
     }

   // load user list
   var rawText = loadFile(persBekannt.userList);
   if (!rawText) {
   	showErrorMesage('Ein Fehler ist aufgetreten. Benutzerliste konnte nicht geladen werden. Melde es bitte <a href="/wiki/Benutzer:Euku">Benutzer:Euku</a>!');
   	return;
   }
   
   var userNameArray = rawText.split('\n');
   var usersToConfirm = '<option value="null" label="Bitte auswählen">Bitte auswählen</option><optgroup label="0-9">';
   var currentLetter = "0-9";
   for (var i = 0; i < userNameArray.length; i++) {
        var tmpUser = userNameArray[i];
        // new header?
        if ((currentLetter == "0-9") && (tmpUser.charAt(0) == "A")) {
            currentLetter = "A";
            usersToConfirm += '</optgroup><optgroup label="A">';
        }
        else if ((currentLetter != "0-9") && (tmpUser.charAt(0) > currentLetter)) {
            currentLetter = tmpUser.charAt(0);
            usersToConfirm += '</optgroup><optgroup label="' + currentLetter + '">';
        }
        if (tmpUser != wgUserName)
           usersToConfirm += '<option value="' + tmpUser + '" label="' + tmpUser + '">' + tmpUser + '</option>';
   }
   usersToConfirm += '</optgroup>';

   var userDBId = -1;
   for (var i = 0; i < bigUserList.length; i++)
     if (wgUserName == bigUserList[i][1]) {
        userDBId = bigUserList[i][0];
        break;
     }

   var formHTMLcode = '<table width="500" align="center" class="wikitable" id="ACKtable">'+
   '<tbody><tr><td>Dein Benutzername</td><td width="150" id="myUserName">' + wgUserName+
   '<br />→ <small><a target="_blank" href="http://purwin.de/WP_PB/t_ready.cfm?bekannte_ID=' + userDBId + '">deine erhaltenen Bestätigungen</a></small>'+
   '<br />→ <small><a target="_blank" href="http://purwin.de/WP_PB/t_backvotes.cfm?best%E4tigende_ID=' + userDBId + '">deine vergebenen Bestätigungen</a></small>'+
   '</td></tr>'+
   '<tr><td>Wen möchtest du bestätigen?</td><td>'+
   '    <select id="confirmed" name="confirmed" onchange="javascript:updateUserLink();">Benutzerseite anzeigen</small>\"" style="width: 100%;">' + usersToConfirm +
   '    </select><br/><div id="userPageLink"></div>' +
   '</td></tr>'+
   '<tr><td>Kommentar zur Bestätigung<br/><small>vermeide Details, die die Identität offenlegen könnten</small></td><td>'+
   '<input type="text" id="comment" title="Hier auf Wunsch Kommentar eingeben" value="" maxlength="50" onkeypress="javascript:saveACKForm(event)" />'+
   '</td></tr>'+
   '<tr><td align="right" colspan="2"><b><a href="javascript:saveACKForm(\'klick\');">Speichern</a></b>'+
   '</tbody></table>';
   document.getElementById('no-gadget-active').innerHTML = formHTMLcode; // write form
   document.getElementById("confirmed").focus() // focus the select field
}

function startGUI() {
   // modify GUI
   tellUserToWait();
   try {
      document.getElementById('ca-edit').innerHTML = '<a title="Servercache umgehen (purge)" href="/wiki/' + persBekannt.workPage + '?action=purge">Seite neuladen und Servercache umgehen</a>';
   } catch(e) {}
   try {
      document.getElementById('ca-unwatch').innerHTML = '<a title="diese Seite nicht beobachten" href="/wiki/' + persBekannt.workPage + '?action=unwatch">diese Seite nicht beobachten</a>';
   } catch(e) {}
   try {
      document.getElementById('ca-watch').innerHTML = '<a title="diese Seite beobachten" href="/wiki/' + persBekannt.workPage + '?action=watch">diese Seite beobachten</a>';
   } catch(e) {}
   try {
      document.getElementById('ca-delete').innerHTML = '';
   } catch(e) {}
   try {
      document.getElementById('ca-move').innerHTML = '<a target="_blank" title="Liste mit neuen Teilnehmern beobachten" href="/wiki/' + persBekannt.newUserList + '?action=watch">Liste mit neuen Teilnehmern beobachten</a>';
   } catch(e) {}
   try {
      document.getElementById('ca-unprotect').innerHTML = '';
   } catch(e) {}

   // check if user is autoconfirmed
   var AmIAutoconfirmed = false;
   for (var i in wgUserGroups) {
       if (wgUserGroups[i] == "autoconfirmed") {
           AmIAutoconfirmed = true;
           break;
       }
   }
   if (!AmIAutoconfirmed) {
       showErrorMesage('Du bist leider noch zu kurz dabei um diese Seiten bearbeiten zu können. Du musst zur Benutzergruppe "autoconfirmed" gehören. Im Regelfall gehörst du automatisch <b>vier Tage</b> nach Anmeldung dazu und kannst diese und viele andere Seite bearbeiten.<br />Mehr Informationen: <a href="/wiki/Wikipedia:Benutzer#Angemeldeter_Benutzer">Hier</a> (bitte beachte, dass dort mit <i>bestätigter Benutzer</i> nicht das gleiche meint ist wie auf <a href="/wiki/Wikipedia:Persönliche_Bekanntschaften">Wikipedia:Persönliche Bekanntschaften</a>)<br />');
       return;
   }
   // check if this is the latest version
   var currentVersion = loadFile(persBekannt.versionCheckPage);
   if (currentVersion == "stop") {
       showErrorMesage('<br /><br /><div style="float:center; border: 1px solid black; padding: 8px; background-color:white;">Das <a href="/wiki/Wikipedia:Gadgets">Gadget</a>, was du gerade benutzt, wurde temporär deaktiviert. Wahrscheinlich hat dies technische Ursachen. Du kannst dich über den Grund auf der <a href="/wiki/Wikipedia_Diskussion:Persönliche_Bekanntschaften">Diskussionsseite des Projekts</a> informieren. Versuche es einige Zeit später nochmal!');
       return;
   }   
   if (currentVersion > persBekannt.PBJSversion) {
       showErrorMesage('<br /><br /><div style="float:center; border: 1px solid black; padding: 8px; background-color:white;">Das <a href="/wiki/Wikipedia:Gadgets">Gadget</a>, was du gerade benutzt, wurde vor kurzer Zeit <a href="/wiki/Wikipedia:Persönliche_Bekanntschaften/Versionslog">aktualisiert</a>. In deinem <a href="/wiki/Browsercache">Browsercache</a> befindet sich allerdings noch die ältere Version. Dies könnte zu Problemen führen. Es wird empfohlen, dass du jetzt die Seite neu lädst und deinen Browsercache umgehst:<br /> <b>Mozilla/Firefox/Safari:</b> Strg + Shift + R (Mactaste + R bei Macintosh) drücken; <b>Konqueror:</b> F5 drücken; <b>Opera:</b> Cache unter Extras → Einstellungen leeren; <b>Internet Explorer:</b> Strg + F5');
       return;
   } else
       var hint = '';

   if (!AmIin()) {
      // replace the warning und remove the edit button
      document.getElementById('no-gadget-active').innerHTML = '<div align="center">Du bist <b>noch nicht</b> als Teilnehmer bei <i>WP:PB</i> eingetragen und damit nicht bestätigt. Damit darfst noch nicht selber bestätigen und kannst nicht bestätigt werden. Benutze den unteren Link, um dich einzutragen und warte bis du 3 Bestätigungen bekommst.<br><b><a href="javascript:AddMeToThisList();">ich möchte in die Liste der Teilnehmer aufgenommen werden</a>' + hint;
    } else {
      // we can go on
      showFormToACKsomeone();
    }
}
// </nowiki>