Jump to content

User:RRuk/quickedit.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/*<pre>*/
 
/* * * * * * * * * * * * * * * * * *
* MediaWiki QuickEdit 2 by ASM
* Version: Apr 2008
* * * * * * * * * * * * * * * * * *
*
* Translate QuickEdit into your language:
* [[:de:Benutzer:ASM/quickedit-lang.js]]
*
*            How to use
*
* Insert into your monobook.js:
*
document.write('<script src="'
+ 'http://de.wikipedia.org/w/index.php?title=Benutzer:ASM/quickedit.js'
+ '&action=raw&ctype=text/javascript"></script>');
*
* - - - Please DO NOT copy this script (in order to use it) - - -
* -> if you have any suggestions, bugs etc. please contact me
*
* This script uses the following external scripts:
*  • diff.js by Cacycle - [[:en:User:Cacycle/diff.js]]
*  • SearchBox.js by Zocky - [[:en:User:Zocky/SearchBox.js]]
*
* You can use these variables to customize QuickEdit:
*
* 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
* var qeSignature        = '--~~~~'; // Signature (use '' to hide signature tab)
*
* * * * * * * * * * * * * * * * * */
 
 
/////////// Einstellungen ///////////
 
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(qeSignature) == 'undefined')        qeSignature        = '--~~~~';
 
if (typeof(qeShowErrors) == 'undefined')       qeShowErrors       = false;
 
//////// Ende Einstellungen ////////
 
// version
var qeVersion = '2.3-2498';
 
// qeMode constants
var MODE_QUICKEDIT = 0;
var MODE_PREVIEW   = 1;
var MODE_DIFF      = 2;
var MODE_PREF      = 3;
 
// qeRequestState constants
var REQ_IDLE       = 0;
var REQ_RECEIVE    = 1;
var REQ_SUBMIT     = 2;
 
// 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;
 
// Aktueller Modus
var qeMode = MODE_QUICKEDIT;
 
// Aktuell im Vorschau-Modus?
var qePreviewDisabled = false;
 
// preferences mode
var qePref = null;
 
// Link zum Bearbeiten der Abschnitte
var qeEditLink = false;
 
// Knoten
var qeParent  = false;
var qeForm    = false;
var qePreview = false;
var qeDiff    = false;
var qeToolbar = false;
 
var qeOriginalText = null;
 
// Form action
var qeFormAction = false;
 
// XmlHttpRequest
var qeRequest = false;
 
// request state
var qeRequestState = REQ_IDLE;
 
// ondblclick
var qeOnDoubleClick = null;
 
// special chars sticky?
var qeStickyMode = false;
 
// scroll mode?
var qeScrollMode = true;
var qeTextboxHeightPixel = false;
 
////// Start Script //////
 
qeInitTimer = null;
qeTries     = 0;
addOnloadHook(qeInitTimeout);
 
// init wrapper
function qeInitTimeout()
{
if (!qeInitTimer) qeInitTimer = window.setInterval(qeInitTimeout, 500);
 
var ex = true;
if (!qeEnabled || qeIsInit) ex = false;                                  // check init
if (ex && !document.getElementById('ca-edit')) ex = false;               // check editable
if (ex && document.location.search.indexOf('printable=yes') != -1) ex = false; // printable
if (ex && qeTries > 10) ex = false;
if (!ex) { window.clearInterval(qeInitTimer); return; } // abort if anything was false
 
qeTries++;
 
if (typeof(qeLanguages) != 'undefined') // then we can init QuickEdit
{
window.clearInterval(qeInitTimer);
qeInit();
}
}
 
function qeInit()
{
if (!qeEnabled || qeIsInit) return;
qeIsInit = true;
 
// check if page is editable
if (!document.getElementById('ca-edit')) return;
 
// check if page is print page
if (document.location.search.indexOf('printable=yes') != -1) return;
 
// check if action is view or purge
if (match = /[?&]action=([a-z]+)/.exec(window.location.href))
if (match[1] != 'view' && match[1] != 'purge')
return;
 
qeSetLang();
 
if (!qeInitAjax()) return;
 
try { qeLoadExternalScripts(); } catch (e) {}
 
qeChangeSectionLinks();
}
 
function qeLoadExternalScripts()
{
// load Cacycle's diff script if not loaded
if (typeof(WDiffString) != 'function') ImportScriptPlain(qeResource('diff'));
 
// load search script
ImportScriptPlain(qeResource('search'));
 
// load stylesheet
ImportCSS(qeResource('style'));
}
 
// wrapper functions for ImportScriptEx
function ImportScriptPlain(script) { ImportScriptEx(script, false); }
function ImportCSS(css) { ImportScriptEx(css, true); }
 
function ImportScriptEx(script, css)
{
var head = document.getElementsByTagName('head')[0];
 
var link = document.createElement(css?'link':'script');
link.setAttribute('charset',        'utf-8');
link.setAttribute('type',           css?'text/css':'text/javascript');
link.setAttribute(css?'href':'src', script);
 
if (css) link.setAttribute('rel', 'stylesheet');
 
head.appendChild(link);
}
 
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=';
 
