123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import Ember from 'ember';
- export default Ember.Component.extend({
- chart: undefined,
- tooltip : undefined,
- colors: d3.scale.category10().range(),
- initChart: function() {
- this.chart = {
- svg: undefined,
- g: undefined,
- h: 0,
- w: 0,
- tooltip: undefined
- };
- // Init tooltip if it is not initialized
- this.tooltip = d3.select("#chart-tooltip");
- if (!this.tooltip) {
- this.tooltip = d3.select("body")
- .append("div")
- .attr("class", "tooltip")
- .attr("id", "chart-tooltip")
- .style("opacity", 0);
- }
- // Init svg
- var svg = this.chart.svg;
- if (svg) {
- svg.remove();
- }
- var parentId = this.get("parentId");
- var parent = d3.select("#" + parentId);
- var bbox = parent.node().getBoundingClientRect();
- this.chart.w = bbox.width - 30;
- var ratio = 0.75; // 4:3 by default
- if (this.get("ratio")) {
- ratio = this.get("ratio");
- }
- this.chart.h = bbox.width * ratio;
- if (this.get("maxHeight")) {
- this.chart.h = Math.min(this.get("maxHeight"), this.chart.h);
- }
- this.chart.svg = parent.append("svg")
- .attr("width", this.chart.w)
- .attr("height", this.chart.h);
- this.chart.g = this.chart.svg.append("g");
- },
- renderTitleAndBG: function(g, title, layout) {
- var bg = g.append("g");
- bg.append("text")
- .text(title)
- .attr("x", (layout.x1 + layout.x2) / 2)
- .attr("y", layout.y1 + layout.margin + 20)
- .attr("class", "chart-title");
- bg.append("rect")
- .attr("x", layout.x1)
- .attr("y", layout.y1)
- .attr("width", layout.x2 - layout.x1)
- .attr("height", layout.y2 - layout.y1)
- .attr("class", "chart-frame");
- },
- bindTooltip: function(d) {
- d.on("mouseover", function(d) {
- this.tooltip
- .style("left", (d3.event.pageX) + "px")
- .style("top", (d3.event.pageY - 28) + "px");
- }.bind(this))
- .on("mousemove", function(d) {
- // Handle pie chart case
- var data = d;
- if (d.data) {
- data = d.data;
- }
- this.tooltip.style("opacity", .9);
- this.tooltip.html(data.label + " = " + data.value)
- .style("left", (d3.event.pageX) + "px")
- .style("top", (d3.event.pageY - 28) + "px");
- }.bind(this))
- .on("mouseout", function(d) {
- this.tooltip.style("opacity", 0);
- }.bind(this));
- },
- getLayout: function() {
- var x1 = 0;
- var y1 = 0;
- var x2 = this.chart.w;
- var y2 = this.chart.h;
- var layout = {
- x1: x1,
- y1: y1,
- x2: x2 - 10,
- y2: y2 - 10,
- margin: 10
- };
- return layout;
- },
- });
|