function Bridge() { var my = ChiasmComponent({ margin: { left: 20, top: 0, right: 20, bottom: 0 }, xColumn: Model.None, yColumn: Model.None, xScaleDomain: Model.None, yScaleDomain: Model.None, stroke: "black", strokeWidth: "1px", brushIntervalX: Model.None }); var xScale = d3.time.scale(); var yScale = d3.scale.linear(); var svg = d3.select(my.initSVG()); var clipRect = svg .append("clipPath") .attr("id", "clip") .append("rect"); var g = svg.append("g"); var areaG = g.append("g") .style("clip-path", "url(#clip)"); var path = areaG.append("path"); var area = d3.svg.area() .interpolate("monotone"); // Respond to changes in size and margin. // Inspired by D3 margin convention from http://bl.ocks.org/mbostock/3019563 my.when(["box", "margin"], function(box, margin){ my.innerBox = { width: box.width - margin.left - margin.right, height: box.height - margin.top - margin.bottom }; g.attr("transform", "translate(" + margin.left + "," + margin.top + ")"); }); my.when(["data", "brushIntervalX", "innerBox", "xColumn", "xScaleDomain", "stroke", "strokeWidth"], function (data, brushIntervalX, innerBox, xColumn, xScaleDomain, stroke, strokeWidth){ if(xColumn !== Model.None){ var extent = d3.extent(data, function (d){ return d[xColumn]; }); xScale.range([0, innerBox.width]); xScale.domain(extent); var linesData = []; if(brushIntervalX !== Model.None){ brushIntervalX = parseDates(brushIntervalX); var w = innerBox.width; var h = innerBox.height; var linesData = [ { x1: xScale(brushIntervalX[1]), y1: h, x2: w, y2: 0 }, { x1: xScale(brushIntervalX[0]), y1: h, x2: 0, y2: 0 } ]; } var lines = g.selectAll("line").data(linesData); lines.enter().append("line"); lines .attr("x1", function (d) { return d.x1; }) .attr("y1", function (d) { return d.y1; }) .attr("x2", function (d) { return d.x2; }) .attr("y2", function (d) { return d.y2; }) .style("stroke-width", strokeWidth) .style("stroke", stroke); lines.exit().remove(); } }); function parseDates(dates){ return dates.map(function (date){ if(typeof date === Date){ return date; } else { return new Date(date); } }); } return my; }