Zum Inhalt springen

Benutzer:Astrapi/monobook.js

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 7. Februar 2021 um 00:06 Uhr durch Ladsgroup (Diskussion | Beiträge) (Maintenance: Replacing addOnloadHook with native jQuery (mw:ResourceLoader/Migration_guide_(users)#addOnloadHook - phab:T130879)).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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
// install [[User:Cacycle/wikEd]] in-browser text editor
document.write('<script type="text/javascript" src="'
+ 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js'
+ '&action=raw&ctype=text/javascript&dontcountme=s"></script>');

/**************************************/
/* Hilfsfunktion: Dekodieren von UTF8 */
/**************************************/

function decode_utf8(text)
{
  decoded = '';
  var tail = 0;
  var codepoint;
  for (var i = 0; i < text.length; ++i)
  {
    var charcode = text.charCodeAt(i);
    if (tail != 0)
    {
      codepoint = (codepoint << 6) + (charcode & 0x3f);
      --tail;
      if (tail == 0)
        decoded += String.fromCharCode(codepoint);
    }
    else
    {
      if (charcode < 0x80)
        decoded += String.fromCharCode(charcode);
      else
      {
        var tail = 1; // number of following 10xxxxxx values
        while ((charcode & (0x40 >> tail)) != 0)
          ++tail;
        codepoint = charcode & ((0x80 >> tail) - 1)
      }
    }
  }
  return decoded
}

/************************************/
/* Hilfsfunktion: Kodieren von UTF8 */
/************************************/

function encode_utf8(text)
{
  var encoded = '';
  for (var i = 0; i < text.length; ++i)
  {
    var codepoint = text.charCodeAt(i)
    if (codepoint < 0x80)
      encoded += String.fromCharCode(codepoint)
    else
    {
      var encoded_char = ''
      var lastone = 0x80;
      while (codepoint >= lastone/2) // lastone=00100000 -> 1110xxxx
      {
        var charcode = (codepoint & 0x3f) + 0x80; // 10xxxxxx
        encoded_char = String.fromCharCode(charcode) + encoded_char;
        codepoint >>= 6;
        lastone >>= 1;
      }
      var charcode = 0x100 - lastone + codepoint
      encoded_char = String.fromCharCode(charcode) + encoded_char;
      encoded += encoded_char;
    }
  }
  return encoded;
}

/*************************************************/
/* Hilfsfunktion: XMLHTTPRequest-Objekt erzeugen */
/*************************************************/

function createXMLHttpRequest()
{
  if (typeof XMLHttpRequest != undefined)
    return new XMLHttpRequest();
  if (typeof ActiveXObject != undefined)
  {
    var names = new Array("MSXML2", "Microsoft");
    var name;
    while (name = names.shift())
    {
      try { return ActiveXObject(name + '.XMLHTTP'); } catch(e) {}
    }
  }
  return false;
}

/************************************************/
/* Javascript von einer anderen Seite einbinden */
/************************************************/

// <nowiki>

// Links werden in Wikisyntax inklusive eckiger Klammern übergeben,
// dadurch wird bei die Benutzung von der Wikipedia-Software erkannt
// und auf Spezial:Whatlinkshere aufgelistet.
// Hierbei müssen Interwiki-Links mit : eingeleitet werden (also z.B.
// [[:en:User:Foo/bar.js]], nicht [[en:User:Foo/bar.js]]. Achtung:
// Dieser Fehler wird nicht erkannt!
//
// Beispiel für die Benutzung:
// includeJS('[[Benutzer:Ce2/gibtsnet.js]]')

function includeJS(pagelink)
{
  // decode the link
  var decoded = /^\[\[(:(\w*):)?([^\]]*)\]\]$/.exec(pagelink)
  if (!decoded || !decoded[3])
  {
    alert(pagelink + ' is not a valid link!')
    return
  }

  var lang = decoded[2]
  if (!lang) lang="de"

  var pagename = decoded[3]

  // encode the pagename
  pagename = escape(encode_utf8(pagename.replace(/ /g,'_')))

    // load the code
  var url = 'http://' + lang + '.wikipedia.org/w/index.php?title='
          + pagename + '&action=raw&ctype=text/javascript&dontcountme=s';

  document.write('<script type="text/javascript" src="'+url+'"></script>')
}
// </nowiki>

/*********************************/
/* Füge Projektportal-Link hinzu */
/*********************************/

function addPortal()
{
  quickbar = document.getElementById('quickbar');
  if (quickbar)
  {
    neues = document.createElement('a')
    neues.href = '/wiki/Wikipedia:Portal'
    neues.appendChild(document.createTextNode('Projektportal'))
    quickbar.appendChild(neues)
    quickbar.appendChild(document.createElement('br'))
  }
}

$(addPortal);

/***********************************************/
/* Automatische Signatur auf Diskussionsseiten */
/***********************************************/

includeJS('[[Benutzer:Olliminatore/signing.js]]');

/****************************************************************************/
/* APPERs Rechtschreibprüfung mit explizitem Link zum Ausführen im Quickbar */
/****************************************************************************/

var DontAutorunRP = true;
includeJS('[[Benutzer:APPER/RP/js]]');

function addSpellcheck()
{
  quickbar = document.getElementById('quickbar');
  if (quickbar)
  {
    neues = document.createElement('a')
    neues.href = 'javascript:spellcheck();'
    neues.id = 'spellcheckbutton'
    neues.appendChild(document.createTextNode('Rechtschreibprüfung'))
    quickbar.appendChild(neues)
    quickbar.appendChild(document.createElement('br'))
  }
}

// Nur dort einen Link anbieten, wo die Funktion auch was tut
if (wgCanonicalNamespace == "")
  addOnloadHook(addSpellcheck);

/*******************************/
/* Einige link-Tags hinzufügen */
/*******************************/

includeJS('[[Benutzer:Ce2/JavaScript/linktags.js]]');

/*********************************************************/
/* Einbinden von popus.js                                */
/*********************************************************/

includeJS('[[:en:User:Lupin/popups.js]]')

/*************************************************************/
/* Einklappbare Abschnitte, übernommen von Benutzer:D,       */
/* leicht an eigene Bedürfnisse (und anderen Skin) angepasst */
/*************************************************************/

/** provides an icon for each heading to fold or unfold it */
function foldHeaders() {

/* foldHeaders stört das Hauptseitenlayout, daher nicht für die Hauptseite verwenden */
    if (document.getElementById('hauptseite'))
      return;
    //------------------------------------------------------------------------------
    //## folder

    /** attaches folders to all header tags of a given depth */
    function attachRecursive(element, depth) {
        var tagName = "H" + depth;  
        var headers = element.getElementsByTagName(tagName);
        for (var i=0; i<headers.length; i++) {
            var header  = headers[i];
            // skip some headers we do not want to modify
            if (header.id            == "siteSub")  continue;
            if (header.parentNode.id == "toctitle") continue;
            var end     = i < headers.length-1 
                        ? findEnd(headers[i+1]) 
                        : element.lastChild;
            if (!end)   continue;
            var folder  = attachSingle(header, end);
            if (depth < 6)  attachRecursive(folder, depth+1);
        }
    }
    
    /** finds a (inclusive) endpoint for folder content */
    function findEnd(next) {
        var maybe   = next;
        
        for (;;) {
            maybe   = maybe.previousSibling;
            if (!maybe)                     return null;
            if (maybe.nodeName != "#text")  break;
        }
        if (maybe.nodeName != "P") {
            return next.previousSibling;
        }
        
        for (;;) {
            maybe   = maybe.previousSibling;
            if (!maybe)                     return null;
            if (maybe.nodeName != "#text")  break;
        }
        if (maybe.nodeName != "DIV" || maybe.className != "editsection") {
            return next.previousSibling;
        }
        
        return maybe.previousSibling;
    }
    
    /** attaches a folder span to a header, end is inclusive. returns the folder span. */
    function attachSingle(header, end) {
        // add a button to the header toggling the display of the content span
        var button  = document.createElement("span");
        button.className    = "foldButton";
        header.insertBefore(button, header.firstChild);
        
        // move content between start and end into a span after the header  
        var range   = document.createRange();
        range.setStartAfter(header);
        range.setEndAfter(end);
        var contents    = range.extractContents();
        var folder      = document.createElement("span");
        folder.appendChild(contents);
        header.parentNode.insertBefore(folder, header.nextSibling);
        
        // add state and methods to the folder
        folder.button   = button;
        folder.header   = header;
        folder.open     = true;
        folder.update   = folderUpdate;
        
        // make the button react on clicks
        button.folder   = folder;
        button.onclick  = buttonOnClick;
        
        folder.update();
        return folder;
    }

    /** update a complete folder according ot its state */
    function folderUpdate() {
        if (this.open) {
            this.button.innerHTML           = "&#x25BC;";
            this.header.style.marginBottom  = null;
            this.style.display              = null;
        }
        else {
            this.button.innerHTML           = "&#x25BA;";
            this.header.style.marginBottom  = "0";
            this.style.display              = "none";
        }
    }
    
    /** onclick-handler for the button */
    function buttonOnClick() {
        this.folder.open    = !this.folder.open;
        this.folder.update();
    }
    //------------------------------------------------------------------------------
    //## installation

    var bodyContent = document.getElementById('article');
    
    // prevent double installation
    if (bodyContent.foldersInstalled)   return;
    bodyContent.foldersInstalled    = true;

    // install a folder on every header
    attachRecursive(bodyContent, 2);
}

$(foldHeaders);

/************************************************/
/* editcounter-Link in den Quickbar verschieben */
/************************************************/

function MoveEditCounterLink()
{
  var counter = document.getElementById('editcount');
  var quickbar = document.getElementById('quickbar');
  if (counter && quickbar)
  {
    counter.parentNode.removeChild(counter);
    quickbar.appendChild(counter);
    quickbar.appendChild(document.createElement('br'))
  }
}

$(MoveEditCounterLink);

/********************************/
/* Wahre Benutzernamen anzeigen */
/********************************/

includeJS('[[Benutzer:Ce2/JavaScript/showusers.js]]')

/***********************/
/* gallery verbreitern */
/***********************/

var gallery_len = 6;

includeJS('[[Benutzer:Olliminatore/newgallery.js]]');

/***************************************/
/* Artikeltitel in Permalink umwandeln */
/***************************************/

function permalinktitle()
{
  // get XMLHTTPRequest object
  var request = createXMLHttpRequest();
  if (!request)
    return; // give up

  // query latest revision
  var querylink = wgServer
                  + wgScriptPath
                  + '/query.php?format=xml&what=revisions&pageids='
                  + wgArticleId
                  + '&rvlimit=1';
  request.open('GET', querylink, true);

  request.onreadystatechange=function()
  {
    if (request.readyState != 4) // not yet ready?
      return;
    if (request.status != 200)    // html request failed?
      return;

    // revision id id des aktuellen Artikels herausfinden
    var descr = request.responseXML;
    if (typeof descr == 'undefined') // but shouldn't be at this point
      return;

    var revid = descr.getElementsByTagName('revid')[0];
    var target = wgServer
                 + wgScriptPath
                 + '/index.php?title='
                 + escape(encode_utf8(wgPageName))
                 + '&oldid='
                 + revid.firstChild.data;

    // create link to target
    var newlink = document.createElement('a');

    newlink.href  = target;
    newlink.id = 'titlelink';

    // get title of page
    var title = document.getElementsByTagName('h1')[0];

    // move all child nodes from title into link
    while (title.childNodes.length != 0)
      newlink.appendChild(title.removeChild(title.firstChild));

    // add link into title
    title.appendChild(newlink);
  }

  // send the request
  request.send(null);
}

if (wgIsArticle                          // nur für echte Seiten (keine Spezialseiten etc.)
    && !/\?.*oldid=/.test(document.URL)) // und nicht, wenn bereits eine spezifische Version angezeigt wird
  addOnloadHook(permalinktitle)