Benutzer:ThePacker/MonobookTuning

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Monobook

Diese Seite dient insbesondere der Dokumentation meiner monobook Tunings. Diese Seite ist insbesondere für alle diejenigen von Interesse, die gern Routine-Aufgaben wesentlich komfortabler lösen wollen. Diese Helferlein sind sowohl für Administratoren als auch für alle anderen engagierten Benutzer. Um diese Tools einzusetzen, ist es notwendig, dass die Benutzer sich ihre eigenen Modifikationen speichern.


Der Benutzer hat die Möglichkeit, sich eigene Skripte oder Stylesheets zu definieren, indem er in seinem Benutzerbereich zwei Seiten anlegt eine ist Benutzer:Benutzername/monobook.js für zusätzliche Javaskripte, und Benutzer:Benutzername/monobook.css für zusätzliche Stylesheets.

! Achtung: Kleinschreibung beachten!

Stylesheets sind kurz formuliert Anweisungen, wie etwas darzustellen ist. Die Javaskripte dienen der Funktionalität.

Diese Modifikationen sind an das Wikibooks-Projekt angepasst. Modifikationen aus anderen Projekten funktionieren hier auf de.wikibooks nicht immer.

CSS

Links (nicht) Unterstreichen

Dies ist eine Angabe die in das CSS (Stylesheet) gehört.

 /** Links nicht unterstreichen */
 a { text-decoration:none; }

Links zu unterstreichen ist ebenso einfach

 /** Links unterstreichen */
 a { text-decoration:underline; }

Wikibooks Logo verstecken

CSS - Diese Modifikation ist interessant, wenn sich das Suchfenster ganz oben befindet.

 /** Hide Wikibooks-Logo */
 #column-one { padding-top: 1.8em; }
 #p-logo     { display: none; }

URLs mit bestimmten Inhalt hervorheben

CSS - Diese Modifikation sorgt dafür, dass bestimmte Links mit dem Wort 'monobook.' gelb unterlegt werden.

 /** Fremde monobook-skins sind interessant. -> Hervorheben */
 a[href*="monobook."] { background:yellow; }

Dieser Mechanismus kann verwendet werden, um Buchtitel zu unterlegen, man sollte diese Funktion sehr sparsam einsetzen.

 /** Bestimmte Bücher sind interessant. -> Hervorheben */
 a[href*="BUCHTITEL"] { background:yellow; }

Copyright-Warnung verstecken

CSS - Als Langzeitbenutzer kennt man die Lizenzbedingungen genau und man möchte sie vielleicht ausblenden.

 /** Hide Copyrightwarning - mittlerweile hab ich es verstanden ;-) */
 #editpage-copywarn  { display: none; }

Zu Lange Seite Warnung verstecken

CSS - Wenn man damit keine Probleme hatte, dann kann man das getrost ignorieren.

 /** Hide long Page Warning */
 #editpage-longpagewarning   { display: none; }

Fremde Benutzerseiten - Bearbeitenlink modifizieren

CSS - Manchmal passiert es, dass man statt der Diskussionsseite die Benutzerseite erwischt, damit das nicht passiert, kann man sie wie in diesem Beispiel gelb unterlegen. Statt 'ThePacker' ist dann der eigene Benutzername einzutragen, damit die Eigene Seite nicht gelb unterlegt ist. Es gibt Varianten spezielle Bilder zu verwenden.

 /** Fremde Benutzerseiten Bearbeiten-Link hervorheben um nicht zu bearbeiten */
 li#ca-edit a[href*="title=Benutzer:"] { background: yellow; }
 li#ca-edit a[href*="title=Benutzer:ThePacker/"] { background: none; } 
 li#ca-edit a[href*="title=Benutzer:ThePacker&"] { background: none; }

Ein- und Ausklapplink verschieben / Überschrift zentrieren

CSS - Es besteht bei einigen Benutzern der Wunsch nach Symetrie, das kann für die meisten Browser (Außer IE7) dadurch erreicht werden, indem der Ein- und Ausklapplink nach links verschoben wird. Er bekommt eine definierte Breite von 0 Pixel und darf nach rechts überstehen. Damit wird der Titel in der Navigationsleiste zentriert.

 .NavToggle {
 float:left;  	
 margin-left:3px; 	
 width:0px; 	 
 overflow:visible; 	 
 background-color: #efefef;
 !important;
 }

