Benutzer:Monobooktestgelände/monobook.js

aus Wikipedia, der freien Enzyklopädie
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
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
/*<pre>*/

/*
Stark veränderte bzw. zu verändernde monobook.js, basierend auf Beiträgen von ASM
*/


/////////// Einstellungen ///////////
// -> Standardeinstellungen zuweisen

qeEnabled          = true;
qeEnableSection0   = true;
qeTextboxHeight    = 20;
qeEnableAccessKeys = true;

qeShowErrors       = false;

//////// Ende Einstellungen ////////


// only initialize once
var qeIsInit = false;

// 2D-Array mit allen Sections und den jeweiligen Unterknoten
var qeSections = new Array();

// Aktuell bearbeitete Section
var qeEdit = -1;

// Aktuell im Vorschau-Modus?
qePreviewMode = false;
qePreviewDisabled = false;

// Link zum Bearbeiten der Abschnitte
var qeEditLink = false;

// Knoten
var qeParent = false;
var qeForm = false;
var qePreview = false;

// Form action
var qeFormAction = false;

// XmlHttpRequest
var qeRequest = false;

// 0 = idle 1 = receive 2 = submit
var qeRequestState = 0;

// ondblclick
var qeOnDoubleClick = null;

////// Start Script //////

$(qeInit);

function qeInit()
{
   if (!qeEnabled || qeIsInit) return;

   qeIsInit = true;

   // check if page is editable
   if (!document.getElementById('ca-edit')) return;

   // check if there is no other action than view
   var pos = document.location.href.indexOf('action=');
   if (pos != -1 && document.location.href.substr(pos+7, 4) != 'view') return;
   
   if (!qeInitAjax()) return;

   qeChangeSectionLinks();
}

function qeContentSub(text)
{
   var cs = document.getElementById('contentSub');
   if (cs.innerHTML)
      cs.innerHTML += ' - ' + text;
   else
      cs.innerHTML = text;
}

function qeShowError(err)
{
   if (qeShowErrors) qeContentSub(qePhrase('quickedit') + ' ' + qePhrase('error') + ': ' + err);
}

function qeAlert(err)
{
   alert(qePhrase('quickedit') + ' ' + qePhrase('error') + ': ' + err);
}

function qeGetElementsByClassName(tagname, classname)
{
   var ret = new Array();
   var tags = document.getElementsByTagName(tagname);
   for (i = 0; i < tags.length; i++)
      if (tags[i].className == classname)
         ret.push(tags[i]);

   return ret;
}

