import { __, sprintf } from '@wordpress/i18n';
import { formatFileSize } from '../../utils';
import { getUpgradeLink } from '../../../../../../assets/dev/js/utils';
const header = () => {
return `
<div>
<table class="wp-list-table widefat striped image-optimization-details-table">
<thead>
<tr>
<th>${ __( 'Size Name', 'image-optimization' ) }</th>
<th>${ __( 'Image Size', 'image-optimization' ) }</th>
<th>${ __( 'Savings', 'image-optimization' ) }</th>
<th></th>
</tr>
</thead>
<tbody>
`;
};
const footer = ( data ) => {
const totalSize = sprintf(
// Translators: %s - total file size
__( 'Total: %s', 'image-optimization' ),
formatFileSize( data?.total ),
);
return `
</tbody>
</table>
<p>
<b>
${ totalSize }
</b>
</p>
</div>
`;
};
const rowStart = ( data ) => {
return `
<tr>
<td class="image-optimization-details-table__size-name"><b>${ data.size_name }</b></td>
<td class="image-optimization-details-table__size">${ formatFileSize( data.file_size ) }</td>
`;
};
const rowEnd = () => {
return '</tr>';
};
const optimizedChunk = ( data ) => {
const optimizationStats = sprintf(
// Translators: %1$s: Optimization percentage, %2$ file size decrease
__( 'Reduced by %1$s%% (%2$s)', 'image-optimization' ),
data.saved.relative,
formatFileSize( data.saved.absolute ),
);
const croppingStats = data.new_dimensions ? sprintf(
// Translators: %1$s: Width, %2$ height
__( 'Resized to %1$s(w) x %2$s(h)', 'image-optimization' ),
data.new_dimensions.width,
data.new_dimensions.height,
) : '';
return `
<td class="image-optimization-details-table__status">
<span class="image-optimization-details-table__property">
${ optimizationStats }
</span>
<span class="image-optimization-details-table__property">
${ croppingStats }
</span>
</td>
<td class="image-optimization-details-table__action"></td>
`;
};
const notOptimizedChunk = ( data ) => {
return `
<td class="image-optimization-details-table__status">
<span class="image-optimization-details-table__property">
${ __( 'Not optimized', 'image-optimization' ) }
</span>
</td>
<td class="image-optimization-details-table__action">
<button type="button"
class="button button-primary image-optimization-details-table__optimization-button"
data-image-id="${ data.imageId }">
${ __( 'Optimize', 'image-optimization' ) }
</button>
</td>
`;
};
const notFoundChunk = () => {
return `
<td class="image-optimization-details-table__status">
<span class="image-optimization-details-table__property image-optimization-details-table__property--error">
${ __( 'File is missing', 'image-optimization' ) }
</span>
</td>
<td class="image-optimization-details-table__action"></td>
`;
};
const tooLargeChunk = () => {
const message = sprintf(
// Translators: %s - max file size
__( 'File is too large. Max size is %s', 'image-optimization' ),
formatFileSize( window?.imageOptimizerUserData?.maxFileSize ),
);
const subscriptionId = window?.imageOptimizerUserData?.planData?.subscription_id;
return `
<td class="image-optimization-details-table__status">
<span class="image-optimization-details-table__property">
${ message }
</span>
</td>
<td class="image-optimization-details-table__action">
<a class="button button-primary button-large"
href="${ getUpgradeLink( 'https://go.elementor.com/io-panel-upgrade/', subscriptionId ) }"
target="_blank" rel="noopener noreferrer">
${ __( 'Upgrade', 'image-optimization' ) }
</a>
</td>
`;
};
const error = ( data ) => {
return `
<span class="image-optimization-details-table__error">${ data.message }</span>
`;
};
const optimizationDetailsTemplate = Object.freeze( {
header,
footer,
rowStart,
rowEnd,
optimizedChunk,
notOptimizedChunk,
notFoundChunk,
tooLargeChunk,
error,
} );
export default optimizationDetailsTemplate;