Index: tools/telemetry/telemetry/web_components/ui/bar_chart.js |
diff --git a/tools/telemetry/telemetry/web_components/ui/bar_chart.js b/tools/telemetry/telemetry/web_components/ui/bar_chart.js |
deleted file mode 100644 |
index b8b0b794996cbc1e628c9b2e6052e9e82d6da72d..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/telemetry/web_components/ui/bar_chart.js |
+++ /dev/null |
@@ -1,180 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-'use strict'; |
- |
-tvcm.require('tvcm.range'); |
-tvcm.require('tracing.color_scheme'); |
-tvcm.require('telemetry.web_components.ui.d3'); |
-tvcm.require('telemetry.web_components.ui.chart_base'); |
- |
-tvcm.requireStylesheet('telemetry.web_components.ui.bar_chart'); |
- |
-tvcm.exportTo('telemetry.web_components.ui', function() { |
- var ChartBase = telemetry.web_components.ui.ChartBase; |
- var getColorOfKey = telemetry.web_components.ui.getColorOfKey; |
- |
- /** |
- * @constructor |
- */ |
- var BarChart = tvcm.ui.define('bar-chart', ChartBase); |
- |
- BarChart.prototype = { |
- __proto__: ChartBase.prototype, |
- |
- decorate: function() { |
- ChartBase.prototype.decorate.call(this); |
- this.classList.add('bar-chart'); |
- |
- this.xScale_ = undefined; |
- this.xSubScale_ = undefined; |
- this.yScale_ = undefined; |
- |
- this.data_ = undefined; |
- this.xLabelValues_ = undefined; |
- this.xLabelKey_ = undefined; |
- this.seriesKeys_ = undefined; |
- }, |
- |
- get data() { |
- return this.data_; |
- }, |
- |
- get xLabelKey() { |
- return this.xLabelKey_; |
- }, |
- |
- setDataAndXLabelKey: function(data, xLabelKey) { |
- if (data !== undefined) { |
- // Figure out what the series keys are. E.g. for {label: 'a', value1: 3, |
- // value2: 4} compute ['value1', 'value2']. |
- var seriesKeys = []; |
- d3.keys(data[0]).forEach(function(k) { |
- if (k == xLabelKey) |
- return; |
- seriesKeys.push(k); |
- }); |
- |
- // Figure out the x labels in the data set. E.g. from |
- // [{label: 'a', ...}, {label: 'b', ...}] |
- // we would commpute ['a', 'y']. |
- var xLabelValues = []; |
- var seenXLabelValues = {}; |
- data.forEach(function(d) { |
- var xLabelValue = d[xLabelKey]; |
- if (seenXLabelValues[xLabelValue]) |
- throw new Error('Label ' + xLabelValue + ' has been used already'); |
- xLabelValues.push(xLabelValue); |
- seenXLabelValues[xLabelValue] = true; |
- }, this); |
- this.xLabelKey_ = xLabelKey; |
- this.seriesKeys_ = seriesKeys; |
- this.xLabelValues_ = xLabelValues; |
- } else { |
- this.xLabelKey_ = undefined; |
- this.seriesKeys_ = undefined; |
- this.xLabelValues_ = undefined; |
- } |
- this.data_ = data; |
- this.updateContents_(); |
- }, |
- |
- getLegendKeys_: function() { |
- if (this.seriesKeys_ && |
- this.seriesKeys_.length > 1) |
- return this.seriesKeys_.slice(); |
- return []; |
- }, |
- |
- updateScales_: function(width, height) { |
- if (this.data_ === undefined) { |
- this.xScale_ = undefined; |
- this.xSubScale_ = undefined; |
- this.yScale_ = undefined; |
- return; |
- } |
- |
- // xScale maps x labels to a position in the overall timeline. |
- this.xScale_ = d3.scale.ordinal(); |
- this.xScale_.rangeRoundBands([0, width], .1); |
- this.xScale_.domain(this.xLabelValues_); |
- |
- // xSubScale maps an individual series to a position within its group |
- // of related bars. |
- this.xSubScale_ = d3.scale.ordinal(); |
- this.xSubScale_.domain(this.seriesKeys_) |
- .rangeRoundBands([0, this.xScale_.rangeBand()]); |
- |
- // Regular mapping of values to the full chart height. |
- var yRange = new tvcm.Range(); |
- this.data_.forEach(function(d) { |
- this.seriesKeys_.forEach(function(k) { |
- yRange.addValue(d[k]); |
- }, this); |
- }, this); |
- this.yScale_ = d3.scale.linear(); |
- this.yScale_.range([height, 0]); |
- |
- this.yScale_.domain([yRange.min, yRange.max]); |
- }, |
- |
- updateContents_: function() { |
- ChartBase.prototype.updateContents_.call(this); |
- if (!this.data_) |
- return; |
- |
- var width = this.chartAreaSize.width; |
- var height = this.chartAreaSize.height; |
- |
- var chartAreaSel = d3.select(this.chartAreaElement); |
- |
- // An index-group has the rects from the same array index in the source |
- // data set. |
- var indexGroupSel = chartAreaSel.selectAll('.index-group') |
- .data(this.data_); |
- indexGroupSel.enter().append('g') |
- .attr('class', '.index-group') |
- .attr('transform', function(d) { |
- var k = d[this.xLabelKey_]; |
- return 'translate(' + this.xScale_(k) + ',0)'; |
- }.bind(this)); |
- indexGroupSel.exit().remove(); |
- |
- // Within an index group, create a rect for each actual value. |
- var rectsSel = indexGroupSel.selectAll('rect') |
- .data(function(d) { |
- // 'd' is an index in the original array. We want to extract out the |
- // actual values from it from this.seriesKeys_. This we turn into |
- // {name: seriesKey, value: d[seriesKey]} objects that then get |
- // data-bound to each rect. |
- var values = []; |
- for (var i = 0; i < this.seriesKeys_.length; i++) { |
- var k = this.seriesKeys_[i]; |
- values.push({name: k, |
- value: d[k]}); |
- } |
- return values; |
- }.bind(this)); |
- |
- rectsSel.enter().append('rect') |
- .attr('width', this.xSubScale_.rangeBand()) |
- .attr('x', function(d) { |
- return this.xSubScale_(d.name); |
- }.bind(this)) |
- .attr('y', function(d) { |
- return this.yScale_(d.value); |
- }.bind(this)) |
- .attr('height', function(d) { |
- return height - this.yScale_(d.value); |
- }.bind(this)) |
- .style('fill', function(d) { |
- return getColorOfKey(d.name); |
- }); |
- } |
- }; |
- |
- return { |
- BarChart: BarChart |
- }; |
-}); |