// get all sections
var sections = qeGetElementsByClassName('span', 'editsection');
var jumptonav = document.getElementById('jump-to-nav');
 
// 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.nodeType == 1 && node.nodeName != 'SCRIPT') // avoid displaying in-<body> scripts
qeSections[0].push(node);
node = node.nextSibling;
}
 
// Link hinzufügen
var newspan = document.createElement('span');
newspan.style.fontSize   = '8pt';
newspan.style.marginLeft = '10px';
newspan.dir              = 'ltr';
 
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(']'));
 
//    not appended to heading anymore
//    heading.appendChild(newspan);
 
var cs = document.getElementById('contentSub');
cs.style.display = 'block';
cs.appendChild(newspan);
 
}
} // qeEnableSection0
 
 
// Abschnitte
for (i = 0; i < sections.length; i++)
{
// Section-Link suchen
var link = sections[i].childNodes[1].href;
 
var section = null, match = null;
 
if (match = /section=([0-9]+)/.exec(link))
var section = +match[1];
else break;
if (!section) continue;
 
sections[i].style.fontSize = '8pt';
 
// 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
var hx = sections[i].parentNode;
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))
{
if (node.nodeType == 1)
qeSections[section].push(node);
 
node = node.nextSibling;
}
}
}
 
function qeEditSection(section)
{
if (qeRequestState || !qeEditLink) return;
 
section = parseInt(section);
 
// es wird bereits ein Abschnitt bearbeitet
// wenn es der aktuelle ist -> Bearbeiten abbrechen, sonst nichts tun
if (qeEdit != -1)
{
if (qeEdit == section) qeAbortEdit();
return;
}
 
qeEdit = section;
 
// save body.ondblclick
if (document.getElementsByTagName('body')[0].getAttribute('ondblclick'))
{
qeOnDoubleClick = document.getElementsByTagName('body')[0].getAttribute('ondblclick');
document.getElementsByTagName('body')[0].setAttribute('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 (i == 0) links[i].parentNode.style.display = 'none';
 
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') + '...';
////
 
// save textboxheight
if (!qeTextboxHeightPixel)
qeTextboxHeightPixel = qeGetStyle(document.getElementById('wpTextbox1'), 'height') ||
Math.Round(qeTextboxHeight * 16.8) + 'px';
 
// make sure the QuickEdit tab is activated and toolbar is hidden
qeSwitch(0);
qeSetToolbar(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 (i == 0) links[i].parentNode.style.display = 'inline';
 
if (links[i].id != 'sectionlink-' + qeEdit)
links[i].style.color = null;
}
 
// make sure cancel link does not look hovered anymore
qeTabMouseOverOut(document.getElementById('qeTabCancel'), 1);
 
qeParent.parentNode.removeChild(qeParent);
qeForm.firstChild.childNodes[4].value = '';
 
qeEdit = -1;
// qeRequest.abort();
 
qeRequestState = REQ_IDLE;
 
qeOriginalText = null;
 
// restore body.ondblclick
if (qeOnDoubleClick)
document.getElementsByTagName('body')[0].setAttribute('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 [CSS]
var ul = document.createElement('ul');
ul.className          = 'qeTabs';
 
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);
 
// [CSS]
li1.id                 = 'qeTabEdit';
li1.title              = qePhrase('tQuickEdit');
li1.className          = 'qeTabs';
li1.setAttribute('onmouseover', 'qeTabMouseOverOut(this, 0)');
li1.setAttribute('onmouseout',  'qeTabMouseOverOut(this, 1)');
 
var li2 = li1.cloneNode(true);
li2.id = 'qeTabPreview';
li2.title = qePhrase('tLivePrev');
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';
li1.style.zIndex       = '3';
 
// tab 2a - diff mode
var li2a = li2.cloneNode(true);
li2a.id                = 'qeTabDiff';
li2a.title             = qePhrase('tDiff');
li2a.firstChild.href   = 'javascript:qeSwitch(2)';
li2a.firstChild.firstChild.nodeValue = qePhrase('diff');
 
// tab 3
var li4 = li2.cloneNode(true);
li4.id                 = 'qeTabSubmit';
li4.style.marginLeft   = '16px';
li4.title              = qePhrase('tSubmit');
li4.firstChild.href    = 'javascript:qeSubmit(0)';
li4.firstChild.firstChild.nodeValue = qePhrase('submit');
 
// tab 4
var li5 = li2.cloneNode(true);
li5.id                 = 'qeTabRealPreview';
li5.title              = qePhrase('tPreview');
li5.firstChild.href    = 'javascript:qeSubmit(1)';
li5.firstChild.firstChild.nodeValue = qePhrase('preview');
 
// tab 5
var li6 = li2.cloneNode(true);
li6.id                 = 'qeTabCancel';
li6.title              = qePhrase('tCancel');
li6.firstChild.href    = 'javascript:qeAbortEdit()';
li6.firstChild.firstChild.nodeValue = qePhrase('cancel');
 
var li8 = li2.cloneNode(true);
li8.id                 = 'qeTabSig';
li8.title              = qePhrase('tSig');
li8.style.marginLeft   = '16px';
li8.firstChild.href    = 'javascript:qeAddSignature()';
li8.firstChild.firstChild.nodeValue = qePhrase('sig');
 
if (qeEnableAccessKeys)
{
li1.firstChild.accessKey = 'e'; // quickedit
li2.firstChild.accessKey = 'p'; // live prev
li2a.firstChild.accessKey= 'v'; // diff
li4.firstChild.accessKey = 's'; // submit
li6.firstChild.accessKey = 'a'; // cancel
li8.firstChild.accessKey = 'f'; // sig
}
 
// [CSS]
var li3 = document.createElement('li');
li3.className         = 'qeTabsVersion';
li3.title             = 'MediaWiki QuickEdit ' + qeVersion;
var version = qePhrase('header') + ' ' + qeVersion.substr(0, qeVersion.indexOf('-'));
li3.appendChild(document.createTextNode(version));
 
if (qeLanguages[qeLang-1][0] != wgUserLanguage)
{
var a = document.createElement('a');
a.href             = 'http://de.wikipedia.org/wiki/Benutzer:ASM/quickedit-lang.js';
a.style.marginLeft = '3px';
a.style.color      = '#aaa';
a.appendChild(document.createTextNode('Add your translation!'));
li3.appendChild(a);
}
 
// options tab
var li7 = li2.cloneNode(true);
li7.id                 = 'qeTabPref';
li7.title              = qePhrase('pref');
li7.style.marginLeft   = '16px';
li7.firstChild.href    = 'javascript:qePreferences()';
li7.firstChild.firstChild.nodeValue = qePhrase('pref');
 
ul.appendChild(li3);
ul.appendChild(li1);
ul.appendChild(li2);
ul.appendChild(li2a);
 
ul.appendChild(li4);
ul.appendChild(li5);
ul.appendChild(li6);
 
if (qeSignature) ul.appendChild(li8); // sig tab
 
// ul.appendChild(li7); new feature: wip. temporarily disabled
 
qeParent.appendChild(ul);
 
// create frame div [CSS]
var framediv = document.createElement('div');
framediv.id             = 'framediv';
qeParent.appendChild(framediv);
 
// create form
qeForm = document.createElement('form');
qeForm.method = 'post';
qeForm.onsubmit = qeSubmitByReturn;
 
// create preview div [CSS]
qePreview = document.createElement('div');
qePreview.id             = 'qePreview';
qePreview.style.display  = 'none';
qePreview.style.overflow = qeScrollMode ? 'scroll':'hidden';
qePreview.style.backgroundColor = qeGetBGColor();
 
// create diff div [CSS]
qeDiff = document.createElement('div');
qeDiff.id             = 'qeDiff';
qeDiff.style.display  = 'none';
 
// 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(qeDiff);
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%';
newnode.style.border = '1px solid #ddd';
}
 
qeForm.firstChild.appendChild(newnode);
}
 
if (qeEnableAccessKeys) qeForm.firstChild.childNodes[4].accessKey = ',';
qeForm.firstChild.childNodes[4].tabIndex = 1;
 
// the toolbar
qeToolbar = document.createElement('div');
qeToolbar.id            = 'qeToolbar';
qeToolbar.style.display = 'block';
qeToolbar.style.minHeight='5px';
 
// close button [CSS]
var img = document.createElement('img');
img.id                  = 'qeClose';
img.title               = qePhrase('close');
img.src                 = qeResource('x');
img.setAttribute('onclick', 'qeSetToolbar(0)');
 
// search box
var search = document.createElement('div');
search.id                 = 'qeSearch';
search.style.marginTop    = '0.4em';
search.style.marginBottom = '0.4em';
 
qeCreateSearchBox(search);
 
// special chars
var chars = document.createElement('div');
chars.id  = 'specialchars-container';
chars.style.overflow     = 'hidden';
chars.style.marginBottom = '0.2em';
 
qeToolbar.appendChild(img);
qeToolbar.appendChild(search);
qeToolbar.appendChild(chars);
qeForm.appendChild(qeToolbar);
 
// create bottom bar
newnode = document.createElement('div');
newnode.style.paddingTop= '5px';
newnode.style.borderTop = '1px dotted #aaa';
 
// mini toolbar (lower right corner)
var span = document.createElement('span');
span.style.cssFloat     = 'right';
span.style.verticalAlign= 'middle';
span.style.marginTop    = '0.2em';
 
// search box icon [CSS]
var img = document.createElement('img');
img.id                  = 'icon-search';
img.src                 = qeResource('searchbox');
img.title               = qePhrase('searchbox');
img.setAttribute('onclick', 'qeSetToolbar(1)');
span.appendChild(img);
 
// special chars icon
var img = img.cloneNode(false);
img.id                  = 'icon-specialchars';
img.src                 = qeResource('chars');
img.title               = qePhrase('chars');
img.style.borderLeft    = '1px solid #ccc';
img.setAttribute('onclick', 'qeSetToolbar(2)');
span.appendChild(img);
 
// scroll icon
var img = img.cloneNode(false);
img.src                 = null;
img.title               = null;
img.id                  = 'icon-scroll';
img.style.display       = 'none'; // hidden by default (only visible in preview mode)
img.setAttribute('onclick', 'qeToggleScroll()');
span.appendChild(img);
 
newnode.appendChild(span);
 
// Speichern
var c = document.createElement('a');
c.href         = 'javascript:qeSubmit(0)';
c.title        = qePhrase('tSubmit');
c.style.cursor = 'pointer';
c.appendChild(document.createTextNode(qePhrase('submit')));
newnode.appendChild(c);
 
// Vorschau
newnode.appendChild(document.createTextNode(' '));
 
c = document.createElement('a');
c.href             = 'javascript:qeSubmit(1)';
c.title            = qePhrase('tPreview');
c.style.marginLeft = '5px';
c.style.cursor     = 'pointer';
c.appendChild(document.createTextNode(qePhrase('preview')));
newnode.appendChild(c);
 
// Zusammenfassung
newnode.appendChild(document.createTextNode(' '));
 
c = document.createElement('input');
c.type             = 'text';
c.size             = '70';
c.id               = 'qeSummary';
c.maxLength        = '200';
c.style.marginLeft = '5px';
c.tabIndex         = 2;
c.addEventListener('keydown', qeSubmitByReturn, false);
newnode.appendChild(c);
 
// 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;
checkboxes.childNodes[0].title = qePhrase('tMinor');
 
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].title            = qePhrase('tMinor');
 
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;
checkboxes.childNodes[3].title = qePhrase('tWatch');
 
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].title            = qePhrase('tWatch');
 
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;
 
