Add upstream
This commit is contained in:
@@ -0,0 +1,377 @@
|
||||
/* 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 );
|
||||
Reference in New Issue
Block a user