function qeChangeSectionLinks()
{
   qeEditLink = document.getElementById('ca-edit').firstChild.href + '&section=';

   // Alle Abschnitte
//   var sections = qeGetElementsByClassName('div', 'editsection');
   var sections = qeGetElementsByClassName('span', 'editsection');
   var jumptonav = document.getElementById('jump-to-nav');

/*   qeNewLinks = false;

   if (sections.length == 0)
      if (typeof oldEditsectionLinks == 'undefined' || !oldEditsectionLinks)
      {
         qeNewLinks = true;
         var node = jumptonav.nextSibling;
         while(node != null && node.className != 'printfooter')
         {
            if (/^H[1-6]$/.test(node.nodeName) && node.getElementsByTagName('span').length != 0)
               sections.push(node.getElementsByTagName('span')[0]);

            node = node.nextSibling;
         }
      }
*/

   // Hauptabschnitt
   if (qeEnableSection0)
   {
      var heading = qeGetElementsByClassName('h1', 'firstHeading')[0];

   if (!heading || !jumptonav)
      qeShowError('Section 0 nicht gefunden.');
   else
   {

      // id verpassen
      heading.id = 'section-0';

      // Knoten ins Array packen
      qeSections[0] = new Array();

      var nosections = (sections.length == 0);

      var node = jumptonav.nextSibling;
      while (node != null && node.className != 'editsection'
             && node.className != 'printfooter' && (nosections|| !/^H[1-6]$/.test(node.nodeName)))
      {
         if (node.nodeName.charAt(0) != '#')
            qeSections[0].push(node);
         node = node.nextSibling;
      }

      // Link hinzufügen
      var newspan = document.createElement('span');
      newspan.style.fontSize = '8pt';
      newspan.style.marginLeft = '10px';

      newspan.appendChild(document.createTextNode('['));
      
      var newlink   = document.createElement('a');
      newlink.href  = 'javascript:qeEditSection(0)';
      newlink.id    = 'sectionlink-0';
      newlink.className = 'sectionlink';
      newlink.appendChild(document.createTextNode(qePhrase('quickedit')));
      newspan.appendChild(newlink);

      newspan.appendChild(document.createTextNode(']'));

      heading.appendChild(newspan);

   }
   } // qeEnableSection0


   // Abschnitte
   for (i = 0; i < sections.length; i++)
   {
      // Section-Link suchen
      var link = sections[i].childNodes[1].href;

/*      var pos = link.search(/section=/);
      var section = link.substring(pos+8);
      var j;
      for (j = 0; j < 2; j++)
        if (isNaN(section.charAt(j))) break;

      if (j == 0) continue;
      section = section.substring(0, j);
      ////
*/

// fix by lupin
      var section = null, match = null;
      
      if (match = /section=([0-9]+)/.exec(link))
         var section = +match[1];
      else break;
      
      if (!section) continue;
// end fix

      sections[i].style.fontSize = '8pt'; // x-small sieht bei mir "doof" aus

      // QuickEdit-Link erstellen
      var newnode = document.createElement('a');
      newnode.href = 'javascript:qeEditSection(' + section + ');';
      newnode.title = 'QuickEdit Section ' + section;
      newnode.id    = 'sectionlink-' + section;
      newnode.className = 'sectionlink';
      newnode.appendChild(document.createTextNode(qePhrase('quickedit')));
      
      var where = sections[i].childNodes[2];
      sections[i].insertBefore(document.createTextNode('/'), where);
      sections[i].insertBefore(newnode, where);
      ////

      // dem div eine ID verpassen
      sections[i].id = 'editsection-' + section;

      // zugehörige hX Überschrift suchen
/*      if (qeNewLinks)
         var hx = sections[i].parentNode;

      else
      {
         var hx = sections[i].nextSibling;
         while (hx != null && !/^H[1-6]$/.test(hx.nodeName))
            hx = hx.nextSibling;
      }
*/      
      var hx = sections[i].parentNode;

      // auch ne ID verpassen
      hx.id = 'section-' + section;
      ////

      // alle zu dieser Section gehörigen Knoten suchen und ins Array packen
      qeSections[section] = new Array();

      var node = hx.nextSibling;
      while (node != null && node.className != 'editsection'
             && node.className != 'printfooter' && !/^H[1-6]$/.test(node.nodeName))
      {
         // nur echte knoten bitte
         if (node.nodeName.charAt(0) != '#')
            qeSections[section].push(node);

         node = node.nextSibling;
      }
      ////
   }
}

function qeEditSection(section)
{
   section = parseInt(section);

   // könnte etwas suboptimal sein, reicht aber vorerst
   if (qeRequestState || !qeEditLink) return;

   // es wird bereits ein Abschnitt bearbeitet
   // wenn es der aktuelle ist -> Bearbeiten abbrechen, sonst nichts tun
   if (qeEdit != -1)
   {
      if (qeEdit == section) qeAbortEdit(section);
      return;
   }

   qeEdit = section;

   // save body.ondblclick
   if (document.getElementsByTagName('body')[0].ondblclick)
   {
      qeOnDoubleClick = document.getElementsByTagName('body')[0].ondblclick;
      document.getElementsByTagName('body')[0].ondblclick = null;
   }

   // Inhalt des Abschnitts ausblenden
   var nodes = qeSections[section];
   for (i = 0; i < nodes.length; i++)
      nodes[i].style.display = 'none';
   ////

   // andere Links ändern
   var links = qeGetElementsByClassName('a', 'sectionlink');
   for (i = 0; i < links.length; i++)
   {
      if (links[i].id != 'sectionlink-' + qeEdit)
         links[i].style.color = '#bfbfbf';
   }

   // Form anzeigen
   qeMakeForm();
   var hx = document.getElementById('section-' + section);
   hx.parentNode.insertBefore(qeParent, hx.nextSibling);

   qeForm.childNodes[4].value = qePhrase('loading') + '...';
   ////

   // make sure the QuickEdit tab is activated
   qeSwitch(0);

   qeGetSection();
}


