diff --git a/ennstatus/static/js/yearbar.js b/ennstatus/static/js/yearbar.js new file mode 100644 --- /dev/null +++ b/ennstatus/static/js/yearbar.js @@ -0,0 +1,90 @@ +d3.select(window).on("resize", throttle); +var width = document.getElementById('yearchart').offsetWidth - 40 -30; +var height = (width / 2) - 20 - 30; + +var svg, tip; + +setup(width, height); + +function setup(width, height) { + svg = d3.select("#yearchart").append("svg") + .attr("width", width) + .attr("height", height + 20 + 30) + .append("g") + .attr("transform", "translate(" + 40 + "," + 20 + ")"); + tip = d3.tip() + .attr('class', 'd3-tip') + .offset([-10, 0]) + .html(function(d) { + return "" + d.key + ": " + d.value + ""; + }); + svg.call(tip); + draw(width, height) +} + +function draw(width, height) { + d3.json("/donate/data/year", function(err, data) { + var xscale = d3.scale.ordinal().rangeRoundBands([0, width], .1); + xscale.domain(data.map(function(d) { return d.key; })); + var yscale = d3.scale.linear().range([height, 0]); + yscale.domain([0, d3.max(data, function(d) { return d.value; })]); + var key = function(d) { return d.key; }; + + var xaxis = d3.svg.axis() + .scale(xscale) + .orient("bottom"); + var yaxis = d3.svg.axis() + .scale(yscale) + .orient("left"); + + svg.append("g") + .attr("class", "x axis") + .attr("transform", "translate(0, " + height + ")") + .call(xaxis); + svg.append("g") + .attr("class", "y axis") + .call(yaxis) + .append("text") + .attr("transform", "rotate(-90)") + .attr("y", 6) + .attr("dy", ".71em") + .style("text-anchor", "end"); + + svg.selectAll("rect") + .data(data, key) + .enter() + .append("rect") + .attr("class", "bar") + .attr("x", function(d) { + return xscale(d.key); + }) + .attr("width", xscale.rangeBand()) + .attr("y", function(d) { + return yscale(d.value); + }) + .attr("height", function(d) { + return height - yscale(d.value); + }) + .attr("fill", function(d) { + return "#00ae18"; + }) + .on("mouseover", tip.show) + .on("mouseout", tip.hide) + + }); +}; + +function redraw() { + width = document.getElementById('yearchart').offsetWidth - 40 -30; + height = (width / 2) - 20 - 30; + d3.select('#yearchart').select('svg').remove(); + setup(width, height); +} + +var throttleTimer; +function throttle() { + window.clearTimeout(throttleTimer); + throttleTimer = window.setTimeout(function() { + redraw(); + }, 200); +}