/*
* @author 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
* ]
*/
mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-flaggedrevs.js&action=raw&ctype=text/javascript' );
//<nowiki>
/*
* lokale Anpassungen
*/
mw.loader.using( , 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.nethttps://wiki95.com/de/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' );
}
}
});});
// Funktionen in ] enthalten
(function() {
var loaded = false;
mw.loader.using( , 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 {
window.callbackMonobookTidyUpJs = 'tidyupReplace';
mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-tidy-up.js&action=raw&ctype=text/javascript' );
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
window.callbackMonobookTidyUpJs = 'tidyup';
mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-tidy-up.js&action=raw&ctype=text/javascript' );
loaded = true;
}
} );
} );
//nur Artikel und beim Öffnen des Bearbeitenmodus
if ( mw.config.get( 'wgNamespaceNumber' ) === 0 && mw.config.get( 'wgAction' ) === 'edit' ) {
window.callbackMonobookTidyUpJs = 'tidyup';
mw.loader.load( '//de.wikipedia.org/w/index.php?title=Benutzer:Umherirrender/monobook-tidy-up.js&action=raw&ctype=text/javascript' );
loaded = true;
}
}());
//</nowiki> __NOINDEX__
(function() {
$( function() {
mw.loader.using( , 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( , 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' ) );
end = start + calcLength( $part );
$textbox.textSelection( 'setSelection', { start: start, end: end } );
$textbox.textSelection( 'scrollToCaretPosition' );
} else {
allArgs = 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;
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 );
};
}());