function qeAbortEdit()
{
   if (qeEdit == -1 || qeRequestState) return;

   // Inhalt des Abschnitts wieder einblenden
   var nodes = qeSections[qeEdit];
   for (i = 0; i < nodes.length; i++)
      nodes[i].style.display = is_gecko?null:'block';

   var links = qeGetElementsByClassName('a', 'sectionlink');
   for (i = 0; i < links.length; i++)
   {
      if (links[i].id != 'sectionlink-' + qeEdit)
         links[i].style.color = null;
   }

   qeParent.parentNode.removeChild(qeParent);
   qeForm.childNodes[4].value = '';

   qeEdit = -1;
   qeRequest.abort();

   // restore body.ondblclick
   if (qeOnDoubleClick)
      document.getElementsByTagName('body')[0].ondblclick = qeOnDoubleClick;
}

function qeMakeForm()
{
   if (qeForm) return;

   if (qeSections.length == 1) qeTextboxHeight += 5; // higher textbox for the main section only

   // create parent div
   qeParent = document.createElement('div');
   qeParent.style.clear  = 'both';
   
   // create tabs
   var ul = document.createElement('ul');
   ul.style.listStyle    = 'none';
   ul.style.whiteSpace   = 'nowrap';
   ul.style.fontSize     = '11.3px';
   ul.style.position     = 'relative';
   ul.style.bottom       = '0px';
   ul.style.borderCollapse = 'collapse';

   var li1 = document.createElement('li');

   var a = document.createElement('a');
   a.href                 = 'javascript:qeSwitch(0)';
   a.style.textDecoration = 'none';
   a.style.padding        = '0 8px';
   a.appendChild(document.createTextNode(qePhrase('quickedit')));
   li1.appendChild(a);

   li1.id                 = 'qeTabEdit';
   li1.style.border       = '1px solid #aaa';
   li1.style.borderBottom = 'none';
   li1.style.marginRight  = '6px';
   li1.style.display      = 'inline';
   li1.style.backgroundColor = '#fafafa';

   var li2 = li1.cloneNode(true);
   li2.id = 'qeTabPreview';
   li2.firstChild.href = 'javascript:qeSwitch(1)';
   li2.firstChild.firstChild.nodeValue = qePhrase('liveprev');

   // make li1 look selected
   li1.style.borderColor  = '#888';
   li1.style.borderBottom = 'none';
   li1.style.fontWeight   = 'bold';

   var li3 = document.createElement('li');
   li3.style.cssFloat    = 'right';
   li3.style.marginRight = '10px';
   li3.style.color       = '#aaa';
   li3.style.fontSize    = '8pt';
   li3.style.display     = 'inline';

   var a = document.createElement('a');
   a.style.color = '#aaa';
   a.href        = 'http://de.wikipedia.org/wiki/Benutzer_Diskussion:ASM#QuickEdit_2';
   a.appendChild(document.createTextNode('ASM'));

   li3.appendChild(document.createTextNode(qePhrase('header')));
   li3.appendChild(a);

   ul.appendChild(li3);
   ul.appendChild(li1);
   ul.appendChild(li2);
   qeParent.appendChild(ul);

   // create frame div
   var framediv = document.createElement('div');
   framediv.style.border   = '1px solid #aaa';
   framediv.style.padding  = '6px';
   framediv.style.overflow = 'hidden';
   framediv.style.clear    = 'both';
   framediv.style.backgroundColor = '#fafafa';

   qeParent.appendChild(framediv);

   // create form
   qeForm = document.createElement('form');
   qeForm.method = 'post';
   qeForm.onsubmit = qeSubmitByReturn;

   framediv.appendChild(qeForm);

   // create preview div
   qePreview = document.createElement('div');
   qePreview.style.display = 'none';
   qePreview.style.width   = '100%';
   qePreview.style.clear   = 'both';
   qePreview.style.padding = '5px';
   qePreview.style.border  = '1px dotted #aaa';
   qePreview.style.backgroundColor = qeGetBGColor();

   // preview message
   var div = document.createElement('div');
   div.style.padding   = '100px 0';
   div.style.textAlign = 'center';
   div.style.color     = '#aaa';
   div.style.cursor    = 'default';
   div.appendChild(document.createTextNode(qePhrase('loadprev') + '...'));
   qePreview.appendChild(div);

   framediv.appendChild(qePreview);

////

   var elements = new Array(
     //         subject     type      name
     new Array('input',    'hidden', 'wpSection'),
     new Array('input',    'hidden', 'wpStarttime'),
     new Array('input',    'hidden', 'wpEdittime'),
     new Array('input',    'hidden', 'wpSummary'),
     new Array('textarea',           'wpTextbox1'),
     new Array('input',    'hidden', 'wpEditToken'),
     new Array('input',    'hidden', 'wpAutoSummary')
   );

   for (i = 0; i < elements.length; i++)
   {
      var e = elements[i];
      var newnode = document.createElement(e[0]);
    
      if (e[0] == 'input')
      {
         newnode.type = e[1];
         newnode.name = e[2];
      }

      else if (e[0] == 'textarea')
      {
         newnode.id = e[1];
         newnode.name = e[1];
         newnode.appendChild(document.createTextNode(''));
         newnode.rows = qeTextboxHeight;
         newnode.style.width = '99%';
      }

      qeForm.appendChild(newnode);
   }

   if (qeEnableAccessKeys) qeForm.childNodes[4].accessKey = ',';
   qeForm.childNodes[4].tabIndex = 1;

   newnode = document.createElement('div');
   newnode.style.marginTop  = '5px';
   newnode.style.paddingTop = '5px';
   newnode.style.borderTop  = '1px dotted #aaa';

// Speichern   
   newnode.appendChild(document.createElement('a'));
   newnode.firstChild.href         = 'javascript:qeSubmit(0)';
   newnode.firstChild.style.cursor = 'pointer';
   newnode.firstChild.appendChild(document.createTextNode(qePhrase('submit')));

   if (qeEnableAccessKeys) newnode.firstChild.accessKey = 's';

// Vorschau
   newnode.appendChild(document.createTextNode(' '));
   
   newnode.appendChild(document.createElement('a'));
   newnode.childNodes[2].href             = 'javascript:qeSubmit(1)';
   newnode.childNodes[2].style.marginLeft = '5px';
   newnode.childNodes[2].style.cursor     = 'pointer';
   newnode.childNodes[2].appendChild(document.createTextNode(qePhrase('preview')));
   
   if (qeEnableAccessKeys) newnode.childNodes[2].accessKey = 'p';

// Abbrechen
   newnode.appendChild(document.createTextNode(' '));
   
   newnode.appendChild(document.createElement('a'));
   newnode.childNodes[4].href             = 'javascript:qeAbortEdit()';
   newnode.childNodes[4].style.marginLeft = '5px';
   newnode.childNodes[4].style.cursor     = 'pointer';
   newnode.childNodes[4].appendChild(document.createTextNode(qePhrase('cancel')));

   if (qeEnableAccessKeys) newnode.childNodes[4].accessKey = 'a';

// Zusammenfassung
   newnode.appendChild(document.createTextNode(' '));

   newnode.appendChild(document.createElement('input'));
   newnode.childNodes[6].type = 'text';
   newnode.childNodes[6].size = '70';
   newnode.childNodes[6].id   = 'qeSummary';
   newnode.childNodes[6].maxLength = '200';
   newnode.childNodes[6].style.marginLeft = '5px';
   newnode.childNodes[6].tabIndex = 2;

// Kleine Änderung
   newnode.appendChild(document.createTextNode(' '));

   var checkboxes = document.createElement('span');
   checkboxes.style.whiteSpace = 'nowrap';

   checkboxes.appendChild(document.createElement('input'));
   checkboxes.childNodes[0].type  = 'checkbox';
   checkboxes.childNodes[0].id    = 'wpMinoredit';
   checkboxes.childNodes[0].name  = 'wpMinoredit';
   checkboxes.childNodes[0].value = '1';
   checkboxes.childNodes[0].style.marginLeft = '5px';
   checkboxes.childNodes[0].tabIndex = 3;

   if (qeEnableAccessKeys) checkboxes.childNodes[0].accessKey = 'i';

   checkboxes.appendChild(document.createElement('label'));
   checkboxes.childNodes[1].htmlFor = 'wpMinoredit';
   checkboxes.childNodes[1].style.fontWeight = 'bold';
   checkboxes.childNodes[1].style.fontSize   = '8pt';
   checkboxes.childNodes[1].style.position   = 'relative';
   checkboxes.childNodes[1].style.bottom     = '2px';

   checkboxes.childNodes[1].appendChild(document.createTextNode(qePhrase('k')));

// Beobachten
   checkboxes.appendChild(document.createTextNode(' '));

   checkboxes.appendChild(document.createElement('input'));
   checkboxes.childNodes[3].type  = 'checkbox';
   checkboxes.childNodes[3].id    = 'wpWatchthis';
   checkboxes.childNodes[3].name  = 'wpWatchthis';
   checkboxes.childNodes[3].value = '1';
   checkboxes.childNodes[3].style.marginLeft = '5px';
   checkboxes.childNodes[3].tabIndex = 4;

   if (qeEnableAccessKeys) checkboxes.childNodes[3].accessKey = 'w';

   checkboxes.appendChild(document.createElement('label'));
   checkboxes.childNodes[4].htmlFor = 'wpWatchthis';
   checkboxes.childNodes[4].style.fontWeight = 'bold';
   checkboxes.childNodes[4].style.fontSize   = '8pt';
   checkboxes.childNodes[4].style.position   = 'relative';
   checkboxes.childNodes[4].style.bottom     = '2px';

   checkboxes.childNodes[4].appendChild(document.createTextNode(qePhrase('b')));

   newnode.appendChild(checkboxes);
   qeForm.parentNode.appendChild(newnode);
}

