MediaWiki:Gadget-posting.js: Unterschied zwischen den Versionen

Aus Stupidedia, der sinnfreien Enzyklopädie!
Wechseln zu: Navigation, Suche
K
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&section=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&nbsp;Beitrag</a>&nbsp;|&nbsp;<a href="' + wgServer + '/stupi?title=' + encodeURIComponent(wgPageName) + '&action=edit&section=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&nbsp;Beitrag</a>&nbsp;|&nbsp;</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 ? '&section=' + 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>

Linktipps: Faditiva und 3DPresso