// store the original text for diff
qeOriginalText = wpTextbox1;
}
 
function qeSetToolbar(type)
{
var search = document.getElementById('qeSearch'),
chars  = document.getElementById('specialchars-container'),
close = document.getElementById('qeClose');
 
search.style.display = (type == 1)?'block':'none';
chars.style.display = (type == 2)?'block':'none';
 
close.style.display = (type != 0)?'block':'none';
}
 
function qeToggleScroll()
{
if (qeMode != MODE_PREVIEW) return;
 
qeScrollMode = !qeScrollMode;
 
var img = document.getElementById('icon-scroll');
img.src   = qeScrollMode ? qeResource('arrowdown') : qeResource('arrowup');
img.title = qeScrollMode ? qePhrase('scrolloff'): qePhrase('scrollon');
 
qePreview.style.height   = qeScrollMode ? qeTextboxHeightPixel : null;
qePreview.style.overflow = qeScrollMode ? 'scroll' : 'hidden';
}
 
// QuickEdit 2.3: Search
 
function qeCreateSearchBox(node)
{
sr$f = node;
 
node.style.color    = '#888';
node.style.fontSize = '0.83em';
 
node.appendChild(document.createTextNode(qePhrase('srsearch') + ': '));
 
// search box
var input = document.createElement('input');
input.id = 'srSearch';
input.type = 'text';
input.style.marginRight = '0.7em';
input.setAttribute('onkeypress', 'event.which == 13 && srNext()');
node.appendChild(input);
 
sr$s = input;
 
node.appendChild(document.createTextNode(qePhrase('srreplace') + ': '));
 
// replace box
input = input.cloneNode(false);
input.id = 'srReplace';
node.appendChild(input);
 
sr$r = input;
 
// the find and replace-links
var a = document.createElement('a');
a.href             = 'javascript:srBack()';
a.style.color      = '#888';
a.appendChild(document.createTextNode('<'));
node.appendChild(a);
 
var links = [['srNext()',             '0.4em', qePhrase('srfind') + ' >'],
['srReplace();srBack()', '1em',   '<'],
['srReplace()',          '0.4em', qePhrase('srreplace')],
['srReplace;srNext()',   '0.4em', '>'],
['srReplaceall()',       '1em',   qePhrase('srreplaceall')]];
 
for (var i = 0; i < links.length; i++)
{
var a = a.cloneNode(false);
a.href             = 'javascript:' + links[i][0];
a.style.marginLeft = links[i][1];
a.appendChild(document.createTextNode(links[i][2]));
node.appendChild(a);
}
 
// two checkboxes
var input = document.createElement('input');
input.id               = 'srCase';
input.type             = 'checkbox';
input.style.marginLeft = '1em';
input.setAttribute('onclick', 'document.getElementById("srSearch").focus()');
 
var label = document.createElement('label');
label.htmlFor          = 'srCase';
label.appendChild(document.createTextNode(qePhrase('srmatchcase')));
 
node.appendChild(input);
node.appendChild(label);
 
sr$mc = input;
 
var input = input.cloneNode(false);
var label = label.cloneNode(false);
input.id               = 'srRegexp';
label.htmlFor          = 'srRegexp';
label.appendChild(document.createTextNode(qePhrase('srregexp')));
 
node.appendChild(input);
node.appendChild(label);
 
sr$re = input;
 
// set up searchbox.js specific variables
sr$t = qeForm.firstChild.childNodes[4];
}
 
 
// QuickEdit 2.1: Preferences stuff
 
