/*jshint sub:true*/ /* global document, jQuery, ajaxurl, BBP_Converter */ jQuery( document ).ready( function ( $ ) { 'use strict'; // Variables var message = $( '#bbp-converter-message' ), stop = $( '#bbp-converter-stop' ), start = $( '#bbp-converter-start' ), restart = $( '#_bbp_converter_restart' ), status = $( '#bbp-converter-status' ), spinner = $( '#bbp-converter-spinner' ), settings = $( '#bbp-converter-settings' ), password = $( '#_bbp_converter_db_pass' ), toggle = $( '.bbp-db-pass-toggle' ), step_p = $( '#bbp-converter-step-percentage' ), total_p = $( '#bbp-converter-total-percentage' ), fields = settings.find( 'table:first-of-type input, table:first-of-type select' ); /** * Show/hide db password button toggle * * @since 2.6.0 bbPress (r6676) * * @param {element} e */ toggle.on( 'click', function( e ) { var type = ( password.attr( 'type' ) === 'password' ) ? 'text' : 'password'; password.attr( 'type', type ); toggle .toggleClass( 'password' ) .toggleClass( 'text' ); e.preventDefault(); }); /** * Start button click * * @since 2.6.0 bbPress (r6470) * * @param {element} e */ start.on( 'click', function( e ) { bbp_converter_user_start(); e.preventDefault(); } ); /** * Stop button click * * @since 2.6.0 bbPress (r6470) * * @param {element} e */ $( stop ).on( 'click', function( e ) { bbp_converter_user_stop(); e.preventDefault(); } ); /** * Start the converter * * @since 2.6.0 bbPress (r6470) * * @returns {void} */ function bbp_converter_user_start() { bbp_converter_start(); } /** * Stop the converter * * @since 2.6.0 bbPress (r6470) * * @returns {void} */ function bbp_converter_user_stop() { bbp_converter_stop( BBP_Converter.strings.button_continue, BBP_Converter.strings.import_stopped_user ); } /** * Return values of converter settings * * @since 2.6.0 bbPress (r6470) * * @returns {converterL#2.bbp_converter_settings.values} */ function bbp_converter_settings() { var values = {}; $.each( settings.serializeArray(), function( i, field ) { values[ field.name ] = field.value; } ); if ( values['_bbp_converter_restart'] ) { restart.removeAttr( 'checked' ); } if ( values['_bbp_converter_delay_time'] ) { BBP_Converter.state.delay = parseInt( values['_bbp_converter_delay_time'], 10 ) * 1000; } values['action'] = 'bbp_converter_process'; values['_ajax_nonce'] = BBP_Converter.ajax_nonce; return values; } /** * Run the converter step * * @since 2.6.0 bbPress (r6470) * * @returns {void} */ function bbp_converter_post() { $.post( ajaxurl, bbp_converter_settings(), function( response ) { // Parse the json response try { var data = response.data; // Success if ( true === response.success ) { bbp_converter_step( data ); // Failure } else { bbp_converter_stop(); } } catch( e ) { bbp_converter_stop(); } }, 'json' ); } /** * Process the next step * * @since 2.6.0 bbPress (r6600) * * @param {object} data * @returns {void} */ function bbp_converter_step( data ) { // Bail if not running if ( ! BBP_Converter.state.running ) { return; } // Do the step bbp_converter_log( data.progress ); bbp_converter_percentages( data.step_percent, data.total_percent ); bbp_converter_status( data ); bbp_converter_wait(); // Done if ( data.current_step === data.final_step ) { bbp_converter_stop( BBP_Converter.strings.button_start, BBP_Converter.strings.import_complete ); } } /** * Wait to do the next AJAX request * * @since 2.6.0 bbPress (r6600) * * @returns {void} */ function bbp_converter_wait() { clearTimeout( BBP_Converter.state.running ); // Bail if not running if ( ! BBP_Converter.state.running ) { return; } // Wait, then POST BBP_Converter.state.running = setTimeout( function() { bbp_converter_post(); }, parseInt( BBP_Converter.state.delay, 10 ) ); } /** * Start the converter and set the various flags * * @since 2.6.0 bbPress (r6600) * * @returns {void} */ function bbp_converter_start() { clearTimeout( BBP_Converter.state.running ); clearInterval( BBP_Converter.state.status ); BBP_Converter.state.running = true; var log = BBP_Converter.strings.start_continue; if ( false === BBP_Converter.state.started ) { log = BBP_Converter.strings.start_start; BBP_Converter.state.started = true; } bbp_converter_update( BBP_Converter.strings.button_continue, log, BBP_Converter.strings.status_starting ); message.addClass( 'started' ); start.hide(); stop.show(); console.log( fields ); spinner.css( 'visibility', 'visible' ); fields.prop( 'readonly', true ); bbp_converter_post(); } /** * Stop the converter, and update the UI * * @since 2.6.0 bbPress (r6470) * * @param {string} button New text for button * @param {string} log New text to add to import monitor * * @returns {void} */ function bbp_converter_stop( button, log ) { clearTimeout( BBP_Converter.state.running ); clearInterval( BBP_Converter.state.status ); BBP_Converter.state.running = false; BBP_Converter.state.status = false; if ( ! button ) { button = BBP_Converter.strings.button_continue; } if ( ! log ) { log = BBP_Converter.strings.status_stopped; } bbp_converter_update( button, log, BBP_Converter.strings.status_stopped ); start.show(); stop.hide(); spinner.css( 'visibility', 'hidden' ); fields.prop( 'readonly', false ); } /** * Update the various screen texts * * @since 2.6.0 bbPress (r6600) * * @param {string} b_text * @param {string} p_text * @param {string} s_text * * @returns {void} */ function bbp_converter_update( b_text, p_text, s_text ) { start.val( b_text ); bbp_converter_log( p_text ); status.text( s_text ); } /** * Update the status * * @since 2.6.0 bbPress (r6513) * * @param {object} data * * @returns {void} */ function bbp_converter_status( data ) { var remaining = parseInt( BBP_Converter.state.delay, 10 ) / 1000; status.text( BBP_Converter.strings.status_counting.replace( '%s', remaining ) ); clearInterval( BBP_Converter.state.status ); BBP_Converter.state.status = setInterval( function() { remaining--; status.text( BBP_Converter.strings.status_counting.replace( '%s', remaining ) ); if ( remaining <= 0 ) { clearInterval( BBP_Converter.state.status ); if ( parseInt( data.current_step, 10 ) < parseInt( data.final_step, 10 ) ) { status.text( BBP_Converter.strings.status_up_next.replace( '%s', data.current_step ) ); } else { status.text( BBP_Converter.strings.status_complete ); } } }, 1000 ); } /** * Prepend some text to the import monitor * * @since 2.6.0 bbPress (r6470) * * @param {string} text Text to prepend to the import monitor * * @returns {void} */ function bbp_converter_log( text ) { text = '<p>' + text + '</p>'; message.prepend( text ); } /** * Prepend some text to the import monitor * * @since 2.6.0 bbPress (r6470) * * @returns {void} */ function bbp_converter_percentages( step_percent, total_percent ) { step_p.width( step_percent + '%' ); total_p.width( total_percent + '%' ); } } );