Zum Inhalt springen

„Benutzer:Umherirrender/monobook.js“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Inhalt gelöscht Inhalt hinzugefügt
K -bklCheck-Test
K fixes
Zeile 83: Zeile 83:
summarySelect.name = "summarySelect";
summarySelect.name = "summarySelect";
summarySelect.id = "summarySelect";
summarySelect.id = "summarySelect";
summarySelect.onchange = changeSummarySelect;
summarySelect.onchange = function() {
var summarySelect = document.getElementById( "summarySelect" );
var option = summarySelect.getElementsByTagName( "option" )[ summarySelect.selectedIndex ];
var summary = document.getElementById( "wpSummary" );
//append with a space
if (summary.value === "") {
summary.value = option.value;
}
//für vorbelegungen
else if (summary.value.substring(0,2) === " |") {
summary.value = option.value + summary.value;
} else {
summary.value += " " + option.value;
}
};
// the label
// the label
var label = spanLabel.getElementsByTagName ( "label" )[0];
var label = spanLabel.getElementsByTagName ( "label" )[0];
Zeile 116: Zeile 130:
//Link zum leeren der Zusammenfassung
//Link zum leeren der Zusammenfassung
spanLabel.appendChild( document.createTextNode( ' | ' ) );
spanLabel.appendChild( document.createTextNode( ' | ' ) );
var aLeeren = document.createElement( 'a' );
var $aLeeren = $( document.createElement( 'a' ) );
aLeeren.href = 'javascript:summaryLeeren()';
$aLeeren.click( function () {
aLeeren.appendChild( document.createTextNode( 'leeren' ) );
var summary = document.getElementById( 'wpSummary' );
spanLabel.appendChild ( aLeeren );
if ( summary ) {
summary.value = '';
}
} );
$aLeeren.text( 'leeren' );
spanLabel.appendChild( $aLeeren[0] );
//vordefinierten Text entfernen
//vordefinierten Text entfernen
spanLabel.appendChild( document.createTextNode( ' | ' ) );
spanLabel.appendChild( document.createTextNode( ' | ' ) );
var aEntfernen = document.createElement( 'a' );
var $aEntfernen = $( document.createElement( 'a' ) );
aEntfernen.href = 'javascript:summaryEntfernen()';
$aEntfernen.click( function () {
aEntfernen.appendChild( document.createTextNode( 'entfernen' ) );
var summary = document.getElementById( 'wpSummary' );
if ( summary ) {
spanLabel.appendChild ( aEntfernen );
var index = summary.value.indexOf( ' |' );
if ( index !== -1 ) {
summary.value = summary.value.substring( 0, index );
}
}
} );
$aEntfernen.text( 'entfernen' );
spanLabel.appendChild ( $aEntfernen[0] );
//bei falsche auswahl
//bei falsche auswahl
spanLabel.appendChild( document.createTextNode( ' | ' ) );
spanLabel.appendChild( document.createTextNode( ' | ' ) );
var aFalsch = document.createElement( 'a' );
var $aFalsch = $( document.createElement( 'a' ) );
aFalsch.href = 'javascript:summaryFalsch()';
$aFalsch.click( function () {
aFalsch.appendChild( document.createTextNode( 'falsch' ) );
var summary = document.getElementById( 'wpSummary' );
spanLabel.appendChild ( aFalsch );
if ( summary ) {
var index = summary.value.indexOf( ' |' );
if ( index !== -1 ) {
summary.value = summary.value.substring( index );
} else {
summary.value = '';
}
}
} );
$aFalsch.text( 'falsch' );
spanLabel.appendChild ( $aFalsch[0] );
}
}
var textbox = document.getElementById("wpTextbox1");
var textbox = document.getElementById("wpTextbox1");
Zeile 140: Zeile 177:
textTemplateSelect.name = "textTemplateSelect";
textTemplateSelect.name = "textTemplateSelect";
textTemplateSelect.id = "textTemplateSelect";
textTemplateSelect.id = "textTemplateSelect";
textTemplateSelect.onchange = changeTextTemplateSelect;
textTemplateSelect.onchange = function() {
var textTemplateSelect = document.getElementById( "textTemplateSelect" );
var textTemplateOutput = document.getElementById( "textTemplateOutput" );
var option = textTemplateSelect.getElementsByTagName( "option" )[ textTemplateSelect.selectedIndex ];
// extra behandlung für katsort
if( option.text === 'katsort' ) {
var textarea = document.getElementById( 'wpTextbox1' );
if( textarea ) {
var content = textarea.value;
//bereits vorhanden?
if( content.match( /\{\{\s*(?:SORTIERUNG|DEFAULTSORT|DEFAULTSORTKEY|DEFAULTCATEGORYSORT)\s*:[^\}]*\}\}/i ) ) {
textTemplateOutput.style.backgroundColor = 'red';
} else {
//ersetze den ersten Kategorieeintrag durch SORTIERUNG und den Kategorieeintrag
textarea.value = content.replace( /\s*\[\[\s*(?:kategorie|category)\s*:([^\|\]]*)\|?([^\]]*)\]\]/i,
'\n\n{{SORTIERUNG:$2}}\n[[Kategorie:$1]]' );
}
}
}
//SLAs am Anfang ins Textfeld einfügen
else if( option.value.match( /\{\{SLA\|/ ) ) {
var textarea = document.getElementById( 'wpTextbox1' );
if( textarea ) {
textarea.value = option.value + '\n' + textarea.value;
}
}
textTemplateOutput.value = option.value;
textTemplateOutput.select();
};
var textTemplateOutput = document.createElement( "input" );
var textTemplateOutput = document.createElement( "input" );
textTemplateOutput.name = "textTemplateOutput";
textTemplateOutput.name = "textTemplateOutput";
Zeile 158: Zeile 223:
textbox.parentNode.insertBefore(div, textbox);
textbox.parentNode.insertBefore(div, textbox);
}
}
// Funktionen in [[Benutzer:Umherirrender/monobook-tidy-up.js]] enthalten
//Link für Suchen und Ersetzen
$( mw.util.addPortletLink(
'p-tb',
'#',
'Suchen und Ersetzen',
't-tidy-up-replace',
'tidy-up-replace',
null,
null
) ).click( function() {
if ( window.callbackMonobookTidyUpJs === undefined ) {
// load on demand
window.callbackMonobookTidyUpJs = function() {
tidyupReplace();
};
mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-tidy-up.js&action=raw&ctype=text/javascript' );
} else {
tidyupReplace();
}
} );
// Standardlink zum Quelltext aufräumen
$( mw.util.addPortletLink(
'p-tb',
'#',
'tidy-up',
't-tidy-up',
'tidy-up',
null,
null
) ).click( function() {
if ( window.callbackMonobookTidyUpJs === undefined ) {
window.callbackMonobookTidyUpJs = function() {
tidyup();
};
// load on demand
mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-tidy-up.js&action=raw&ctype=text/javascript' );
} else {
tidyup();
}
} );
}
}
})});


