User:Greek2/monobook.js: Difference between revisions
Appearance
Content deleted Content added
No edit summary |
←Blanked the page |
||
Line 1: | Line 1: | ||
/*<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 + '§ion='; |
|||
// 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://en.wikipedia.org/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>*/ |