function qeFillForm(formaction, wpStarttime, wpEdittime, wpSummary, wpTextbox1,
                    wpEditToken, wpAutoSummary, wpWatchthis)
{
   if (!qeForm) return;

   // save form action since we need it for preview
   qeFormAction = formaction;

   qeForm.childNodes[0].value = qeEdit;
   qeForm.childNodes[1].value = wpStarttime;
   qeForm.childNodes[2].value = wpEdittime;
   qeForm.childNodes[3].value = wpSummary;
   qeForm.childNodes[4].value = wpTextbox1;

   qeForm.childNodes[5].value = wpEditToken;
   qeForm.childNodes[6].value = wpAutoSummary;

   document.getElementById('wpWatchthis').checked = wpWatchthis;
   
   qeForm.action = formaction;

   document.getElementById('qeSummary').value = wpSummary;
}


// QuickEdit 2: Preview stuff

function qeSwitch(type)
{
   if (qeEdit == -1 || qeRequestState) return;

   type = parseInt(type);
   if ((type == 0 && !qePreviewMode) || (type == 1 && qePreviewMode) ||
       (qePreviewDisabled && type == 1)) return;

   qePreviewMode = !qePreviewMode;

   // switch tab styles
   var lia = qePreviewMode?document.getElementById('qeTabEdit'):
                           document.getElementById('qeTabPreview');
   var lid = qePreviewMode?document.getElementById('qeTabPreview'):
                           document.getElementById('qeTabEdit');

   lid.style.border = '1px solid #888';
   lid.style.fontWeight = 'bold';
   lia.style.border = '1px solid #aaa';
   lia.style.fontWeight = 'normal';

   lia.style.borderBottom = lid.style.borderBottom = 'none';
}


