Widget:Neue Frage

Aus Stupidedia, der sinnfreien Enzyklopädie!
Wechseln zu: Navigation, Suche
<div id="wNewQuestion">
  <!-- Kasten mit Link -->
  <div id="wNewQuestion-linkBox">
    <a id="wNewQuestion-newLink" href="/stupi?title=Stupidedia:Hilft!/Neue_Frage&action=edit&summary=%5B%5BStupidedia%3AHilft!%7CNeue%20Frage%5D%5D&preload=Stupidedia:Hilft!/Vorlage">>>> Neue Frage stellen <<<</a>
  </div>
  <!-- Formular -->
  <form id="wNewQuestion-form" action="javascript:rein_damit();">
    <table id="wNewQuestion-table">
      <tr>
        <td colspan="2">In das große Textfeld kannst du jetzt deine Frage oder dein Problem in beliebiger Ausführlichkeit schreiben. In das kleine Textfeld weiter unten kommt ein zusammenfassender Fragesatz. Dieser darf maximal 255 Zeichen lang sein und folgende Sonderzeichen nicht enthalten: <code>{ } [ ] | < > #</code></td>
      </tr>
      <tr>
        <td colspan="2">Unwichtige Zusatzinfo für Nerds: Die Zusammenfassung ist keine Bearbeitungszusammenfassung, sondern der Titel der Seite im Fragennamensraum.</td>
      </tr>
      <tr>
        <td colspan="2">
          <textarea id="wNewQuestion-text" name="text" rows="5"></textarea></td>
      </tr>
      <tr>
        <td id="wNewQuestion-summaryLabelCell"><label for="wNewQuestion-summary">Zusammenfassung der Frage:</label></td>
        <td><input id="wNewQuestion-summary" type="text" name="title" maxlength="255" /></td>
      </tr>
      <tr id="wNewQuestion-watchRow">
        <td colspan="2">
          <input id="wNewQuestion-watch" type="checkbox" name="watch" value="true" />
          <label for="wNewQuestion-watch">Frage auf die <a href="/stupi/Spezial:Beobachtungsliste" title="Spezial:Beobachtungsliste" target="_blank">Beobachtungsliste</a> setzen</label>
        </td>
      </tr>
      <tr id="wNewQuestion-captchaHeader">
        <td colspan="2"></td>
      </tr>
      <tr id="wNewQuestion-captchaBody">
        <td><label for="wNewQuestion-captchaText">Antwort:</label></td>
        <td><input id="wNewQuestion-captchaText" type="text" name="captchatext" /></td>
      </tr>
      <tr>
        <td colspan="2">
          <input id="wpSubmit" type="submit" value="Absenden" />
          <input id="wpPreview" type="submit" value="Vorschau anzeigen" />
          <input type="reset" value="Zurücksetzen" />
          <input type="button" value="Schließen" />
        </td>
      </tr>
      <tr id="wNewQuestion-message">
        <td colspan="2"></td>
      </tr>
    </table>
    <input id="wNewQuestion-captchaId" type="hidden" name="captchaid" value="" />
  </form>
</div>

<style type="text/css">
#wNewQuestion-linkBox {
    text-align: center;
}

#wNewQuestion-newLink {
    font-size: 20px;
    font-weight: bold;
}

#wNewQuestion-form,
#wNewQuestion-captchaHeader,
#wNewQuestion-captchaBody {
    display: none;
}

#wNewQuestion-table,
#wNewQuestion-table input[type="text"] {
    width: 100%;
}

#wNewQuestion-table td {
    padding: 0px;
}

#wNewQuestion-summaryLabelCell {
    width: 180px;
}

#wNewQuestion-message td {
    font-weight: bold;
}
</style>

