var _, ggl, getColumns, drawBubble; _ = require("prelude-ls"); ggl = {}; ggl.concatChar = "++"; getColumns = function(jsonData){ return _.map(function(index){ return { index_id: index.index_id, col_index: _.join(ggl.concatChar)( index.columns), col_name: _.join(ggl.concatChar)( _.map(function(it){ return jsonData.sheet_columns[it]; })( index.columns)) }; })( jsonData.indexes); }; drawBubble = function(inputURL){ var url; url = "https://sheetdb.com/data.fda.gov.tw/" + inputURL; return d3.json(url + "?format=json", function(err, jsonData){ var colums, data, nData, nName, groupedDataObj, helper, s, hdr, d; colums = getColumns( jsonData); data = _.map(function(row){ return _.listsToObj(jsonData.sheet_columns, row); })( jsonData.data); nData = _.map(function(col){ var c; c = col["col_name"]; return _.reverse( _.sortBy(function(it){ return it.value.length; })( d3.entries( _.groupBy(function(it){ return it[c]; })( data)))); })( colums); nName = _.map(function(it){ return it.col_name; })( colums); groupedDataObj = _.listsToObj(nName, nData); d3.selectAll(".datasource").html(showUrl(url, "資料來源")); helper = d3.select(".interaction").selectAll("div").data(_.map(function(it){ return it.col_name; })( colums)).enter().append("div"); helper.append("button").text(function(it){ return "分類:" + it + " (" + groupedDataObj[it].length + ")"; }).attr({ "class": "btn btn-default" }).style({ "cursor": "pointer" }).on("mousedown", function(it){ return ggl.grouping(it); }); helper.selectAll("div").data(function(col){ return _.take(3)( d3.entries( groupedDataObj[col])); }).enter().append("div").append("a").attr({ "class": "helper" }).text(function(it){ return "看:" + it.value.key + " (" + it.value.value.length + ")"; }).on("mousedown", function(it){ return ggl.highlighting(it.value.key); }); s = initSVG().h(700).margin({ top: 50, left: 50, right: 50, bottom: 50 })(); hdr = _.map(function(it){ return it.col_name; })( colums); d = data.filter(function(it, i){ if (it.value === "NaN") { it.value = 0; } else if (it.value === undefined) { it.value = undefined; } else { it.value = +it.value; } it.classes = []; hdr.map(function(h){ return it.classes.push(it[h]); }); return true; }); ggl.grouping = function(it){ return s.datum(d).call(appendCircle().updateModel(buildForce().groupByValue(it).grpColLimit(4))); }; return ggl.highlighting = function(it){ d3.selectAll(".cdots:not(." + it + ")").transition().style({ "opacity": 0.2 }); return d3.selectAll("." + it).transition().style({ "opacity": 1 }); }; }); };