| Index: tracing/tracing/ui/base/bar_chart.html
|
| diff --git a/tracing/tracing/ui/base/bar_chart.html b/tracing/tracing/ui/base/bar_chart.html
|
| deleted file mode 100644
|
| index 68b56e726b1d21291444a8ef02258cbd01b5170c..0000000000000000000000000000000000000000
|
| --- a/tracing/tracing/ui/base/bar_chart.html
|
| +++ /dev/null
|
| @@ -1,251 +0,0 @@
|
| -<!DOCTYPE html>
|
| -<!--
|
| -Copyright (c) 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.
|
| --->
|
| -
|
| -<link rel="import" href="/tracing/ui/base/chart_base_2d_brushable_x.html">
|
| -
|
| -<script>
|
| -'use strict';
|
| -
|
| -tr.exportTo('tr.ui.b', function() {
|
| - var ColorScheme = tr.b.ColorScheme;
|
| - var ChartBase2DBrushX = tr.ui.b.ChartBase2DBrushX;
|
| -
|
| - function getTextWidth(parentNode, text) {
|
| - var textNode = document.createElementNS(
|
| - 'http://www.w3.org/2000/svg', 'text');
|
| - textNode.setAttributeNS(null, 'x', 0);
|
| - textNode.setAttributeNS(null, 'y', 0);
|
| - textNode.setAttributeNS(null, 'fill', 'black');
|
| - textNode.appendChild(document.createTextNode(text));
|
| - parentNode.appendChild(textNode);
|
| - var widthPx = textNode.getComputedTextLength();
|
| - parentNode.removeChild(textNode);
|
| - return widthPx + 5;
|
| - }
|
| -
|
| - // @constructor
|
| - var BarChart = tr.ui.b.define('bar-chart', ChartBase2DBrushX);
|
| -
|
| - BarChart.prototype = {
|
| - __proto__: ChartBase2DBrushX.prototype,
|
| -
|
| - decorate: function() {
|
| - ChartBase2DBrushX.prototype.decorate.call(this);
|
| - Polymer.dom(this).classList.add('bar-chart');
|
| -
|
| - // BarChart allows bars to have arbitrary, non-uniform widths. Bars need
|
| - // not all be the same width. The width of each bar is automatically
|
| - // computed from the bar's x-coordinate and that of the next bar, which
|
| - // can not define the width of the last bar. This is the width (in the
|
| - // xScale's domain (as opposed to the xScale's range (which is measured in
|
| - // pixels))) of the last bar. When there are at least 2 bars, this is
|
| - // computed as the average width of the bars. When there is a single bar,
|
| - // this must default to a non-zero number so that the width of the only
|
| - // bar will not be zero.
|
| - this.xCushion_ = 1;
|
| -
|
| - this.isStacked_ = false;
|
| - },
|
| -
|
| - set isStacked(stacked) {
|
| - this.isStacked_ = true;
|
| - this.updateContents_();
|
| - },
|
| -
|
| - get isStacked() {
|
| - return this.isStacked_;
|
| - },
|
| -
|
| - isDatumFieldSeries_: function(fieldName) {
|
| - return fieldName != 'x';
|
| - },
|
| -
|
| - getXForDatum_: function(datum, index) {
|
| - return datum.x;
|
| - },
|
| -
|
| - updateScales_: function() {
|
| - if (this.data_.length === 0)
|
| - return;
|
| -
|
| - var xDifferences = 0;
|
| - var currentX = undefined;
|
| - var previousX = undefined;
|
| - var yRange = new tr.b.Range();
|
| - this.data_.forEach(function(datum, index) {
|
| - previousX = currentX;
|
| - currentX = this.getXForDatum_(datum, index);
|
| - if (previousX !== undefined) {
|
| - xDifferences += currentX - previousX;
|
| - }
|
| -
|
| - for (var [key, series] of this.seriesByKey_) {
|
| - // Allow for sparse data
|
| - if (datum[key] !== undefined)
|
| - yRange.addValue(datum[key]);
|
| - }
|
| - }, this);
|
| -
|
| - // X.
|
| - // Leave a cushion on the right so that the last rect doesn't
|
| - // exceed the chart boundaries. The last rect's width is set to the
|
| - // average width of the rects, which is chart.width / data.length.
|
| - var width = this.chartAreaSize.width;
|
| - this.xScale_.range([0, width]);
|
| - var domain = d3.extent(this.data_, this.getXForDatum_.bind(this));
|
| - if (this.data_.length > 1)
|
| - this.xCushion_ = xDifferences / (this.data_.length - 1);
|
| - this.xScale_.domain([domain[0], domain[1] + this.xCushion_]);
|
| -
|
| - // Y.
|
| - this.yScale_.range([this.chartAreaSize.height, 0]);
|
| - this.yScale_.domain(this.getYScaleDomain_(yRange.min, yRange.max));
|
| - },
|
| -
|
| - getYScaleDomain_: function(minValue, maxValue) {
|
| - if (!this.isStacked) {
|
| - return ChartBase2DBrushX.prototype.getYScaleDomain_.call(
|
| - this, minValue, maxValue);
|
| - }
|
| -
|
| - var range = new tr.b.Range();
|
| - range.addValue(0);
|
| - this.data_.forEach(function(datum, index) {
|
| - var sum = 0;
|
| - for (var [key, series] of this.seriesByKey_) {
|
| - if (datum[key] === undefined)
|
| - continue;
|
| - sum += datum[key];
|
| - }
|
| - range.addValue(sum);
|
| - }, this);
|
| - return [range.min, range.max];
|
| - },
|
| -
|
| - getStackedRectsForDatum_: function(datum, index) {
|
| - var stacks = [];
|
| - var bottom = this.yScale_.range()[0];
|
| - var sum = 0;
|
| - for (var [key, series] of this.seriesByKey_) {
|
| - if (datum[key] === undefined || !this.isSeriesEnabled(key))
|
| - continue;
|
| - sum += datum[key];
|
| - var heightPx = bottom - this.yScale_(sum);
|
| - bottom -= heightPx;
|
| - stacks.push({
|
| - key: key,
|
| - value: datum[key],
|
| - color: this.getDataSeries(key).color,
|
| - heightPx: heightPx,
|
| - topPx: bottom
|
| - });
|
| - }
|
| - return stacks;
|
| - },
|
| -
|
| - getRectsForDatum_: function(datum, index) {
|
| - if (this.isStacked)
|
| - return this.getStackedRectsForDatum_(datum, index);
|
| -
|
| - var stacks = [];
|
| - for (var [key, series] of this.seriesByKey_) {
|
| - if (datum[key] === undefined || !this.isSeriesEnabled(key))
|
| - continue;
|
| - var topPx = this.yScale_(Math.max(datum[key], this.getYScaleMin_()));
|
| - stacks.push({
|
| - key: key,
|
| - value: datum[key],
|
| - topPx: topPx,
|
| - heightPx: this.yScale_.range()[0] - topPx,
|
| - color: this.getDataSeries(key).color
|
| - });
|
| - }
|
| - stacks.sort(function(a, b) {
|
| - return b.topPx - a.topPx;
|
| - });
|
| - return stacks;
|
| - },
|
| -
|
| - updateDataContents_: function(dataSel) {
|
| - dataSel.selectAll('*').remove();
|
| - var chartAreaSel = d3.select(this.chartAreaElement);
|
| - var seriesKeys = [...this.seriesByKey_.keys()];
|
| - var rectsSel = dataSel.selectAll('path').data(seriesKeys);
|
| - this.data_.forEach(function(datum, index) {
|
| - var currentX = this.getXForDatum_(datum, index);
|
| - var width = undefined;
|
| - if (index < (this.data_.length - 1)) {
|
| - var nextX = this.getXForDatum_(this.data_[index + 1], index + 1);
|
| - width = nextX - currentX;
|
| - } else {
|
| - width = this.xCushion_;
|
| - }
|
| - this.getRectsForDatum_(datum, index).forEach(function(rect) {
|
| - var leftPx = this.xScale_(currentX);
|
| - var rightPx = this.xScale_(currentX + width);
|
| - var widthPx = rightPx - leftPx;
|
| - rectsSel.enter()
|
| - .append('rect')
|
| - .attr('fill', rect.color)
|
| - .attr('x', leftPx)
|
| - .attr('y', rect.topPx)
|
| - .attr('width', widthPx)
|
| - .attr('height', rect.heightPx)
|
| - .on('mouseenter', function() {
|
| - chartAreaSel.selectAll('.hover').remove();
|
| - var keyWidthPx = 0;
|
| - var keyHeightPx = 0;
|
| - if (seriesKeys.length > 1) {
|
| - keyWidthPx = getTextWidth(this.chartAreaElement, rect.key);
|
| - keyHeightPx = 12;
|
| - }
|
| - var valueWidthPx = getTextWidth(
|
| - this.chartAreaElement, rect.value);
|
| - var valueHeightPx = 12;
|
| - var hoverLeftPx = leftPx + (widthPx / 2);
|
| -
|
| - chartAreaSel
|
| - .append('rect')
|
| - .attr('class', 'hover')
|
| - .attr('fill', 'white')
|
| - .attr('x', hoverLeftPx)
|
| - .attr('y', rect.topPx)
|
| - .attr('width', Math.max(keyWidthPx, valueWidthPx))
|
| - .attr('height', keyHeightPx + valueHeightPx);
|
| -
|
| - if (seriesKeys.length > 1) {
|
| - chartAreaSel
|
| - .append('text')
|
| - .attr('class', 'hover')
|
| - .attr('fill', rect.color)
|
| - .attr('x', hoverLeftPx + 2)
|
| - .attr('y', rect.topPx + keyHeightPx - 2)
|
| - .text(rect.key);
|
| - }
|
| -
|
| - chartAreaSel
|
| - .append('text')
|
| - .attr('class', 'hover')
|
| - .attr('fill', rect.color)
|
| - .attr('x', hoverLeftPx + 2)
|
| - .attr('y', rect.topPx + keyHeightPx + valueHeightPx - 2)
|
| - .text(rect.value);
|
| - }.bind(this))
|
| - .on('mouseleave', function() {
|
| - chartAreaSel.selectAll('.hover').remove();
|
| - }.bind(this));
|
| - }, this);
|
| - }, this);
|
| - rectsSel.exit().remove();
|
| - }
|
| - };
|
| -
|
| - return {
|
| - BarChart: BarChart
|
| - };
|
| -});
|
| -</script>
|
|
|