var stepped = 0, chunks = 0, rows = 0; var start, end; var parser; var pauseChecked = false; var printStepChecked = false; $(function() { $('#submit-parse').click(function() { stepped = 0; chunks = 0; rows = 0; var txt = $('#input').val(); var localChunkSize = $('#localChunkSize').val(); var remoteChunkSize = $('#remoteChunkSize').val(); var files = $('#files')[0].files; var config = buildConfig(); // NOTE: Chunk size does not get reset if changed and then set back to empty/default value if (localChunkSize) Papa.LocalChunkSize = localChunkSize; if (remoteChunkSize) Papa.RemoteChunkSize = remoteChunkSize; pauseChecked = $('#step-pause').prop('checked'); printStepChecked = $('#print-steps').prop('checked'); if (files.length > 0) { if (!$('#stream').prop('checked') && !$('#chunk').prop('checked')) { for (var i = 0; i < files.length; i++) { if (files[i].size > 1024 * 1024 * 10) { alert("A file you've selected is larger than 10 MB; please choose to stream or chunk the input to prevent the browser from crashing."); return; } } } start = performance.now(); $('#files').parse({ config: config, before: function(file, inputElem) { console.log("Parsing file:", file); }, complete: function() { console.log("Done with all files."); } }); } else { start = performance.now(); var results = Papa.parse(txt, config); console.log("Synchronous parse results:", results); } }); $('#submit-unparse').click(function() { var input = $('#input').val(); var delim = $('#delimiter').val(); var header = $('#header').prop('checked'); var results = Papa.unparse(input, { delimiter: delim, header: header, }); console.log("Unparse complete!"); console.log("--------------------------------------"); console.log(results); console.log("--------------------------------------"); }); $('#insert-tab').click(function() { $('#delimiter').val('\t'); }); }); function buildConfig() { return { delimiter: $('#delimiter').val(), newline: getLineEnding(), header: $('#header').prop('checked'), dynamicTyping: $('#dynamicTyping').prop('checked'), preview: parseInt($('#preview').val() || 0), step: $('#stream').prop('checked') ? stepFn : undefined, encoding: $('#encoding').val(), worker: $('#worker').prop('checked'), comments: $('#comments').val(), complete: completeFn, error: errorFn, download: $('#download').prop('checked'), fastMode: $('#fastmode').prop('checked'), skipEmptyLines: $('#skipEmptyLines').prop('checked'), chunk: $('#chunk').prop('checked') ? chunkFn : undefined, beforeFirstChunk: undefined, }; function getLineEnding() { if ($('#newline-n').is(':checked')) return "\n"; else if ($('#newline-r').is(':checked')) return "\r"; else if ($('#newline-rn').is(':checked')) return "\r\n"; else return ""; } } function stepFn(results, parserHandle) { stepped++; rows += results.data.length; parser = parserHandle; if (pauseChecked) { console.log(results, results.data[0]); parserHandle.pause(); return; } if (printStepChecked) console.log(results, results.data[0]); } function chunkFn(results, streamer, file) { if (!results) return; chunks++; rows += results.data.length; parser = streamer; if (printStepChecked) console.log("Chunk data:", results.data.length, results); if (pauseChecked) { console.log("Pausing; " + results.data.length + " rows in chunk; file:", file); streamer.pause(); return; } } function errorFn(error, file) { console.log("ERROR:", error, file); } function completeFn() { end = performance.now(); if (!$('#stream').prop('checked') && !$('#chunk').prop('checked') && arguments[0] && arguments[0].data) rows = arguments[0].data.length; console.log("Finished input (async). Time:", end-start, arguments); console.log("Rows:", rows, "Stepped:", stepped, "Chunks:", chunks); }