JS

Suchfunktion an den Anfang

Dies ist eine Modifikation die als Javaskript implementiert ist.

 /** START: searchToTop - Puts Search to top */
 function searchToTop() {
    function $(id) { return document.getElementById(id); }
    var search = $('p-search');
    search.parentNode.removeChild(search);
    $('column-one').insertBefore(search, $('p-navigation'));
 }
 aOnloadFunctions[aOnloadFunctions.length] = searchToTop;
 /** END: seachToTop */

Suchfunktion ans Ende

Dies ist eine Modifikation die als Javaskript implementiert ist.

 /** START: searchToBottom - Puts Search to Bottom */
 function searchToBottom() {
    function $(id) { return document.getElementById(id); }
    var search = $('p-search');
    search.parentNode.removeChild(search);
    $('column-one').appendChild(search, $('p-tb'));    
 }
 aOnloadFunctions[aOnloadFunctions.length] = searchToBottom;
 /** END: seacchToBottom*/

Godmode-Light for de.wikibooks

Damit dieses Modul korrekt funktioniert, habe ich es an die deutschen Wikibooks angepasst. God-Mode Light fügt einem aktuellen Link auf der Contributionsseite einen (Zurücksetzen)-Link hinzu, der über asynchrone HTTP-Requests automatisch die Letzte version desjenigern verstellt, der den Versionstand vor diesem User bearbeitet hat. Administratoren haben dort bereits eine Rollback Möglichkeit.

Außerdem wird bei einer Differenz-Ansicht bei der letzten (aktuellen) Differenz ein Zürücksetzen-Link integriert, mit dem die Letzen Änderungen eines Benutzers revertiert werden können. Benutzt man den CDVF So landet man automatisch auf dieser Ansicht, wenn man den Artikel anklickt, dort kann diese Änderung dann ohne umstände durch einen Klick revertiert werden.

Das angepassste Javascript folgt.

 /** START: GodMode-Light */
// -----------------------------------------------------------------------------
// God-like Monobook skin
// (c) 2005 Sam Hocevar <sam@zoy.org>
// $Id: godmode-light.js 1029 2006-01-09 11:05:19Z sam $
// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
// Language support, taken from phase3/languages/*
// -----------------------------------------------------------------------------
var rollbacklink = 'rollback';
var cantrollback = 'Cannot revert edit; last contributor is only author of this page.';
var alreadyrolled = 'Cannot rollback last edit of [[$1]] by [[User:$2|$2]] ([[User talk:$2|Talk]]); someone else has edited or rolled back the page already. Last edit was by [[User:$3|$3]] ([[User talk:$3|Talk]]). ';
var revertpage = 'Reverted edits by [[Special:Contributions/$2|$2]] to last version by $1';
switch (document.getElementsByTagName('html')[0].lang) {
  case 'de':
    rollbacklink = 'Zurücksetzen';
    cantrollback = 'Die Änderung kann nicht zurückgenommen werden; der letzte Autor ist der einzige.';
    alreadyrolled = 'Die Zurücknahme des Artikels [[$1]] von [[Benutzer:$2|$2]] ([[Benutzer Diskussion:$2|Diskussion]]) ist nicht möglich, da eine andere Änderung oder RÃücknahme erfolgt ist.  Die letzte Änderung ist von [[Benutzer:$3|$3]] ([[Benutzer Diskussion:$3|Diskussion]])';
    revertpage = 'Änderungen von [[Benutzer:$2]] rückgängig gemacht und letzte Version von [[Benutzer:$1]] wiederhergestellt';
    break;
}

// -----------------------------------------------------------------------------
// XMLHttpRequest support
// -----------------------------------------------------------------------------
if (document.implementation.createDocument) {
  var gml_xmlparser = new DOMParser();
}

function gml_XMLParse(string) {
  if (document.implementation.createDocument) {
    return gml_xmlparser.parseFromString(string, "text/xml");
  } else if (window.ActiveXObject) {
    var gml_xmldoc = new ActiveXObject("Microsoft.XMLDOM");
    gml_xmldoc.async = "false";
    ret = gml_xmldoc.loadXML(string);      
    if (!ret)
      return null;
    return gml_xmldoc.documentElement;
  }
  return null;
}

