///////////////// GENERATOR //////////////// let pause_conversion = false; let refreshIntervalId = false; let item_type = false; let process_done = false; let process_stop = false; let item_done = false; let conversion_started = false; let delete_all_process = false; let regeneration_warning_started = false; let current_formats = []; const ajaxGetProgressItem = (tab, link_item) => { if (link_item.data('fieldset') == 'others') { initFileManager(tab); } $.ajax({ url: x13webp_totals_url, method: 'POST', data: { type: link_item.data('fieldset') } }).done((resp) => { const content = JSON.parse(resp); if (!content.error) { let all_items_done = true; tab.find('.images-done-total .total').text(content.output.total); tab.find('.progress-bar').attr('aria-valuemax', content.output.total); if (content.output.types.length) { $(content.output.types).each(function () { const wrapper = tab.find('tr[data-image_type="' + this.name + '"]'); all_items_done = processinitProgressItems(this, wrapper, content.output.total); }); } else { processinitProgressAll(tab, content) } link_item.addClass('is-loaded'); tab.find('.bottom-button-conversion-progress button').attr('disabled', false); if (all_items_done) { tab.find('.bottom-button-conversion-progress .btn-start-conversion').prop('disabled', true).parent().tooltip('enable') } } else { tab.append('
${this.object_name} ${this.id_object ? '#'+this.id_object : '--'} ${this.format} [${this.format}]: ${this.error}
`; log_warning = true; has_errors = true; addImageLog(log, log_warning); // Reload current active tab ajaxGetProgressItem($($('#form-tabs li.active a').attr('href')), $('#form-tabs li.active a')) // Add log log = `-- Reloading current tab --
`; addImageLog(log, false); log = `-- Retrying conversion --
`; addImageLog(log, false); ajaxImageConversion(image_type, type, output_done, total, progress_bar); } else { $(progress_bar[this.format]).attr('aria-valuenow', this.done).css('width', this.percent + '%').find('.progressbar-inner').text(this.percent + '%'); $(progress_bar[this.format]).closest('tr').find('.images-done-total[data-format="'+this.format+'"] .done').text(this.done); if (this.complete) { $(progress_bar[this.format]).parent().addClass('is-done'); } else { is_complete = false; } if(this.id_object){ log = `${this.object_name} #${this.id_object}: ${this.format == 'webp' ? 'WebP' : 'JPG'} [${image_type == 'all' ? this.image : image_type}] ${this.warning ? this.warning : x13webp_success_alert}
`; log_warning = this.warning; addImageLog(log, log_warning); } if (this.format == 'webp' && $('#x13webp-delete-all-webp').hasClass('hidden')) { $('#x13webp-delete-all-webp').removeClass('hidden').siblings('.help-block').addClass('hidden'); } } }); if(is_complete){ process_done = true; if (process_stop) { processItemStop($('.tab-pane.active').find('tr[data-image_type="'+image_type+'"]')); processAllItemsStop($('.tab-pane.active').find('tr[data-image_type="'+image_type+'"]')); } } else { ajaxImageConversion(image_type, type, output_done, total, progress_bar); } if(has_errors){ process_stop = true; if (refreshIntervalId) clearInterval(refreshIntervalId); return; } } else { addImageLog(`${x13webp_unexpected_error}
`, true); } }); } } const startConversionAll = () => { process_done = false; process_stop = false; const rows = $('.tab-pane.active .progress-item-table tbody').find('tr[data-image_type]') if (refreshIntervalId) clearInterval(refreshIntervalId); rows.each((k, v) => { let item_is_done = true; let items = {}; let done = {}; current_formats.forEach((item) => { const progress = $(v).find('.progress[data-format="'+item+'"]'); if (progress.length && !progress.hasClass('is-done')) { item_is_done = false; } done[item] = progress.find('.progress-bar').attr('aria-valuenow'); items[item] = progress.find('.progress-bar'); }); const total = $(v).find('.progress-bar').attr('aria-valuemax'); if (!item_is_done) { refreshIntervalId = setInterval(intervalProgressBar, 1000); ajaxImageConversion( $(v).data('image_type'), item_type, done, total, items ); return false; } else if (rows.length == k + 1) { process_stop = true; processAllItemsStop($('.tab-pane.active .bottom-button-conversion-progress')); processAllItemsDone(); return false; } }); } const cleanProgress = (wrapper) => { const image_type = wrapper.data('image_type'); const type = wrapper.find('.progress-button').data('type'); current_formats.forEach((item) => { progressObjectClean(wrapper, image_type, item); }); if ($('#x13webp_image_format').val() != 'jpg'){ ajaxCleanProgress(image_type, type); } } const progressObjectClean = (wrapper, image_type, format = false) => { const progress_bar = wrapper.find(`.progress[data-image_type="${image_type}"]${format ? '[data-format="'+format+'"]' : ''} .progress-bar`); progress_bar.attr('aria-valuenow', 0).css('width', 0).parent().removeClass('is-done').find('.progressbar-inner').text('0%'); wrapper.find(`.images-done-total${format ? '[data-format="'+format+'"]' : ''} .done`).text('0'); } const ajaxCleanProgress = (image_type, type) => { $.ajax({ url: x13webp_clean_progress_item, method: 'POST', async: false, data: { image_type, type } }).done((resp) => { if (resp.length) { const content = JSON.parse(resp); if (content.error) { alert(content.error); pause_conversion = true; } } }) } const addImageLog = (log, warning = false) => { if ($('.x13webp-log-info').parent().hasClass('hidden')) $('.x13webp-log-info').parent().removeClass('hidden') if (log) $('.x13webp-log-info').prepend(log); if (warning && $('#x13webp-log-warning').hasClass('hidden')) $('#x13webp-log-warning').removeClass('hidden'); } const intervalProgressBar = () => { if (process_done){ startConversionAll(); } } const ajaxUpdateConfig = (name, val) => { $.ajax({ url: x13webp_update_config, method: 'POST', data: { name, val } }); } const updateCurrentFormats = () => { const current_format = $('#x13webp_image_format').val(); switch(current_format){ case 'all': current_formats = ['jpg', 'webp']; break; case 'jpg': current_formats = ['jpg']; break; case 'webp': current_formats = ['webp']; break; } }; const updateButtonsActivity = () => { $('tr[data-image_type]').each(function(){ let disable_button = true; current_formats.forEach((format) => { const done = $(this).find('.images-done-total[data-format="'+format+'"] .done').text(); const total = $(this).find('.images-done-total[data-format="'+format+'"] .total').text(); if (done != total) { disable_button = false; } }); $(this).find('.progress-button .btn-item-start').prop('disabled', disable_button).parent().tooltip(disable_button ? 'enable' : 'disable'); }); } const updateTabsActivity = () => { if ($('#x13webp_image_format').val() == 'jpg') { $('#form-tabs').find('li:not(.active)').find('a:not(.has_types)').addClass('disabled'); } else { $('#form-tabs').find('li:not(.active)').find('a'); enableTabs(); } } $(document).ready(() => { $('a.scrollto').on('click', function(e){ e.preventDefault(); $([document.documentElement, document.body]).animate({ scrollTop: $($(this).attr('href')).offset().top - 150 }, 1000); }); $('#form-tabs a[data-toggle="tab"]').on('shown.bs.tab', function (e) { if (!$(this).hasClass('has_types')){ $('#x13webp_image_format').prop('disabled', true); } else { $('#x13webp_image_format').prop('disabled', false); } }) updateCurrentFormats() $('#x13webp_image_format').on('change', function () { ajaxUpdateConfig($(this).attr('name'), $(this).val()); $('.progress-item-table tr').removeClass().addClass('tr-format-' + $(this).val()); updateCurrentFormats() updateButtonsActivity() updateTabsActivity() }); $('.btn-item-start').on('click', function (e) { // Reload current active tab ajaxGetProgressItem($($('#form-tabs li.active a').attr('href')), $('#form-tabs li.active a')) if (delete_all_process || regeneration_warning_started) { alert(x13webp_process_started_alert); e.preventDefault(); } else { const image_type = $(this).closest('tr').data('image_type'); const type = $(this).closest('.progress-button').data('type'); let items = {}; let done = {}; current_formats.forEach((item) => { const progress_bar = $(this).closest('tr').find('.progress[data-format="' + item + '"] .progress-bar'); done[item] = progress_bar.attr('aria-valuenow'); items[item] = progress_bar; }); const total = $(this).closest('tr').find('.progress-bar').attr('aria-valuemax'); if(!$(this).closest('tr').find('.progress-bar').hasClass('is-done')){ processItemStart($(this).closest('.progress-button')); ajaxImageConversion(image_type, type, done, total, items); } } }); $('.btn-item-pause').on('click', function () { processItemStop($(this).closest('tr'), false); }); $('.btn-item-refresh').on('click', function (e) { // Reload current active tab ajaxGetProgressItem($($('#form-tabs li.active a').attr('href')), $('#form-tabs li.active a')) if (delete_all_process || regeneration_warning_started) { alert(x13webp_process_started_alert); e.preventDefault() } else { const wrapper = $(this).closest('tr'); const image_type = $(this).closest('.progress-button').data('image_type'); const type = $(this).closest('.progress-button').data('type'); if(!confirm(x13webp_refresh_confirm_text)){ e.preventDefault(); return; } else { processItemStart(wrapper); cleanProgress(wrapper); current_formats.forEach((item) => { wrapper.find('.images-done-total[data-format="'+item+'"] .done').text('0'); }) let items = {}; let done = {}; current_formats.forEach((item) => { const progress_bar = $(this).closest('tr').find('.progress[data-format="' + item + '"] .progress-bar'); progress_bar.attr('aria-valuenow', 0).css('width', 0).parent().removeClass('is-done').find('.progressbar-inner').text('0%'); done[item] = progress_bar.attr('aria-valuenow'); items[item] = progress_bar; }); const total = $(this).closest('tr').find('.progress-bar').attr('aria-valuemax'); ajaxImageConversion(image_type, type, done, total, items); } } }); ajaxGetProgressItem($($('#form-tabs li.active a').attr('href')), $('#form-tabs li.active a')) $('body').on('shown.bs.tab', 'a[data-toggle="tab"]:not(.is-loaded)', function (e) { ajaxGetProgressItem($($(this).attr('href')), $(this)); }) $('body').on('click', '#form-tabs a.disabled', function (e) { e.preventDefault(); e.stopPropagation(); }); $('.btn-start-conversion').on('click', function (e) { // Reload current active tab ajaxGetProgressItem($($('#form-tabs li.active a').attr('href')), $('#form-tabs li.active a')) if (delete_all_process || regeneration_warning_started) { alert(x13webp_process_started_alert); e.preventDefault() } else { let allow_start = false; $(this).closest('form').find('.progress').each(function(){ if(!$(this).hasClass('is-done')){ allow_start = true; return false; } }); if(allow_start) { const parent = $(this).closest('.bottom-button-conversion-progress'); processAllItemsStart(parent); item_type = parent.data('type'); startConversionAll(); } } }); $('.btn-pause-conversion').on('click', function () { processAllItemsStop($(this).closest('.bottom-button-conversion-progress')); }); $('.btn-refresh-conversion').on('click', function (e) { // Reload current active tab ajaxGetProgressItem($($('#form-tabs li.active a').attr('href')), $('#form-tabs li.active a')) if (delete_all_process || regeneration_warning_started) { alert(x13webp_process_started_alert); e.preventDefault() } else { let is_something_generated = false; $(this).closest('form').find('.progress-bar').each(function(){ if($(this).attr('aria-valuenow') != 0){ is_something_generated = true; return; } }); if (is_something_generated && !confirm(x13webp_refresh_confirm_text)) { e.preventDefault(); return; } else { const parent = $(this).closest('.bottom-button-conversion-progress'); processAllItemsStart(parent); $(this).closest('form').find('table tr[data-image_type]').each(function(){ cleanProgress($(this)); }); item_type = parent.data('type'); startConversionAll(); } } }); $('#x13webp-log-warning').on('click', function(){ const text = $(this).data('text'); $(this).data('text', $(this).text()).text(text); if ($(this).data('toggle') == 'warnings'){ $(this).data('toggle', 'all'); $('.x13webp-log-info').addClass('warnings-only'); } else { $(this).data('toggle', 'warnings'); $('.x13webp-log-info').removeClass('warnings-only'); } }); }); ///////////// CLEANER FORM ////////////////// const doAjaxDeleteAllWebp = () => { $.ajax({ url: x13webp_delete_all_webp_url, method: 'POST' }).done((resp) => { const content = JSON.parse(resp); if (content.complete) { alert(content.alert); delete_all_process = false; $('#x13webp-delete-all-wrapper').find('.help-block').removeClass('hidden'); } else if (content.error) { alert(content.error); window.location.reload(); } else { addDeleteLog(content.alert, content.warning, content.type_name, content.image_type); const tr = $(`#tab-x13wepb-${content.type.indexOf('theme') != -1 ? 'theme' : content.type}`).find(`tr[data-image_type="${content.image_type}"]`); tr.find('.btn-item-start').attr('disabled', false).parent().tooltip('disable'); $('.btn-start-conversion').attr('disabled', false); progressObjectClean(tr, content.image_type, 'webp'); doAjaxDeleteAllWebp(); if(content.type == 'others'){ $('#tab-x13wepb-others .list-files li:not(.dir) input[name="others_item"]').attr('disabled', false).prop('checked', false); } } }); }; const addDeleteLog = (alert, warning, type_name, image_type) => { let log; log = ``; if (alert) { log += '' + type_name + ' ' + (image_type == 'all' ? '' : image_type) + ': ' + alert + ''; } else if (warning) { log += '' + type_name + ' ' + (image_type == 'all' ? '' : image_type) + ': ' + warning + ''; } else { log += '' + type_name + ' ' + (image_type == 'all' ? '' : image_type) + ': ' + x13webp_error_wrong +''; } log += `
`; $('#x13webp-logs-delete-all').prepend(log).removeClass('hidden'); } $(document).ready(() => { $('.x13webp-button-confirm').on('click', function (e) { if (conversion_started) { alert(x13webp_conversion_started_alert); e.preventDefault(); } else if (confirm($(this).data('confirm'))) { if ($(this).attr('id') == 'x13webp-delete-all-webp'){ delete_all_process = true; doAjaxDeleteAllWebp(); $(this).addClass('hidden'); } return true; } else { e.preventDefault(); return false; } }); $('#regenerate-warnings').on('click', function(e){ e.preventDefault(); if (conversion_started) { alert(x13webp_conversion_started_alert); } else if (delete_all_process || regeneration_warning_started) { alert(x13webp_process_started_alert); e.preventDefault() } else { ajaxRegenerateWarnings(); } }); }); const ajaxRegenerateWarnings = (id_x13webp = false) => { regeneration_warning_started = true; $.ajax({ url: x13webp_regenerate_warnings, method: 'POST', data: { id_x13webp } }).done(resp => { if(resp){ const output = JSON.parse(resp); if(output.error){ log = `${output.object_name} ${output.id_object ? '#'+output.id_object : '--'} ${output.format} [${output.format}]: ${output.error}
`; regeneration_warning_started = false; addImageLog(log, true); } else if(output.complete){ if(!output.warning_exists){ $('#regenerate-warnings').hide(); } regeneration_warning_started = false; alert(x13webp_alert_done); } else { log = `${output.object_name}: ${output.id_object != 0 ? '#'+output.id_object+': ' : ''} ${output.format == 'webp' ? 'WebP' : 'JPG'} [${output.image_type == 'all' ? output.image : output.image_type}] ${output.warning ? output.warning : 'success'}
`; log_warning = this.warning; addImageLog(log, log_warning); ajaxRegenerateWarnings(output.id_x13webp); } } else { regeneration_warning_started = false; addImageLog(`${x13webp_unexpected_error}
`, true); } }); }; const initFileManager = (tab) => { $.ajax({ url: x13webp_file_manager_url, }).done(resp => { if (resp.length) { const content = JSON.parse(resp); if (content.error) { alert(content.error); } else if (content.tree.length) { let ul = '`; if (this.type == 'dir') { ul += ``; } let props = ''; if(this.exists){ props += ' disabled'; if(this.type != 'dir'){ props +=' checked'; } } ul += ``; ul += this.name; ul += `
`; ul += `