378 lines
12 KiB
JavaScript
378 lines
12 KiB
JavaScript
/* global ajaxurl */
|
|
|
|
var jQuery,
|
|
mla_inline_mapping_vars,
|
|
mla = {
|
|
// Properties
|
|
settings: {},
|
|
bulkMap: {
|
|
ids: [],
|
|
inProcess: false,
|
|
doCancel: false
|
|
},
|
|
|
|
// Utility functions
|
|
utility: {
|
|
},
|
|
|
|
// Components
|
|
inlineMapAttachment: null
|
|
};
|
|
|
|
( function( $ ) {
|
|
/**
|
|
* Localized settings and strings
|
|
*/
|
|
mla.settings = typeof mla_inline_mapping_vars === 'undefined' ? {} : mla_inline_mapping_vars;
|
|
mla_inline_mapping_vars = void 0; // delete won't work on Globals
|
|
|
|
mla.inlineMapAttachment = {
|
|
init : function(){
|
|
var progressDiv = $( '#mla-progress-div' );
|
|
|
|
$('#mla-progress-pause', progressDiv).off( 'click' );
|
|
$('#mla-progress-pause', progressDiv).click( function(){
|
|
if ( mla.bulkMap.inProcess ) {
|
|
mla.bulkMap.doCancel = true;
|
|
return false;
|
|
} else {
|
|
return mla.inlineMapAttachment.revert();
|
|
}
|
|
});
|
|
|
|
$('#mla-progress-cancel', progressDiv).off( 'click' );
|
|
$('#mla-progress-cancel', progressDiv).click( function(){
|
|
return mla.inlineMapAttachment.revert();
|
|
});
|
|
|
|
$('#mla-progress-resume', progressDiv).off( 'click' );
|
|
$('#mla-progress-resume', progressDiv).click( function(){
|
|
var totalItems = +mla.settings.totalItems, newOffset = + $( '#mla-progress-offset' ).val();
|
|
|
|
if ( totalItems < newOffset ) {
|
|
newOffset = totalItems;
|
|
} else {
|
|
if ( 0 > newOffset ) {
|
|
newOffset = 0;
|
|
}
|
|
}
|
|
|
|
if ( mla.bulkMap.inProcess ) {
|
|
mla.bulkMap.doCancel = true;
|
|
return false;
|
|
} else {
|
|
return mla.inlineMapAttachment.bulkMap( mla.bulkMap.targetName, newOffset );
|
|
}
|
|
});
|
|
|
|
// Clicking "Refresh" submits the form, refreshing the page
|
|
$( '#mla-progress-refresh', progressDiv ).off( 'click' );
|
|
$( '#mla-progress-refresh', progressDiv ).click( function(){
|
|
$( '#mla-progress-refresh' ).prop( 'disabled', true ).css( 'opacity', '0.5' );
|
|
});
|
|
|
|
$('#mla-progress-close', progressDiv).off( 'click' );
|
|
$('#mla-progress-close', progressDiv).click( function( e ){
|
|
if ( mla.bulkMap.inProcess ) {
|
|
return false;
|
|
}
|
|
|
|
return mla.inlineMapAttachment.revert();
|
|
});
|
|
|
|
// add event handler to the Execute All Rules
|
|
$( 'input[type="submit"].mla-mapping' ).click(function( e ){
|
|
e.preventDefault();
|
|
return mla.inlineMapAttachment.bulkMap( e.target.name, 0 );
|
|
});
|
|
|
|
// add event handler to the Bulk Actions Apply (top)
|
|
$( 'input[type="submit"]#doaction' ).click(function( e ){
|
|
var action = $( '#bulk-action-selector-top' ).val(), ids;
|
|
//console.log( 'Bulk Actions Apply (top) ', e.target.id, ' ', action );
|
|
if ( 'execute' !== action ) {
|
|
return true;
|
|
}
|
|
|
|
ids = $('tbody th.check-column input[type="checkbox"]').serializeArray();
|
|
if ( 0 === ids.length ) {
|
|
return true;
|
|
}
|
|
|
|
$.each( ids, function( index, id ) {
|
|
mla.bulkMap.ids[ index ] = +id.value;
|
|
});
|
|
//console.log( JSON.stringify( mla.bulkMap ) );
|
|
|
|
e.preventDefault();
|
|
return mla.inlineMapAttachment.bulkMap( 'mapping-options-bulk-execute', 0 );
|
|
});
|
|
|
|
// add event handler to the Bulk Actions Apply (bottom)
|
|
$( 'input[type="submit"]#doaction2' ).click(function( e ){
|
|
var action = $( '#bulk-action-selector-bottom' ).val(), ids;
|
|
if ( 'execute' !== action ) {
|
|
return true;
|
|
}
|
|
|
|
ids = $('tbody th.check-column input[type="checkbox"]').serializeArray();
|
|
if ( 0 === ids.length ) {
|
|
return true;
|
|
}
|
|
|
|
$.each( ids, function( index, id ) {
|
|
mla.bulkMap.ids[ index ] = +id.value;
|
|
});
|
|
|
|
e.preventDefault();
|
|
return mla.inlineMapAttachment.bulkMap( 'mapping-options-bulk-execute', 0 );
|
|
});
|
|
|
|
// add event handler to the Execute rollover links
|
|
$( 'a.execute' ).click(function( e ){
|
|
e.preventDefault();
|
|
return mla.inlineMapAttachment.bulkMap( e.target.id, 0 );
|
|
});
|
|
},
|
|
|
|
bulkMap : function( action, initialOffset ) {
|
|
var oldComplete = 0, oldUnchanged = 0, oldSuccess = 0, oldSkip = 0, oldRedone = 0, bulk_ids = [];
|
|
|
|
initialOffset = +initialOffset;
|
|
|
|
if ( 0 < initialOffset ) {
|
|
oldComplete = typeof mla.bulkMap.complete === 'undefined' ? 0 : mla.bulkMap.complete;
|
|
oldUnchanged = typeof mla.bulkMap.unchanged === 'undefined' ? 0 : mla.bulkMap.unchanged;
|
|
oldSuccess = typeof mla.bulkMap.success === 'undefined' ? 0 : mla.bulkMap.success;
|
|
oldSkip = typeof mla.bulkMap.skip === 'undefined' ? 0 : mla.bulkMap.skip;
|
|
oldRedone = typeof mla.bulkMap.redone === 'undefined' ? 0 : mla.bulkMap.redone;
|
|
}
|
|
|
|
// See if we're skipping or re-processing any items
|
|
if ( oldComplete < initialOffset ) {
|
|
oldSkip += initialOffset - oldComplete;
|
|
} else {
|
|
if ( oldComplete > initialOffset ) {
|
|
oldRedone += oldComplete - initialOffset;
|
|
}
|
|
}
|
|
|
|
bulk_ids = typeof mla.bulkMap.ids === 'undefined' ? [] : mla.bulkMap.ids;
|
|
mla.bulkMap = {
|
|
ids: bulk_ids,
|
|
inProcess: false,
|
|
doCancel: false,
|
|
chunkSize: +mla.settings.bulkChunkSize,
|
|
targetName: action,
|
|
fields: $( mla.settings.fieldsId + ' :input').serialize(),
|
|
offset: initialOffset,
|
|
waiting: mla.settings.totalItems - initialOffset,
|
|
running: 0,
|
|
complete: initialOffset,
|
|
unchanged: oldUnchanged,
|
|
success: oldSuccess,
|
|
skip: oldSkip,
|
|
redone: oldRedone,
|
|
refresh: false
|
|
};
|
|
|
|
mla.inlineMapAttachment.progressOpen();
|
|
mla.inlineMapAttachment.bulkPost();
|
|
return false;
|
|
},
|
|
|
|
progressOpen : function(){
|
|
this.revert();
|
|
|
|
$( '#mla-progress-meter' ).css( 'width', '0%' );
|
|
$( '#mla-progress-meter' ).html('0%');
|
|
$( '#mla-progress-message' ).html('');
|
|
$( '#mla-progress-error' ).html('');
|
|
$( '#mla-progress-div' ).show();
|
|
|
|
// Disable "Close" until the bulk mapping is complete
|
|
$( '#mla-progress-pause' ).prop( 'disabled', false ).css( 'opacity', '1.0' ).show();
|
|
$( '#mla-progress-cancel' ).hide();
|
|
$( '#mla-progress-resume' ).hide();
|
|
$( '#mla-progress-offset' ).hide();
|
|
$( '#mla-progress-refresh' ).hide();
|
|
$( '#mla-progress-close' ).prop( 'disabled', true ).css( 'opacity', '0.5' ).show();
|
|
$( 'html, body' ).animate( { scrollTop: 0 }, 'fast' );
|
|
},
|
|
|
|
bulkPost : function() {
|
|
var params, chunk, statusMessage = '',
|
|
spinner = $('#mla-progress-div p.inline-edit-save .spinner'),
|
|
message = $( '#mla-progress-message' ),
|
|
error = $( '#mla-progress-error' );
|
|
|
|
// Find the number of items to process
|
|
if ( mla.bulkMap.waiting < mla.bulkMap.chunkSize ) {
|
|
chunk = mla.bulkMap.waiting;
|
|
} else {
|
|
chunk = mla.bulkMap.chunkSize;
|
|
}
|
|
|
|
mla.bulkMap.waiting -= chunk;
|
|
mla.bulkMap.running = chunk;
|
|
|
|
params = {
|
|
page: mla.settings.page,
|
|
mla_tab: mla.settings.mla_tab,
|
|
screen: mla.settings.screen,
|
|
action: mla.settings.ajax_action,
|
|
mla_admin_nonce: mla.settings.ajax_nonce,
|
|
bulk_action: mla.bulkMap.targetName,
|
|
ids: mla.bulkMap.ids,
|
|
offset: mla.bulkMap.complete,
|
|
length: chunk
|
|
};
|
|
|
|
params = $.param( params ) + '&' + mla.bulkMap.fields;
|
|
|
|
// make ajax request
|
|
mla.bulkMap.inProcess = true;
|
|
|
|
percentComplete = Math.floor( ( 100 * mla.bulkMap.complete ) / mla.settings.totalItems ) + '%';
|
|
$( '#mla-progress-meter' ).css( 'width', percentComplete );
|
|
$( '#mla-progress-meter' ).html( percentComplete );
|
|
|
|
if ( 0 < mla.bulkMap.skip ) {
|
|
statusMessage += ', ' + mla.settings.bulkSkip + ': ' + mla.bulkMap.skip;
|
|
}
|
|
|
|
if ( 0 < mla.bulkMap.redone ) {
|
|
statusMessage += ', ' + mla.settings.bulkRedone + ': ' + mla.bulkMap.redone;
|
|
}
|
|
|
|
if ( mla.settings.useSpinnerClass ) {
|
|
spinner.addClass("is-active");
|
|
} else {
|
|
spinner.show();
|
|
}
|
|
|
|
statusMessage = mla.settings.bulkWaiting + ': ' + mla.bulkMap.waiting
|
|
+ ', ' + mla.settings.bulkRunning + ': ' + mla.bulkMap.running
|
|
+ ', ' + mla.settings.bulkComplete + ': ' + mla.bulkMap.complete
|
|
+ statusMessage // skip and redone
|
|
+ ', ' + mla.settings.bulkUnchanged + ': ' + mla.bulkMap.unchanged
|
|
+ ', ' + mla.settings.bulkSuccess + ': ' + mla.bulkMap.success;
|
|
message.html( statusMessage ).show();
|
|
|
|
$.ajax( ajaxurl, {
|
|
type: 'POST',
|
|
data: params,
|
|
dataType: 'json'
|
|
}).always( function() {
|
|
if ( mla.settings.useSpinnerClass ) {
|
|
spinner.removeClass("is-active");
|
|
} else {
|
|
spinner.hide();
|
|
}
|
|
}).done( function( response, status ) {
|
|
var responseData = 'no response.data', responseMessage = '';
|
|
|
|
if ( response ) {
|
|
if ( ! response.success ) {
|
|
if ( response.responseData ) {
|
|
responseData = response.data;
|
|
}
|
|
|
|
error.html( JSON.stringify( response ) );
|
|
mla.bulkMap.waiting = 0; // Stop
|
|
} else {
|
|
if ( 0 == response.data.processed ) {
|
|
// Something went wrong; we're done
|
|
responseMessage = response.data.message;
|
|
mla.bulkMap.waiting = 0; // Stop
|
|
} else {
|
|
// Move the items from Running to Complete
|
|
mla.bulkMap.complete += response.data.processed;
|
|
mla.bulkMap.running = 0;
|
|
mla.bulkMap.unchanged += response.data.unchanged;
|
|
mla.bulkMap.success += response.data.success;
|
|
|
|
if ( 'undefined' !== typeof response.data.refresh ) {
|
|
mla.bulkMap.refresh = response.data.refresh;
|
|
}
|
|
|
|
percentComplete = Math.floor( ( 100 * mla.bulkMap.complete ) / mla.settings.totalItems ) + '%';
|
|
$( '#mla-progress-meter' ).css( 'width', percentComplete );
|
|
$( '#mla-progress-meter' ).html( percentComplete );
|
|
|
|
if ( 0 < mla.bulkMap.skip ) {
|
|
responseMessage += ', ' + mla.settings.bulkSkip + ': ' + mla.bulkMap.skip;
|
|
}
|
|
|
|
if ( 0 < mla.bulkMap.redone ) {
|
|
responseMessage += ', ' + mla.settings.bulkRedone + ': ' + mla.bulkMap.redone;
|
|
}
|
|
|
|
responseMessage = mla.settings.bulkWaiting + ': ' + mla.bulkMap.waiting
|
|
+ ', ' + mla.settings.bulkComplete + ': ' + mla.bulkMap.complete
|
|
+ responseMessage // skip and redone
|
|
+ ', ' + mla.settings.bulkUnchanged + ': ' + mla.bulkMap.unchanged
|
|
+ ', ' + mla.settings.bulkSuccess + ': ' + mla.bulkMap.success;
|
|
}
|
|
message.html( responseMessage ).show();
|
|
}
|
|
} else {
|
|
error.html( mla.settings.error );
|
|
mla.bulkMap.waiting = 0; // Stop
|
|
}
|
|
|
|
if ( mla.bulkMap.doCancel ) {
|
|
message.html( mla.settings.bulkPaused + '. ' + responseMessage ).show();
|
|
$( '#mla-progress-pause' ).hide();
|
|
$( '#mla-progress-cancel' ).show();
|
|
$( '#mla-progress-resume' ).show();
|
|
$( '#mla-progress-offset' ).val( mla.bulkMap.complete ).show();
|
|
} else {
|
|
if ( mla.bulkMap.waiting ) {
|
|
mla.inlineMapAttachment.bulkPost();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ( mla.bulkMap.refresh ) {
|
|
$( '#mla-progress-close' ).hide();
|
|
$( '#mla-progress-refresh' ).prop( 'disabled', false ).css( 'opacity', '1.0' ).show();
|
|
} else {
|
|
$( '#mla-progress-close' ).prop( 'disabled', false ).css( 'opacity', '1.0' );
|
|
}
|
|
|
|
$( '#mla-progress-pause' ).prop( 'disabled', true ).css( 'opacity', '0.5' );
|
|
mla.bulkMap.inProcess = false;
|
|
}).fail( function( jqXHR, status ) {
|
|
if ( 200 == jqXHR.status ) {
|
|
error.html( '(' + status + ') ' + jqXHR.responseText );
|
|
} else {
|
|
error.html( mla.settings.ajaxFailError + ' (' + status + '), jqXHR( ' + jqXHR.status + ', ' + jqXHR.statusText + ', ' + jqXHR.responseText + ')' );
|
|
}
|
|
});
|
|
},
|
|
|
|
revert : function(){
|
|
var progressDiv = $( '#mla-progress-div' );
|
|
|
|
if ( progressDiv ) {
|
|
if ( mla.settings.useSpinnerClass ) {
|
|
$('p.inline-edit-save .spinner', progressDiv ).removeClass("is-active");
|
|
} else {
|
|
$('p.inline-edit-save .spinner', progressDiv ).hide();
|
|
}
|
|
|
|
// Reset Div content to initial values
|
|
|
|
$( progressDiv ).hide();
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}; // mla.inlineMapAttachment
|
|
|
|
$( document ).ready( function() {
|
|
mla.inlineMapAttachment.init();
|
|
});
|
|
})( jQuery );
|