diff --git a/legacy/application/assets.json b/legacy/application/assets.json index 6968c6759..96ffb6af7 100644 --- a/legacy/application/assets.json +++ b/legacy/application/assets.json @@ -122,7 +122,7 @@ "js/jplayer/skin/jplayer.airtime.audio.preview.css": "c721fe0587569391dcfa7d0f7b440d2b", "js/jplayer/skin/jplayer.audio-preview.blue.monday.css": "8565bf8e077eeb5bbba3c88bed42a590", "js/jplayer/skin/jplayer.blue.monday.css": "491c7a82ae4571ae4a73645bf9755eaf", - "js/libs/CSVexport.js": "07a91f824f41d2d0d1884b5dd10f63e4", + "js/libs/CSVexport.js": "42c1fcfff5c717482f21bff1a9002295", "js/libs/angular.min.js": "26680517e1024ca2c4f9ed4e0aa1619e", "js/libs/dayjs.min.js": "bea3f1180a3e2e45eccf9d76f990f3b4", "js/libs/dropzone.min.js": "f59ac59a89d9c569a27ca7ead38d2396", diff --git a/legacy/public/js/libs/CSVexport.js b/legacy/public/js/libs/CSVexport.js index bb246a767..ea60ee3b9 100644 --- a/legacy/public/js/libs/CSVexport.js +++ b/legacy/public/js/libs/CSVexport.js @@ -17,21 +17,29 @@ Compress with: http://jscompress.com/ csvEncoding = 'data:text/csv;charset=utf-8,', csvOutput = "", csvRows = [], - BREAK = '\r\n', + BREAK = '\r\n', // Use CRLF for line breaks DELIMITER = ',', - FILENAME = "export.csv"; + FILENAME = "export.csv"; // Get and Write the headers csvHeaders = Object.keys(csvData[0]); - csvOutput += csvHeaders.join(',') + BREAK; + csvOutput += csvHeaders.join(DELIMITER) + BREAK; for (var i = 0; i < csvData.length; i++) { - var rowElements = []; - for(var k = 0; k < csvHeaders.length; k++) { - rowElements.push(csvData[i][csvHeaders[k]]); - } // Write the row array based on the headers - csvRows.push(rowElements.join(DELIMITER)); - } + var rowElements = []; + for (var k = 0; k < csvHeaders.length; k++) { + var cell = csvData[i][csvHeaders[k]]; + if (typeof cell === 'string') { + if (cell.includes('"')) { + cell = '"' + cell.replace(/"/g, '""') + '"'; // Escape double quotes by doubling them + } else if (cell.includes(DELIMITER) || cell.includes('\r') || cell.includes('\n')) { + cell = '"' + cell + '"'; // Enclose in double quotes if it contains commas, CR, or LF + } + } + rowElements.push(cell); + } // Write the row array based on the headers + csvRows.push(rowElements.join(DELIMITER)); + } csvOutput += csvRows.join(BREAK);