1(function($){window.initBulkUploadPage=function(){let bulkUploadFiles=[];document.addEventListener("fileUploaded",function(event){const data=event.detail;bulkUploadFiles.push({fileName:data.fileName,fileSize:data.fileSize,fileUrl:data.fileUrl,})});$("#bulk-upload-submit").off("click").on("click",function(){const formElement=document.getElementById("sup-upload-form");const requiredFields=["model-name","price","categories"];const modelFile=document.getElementById("model-file");const wetransferLink=document.getElementById("wetransfer-link");const skipUploadCheckbox=document.getElementById("skip-model-upload");const agreeUploadToMaxve=document.querySelector('input[name="upload_to_maxve"]:checked',);let valid=!0;function clearFieldError(fieldId){const field=document.getElementById(fieldId);if(field){const existingError=field.nextElementSibling;if(existingError&&existingError.classList.contains("error-message")){existingError.remove()}}} 2function setFieldError(fieldId,message){const field=document.getElementById(fieldId);if(field){const existingError=field.nextElementSibling;if(!existingError||!existingError.classList.contains("error-message")){field.insertAdjacentHTML("afterend",`<span class="error-message" style="color: red; font-size: 12px; margin-left: 10px;">${message}</span>`,)}}} 3requiredFields.forEach((fieldId)=>clearFieldError(fieldId));clearFieldError("wetransfer-link");clearFieldError("model-file");clearFieldError("upload_to_maxve");requiredFields.forEach((fieldId)=>{const field=document.getElementById(fieldId);if(field&&!field.value.trim()){valid=!1;setFieldError(fieldId,"This field is required.")}});if(!agreeUploadToMaxve){const agreeField=document.querySelector(".upload-to-maxve-sub");if(agreeField){const existingError=agreeField.querySelector(".error-message");if(!existingError){agreeField.insertAdjacentHTML("beforeend",`<span class="error-message" style="color: red; font-size: 12px; display: block; margin-top: 5px;">This field is required.</span>`,)}} 4valid=!1}else{const existingError=document.querySelector(".upload-to-maxve-sub .error-message",);if(existingError){existingError.remove()}} 5if(skipUploadCheckbox.checked){const urlRegex=/^(https?:\/\/)[^\s$.?#].[^\s]*$/;if(!wetransferLink.value.trim()||!urlRegex.test(wetransferLink.value)){valid=!1;setFieldError("wetransfer-link","Please enter a valid URL.")}}else{if(bulkUploadFiles.length===0){valid=!1;setFieldError("model-file","The file has not been uploaded or is still uploading.",)} 6const incompleteFiles=bulkUploadFiles.filter((file)=>!file.fileUrl||!file.fileSize||!file.fileName,);if(incompleteFiles.length>0){valid=!1;setFieldError("model-file","Some files are missing required information.",)}} 7if(!valid){Swal.fire({icon:"error",title:"Oops...",text:"Please fill in all required fields.",});return} 8console.time("Total Process Time");console.time("Prepare FormData");const formData=new FormData(formElement);formData.delete("model_file");if(!bulkUploadFiles.length){console.warn("BulkUploadFiles is empty!")} 9formData.append("uploaded_files",JSON.stringify(bulkUploadFiles));console.group("FormData Content");formData.forEach((value,key)=>{});console.groupEnd();console.timeEnd("Prepare FormData");console.time("Show Spinner");const spinner=document.getElementById("loading-spinner");if(spinner){spinner.style.display="block"}else{console.warn("Spinner element not found.")} 10console.timeEnd("Show Spinner");console.time("Fetch Request");fetch(`${bulkUploadAjax.ajaxUrl}?action=bulk_upload_3d_model`,{method:"POST",headers:{"X-WP-Nonce":window.nonce_upload_bulk,},body:formData,}).then((response)=>{console.timeEnd("Fetch Request");console.time("Parse JSON");return response.json()}).then((data)=>{console.timeEnd("Parse JSON");if(data.success){const postId=parseInt(data.data.post_id,10);if(!postId||isNaN(postId)){console.error("â post_id không hợp lá», dừng xá» lý bulk.")}else{fetch(`${bulkUploadAjax.ajaxUrl}?action=run_bulk_zip_handler`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","X-WP-Nonce":window.nonce_upload_bulk},body:new URLSearchParams({post_id:postId})}).then(r=>r.json()).then(res=>{if(!res.success){console.error("â Bulk handler error:",res.message||res)}}).catch(err=>{console.error("ð¥ Fetch error khi gá»i bulk handler:",err)})} 11if(typeof window.loadPageById==="function"){window.loadPageById(257109,"/thank-you-for-your-bulk-3d-model-upload/")}else{window.location.href="https://maxve.org/thank-you-for-your-bulk-3d-model-upload/"}}else{const errorMessage=data?.data?.message;console.error("â Server responded with error:",errorMessage);if(errorMessage==="Invalid nonce"||errorMessage==="Not logged in"){window.handleNotificationError(errorMessage,()=>{$("#bulk-upload-submit").click()})}else{Swal.fire({icon:"error",title:"Error",text:errorMessage,})}}}).catch((error)=>{console.timeEnd("Fetch Request");console.error("Fetch error:",error);Swal.fire({icon:"error",title:"Error",text:"An error occurred while submitting the form.",})}).finally(()=>{console.timeEnd("Total Process Time");if(spinner)spinner.style.display="none"})})}})(jQuery)
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.