async function load_file_list() { const recursiveSubDirs = document.getElementById('recursive_sub_dirs'); const params = new URLSearchParams({recursive_sub_dirs: recursiveSubDirs.checked}); const response = await fetch(`/process-files-list?${params}`); const data = await response.json(); if (data.error) { const errorTextAdd = document.getElementById('errorText'); errorTextAdd.innerHTML = data.error; } else { const processFilesTableIn = document.getElementById('process_files_table_in'); const processFilesTableOut = document.getElementById('process_files_table_out'); const directoryIn = document.getElementById('directory_in'); const directoryOut = document.getElementById('directory_out'); processFilesTableIn.innerHTML = ""; processFilesTableOut.innerHTML = ""; for (const fileItem of data.files_in) { let file_class; if (fileItem.file_error) { file_class = "text-error"; } else if (fileItem.file_processor) { file_class = "text-primary text-bold"; } else { file_class = ""; } const file_processor = fileItem.file_processor ? fileItem.file_processor : "Not found"; processFilesTableIn.innerHTML += "" + fileItem.file_with_path + "" + file_processor + "" } for (const fileItem of data.files_out) { processFilesTableOut.innerHTML += "" + fileItem.file_with_path + "" } directoryIn.innerHTML = data.directory_in; directoryOut.innerHTML = data.directory_out; } return ""; } async function process_files() { const elProgress = document.getElementById('progress'); const submit = document.getElementById('submit'); const errorText = document.getElementById('errorText'); submit.disabled = true; elProgress.style.display = 'inline'; const preserve_original_text = document.getElementById('preserve_original_text').checked; const overwrite_processed_files = document.getElementById('overwrite_processed_files').checked; const recursiveSubDirs = document.getElementById('recursive_sub_dirs').checked; const fromLang = document.getElementById('from_lang_select').value; const toLang = document.getElementById('to_lang_select').value; const plugin = document.getElementById('plugin').value; errorText.innerHTML = "" const reqBody = JSON.stringify({ from_lang: fromLang, to_lang: toLang, translator_plugin: plugin, preserve_original_text: preserve_original_text, overwrite_processed_files: overwrite_processed_files, recursive_sub_dirs: recursiveSubDirs, file_processors: null }); const reqParam = { method: 'POST', body: reqBody, signal: AbortSignal.timeout(600000), headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', } } try { const response = await fetch(`/process-files`, reqParam); const data = await response.json(); if (data.error) { errorText.innerHTML = data.error; return ""; } else { const processFilesTableResult = document.getElementById('process_files_table_result'); processFilesTableResult.innerHTML = ""; for (const fileItem of data.files) { let file_class = ""; if (fileItem.status === 'ERROR') { file_class = "text-error"; } else if (fileItem.status === 'OK') { file_class = "text-primary text-bold"; } else { file_class = ""; } let status = fileItem.status; switch (fileItem.status) { case "ERROR": status = "Error"; break; case "TYPE_NOT_SUPPORT": status = "Type not support"; break; case "TRANSLATE_ALREADY_EXISTS": status = "Translate already exists" } const pathFileOut = fileItem.path_file_out ? fileItem.path_file_out : ""; processFilesTableResult.innerHTML += "" + fileItem.path_file_in + "" + pathFileOut + "" + status + "" } return ""; } } catch (error) { errorText.innerHTML = error.message; console.error(error.message); } finally { elProgress.style.display = 'none'; submit.disabled = false; } } window.onload = () => { const recursiveSubDirs = document.getElementById('recursive_sub_dirs'); recursiveSubDirs.onchange = () => { load_file_list(); } const submit = document.getElementById('submit'); submit.onmouseup = () => { process_files(); load_file_list(); }; fill_language_select_elements(); load_file_list(); }