let uploadArea = document.getElementById("upload-box"); let uploadFileCards = document.getElementById("upload-files"); let selectQuality = document.getElementById("selectQuality"); let selectLanguage = document.getElementById("selectLanguage"); let uploadMaxFileSize = 1024 * 1024 * 1024; let setting = "ebook"; let action = "compress" let languages = "" window.onload = function () { addUploadEventListener(); addSettingBtnListener(); }; function addSettingBtnListener() { let btns = document.getElementsByClassName("quality"); for (let btn of btns) { btn.addEventListener("click", function () { for (let btn0 of document.getElementsByClassName("quality")) { btn0.className = "checkbox quality"; } btn.className = "checkbox quality active"; setting = btn.getAttribute("value"); }); } btns = document.getElementsByClassName("menu"); for (let btn of btns) { btn.addEventListener("click", function () { for (let btn0 of document.getElementsByClassName("menu")) { btn0.className = "checkbox menu"; } btn.className = "checkbox menu active"; action = btn.getAttribute("value"); if (action === "compress") { selectQuality.style.display = "block"; selectLanguage.style.display = "none"; } else if (action === "ocr") { selectQuality.style.display = "none"; selectLanguage.style.display = "block"; } }); } btns = document.getElementsByClassName("language"); for (let btn of btns) { btn.addEventListener("click",function(){ if(btn.className.indexOf("active") === -1){ btn.className = "checkbox language active" }else{ btn.className = "checkbox language" } languages = "" for(let btn0 of document.getElementsByClassName("language")){ if(btn0.className.indexOf("active") !== -1){ languages = languages + "," + btn0.getAttribute("value") } } languages = languages.substr(1) }) } } function addUploadEventListener() { uploadArea.addEventListener("click", () => { let fileInput = document.createElement("input"); fileInput.setAttribute("type", "file"); fileInput.setAttribute("style", "visibility:hidden"); fileInput.setAttribute("multiple", "multiple"); fileInput.setAttribute("accept", "application/pdf"); fileInput.addEventListener("change", function () { for (let i = 0; i < this.files.length && i < 10; i++) { uploadFile(this.files[i]); } }); fileInput.click(); }); } function wellSize(num) { if (num <= 1024) { return num + "byte"; } if (num <= 1024 * 1024) { return (num / 1024).toFixed(2) + "kb"; } if (num <= 1024 * 1024 * 1024) { return (num / 1024 / 1024).toFixed(2) + "mb"; } if (num <= 1024 * 1024 * 1024 * 1024) { return (num / 1024 / 1024 / 1024).toFixed(2) + "gb"; } return (num / 1024 / 1024 / 1024 / 1024).toFixed(2) + "tb"; } function addUploadCard(callback) { callback = callback || function () {}; let addCard = () => { let cardHtml = `
`; let card = document.createElement("div"); card.className = "upload-file-card"; card.innerHTML = cardHtml; uploadFileCards.prepend(card); let progressBar = card.getElementsByClassName("progress-bar")[0]; let errReason = card.getElementsByClassName("errorReason")[0]; let uploadErrorCover = card.getElementsByClassName("upload-error-cover")[0]; let downloadButton = card.getElementsByClassName("download_button")[0]; let fileinfo = card.getElementsByClassName("fileinfo")[0]; let fileLinksBox = card.getElementsByClassName("file-links-box")[0]; let setErrorInfo = function (errorText) { progressBar.style.background = "#F56C6C"; errReason.innerText = errorText; uploadErrorCover.style.display = "block"; }; callback( (percent) => { progressBar.style.width = percent + "%"; }, (taskID) => { let timer = setInterval(() => { getTaskStatus( taskID, function (task) { if (task.status === 3 || task.status === 4) { clearInterval(timer); } if (task.status < 3) { // 下载进度 progressBar.style.background = "#ffc940"; progressBar.style.width = task.progress * 100 + "%"; } if (task.status === 3) { progressBar.style.background = "#ffc940"; progressBar.style.width = task.progress * 100 + "%"; downloadButton.setAttribute( "href", `/download?taskId=${taskID}` ); if(task.taskType === "compress"){ fileinfo.innerHTML = `${task.name} 原大小:${wellSize( task.size )} 压缩后大小:${wellSize(task.size2)}`; fileLinksBox.style.display = "block"; }else if(task.taskType === "ocr"){ fileinfo.innerHTML = `${task.name} 转换完毕`; fileLinksBox.style.display = "block"; } } if (task.status === 4) { progressBar.style.background = "red"; progressBar.style.width = task.progress * 100 + "%"; setErrorInfo(`转换失败,原因是:${task.reason}`); } }, function () { clearInterval(timer); setErrorInfo("转换失败"); } ); }, 500); }, (reason) => { setErrorInfo(reason); } ); }; addCard(); } function getTaskStatus(taskID, callback, errCalback) { callback = callback || function () {}; errCalback = errCalback || function () {}; let request = new XMLHttpRequest(); request.open("GET", `/api/task?taskId=${taskID}`); request.addEventListener("load", (e) => { let resp = JSON.parse(request.response); callback(resp); }); request.addEventListener("error", (e) => { errCalback("获取状态出错"); }); request.send(); } function uploadFile(file) { addUploadCard((setProgress, uploadSuccess, uploadError) => { // 检查是否允许上传 let size = file.size; if (size > uploadMaxFileSize) { uploadError("超过了上传文件最大限制"); return; } ajaxUploadFile(file, setProgress, uploadSuccess, uploadError); }); } function ajaxUploadFile(file, setProgress, uploadSuccess, uploadError) { let formData = new FormData(); formData.append("file", file); formData.append("setting", setting); formData.append("languages", languages); let request = new XMLHttpRequest(); request.open("POST", `/api/${action}`); request.upload.addEventListener("progress", (e) => { let percent_complete = (e.loaded / e.total) * 100; setProgress(percent_complete); }); request.addEventListener("load", (e) => { let resp = JSON.parse(request.response); if (request.status === 200) { uploadSuccess(resp.taskID); } }); request.addEventListener("error", (e) => { uploadError("上传出错"); }); request.send(formData); } function isMobile() { var userAgentInfo = navigator.userAgent; var mobileAgents = [ "Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod", ]; var mobile_flag = false; for (var v = 0; v < mobileAgents.length; v++) { if (userAgentInfo.indexOf(mobileAgents[v]) > 0) { mobile_flag = true; break; } } var screen_width = window.screen.width; var screen_height = window.screen.height; if (screen_width < 500 && screen_height < 800) { mobile_flag = true; } return mobile_flag; }