wpml-tm-mcs-translate-link-targets.js 2.37 KB
/*jshint devel:true */
/*global jQuery */

var WPML_TM = WPML_TM || {};

WPML_TM.translateLinkTargets = function () {
	"use strict";

	var self = this;

	var init = function () {
        jQuery(function () {
            self.button = jQuery('#wpml-scan-link-targets');
            self.postCount = self.button.data('post-count');
            self.stringCount = self.button.data('string-count');
            self.button.on('click', function () {
                self.button.prop('disabled', true);
                self.button.parent().find('.spinner').css('visibility', 'visible');
                self.numberFixed = 0;
                showCompletePercent(self.postCount, 'post');
                wpmlScanLinkTargets(0, 10, true);
            });
		});
	};

	var wpmlScanLinkTargets = function ( start, count, isPosts ) {
		var message = self.button.data( isPosts ? 'post-message' : 'string-message' );
		jQuery.ajax({
			url: ajaxurl,
			method: 'POST',
			data: {
				'last_processed': start,
				'number_to_process': count,
				'nonce': jQuery('[name=wpml-translate-link-targets]').val(),
				'action': isPosts ? 'WPML_Ajax_Update_Link_Targets_In_Posts' : 'WPML_Ajax_Update_Link_Targets_In_Strings'
			},
			success: function (response) {
				if (response.success) {
					self.numberFixed += response.data.links_fixed;
					if ( response.data.number_left > 0 ) {

						showCompletePercent( response.data.number_left, isPosts ? 'post' : 'string' );
						wpmlScanLinkTargets( response.data.last_processed + 1, 10, isPosts );
					} else {
						showCompletePercent( self.stringCount, 'string' );
						if ( isPosts && self.stringCount ) {
							wpmlScanLinkTargets( 0, 10, false );
						} else {
							self.button.prop('disabled', false);
							self.button.parent().find('.spinner').css('visibility', 'hidden');
							self.button.parent().find( '.results' ).html( self.button.data( 'complete-message').replace( '%s', self.numberFixed ) );
						}
					}

				}
			}
		});

	};

	var showCompletePercent = function( numberLeft, type ) {
		var total = type == 'post' ? self.postCount : self.stringCount,
			done = total - numberLeft,
			message = self.button.data( type + '-message' );

		message = message.replace( '%1$s', done );
		message = message.replace( '%2$s', total );

		self.button.parent().find( '.results' ).html( message );
	}

	init();

};

var translateLinkTargets = new WPML_TM.translateLinkTargets();