function qePreferences()
{
if (qeMode == MODE_PREF)
{
qePrefMode = false;
qeDestroyPrefForm();
return;
}
 
qePrefMode = true;
qeMakePrefForm();
}
 
function qeMakePrefForm()
{
// set the style of the pref tab selected
var tab = document.getElementById('qeTabPref');
tab.style.border       = '1px solid #888';
tab.style.borderBottom = 'none';
tab.style.fontWeight   = 'bold';
tab.style.marginLeft   = '0px';
 
// hide preview div, the form and the other tabs
qeForm.style.display    = 'none';
qePreview.style.display = 'none';
 
var ul = qeParent.firstChild;
for (var i = 0; i < ul.childNodes.length && ul.childNodes[i] != tab; i++)
ul.childNodes[i].style.display = 'none';
 
// create pref div
qePref = document.createElement('div');
qePref.style.textAlign  = 'center';
qePref.style.minHeight  = '200px';
qePref.style.lineHeight = '2em';
qePref.style.border     = '1px dotted #aaa';
qePref.style.backgroundColor = '#fff';
 
var h = document.createElement('div');
h.style.borderBottom    = '1px solid #aaa';
h.style.textAlign       = 'left';
h.style.fontSize        = '14px';
h.style.fontWeight      = 'bold';
h.style.paddingLeft     = '10px';
h.style.margin          = '20px 50px';
h.appendChild(document.createTextNode(qePhrase('prefheading')));
 
qePref.appendChild(h);
 
for (var i = 0; i < qeOptions.length; i++)
{
var name = qeOptions[i][0], type = qeOptions[i][1], defaultval = qeOptions[i][2],
userval = qeOptions[i][3];
 
if (!userval) userval = defaultval;
 
var e = document.createElement('input'), // input element
d = document.createElement('label'); // description
 
// set input element attributes
e.id = 'o-' + name;
e.name = e.id;
if (type == 'bool')
{
e.type = 'checkbox';
e.checked = (userval == 'true');
}
 
// set description attributes
d.htmlFor = e.id;
d.style.fontWeight  = 'bold';
d.style.marginRight = '5px';
d.appendChild(document.createTextNode(qePhrase('o' + name)));
 
qePref.appendChild(d);
qePref.appendChild(e);
 
if (i != qeOptions.length - 1)
qePref.appendChild(document.createElement('br'));
}
 
// insert node before preview
qePreview.parentNode.insertBefore(qePref, qePreview);
}
 
