Benutzer:Stefan Majewsky/monobook.js

Aus Wikibooks

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
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
//<pre><nowiki>

/******************************************************************************************
 ** Monobook Element Modding library. Techniques by me. Based on:                        **
 ** http://commons.wikimedia.org/w/index.php?title=MediaWiki:Extra-tabs.js&oldid=3001654 **
 ******************************************************************************************/

//Monobook Element Modding. Techniques by Stefan Majewsky (de.wikibooks.org/wiki/Benutzer:Stefan_Majewsky)
//Based on http://commons.wikimedia.org/w/index.php?title=MediaWiki:Extra-tabs.js&oldid=3001654

//Creates a new list item.
function createListItem(url, name, id)
{
  var listitem = document.createElement('li');
  listitem.setAttribute('id', id);
  var link = document.createElement('a');
  if (url!='')
  {  
    link.setAttribute('href', url);
  }
  else
  {
    listitem.setAttribute('class','selected');
  }
  link.appendChild(document.createTextNode(name));
  listitem.appendChild(link);
  return listitem;
}

//Appends a new tab to the register at the top of a page.
function appendTab(url, name, id)
{
  // Grab the element we want to append the tab to and append the tab to it.
  var c1 = document.getElementById('column-one');
  var tabs = c1.getElementsByTagName('div')[0].getElementsByTagName('ul')[0];
  tabs.appendChild(createListItem(url, name, id));
}

//Appends the into tab near the "Edit" tab.
function appendIntroTab(articlename)
{
  // Grab the element we want to append the tab to and append the tab to it.
  var c1 = document.getElementById('column-one');
  var tabs = c1.getElementsByTagName('div')[0].getElementsByTagName('ul')[0];
  tabs.insertBefore(createListItem('http://de.wikibooks.org/w/index.php?title=' + articlename + '&action=edit&section=0', 'intro', 'ca-editintro'), tabs.getElementsByTagName('li')[3]);
}

//"Beobachten"-Link verschieben, sodass er rechts neben der Versionsgeschichte steht.
function moveWatchTab()
{
  // Grab the element we want to append the tab to.
  var c1 = document.getElementById('column-one');
  var tabs = c1.getElementsByTagName('div')[0].getElementsByTagName('ul')[0];
  // Grab the "watch" tab.
  var watch = document.getElementById('ca-watch');
  if (!watch) watch = document.getElementById('ca-unwatch');
  if (!watch) return;
  //Remove the tab from the old position.
  tabs.removeChild(watch);
  //Insert it before the tab after the "history" tab.
  tabs.insertBefore(watch, document.getElementById('ca-history').nextSibling);
}

//Adds supplementary links to the personal bar at the top right.
function appendPLink(url, name, id)
{
  // Insert the element before the "log out" link.
  var c1 = document.getElementById('column-one');
  var tabs = c1.getElementsByTagName('div')[1].getElementsByTagName('ul')[0];
  tabs.insertBefore(createListItem(url, name, id), document.getElementById('pt-logout'));
}

//Adds supplementary links to the personal bar at the top right.
function appendPLinkBefore(url, name, id, before)
{
  // Insert the element before the "log out" link.
  var c1 = document.getElementById('column-one');
  var tabs = c1.getElementsByTagName('div')[1].getElementsByTagName('ul')[0];
  tabs.insertBefore(createListItem(url, name, id), document.getElementById(before));
}

//Adds a supplementary menu at the left navigation. Returns the list where links have to be added.
function appendMenu(title, id)
{
  //initialize the single elements
  var basediv = document.createElement('div');
  basediv.setAttribute('class','portlet');
  basediv.setAttribute('id',id);
  var heading = document.createElement('h5');
  heading.appendChild(document.createTextNode(title));
  var innerdiv = document.createElement('div');
  innerdiv.setAttribute('class','pBody');
  var linklist = document.createElement('ul');
  //ONLY FOR PERSONAL PURPOSE - change the background color of the menu
  innerdiv.setAttribute('style','background-color: #E2E2F9');
  //build menu
  basediv.appendChild(heading);
  basediv.appendChild(innerdiv);
  innerdiv.appendChild(linklist);
  //insert in column-one after p-tb
  document.getElementById('column-one').insertBefore(basediv, document.getElementById('p-tb').nextSibling);
  return linklist;
}

//Adds a menu item to a menu.
function addMenuItem(menu, link, text, id)
{
  var listitem = document.createElement('li');
  listitem.setAttribute('id',id);
  var linkitem = document.createElement('a');
  linkitem.setAttribute('href',link);
  //build link
  linkitem.appendChild(document.createTextNode(text));
  listitem.appendChild(linkitem);
  menu.appendChild(listitem);
}

//Adds a horizontal separator to a menu.
function addMenuSep(menu)
{
  menu.appendChild(document.createElement('hr'));
}

/********************************************************************************
 ** "Unedit red links". If clicking on red links, not the edit window, but the **
 ** empty article will be opened.                                              **
 ********************************************************************************/