function setOptionsToSelect( select, desc, subdesc ) {
/* event of summarySelect */
for (var id in desc) {
function changeSummarySelect() {
var value = desc[id], subdescfordesc = null, option, optgroup, subid;
var summarySelect = document.getElementById( "summarySelect" );
if( typeof( value ) === 'object' ) {
var option = summarySelect.getElementsByTagName( "option" )[ summarySelect.selectedIndex ];
subdescfordesc = value;
var summary = document.getElementById( "wpSummary" );
//append with a space
if (summary.value === "") {
summary.value = option.value;
}
//für vorbelegungen
else if (summary.value.substring(0,2) === " |") {
summary.value = option.value + summary.value;
} else {
summary.value += " " + option.value;
}
}

/* event of textTemplateSelect */
function changeTextTemplateSelect() {
var textTemplateSelect = document.getElementById( "textTemplateSelect" );
var textTemplateOutput = document.getElementById( "textTemplateOutput" );
var option = textTemplateSelect.getElementsByTagName( "option" )[ textTemplateSelect.selectedIndex ];
// extra behandlung für katsort
if( option.text === 'katsort' ) {
var textarea = document.getElementById( 'wpTextbox1' );
if( textarea ) {
var content = textarea.value;
//bereits vorhanden?
if( content.match( /\{\{\s*(?:SORTIERUNG|DEFAULTSORT|DEFAULTSORTKEY|DEFAULTCATEGORYSORT)\s*:[^\}]*\}\}/i ) ) {
textTemplateOutput.style.backgroundColor = 'red';
} else {
//ersetze den ersten Kategorieeintrag durch SORTIERUNG und den Kategorieeintrag
textarea.value = content.replace( /\s*\[\[\s*(?:kategorie|category)\s*:([^\|\]]*)\|?([^\]]*)\]\]/i,
'\n\n{{SORTIERUNG:$2}}\n[[Kategorie:$1]]' );
}
}
}
}
//SLAs am Anfang ins Textfeld einfügen
else if( option.value.match( /\{\{SLA\|/ ) ) {
var textarea = document.getElementById( 'wpTextbox1' );
if( textarea ) {
textarea.value = option.value + '\n'
+ textarea.value;
}
}
textTemplateOutput.value = option.value;
textTemplateOutput.select();
}

function setOptionsToSelect( select, desc, subdesc ) {
for (var id in desc) {
var value = desc [ id ];
var subdescfordesc = null;
if( typeof( value ) === 'object' ) {
subdescfordesc = value;
}
//sofern Unterdefinitionen vorhanden sind
//sofern Unterdefinitionen vorhanden sind
if ( subdescfordesc !== null ) {
if ( subdescfordesc !== null ) {
var optgroup = document.createElement( "optgroup" );
optgroup = document.createElement( "optgroup" );
select.appendChild ( optgroup );
select.appendChild ( optgroup );
optgroup.label = id;
optgroup.label = id;
optgroup.value = id;
optgroup.value = id;
for ( var subid in subdescfordesc ) {
for ( subid in subdescfordesc ) {
var option = document.createElement( "option" );
option = document.createElement( "option" );
optgroup.appendChild ( option );
optgroup.appendChild ( option );
option.value = subdescfordesc [ subid ];
option.value = subdescfordesc [ subid ];
option.text = subid;
option.text = subid;
}
} else {
option = document.createElement( "option" );
select.appendChild ( option );
option.value = value;
option.text = id;
}
}
} else {
}
var option = document.createElement( "option" );
select.appendChild ( option );
option.value = value;
option.text = id;
}
}
}
}