function qeDestroyPrefForm()
{
qePref.parentNode.removeChild(qePref);
qePref = null;
 
// restore: form, tabs
qeForm.style.display = 'block';
 
var ul = qeParent.firstChild;
for (var i = 0; i < ul.childNodes.length; i++)
ul.childNodes[i].style.display = 'inline';
 
// reset tab style
var tab = document.getElementById('qeTabPref');
tab.style.border       = '1px solid #aaa';
tab.style.borderBottom = 'none';
tab.style.fontWeight   = 'normal';
tab.style.marginLeft   = '16px';
 
qeSwitch(0); // make sure to get back into edit mode
}
 
 
// QuickEdit 2: Preview stuff
 
function qeSwitch(type)
{
if (qeEdit == -1 || qeRequestState || qeMode == MODE_PREF) return;
 
if (type == 3 && typeof(WDiffString) != 'function') // diff mode
{
qeDiff.appendChild(document.createTextNode('Error: Couldn\'t load diff.js'));
return;
}
 
switch (type)
{
case 1:   var lid = document.getElementById('qeTabPreview'); break;
case 2:   var lid = document.getElementById('qeTabDiff'); break;
default: var lid = document.getElementById('qeTabEdit'); break;
}
 
switch (qeMode)
{
case MODE_PREVIEW: var lia = document.getElementById('qeTabPreview'); break;
case MODE_DIFF:    var lia = document.getElementById('qeTabDiff'); break;
default:           var lia = document.getElementById('qeTabEdit'); break;
}
 
lia.style.border = '1px solid #aaa';
lia.style.fontWeight = 'normal';
lia.style.zIndex = '1';
 
lid.style.border = '1px solid #888';
lid.style.fontWeight = 'bold';
lid.style.zIndex = '3';
 
lia.style.borderBottom = lid.style.borderBottom = '1px none #aaa';
 
// now check if there is any change
type = parseInt(type);
if (type == qeMode) return;
 
qeMode = type;
 
if (qeMode != MODE_DIFF) qeDiff.innerHTML = '';
 
// switch to preview
if (qeMode == MODE_PREVIEW)
{
// set scroll mode image
var img = document.getElementById('icon-scroll');
img.src   = qeScrollMode ? qeResource('arrowdown') : qeResource('arrowup');
img.title = qeScrollMode ? qePhrase('scrolloff'): qePhrase('scrollon');
img.style.display = 'inline';
 
// set preview height
if (qeScrollMode) qePreview.style.height = qeTextboxHeightPixel;
 
// set bg color according to the background of the current section
qePreview.style.backgroundColor =
qeGetBGColorOf(document.getElementById('section-' + qeEdit))
|| qeGetBGColor();
 
// remove all child nodes from previous previews, if any
for (var i = 1; i < qePreview.childNodes.length; i++)
qePreview.removeChild(qePreview.childNodes[i]);
 
// hide quickedit, hide diff
qeForm.firstChild.style.display = 'none';
qeDiff.style.display = 'none';
 
// show preview
qePreview.style.display = 'block';
qePreview.firstChild.style.display = 'block';
 
qeLoadPreview();
}
 
else if (qeMode == MODE_QUICKEDIT)
{
// hide diff, hide preview
qeDiff.style.display = 'none';
qePreview.style.display = 'none';
document.getElementById('icon-scroll').style.display = 'none';
 
// show quickedit
qeForm.firstChild.style.display = 'block';
}
 
else // MODE_DIFF
{
// hide quickedit, hide preview
qeForm.firstChild.style.display = 'none';
qePreview.style.display = 'none';
document.getElementById('icon-scroll').style.display = 'none';
 
// show diff
qeDiff.style.display = 'block';
qeDiff.style.height = qeTextboxHeightPixel;
 
qeLoadDiff();
}
}
 
