Benutzer:DerHexer/export.js
Erscheinungsbild
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
/*
* [[m:user:Hoo man]]; Version 1; 2013-02-08;
* Allows creating export XML for a given page. Enter through edit on w:de:Benutzer:DerHexer/Exportpage
*/
//<nowiki>
/*global mw, alert, prompt */
mw.loader.using( ['mediawiki.api'], function() {
var counter = 0,
maxCount = 10,
api = new mw.Api(),
exportXml = '',
exportWiki, exportPage, exportRevId, exportRevisionCount;
/**
* Called after the DOM is ready and we made sure we're on the right page
*/
function init() {
exportWiki = prompt( 'Exportwiki:', 'de.wikipedia' );
//exportWiki = 'en.wikipedia';
exportPage = prompt( 'Exportlemma:', '' );
//exportPage = 'List of unusual deaths';
exportRevId = prompt( 'Exportid:', '' );
exportRevisionCount = prompt( 'Exportrevisions:', '25' );
//exportRevisionCount = '50';
if ( exportWiki && exportPage && exportRevisionCount ) {
getRevisions( exportRevId );
} else {
alert( 'Input error: Not all required informations were given!' );
}
}
/**
* Loads revisions from the given page in the given wiki. Calls onRevisionLoad on success
*/
function getRevisions( startRevisionId ) {
var getParams = {
action: 'query',
prop: 'revisions',
rvlimit: exportRevisionCount,
rvdir: 'newer',
rvprop: 'ids|timestamp|user|comment|content',
indexpageids: true,
titles: exportPage
};
if (startRevisionId) {
getParams.rvstartid = startRevisionId;
}
// Do we need CORS?
if ( '//' + exportWiki + '.org' !== mw.config.get( 'wgServer' ) ) {
// The origin parameter musn't be protocol relative
getParams.origin = document.location.protocol + mw.config.get( 'wgServer' );
}
api.get( getParams, { url: '//' + exportWiki + '.org/w/api.php' } )
.done( onRevisionLoad )
.fail( function( errorCode, errorInfo ) {
alert( 'An unexpected API error occured: ' + errorCode + ' (' + errorInfo.error.info + ')' );
} );
}
/**
* XML escapes the given string
*/
function escapeXMLstring( str ) {
return str.replace( /\&/g, '&' ).replace( /</g, '<' ).replace( />/g, '>' );
}
/**
* Called after a successfull API call
*/
function onRevisionLoad( data ) {
var i, k, page;
for ( i = 0; i < data.query.pageids.length; i++ ) {
page = data.query.pages[ data.query.pageids[ i ] ];
if ( page.missing === '') {
continue;
}
for ( k = 0; k < page.revisions.length; k++ ) {
if ( !page.revisions[ k ][ '*' ] ) {
continue;
}
if ( !page.revisions[ k ].user || !page.revisions[ k ][ '*' ] ) {
// Page text is either empty or has been deleted. Same for user (which can only be deleted)
continue;
}
exportXml += '<revision>' +
'\t<id>' + page.revisions[ k ].revid + '</id>' +
'\t<timestamp>' + page.revisions[ k ].timestamp + '</timestamp>' +
'\t<contributor><username>' + escapeXMLstring( page.revisions[ k ].user ) + '</username></contributor>';
if (page.revisions[ k ].comment) {
exportXml += '\t<comment>' + escapeXMLstring( page.revisions[ k ].comment ) + '</comment>';
}
exportXml += '\t<text xml:space="preserve" bytes="0">' + escapeXMLstring( page.revisions[ k ][ '*' ] ).replace( /\"/g,'"' ) + '</text>\t</revision>\t';
}
}
if ( data['query-continue'] && data['query-continue'].revisions && counter < maxCount) {
getRevisions( data['query-continue'].revisions.rvcontinue );
counter++;
} else {
$( '#wpTextbox1' ).val( exportXml );
}
}
if ( mw.config.get( 'wgPageName' ) === 'Benutzer:DerHexer/Exportpage' && mw.config.get( 'wgAction' ) === 'edit') {
$( document ).ready( init );
}
} );
//</nowiki>