/* angezeigter Text für die Zusammenfassung */
/* angezeigter Text für die Zusammenfassung */
Zeile 319: Zeile 292:
"Koordinaten in Infobox übertragen",
"Koordinaten in Infobox übertragen",
"Toolbar-Müll entfernt"
"Toolbar-Müll entfernt"
] };
]; }


/* angezeigter Text als Textvorlage - links der angezeigte Text - rechts der gesetzte Text */
/* angezeigter Text als Textvorlage - links der angezeigte Text - rechts der gesetzte Text */
Zeile 349: Zeile 322:
"Preloadseite": "<noinclude>{{Dokumentation/Preloadseite}}</noinclude>"
"Preloadseite": "<noinclude>{{Dokumentation/Preloadseite}}</noinclude>"
}
}
} };
}; }
});});


// Funktionen in [[Benutzer:Umherirrender/monobook-tidy-up.js]] enthalten
(function() {
var loaded = false;
mw.loader.load( [ 'mediawiki.util' ], function() {
//Link für Suchen und Ersetzen
$( mw.util.addPortletLink(
'p-tb',
'#',
'Suchen und Ersetzen',
't-tidy-up-replace',
'tidy-up-replace',
null,
null
) ).click( function() {
if ( loaded ) {
tidyupReplace();
} else {
mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-tidy-up.js&action=raw&ctype=text/javascript' )
.done( function() {
tidyupReplace();
} );
loaded = true;
}
} );
// Standardlink zum Quelltext aufräumen
$( mw.util.addPortletLink(
'p-tb',
'#',
'tidy-up',
't-tidy-up',
'tidy-up',
null,
null
) ).click( function() {
if ( loaded ) {
tidyup();
} else {
// load on demand
mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-tidy-up.js&action=raw&ctype=text/javascript' )
.done( function() {
tidyup();
} );
loaded = true;
}
} );
} );


(function() {
//nur Artikel und beim Öffnen des Bearbeitenmodus
//nur Artikel und beim Öffnen des Bearbeitenmodus
if ( mw.config.get( 'wgNamespaceNumber' ) === 0 && mw.config.get( 'wgAction' ) === 'edit' ) {
if ( mw.config.get( 'wgNamespaceNumber' ) === 0 && mw.config.get( 'wgAction' ) === 'edit' ) {
mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-tidy-up.js&action=raw&ctype=text/javascript' )
window.callbackMonobookTidyUpJs = function() {
$( function() {
.done( function() { $( function() {
tidyup();
tidyup();
} );
} ); } );
loaded = true;
};
// load on demand
mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-tidy-up.js&action=raw&ctype=text/javascript' );
}
}
}());
}());

function summaryFalsch () {
var summary = document.getElementById( 'wpSummary' );
if ( summary ) {
var index = summary.value.indexOf( ' |' );
if ( index !== -1 ) {
summary.value = summary.value.substring( index );
} else {
summary.value = '';
}
}
}

function summaryEntfernen () {
var summary = document.getElementById( 'wpSummary' );
if ( summary ) {
var index = summary.value.indexOf( ' |' );
if ( index !== -1 ) {
summary.value = summary.value.substring( 0, index );
}
}
}

function summaryLeeren () {
var summary = document.getElementById( 'wpSummary' );
if ( summary ) {
summary.value = '';
}
}
//</nowiki> __NOINDEX__
//</nowiki> __NOINDEX__


Zeile 401: Zeile 389:
* Something for [[MediaWiki:Group-sysop.js]]
* Something for [[MediaWiki:Group-sysop.js]]
*/
*/
if( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Revisiondelete' || mw.config.get( 'wgAction' ) === 'revisiondelete'
if( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Revisiondelete' || mw.config.get( 'wgAction' ) === 'revisiondelete' ||
|| mw.config.get( 'wgAction' ) === 'delete'
mw.config.get( 'wgAction' ) === 'delete' ||
|| mw.config.get( 'wgAction' ) === 'protect' || mw.config.get( 'wgAction' ) === 'unprotect'
mw.config.get( 'wgAction' ) === 'protect' || mw.config.get( 'wgAction' ) === 'unprotect'
) {
) {
mw.loader.using( [ 'jquery.byteLimit' ], function() { $( function() {
mw.loader.using( [ 'jquery.byteLimit' ], function() { $( function() {
Zeile 420: Zeile 408:
}
}
});
});
})});
});});
}
}