function qeLoadDiff()
{
	var currenttext = document.getElementById('wpTextbox1').value;
 
	qeDiff.innerHTML = WDiffShortenOutput(WDiffString(qeOriginalText, currenttext));
 
	var div = document.createElement('div');
	div.style.textAlign   = 'right';
div.style.position    = 'relative';
div.style.bottom      = '10px';
 
var span = document.createElement('span');
span.style.fontSize  = '8pt';
span.style.color     = '#aaa';
span.style.marginRight = '10%';
 
	 span.appendChild(document.createTextNode('Using '));
 
var a = document.createElement('a');
a.href                 = qeResource('diffscript');
a.style.textDecoration = 'underline';
a.style.color          = '#aaa';
a.appendChild(document.createTextNode('diff.js'));
 
	 span.appendChild(a);
	 span.appendChild(document.createTextNode(' by Cacycle'));
 
	div.appendChild(span);
 
	qeDiff.appendChild(div);
}
 
function qeLoadPreview()
{
if (qeEdit == -1 || qeRequestState || !qeEditLink || qeMode != MODE_PREVIEW || !qeFormAction)
return;
 
var link = qeEditLink + qeEdit;
qeRequestState = REQ_SUBMIT;
 
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 + '=' + encodeURIComponent(inputs[i].value);
 
str += '&wpPreview=Preview' +
'&wpTextbox1=' +
encodeURIComponent(document.getElementById('wpTextbox1').value);
 
return str.substr(1);
}
 
function qeTabMouseOverOut(obj, out)
{
var coloronly = false;
/* if (obj.id == 'qeTabEdit' || obj.id == 'qeTabPreview' || obj.id == 'qeTabPref')
{
if (qeMode == MODE_PREF)
{
if (obj.id == 'qeTabPref') coloronly = true;
}
*/
if ((qeMode == MODE_PREVIEW && obj.id == 'qeTabPreview') ||
(qeMode == MODE_QUICKEDIT && obj.id == 'qeTabEdit') ||
(qeMode == MODE_DIFF && obj.id == 'qeTabDiff'))
coloronly = true;
// }
 
obj.style.backgroundColor = out?'#fafafa':'#fff';
 
if (!coloronly)
{
obj.style.borderColor = out?'#aaa':'#888';
obj.style.zIndex      = out?1:3;
}
}
 
// 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 = REQ_RECEIVE;
 
qeRequest.onreadystatechange = qeAjaxResponse;
 
