Files
wordpress-preseed/wp-content/plugins/media-library-assistant/js/mla-inline-mapping-scripts.js
2019-10-24 00:12:05 +02:00

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 );