var gml_xmlhttp;

function HTTPClient() {
  var gml_http;
  if(window.XMLHttpRequest) {
    gml_http = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      gml_http = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        gml_http = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        gml_http = false;
      }
    }
  }
  return gml_http;
}

// -----------------------------------------------------------------------------
// MD5 hash calculator
// -----------------------------------------------------------------------------
// Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
// Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
// Distributed under the BSD License
// See http://pajhome.org.uk/crypt/md5 for more info.
// -----------------------------------------------------------------------------
var hexcase = 0;
var b64pad  = "";
var chrsz   = 8;

function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}

function core_md5(x, len)
{
  x[len >> 5] |= 0x80 << ((len) % 32);
  x[(((len + 64) >>> 9) << 4) + 14] = len;

  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;

    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819); b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426); c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416); d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); c = md5_ff(c, d, a, b, x[i+10], 17, -42063); b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682); d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);

    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); c = md5_gg(c, d, a, b, x[i+11], 14,  643717713); b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083); c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438); d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501); a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473); b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);

    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562); b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353); c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174); d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189); a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); c = md5_hh(c, d, a, b, x[i+15], 16,  530742520); b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);

    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415); c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571); d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359); d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649); a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259); b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
  }
  return Array(a, b, c, d);

}

function md5_cmn(q, a, b, x, s, t) { return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); }
function md5_ff(a, b, c, d, x, s, t) { return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); }
function md5_gg(a, b, c, d, x, s, t) { return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); }
function md5_hh(a, b, c, d, x, s, t) { return md5_cmn(b ^ c ^ d, a, b, x, s, t); }
function md5_ii(a, b, c, d, x, s, t) { return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); }

function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

function bit_rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

function str2binl(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
  return bin;
}

function binl2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
  }
  return str;
}

// -----------------------------------------------------------------------------
// Our nice Revert functions
// -----------------------------------------------------------------------------
var gml_vandal, gml_editor, gml_url;

function PerformRevert() {
  var l, token = '', revert = false;
  // Look for '&fakeaction=rollback' in URL
  gml_url = location.pathname;
  l = location.search.substring(1).split('&');
  for (i = 0; i < l.length; i++) {
    var n = l[i].indexOf('=');
    var name = l[i].substring(0, n);
    if (name == 'fakeaction') {
      if (l[i].substring(n + 1) == 'rollback')
        revert = true;
    } else if (name == 'vandal') {
      gml_vandal = unescape(l[i].substring(n + 1));
    } else if (name == 'token') {
      token = unescape(l[i].substring(n + 1));
    } else if (name == 'title') {
      gml_url += '?' + l[i];
    }
  }
  if (!revert)
    return;
  document.getElementById('bodyContent').innerHTML = 'Please wait, reverting edits by ' + gml_vandal + '...';
  // Avoid XSS kiddies by using a special token
  if (token == '' || token != hex_md5(gml_url + gml_vandal + document.cookie)) {
    document.getElementById('bodyContent').innerHTML += '<br />Bad authentication token!';
    return;
  }

  gml_xmlhttp = HTTPClient();
  if (!gml_xmlhttp)
    return;
  history_url = gml_url + '&action=history&limit=50';
  document.getElementById('bodyContent').innerHTML += '<br />Getting article history (' + history_url + ')...';
  gml_xmlhttp.open("GET", history_url, true);
  gml_xmlhttp.onreadystatechange = RevertStepTwo;
  gml_xmlhttp.send(null);
}