function qeMakeFormRequest()
{
   if (!qeForm) return null;

   var str = '';

   var inputs = qeForm.getElementsByTagName('input');
   for (var i = 0; i < inputs.length; i++)
      if (inputs[i].value && inputs[i].value.length > 0)
         str += '&' + inputs[i].name + '=' + encodeURI(inputs[i].value);

   str += '&wpPreview=Preview' +
          '&wpTextbox1=' + encodeURI(document.getElementById('wpTextbox1').value);

   return str.substr(1);
}


// Ajax stuff

function qeInitAjax()
{
   try
   {
      if (window.XMLHttpRequest)
      {
         qeRequest = new XMLHttpRequest();
         qeRequest.overrideMimeType('text/xml');
      }

      else if (window.ActiveXObject)
         qeRequest = new ActiveXObject('Microsoft.XMLHTTP');

      else throw 'Kein AJAX-Objekt vorhanden';
   }

   catch (e)
   {
      qeShowError(e);
      return false;
   }

   if (!qeRequest)
   {
      qeShowError('AJAX-Objekt konnte nicht erstellt werden');
      return false;
   }

   return true;
}


function qeGetSection()
{
   if (qeEdit == -1 || !qeForm || !qeRequest || !qeEditLink || qeRequestState) return;

   var link = qeEditLink + qeEdit;

   qeRequestState = 1;

   qeRequest.onreadystatechange = qeAjaxResponse;

   qeRequest.open('GET', link, true);
   qeRequest.send(null);
}


