function openBulkConvertPopup() { document.getElementById('bulkconvertlog').innerHTML = ''; document.getElementById('bulkconvertcontent').innerHTML = '
Receiving list of files to convert...
'; tb_show('Bulk Convert', '#TB_inline?inlineId=bulkconvertpopup'); var data = { 'action': 'list_unconverted_files', 'nonce' : window.webpExpress['ajax-nonces']['list-unconverted-files'], }; jQuery.ajax({ type: "POST", url: ajaxurl, data: data, dataType: 'text', timeout: 30000, error: function (jqXHR, status, errorThrown) { html = '

Error: ' + status + '

'; html += errorThrown; document.getElementById('bulkconvertcontent').innerHTML = html; }, success: function(response) { if ((typeof response == 'object') && (response['success'] == false)) { html = '

Error

'; if (response['data'] && ((typeof response['data']) == 'string')) { html += webpexpress_escapeHTML(response['data']); } document.getElementById('bulkconvertcontent').innerHTML = html; return; } if (response == '') { html = '

Error

'; html += '

Could not fetch list of files to convert. The server returned nothing (which is unexpected - ' + 'it is not simply because there are no files to convert.)

'; document.getElementById('bulkconvertcontent').innerHTML = html; return; } var responseObj; try { responseObj = JSON.parse(response); } catch (e) { html = '

Error

'; html += '

The ajax call did not return valid JSON, as expected.

'; html += '

Check the javascript console to see what was returned.

'; console.log('The ajax call did not return valid JSON, as expected'); console.log('Here is what was received:'); console.log(response); document.getElementById('bulkconvertcontent').innerHTML = html; return; } var bulkInfo = { 'groups': responseObj, 'groupPointer': 0, 'filePointer': 0, 'paused': false, 'webpTotalFilesize': 0, 'orgTotalFilesize': 0, }; window.webpexpress_bulkconvert = bulkInfo; // count files var numFiles = 0; for (var i=0; i'; html += '

Note that in a typical setup, you will have redirect rules which trigger conversion when needed, ' + 'and thus you have no need for bulk conversion. In fact, in that case, you should probably not bulk convert ' + 'because bulk conversion will also convert images and thumbnails which are not in use, and thus take up ' + 'more disk space than necessary. The bulk conversion feature was only added in order to make the plugin usable even when ' + 'there are problems with redirects (ie on Nginx in case you do not have access to the config or on Microsoft IIS). ' + '


'; html += ''; html += ''; } document.getElementById('bulkconvertcontent').innerHTML = html; } }); } function pauseBulkConversion() { var bulkInfo = window.webpexpress_bulkconvert; bulkInfo.paused = true; } function pauseOrResumeBulkConversion() { var bulkInfo = window.webpexpress_bulkconvert; bulkInfo.paused = !bulkInfo.paused; document.getElementById('bulkPauseResumeBtn').innerText = (bulkInfo.paused ? 'Resume' : 'Pause'); if (!bulkInfo.paused) { convertNextInBulkQueue(); } } function startBulkConversion() { var html = '
'; html += ''; html += ''; //html += '
test
'; //html += '
'; document.getElementById('bulkconvertcontent').innerHTML = html; document.getElementById('bulkconvertlog').innerHTML = ''; convertNextInBulkQueue(); } function convertDone() { var bulkInfo = window.webpexpress_bulkconvert; document.getElementById('bulkconvertlog').innerHTML += '

Done!

' + '

Total reduction: ' + getReductionHtml(bulkInfo['orgTotalFilesize'], bulkInfo['webpTotalFilesize'], 'Total size of converted originals', 'Total size of converted webp files') + '

' document.getElementById('bulkPauseResumeBtn').style.display = 'none'; } function getPrintableSizeInfo(orgSize, webpSize) { if (orgSize < 10000) { return { 'org': orgSize + ' bytes', 'webp': webpSize + ' bytes' }; } else { return { 'org': Math.round(orgSize / 1024) + ' kb', 'webp': Math.round(webpSize / 1024) + ' kb' }; } } function getReductionHtml(orgSize, webpSize, sizeOfOriginalText, sizeOfWebpText) { var reduction = Math.round((orgSize - webpSize)/orgSize * 100); var sizeInfo = getPrintableSizeInfo(orgSize, webpSize); var hoverText = sizeOfOriginalText + ': ' + sizeInfo['org'] + '.
' + sizeOfWebpText + ': ' + sizeInfo['webp']; // ps: this is all safe to print return '' + reduction + '%' + '' + hoverText + '' + '
'; } function logLn() { var html = ''; for (i = 0; i < arguments.length; i++) { html += arguments[i]; } var spanEl = document.createElement('span'); spanEl.innerHTML = html; document.getElementById('bulkconvertlog').appendChild(spanEl); //document.getElementById('bulkconvertlog').innerHTML += html; } function webpexpress_viewLog(groupPointer, filePointer) { /* disabled until I am certain that security is in place. var bulkInfo = window.webpexpress_bulkconvert; var group = bulkInfo.groups[groupPointer]; var filename = group.files[filePointer]; var source = group.root + '/' + filename; var w = Math.min(1200, Math.max(200, document.documentElement.clientWidth - 100)); var h = Math.max(250, document.documentElement.clientHeight - 80); document.getElementById('conversionlog_content').innerHTML = 'loading log...'; // + source; jQuery.ajax({ method: 'POST', url: ajaxurl, data: { 'action': 'webpexpress_view_log', 'nonce' : window.webpExpress['ajax-nonces']['view-log'], 'source': source }, success: (response) => { //alert(response); if ((typeof response == 'object') && (response['success'] == false)) { html = '

Error

'; if (response['data'] && ((typeof response['data']) == 'string')) { html += webpexpress_escapeHTML(response['data']); } document.getElementById('conversionlog_content').innerHTML = html; return; } var result = JSON.parse(response); // the "log" result is a simply form of markdown, using just italic, bold and newlines. // It ought not to return anything evil, but for good practice, let us encode. result = webpexpress_escapeHTML(result); var html = '

Conversion log


' + '
' + result + '
'; document.getElementById('conversionlog_content').innerHTML = html; }, error: () => { //responseCallback({requestError: true}); }, }); //

Conversion log

//tb_show('Conversion log', '#TB_inline?inlineId=conversionlog'); openDasPopup('conversionlog', w, h); */ } function convertNextInBulkQueue() { var html; var bulkInfo = window.webpexpress_bulkconvert; //console.log('convertNextInBulkQueue', bulkInfo); // Current group might contain 0, - skip if that is the case while ((bulkInfo.groupPointer < bulkInfo.groups.length) && (bulkInfo.filePointer >= bulkInfo.groups[bulkInfo.groupPointer].files.length)) { logLn( '

' + bulkInfo.groups[bulkInfo.groupPointer].groupName + '

', '

Nothing to convert

' ); bulkInfo.groupPointer++; bulkInfo.filePointer = 0; } if (bulkInfo.groupPointer >= bulkInfo.groups.length) { convertDone(); return; } var group = bulkInfo.groups[bulkInfo.groupPointer]; var filename = group.files[bulkInfo.filePointer]; if (bulkInfo.filePointer == 0) { logLn('

' + group.groupName + '

'); } logLn('Converting ' + filename + ''); var data = { 'action': 'convert_file', 'nonce' : window.webpExpress['ajax-nonces']['convert'], 'filename': group.root + '/' + filename //'whatever': ajax_object.we_value // We pass php values differently! }; function responseCallback(response){ if ((typeof response == 'object') && (response['success'] == false)) { html = '

Error

'; if (response['data'] && ((typeof response['data']) == 'string')) { // disabled. Need to check if it is secure //html += webpexpress_escapeHTML(response['data']); } logLn(html); return } var result = typeof response.requestError !== 'boolean' ? JSON.parse(response) : { success: false, msg: '', log: '', }; var bulkInfo = window.webpexpress_bulkconvert; var group = bulkInfo.groups[bulkInfo.groupPointer]; var filename = group.files[bulkInfo.filePointer]; var result = JSON.parse(response); // TODO: An parse error has been experienced (perhaps when token expired?) //console.log(result); var html = ''; var htmlViewLog = ''; // uncommented until I'm certain that security is in place //var htmlViewLog = '  view log'; if (result['success']) { //console.log('nonce tick:' + result['nonce-tick']); if (result['new-convert-nonce']) { //console.log('new convert nonce:' + result['new-convert-nonce']); window.webpExpress['ajax-nonces']['convert'] = result['new-convert-nonce']; } var orgSize = result['filesize-original']; var webpSize = result['filesize-webp']; var orgSizePrint, webpSizePrint; bulkInfo['orgTotalFilesize'] += orgSize; bulkInfo['webpTotalFilesize'] += webpSize; //'- Saved at: ' + result['destination-path'] + /* html += ' ok' + htmlViewLog + getReductionHtml(orgSize, webpSize, 'Size of original', 'Size of webp')*/ html += ' ok' + '' + 'Destination:
' + result['destination-path'] + '

' + 'Url:
' + result['destination-url'] + '
' + '
' + '
' + getReductionHtml(orgSize, webpSize, 'Size of original', 'Size of webp') } else { html += ' failed' + htmlViewLog; if (result['msg']) { logLn(html); logLn('

' + webpexpress_escapeHTML(result['msg']) + ''); } if (result['stop']) { return; } /* if (result['msg'] != '') { html += ' ' + result['msg'] + ''; } */ html += '
'; /*if (result['log'] != '') { html += ' ' + result['log'] + ''; }*/ } logLn(html); // Get next bulkInfo.filePointer++; if (bulkInfo.filePointer == group.files.length) { bulkInfo.filePointer = 0; bulkInfo.groupPointer++; } if (bulkInfo.groupPointer == bulkInfo.groups.length) { convertDone(); } else { if (bulkInfo.paused) { document.getElementById('bulkconvertlog').innerHTML += '

on pause
' + 'Reduction this far: ' + getReductionHtml(bulkInfo['orgTotalFilesize'], bulkInfo['webpTotalFilesize'], 'Total size of originals this far', 'Total size of webp files this far') + '

' bulkInfo['orgTotalFilesize'] += orgSize; bulkInfo['webpTotalFilesize'] += webpSize; } else { convertNextInBulkQueue(); } } } // jQuery.post(ajaxurl, data, responseCallback); jQuery.ajax({ method: 'POST', url: ajaxurl, data: data, success: (response) => { responseCallback(response); }, error: () => { responseCallback({requestError: true}); }, }); }