function RevertStepTwo() {
  if (gml_xmlhttp.readyState != 4)
    return;
  var l;
  var oldid;
  // Get the vandal and new editor names
  gml_vandal = gml_vandal.replace(/_/g, ' ');
  gml_editor = '';
  // Hack for a MediaWiki bug
  xml = gml_xmlhttp.responseText.replace(/<body.*"ns-4 ltr">/, '<body class="ns-4 ltr">');
  doc = gml_XMLParse(xml);
  if (!doc || !doc.getElementById('pagehistory')) {
    document.getElementById('bodyContent').innerHTML += '<br />Failed to parse XML data returned by the server.';
    document.getElementById('bodyContent').innerHTML += '<br /><b>Hint: try to disable both "Enable section editing by right-clicking on section titles (JavaScript)" and "Edit pages on double click (JavaScript)" in your editing preferences until a proper fix is found</b>.';
    document.getElementById('bodyContent').innerHTML += '<br />Dump of the unparseable page : <br />' + xml.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
    return;
  }
  l = doc.getElementById('pagehistory').getElementsByTagName('li');
  //l = doc.selectSingleNode('//*[@id="pagehistory"]').getElementsByTagName('li');
  for (i = 0; i < l.length; i++) {
    var name = l[i].getElementsByTagName('span')[0].getElementsByTagName('a')[0].innerHTML.replace(/_/g, ' ');
    if (i == 0 && name != gml_vandal) {
      document.getElementById('bodyContent').innerHTML += '<br />Error: Last editor is ' + name + ', not ' + gml_vandal + '!';
      return;
    } else if (i > 0 && name != gml_vandal) {
      oldid = l[i].getElementsByTagName('input')[0].value;
      gml_editor = name;
      break;
    }
  }
  if (gml_editor == '') {
    document.getElementById('bodyContent').innerHTML += '<br />Error: ' + gml_vandal + ' is the only editor!';
    return;
  }

  gml_xmlhttp = HTTPClient();
  if (!gml_xmlhttp)
    return;

  gml_prevandalurl = gml_url+'&action=edit&oldid='+oldid;

  document.getElementById('bodyContent').innerHTML += '<br />Getting article edit form (GET ' + gml_prevandalurl + ')...';
  
  gml_xmlhttp.open("GET", gml_prevandalurl, true);
  gml_xmlhttp.onreadystatechange = RevertStepThree;
  gml_xmlhttp.send(null);
}

function RevertStepThree() {
  if (gml_xmlhttp.readyState != 4)
    return
  var form, newform, l;
  // Insert the downloaded form in our current page, using
  // only hidden form inputs.

  document.getElementById('bodyContent').innerHTML += '<br />Retrieved Data ...';

  xml = gml_xmlhttp.responseText.replace(/<body.*"ns-4 ltr">/, '<body class="ns-4 ltr">');
  doc = gml_XMLParse(xml);

  if (!doc) {
    document.getElementById('bodyContent').innerHTML += '<br />Failed to parse XML data returned by the server.';
    document.getElementById('bodyContent').innerHTML += '<br /></b>.';
    document.getElementById('bodyContent').innerHTML += '<br />Dump of the unparseable page : <br />' + gml_xmlhttp.responseText.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
    return;
  }
  form = doc.getElementById('editform');
  if(!form)
  {
    document.getElementById('bodyContent').innerHTML += '<br />Couldnt get editform ...';
    return;
  }
  newform = document.createElement('form');
  if(!newform)
  {
    document.getElementById('bodyContent').innerHTML += '<br />Couldnt create newform ...';
    return;
  }
  l = form.getElementsByTagName('textarea');
  if(!l)
  {
    document.getElementById('bodyContent').innerHTML += '<br />l is null...';
    return;
  }
  for (i = l.length; i--; ) {
    var t = document.createElement('input');
    t.type = 'hidden';
    t.name = l[i].name;
    t.value = l[i].value;
    newform.appendChild(t);
  }
  l = form.getElementsByTagName('input');
  for (i = l.length; i--; ) {
    if (l[i].name == 'wpSummary') {
      l[i].value = revertpage.replace(/\$1/g, gml_editor).replace(/\$2/g, gml_vandal);
    } else if (l[i].name == 'wpMinoredit') {
      l[i].value = '1';
    } else if (l[i].name == 'wpWatchthis') {
      if (!l[i].checked)
        continue; // Don’t touch the "watch" status
      l[i].value = "on";
    } else if (l[i].name == 'wpPreview') {
      continue;
    } else if (l[i].name == 'wpDiff') {
      continue;
    }
    l[i].type = 'hidden';
    newform.appendChild(l[i]);
  }
  newform.name = form.name;
  newform.method = form.method;
  newform.id = form.id;
  newform.action = form.action;
  document.getElementById('bodyContent').innerHTML += '<br />Submitting form...';
  document.getElementById('bodyContent').appendChild(newform);
  // Submit the form
  newform.submit();
}