function qeAjaxResponse()
{
   if (!qeRequestState)
   {
      alert('QuickEdit Fehler: qeAjaxResponse');
      return;
   }

   // receive
   if (qeRequestState == 1 && qeEdit != -1)
   {
      if (qeRequest.readyState != 4 || qeRequest.status != 200)
         return;

      qeRequestState = 0;

      var xml = qeRequest.responseXML;

      try // MediaWiki bug 6986 workaround
      {
         var wpTextbox1 = xml.getElementById('wpTextbox1').value;
      }
      catch (e)
      {
         xml = qeFixXML(qeRequest.responseText);
         if (!xml)
         {
            qeShowError('XML parsing fehlgeschlagen.');
            return;
         }

         var wpTextbox1 = xml.getElementById('wpTextbox1').value;
      }

      var inputs = xml.getElementsByTagName('input');
      for (i = 0; i < inputs.length; i++)
      {
         if (inputs[i].name == 'wpSection') wpSection = inputs[i].value;
         else if (inputs[i].name == 'wpStarttime') wpStarttime = inputs[i].value;
         else if (inputs[i].name == 'wpEdittime') wpEdittime = inputs[i].value;
         else if (inputs[i].name == 'wpSummary') wpSummary = inputs[i].value;

         else if (inputs[i].name == 'wpEditToken') wpEditToken = inputs[i].value;
         else if (inputs[i].name == 'wpAutoSummary') wpAutoSummary = inputs[i].value;

         else if (inputs[i].name == 'wpWatchthis') wpWatchthis = inputs[i].checked;
      }

      var formaction = xml.getElementById('editform').action;

      // sollte nie passieren, wenn doch -> fatal error
      if (wpSection != qeEdit)
      {
         qeAlert(qePhrase('varmismatch'));
         qeRequestState = 0;
         qeAbortEdit();
         return;
      }

      qeFillForm(formaction, wpStarttime, wpEdittime, wpSummary, wpTextbox1,
                 wpEditToken, wpAutoSummary, wpWatchthis);
      return;
   }

   // preview (submit)
   if (qeRequestState == 2 && qeEdit != -1)
   {
      if (qeRequest.readyState != 4 || qeRequest.status != 200)
         return;

      qeRequestState = 0;

      try
      {
         var xml = qeRequest.responseXML;
         var prev = xml.getElementById('wikiPreview').cloneNode(true);
      }
      catch (e)
      {
         qePreviewDisabled = true;
         qePreview.firstChild.firstChild.nodeValue = qePhrase('noprev');

         var tab = document.getElementById('qeTabPreview');
         tab.firstChild.style.color = '#888';
         return;
      }

      qePreview.firstChild.style.display = 'none';

      while (prev.childNodes.length > 0 && prev.firstChild.className != 'previewnote')
         prev.removeChild(prev.firstChild);

      prev.removeChild(prev.firstChild);
      qePreview.appendChild(prev);

      return;
   }
}

function qeSubmitByReturn()
{
   qeSubmit(0);
   return false;
}

function qeSubmit(preview)
{
   if (qeEdit == -1 || !qeRequest || !qeForm || qeRequestState)
      return;

   qeForm.childNodes[3].value = document.getElementById('qeSummary').value;
   
   if (preview == 1)
   {
      var prev = document.createElement('input');
      prev.name = 'wpPreview';
      prev.value = 'Preview';
      prev.type = 'hidden';
      qeForm.appendChild(prev);
   }

   qeForm.submit();
}

// MediaWiki bug 6986 workaround
function qeFixXML(text)
{
   var pos = text.indexOf('<h1 class="firstHeading">');
   var pos2 = text.indexOf('</h1>');
   if (pos == -1 || pos2 == -1) return null;

   text = text.substring(0, pos) + text.substring(pos2+5);

   var parser = new DOMParser();
   var newdoc = parser.parseFromString(text, "text/xml");
   return newdoc;
}

// Workaround for JavaScript
// don't ask me why the hell JS throws an error at '/*'
function qeFixXMLPreview(text)
{
   // another MediaWiki bug: backslashes are stripped out when saving a page...
   regex = eval('/' + String.fromCharCode(92) + '/' + String.fromCharCode(92) + '*/g');
   text = text.replace(regex, '&#47;*');

   var parser = new DOMParser();
   var newdoc = parser.parseFromString(text, "text/xml");
   return newdoc;
}

// Language stuff

function qeGetBGColor()
{
   if (wgContentLanguage == 'de')
   {
      if (wgCanonicalNamespace == '') return '#fff';
      return '#f3f3ff';
   }

   if (wgContentLanguage == 'en')
   {
      if (wgCanonicalNamespace == '') return '#fff';
      return '#f8fcff';
   }

   return '#fff';
}

function qePhrase(name)
{
   return name;
}

/*</pre>*/