MediaWiki:Gadget-posting.js: Unterschied zwischen den Versionen
Aus Stupidedia, der sinnfreien Enzyklopädie!
Phorgo (Diskussion | Beiträge) K |
Phorgo (Diskussion | Beiträge) K |
||
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 143: | Zeile 143: | ||
function posting_createTextboxContent(section) { | function posting_createTextboxContent(section) { | ||
var toolbar = '<div id="toolbar"></div>'; | var toolbar = '<div id="toolbar"></div>'; | ||
− | var textarea = '<div style="margin-right: 7px;"><textarea id="wpTextbox1" rows="5"></textarea></div>'; | + | if ( navigator.appName != 'Microsoft Internet Explorer' && navigator.appName != 'Opera' ) { |
+ | var textarea = '<div style="margin-right: 7px;"><textarea id="wpTextbox1" rows="5"></textarea></div>'; | ||
+ | } | ||
+ | else { | ||
+ | var textarea = '<div style="margin-right: 7px;"><input type="text" id="wpTextbox1" size="80" /></div>'; | ||
+ | } | ||
var summaryField = '<div><label for="posting_summaryField">Bearbeitungszusammenfassung (optional):</label> <input type="text" size="50" id="posting_summaryField" /></div>'; | var summaryField = '<div><label for="posting_summaryField">Bearbeitungszusammenfassung (optional):</label> <input type="text" size="50" id="posting_summaryField" /></div>'; | ||
var options = '<div>Optionen (nur ändern, wenn notwendig): <input type="checkbox" id="posting_nolist" /> <label for="posting_nolist" title="Es wird kein * am Anfang des Textes gesetzt.">Kein Listenzeichen setzen</label> <input type="checkbox" id="posting_nosig" /> <label for="posting_nosig" title="Es wird keine Signatur am Ende gesetzt.">Keine Signatur setzen</label> <input type="checkbox" id="posting_nobreaks" /> <label for="posting_nobreaks" title="Zeilenumbrüche werden nicht automatisch in <br />s umgewandelt.">Zeilenumbrüche nicht umwandeln</label></div>'; | var options = '<div>Optionen (nur ändern, wenn notwendig): <input type="checkbox" id="posting_nolist" /> <label for="posting_nolist" title="Es wird kein * am Anfang des Textes gesetzt.">Kein Listenzeichen setzen</label> <input type="checkbox" id="posting_nosig" /> <label for="posting_nosig" title="Es wird keine Signatur am Ende gesetzt.">Keine Signatur setzen</label> <input type="checkbox" id="posting_nobreaks" /> <label for="posting_nobreaks" title="Zeilenumbrüche werden nicht automatisch in <br />s umgewandelt.">Zeilenumbrüche nicht umwandeln</label></div>'; | ||
Zeile 169: | Zeile 174: | ||
add2toolbar('javascript:insertTags("<math>", "</math>", "Formel hier einfügen")', 'http://www.stupidedia.org/skins/common/images/button_math.png', 'Mathematische Formel (LaTeX)'); | add2toolbar('javascript:insertTags("<math>", "</math>", "Formel hier einfügen")', 'http://www.stupidedia.org/skins/common/images/button_math.png', 'Mathematische Formel (LaTeX)'); | ||
add2toolbar('javascript:insertTags("<nowiki>", "</nowiki>", "Unformatierten Text hier einfügen")', 'http://www.stupidedia.org/skins/common/images/button_nowiki.png', 'Unformatierter Text'); | add2toolbar('javascript:insertTags("<nowiki>", "</nowiki>", "Unformatierten Text hier einfügen")', 'http://www.stupidedia.org/skins/common/images/button_nowiki.png', 'Unformatierter Text'); | ||
− | add2toolbar('javascript:insertTags("----", "", "")', 'http://www.stupidedia.org/skins/common/images/button_hr.png', 'Horizontale Linie (sparsam verwenden)'); | + | if ( navigator.appName != 'Microsoft Internet Explorer' && navigator.appName != 'Opera' ) { |
+ | add2toolbar('javascript:insertTags("----", "", "")', 'http://www.stupidedia.org/skins/common/images/button_hr.png', 'Horizontale Linie (sparsam verwenden)'); | ||
+ | } | ||
} | } | ||
Zeile 267: | Zeile 274: | ||
function posting_cleanPost(section, token) { | function posting_cleanPost(section, token) { | ||
− | if ( !document.getElementById("posting_nobreaks").checked ) { | + | if ( !document.getElementById("posting_nobreaks").checked && navigator.appName != 'Microsoft Internet Explorer' && navigator.appName != 'Opera' ) { |
var text = document.getElementById("wpTextbox1").value.replace(/\n/g, '<br />'); | var text = document.getElementById("wpTextbox1").value.replace(/\n/g, '<br />'); | ||
text = text.replace(/----<br \/>----/g, '----\n----'); | text = text.replace(/----<br \/>----/g, '----\n----'); |
Version vom 13. November 2011, 19:19 Uhr
//<syntaxhighlight lang="javascript">
/*
** Teil 0 — Vordefinierte Variablen
*/
// Signatur
if ( typeof(posting_signature) == 'undefined' ) {
if ( typeof(Signatur) == 'undefined' ) {
posting_signature = " — ~~~~";
}
else {
posting_signature = Signatur;
}
}
// Nicht-Diskussionsseiten, auf denen trotzdem gepostet werden soll
posting_talkpages = new Array (
"Stupidedia:Bilderwünsche",
"Stupidedia:Ersatzforum",
"Stupidedia:Feedback",
"Stupidedia:Ideenwelt",
"Stupidedia:Labor"
);
/*
** Teil 1 — Alles, was direkt beim Seitenaufruf gestartet wird
*/
// Programm initiieren
function posting_init() {
var isTalkpage = ( wgNamespaceNumber % 2 == 1 );
for ( i = 0; !isTalkpage && i < posting_talkpages.length; i++ ) {
isTalkpage = ( wgPageName == posting_talkpages[i].replace(" ", "_") );
}
if ( wgNamespaceNumber != -1 ) {
if ( document.getElementById("ca-edit").getElementsByTagName("a").innerHTML != 'Quelltext' ) {
if ( isTalkpage ) {
posting_createNewTopicLink();
if ( document.getElementsByName("sectioneditlink").length != 0 ) {
posting_createSectionPostingLinks();
}
else {
posting_createPostingLink();
}
}
else if ( document.getElementsByName("sectioneditlink").length != 0 ) {
posting_createSection0EditLink();
}
}
}
}
// Neues-Thema-Link erzeugen
function posting_createNewTopicLink() {
addTab('javascript:posting_openTextbox("new")', 'Neues Thema', 'ca-newTopic', document.getElementById("ca-addsection"), true);
}
// Neuer-Beitrag-Link erzeugen
function posting_createPostingLink() {
addTab('javascript:posting_openTextbox(0)', 'Neuer Beitrag', 'ca-newPost', document.getElementById("ca-edit"), true);
}
// Bearbeitungslink für Abschnitt 0 erzeugen
function posting_createSection0EditLink() {
var link = document.createElement("div");
link.style.height = '0px';
link.style.textAlign = 'right';
link.style.float = 'right';
link.style.position = 'relative';
link.style.right = '10px';
link.style.bottom = '28px';
link.style.fontSize = '10px';
link.innerHTML = '<a href="' + wgServer + '/stupi?title=' + encodeURIComponent(wgPageName) + '&action=edit§ion=0">Bearbeiten</a>';
document.getElementById("firstHeading").appendChild(link);
}
// Posting-Links erzeugen
function posting_createSectionPostingLinks() {
// Link für Abschnitt 0
var link = document.createElement("div");
link.style.height = '0px';
link.style.textAlign = 'right';
link.style.float = 'right';
link.style.position = 'relative';
link.style.right = '10px';
link.style.bottom = '28px';
link.style.fontSize = '10px';
link.innerHTML = '<a href="javascript:posting_openTextbox(0)">Neuer Beitrag</a> | <a href="' + wgServer + '/stupi?title=' + encodeURIComponent(wgPageName) + '&action=edit§ion=0">Bearbeiten</a>';
document.getElementById("firstHeading").appendChild(link);
// Links für Abschnitte 1 bis Schieß-mich-tot
var links = document.getElementsByName("sectioneditlink");
for ( var i = 0; links.length; i++ ) {
var sectionNumber = i + 1;
var link = document.createElement("span");
link.innerHTML = '<small><a href="javascript:posting_openTextbox(' + sectionNumber + ')">Neuer Beitrag</a> | </small>';
links[i].parentNode.parentNode.insertBefore(link, links[i].parentNode);
}
}
/*
** Teil 2 — Textfeld öffnen
*/
// Textbox erzeugen
function posting_openTextbox(section, jump) {
if ( document.getElementById("posting_textbox") ) {
document.getElementById("posting_textbox").parentNode.removeChild(document.getElementById("posting_textbox"));
}
var textbox = document.createElement("div");
textbox.id = 'posting_textbox';
textbox.innerHTML = '<br style="clear: both" /><form name="editform" id="editform" action="javascript:posting_getEditToken(\'' + section + '\')" style="padding: 10px; margin: 10px; border: 2px solid #000000;">' + posting_createTextboxContent(section) + '</div><br style="clear: both" />';
if ( section == 'new' || section == document.getElementsByName("sectioneditlink").length ) {
document.getElementById("bodyContent").appendChild(textbox);
}
else {
document.getElementsByName("sectioneditlink")[section].parentNode.parentNode.parentNode.parentNode.insertBefore(textbox, document.getElementsByName("sectioneditlink")[section].parentNode.parentNode.parentNode);
}
if ( jump != false ) {
location.hash = '#posting_textbox';
}
posting_add2toolbar();
init();
document.getElementById("wpTextbox1").focus();
}
// Inhalt der Textbox erzeugen
function posting_createTextboxContent(section) {
var toolbar = '<div id="toolbar"></div>';
if ( navigator.appName != 'Microsoft Internet Explorer' && navigator.appName != 'Opera' ) {
var textarea = '<div style="margin-right: 7px;"><textarea id="wpTextbox1" rows="5"></textarea></div>';
}
else {
var textarea = '<div style="margin-right: 7px;"><input type="text" id="wpTextbox1" size="80" /></div>';
}
var summaryField = '<div><label for="posting_summaryField">Bearbeitungszusammenfassung (optional):</label> <input type="text" size="50" id="posting_summaryField" /></div>';
var options = '<div>Optionen (nur ändern, wenn notwendig): <input type="checkbox" id="posting_nolist" /> <label for="posting_nolist" title="Es wird kein * am Anfang des Textes gesetzt.">Kein Listenzeichen setzen</label> <input type="checkbox" id="posting_nosig" /> <label for="posting_nosig" title="Es wird keine Signatur am Ende gesetzt.">Keine Signatur setzen</label> <input type="checkbox" id="posting_nobreaks" /> <label for="posting_nobreaks" title="Zeilenumbrüche werden nicht automatisch in <br />s umgewandelt.">Zeilenumbrüche nicht umwandeln</label></div>';
var topicField = '<div>Titel: <input type="text" size="50" id="posting_summaryField" /></div>';
var buttons = '<div><input type="submit" /> <input type="reset" /></div>';
if ( section == 'new' ) {
var textboxContent = topicField + toolbar + textarea + options + buttons;
}
else {
var textboxContent = toolbar + textarea + summaryField + options + buttons;
}
return textboxContent;
}
// Einige Standardknöppe zur Toolbar hinzufügen
function posting_add2toolbar() {
add2toolbar('javascript:insertTags("\'\'\'", "\'\'\'", "Fetter Text")', 'http://www.stupidedia.org/skins/common/images/de/button_bold.png', 'Fetter Text');
add2toolbar('javascript:insertTags("\'\'", "\'\'", "Kursiver Text")', 'http://www.stupidedia.org/skins/common/images/de/button_italic.png', 'Kursiver Text');
add2toolbar('javascript:insertTags("[[", "]]", "Link-Text")', 'http://www.stupidedia.org/skins/common/images/button_link.png', 'Interner Link');
add2toolbar('javascript:insertTags("[", "]", "http://www.example.com Link-Text")', 'http://www.stupidedia.org/skins/common/images/button_extlink.png', 'Externer Link (http:// beachten)');
add2toolbar('javascript:insertTags("[[:Datei:", "]]", "Beispiel.jpg")', 'http://www.stupidedia.org/skins/common/images/button_image.png', 'Dateilink');
add2toolbar('javascript:insertTags("<math>", "</math>", "Formel hier einfügen")', 'http://www.stupidedia.org/skins/common/images/button_math.png', 'Mathematische Formel (LaTeX)');
add2toolbar('javascript:insertTags("<nowiki>", "</nowiki>", "Unformatierten Text hier einfügen")', 'http://www.stupidedia.org/skins/common/images/button_nowiki.png', 'Unformatierter Text');
if ( navigator.appName != 'Microsoft Internet Explorer' && navigator.appName != 'Opera' ) {
add2toolbar('javascript:insertTags("----", "", "")', 'http://www.stupidedia.org/skins/common/images/button_hr.png', 'Horizontale Linie (sparsam verwenden)');
}
}
// Wikicode und HTML per Klick einfügen (Funktion aus den Kerndateien der Software kopiert und modifiziert, Lizenz siehe Spezial:Version
function insertTags( tagOpen, tagClose, sampleText ) {
var txtarea = document.getElementById("wpTextbox1");
var selText, isSample = false;
if ( document.selection && document.selection.createRange ) { // IE/Opera
// save window scroll position
if ( document.documentElement && document.documentElement.scrollTop ) {
var winScroll = document.documentElement.scrollTop
} else if ( document.body ) {
var winScroll = document.body.scrollTop;
}
// get current selection
txtarea.focus();
var range = document.selection.createRange();
selText = range.text;
// insert tags
checkSelectedText();
range.text = tagOpen + selText + tagClose;
// mark sample text as selected
if ( isSample && range.moveStart ) {
if ( window.opera ) {
tagClose = tagClose.replace(/\n/g,'');
}
range.moveStart('character', - tagClose.length - selText.length);
range.moveEnd('character', - tagClose.length);
}
range.select();
// restore window scroll position
if ( document.documentElement && document.documentElement.scrollTop ) {
document.documentElement.scrollTop = winScroll;
} else if ( document.body ) {
document.body.scrollTop = winScroll;
}
} else if ( txtarea.selectionStart || txtarea.selectionStart == '0' ) { // Mozilla
// save textarea scroll position
var textScroll = txtarea.scrollTop;
// get current selection
txtarea.focus();
var startPos = txtarea.selectionStart;
var endPos = txtarea.selectionEnd;
selText = txtarea.value.substring( startPos, endPos );
// insert tags
checkSelectedText();
txtarea.value = txtarea.value.substring(0, startPos)
+ tagOpen + selText + tagClose
+ txtarea.value.substring(endPos, txtarea.value.length);
// set new selection
if ( isSample ) {
txtarea.selectionStart = startPos + tagOpen.length;
txtarea.selectionEnd = startPos + tagOpen.length + selText.length;
} else {
txtarea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length;
txtarea.selectionEnd = txtarea.selectionStart;
}
// restore textarea scroll position
txtarea.scrollTop = textScroll;
}
function checkSelectedText() {
if ( !selText ) {
selText = sampleText;
isSample = true;
} else if ( selText.charAt(selText.length - 1) == ' ' ) { // exclude ending space char
selText = selText.substring(0, selText.length - 1);
tagClose += ' ';
}
}
}
/*
** Teil 3 — Beitrag absenden
*/
// Bearbeitungstoken holen
function posting_getEditToken(section) {
var request = sajax_init_object();
request.abort();
request.open('GET', 'http://www.stupidedia.org/api.php?format=xml&action=query&prop=info&intoken=edit&titles=' + encodeURIComponent(wgPageName), true);
request.send('');
request.onreadystatechange = function() {
if (request.readyState == 4){
var token = request.responseXML.getElementsByTagName("page")[0].getAttribute("edittoken");
posting_cleanPost(section, token);
}
}
}
// Beitrag bereinigen (Zeilenumbrüche raus, kein Listenzeichen bei bestimmten Vorlagen, etc...)
function posting_cleanPost(section, token) {
if ( !document.getElementById("posting_nobreaks").checked && navigator.appName != 'Microsoft Internet Explorer' && navigator.appName != 'Opera' ) {
var text = document.getElementById("wpTextbox1").value.replace(/\n/g, '<br />');
text = text.replace(/----<br \/>----/g, '----\n----');
text = text.replace(/----<br \/>/g, '----\n');
text = text.replace(/<br \/>----/g, '\n----');
}
else {
var text = document.getElementById("wpTextbox1").value;
}
var summary = document.getElementById("posting_summaryField").value;
var appendParameter = 'append';
var breakParameter = '\n';
var listParameter = '* ';
if ( section == 'new' ) {
appendParameter = '';
breakParameter = '';
}
if ( text.indexOf("{{C}}") == 0 || text.indexOf("{{N}}") == 0 || text.indexOf("{{P}}") == 0 || text.indexOf("{{OK}}") == 0 || document.getElementById("posting_nolist").checked ) {
listParameter = '';
}
if ( text.match(/~~~~$/) == '~~~~' || document.getElementById("posting_nosig").checked ) {
posting_signature = '';
}
var sectionParameter = section ? '§ion=' + section : '';
var summaryParameter = summary ? '&summary=' + encodeURIComponent(summary) : '';
var parameters = 'action=edit&title=' + encodeURIComponent(wgPageName) + '&' + appendParameter + 'text=' + encodeURIComponent(breakParameter + listParameter + text + posting_signature) + '&token=' + encodeURIComponent(token) + sectionParameter + summaryParameter;
if ( section == 'new' ) {
posting_sendPost(parameters, summary);
}
else {
posting_sendPost(parameters);
}
}
// Beitrag absenden
function posting_sendPost(parameters, topic) {
var request = sajax_init_object();
request.open('POST', wgServer + '/api.php', true);
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.setRequestHeader('Connection', 'keep-alive');
request.setRequestHeader('Content-length', parameters.length);
request.send(parameters);
request.onreadystatechange = function() {
if (request.readyState == 4) {
if ( topic ) {
location.hash = '#' + encodeURIComponent(topic);
}
location.reload(true);
}
}
}
if ( wgAction == 'view' ) {
addOnload(posting_init);
}
//</syntaxhighlight>