function cutOffEditParameter(link) {
  var index = link.href.indexOf('&action=edit');
  if (index > 0) {
    link.href = link.href.slice(0, index); //cut off '&action=edit'
  }
  return link;
}

function unEditRedLinks(){
  var links = document.getElementsByTagName('a');
  for(var i1 = 0; i1 < links.length; i1++) { //walk through all links
    if (links[i1].getAttribute('class') == 'new') { //is red link?
      links[i1] = cutOffEditParameter(links[i1]);
    }
  }
  var listitems = document.getElementsByTagName('li');
  for (var i2 = 0; i2 < listitems.length; i2++) { //walk through all list items
    if (listitems[i2].getAttribute('class') == 'new') { //is red list item?
      var listlinks = listitems[i2].getElementsByTagName('a');
      for (var i3 = 0; i3 < listlinks.length; i3++) { //walk through all links in the list item
        listlinks[i3] = cutOffEditParameter(listlinks[i3]);
      }
    }
  }
}

/********************************************************************************
 ** Change the captions of several interface elements.                         **
 ********************************************************************************/

function changeSpecialPageCaption(newname)
{
  document.getElementById('ca-nstab-special').getElementsByTagName('a')[0].innerHTML = newname;
}

//Rename all special pages. (This makes h1.firstHeading obsolete on these pages.
//Use the following CSS rule to disable the headings on special pages:
// .ns--1 .firstHeading { display:none; }
function changeSpecialPageCaptions()
{
  if (wgNamespaceNumber == -1)
  {
    switch(wgCanonicalSpecialPageName)
    {
      case 'Ancientpages': changeSpecialPageCaption('Am längsten unbearbeitete Seiten'); break;
      case 'Allmessages': changeSpecialPageCaption('Systemnachrichten'); break;
      case 'Allpages': changeSpecialPageCaption('Seitenverzeichnis'); break;
      //case 'Boardvote': changeSpecialPageCaption('Wahlen zum Wikimedia-Kuratorium'); break;
      case 'Booksources': changeSpecialPageCaption('Buchquellen'); break;
      case 'BrokenRedirects': changeSpecialPageCaption('Kaputte Weiterleitungen'); break;
      case 'Categories': changeSpecialPageCaption('Kategorienverzeichnis'); break;
      case 'CategoryTree': changeSpecialPageCaption('Kategoriebaum'); break;
      case 'CrossNamespaceLinks': changeSpecialPageCaption('Links zwischen Namensräumen'); break;
      case 'Deadendpages': changeSpecialPageCaption('Sackgassenseiten'); break;
      case 'Disambiguations': changeSpecialPageCaption('Begriffsklärungsseiten'); break;
      case 'ExpandTemplates': changeSpecialPageCaption('Vorlagenexpandierung'); break;
      case 'Export': changeSpecialPageCaption('Seitenexport'); break;
      case 'DoubleRedirects': changeSpecialPageCaption('Kettenweiterleitungen'); break;
      case 'Filepath': changeSpecialPageCaption('Dateipfadermittlung'); break;
      case 'Imagelist': changeSpecialPageCaption('Dateiverzeichnis'); break;
      case 'Ipblocklist': changeSpecialPageCaption('Gesperrte IPs und Benutzer'); break;
      case 'Log': changeSpecialPageCaption('Logbücher'); break;
      case 'Lonelypages': changeSpecialPageCaption('Verwaiste Seiten'); break;
      case 'Longpages': changeSpecialPageCaption('Längste Seiten'); break;
      case 'Linksearch': changeSpecialPageCaption('Weblinksuche'); break;
      case 'Listredirects': changeSpecialPageCaption('Weiterleitungsverzeichnis'); break;
      case 'Listusers': changeSpecialPageCaption('Benutzerverzeichnis'); break;
      case 'MIMEsearch': changeSpecialPageCaption('Suche nach MIME-Typ'); break;
      case 'Mostcategories': changeSpecialPageCaption('Meist benutzte Kategorien'); break;
      case 'Mostimages': changeSpecialPageCaption('Meist benutzte Bilder'); break;
      case 'Mostlinked': changeSpecialPageCaption('Meiste Verweise'); break;
      case 'Mostrevisions': changeSpecialPageCaption('Meiste Seitenversionen'); break;
      case 'Newimages': changeSpecialPageCaption('Neueste Bilder'); break;
      case 'Newpages': changeSpecialPageCaption('Neueste Seiten'); break;
      //case 'Preferences': changeSpecialPageCaption('Einstellungen'); break;
      case 'Prefixindex': changeSpecialPageCaption('Unterseiten'); break;
      case 'Randompage': changeSpecialPageCaption('Zufällige Seite'); break;
      case 'Randomredirect': changeSpecialPageCaption('Zufällige Weiterleitung'); break;
      case 'Recentchanges': changeSpecialPageCaption('Letzte Änderungen'); break;
      case 'Search': changeSpecialPageCaption('Seitensuche'); break;
      case 'Shortpages': changeSpecialPageCaption('Kürzeste Seiten'); break;
      case 'SiteMatrix': changeSpecialPageCaption('Wikimatrix'); break;
      case 'Specialpages': changeSpecialPageCaption('Spezialseitenverzeichnis'); break;
      case 'Statistics': changeSpecialPageCaption('Statistiken'); break;
      case 'Uncategorizedcategories': changeSpecialPageCaption('Nicht kategorisierte Kategorien'); break;
      case 'Uncategorizedimages': changeSpecialPageCaption('Nicht kategorisierte Bilder'); break;
      case 'Uncategorizedpages': changeSpecialPageCaption('Nicht kategorisierte Seiten'); break;
      case 'Unusedcategories': changeSpecialPageCaption('Nicht benutzte Kategorien'); break;
      case 'Unusedimages': changeSpecialPageCaption('Nicht benutzte Bilder'); break;
      case 'Unusedtemplates': changeSpecialPageCaption('Nicht verwendete Vorlagen'); break;
      case 'Upload': changeSpecialPageCaption('Hochladen'); break;
      case 'Userlogin': changeSpecialPageCaption('Anmeldung'); break;
      case 'Version': changeSpecialPageCaption('Systemversionsinformationen'); break;
      case 'Watchlist': changeSpecialPageCaption('Beobachtungsliste'); break;
      case 'Wantedcategories': changeSpecialPageCaption('Gewünschte Kategorien'); break;
      case 'Wantedpages': changeSpecialPageCaption('Gewünschte Seiten'); break;
    }
  }
}

