const WIDTH = 800; const HEIGHT = 600; let instances; const selectedInstances = []; let xScale, yScale; const parseTime = d3.timeParse("%B %e, %Y"); const formatTime = d3.timeFormat("%B %e, %Y"); const renderPoints = () => { d3.select('#points').html(''); const circles = d3.select('#points') .selectAll('circle') .data(instances, (datum) => { return datum.id }); circles.enter().append('circle'); d3.selectAll('circle') .attr('cy', (datum, index) => { return yScale(datum.ninety_day_outcomes); }); d3.selectAll('circle') .attr('cx', (datum, index) => { return xScale(parseTime(datum.graduation_date)); }); d3.selectAll('circle') .classed('highlighted', (datum, index)=>{ console.log(datum); return datum.highlighted }) } const setupGraph = ()=>{ d3.select('svg'); d3.select('svg') .style('width', WIDTH) .style('height', HEIGHT); xScale = d3.scaleTime(); xScale.range([0,WIDTH]); const xDomain = d3.extent(instances, (datum, index) => { return parseTime(datum.graduation_date); }); xScale.domain(xDomain); yScale = d3.scaleLinear(); yScale.range([HEIGHT, 0]); const yDomain = d3.extent(instances, (datum, index) => { return datum.ninety_day_outcomes; }) yScale.domain(yDomain); } const createAxes = () => { const bottomAxis = d3.axisBottom(xScale); d3.select('#container') .append('g') .attr('id', 'x-axis') .call(bottomAxis) .attr('transform', 'translate(0,'+HEIGHT+')'); const leftAxis = d3.axisLeft(yScale); d3.select('#container') .append('g') .attr('id', 'y-axis') .call(leftAxis); } const createFormSubmissionHandler = () => { d3.select('form').on('submit', (event)=>{ event.preventDefault(); const instanceID = parseInt(d3.select('input[type="text"]').property('value')) selectedInstances.push(instanceID); const list = d3.select('ul'); list.html(''); for(instance of selectedInstances){ list.append('li').html(instance) } for(instance of instances){ if(instance.instance_id == instanceID){ instance.highlighted = true } else { instance.highlighted = false } } renderPoints() }); } window.onload = async ()=>{ instances = await d3.json('/instances'); instances.forEach(instance => instance.highlighted = false) setupGraph(); createAxes(); renderPoints(); createFormSubmissionHandler(); }