MediaWiki:Gadget-edit-form-api.js

Z Wikisłownika – wolnego słownika wielojęzycznego

Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.

  • Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
  • Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
  • Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
  • Opera: Naciśnij klawisze Ctrl+F5.
var EApi = {
		localApi: new mw.Api(),
		foreignApis: {},
		waiting: false
	},
	EConstants = require( './edit-form-constants.js' ),
	EPrinter = require( './edit-form-printer.js' ),
	EStr = require( './edit-form-strings.js' ),
	EUi = require( './edit-form-ui.js' ),
	EUtil = require( './edit-form-util.js' );
	
EApi.handleRequest = function ( mode, handler ) {
	if ( EApi.waiting ) {
		$.alerts.alert( EStr.WAITING_FOR_API );
	} else {
		EApi.prepare( mode );
		EApi.waiting = true;
		
		handler().done( function () {
			EApi.waiting = false;
		} );
	}
};
	
EApi.process = function ( options, callback ) {
	options = Array.isArray( options ) ? options : [ options ];
	
	var requests = $.map( options, function ( opts ) {
		var query = $.extend( true, {
			meta: 'siteinfo',
			formatversion: 2
		}, opts.data || opts );
		
		if ( opts.external ) {
			var url = EUtil.getUrlApi( opts.external.lang, opts.external.project );
			
			if ( !EApi.foreignApis[ url ] ) {
				EApi.foreignApis[ url ] = new mw.ForeignApi( url, {
					anonymous: true
				} );
			}
			
			return EApi.foreignApis[ url ].get( query );
		} else {
			return EApi.localApi.get( query );
		}
	} );
	
	return $.when.apply( null, requests ).done( callback );
};

EApi.prepare = function ( mode ) {
	var idpart = EConstants.API_ID[ mode ],
		elem = $( '#ed_' + EUtil.getActiveLangId() + '_extra_' + idpart );

	elem
		.removeClass( 'apidone apierror' )
		.addClass( 'apistarted' );
	
	if ( elem.data( 'orig_html' ) ) {
		elem.html( elem.data( 'orig_html' ) );
	}
};

EApi.display = function ( mode, res, subs, error ) {
	var idpart = EConstants.API_ID[ mode ],
		elem = $( '#ed_' + EUtil.getActiveLangId() + '_extra_' + idpart );

	if ( error === undefined ) {
		elem.addClass( 'apidone' ).removeClass( 'apistarted apierror' );
		
		if ( res !== undefined ) {
			EUi.showResult( EPrinter.resultToHTML( mode, res ), idpart );
		}
	} else {
		elem
			.addClass( 'apierror' )
			.removeClass( 'apistarted apidone' )
			.data( 'orig_html', elem.html() )
			.html( error );
	}
	
	if ( subs !== undefined ) {
		EUtil.focusArea(
			subs,
			EUi.isDefaultText( EUtil.getActiveLangId(), subs, 1 )
		);
	}
};

module.exports = EApi;