1jQuery(document).ready(function($) { 2 // $('#upload-csv').on('click', function() { 3 // $('#csv-file-input').click(); 4 // }); 5 6 jQuery(document).on('click','#upload-csv',function(){ 7 jQuery('#csv-file-input').click(); 8 }); 9 10 11 jQuery(document).on('change','#csv-file-input',function(){ 12 var file_data = $(this).prop('files')[0]; 13 console.log('file_data',file_data); 14 var form_data = new FormData(); 15 form_data.append('file', file_data); 16 form_data.append('action', 'handle_excel_upload'); 17 18 // empty validation msg and show process gif 19 $("#processing-gif").show(); 20 $("#proceed-buttons").hide(); 21 $("#refresh-buttons").hide(); 22 $('#validation-messages').empty(); 23 $('#importDeals #excelName').val(""); 24 $('#importDeals #ignoreRowsInfo').empty(); 25 26 $.ajax({ 27 url: excelValidator.ajax_url, 28 type: 'POST', 29 data: form_data, 30 contentType: false, 31 processData: false, 32 success: function(response) { 33 try { 34 var result = typeof response === 'string' ? JSON.parse(response) : response; 35 var msg = result.data.message ? result.data.message : "File uploaded successfully!"; 36 if (result.success) { 37 $('#validation-messages').append('<p class="success">'+msg+'</p>'); 38 $('#importDeals #excelName').val(result.data.newFileName); 39 if(result.data.allRowsHasError=="Yes") { 40 $('#validation-messages').append('<p class="error">Uploaded excel file data is not correct.</p>'); 41 $('#refresh-buttons').show(); 42 } else { 43 $('#proceed-buttons').show(); 44 $('#proceed-yes').removeAttr("disabled"); 45 } 46 // Check if errorData exists and is not empty 47 if (Object.keys(result.data.errorData).length > 0) { 48 // Create table elements 49 var tbl = $('<table>').addClass('error-table'); 50 var tblHead = $('<thead>'); 51 var tblbody = $('<tbody>'); 52 53 // Add table headers 54 tblHead.append(`<tr><th width='20%'>Row Number</th><th width='80%'>Error Message</th></tr>`); 55 tbl.append(tblHead); 56 Object.entries(result.data.errorData).forEach(([rowNumber, fieldErrors]) => { 57 $('#importDeals #ignoreRowsInfo').append(`<input type="hidden" name="excelIgnoreRows[]" value="${rowNumber}" />`); 58 var tblTr = $('<tr>'); 59 tblTr.append(`<td>${rowNumber}</td>`); 60 var tbltd = $('<td>').addClass('error'); 61 var errMsgs = ''; 62 Object.entries(fieldErrors).forEach(([field, message]) => { 63 errMsgs += message+', '; 64 tbltd.append(`<p class="error pad-bottom2">${message}</p>`); 65 }); 66 //tblTr.append(tbltd); 67 var errmsg = errMsgs.slice(0, -2); 68 tblTr.append(`<td class="error">${errmsg}</td>`); 69 tblbody.append(tblTr); 70 }); 71 tbl.append(tblbody); 72 $('#validation-messages').append(tbl); 73 } 74 } else { 75 $('#validation-messages').append('<p class="error">' + msg + '</p>'); 76 $('#proceed-yes').attr("disabled",true); 77 } 78 } catch (error) { 79 $('#validation-messages').append('<p>Error processing response. Check console for details.</p>'); 80 } 81 $("#processing-gif").hide(); 82 } 83 }); 84 }); 85 86 $('#proceed-yes').on('click', function(e) { 87 e.preventDefault(); 88 $('#processing-gif').show(); 89 $('#proceed-yes').attr("disabled",true); 90 let formData = $(".csv-upload-container #importDeals").seri
90alize() 91 $.ajax({ 92 url: excelValidator.ajax_url, 93 type: 'POST', 94 data: formData+'&action=handle_excel_data_process', 95 processData: false, 96 success: function(response) { 97 $("#processing-gif").hide(); 98 $("#proceed-buttons").hide(); 99 $('#validation-messages').empty(); 100 $('#importDeals #excelName').val(""); 101 $('#importDeals #ignoreRowsInfo').empty(); 102 103 var result = typeof response === 'string' ? JSON.parse(response) : response; 104 var msg = result.data.message ? result.data.message : "File uploaded successfully!"; 105 if (result.success) { 106 $('#validation-messages').append('<p class="success">' + msg + '</p>'); 107 } else { 108 $('#validation-messages').append('<p class="error">' + msg + '</p>'); 109 } 110 } 111 }); 112 }); 113 114 $('#proceed-no, #refresh-btn').on('click', function(e) { 115 e.preventDefault(); 116 location.reload(); 117 }); 118});
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.