CSV 2 JSON -> FancyGrid output

by mhouser_nowmediagroup

HTML

<script src="https://cdn.fancygrid.com/fancy.min.js"></script>
<div id="container"></div>

JavaScript

document.addEventListener("DOMContentLoaded", function() {

  function str_fix(str) {
    var count = -1
    var new_str = ""
    while (str[++count])
      if (str[count] == ' ')
        new_str += '_'
    else
      new_str += str[count]
    return String(new_str)
  }


  function parseCSV(csv) {
    var topline = ""
    var data = []
    var count = -1
    let length = csv.length

    while (csv[++count] != '\n') {
      while (csv[count] == ',' && csv[count + 1] == ',')
        count++
        topline += csv[count]
    }

    topline = topline.split(',')
    var items = topline.length

    while (count + 1 < length) {
      var current_str = ""
      var current_count = items
      var values = {}
      while (count + 1 < length && csv[++count] != '\n') {
        while (csv[count] == ',' && csv[count + 1] == ',')
          count++
          current_str += csv[count]
      }
      current_str = current_str.split(',')

      while (current_count--)
        values[str_fix(topline[current_count])] = current_str[current_count]
      data.push(values)
    }
    return data
  }


  function outputTable(data) {
    new FancyGrid({
      title: 'JSON Data',
      renderTo: 'container',
      width: document.body.clientWidth - (document.body.clientWidth * 0.1),
      height: 400,
      data: data,
      defaults: {
        type: 'string',
        width: document.body.clientWidth / 4,
        sortable: true
      },
      columns: [{
        index: 'State_Name',
        locked: true,
        title: 'State Name'
      }, {
        index: 'ST',
        title: 'State'
      }, {
        index: 'Zip_Min',
        title: 'Min',
        type: 'number'
      }, {
        index: 'Zip_Max',
        title: 'Max',
        type: 'number'
      }]
    });
    window.alert("You made it!")
  }


  fetch('https://mjhd.me/zip_ranges.csv')
    .then(function(response) {
      return response.text()
    })
    .then(function(csv) {
      data = parseCSV(csv)
      outputTable(data)
   ...