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 14:16 Uhr durch $traight-$hoota (Diskussion | Beiträge) (code fix). 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"
  }
}

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

function onMarkDone(e){
  e.preventDefault();
  var data = $(e.target).data();
  data.editLink.match(/(\?|&)section=(\d+)/);
  data.section = parseInt(RegExp.$2);

  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) {
        data.reason = a.reason;
        data.comment = a.comment;
        if(data.comment.substr(-6) !== "--~~~~" && $.trim(data.comment).length > 0){
          data.comment = $.trim(data.comment) + " --~~~~";
        }
        reason = a.reason;
        if(botauftrag[reason] != 'undefined'){
          reason = botauftrag[reason];
        }
        mw.libs.autoedit.edit({
          summary: "/*" + data.title + "*/ " + reason,
          section: data.section,
          change: function(text){
            data.rawText = $.trim(text.replace(/(=[=]+)\s*(.+)\s*=[=]+\s*/, ""));
            data.titleDepth = RegExp.$1;
            data.rawTitle = $.trim(RegExp.$2);

            return createCodeForDisussionPage(data);
          },
          action: "wpSave"
        })
      }
    );
  });
}

function onBotauftrag(e){
  e.preventDefault();
  var data = $(e.target).data();

  data.reason = "erl";
  data.comment = "umgesetzt --~~~~";
  data.editLink.match(/(\?|&)section=(\d+)/);
  data.section = parseInt(RegExp.$2);

  $.get(data.editLink + "&action=raw", function (raw) {
    raw = $.trim(raw);
    data.rawText = $.trim(raw.replace(/(=[=]+)\s*(.+)\s*=[=]+\s*/, ""));
    data.titleDepth = RegExp.$1;
    data.rawTitle = $.trim(RegExp.$2);

    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: data.comment, enter: true},
        ],
        function (a) {
          data.command = a.command;
          data.comment = a.comment;

          params = [
            //params
            {
              title: botauftrag.botPage,
              summary: "Bot: " + data.command,
              section: "new",
              change: function(text){
                return createCodeForBotPage(data);
              }
            },{
              summary: "/*" + data.title + "*/ " + data.reason,
              section: data.section,
              action: "wpSave", //alt:wpPreview
              change: function(text){
                return createCodeForDisussionPage(data)
              }
            }];
          console.log(params);
          mw.libs.autoedit.edit_series(params,
            //autosave
            [true, false],
            //callback
            function(a,b,c){
              console.log(a)
              console.log(b)
              console.log(c)
            },
            //replace_last
            true
          )
        }
      );
    });
  });
}

function createCodeForBotPage(data){
  if(! data.command.match(/(\((Artikel|Kategorie)\))?\[\[:Kategorie:.*\]\] nach \[\[:Kategorie:.*\]\](, \[\[:Kategorie:.*\]\])*|\[\[:Kategorie:.*\]\] leeren/)){
    console.error("Invalid bot command: " + data.command);
    return false;
  }
  page = mw.config.get("wgPageName");
  page = page.replace(/ /g, ' ');
  code = "[[" + page + "#" + data.title + "|Diskussion]] --~~~~";
  
  return code;
}

function createCodeForDisussionPage(data){
  if(data.reason == "erl"){
    data.reason = "";
  }else if(data.reason != ""){
    data.reason = "|" + data.reason;
  }

  erlTitle = "{{erl|" + data.rawTitle + data.reason + "}}";
  erlTitle = data.titleDepth + " " + erlTitle + " " + data.titleDepth;

  code = erlTitle + "\n" + data.rawText + "\n\n " + data.comment;
  return code;
}

function addLinks(){
  mw.util.$content.find('h1,h2,h3,h4,h5,h6').each(function (i, h) {
    var $h = $(h);
    var $mwHeadline = $h.find('.mw-headline');
    if(! $mwHeadline.length){
      return;
    }
    var $editsection = $h.find('.mw-editsection'),
      hash = $mwHeadline.attr('id') || '',
      editLink = false,
      title = $mwHeadline.text();

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

    $editsection.find("a").each(function(){
      $this = $(this);
      if($this.text() == "Bearbeiten"){
        editLink = $this.attr("href");
      }
    });
 
    $editsection.append(makeLink("Bot beauftragen", "Diesen Antrag auf die Kategorienwarteschlange einstellen", onBotauftrag, {
      "editLink": editLink,
      "hash": hash,
      "title": title
    }));
    $editsection.append(makeLink("Erledigen", "Diesen Antrag als erledigt markieren", onMarkDone, {
      "editLink": editLink,
      "hash": hash,
      "title": title
    }));
  });
}

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;
}

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>