var rowData = []; var data = {}; var colors = d3.scale.category20().range(); function readSingleFile(evt) { //Retrieve the first (and only!) File from the FileList object var f = evt.target.files[0]; if (f) { var r = new FileReader(); r.onload = function (e) { var contents = e.target.result; var data = CSV2JSON(contents); rowData = data; processDate(); } r.readAsText(f); } else { alert("Failed to load file"); } evt.target.value = "" } document.getElementById('fileinput').addEventListener('change', readSingleFile, false); d3.csv("data.csv") .get(function (error, rows) { rowData = rows; processDate(rows); }); function processDate() { data.words = d3.nest() .key(function (d) { return d.Word; }) .key(function (d) { return d.Category; }) .entries(rowData); data.group = d3.nest().key(function (d) { return d.Word }).entries(rowData).map(function (d) { return d.key }); data.category = d3.nest() .key(function (d) { return d.Category; }).entries(rowData).map(function (d, c) { return { name: d.key, color: colors[c] }; }); data.categoryNames = data.category.map(function (d) { return d.name }); var items = document.querySelectorAll("#header UL .colorPicker"); for (var i = 0; i < items.length; i++) { items[i].remove(); } data.categoryNames.forEach(function (d, i) { var div = document.createElement("LI"); div.setAttribute("class", "colorPicker"); var text = document.createElement("SPAN"); text.innerText = d; div.appendChild(text); var color = document.createElement("INPUT"); color.setAttribute("type", "color"); color.value = colors[i]; color.setAttribute("id", "color_" + (i + 1)); color.addEventListener("input", function () { colors[i] = color.value; //drawWordCount(); processDate(); }, false); div.appendChild(color); document.querySelector("#header UL").appendChild(div); //document.body.appendChild(x); }); data.words.forEach(function (d, index) { d.id = "id" + (index + 1); d.group = d.values[0].values[0].FEATURE_GROUP; d.name = d.key; delete d.key; d.count = (new Array(data.categoryNames.length)).map(function (d) { return 0; }); d.values.forEach(function (dd, di) { d.count[data.categoryNames.indexOf(d.values[di].key)] = d3.sum(d.values[di].values, function (d) { return +d.Total }); }); delete d.values; }); function drawWordCount() { var height = parseInt(d3.select("#g-chart").style("height")); if (height === 0) { height = window.innerHeight - 100; } var split = false; var options = { width: parseInt(d3.select("#g-chart").style("width")), height: split == true ? (height / 2) * data.group.length : height, minRadiusCircle: 15, minRadius: 20, maxRadius: 70, minFontSize: 8, collisionPadding: 4, searchSelector: "#search", chartSelector: "#g-chart", split: split }; wordCount(options, data); } drawWordCount(); } function CSV2JSON(csvData, headerMapping) { var retJSONdata = []; var headerData = null; var all_rows = null; var flag = false; var retValue = null; var columnSeperator = ","; all_rows = csvData.split("\n"); headerData = splitByChar(all_rows[0], columnSeperator, "\"", "\"", true, true); all_rows.splice(0, 1); flag = all_rows.every(function (d) { if (d.length == 0) { return true; } else { var trmpJSON = {}; var tempRow = splitByChar(d, columnSeperator, "\"", "\"", true, true); if (tempRow.length == headerData.length) { headerData.forEach(function (d1, i) { if (headerMapping == undefined || headerMapping[d1] == undefined) trmpJSON[d1] = tempRow[i]; else { trmpJSON[headerMapping[d1]] = tempRow[i]; } }); retJSONdata.push(trmpJSON); return true; } else { return false; } } }); if (!flag) { throw Error("invalid csv"); } else { retValue = retJSONdata; }; return retValue; } function splitByChar(line, splitChar, enclosedStartChar, enclosedEndChar, removeEnclosedChar, trim) { var arrFields = []; var bracketCounter = 0; var currLine = ''; for (cnt = 0; cnt < line.length; cnt++) { if (line.charAt(cnt) == enclosedStartChar) { if (enclosedStartChar == enclosedEndChar && bracketCounter > 0) { bracketCounter--; } else { bracketCounter++; } } else if (line.charAt(cnt) == enclosedEndChar) { bracketCounter--; } if (bracketCounter == 0) { //if (line.charAt(cnt) == splitChar) { if (line.substr(cnt, splitChar.length) == splitChar) { if (removeEnclosedChar == true) { if (currLine.indexOf(enclosedStartChar) == 0) { currLine = currLine.substr(1, currLine.length - 2); } } if (trim) { currLine = currLine.trim(); } arrFields.push(currLine); currLine = ""; cnt += (splitChar.length - 1); } else { currLine += line.charAt(cnt); } } else { currLine += line.charAt(cnt); } } if (removeEnclosedChar == true) { if (currLine.indexOf(enclosedStartChar) == 0) { currLine = currLine.substr(1, currLine.length - 2); } } if (trim) { currLine = currLine.trim(); } arrFields.push(currLine); return arrFields; }