Zum Inhalt springen

Benutzer:$traight-$hoota/js/botauftrag.js

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 1. Oktober 2013 um 18:24 Uhr durch $traight-$hoota (Diskussion | Beiträge) (code corr). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
//Dokumentation unter [[Benutzer:$traight-$hoota/js/botauftrag]] <nowiki>

/*global mw: true */
(function($, mw) {

  var botauftrag = {
    version: "0.1",
    botPage: "Wikipedia:WikiProjekt Kategorien/Warteschlange",
    debugMode: false,
    reasons: {
      "erl": "erledigt",
      "b": "bleibt",
      "x": "gelöscht",
      "sla": "schnellgelöscht",
      "rev": "zurückgezogen",
      "lae": "WP:LAE"
    },
    createBotJob: {
      reason: "erl",
      comment: "umgesetzt"
    }
  }

  if (botauftrag.debugMode) {
    botauftrag.botPage = "Benutzer:$traight-$hoota/js/botauftrag/BotPage"
  }

  function showMarkDoneDialog(data) {
    var reasons = [];
    for (i in botauftrag.reasons) {
      reasons.push([botauftrag.reasons[i], i, "Als " + botauftrag.reasons[i] + " markieren"]);
    }

    mw.loader.using('jquery.ui.dialog', function() {
      mw.libs.schnark_dialog.show(
        'Als erledigt markieren', [{
          type: 'select_other',
          name: 'reason',
          text: 'Markierung',
          list: reasons,
          standard: 1,
          other: 'anders...'
        }, {
          type: 'inputbox',
          name: 'comment',
          text: "Kommentar",
          optional: true,
          focus: true,
          enter: true
        }],
        function(a) {
          markDone($.extend(data, a));
        }
      );
    });
  }

  function markDone(data) {
    var reason = botauftrag.reasons[data.reason] != 'undefined' ? botauftrag.reasons[data.reason] : data.reason;
    mw.libs.autoedit.edit({
      summary: "/*" + data.title + "*/ " + reason,
      section: data.section,
      change: function(text) {
        data = $.extend(data, parseText(text));
        return createCodeForDisussionPage(data);
      },
    });
  }

  function parseText(text) {
    return {
      rawText: $.trim(text.replace(/(=[=]+)\s*(.+)\s*=[=]+\s*\n/, "")),
      titleDepth: RegExp.$1,
      rawTitle: $.trim(RegExp.$2.replace(/=+$/, ""))
    }
  }

  function showCreateBotJobDialog(data) {
    data.reason = botauftrag.createBotJob.reason;
    $.get(data.editLink + "&action=raw", function(text) {
      $.extend(data, parseText(text));
      mw.loader.using('jquery.ui.dialog', function() {
        mw.libs.schnark_dialog.show(
          'Botauftrag erstellen', [{
            type: 'inputbox',
            name: 'command',
            text: "Bot-Befehl",
            focus: true,
            standard: data.rawTitle,
            enter: true
          }, {
            type: 'inputbox',
            name: 'comment',
            text: "Erledigt-Kommentar",
            standard: botauftrag.createBotJob.comment,
            enter: true
          }],
          function(a) {
            createBotJob($.extend(data, a));
          }
        );
      });
    });
  }

  function createBotJob(data) {
    if (!data.command.match(/(\((Artikel|Kategorie)\))?\[\[:Kategorie:.*\]\] nach \[\[:Kategorie:.*\]\](, \[\[:Kategorie:.*\]\])*|\[\[:Kategorie:.*\]\] leeren/)) {
      console.error("Invalid bot command: " + data.command);
      return false;
    }

    mw.libs.autoedit.edit_series(
      [{
        title: botauftrag.botPage,
        summary: "Bot: " + data.command,
        section: "new",
        change: function(text) {
          return "[[" + mw.config.get("wgPageName").replace(/ /g, ' ') + "#" + data.title + "|Diskussion]] --~~~~";
        }
      }, {
        summary: "/*" + data.title + "*/ " + data.reason,
        section: data.section,
        action: "wpSave", //alt:wpPreview
        change: function(text) {
          return createCodeForDisussionPage(data)
        }
      }],
      //autosave
      [true, false],
      //callback
      console.log,
      //replace_last
      true
    );
  }

  function createCodeForDisussionPage(data) {
    if (data.comment.substr(-6) !== "--~~~~" && $.trim(data.comment).length > 0) {
      data.comment = $.trim(data.comment) + " --~~~~";
    }
    if(data.reason == "undefined") data.reason = "";
    if(data.reason == "erl") {
      data.reason = "";
    } else if (data.reason != "") {
      data.reason = "|" + data.reason;
    }

    return data.titleDepth + " {{erl|" + data.rawTitle + data.reason + "}} " + data.titleDepth + "\n" + data.rawText + "\n\n " + data.comment;
  }

  function addLinks() {
    mw.util.$content.find('h2,h3,h4,h5,h6').each(function() {
      var $h = $(this);
      var $mwHeadline = $h.find('.mw-headline');
      if (!$mwHeadline.length) {
        return;
      }
      var $editsection = $h.find('.mw-editsection');
      var data = {
        "editLink": false,
        "title": $mwHeadline.text()
      };

      if (data.title.match(/\{\{erl\||\((erl|bleibt|lae|laz|zurückgezogen)\.?\)/)) {
        return;
      }

      $editsection.find("a").each(function() {
        $this = $(this);
        if ($this.text() == "Bearbeiten") {
          data.editLink = $this.attr("href");
        }
      });

      function eventHandler(e) {
        e.preventDefault();
        var data = $(e.target).data();
        console.log(data);

        data.editLink.match(/(\?|&)section=(\d+)/);
        data.section = parseInt(RegExp.$2);
        data.action(data);
      }

      function makeLink(label, title, callback, data) {
        $link = $(mw.html.element('a', {
          href: '#',
          title: title,
          'class': 'botauftrag-link botauftrag-link-' + label.toLowerCase()
        }, label)).data(data).on("click", callback);

        $span = $('<span class="mw-editsection-bracket">[</span>');
        $span.append($link);
        $span.append('<span class="mw-editsection-bracket">]</span>');
        return $span;
      }

      data.action = showCreateBotJobDialog;
      $editsection.append(makeLink("Bot beauftragen", "Diesen Antrag auf die Kategorienwarteschlange einstellen", eventHandler, data));
      data.action = showMarkDoneDialog;
      $editsection.append(makeLink("Erledigen", "Diesen Antrag als erledigt markieren", eventHandler, data));
    });
  }

  function init() {
    var pageName = mw.config.get("wgPageName");
    var isWarteschlange = pageName.match(/Wikipedia:WikiProjekt_Kategorien\/Diskussionen\/(\d{4})\/(.+)\/(\d{1,2})/),
      isTestPage = pageName.match(/Benutzer:\$traight-\$hoota\/js\/botauftrag\/Antrag/);

    if ((!isWarteschlange || botauftrag.debugMode) && !isTestPage) {
      console.log("debug mode: ", botauftrag.debugMode);
      console.error(pageName);
      return false;
    }
    $(addLinks);
  }
  init();

})(jQuery, mw);
//</nowiki>