Creates a jQuery DataTable https://datatables.net/ from a CSV. Please see codepen for needed css and js files.
Forked from Captain Anonymous's Pen myrjqv.
A Pen by risingsunomi on CodePen.
Forked from Captain Anonymous's Pen myrjqv.
A Pen by risingsunomi on CodePen.
| <div class="container-fluid"> | |
| <div class="row"> | |
| <div class="col-lg-8 col-sm-8 col-12"> | |
| <form method="POST" action="."> | |
| <h4>Upload Prospects</h4> | |
| <div class="form-group"> | |
| <span class="input-group-btn"> | |
| <span class="btn btn-primary btn-file"> | |
| Browse… <input type="file"> | |
| </span> | |
| </span> | |
| <input type="text" class="form-control" readonly> | |
| </div> | |
| <span class="help-block"> | |
| Upload one or more Prospect CSVs - Please limit only 25,000 entries at a time. | |
| </span> | |
| </form> | |
| </div> | |
| </div> | |
| <div class="row"> | |
| <div class="col-lg-12" style="color: #000;"> | |
| <table id="csvupload" class="table table-striped table-bordered" cellspacing="0" width="100%"></table> | |
| </div> | |
| </div> | |
| <div class="row"> | |
| <div class="col-lg-12" style="color: #000;"> | |
| <h3> JSON output </h3> | |
| <textarea rows="4" cols="50" id="jsonout"> </textarea> | |
| </div> | |
| </div> |
| $(function(){ | |
| function isDataTable ( nTable ) | |
| { | |
| var settings = $.fn.dataTableSettings; | |
| for ( var i=0, iLen=settings.length ; i<iLen ; i++ ) | |
| { | |
| if ( settings[i].nTable == nTable ) | |
| { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| $(document).on('change', '.btn-file :file', function() { | |
| var input = $(this); | |
| var filename = input.val().replace(/^.*\\/, ""); | |
| var ext = this.value.match(/\.(.+)$/)[1]; | |
| if(isDataTable($("#csvupload")[0])){ | |
| $("#csvupload").empty(); | |
| } | |
| switch(ext){ | |
| case 'csv': | |
| var client_data = []; | |
| var client_json = []; | |
| var client_mdata = []; | |
| label = input.val().replace(/\\/g, '/').replace(/.*\//, ''); | |
| input.trigger('fileselect', [label]); | |
| input.parse({ | |
| config: { | |
| delimiter: ",", // auto-detect | |
| newline: "", // auto-detect | |
| header: true, | |
| dynamicTyping: false, | |
| preview: 0, | |
| encoding: "", | |
| worker: false, | |
| comments: false, | |
| step: function(results, handle){ | |
| // collect row data from csv | |
| client_data.push(results.data[0]); | |
| }, | |
| complete: function(results, file) { | |
| if(results.errors){ | |
| console.log("Results.Errors:", results.errors); | |
| } | |
| // compile data for datatables from csv | |
| for(var j = 0; j < (client_data.length-1); j++){ | |
| var temp_cl = {}; | |
| for(var i = 0; i < results.meta.fields.length; i++){ | |
| var entry = client_data[j][String(results.meta.fields[i])]; | |
| if(String(entry).length != 0){ | |
| temp_cl[results.meta.fields[i]] = entry; | |
| }else{ | |
| temp_cl[results.meta.fields[i]] = "<i>no data</i>"; | |
| } | |
| } | |
| client_json.push(temp_cl); | |
| } | |
| for(var i = 0; i < results.meta.fields.length; i++){ | |
| client_mdata.push({ | |
| "mDataProp": String(results.meta.fields[i]), | |
| "sTitle": String(results.meta.fields[i]), | |
| "sTargets": [i], | |
| "sType": "string" | |
| }); | |
| } | |
| $('#csvupload').dataTable({ | |
| destroy: true, | |
| "aaData": client_json, | |
| "aoColumns": client_mdata | |
| }); | |
| $("textarea#jsonout").text(JSON.stringify(client_json)); | |
| }, | |
| error: function(err, file){ | |
| console.log("ERROR:", err, file); | |
| }, | |
| download: false, | |
| skipEmptyLines: false | |
| }, | |
| error: function(err, file, inputElem, reason){ | |
| console.log(err, file, inputElem, reason); | |
| }, | |
| complete: function(results){ | |
| bootbox.alert("Please check table and click submit if correct"); | |
| } | |
| }); | |
| break; | |
| default: | |
| bootbox.alert("Non-CSV files not allowed [File not allowed: " + filename + "]"); | |
| this.value = ''; | |
| } | |
| }); | |
| $('.btn-file :file').on('fileselect', function(event, label) { | |
| var input = $(this).parents('.form-group').find(':text'); | |
| if( input.length ) { | |
| input.val(label); | |
| } else { | |
| if(log){ alert(label); } | |
| } | |
| }); | |
| }); |
| .btn-file { | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .btn-file input[type=file] { | |
| position: absolute; | |
| top: 0; | |
| right: 0; | |
| min-width: 100%; | |
| min-height: 100%; | |
| font-size: 100px; | |
| text-align: right; | |
| filter: alpha(opacity=0); | |
| opacity: 0; | |
| background: red; | |
| cursor: inherit; | |
| display: block; | |
| } | |
| input[readonly] { | |
| background-color: white !important; | |
| cursor: text !important; | |
| position: absolute; | |
| top: 39px; | |
| left: 102px; | |
| } | |
| #csvupload_wrapper > div.row > div.col-sm-12 { overflow: auto;} |