Zeile 444: Zeile 432:


function findDupArgs() {
function findDupArgs() {
var api = new mw.Api;
var api = new mw.Api();
var $textbox = $( '#wpTextbox1' );
var $textbox = $( '#wpTextbox1' );
if ( !$textbox.length ) {
if ( !$textbox.length ) {
Zeile 486: Zeile 474:
var allArgs = {};
var allArgs = {};
$node.children( 'part' ).each( function() {
$node.children( 'part' ).each( function() {
$part = $( this );
var $part = $( this ), name, found, start, end;
if ( $part.children( 'name' ).attr( 'index' ) ) {
if ( $part.children( 'name' ).attr( 'index' ) ) {
Zeile 496: Zeile 484:
if ( name in allArgs ) {
if ( name in allArgs ) {
found = true;
found = true;
var start = calcLength( xmlDoc.firstChild, $part.children( 'name' )[0] );
start = calcLength( xmlDoc.firstChild, $part.children( 'name' )[0] );
var end = start + calcLength( $part[0] );
end = start + calcLength( $part[0] );
$textbox.textSelection( 'setSelection', { start: start, end: end } );
$textbox.textSelection( 'setSelection', { start: start, end: end } );
$textbox.textSelection( 'scrollToCaretPosition' );
$textbox.textSelection( 'scrollToCaretPosition' );

Version vom 11. März 2016, 23:41 Uhr

/*
 * @author Umherirrender - [[:de:User:Umherirrender]]
 * develop with and for Internet Explorer 11+
 *
 * gegen Übernahmen spricht nichts, nur bitte nicht diese JavaScript-Seite direkt einbinden
 * ohne Gewähr und ohne Support
 *
 * eigene Anpassungen für die deutschsprachige Wikipedia
 */

/*
 * Anpassungen FlaggedRevs
 * [[Benutzer:Umherirrender/monobook-flaggedrevs.js]]
 */
mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-flaggedrevs.js&action=raw&ctype=text/javascript' );

//<nowiki>

/*
 * lokale Anpassungen
 */

/* belasse den lokalen Bearbeitungslink bei Commonsbilder - aus [[MediaWiki:Common.js]] */
mw.config.set( 'keepLocalFileTabs', true );

mw.loader.using( [ 'mediawiki.util' ], function() { $( function () {
 var wgNamespaceNumber = mw.config.get( 'wgNamespaceNumber' );
 /* nur Systemnachrichten */
 if( wgNamespaceNumber === 8 ) {
  /* link zum translatewiki */
  var messageName = mw.config.get( 'wgTitle' );
  if( messageName.indexOf( '/' ) === -1 ) {
   messageName += '/de';
  }
  mw.util.addPortletLink(
   'p-tb',
   '//translatewiki.net/wiki/MediaWiki:' + mw.util.wikiUrlencode( messageName ),
   'Translatewiki',
   't-translatewiki',
   'Translatewiki',
   'b',
   '#t-recentchangeslinked'
  );
 }
 /* nur Dateien */
 if( wgNamespaceNumber === 6 ) {
  /* setzt die hinzugefügten Hinweise bei Dateien sichtbar in den ersten head */
  var firstHeading = $( '#firstHeading' );
  var nc = $( '#Vorlage_NowCommons' );
  if( nc.length ) {
   var span = $( document.createElement( 'span' ) );
   span.css( 'font-size', '50%' );
   span.attr( 'id', 'hinweis-local-file-nc' );
   span.text( ' (NowCommons)' );
   firstHeading.append( span );
  }
  var sc = $( '#Vorlage_ShadowsCommons' );
  if( sc.length ) {
   var span = $( document.createElement( 'span' ) );
   span.css( 'font-size', '50%' );
   span.attr( 'id', 'hinweis-local-file-sc' );
   span.text( ' (ShadowsCommons)' );
   firstHeading.append( span );
  }
 }
 /* nur im Vorschaumodus */
 if ( mw.config.get( 'wgAction' ) === 'submit' ) {
  //hinweis wenn noch keine Bearbeitungskommentar zum voreingestellten Text ergänzt wurde
  var summary = $( '#wpSummary' );
  if ( summary.length && summary.val().substring(0,2) === ' |' ) {
   summary.css( 'background-color', 'FF6A6A' );
  }
 }
 /* im Bearbeitenmodus */
 if ( mw.config.get( 'wgAction' ) === 'edit' || mw.config.get( 'wgAction' ) === 'submit' ) {
  /* ergänzt zum label für Zusammenfassungszeile ein Auswahlmenü */
  // span of the label
  var spanLabel = document.getElementById( "wpSummaryLabel" );
  //nur, wenn unter der Textbox steht
  if ( spanLabel && spanLabel.parentNode && spanLabel.parentNode.className === "editOptions" ) {
   //the select
   var summarySelect = document.createElement( "select" );
   summarySelect.name = "summarySelect";
   summarySelect.id = "summarySelect";
   summarySelect.onchange = function() {
     var summarySelect = document.getElementById( "summarySelect" );
     var option = summarySelect.getElementsByTagName( "option" )[ summarySelect.selectedIndex ];
     var summary = document.getElementById( "wpSummary" );
     //append with a space
     if (summary.value === "") {
      summary.value = option.value;
     }
     //für vorbelegungen
     else if (summary.value.substring(0,2) === " |") {
      summary.value = option.value + summary.value;
     } else {
      summary.value += " " + option.value;
     }
   };
   // the label
   var label = spanLabel.getElementsByTagName ( "label" )[0];
   // set default
   var optionFirst = document.createElement( "option" );
   summarySelect.appendChild ( optionFirst );
   //Zeile kann link enthalten, suche Text
   var child = label.firstChild;
   while (!child.data) {
    child = child.firstChild;
   }
   //text setzen
   optionFirst.value = "";
   optionFirst.text = child.data;
   var summaryOption = getSummaryOption();
   if ( summaryOption && summaryOption.length ) {
    //set options
    for (var i = 0; i < summaryOption.length; i++) {
     var option = document.createElement( "option" );
     summarySelect.appendChild ( option );
     option.value = summaryOption[i];
     option.text = summaryOption[i];
    }
   }
   //make visible - hidden by my css
   spanLabel.style.display="block";
   //remove label
   spanLabel.removeChild( label ) ;
   //append select
   spanLabel.appendChild( summarySelect );
   
   //Link zum leeren der Zusammenfassung
   spanLabel.appendChild( document.createTextNode( '  | ' ) );
   var $aLeeren = $( document.createElement( 'a' ) );
   $aLeeren.click( function () {
    var summary = document.getElementById( 'wpSummary' );
    if ( summary ) {
     summary.value = '';
    }
   } );
   $aLeeren.text( 'leeren' );
   spanLabel.appendChild( $aLeeren[0] );
   //vordefinierten Text entfernen
   spanLabel.appendChild( document.createTextNode( ' | ' ) );
   var $aEntfernen = $( document.createElement( 'a' ) );
   $aEntfernen.click( function () {
    var summary = document.getElementById( 'wpSummary' );
    if ( summary ) {
     var index = summary.value.indexOf( ' |' );
     if ( index !== -1 ) {
      summary.value = summary.value.substring( 0, index );
     }
    }
   } );
   $aEntfernen.text( 'entfernen' );
   spanLabel.appendChild ( $aEntfernen[0] );
   //bei falsche auswahl
   spanLabel.appendChild( document.createTextNode( ' | ' ) );
   var $aFalsch = $( document.createElement( 'a' ) );
   $aFalsch.click( function () {
    var summary = document.getElementById( 'wpSummary' );
    if ( summary ) {
     var index = summary.value.indexOf( ' |' );
     if ( index !== -1 ) {
      summary.value = summary.value.substring( index );
     } else {
      summary.value = '';
     }
    }
   } );
   $aFalsch.text( 'falsch' );
   spanLabel.appendChild ( $aFalsch[0] );
  }
  var textbox = document.getElementById("wpTextbox1");
  //falls man nicht darf, braucht es auch keine Auswahl
  if(textbox && !textbox.getAttribute("readonly")) {
   /* setzt ein Auswahlmenü für Textvorlagen */
   var textTemplateSelect = document.createElement( "select" );
   textTemplateSelect.name = "textTemplateSelect";
   textTemplateSelect.id = "textTemplateSelect";
   textTemplateSelect.onchange = function() {
     var textTemplateSelect = document.getElementById( "textTemplateSelect" );
     var textTemplateOutput = document.getElementById( "textTemplateOutput" );
     var option = textTemplateSelect.getElementsByTagName( "option" )[ textTemplateSelect.selectedIndex ];
     // extra behandlung für katsort
     if( option.text === 'katsort' ) {
      var textarea = document.getElementById( 'wpTextbox1' );
      if( textarea ) {
       var content = textarea.value;
       //bereits vorhanden?
       if( content.match( /\{\{\s*(?:SORTIERUNG|DEFAULTSORT|DEFAULTSORTKEY|DEFAULTCATEGORYSORT)\s*:[^\}]*\}\}/i ) ) {
        textTemplateOutput.style.backgroundColor = 'red';
       } else {
        //ersetze den ersten Kategorieeintrag durch SORTIERUNG und den Kategorieeintrag
        textarea.value = content.replace( /\s*\[\[\s*(?:kategorie|category)\s*:([^\|\]]*)\|?([^\]]*)\]\]/i,
                                           '\n\n{{SORTIERUNG:$2}}\n[[Kategorie:$1]]' );
       }
      }
     }
     //SLAs am Anfang ins Textfeld einfügen
     else if( option.value.match( /\{\{SLA\|/ ) ) {
      var textarea = document.getElementById( 'wpTextbox1' );
      if( textarea ) {
       textarea.value = option.value + '\n' + textarea.value;
      }
     }
     textTemplateOutput.value = option.value;
     textTemplateOutput.select();
   };
   var textTemplateOutput = document.createElement( "input" );
   textTemplateOutput.name = "textTemplateOutput";
   textTemplateOutput.id = "textTemplateOutput";
   textTemplateOutput.size = "60";
   // set default
   var optionTextvorlage = document.createElement( "option" );
   textTemplateSelect.appendChild ( optionTextvorlage );
   optionTextvorlage.value = "";
   optionTextvorlage.text = "Textvorlage auswählen";
   //set options
   setOptionsToSelect(textTemplateSelect, getTextTemplateOption() );
   //set on window before textarea - div to avoid line feed
   var div = document.createElement( "div" );
   div.appendChild(textTemplateSelect);
   div.appendChild(textTemplateOutput);
   textbox.parentNode.insertBefore(div, textbox);
  }
 }

 function setOptionsToSelect( select, desc, subdesc ) {
  for (var id in desc) {
   var value = desc[id], subdescfordesc = null, option, optgroup, subid;
   if( typeof( value ) === 'object' ) {
    subdescfordesc = value;
   }
  
   //sofern Unterdefinitionen vorhanden sind
   if ( subdescfordesc !== null ) {
    optgroup = document.createElement( "optgroup" );
    select.appendChild ( optgroup );
    optgroup.label = id;
    optgroup.value = id;
    for ( subid in subdescfordesc ) {
     option = document.createElement( "option" );
     optgroup.appendChild ( option );
     option.value = subdescfordesc [ subid ];
     option.text = subid;
    }
   } else {
     option = document.createElement( "option" );
     select.appendChild ( option );
     option.value = value;
     option.text = id;
   }
  } 
 }

 /* angezeigter Text für die Zusammenfassung */
 function getSummaryOption() { return [
  "aw",
  "SLA",
  "katsort",
  "navifix",
  "linkfix",
  "dateifix",
  "typo",
  "reihenfolge",
  "PDfix",
  "PD ergänzt",
  "korrigiere Vorlageneinbindung",
  "Vorlage existiert nicht",
  "Vorlagen existieren nicht",
  "Vorlageneinbindung überflüssig",
  "nowiki, damit keine Vorlageneinbindung entsteht",
  "nowiki, damit keine Vorlageneinbindungen entstehen",
  "nowiki, damit keine Vorlagen- und Dateieinbindungen entstehen",
  "ich erlaube mir, die Seite zu leeren, um [[Spezial:Fehlende Vorlagen]] zu entlasten",
  "+{{[[Vorlage:Dokumentation|Dokumentation]]}}",
  "Doku ausgelagert",
  "Metadaten ausgelagert",
  "[[Wikipedia:Vermeide Selbstreferenzen]]",
  "[[Vorlage:PNDfehlt|PNDfehlt]] ist nur optional sichtbar, daher kein Aufzählungszeichen",
  "Keine browserspezifischen Anpassungen",
  "[[Hilfe:Einzelnachweise#Mehrspaltigkeit und alternative Formatierungen]]",
  "Lokale Anpassungen einer Systemnachricht auch für die Sprachvariante, durch Einbindung der Systemnachricht",
  "Vorlagenparameter damit Systemnachricht in Sprachvarianten einbindbar ist",
  "Keine Vorlagenkategorien in Artikelkategorien",
  "Keine Vorlagen in Artikelkategorien",
  "Keine Benutzerseiten in Artikelkategorien",
  "Keine Benutzerkategorien in Artikelkategorien",
  "Keine Dateien in Artikelkategorien",
  "Keine Dateikategorien in Artikelkategorien",
  "-lagewunsch, Koordinaten bereits vorhanden",
  "-lagewunsch, bereits durch Infobox",
  "Koordinaten in Infobox übertragen",
  "Toolbar-Müll entfernt"
 ]; }

 /* angezeigter Text als Textvorlage - links der angezeigte Text - rechts der gesetzte Text */
 function getTextTemplateOption() { return {
  "katsort": "{{SORTIERUNG:}}",
  'erledigt': '{{erledigt|~~~~}}',
  "SLAs": {
   "SLA": "{{SLA| --~~~~}}",
   "SLA (Vorlage)": "<noinclude>{{SLA| --~~~~}}</noinclude>",
   "Tastaturtest": "{{SLA|Tastaturtest --~~~~}}",
   "Verschieberest": "{{SLA|Verschieberest --~~~~}}",
   "Verschieberest (Vorlage)": "<noinclude>{{SLA|Verschieberest --~~~~}}</noinclude>",
   "Weiterleitung": "{{SLA|Unnötige Weiterleitung --~~~~}}",
   "Weiterleitung (NS)": "{{SLA|Unnötige Weiterleitung zwischen Namensräumen --~~~~}}",
   "lokale Dateiseite": "{{SLA|Unnötige Bildbeschreibungsseite für Commonsbild --~~~~}}",
   "auf Commons": "{{SLA|Informationen bereits auf Commons --~~~~}}",
   "nach Commons": "{{SLA|nach Commons übertragen --~~~~}}",
   "lokale Dateikat": "{{SLA|Keine lokale Kategorisierung von Commonsdateien --~~~~}}"
  },
  "Dokumentation": {
   "Dokumentation": "{{Dokumentation}}",
   "verwaist": "<noinclude>{{SLA|verwaiste Unterseite zu gelöschter Vorlage --~~~~}}</noinclude>",
   "Dokuseite": "<noinclude>{{Dokumentation/Dokuseite}}</noinclude>",
   "Metaseite": "<noinclude>{{Dokumentation/Metaseite}}</noinclude>",
   "Testseite": "<noinclude>{{Dokumentation/Testseite}}</noinclude>",
   "Wartungsseite": "<noinclude>{{Dokumentation/Wartungsseite}}</noinclude>",
   "Druckversion": "<noinclude>{{Dokumentation/Druckversion}}</noinclude>",
   "Unterseite": " <noinclude>{{Dokumentation/Unterseite}}</noinclude>",
   "Preloadseite": "<noinclude>{{Dokumentation/Preloadseite}}</noinclude>"
  }
 }; }
});});

// Funktionen in [[Benutzer:Umherirrender/monobook-tidy-up.js]] enthalten
(function() {
 var loaded = false;
 mw.loader.load( [ 'mediawiki.util' ], function() {
  //Link für Suchen und Ersetzen
  $( mw.util.addPortletLink(
   'p-tb',
   '#',
   'Suchen und Ersetzen',
   't-tidy-up-replace',
   'tidy-up-replace',
   null,
   null
  ) ).click( function() {
   if ( loaded ) {
    tidyupReplace();
   } else {
    mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-tidy-up.js&action=raw&ctype=text/javascript' )
     .done( function() {
      tidyupReplace();
     } );
    loaded = true;
   }
  } );
  // Standardlink zum Quelltext aufräumen
  $( mw.util.addPortletLink(
   'p-tb',
   '#',
   'tidy-up',
   't-tidy-up',
   'tidy-up',
   null,
   null
  ) ).click( function() {
   if ( loaded ) {
    tidyup();
   } else {
    // load on demand
    mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-tidy-up.js&action=raw&ctype=text/javascript' )
     .done( function() {
      tidyup();
     } );
    loaded = true;
   }
  } );
 } );

 //nur Artikel und beim Öffnen des Bearbeitenmodus
 if ( mw.config.get( 'wgNamespaceNumber' ) === 0 && mw.config.get( 'wgAction' ) === 'edit' ) {
  mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-tidy-up.js&action=raw&ctype=text/javascript' )
   .done( function() { $( function() {
    tidyup();
   } ); } );
  loaded = true;
 }
}());
//</nowiki> __NOINDEX__

/**
 * Dynamische Beschränkung der Eingabelänge des Begründungsfeldes bei
 * Versionslöschungen, Seitenlöschungen, Benutzersperren und Seitenschutz
 * see [[bugzilla:34467]]
 * Something for [[MediaWiki:Group-sysop.js]]
 */
if( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Revisiondelete' || mw.config.get( 'wgAction' ) === 'revisiondelete' ||
 mw.config.get( 'wgAction' ) === 'delete' ||
 mw.config.get( 'wgAction' ) === 'protect' || mw.config.get( 'wgAction' ) === 'unprotect'
 ) {
 mw.loader.using( [ 'jquery.byteLimit' ], function() { $( function() {
  var reasonList = $( '#wpRevDeleteReasonList, #wpDeleteReasonList, #wpProtectReasonSelection' );
  var currentValReasonList = reasonList.val();
  reasonList.change( function() {
   currentValReasonList = reasonList.val();
  });
  $( '#wpReason, #mwProtect-reason' ).byteLimit( 255, function( input ) {
   if( currentValReasonList === 'other' || !currentValReasonList ) {
    return input;
   } else if( input ) {
    return currentValReasonList + ': ' + input; // [[MediaWiki:Colon-separator]]
   } else {
    return currentValReasonList;
   }
  });
 });});
}

(function() {

$( function() {
 mw.loader.using( [ 'mediawiki.util' ], function() {
  if ( mw.config.get( 'wgAction' ) === 'edit' || mw.config.get( 'wgAction' ) === 'submit' ) {
   $( mw.util.addPortletLink(
    'p-tb',
    '#',
    'Doppelte Argumente finden',
    't-dupargs',
    'Doppelte Argumente finden',
    'b'
   ) ).one( 'click', function() {
     mw.loader.using( [ 'mediawiki.api', 'jquery.textSelection', 'mediawiki.notify' ], findDupArgs );
     $( '#t-dupargs a' ).css( { color: 'grey' } );
   } );
  }
 } );
} );

function findDupArgs() {
 var api = new mw.Api();
 var $textbox = $( '#wpTextbox1' );
 if ( !$textbox.length ) {
  return;
 }

 // Get the parsetree for the current content of the editform
 api.post( {
  action: 'parse',
  title: mw.config.get( 'wgPageName' ),
  text: $textbox.val(),
  prop: 'parsetree',
  contentmodel: mw.config.get( 'wgPageContentModel' )
 } ).then( function( data ) {
  if ( !data.parse || !data.parse.parsetree ) {
   //badcontentformatforparsetree
   mw.notify(
    'Nur für WikiText-Seiten',
    { tag: 'badcontentformatforparsetree' }
   );
   return;
  }
  findDupArgsInParseTree( $textbox, data.parse.parsetree['*'] );
 } ).fail( function( code, data ) {
  mw.notify(
   'Fehler beim ermitteln der doppelten Argumente' +
   ' (' + code + ( data && data.error && data.error.info ? ': ' + data.error.info : '' ) + ')',
   { tag: 'dupargs-error' }
  );
 } );
}

function findDupArgsInParseTree( $textbox, parsetree ) {
 var xmlDoc = $.parseXML( parsetree );
 var found = false;

 // The xml tree walker
 var walkTreeJ = function() {
  var $node = $( this );
  if ( this.nodeName === 'template' ) {
   var allArgs = {};
   $node.children( 'part' ).each( function() {
    var $part = $( this ), name, found, start, end;
   
    if ( $part.children( 'name' ).attr( 'index' ) ) {
     name = $part.children( 'name' ).attr( 'index' );
    } else {
     name = $.trim( $part.children( 'name' ).text() );
    }
    value = $part.children( 'value' ).text();
    if ( name in allArgs ) {
     found = true;
     start = calcLength( xmlDoc.firstChild, $part.children( 'name' )[0] );
     end = start + calcLength( $part[0] );
     $textbox.textSelection( 'setSelection', { start: start, end: end } );
     $textbox.textSelection( 'scrollToCaretPosition' );
    } else {
     allArgs[name] = value;
    }
   } );
  }

  // recursive for all childs
  $node.children().each( walkTreeJ );
 };

 // Start with the <root> and go through the whole tree
 $( xmlDoc ).first().each( walkTreeJ );
 if ( !found ) {
  mw.notify(
   'Alles in Ordnung. Konnte kein doppeltes Argument finden.',
   { tag: 'dupargs-error' }
  );
 }
}

/**
 * Helper function to calculate the length of wikitext from the parsetree to show the position of the cursor
 */
var calcLength = function( node, stopNode ) {
 var options = { stopNode: stopNode, stop: false };
 var calcLengthInternal = function( node, options ) {
  var value = 0;
  if ( node === stopNode ) {
   options.stop = true; // stop recursive calls
  } else if ( node.nodeType === 3 ) {
   value += node.nodeValue.length;
  } else {
   for ( var i = 0, len = node.childNodes.length; i < len; i++ ) {
    var child = node.childNodes[i];
    if ( child.nodeName === 'template' ) {
     value += 2; // for {{
     value += calcLengthInternal( child, options );
     if ( options.stop ) {
      break;
     }
     value += 2; // for }}
    } else if ( child.nodeName === 'tplarg' ) {
     value += 3; // for {{{
     value += calcLengthInternal( child, options );
     if ( options.stop ) {
      break;
     }
     value += 3; // for }}}
    } else if ( child.nodeName === 'ext' ) {
     value += 2; // for <>
     value += calcLengthInternal( child, options );
     if ( options.stop ) {
      break;
     }
     // close tag is a own text node
    } else if ( child.nodeName === 'part' ) {
     value += 1; // for |
     value += calcLengthInternal( child, options );
     if ( options.stop ) {
      break;
     }
    } else {
     value += calcLengthInternal( child, options );
     if ( options.stop ) {
      break;
     }
    }
   }
  }
  return value;
 };
 return calcLengthInternal( node, options );
};

}());