User:Alfakim/quickedit.js

/* */

/* * * * * * * * * * * * * * * * * * * MediaWiki QuickEdit 2 by ASM *           - beta - * Version: Jan 2007 * * * * * * * * * * * * * * * * * * * * By Benutzer:ASM on German Wikipedia * * * * * * * * * * * * * * * * * * * * *           How to use * * Insert into your monobook.js: * * document.write(' '); * * And (optionally) these variables: * * var qeEnabled         = true;  // Activate Script? * var qeEnableSection0  = true;  // Enable QuickEdit link for section 0 (introduction)? * var qeEnableAccessKeys = true; // Activate access keys? * var qeTextboxHeight   = 20;    // Height of the textbox * * Acces keys are the same as usual (except 'a' for abort edit) * * * * * * * * * * * * * * * * * * */

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

if (typeof(qeEnabled) == 'undefined')         qeEnabled          = true; if (typeof(qeEnableSection0) == 'undefined')  qeEnableSection0   = true; if (typeof(qeTextboxHeight) == 'undefined')   qeTextboxHeight    = 20; if (typeof(qeEnableAccessKeys) == 'undefined') qeEnableAccessKeys = true;

/*if (typeof(qeShowErrors) == 'undefined')*/  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;

qeSetLang; 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.firstChild.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.firstChild.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;

// create preview div qePreview = document.createElement('div'); qePreview.style.display = 'none'; qePreview.style.width  = '98%'; qePreview.style.overflow= 'hidden'; 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); framediv.appendChild(qeForm);

////

// add form div qeForm.appendChild(document.createElement('div'));

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.firstChild.appendChild(newnode); }

if (qeEnableAccessKeys) qeForm.firstChild.childNodes[4].accessKey = ','; qeForm.firstChild.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.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.firstChild.childNodes[0].value = qeEdit; qeForm.firstChild.childNodes[1].value = wpStarttime; qeForm.firstChild.childNodes[2].value = wpEdittime; qeForm.firstChild.childNodes[3].value = wpSummary; qeForm.firstChild.childNodes[4].value = wpTextbox1;

qeForm.firstChild.childNodes[5].value = wpEditToken; qeForm.firstChild.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';

// switch to preview if (qePreviewMode) {     qeForm.firstChild.style.display = 'none'; qePreview.style.display = 'block'; qePreview.firstChild.style.display = 'block';

// remove all child nodes from previous previews, if any for (var i = 1; i < qePreview.childNodes.length; i++) qePreview.removeChild(qePreview.childNodes[i]);

qeLoadPreview; }

else {     qePreview.style.display = 'none'; qeForm.firstChild.style.display = 'block'; } }

function qeLoadPreview {  if (qeEdit == -1 || qeRequestState || !qeEditLink || !qePreviewMode || !qeFormAction) return;

var link = qeEditLink + qeEdit; qeRequestState = 2;

qeRequest.onreadystatechange = qeAjaxResponse; qeRequest.open('POST', qeFormAction, true);

var send = qeMakeFormRequest;

qeRequest.overrideMimeType('text/xml'); qeRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); qeRequest.setRequestHeader('Content-length', send.length); qeRequest.setRequestHeader('Content', send.length); qeRequest.send(send); }

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=' + encodeURIComponent(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.firstChild.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(''); var pos2 = text.indexOf(' '); 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 qeSetLang {  switch (document.getElementsByTagName('html')[0].lang) {     case 'de': qeLang = 1; break; case 'en': qeLang = 2; break;

//   case 'xx': ...

default: qeLang = 2; } }

function qePhrase(name) {  for (var i = 0; i < qePhrases.length; i++) if (qePhrases[i][0] == name) return qePhrases[i][qeLang];

return 'UNDEFINED PHRASE: ' + name; }

var qePhrases = new Array(  new Array('quickedit', 'QuickEdit',  'QuickEdit'),   new Array('submit',    'Speichern',  'Submit'),   new Array('preview',   'Vorschau',   'Preview'),   new Array('cancel',    'Abbrechen',  'Cancel'),   new Array('k',         'Kleine Änderung', 'minor'),   new Array('b',         'Beobachten', 'watch'),   new Array('error',     'Fehler',     'error'),   new Array('nolinksfound', 'Keine Links gefunden', 'No links found'),   new Array('loading',   'Lade Daten', 'Loading data'),   new Array('liveprev',  'Live Vorschau', 'Live Preview'),   new Array('loadprev',  'Lade Vorschau', 'Loading preview'),   new Array('noprev', 'Fehler: Vorschau nicht verfügbar (Seite konnte von JavaScript nicht gelesen werden)', 'Error: preview not available (page could not be read by JavaScript)'),  new Array('header', 'MediaWiki QuickEdit 2 beta / Fehler/Kritik/Anregungen bitte da posten: ', 'MediaWiki QuickEdit 2 beta / post any bugs/crititcs/suggestions there: ') );

/* */