qeRequest.open('GET', link, true);
qeRequest.send(null);
}
 
 
function qeAjaxResponse()
{
if (!qeRequestState)
{
alert('QuickEdit Fehler: qeAjaxResponse');
return;
}
 
// receive
if (qeRequestState == REQ_RECEIVE && qeEdit != -1)
{
if (qeRequest.readyState != 4 || qeRequest.status != 200)
return;
 
qeRequestState = REQ_IDLE;
 
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 wpStarttime, wpEdittime, wpSummary,
wpEditToken, wpAutoSummary, wpWatchthis;
 
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;
 
var specialchars = document.getElementById('specialchars-container');
if (specialchars.childNodes.length == 0 && xml.getElementById('specialchars'))
{
var node = xml.getElementById('specialchars').cloneNode(true);
node.style.background = 'none';
node.style.border     = 'none';
node.style.fontSize   = '8pt';
 
for (var i = 0; i < node.childNodes.length; i++)
if (node.childNodes[i].nodeName == 'A')
{
node.removeChild(node.childNodes[i]);
node.removeChild(node.childNodes[i+1]);
break;
}
 
specialchars.appendChild(node);
 
addCharSubsetMenu(); // wikipedia script
}
 
// sollte nie passieren, wenn doch -> fatal error
if (wpSection != qeEdit)
{
qeAlert(qePhrase('varmismatch'));
qeRequestState = REQ_IDLE;
qeAbortEdit();
return;
}
 
qeFillForm(formaction, wpStarttime, wpEdittime, wpSummary, wpTextbox1,
wpEditToken, wpAutoSummary, wpWatchthis);
return;
}
 
// preview (submit)
if (qeRequestState == REQ_SUBMIT && qeEdit != -1)
{
if (qeRequest.readyState != 4 || qeRequest.status != 200)
return;
 
qeRequestState = REQ_IDLE;
 
try
{
var xml = qeRequest.responseXML;
var prev = xml.getElementById('wikiPreview').cloneNode(true);
}
catch (e)
{
// try to fix it, then try to parse again
try
{
xml = qeFixXML(qeRequest.responseText);
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(e)
{
if (e && e.keyCode == 13) 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('<h1 class="firstHeading">');
var pos2 = text.indexOf('</h1>');
if (pos == -1 || pos2 == -1) return null;
 
text = text.substring(0, pos) + text.substring(pos2+5);
 
/************  removed, should be working now
 
// two workarounds for wiki commons
if (wgServer.indexOf('commons') != -1)
{
// replace the old <br>-tags with <br />
text = text.replace(/<br>/g, '<br />');
 
// append a </p> which is missing at the end of the copyright notice below the textarea
backsl = String.fromCharCode(92); // as we know, MediaWiki strips backslashes out
 
regex = eval('/' + 'rel="nofollow">Wikipedia<' + backsl + '/a><' + backsl + '/span>/');
text = text.replace(regex, '$0'+'</p>');
}
************/
 
var parser = new DOMParser();
var newdoc = parser.parseFromString(text, "text/xml");
return newdoc;
}
 
// Signature
 
function qeAddSignature()
{
wpTextbox1 = document.getElementById('wpTextbox1');
// IE support
if (document.selection)
{
wpTextbox1.focus();
sel = document.selection.createRange();
sel.text = qeSignature;
}
 
// MOZILLA/NETSCAPE support
else if (wpTextbox1.selectionStart || wpTextbox1.selectionStart == '0')
{
var startpos = wpTextbox1.selectionStart;
var endpos   = wpTextbox1.selectionEnd;
 
wpTextbox1.value = wpTextbox1.value.substring(0, startpos)
+ qeSignature
+ wpTextbox1.value.substring(endpos, wpTextbox1.value.length);
 
wpTextbox1.focus();
 
endpos += qeSignature.length;
if (endpos > wpTextbox1.length) endpos = wpTextbox1.length;
 
wpTextbox1.setSelectionRange(endpos, endpos);
}
 
else
{
wpTextbox1.value += qeSignature;
wpTextbox1.focus();
}
}
 
 
 
// Language stuff
 
function qeGetBGColor()
{
var ret = qeGetStyle(document.getElementById('content'), 'background-color');
return ret?ret:'#fff';
}
 
function qeGetBGColorOf(node)
{
var col = qeGetStyle(node, 'background-color');
 
while (node && (!col || col == 'transparent'))
{
node = node.parentNode;
col = qeGetStyle(node, 'background-color');
}
 
return (node && col)?col:null;
}
 
function qeGetStyle(elem, style)
{
if (document.defaultView)
return document.defaultView.getComputedStyle(elem, null).getPropertyValue(style);
return null;
}
 
function qeSetLang()
{
// default: English
qeLang = 2;
 
for (var i = 0; i < qeLanguages.length; i++)
if (qeLanguages[i][0] == wgUserLanguage)
{
qeLang = i + 1;
break;
}
 
qeSetPrefix();
}
 
function qePhrase(name)
{
for (var i = 0; i < qePhrases.length; i++)
if (qePhrases[i][0] == name)
return qePhrases[i][qeLang];
 
return 'UNDEFINED PHRASE: ' + name;
}
 
function qeSetPrefix()
{
// ausgeliehen vom Wikipedia-Script
var pref = 'Alt';
 
if (is_safari || navigator.userAgent.toLowerCase().indexOf('mac') + 1
|| navigator.userAgent.toLowerCase().indexOf('konqueror') + 1 )
pref = qePhrase('strg');
else if (is_opera)   pref = qePhrase('shift') + '-Esc';
else if (is_ff2_x11) pref = qePhrase('strg') + '-' + qePhrase('shift');
else if (is_ff2_win) pref = 'Alt-' + qePhrase('shift');
pref += '-';
 
// p: number of the entry in the current phrase which is to be copied (EN if available, DE otherwise)
 
for (var i = 0; i < qePhrases.length; i++)
{
// check for KEY:
if (qePhrases[i][0].charAt(0) == 't')
for (var j = 1; j < qePhrases[i].length; j++)
qePhrases[i][j] = qePhrases[i][j].replace(/KEY:(.)/, pref + '$1');
 
for (var j = 1; j < qePhrases[i].length; j++)
{
if (j < 3 && qePhrases[i][j].length > 0) var p = j;
 
if (qePhrases[i][j].length == 0) qePhrases[i][j] = qePhrases[i][p] + '**';
}
}
}
 
function qeResource(name)
{
var commonsurl = 'http://upload.wikimedia.org/wikipedia/commons/';
var wikiurl    = 'http://XX.wikipedia.org/w/index.php?title=TT&action=raw&ctype=text/TYPE';
 
for (var i = 0; i < qeResources.length; i++)
if (qeResources[i][0] == name)
{
var res = qeResources[i][1];
 
if (res.indexOf('c:') == 0)
return commonsurl + res.substr(2);
 
var type = 0;
if (res.indexOf('js:') == 0) type = 1;
else if (res.indexOf('css:') == 0) type = 2;
 
if (type)
{
wikiurl = wikiurl.replace(/XX/, res.substring(res.indexOf(':') + 1,
res.indexOf(':', res.indexOf(':')+1)));
wikiurl = wikiurl.replace(/TT/, res.substring(res.indexOf(':', res.indexOf(':')+1)+1));
wikiurl = wikiurl.replace(/TYPE/, (type == 1)?'javascript':'css');
 
return wikiurl;
}
 
return qeResources[i][1];
}
 
return '';
}
 
var qeResources = [
['arrowup',   'c:1/13/WikEd_align_top.png'],
['arrowdown', 'c:a/a8/WikEd_align_down.png'],
 
['chars',     'c:0/0d/WikEd_case_sensitive.png'],
['searchbox', 'c:3/31/WikEd_preview.png'],
['x',         'c:6/61/Crystal_128_error.png'],
 
['language',  'js:de:Benutzer:ASM/quickedit-lang.js'],
['diff',      'js:en:User:Cacycle/diff.js'],
['style',     'css:de:Benutzer:ASM/quickedit.css'],
['diffscript','http://wiki.riteme.site/wiki/User:Cacycle/diff.js'],
['search',    'js:de:Benutzer:ASM/quickedit-search.js']
];
 
 
// import languages from external script ([[Benutzer:ASM/quickedit-lang.js]])
ImportScriptPlain(qeResource('language'));
 
 
// array content: var name | var type | default value | user value
// phrase name describing the option is is "'o' + var name"
// the user value will be read by the script from a cookie
// if there is no value set, the default value will be used
 
var qeOptions = [
['qeScrollMode', 'bool', 'true',  null],
['qeStickyMode', 'bool', 'false', null]
];
 
 
/*</pre>*/
 
 
/*<pre>*/
 
// from [[MediaWiki:Onlyifediting.js]]
 
function addCharSubsetMenu()
{
var specialchars = document.getElementById('specialchars');
 
if (specialchars)
{
switch(wgContentLanguage){
case "ca":
edittoolsOptions=
/*català*/
["matemàtiques","fonètica","diacrítiques","ciríl·lic","alt alemany antic",
"anglés antic","àrab","berber","bosni/serbocroata","castellà","escandinau",
"eslovac","esperanto","estonià","francés","gal·lés","grec","grec antic",
"hawaià","hebreu","holandés","hongarés","indoeuropeu","irlandés",
"islandés","italià","japonés (romanji)","jiddisch","letó","lituà","maltés",
"navajo i apatxe", "pinyin","polonés","portugués","romanés","serbi",
"turc i ll. turqueses", "txec","vietnamita"]; break;
case "de":
edittoolsOptions=
/*Deutsch*/
["Standard","WikiSyntax","IPA-Lautschrift","Lateinisch","AHD","Altenglisch",
"Altgriechisch","Arabisch","DMG-Umschrift","Esperanto","Estnisch",
"Französisch","Galicisch","Griechisch","Hawaiianisch","Isländisch",
"Italienisch","Jiddisch","Katalanisch","Kroatisch","Kyrillisch",
"Lettisch","Litauisch","Maltesisch","Pinyin","Polnisch","Portugiesisch",
"Romanisch","Rumänisch","Serbisch","Skandinavisch","Slowakisch","Spanisch",
"Tschechisch","Türkisch","Ungarisch","Vietnamesisch"
]; break;
 
case "it":
edittoolsOptions=
/*Italiano*/
["Latino esteso","Wiki","Greco antico","Greco moderno","Cirillico","Arabo",
"Ebraico e yiddish","Armeno","Geroglifico","Vietnamita","IPA",
"Matematica"
]; break;
 
 
default : edittoolsOptions=["Your Edittools are not defined"];
}
 
var menu = '<select style="display:inline" onChange="chooseCharSubset(selectedIndex)">';
for(index in edittoolsOptions){
menu += '<option>' + edittoolsOptions[index] + '</option>';
}
menu += '</select>';
specialchars.innerHTML = menu + specialchars.innerHTML;
 
// Standard-CharSubset
chooseCharSubset(0);
}
}
 
// CharSubset-Auswahl
function chooseCharSubset(s)
{
var l = document.getElementById('specialchars').getElementsByTagName('p');
for (var i = 0; i < l.length ; i++)
{
l[i].style.display    = (i == s) ? 'inline'  : 'none';
l[i].style.visibility = (i == s) ? 'visible' : 'hidden'; // for the CSS-unsure it-wp ;)
}
}
 
/*</pre>*/