<script type="text/javascript">
$(document).ready(function() {

  function enableForm() {
    $('#wNewQuestion-form input[type="submit"]').prop('disabled', false);
  }

  function disableForm() {
    $('#wNewQuestion-form input[type="submit"]').prop('disabled', true);
  }

  function displayMessage(text, color) {
    var message = $('#wNewQuestion-message td');

    if (!text) {
      message.slideUp('fast');
      return;
    }

    // Text unfett machen, wenn color === null
    if (color === null) {
      message.css('font-weight', 'normal');
    }
    else {
      message.css('font-weight', '');
    }

    // Farbe nullen, wenn nicht angegeben
    if (!color) {
      color = '';
    }

    message.css('color', color).html(text).slideDown('fast');
  }

  function displayError(error) {
    var code = error.code;
    var info = error.info;

    switch (code) {
      // Benutzer wurde gesperrt
      case 'blocked':
        // Sperrinfo abfragen
        api.request({
          action: 'query',
          meta: 'userinfo',
          uiprop: 'blockinfo'
        }, function(data) {
          var blocker = data.query.userinfo.blockedby;
          var reason = data.query.userinfo.blockreason || 'keine Begründung angegeben';
          // Sperrtext holen
          api.request({
            action: 'query',
            meta: 'allmessages',
            ammessages: 'blockedtext',
            amargs: blocker + '|' + reason.replace(/\|/g, '{{!}}')
          }, function(data) {
            // Sperrtext parsen
            api.request({
              action: 'parse',
              text: data.query.allmessages[0]['*']
            }, function(data) {
              displayMessage(data.parse.text['*'], null);
            });
          });
        });
        break;

      // Automatisch gesperrt
      case 'autoblocked':
        displayMessage('Offensichtlich wurdest du durch einen Mechanismus automatisch gesperrt. Die Software ist manchmal sehr unfreundlich. Du kannst aber immer noch im <a href="http://forum.stupidedia.org">Forum</a> um Entsperrung betteln.', '#FF0000');
        break;

      // Frage existiert schon
      case 'articleexists':
        displayMessage('Eine Frage mit dieser Zusammenfassung wurde schon gestellt. Ändere die Zusammenfassung, dann müsste es gehen.', '#FF0000');
        enableForm();
        break;

      // Frage ist geschützt
      case 'protectedtitle':
        displayMessage('Eine Frage mit dieser Zusammenfassung kann nicht gestellt werden, da der zugehörige Seitentitel gesperrt wurde.', '#FF0000');
        enableForm();
        break;

      // MBF hat zugeschlagen
      case 'hookaborted':
        displayMessage('Eine Software-Erweiterung, vermutlich der Missbrauchsfilter, hat deine Frage angefangen. Allerdings nicht beantwortet, denn dafür ist er zu doof. Kannste nix machen, formulier die Frage um, dann geht es vielleicht.', '#FF0000');
        enableForm();
        break;

      // Ungültiger Titel
      case 'invalidtitle':
        displayMessage('Diese Zusammenfassung ist als Seitentitel ungültig, daher kann die Frage nicht gestellt werden. Ändere sie am besten und nimm alle eventuellen Sonderzeichen außer Satzzeichen raus.', '#FF0000');
        enableForm();
        break;

      // case 'badtoken':
        api.request({
          action: 'query',
          prop: 'info',
          titles: 'Hauptseite',
          intoken: 'edit'
        }, function(data) {
          global.editToken = api.makeArray(data.query.pages)[0].edittoken;
          displayMessage('Es gab eine unbedeutende Komplikation, das Bearbeitungstoken wurde nicht akzeptiert. Klick noch mal auf <i>Speichern</i>, dann müsste es gehen.', '#FF0000');
          enableForm();
        });
        break;

      // Standard
      default:
        displayMessage('Ein Fehler ist aufgetreten. Die API meldet:<br />' + code + ': ' + info + '<br />Bitte leite diesen Fehler an einen <a href="/stupi/Spezial:Benutzer/sysop" title="Spezial:Benutzer/sysop">Diktator</a> weiter.', '#FF0000');
        break;
    }
  }

  $('#wNewQuestion-newLink, #wNewQuestion-form input[type="button"]').attr('href', null).click(function() {
    $('#wNewQuestion-linkBox, #wNewQuestion-form').slideToggle('fast');
    $('#wNewQuestion-preview').remove();
  });

  if (mw.user.isAnon && mw.user.isAnon()) {
    $('#wNewQuestion-watchRow').hide();
  }

  $('#wNewQuestion-form').submit(function () {
    return false;
  });

  $('#wpSubmit').click(function() {
    var form = $(this).parents('#wNewQuestion-form');
    var params = api.mergeParams(form.serializeArray());
    var title = $.trim(params.title).replace(/^Frage:\s*/i, '');
    var text = $.trim(params.text);
    var watch = params.watch;
    var captchaId = params.captchaid;
    var captchaText = params.captchatext;

    if (text === '') {
      displayMessage('Ein etwas ausführlicherer Text wäre schon nicht schlecht.', '#FF0000');
      return;
    }

    if (title === '') {
      displayMessage('Eine Zusammenfassung ist aus technischen Gründen erforderlich.', '#FF0000');
      return;
    }

    text += '\n\n: ' + $.trim(global.signature) + '\n\n== Antworten ==';

    var obj = {
      action: 'edit',
      title: 'Frage:' + title,
      text: text,
      createonly: true,
      recreate: true,
      summary: '[[Stupidedia:Hilft!|Neue Frage]]',
      token: global.editToken
    };

    if (!mw.user.isAnon()) {
      if (watch === 'true') {
        obj.watchlist = 'watch';
      }
      else {
        obj.watchlist = 'unwatch';
      }
    }

    if (captchaId !== '') {
      obj.captchaid = captchaId;
      obj.captchaword = captchaText;
    }

    disableForm();
    displayMessage('Bitte warten …');
    api.request(obj, function(data) {
      // Fehler
      if (data.error) {
        displayError(data.error);
      }
      // CAPTCHA
      else if (data.edit.result === 'Failure') {
        displayMessage('Aufgrund externer Links musst du erst mal eine Aufgabe lösen, bevor du eine Frage stellen kannst.', '#FF0000');
        $('#wNewQuestion-captchaHeader td').text(data.edit.captcha.question);
        $('#wNewQuestion-captchaBody input').val('');
        $('#wNewQuestion-captchaId').val(data.edit.captcha.id);
        $('#wNewQuestion-captchaHeader, #wNewQuestion-captchaBody').slideDown('fast');
        enableForm();
      }
      // Erfolgreich erstellt
      else {
        displayMessage('Die Frage wurde gestellt. Du wirst nun weitergeleitet …', '#008000');
        location.href = mw.util.wikiGetlink(data.edit.title);
      }
    });
  });

  /* Vorschau */
  $('#wpPreview').click(function () {
    disableForm();
    if($( '#wNewQuestion-preview' ).length) {
      var preview = $( '#wNewQuestion-preview' );
    }
    else {
      var preview = $( '<div id="wNewQuestion-preview"></div>' );
      preview.insertBefore( $( '#wNewQuestion-form' ) );
    }
    preview.html( '<img src="http://www.stupidedia.org/images/d/de/Ajax-loader.gif" />' );

    var text = '\r\n== Vorschau ==\r\n' + $('#wNewQuestion-text').val() + '\r\n: ' + $.trim(global.signature);
    var obj = {
      action: 'parse',
      text:   text,
      disablepp: true,
      pst: true
    };
    api.request( obj, function( data ) {
      if ( data.error ) {
        alert( 'Fehler bei der Übertragung. Bitte versuche es erneut!' );
      }
      else {
        preview.html( data.parse.text['*'] );
      }
      enableForm();
    } );
  });

});
</script>