Benutzer:DerHexer/export.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
  • 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, '&amp;' ).replace( /</g, '&lt;' ).replace( />/g, '&gt;' );
	}

	/**
	 * 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,'&quot;' ) + '</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>