Benutzer:Schnark/js/autoantraege.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

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
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
//Dokumentation unter [[Benutzer:Schnark/js/autoantraege]] <nowiki>
mw.libs.deprecated = $.extend(mw.libs.deprecated, {autoantraege: 'Das Skript [[Benutzer:Schnark/js/autoantraege]] funktioniert zu großen Teilen bereits nicht mehr. Falls du es weiterhin verwenden willst, musst du jemand finden, der die Pflege übernimmt und es an die neue Version von jQuery-UI anpasst.'});
importScript('Benutzer:Schnark/js/deprecated.js');

/*global mw: true */
/*global autosave: true, defaultSLA: true, defaultVandal: true, defaultAVandal: true, usersignature: true *///Abwärtskompatibilität
(function($, libs){

var autoantraege = {
version: 3.6,

zeige_menu: true,   //zeigt Menü mit Anträgen
zeige_revert: true, //zeigt dialogbasierte Revert-Links
zeige_erl: true,    //zeigt Links für {{erledigt}}
zeige_inuse: false, //zeigt Links für {{InuseBot}}

autosave: true,    //automatisch speichern
autosave_override: {},
inform_autor: true, //Autor infomieren?
multiline: true, //Eingabefelder mehrzeilig?
grund_kursiv: true, //(einzeiligen) Grund bei Antrag kursiv
hide_duep: false, //DÜP verstecken
no_alert: false,   //bei Fehlern nicht warnen
sig: '--~~~~',    //Signatur
sauberesig: false, //kann für Signaturen ohne = auf true gesetzt werden
revert_vorsatz: 'Revert: ', //Start der Revertbegründung
//Standard-Gründe
standard_grund: {'qs': '[[WP:Vollprogramm|Vollprogramm]]', 'sla': 'kein Artikel', 'urv': '[http://]', 'vm_benutzer': 'vandaliert in [[]]', 'vm_artikel': 'Edit-War'},

//Benutzer ist Admin (wird automatisch ermittelt)
admin: false,

//Antrags-Seiten (Datum wird ergänzt)
qs_seite: 'Wikipedia:Qualitätssicherung/',
la_seite: 'Wikipedia:Löschkandidaten/',
kat_seite: 'Wikipedia:WikiProjekt_Kategorien/Diskussionen/',
urv_seite: 'Wikipedia:Löschkandidaten/Urheberrechtsverletzungen',
vm_seite: 'Wikipedia:Vandalismusmeldung',

//Hilfsfunktionen
//erstellt einen Wikilink
link: function (titel) {
  return '[[' + ((titel.match(/^(Datei:|Kategorie:|\/)/)) ? ':' : '') + titel.replace(/_/g, ' ') + ']]';
},
//escapet Text für Vorlagen
escape: function (param) {
  //evt. auch mit geschweiften Klammern aufpassen
  if (param.replace(/\[\[[^\[\]|]+(?:\|[^\[\]|]*)?\]\]/g, '').indexOf('|') > -1) param = param.replace(/\|/g, '{{!}}'); //Pipe außerhalb Link, sicherheitshalber alle escapen
  if (param.indexOf('=') > -1 || (param.replace(/~~~~~/g, '').indexOf('~~~') > -1 && !autoantraege.sauberesig)) param = '1=' + param; //= verstecken
  return param;
},
//formatiert Grund
format_grund: function (grund, inVorlage) {
   grund = grund.replace(/\s*$/, '');
   if (inVorlage && autoantraege.grund_kursiv && grund.indexOf('\n') === -1) {
      if (grund.match(/^'/)) grund = '<nowiki' + ' />' + grund;
      if (grund.match(/'$/)) grund += '<nowiki' + ' />';
      grund = "''" + grund + "''";
   }
   grund += ' ' + autoantraege.sig;
   return inVorlage ? autoantraege.escape(grund) : grund;
},

warn_abort: function (typ) {
  if (typ) return;
  if (autoantraege.no_alert) return;
  window.alert('Bitte alle Felder ausfüllen!');
},
warn_edit: function (err, count) {
   if (autoantraege.no_alert) return;
   if (err == 'success') return; //sollte nicht passieren
   if (count > 0 && err == 'nochange') return window.alert('Der Benutzer hat den gewählten Hinweis\n' +
                                                           'bereits auf seiner Diskussionsseite, es wurde nur der Antrag gestellt.\n' +
                                                           'Um den Benutzer musst du dich selber kümmern!');
   if (count > 0) return window.alert('Ein Problem ist aufgetreten, der Antrag wurde nur zur Hälfte gespeichert!');
   if (err == 'nochange') return window.alert('Artikel enthält den gewählten Baustein bereits!');
   window.alert('Artikel wurde bereits gelöscht! (Oder ein Fehler trat auf, Code ' + err + '.)');
},

//ruft callback('Autor', anonym?) auf, Autor ist Urheber der aktuellen Seite
erstautor: function (callback) {
           if (!autoantraege.inform_autor) return callback('', true);
           $.getJSON(mw.util.wikiScript('api'), {action: 'query', prop: 'revisions', titles: mw.config.get('wgPageName'),
                                                 rvlimit: 1, rvdir: 'newer', rvprop: 'user', format: 'json'},
                     function (json) {
                        if (!json || !json.query || !json.query.pages) return callback('', true);
                        var pages = json.query.pages, page;
                        for (var p in pages) page = pages[p];
                        if (!page || !page.revisions || !page.revisions[0] || !page.revisions[0].user) return callback('', true);
                        callback(page.revisions[0].user, page.revisions[0].anon === '');
                     }
           );
},

//Zeigt ein Dialogfenster (Titel title, Elemente dialog) an,
//überibt die gewählten Parameter an die Funktion list, welche die Liste der notwendigen Bearbeitung liefert,
//die anschließend (automatisch?: as) durchgeführt werden.
exec: function (title, dialog, list, as) {
      if (as === undefined) as = autoantraege.autosave;
      mw.loader.using('jquery.ui', function() { //falls der Server rumtrödelt, muss man warten
         libs.schnark_dialog.show(title, dialog, function (p) {
                libs.autoedit.edit_series(list(p), as, autoantraege.warn_edit, true);
         }, autoantraege.warn_abort);
      }, function() { window.alert('Leider will der Server jquery.ui nicht liefern!'); });
},
standard_dialog: function (label, grund, autor, anon) {
  var dialog = [{type: 'input', name: 'grund', text: label, standard: grund || '',
                 focus: true, multiline: autoantraege.multiline, enter: !autoantraege.multiline}];
  if (autoantraege.inform_autor) {
     dialog.push({type: 'toggle', name: 'inform', text: 'Autor informieren', standard: !anon, list: [2]});
     dialog.push({type: 'input', name: 'autor', text: 'Autor: ', standard: autor, enter: true});
  }
  return dialog;
},
standard_bearb: function (vorlage, noinclude, vorlageExpand, summary, seite, section, hinweisVorlage, p) {
  var bearb = [],
      t1 = '{{ers:' + vorlage + '|' + autoantraege.format_grund(p.grund, true) + '}}\n\n',
      t2 = autoantraege.format_grund(p.grund, false),
      t3 = '{{ers:' + hinweisVorlage + '|' + autoantraege.escape(mw.config.get('wgPageName')) + '}}';
  if (noinclude && mw.config.get('wgPageName').indexOf('Vorlage') > -1) {
     t1 = '<noinclude>' + t1 + '</noinclude>\n';
  }
  bearb.push({change: function (alt) {
                        if (alt.indexOf('{{' + vorlageExpand + '|') > -1) {
                           return false;
                        }
                        return t1 + alt;
                      },
              summary: summary});
  if (section === 'new') {
     bearb.push({title: seite, section: section, summary: autoantraege.link(mw.config.get('wgPageName')), change: t2});
  } else {
     bearb.push({title: seite, section: section,
                 summary: 'Neuer Abschnitt /* ' + autoantraege.link(mw.config.get('wgPageName')) + ' */',
                 change: function (alt) {
                           return alt + '\n\n== ' + autoantraege.link(mw.config.get('wgPageName')) + ' ==\n' + t2;
                 }
                });
  }
  if (p.inform) {
     bearb.push({title: 'Benutzer Diskussion:' + p.autor,
                 summary: 'Neuer Abschnitt /* ' + autoantraege.link(mw.config.get('wgPageName')) + ' */',
                 change: function (alt) {
                            if (alt === '') return t3;
                            return alt + '\n\n' + t3;
                 }, create: true});
  }
  return bearb;
},

//einzelne Funktionen zum Stellen der Anträge
execute: {
'qs':  function (grund, as) {
       autoantraege.erstautor(function (autor, anon) {
          autoantraege.exec('Qualitätssicherung', autoantraege.standard_dialog('QS-Grund: ', grund, autor, anon), function (p) {
             return autoantraege.standard_bearb('QS', true, 'QS-Antrag', 'QS+', autoantraege.qs_seite, 'new', 'QS-Hinweis', p);
          }, as);
      });
},
'fach-qs':
       function (grund, as) {
       var list = [
                   ['Animation', 'QS-Animation|Portal Diskussion:Animation', ''],
                   ['Bahn', 'QS-Bahn|Portal:Bahn/Qualitätssicherung', ''],
                   ['Begriffsklärungsseiten', 'QS-BKS|Wikipedia:WikiProjekt Begriffsklärungsseiten/Fließband', ''],
                   ['Bergbau', 'QS-Bergbau|Portal:Bergbau/Wartung', ''],
                   ['Berge und Gebirge', 'QS-Berge und Gebirge|Portal:Berge und Gebirge/Qualitätssicherung', ''],
                   ['Biologie', 'QS-Biologie|Wikipedia:Redaktion Biologie/Qualitätssicherung', ''],
                   ['Chemie', 'QS-Chemie|Wikipedia:Redaktion Chemie/Qualitätssicherung', ''],
                   ['Computerspiele', 'QS-Computerspiel|Wikipedia:WikiProjekt Computerspiel/Qualitätssicherung', ''],
                   ['Comic', 'QS-Comic|Portal Diskussion:Comic', ''],
                   ['Country-Musik', 'Projekt:Country-Musik|Wikipedia:WikiProjekt Country-Musik/Baustellen-Artikel', ''],
                   ['Einsatzorganisationen', 'QS-EO|Wikipedia:WikiProjekt Einsatzorganisationen/Qualitätssicherung', ''],
                   ['Eishockey', 'QS-Eishockey|Portal:Eishockey/Qualitätssicherung', ''],
                   ['Elekrotechnik', 'QS-Elekrotechnik|Wikipedia:WikiProjekt Elekrotechnik/Qualitätssicherung', ''],
                   ['Ereignisse', 'QS-Ereignisse|Wikipedia:WikiProjekt Ereignisse/Qualitätssicherung', ''],
                   ['Film und Fernsehen', 'QS-FF|Wikipedia:Redaktion Film und Fernsehen/Qualitätssicherung', ''],
                   ['Geowissenschaften', 'QS-Geowissenschaften|Portal:Geowissenschaften/Qualitätssicherung', ''],
                   ['Geschichte', 'QS-Geschichte|Wikipedia:Redaktion Geschichte/Qualitätssicherung', ''],
                   ['Hund', 'QS-Hund|Portal:Hund/Qualitätssicherung', ''],
                   ['Jagd', 'QS-Jagd|Portal:Jagd/Qualitätssicherung', ''],
                   ['Kernenergie', 'QS-Kernenergie|Portal:Kernenergie/Qualitätssicherung', ''],
                   ['Mathematik', 'QS-Mathematik|Portal:Mathematik/Qualitätssicherung', ''],
                   ['Medien', 'QS-Medienwissenschaft|Wikipedia:WikiProjekt Medienwissenschaft/Qualitätssicherung', ''],
                   ['Medizin', 'QS-Medizin|Wikipedia:Redaktion Medizin/Qualitätssicherung', ''],
                   ['Militär', 'QS-Militär|Portal Diskussion:Militär', ''],
                   ['Minerale', 'QS-Minerale|Wikipedia:WikiProjekt Minerale/QS-Minerale', ''],
                   ['Motorsport', 'QS-Motorsport|Wikipedia:WikiProjekt Motorsport/Qualitätssicherung', ''],
                   ['Musikalben', 'QS-Musikalben|Wikipedia:Redaktion Musik/Musikalben QS', ''],
                   ['Naturwissenschaft', 'QS-NaWi|Wikipedia:Qualitätssicherung Naturwissenschaften', ''],
                   ['Niederlande', 'QS-NL|Portal:Niederlande/Qualitätssicherung', ''],
                   ['Philosophie', 'QS-Philosophie|Portal:Philosophie/Qualitätssicherung', ''],
                   ['Physik', 'QS-Physik|Wikipedia:Redaktion Physik/Qualitätssicherung', ''],
                   ['Planen und Bauen', 'QS-Planen und Bauen|Wikipedia:WikiProjekt Planen und Bauen/Qualitätssicherung', ''],
                   ['Politiker', 'QS-Politiker|Wikipedia:WikiProjekt Politiker/Qualitätssicherung', ''],
                   ['Religion', 'QS-Religion|Wikipedia:Redaktion Religion/QS', ''],
                   ['Sexualität', 'QS-Sexualität|Wikipedia:Redaktion Sexualität/Qualitätssicherung', ''],
                   ['Soziologie', 'QS-Soziologie|Portal:Soziologie/Qualitätssicherung', ''],
                   ['Spiele', 'QS-Spiele|Portal:Spiele/Qualitätssicherung', ''],
                   ['Straßen', 'QS-Straßen|Wikipedia:WikiProjekt Straßen/Qualitätssicherung', ''],
                   ['Vereinigte Staaten', 'QS-USA|Portal:Vereinigte Staaten/Qualitätssicherung', ''],
                   ['Vor- und Frühgeschichte', 'QS-Vor- und Frühgeschichte|Wikipedia:WikiProjekt Vor- und Frühgeschichte/Qualitätssicherung', ''],
                   ['Waffen', 'QS-Waffen|Portal:Waffen/Qualitätssicherung', ''],
                   ['Wirtschaft', 'QS-Wirtschaft|Portal:Wirtschaft/Wartung', ''],
                   ['Wrestling', 'QS-Wrestling|Portal:Wrestling/Qualitätssicherung', ''],
                   ['Wintersport', 'QS-Wintersport|Portal:Wintersport/Mitarbeiten/Qualitätssicherung', '']
                  ];
       var dialog = [{type: 'select', name: 'fach', list: list, text: 'Portal etc.: '},
                     {type: 'input', name: 'grund', text: 'QS-Grund: ', standard: grund || '', multiline: autoantraege.multiline, enter: !autoantraege.multiline}];
       autoantraege.exec('Fach-QS', dialog, function (p) {
          var bearb = [],
              t1 = '{{' + p.fach.replace(/\|.*$/, '') + '}}\n\n';
          if (mw.config.get('wgPageName').indexOf('Vorlage') > -1) t1 = '<noinclude>' + t1 + '</noinclude>\n';
          bearb.push({change: function (alt) {return t1 + alt;}, summary: p.fach.replace(/\|.*$/, '') + '+'});

          var t2 = autoantraege.format_grund(p.grund, false);
          bearb.push({title: p.fach.replace(/^.*\|/, ''), section: 'new', summary: autoantraege.link(mw.config.get('wgPageName')), change: t2});

          return bearb;
       }, as);
},
'la':  function (grund, as) {
       var f;
       switch (mw.config.get('wgNamespaceNumber')) {
       case 0: if (mw.config.get('wgPageName').indexOf('Liste_') === 0) f = 'la_liste'; else f = 'la_artikel'; break;
       case 2: f = 'la_benutzer'; break;
       case 10: f = 'la_vorlage'; break;
       case 14: f = 'la_kat'; break;
       default: f = 'la_meta';
       }
       autoantraege.execute[f](grund, as);
},
'la_artikel':
       function (grund, as) {
       autoantraege.erstautor(function (autor, anon) {
          autoantraege.exec('Löschantrag', autoantraege.standard_dialog('LA-Grund: ', grund, autor, anon), function (p) {
             return autoantraege.standard_bearb('LA', false, 'Löschantragstext', 'LA+', autoantraege.la_seite, 'new', 'LD-Hinweis', p);
          }, as);
      });
},
'la_xxx': function (grund, as, typ) {
       autoantraege.erstautor(function (autor, anon) {
          autoantraege.exec('Löschantrag (' + typ + ')', autoantraege.standard_dialog('LA-Grund: ', grund, autor, anon), function (p) {
             return autoantraege.standard_bearb('LA', false, 'Löschantragstext', 'LA+', autoantraege.la_seite, {title: typ + 'n'}, 'LD-Hinweis', p);
          }, as);
      });
},
'la_liste':
       function (grund, as) { autoantraege.execute.la_xxx(grund, as, 'Liste'); },
'la_vorlage':
       function (grund, as) {autoantraege.execute.la_xxx(grund, as, 'Vorlage'); },
'la_kat':
       function (grund, as) {
       autoantraege.erstautor(function (autor, anon) {
          autoantraege.exec('Löschantrag (Kategorie)', autoantraege.standard_dialog('LA-Grund: ', grund, autor, anon), function (p) {
             var bearb = [],
                 t1 = '{{ers:LA|' + autoantraege.format_grund(p.grund, true) + '}}\n\n';
             bearb.push({change: function (alt) {
                                    if (alt.indexOf('{{Löschantragstext|') > -1) return false;
                                    return t1 + alt;
                                 },
                         summary: 'LA+'});

             var t2 = autoantraege.format_grund(p.grund);
             bearb.push({title: autoantraege.kat_seite, section: 'new', summary: autoantraege.link(mw.config.get('wgPageName')), change: t2});

             if (p.inform) {
                var t3 = '{{ers:LD-Hinweis|' + autoantraege.escape(mw.config.get('wgPageName')) + '}}';
                bearb.push({title: 'Benutzer Diskussion:' + p.autor, summary: 'Neuer Abschnitt /* ' + autoantraege.link(mw.config.get('wgPageName')) + ' */',
                            change: function (alt) {
                                       if (alt === '') return t3;
                                       return alt + '\n\n' + t3;
                            }, create: true});
             }
             return bearb;
             }, as);
      });
},
'la_benutzer':
       function (grund, as) { autoantraege.execute.la_xxx(grund, as, 'Benutzerseite'); },
'la_meta':
       function (grund, as) { autoantraege.execute.la_xxx(grund, as, 'Metaseite'); },
'sla': function (grund, as) {
       autoantraege.erstautor(function (autor, anon) {
          grund = grund || '';
          if (grund.match(/^[0-9]+$/)) grund = Number(grund);
          if (grund == 'kein Artikel') grund = 0;

          var list = [['kein Artikel', '[[WP:ART|kein ausreichender Artikel]] und/oder [[WP:WWNI|kein enzyklopädischer Inhalt]]',
                       'kein ausreichender Artikel und/oder<br />kein enzyklopädischer Inhalt'],
                      ['offensichtliche Irrelevanz', 'Offensichtlich keine enzyklopädische [[WP:RK|Relevanz]] vorhanden',
                       'Offensichtlich keine enzyklopädische Relevanz vorhanden'],
                      ['Werbung', '[[WP:WWNI|Reiner Werbeeintrag]]', 'Reiner Werbeeintrag'],
                      ['URV + fehlende Qualität', 'mögliche [[WP:URV|Urheberrechtsverletzung]] bei gleichzeitig fehlender Qualität',
                       'mögliche URV bei gleichzeitig fehlender Qualität'],
                      ['Tastaturtest', 'Tastaturtest', 'Tastaturtest'],
                      ['Unsinn', 'Seiteninhalt war [[WP:VAND|Unsinn]]', 'Seiteninhalt war Unsinn (mit Link auf WP:VAND)'],
                      ['Wiedergänger', 'Unerwünschte Wiederanlage einer gelöschten Seite, siehe dazu [[WP:LP|Löschprüfung]]',
                       'Unerwünschte Wiederanlage einer gelöschten Seite'],
                      ['Unnötige Weiterleitung', 'Unnötige bzw. unerwünschte [[WP:WL|Weiterleitung]]', 'Unnötige bzw. unerwünschte Weiterleitung']];
          if (mw.config.get('wgNamespaceNumber') % 2 == 1) {
             list.unshift(
                      ['Verwaiste Diskussionsseite', 'Verwaiste Diskussionsseite', 'Verwaiste Diskussionsseite'],
                      ['keine regelkonforme Disk.', 'keine [[WP:DS|regelkonformen Diskussionsbeiträge]]', 'keine regelkonformen Diskussionsbeiträge']);
             if (typeof grund == 'number') grund += 2;
          } else if (mw.config.get('wgNamespaceNumber') == 2) {
             list.unshift(['Verstoß gegen BNR', 'Missachtung der [[WP:BNR|Benutzernamensraum-Konventionen]]', 'Missachtung der Benutzernamensraum-Konventionen']);
             if (typeof grund == 'number') grund += 1;
          }

          var dialog = [{type: 'select_other', name: 'grund', other: 'Sonstiger Grund', text: 'SLA-Grund: ', list: list,
                         standard: grund, html: true, focus : true, multiline: autoantraege.multiline, enter: !autoantraege.multiline}];
          if (autoantraege.inform_autor) {
             //TODO : ausbauen
             var vorl_list = [['Standard-Vorlage', 'Gelöscht', 'Verwendet die Standard-Vorlage, meist {{Gelöscht}}.<br />Parameter werden aus Begründung erraten.'],
                              ['Unsinn gelöscht', 'Unsinn gelöscht', 'Hinweis zur Schnelllöschung bei Unsinn'],
                              ['Tastaturtest', 'Tastaturtest', 'Hinweis bei Tastaturtests'],
                              ['Test', 'Test', 'Bitte mit dem Vandalieren aufzuhören']];
             dialog.push({type: 'toggle', name: 'inform', text: 'Autor informieren', standard: !anon, list: [2, 3]});
             dialog.push({type: 'input', name: 'autor', text: 'Autor: ', standard: autor, enter: true});
             dialog.push({type: 'select', name: 'vorlage', text: 'Vorlage: ', list: vorl_list, html: true});
          }
          if (autoantraege.admin) dialog.push({type: 'toggle', name: 'del', text: 'direkt löschen', standard: true, list: []});

          autoantraege.exec('Schnelllöschantrag', dialog, function (p) {
             var bearb = [];
             if (p.del) {
                bearb.push({summary: p.grund.replace(/\s+/g, ' '), edit: 'del'});
             } else {
                var t1 = '{{löschen|' + autoantraege.format_grund(p.grund, true) + '}}\n\n';
                if (mw.config.get('wgPageName').indexOf('Vorlage') > -1) t1 = '<noinclude>' + t1 + '</noinclude>\n';
                bearb.push({change: function (alt) {
                                       if (alt.indexOf('{{löschen') > -1) return false;
                                       if (alt.indexOf('{{Löschen') > -1) return false;
                                       if (alt.indexOf('{{SLA') > -1) return false;
                                       return t1 + alt;
                                    },
                            summary: 'SLA+'});
             }
             if (p.inform) {
                if (p.vorlage == 'Gelöscht') {
                   if (p.grund == '[[WP:VAND|Unsinn]]') p.vorlage = 'Unsinn gelöscht';
                   if (/tastaturtest/i.test(p.grund)) p.vorlage = 'Tastaturtest';
                }
                var t2 = '{{ers:' + p.vorlage;
                if (p.vorlage == 'Gelöscht') {
                   var param = '';
                   if (/redundan[tz]|(?:schon|bereits).+vorhanden/i.test(p.grund)) param += '|red';
                   if (/wiederg(?:ä|ae)nger/i.test(p.grund)) param += '|wh';
                   if (/wwni/i.test(p.grund)) param += '|wwni';
                   if (/werb(?:ung|e)/i.test(p.grund)) param += '|wer';
                   if (/kein.+artikel/i.test(p.grund)) param += '|ka';
                   if (/falsche\s+sprache/i.test(p.grund)) param += '|lang';
                   if (mw.config.get('wgNamespaceNumber') % 2 == 1) param += '|disk';
                   if (mw.config.get('wgNamespaceNumber') == 2) param += '|bnr';
                   if (/relevan[tz]/i.test(p.grund)) param += '|rel';
                   if (/theoriefindung|\btf\b|theorieetablierung|begriffsbildung|begriffsfindung|quellenlos/i.test(p.grund)) param += '|tf';
                   if (/\bpov\b|neutral/i.test(p.grund)) param += '|pov';
                   if (/(?:selbst|eigen)darstell|interessens?konflikt/i.test(p.grund)) param += '|sd';
                   t2 += param + '|art=' + mw.config.get('wgPageName');
                }
                t2 += '}}';
                if (p.vorlage == 'Gelöscht' || p.vorlage == 'Unsinn gelöscht') t2 += ' ' + autoantraege.sig;
                var t3 = 'Hinweis';
                switch (p.vorlage) {
                case 'Gelöscht': t3 = 'Neuer Abschnitt /* Schnelllöschung deines Eintrags „' + autoantraege.link(mw.config.get('wgPageName')) + '“ */'; break;
                case 'Tastaturtest': t3 = 'Neuer Abschnitt /* Deine Bearbeitung */'; break;
                }
                bearb.push({title: 'Benutzer Diskussion:' + p.autor, summary: t3, create: true,
                            change: function (alt) {
                                       if (p.vorlage == 'Tastaturtest' && /„Artikel“/.test(alt)) return false;
                                       if (p.vorlage == 'Test' && /Test/.test(alt)) return false;
                                       if (/[sS]top[ _]hand\.svg/.test(alt)) return false;
                                       if (/letzte.+warnung/i.test(alt)) return false;
                                       if (alt === '') return t2;
                                       return alt + '\n\n' + t2;
                            }
                           });
             }
             return bearb;
             }, as);
       });
},
'kat_versch':
       function (grund, as) {
       autoantraege.exec('Kategorieverschiebung', [{type: 'input', name: 'neu', text: 'Neue Kategorie: ',
                                                                   standard: mw.config.get('wgPageName').replace(/^Kategorie:/, ''), focus: true},
                                                   {type: 'input', name: 'grund', text: 'Grund: ', standard: grund || '',
                                                    multiline: autoantraege.multiline, enter: !autoantraege.multiline}], function (p) {
              return [{change: function (alt) {
                                  if (alt.indexOf('{{Umbenennungstext|') > -1) return false;
                                  return '{{ers:Umbenennen|' + autoantraege.escape(p.neu) + '}}\n\n' + alt;
                               },
                       summary: 'Umbenennungsantrag'},
                      {title: autoantraege.kat_seite, section: 'new',
                       summary: autoantraege.link(mw.config.get('wgPageName')) + ' nach ' + autoantraege.link('Kategorie:' + p.neu),
                       change: autoantraege.format_grund(p.grund, false)}];
       }, as);
},
'urv': function (grund, as) {
       autoantraege.erstautor(function (autor, anon) {
          autoantraege.exec('Urheberrechtsverletzung', autoantraege.standard_dialog('Quelle: ', grund, autor, anon), function (p) {
             var bearb = [],
                 t1 = '{{URV}}\n\n' + autoantraege.format_grund(p.grund, false);
             bearb.push({change: function (alt) {
                                    if (alt.indexOf('{{URV}}') > -1) return false;
                                    return t1;
                                 },
                         summary: 'URV'});

             var t2 = '\n# ' + autoantraege.link(mw.config.get('wgPageName')) + ' von ' + autoantraege.format_grund(p.grund, false);
             bearb.push({title: autoantraege.urv_seite, section: 'last', summary: '+' + autoantraege.link(mw.config.get('wgPageName')),
                         change: function (alt) { return alt + t2; }});

             if (p.inform) {
                var url = p.grund;
                url = url.replace(/^.*?\[?\s*(http[^\s\]]+).*$/, '$1'); //quick and dirty
                var t3 = '{{ers:URV-Hinweis|' + autoantraege.escape(mw.config.get('wgPageName')) + '|' + autoantraege.escape(url).replace(/^1=/, '2=') + '}}';
                bearb.push({title: 'Benutzer Diskussion:' + p.autor,
                            summary: 'Neuer Abschnitt /* Mögliche Urheberrechtsverletzung in ' + autoantraege.link(mw.config.get('wgPageName')) + ' */',
                            change: function (alt) {
                              if (alt === '') return t3;
                              return alt + '\n\n' + t3;
                            }, create: true});
             }
             return bearb;
             }, as);
      });
},
'vm_artikel':
       function (grund, as) {
       var dialog = [{type: 'input', name: 'grund', text: 'Grund: ', standard: grund || '',
                      focus: true, multiline: autoantraege.multiline, enter: !autoantraege.multiline}];
       if (autoantraege.admin) {
          dialog.push({type: 'toggle', name: 'sperren', text: 'direkt sperren', standard: true, list: [2, 3]});
          dialog.push({type: 'input', name: 'dauer', text: 'Sperrdauer: ', standard: '1 month', enter: true});
          dialog.push({type: 'toggle', name: 'sysop', text: 'Vollsperre', standard: false, list: []});
       }
       autoantraege.exec('Bitte um Seitensperrung', dialog, function (p) {
              if (p.sperren) {
                 return [{edit: 'protect', expiry: p.dauer, protections: p.sysop ? 'sysop' : undefined, summary: p.grund.replace(/\s+/g, ' ')}];
              } else {
                 return [{title: autoantraege.vm_seite, section: 'new',
                          change: '{{Artikel|' + autoantraege.escape(mw.config.get('wgPageName')) + '}} ' + autoantraege.format_grund(p.grund, false),
                          summary: 'Artikel: ' + autoantraege.link(mw.config.get('wgPageName'))}];
              }
       }, as);
},
'vm_benutzer':
       function (grund, as) { //TODO admin
       autoantraege.exec('Bitte um Benutzersperrung', [{type: 'input', name: 'grund', text: 'Grund: ', standard: grund || '',
                                                        focus: true, multiline: autoantraege.multiline, enter: !autoantraege.multiline}], function (p) {
             var name = mw.config.get('wgTitle');
             if (mw.config.get('wgCanonicalSpecialPageName') == 'Contributions') name = $('[name=target]').val();
             return [{title: autoantraege.vm_seite, section: 'new',
                     change: '{{Benutzer|' + autoantraege.escape(name) + '}} ' + autoantraege.format_grund(p.grund, false),
                     summary: '[[Benutzer:' + name + ']]'}];
       }, as);
},
'duep':
       function (grund, as) {
       var s = [], i;
       var list = [['Wenn nicht deutlich wird, woher der Uploader die Datei hat', 'Quelle'],
                   ['Wenn nicht deutlich wird, wer der Urheber der Datei ist', 'Urheber'],
                   ['Wenn die Datei nicht unter einer freien Lizenz veröffentlicht wurde', 'Lizenz'],
                   ['Wenn nicht deutlich wird, dass der Urheber einer freien Lizenz zugestimmt hat', 'Freigabe'],
                   ['Wenn nicht klar ist, dass der Urheber des Originalwerks einer freien Lizenz zugestimmt hat', 'Gezeigtes Werk'],
                   ['Wenn ein besonderer Fall vorliegt', 'Besonderer Fall']];
       for (i = 0; i < list.length; i++) list[i][0] += ' (' + list[i][1] + ')';
       if (grund) {
          s = grund.replace(/[0-5]/g, '').replace(/q/i, '0').replace(/u/i, '1').replace(/l/i, '2').replace(/f/i, '3').replace(/g/i, '4').replace(/b/i, '5')
                   .replace(/[^0-5]/g, '').split('');
          for (i = 0; i < s.length; i++) s[i] = Number(s[i]);
       }
       autoantraege.exec('Dateiüberprüfung', [{type: 'select_multi', name: 'duep', text: 'Bitte DÜP-Gründe auswählen: ', list: list, standard: s}], function (p) {
              return [{change: function (alt) {
                                  if (alt.indexOf('{{Dateiüberprüfung|') > -1) return false;
                                  if (alt.indexOf('{{DÜP|') > -1) return false;
                                  return alt + '\n{{Dateiüberprüfung|'+ p.duep.join('|') + '}}'; },
                       summary: 'Dateiüberprüfung'}];
       }, as);
},
'b_warn':
       function (grund, as) {
       var list = [['Test', 'Freundlicher Hinweis, mit dem Vandalieren aufzuhören'],
                   ['Test2', 'Deutlicher Hinweis, mit dem Vandalieren aufzuhören'],
                   ['Test1', 'Freundlicher Hinweis, für Tests die Spielwiese zu nutzen'],
                   ['Tastaturtest', 'Freundlicher Hinweis bei Tastaturtests'],
                   ['Mitarbeit', 'Aufforderung, nicht nur die Benutzerseite zu pflegen'],
                   ['Linkspam', 'Aufforderung, Weblinkspam zu unterlassen'],
                   ['Litspam', 'Aufforderung, Literaturspam zu unterlassen'],
                   ['WT', 'Hinweis nach SLA auf Werbung']];
       for (var i = 0; i < list.length; i++) {
           var e = list[i];
           list[i] = [e[0], e[0], e[1]];
       }
       autoantraege.exec('Warnung an den Benutzer', [{type: 'select', name: 'v', text: 'Hinweisvorlage: ', list: list}], function (p) {
              return [{change: function (alt) {
                                  var v = '{{ers:' + p.v + '}}';
                                  if (alt === '') return v;
                                  return alt + '\n\n' + v;
                               },
                       summary: 'Hinweis', create: true}];
       }, as);
},
'b_hinweis':
       function (grund, as) {
       var list = [['Hallo', 'Allgemeine Begrüßung'],
                   ['Willkommen', 'alternative Begrüßungsvorlage'],
                   //Begrüßung, HalloIP
                   ['Unterschreiben', 'Bitte, Diskussionsbeiträge zu unterschreiben'],
                   ['Unterseite', 'Hinweis auf die Möglichkeit Artikel im BNR vorzubereiten'],
                   ['Vorschau', 'Bitte, die Vorschau zu verwenden (ohne genaue Angabe des Artikels)'],
                   ['Hinweis Commons', 'Bitte, Bilder auf Commons hochzuladen']];
       for (var i = 0; i < list.length; i++) {
           var e = list[i];
           list[i] = [e[0], e[0], e[1]];
       }
       autoantraege.exec('Hinweis für den Benutzer', [{type: 'select', name: 'v', text: 'Hinweisvorlage: ', list: list}], function (p) {
              return [{change: function (alt) {
                                  var v = '{{ers:' + p.v + '}}';
                                  if (alt === '') return v;
                                  return alt + '\n\n' + v;
                               },
                       summary: 'Hinweis', create: true}];
       }, as);
},
'b_hinweis_a':
       function (grund, as) {
       var list = [['Vorschau', 'Bitte, die Vorschau zu verwenden'],
                   ['Werbung', 'Hinweis bei wieder gelöschter Werbung'],
                   ['LD-Hinweis', 'Hinweis auf Löschdiskussion'],
                   ['QS-Hinweis', 'Hinweis auf QS'],
                   ['URV-Hinweis', 'Hinweis bei URV (Artikel und URL der Quelle bitte mit | trennen!)']];
       for (var i = 0; i < list.length; i++) {
           var e = list[i];
           list[i] = [e[0], e[0], e[1]];
       }
       autoantraege.exec('Hinweis für den Benutzer', [{type: 'select', name: 'v', text: 'Hinweisvorlage: ', list: list},
                                                      {type: 'input', name: 'a', text: 'Betroffener Artikel: ', enter: true}], function (p) {
              var param = p.a, url = '';
              if (p.v == 'URV-Hinweis') {
                 param = param.replace(/\|.*$/, '');
                 url = p.a.replace(/^.*?\|/, '');
                 url = '|' + autoantraege.escape(url).replace(/^1=/, '2=');
              }
              return [{change: function (alt) {
                                  var v = '{{ers:' + p.v + '|' + autoantraege.escape(param) + url + '}}';
                                  if (alt === '') return v;
                                  return alt + '\n\n' + v;
                               },
                       summary: 'Hinweis', create: true}];
       }, as);
}
},

//grund optional, kompatibel mit PDD
eintragen: function (typ, grund, as) {
  typ = typ.toString();
  var pdd = //Kompatibilität mit PDD
  {'1': 'qs', '2': 'la', '3': 'sla', '5': 'urv', '6': 'vm_benutzer', '7': 'la_kat', '8': 'la_vorlage', '9': 'vm_artikel', '11': 'kat_versch'};

  if (typ in pdd) typ = pdd[typ];
  if (!(typ in autoantraege.execute)) return window.alert('Falscher Parameter!');

  if (typeof grund != 'string') grund = '';
  if (grund === '') grund = autoantraege.standard_grund[typ];
  if (typeof grund != 'string') grund = '';

  if (as === undefined) as = autoantraege.autosave_override[typ];
  if (as === undefined) as = autoantraege.autosave;

  autoantraege.execute[typ](grund, as);
},

//revertiert
revert: function (param, as) {
  if (as === undefined) as = autoantraege.autosave_override.revert;
  if (as === undefined) as = autoantraege.autosave;

  //TODO
  var list = [['Vandalismus', '[[Wikipedia:Vandalismus|Vandalismus]]', 'Vandalismus (mit Link)'],
              ['Quelle', 'Bitte inhaltliche Änderungen mit Fundstellen/Belegen/Quellen begründen (siehe auch [[WP:BLG]]) und künftig den Hinweis „[[WP:ZQ|Zusammenfassung und Quellen]]“ nutzen.', 'Bitte inhaltliche Änderungen mit Fundstellen/Belegen/Quellen begründen (siehe auch WP:BLG) und künftig den Hinweis „Zusammenfassung und Quellen“ nutzen.'],
              ['Weblink', 'Weblink bietet keine [[WP:WEB|weiterführenden lexikographischen Informationen]].', 'Weblink bietet keine weiterführenden lexikographischen Informationen.'],
              ['Unenzyklopädisch', 'Beitrag nicht von enzyklopädischer Textqualität. Bitte „[[WP:WSIGA|Wie schreibe ich einen guten Artikel]]“ beachten.', 'Beitrag nicht von enzyklopädischer Textqualität. Bitte „Wie schreibe ich einen guten Artikel“ beachten.']];
  var list2 = [['{{Test}}', 'Test', 'Freundlicher Hinweis, mit dem Vandalieren aufzuhören'],
               ['{{Test2}}', 'Test2', 'Deutlicher Hinweis, mit dem Vandalieren aufzuhören'],
               ['VM', 'VM', 'Vandalismusmeldung zu diesem Benutzer']];
  var dialog = [{type: 'select_other', name: 'grund', text: 'Begründung: ', other: 'Sonstiger Grund', list: list, multiline: false, enter: true}];
  if (autoantraege.inform_autor) {
     dialog.push({type: 'toggle', name: 'warn', text: 'Benutzer verwarnen', standard: param.user ? true : false, list: [2, 3]});
     dialog.push({type: 'input', name: 'user', text: 'Benutzer: ', standard: param.user || '', enter: true});
     dialog.push({type: 'select', name: 'vorlage', text: 'Verwarnung: ', list: list2});
  }
  autoantraege.exec('Rückgängig machen', dialog, function (p) {
      var bearb = [{edit: 'revert', title: param.title, revert: param, summary: autoantraege.revert_vorsatz + p.grund}];
      if (p.warn) {
         if (p.vorlage == 'VM') {
            bearb.push({title: autoantraege.vm_seite, section: 'new',
                        change: '{{Benutzer|' + autoantraege.escape(p.user) + '}} Siehe {{Artikel|' + mw.config.get('wgPageName') + '}} und meinen Revert „' +
                                p.grund + '“ ' + autoantraege.sig, summary: '[[Benutzer:' + p.user + ']]'});
         } else {
            bearb.push({change: function (alt) {
                                  if (/Test/.test(alt)) return false;
                                  if (/[sS]top[ _]hand\.svg/.test(alt)) return false;
                                  if (/letzte.+warnung/i.test(alt)) return false;
                                  var v = '{{ers:' + p.vorlage + '}}';
                                  if (alt === '') return v;
                                  return alt + '\n\n' + v;
                                },
                        title: 'Benutzer Diskussion:' + p.user, summary: 'Hinweis', create: true});
         }
      }
      return bearb;
  }, as);
},

init: function() {
//TODO andere Zeitzonen
  var heute = new Date();
  var jahr = heute.getFullYear();
  var monat = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'][heute.getMonth()];
  var tag = heute.getDate();
  var datum = tag + '._' + monat + '_' + jahr;
  autoantraege.qs_seite += datum;
  autoantraege.la_seite += datum;
  datum = jahr + '/' + monat + '/' + tag;
  autoantraege.kat_seite += datum;

  if (typeof autosave == 'boolean') autoantraege.autosave = autosave;
  if (typeof defaultSLA == 'string') autoantraege.standard_grund.sla = defaultSLA;
  if (typeof defaultVandal == 'string') autoantraege.standard_grund.vm_benutzer = defaultVandal;
  if (typeof defaultAVandal == 'string') autoantraege.standard_grund.vm_artikel = defaultAVandal;
  if (typeof usersignature == 'string') autoantraege.sig = usersignature;

  if ($.inArray('sysop', mw.config.get('wgUserGroups')) > -1) autoantraege.admin = true;

  if (autoantraege.zeige_menu || autoantraege.zeige_revert) {
     mw.loader.load('jquery.ui');
     if (autoantraege.zeige_menu) $(autoantraege.init_menu);
     if (autoantraege.zeige_revert) $(autoantraege.init_revert);
  }
  if (autoantraege.zeige_erl && mw.config.get('wgNamespaceNumber') !== 0) {
     $(function(){ if ( document.getElementById('autoarchiv-erledigt-baustein') || $('#Vorlage-Autoarchiv:has(a[title="Vorlage:Erledigt"])').length > 0)
                      autoantraege.autoerledigt('Erledigt', 'erl.', 'erl.', 'Diesen Abschnitt als erledigt markieren'); });
  }
  if (autoantraege.zeige_inuse && mw.config.get('wgPageName') == 'Wikipedia:Bots/Anfragen') {
     $(function(){ autoantraege.autoerledigt('InuseBot', 'Anfrage wird bearbeitet', 'inuse', 'Diese Anfrage als in Bearbeitung markieren'); });
  }
},

init_menu: function() {
  var ziel = 'p-tb';
  var ns = mw.config.get('wgNamespaceNumber');
  //QS: Artikel, Vorlagen, Kategorien
  if (ns === 0 || ns == 10 || ns == 14)
     mw.util.addPortletLink(ziel, '#', 'QS+', 't-qs', 'QS-Antrag stellen').onclick = function(){autoantraege.eintragen('qs'); return false;};
  //Fach-QS: Artikel, Vorlagen, Kategorien
  if (ns === 0 || ns == 10 || ns == 14)
     mw.util.addPortletLink(ziel, '#', 'Fach-QS+', 't-fachqs', 'Fach-QS-Antrag stellen').onclick = function(){autoantraege.eintragen('fach-qs'); return false;};
  //URV
  if (ns != -1)
     mw.util.addPortletLink(ziel, '#', 'URV+', 't-urv', 'Als Urheberrechtsverletzung markieren').onclick = function(){autoantraege.eintragen('urv'); return false;};
  //LA: keine Diskussionsseiten
  if (ns % 2 === 0)
     mw.util.addPortletLink(ziel, '#', 'LA+', 't-la', 'Löschantrag stellen').onclick = function(){autoantraege.eintragen('la'); return false;};
  //DÜP: Dateien
  if (ns == 6 && !autoantraege.hide_duep)
     mw.util.addPortletLink(ziel, '#', 'DÜP+', 't-duep', 'Dateiüberprüfung').onclick = function(){autoantraege.eintragen('duep'); return false;};
  //KAT_VERSCH: nur Kategorien
  if (ns == 14)
     mw.util.addPortletLink(ziel, '#', 'Kat. verschieben', 't-katversch', 'Antrag zur Kategorie-Verschiebung stellen').onclick =
        function(){autoantraege.eintragen('kat_versch'); return false;};
  //SLA
  if (ns != -1) {
     if (autoantraege.admin) {
        mw.util.addPortletLink(ziel, '#', 'Löschen', 't-sla', 'Schnelllöschen').onclick = function(){autoantraege.eintragen('sla'); return false;};
     } else {
        mw.util.addPortletLink(ziel, '#', 'SLA+', 't-sla', 'Schnelllöschantrag stellen').onclick = function(){autoantraege.eintragen('sla'); return false;};
     }
  }
  //VM
  if (ns == 2 || ns == 3 || mw.config.get('wgCanonicalSpecialPageName') == 'Contributions') {
     mw.util.addPortletLink(ziel, '#', 'VM+', 't-vm', 'Benutzer als Vandale/Edit-Krieger melden').onclick =
        function(){autoantraege.eintragen('vm_benutzer'); return false;};
  } else if (ns != -1) {
     mw.util.addPortletLink(ziel, '#', 'VM+', 't-vm', 'Sperrung der Seite wegen Vandalismus/Edit-War beantragen').onclick =
        function(){autoantraege.eintragen('vm_artikel'); return false;};
  }
  //Benutzerdisk.
  if (ns == 3) {
  //TODO einschränken
     mw.util.addPortletLink(ziel, '#', 'Warnung+', 't-warn', 'Den Benutzer verwarnen').onclick = function(){autoantraege.eintragen('b_warn'); return false;};
     mw.util.addPortletLink(ziel, '#', 'Hinweis+', 't-hinweis', 'Den Benutzer freundlich auf etwas hinweisen').onclick =
        function(){autoantraege.eintragen('b_hinweis'); return false;};
     mw.util.addPortletLink(ziel, '#', 'Hinweis (Art.)+', 't-hinweis-a', 'Dem Benutzer einen auf einen konkreten Artikel bezogenen Hinweis geben').onclick =
        function(){autoantraege.eintragen('b_hinweis_a'); return false;};
  }
},

autoerledigt: function(vorlage, kommentar, link, titel) {
  $('.mw-editsection').each(function() {
     var $this = $(this);
     var section = null;
     $this.find('a').each(function() {
         if (section !== null) return;
         section = mw.util.getParamValue('section', $(this).attr('href') || 'x');
         if (section !== null && section.search(/^\d+$/) == -1) section = null; //keine transkludierten Abschnitte
     });
     if (section === null) return;
     section = Number(section);
     var summ = $this.parent().find('.mw-headline').attr('id') || '';
     summ = summ.replace(/_/g, ' ').replace(/(\.[0-9A-F]{2})+/g, function (utf8) {return decodeURIComponent(utf8.replace(/\./g, '%'));});
     if (summ) summ = '/* ' + summ + ' */ ';
     summ += kommentar;
     var $link = $('<a/>', {title: titel, href: '#'}).text(link).click(function() {
           libs.autoedit.edit_series([{section: section,
                                  change: function (alt) {
                                             if (alt.indexOf('{{' + vorlage) > -1) return false;
                                             if (alt.indexOf('{{' + vorlage.replace(/^./, function (c) { return c.toLowerCase(); })) > -1) return false;
                                             return alt + '\n\n{{' + vorlage + '|' + autoantraege.escape('~~~~') + '}}'; },
                                  summary: summ}], autoantraege.autosave, autoantraege.warn_edit, true);
           return false;
     });
     $this.append(' / [').append($link).append(']');
  });
},

init_revert: function () {
  var link = function (param) {
      if (param.undoafter === null) delete param.undoafter;
      if (param.user === null) delete param.user;
      var text = '', tip = '';
      if (param.reset) {
         text = 'wiederherstellen'; tip = 'auf diese Version revertieren'; delete param.user;
      } else if (param.user) {
         text = 'verbessertes Rückgängig'; tip = 'Diese Änderung von Benutzer:' + param.user + ' mit Dialog rückgängig machen.';
      } else {
         text = 'verbessertes Rückgängig'; tip = 'Diese Änderungen mit Dialog rückgängig machen.';
      }
      return $(mw.html.element('a', {href: '#', title: tip}, text)).click(function(e) {
              e.preventDefault();
              autoantraege.revert(param);
             });
  };
  var situation = '';
  if (mw.util.getParamValue('diff')) {
     situation = ($('.diff-multi').length > 0) ? 'diffmulti' : 'diff';
  } else if (mw.util.getParamValue('oldid')) {
     situation = 'old';
  } else if (mw.config.get('wgAction') == 'history') {
     situation = 'history';
  } else if (mw.config.get('wgCanonicalSpecialPageName') == 'Contributions') {
     situation = 'contrib';
  } else if ($.inArray(mw.config.get('wgCanonicalSpecialPageName'), ['Recentchanges', 'Recentchangeslinked', 'Watchlist'])) {
     situation = 'changes';
  }
  if (situation === '') return;

  switch (situation) {
  case 'diff': case 'diffmulti':
   $('#mw-diff-otitle1, #mw-diff-ntitle1').find('a').each(function() {
    var $a = $(this), href = $a.attr('href'), $link;
    if (!href) return;
    if (mw.util.getParamValue('action', href) != 'edit') return;
    var oldid = mw.util.getParamValue('oldid', href), undo = mw.util.getParamValue('undo', href);
    if (oldid !== null) $link = link({reset: oldid});
    if (undo !== null) $link = link({undo: undo, undoafter: mw.util.getParamValue('undoafter', href),
                                     user: (situation == 'diffmulti') ? null : $('#mw-diff-ntitle2').find('.mw-userlink').text()});
    if ($link) $a.after($link).after(' | ');
   });
  break;
  case 'old':
   $('#mw-revision-info').after(link({reset: mw.util.getParamValue('oldid')}));
  break;
  case 'history':
   $('#pagehistory').find('li').each(function() {
    var $li = $(this), $rev = $li.find('.mw-history-undo'), href = $rev.find('a').attr('href');
    if (!href) return;
    var $link1 = link({reset: mw.util.getParamValue('undo', href)}),
        $link2 = link({undo: mw.util.getParamValue('undo', href), undoafter: mw.util.getParamValue('undoafter', href), user: $li.find('.mw-userlink').text()});
    $rev.after($link2).after(' | ').after($link1).after(' | ');
   });
  break;
  case 'contrib':
   mw.util.$content.find('ul:last').find('li').each(function() {
    $(this).find('a').each(function() {
     var $a = $(this), href = $a.attr('href');
     if (!href) return;
     if (mw.util.getParamValue('diff', href) != 'prev') return;
     var $link = link({undo: mw.util.getParamValue('oldid', href), user: $('[name=target]').val(), title: mw.util.getParamValue('title', href)});
     $a.after($link).after(' | ');
    });
   });
  break;
  case 'changes':
//TODO
  break;
  }
}
};

if (mw.config.get('debug')) window.autoantraege = autoantraege;
$(document).trigger('loadWikiScript', ['Benutzer:Schnark/js/autoantraege.js', autoantraege]);

autoantraege.init();

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