//change tab titles - adapted from [[w:de:Benutzer:PDD/changeBeschriftungen.js]]
function changeTabAndPLinkCaptions()
{
  var rid, relement;
  var rliste = {
    //tabs
    "ca-talk":       ["A","Talk"],
    "ca-edit":       ["A","Edit"],
    "ca-history":    ["A","Hist"],
    "ca-watch":      ["A","Watch"],
    "ca-unwatch":    ["A","Unwatch"],
    "ca-protect":    ["A","Lock"],
    "ca-unprotect":  ["A","Unlock"],
    "ca-delete":     ["A","Del"],
    "ca-move":       ["A","Move"],
    //plinks
    "pt-userpage":   ["A","Stefan"],
    "pt-mytalk":     ["A","Talk"],
    "pt-preferences":["A","Pref"],
    "pt-watchlist":  ["A","Watch"],
    "pt-mycontris":  ["A","Contrib"],
    "pt-logout":     ["A","Logout"]
  };
  for (rid in rliste) {
    if (relement = document.getElementById(rid)) {
      relement.getElementsByTagName(rliste[rid][0])[0].innerHTML = rliste[rid][1];
    }
  }
}

/********************************************************************************
 ** Monobook Element Modding                                                   **
 ********************************************************************************/

function memOnLoad()
{
  //append tabs
  if(wgNamespaceNumber == -1)
  {
    //change the captions (makes h1.firstHeading obsolete which is removed by my css)
    changeSpecialPageCaptions();
  }
  else
  {
    //add extra tabs
    appendTab('http://de.wikibooks.org/wiki/Spezial:Prefixindex/' + wgPageName, 'Sub', 'ca-subpage');
    appendTab('http://de.wikibooks.org/wiki/Spezial:Allpages/' + wgPageName, 'Index', 'ca-searchindex');
    appendTab('http://de.wikibooks.org/w/index.php?title=' + wgPageName + '&action=purge', 'Cache', 'ca-purge');
    appendIntroTab(wgPageName);
    moveWatchTab();
  }
  //append personal links
  appendPLinkBefore('http://de.wikibooks.org/wiki/Spezial:Recentchangeslinked/Benutzer:Stefan_Majewsky/_Buchseitenliste','bwatch','pt-bwatch','pt-mycontris');
  appendPLinkBefore('http://de.wikibooks.org/w/index.php?title=Spezial:Recentchanges&hidemyself=1&limit=200&hidepatrolled=1', 'RC', 'pt-rc','pt-mycontris');
  appendPLink('http://de.wikibooks.org/wiki/Benutzer:Stefan_Majewsky/_Checkliste', 'Check', 'pt-check');
  appendPLink('http://de.wikibooks.org/wiki/Spezial:Mypage/monobook.css','CSS','pt-css');
  appendPLink('http://de.wikibooks.org/wiki/Spezial:Mypage/monobook.js','JS','pt-js');
  //add a menu
  var menu = appendMenu('Links', 'p-custom');
  addMenuItem(menu, 'http://de.wikibooks.org/wiki/Regal:Programmierung', 'Regal:Programmierung', 'n-regal');
  addMenuItem(menu, 'http://de.wikibooks.org/wiki/Visual_Basic_.NET', 'Visual Basic .NET', 'n-book');
}

/********************************************************************************
 ** Onload control.                                                            **
 ********************************************************************************/

$(memOnLoad);
$(changeSpecialPageCaptions);
$(changeTabAndPLinkCaptions);
$(unEditRedLinks);

// </nowiki></pre>