150 lines
4.1 KiB
JavaScript
150 lines
4.1 KiB
JavaScript
|
/* global WP_Smush */
|
||
|
/* global ajaxurl */
|
||
|
|
||
|
/**
|
||
|
* Bulk Smush functionality.
|
||
|
*
|
||
|
* @since 2.9.0 Moved from admin.js
|
||
|
*/
|
||
|
|
||
|
import Smush from '../smush/smush';
|
||
|
import Fetcher from '../utils/fetcher';
|
||
|
import SmushProcess from '../common/progressbar';
|
||
|
|
||
|
( function( $ ) {
|
||
|
'use strict';
|
||
|
|
||
|
WP_Smush.bulk = {
|
||
|
init() {
|
||
|
this.onClickBulkSmushNow();
|
||
|
this.onClickIgnoreImage();
|
||
|
this.onClickIgnoreAllImages();
|
||
|
this.onScanCompleted();
|
||
|
},
|
||
|
onClickBulkSmushNow() {
|
||
|
/**
|
||
|
* Handle the Bulk Smush/Bulk re-Smush button click.
|
||
|
*/
|
||
|
$( '.wp-smush-all' ).on( 'click', function( e ) {
|
||
|
const bulkSmushButton = $(this);
|
||
|
if ( bulkSmushButton.hasClass('wp-smush-scan-and-bulk-smush') ) {
|
||
|
return;
|
||
|
}
|
||
|
e.preventDefault();
|
||
|
|
||
|
WP_Smush.bulk.ajaxBulkSmushStart( bulkSmushButton );
|
||
|
} );
|
||
|
},
|
||
|
ajaxBulkSmushStart( bulkSmushButton ) {
|
||
|
bulkSmushButton = bulkSmushButton || $( '#wp-smush-bulk-content .wp-smush-all' );
|
||
|
// Check for IDs, if there is none (unsmushed or lossless), don't call Smush function.
|
||
|
/** @param {Array} wp_smushit_data.unsmushed */
|
||
|
if (
|
||
|
'undefined' === typeof window.wp_smushit_data ||
|
||
|
( 0 === window.wp_smushit_data.unsmushed.length &&
|
||
|
0 === window.wp_smushit_data.resmush.length )
|
||
|
) {
|
||
|
return false;
|
||
|
}
|
||
|
// Disable re-Smush and scan button.
|
||
|
// TODO: refine what is disabled.
|
||
|
$(
|
||
|
'.wp-resmush.wp-smush-action, .wp-smush-scan, .wp-smush-all:not(.sui-progress-close), a.wp-smush-lossy-enable, button.wp-smush-resize-enable, button#save-settings-button'
|
||
|
).prop( 'disabled', true );
|
||
|
|
||
|
if ( bulkSmushButton.hasClass('wp-smush-resume-bulk-smush') && this.bulkSmush ) {
|
||
|
this.resumeBulkSmush();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
this.bulkSmush = new Smush( bulkSmushButton, true );
|
||
|
SmushProcess.setOnCancelCallback( () => {
|
||
|
this.bulkSmush.cancelAjax()
|
||
|
}).update( 0, this.bulkSmush.ids.length ).show();
|
||
|
|
||
|
// Show upsell cdn.
|
||
|
this.maybeShowCDNUpsellForPreSiteOnStart();
|
||
|
|
||
|
// Run bulk Smush.
|
||
|
this.bulkSmush.run();
|
||
|
},
|
||
|
resumeBulkSmush() {
|
||
|
SmushProcess.disableExceedLimitMode();
|
||
|
SmushProcess.hideBulkSmushDescription();
|
||
|
this.bulkSmush.onStart();
|
||
|
this.bulkSmush.callAjax();
|
||
|
},
|
||
|
onClickIgnoreImage() {
|
||
|
/**
|
||
|
* Ignore file from bulk Smush.
|
||
|
*
|
||
|
* @since 2.9.0
|
||
|
*/
|
||
|
$( 'body' ).on( 'click', '.smush-ignore-image', function( e ) {
|
||
|
e.preventDefault();
|
||
|
|
||
|
const self = $( this );
|
||
|
|
||
|
self.prop( 'disabled', true );
|
||
|
self.attr( 'data-tooltip' );
|
||
|
self.removeClass( 'sui-tooltip' );
|
||
|
$.post( ajaxurl, {
|
||
|
action: 'ignore_bulk_image',
|
||
|
id: self.attr( 'data-id' ),
|
||
|
_ajax_nonce: wp_smush_msgs.nonce,
|
||
|
} ).done( ( response ) => {
|
||
|
if ( self.is( 'a' ) && response.success && 'undefined' !== typeof response.data.html ) {
|
||
|
if( self.closest('.smush-status-links') ) {
|
||
|
self.closest('.smush-status-links').parent().html( response.data.html );
|
||
|
} else if (e.target.closest( '.smush-bulk-error-row' ) ){
|
||
|
self.addClass('disabled');
|
||
|
e.target.closest( '.smush-bulk-error-row' ).style.opacity = 0.5;
|
||
|
}
|
||
|
}
|
||
|
} );
|
||
|
} );
|
||
|
},
|
||
|
onClickIgnoreAllImages() {
|
||
|
/**
|
||
|
* Ignore file from bulk Smush.
|
||
|
*
|
||
|
* @since 3.12.0
|
||
|
*/
|
||
|
const ignoreAll = document.querySelector('.wp_smush_ignore_all_failed_items');
|
||
|
if ( ignoreAll ) {
|
||
|
ignoreAll.onclick = (e) => {
|
||
|
e.preventDefault();
|
||
|
e.target.setAttribute('disabled','');
|
||
|
e.target.style.cursor = 'progress';
|
||
|
const type = e.target.dataset.type || null;
|
||
|
e.target.classList.remove('sui-tooltip');
|
||
|
Fetcher.smush.ignoreAll(type).then((res) => {
|
||
|
if ( res.success ) {
|
||
|
window.location.reload();
|
||
|
} else {
|
||
|
e.target.style.cursor = 'pointer';
|
||
|
e.target.removeAttribute('disabled');
|
||
|
WP_Smush.helpers.showNotice( res );
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
onScanCompleted() {
|
||
|
document.addEventListener('ajaxBulkSmushOnScanCompleted', (e) => {
|
||
|
this.ajaxBulkSmushStart();
|
||
|
});
|
||
|
},
|
||
|
maybeShowCDNUpsellForPreSiteOnStart: () => {
|
||
|
// Show upsell cdn.
|
||
|
const upsell_cdn = document.querySelector('.wp-smush-upsell-cdn');
|
||
|
if ( upsell_cdn ) {
|
||
|
upsell_cdn.classList.remove('sui-hidden');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
WP_Smush.bulk.init();
|
||
|
} )( jQuery );
|