// -----------------------------------------------------------------------------
// Add revert buttons to the page
// -----------------------------------------------------------------------------
function AddRevertButtons() {
  var l, article = '', vandal;
  // Add 'revert' links to a diff page
  l = document.getElementById('bodyContent').getElementsByTagName('td');
  for (i = 0; i < l.length; i++) {
    if (l[i].className == 'diff-otitle') {
      article = l[i].getElementsByTagName('a')[0].href.split('&')[0].replace(/[^\/]*\/\/[^\/]*/, '');
    } 
    else if (l[i].className == 'diff-ntitle') 
    {
      var toplink = l[i].getElementsByTagName('a')[0].href;
      if(l[i].getElementsByTagName('a').length==4)
      {
        vandal = l[i].getElementsByTagName('a')[1].title.split(':')[1];
      }
      else
      {
        vandal = l[i].getElementsByTagName('a')[1].innerHTML;
      }
      var t = l[i].innerHTML
      n = t.indexOf('</a>) <br') + t.indexOf('</A>) <BR') + 1; // XXX: WOW HACK!!!!
      if (n >= 0 && article != '' && toplink.indexOf('oldid=') == -1) {
        l[i].innerHTML = t.substring(0, n + 5) + '    <strong>[<a href="' + article + '&fakeaction=rollback&vandal=' + vandal + '&token=' + hex_md5(article + vandal + document.cookie) + '">' + rollbacklink + '</a>]</strong> ' + t.substring(n + 5, t.length);
      }
    }
  }

  // Add 'revert' links to a contributions page
  if (location.href.indexOf(':Contributions') != -1) {
    document.getElementById('bodyContent').innerHTML.replace(/\<strong\>\(aktuell\)/gi,"<strong> (aktuell)");
    var c = document.getElementById('contentSub');
    var a = c.getElementsByTagName('a');
    if (a.length == 3) {
      // Es ist eine IP
      vandal=a[0].title.replace(/.*:/,'');
  //    vandal = a[0].innerHTML; // BUGGY
  //    vandal = c.innerHTML.replace(/ \(.*/,'').replace(/.* /,'');
    } else if(a.length == 4) {
      // es ist ein User
      vandal = a[0].innerHTML;
  //    vandal = c.innerHTML.replace(/ \(.*/, '').replace(/.* /, ''); // BUGGY
  //    vandal = c.innerHTML.replace(/ \(.*/, '').replace(/.*">/,'').replace(/<.*/,'');
    }
    else
    {
       vandal = 'This count of link is not supported.';
    }
  //  document.getElementById('bodyContent').innerHTML += '<br />Auf einer Contributionsseite...'+vandal+' is Vandal';

    l = document.getElementById('bodyContent').getElementsByTagName('li');
    for (i = 0; i < l.length; i++) {
      var t = l[i].innerHTML;
      // If we are already a sysop on this wiki, abort
      if (t.indexOf('>' + rollbacklink + '</a>]') != -1)
          break;
      //if (t.indexOf('&diff=0') != -1) {
     if (t.indexOf('<strong>(') != -1) {
        article = l[i].getElementsByTagName('a')[0].href.split('&')[0].replace(/[^\/]*\/\/[^\/]*/, '');
        l[i].innerHTML += ' [<a href="' + article + '&fakeaction=rollback&vandal=' + vandal + '&token=' + hex_md5(article + vandal + document.cookie) + '">' + rollbacklink + '</a>]';
      }
    }
  }
}

// -----------------------------------------------------------------------------
// Modify the page once it is loaded
// -----------------------------------------------------------------------------
if (window.addEventListener) {
  window.addEventListener("load", PerformRevert, false);
  window.addEventListener("load", AddRevertButtons, false);
} else if (window.attachEvent) {
  window.attachEvent("onload", PerformRevert);
  window.attachEvent("onload", AddRevertButtons);
}



 /** END: GodModeLight */