/* simple line chart, talking to array reference */ // using https://bl.ocks.org/d3noob/402dd382a51a4f6eea487f9a35566de0 import { Hunkify, Input, Output, State } from '../hunks.js' function LineChart() { Hunkify(this) // let dtRef = new Input('reference', 'array', this) this.inputs.push(dtRef) // how many to keep let displayNum = new State('number', 'displayCount', 50) this.states.push(displayNum) // some global items, var datas = [ [0, 0] ] let uniqueDivId = '' // to claim some space in the DOM, we make a handle for ourselv this.dom = {} this.init = () => { console.log('INIT linechart') // make a unique id, we use a flat d3 search to find and update this ... uniqueDivId = 'linechart_div_' + Math.round(Math.random() * 1000) this.dom = $('<div>').attr('id', uniqueDivId).get(0) } this.onload = () => { // our vars, var margin = { top: 20, right: 20, bottom: 30, left: 90 }, width = 960 - margin.left - margin.right, height = 500 - margin.top - margin.bottom; var x = d3.scaleLinear().range([0, width]) var y = d3.scaleLinear().range([height, 0]) var thesvg = null // make ah function this.reloadDatas = () => { var valueline = d3.line() .x(function(d) { return x(d[0]) }) .y(function(d) { return y(d[1]) }) // scale x.domain([d3.min(datas, function(d) { return d[0] }), d3.max(datas, function(d) { return d[0]; })]) y.domain([d3.min(datas, function(d) { return d[1] }), d3.max(datas, function(d) { return d[1]; })]) if (thesvg) { d3.select(`#${uniqueDivId}`).selectAll("*").remove() } thesvg = d3.select(`#${uniqueDivId}`).append("svg") .attr("width", width + margin.left + margin.right) .attr("height", height + margin.top + margin.bottom) .append("g") .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); // write it? thesvg.append("path") .data([datas]) .attr("class", "line") .attr("d", valueline) // write the x axis thesvg.append("g") .attr("transform", "translate(0," + height + ")") .call(d3.axisBottom(x)) // the y axis thesvg.append("g") .call(d3.axisLeft(y)) } // so then this.requestResize(1000, 520) // startup this.reloadDatas() } this.onresize = () => { console.log(this.dom.clientHeight, this.dom.clientWidth) } // hmmm this.loop = () => { // pull and append if (dtRef.io()) { // WARN to others... the -1 is here bc is it a useful hack for jake // at the moment ! apologies datas = dtRef.get() this.reloadDatas() } } } export default LineChart