summaryrefslogtreecommitdiff
path: root/chromium/third_party/catapult/tracing/tracing/ui/base/grouping_table.html
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/catapult/tracing/tracing/ui/base/grouping_table.html')
-rw-r--r--chromium/third_party/catapult/tracing/tracing/ui/base/grouping_table.html229
1 files changed, 229 insertions, 0 deletions
diff --git a/chromium/third_party/catapult/tracing/tracing/ui/base/grouping_table.html b/chromium/third_party/catapult/tracing/tracing/ui/base/grouping_table.html
new file mode 100644
index 00000000000..942d83f9542
--- /dev/null
+++ b/chromium/third_party/catapult/tracing/tracing/ui/base/grouping_table.html
@@ -0,0 +1,229 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2016 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/table.html">
+
+<dom-module id='tr-ui-b-grouping-table'>
+ <template>
+ <style>
+ :host {
+ display: flex;
+ }
+ #table {
+ flex: 1 1 auto;
+ font-size: 12px;
+ }
+ </style>
+ <tr-ui-b-table id="table"></tr-ui-b-table>
+ </template>
+</dom-module>
+<script>
+'use strict';
+
+tr.exportTo('tr.ui.b', function() {
+ function Row(title, data, groupingKeyFuncs, rowStatsConstructor) {
+ this.title = title;
+ this.data_ = data;
+ if (groupingKeyFuncs === undefined) {
+ groupingKeyFuncs = [];
+ }
+ this.groupingKeyFuncs_ = groupingKeyFuncs;
+ this.rowStatsConstructor_ = rowStatsConstructor;
+
+ this.subRowsBuilt_ = false;
+ this.subRows_ = undefined;
+
+ this.rowStats_ = undefined;
+ }
+
+ Row.prototype = {
+ getCurrentGroupingKeyFunc_() {
+ if (this.groupingKeyFuncs_.length === 0) return undefined;
+ return this.groupingKeyFuncs_[0];
+ },
+
+ get data() {
+ return this.data_;
+ },
+
+ get rowStats() {
+ if (this.rowStats_ === undefined) {
+ this.rowStats_ = new this.rowStatsConstructor_(this);
+ }
+ return this.rowStats_;
+ },
+
+ rebuildSubRowsIfNeeded_() {
+ if (this.subRowsBuilt_) return;
+ this.subRowsBuilt_ = true;
+
+ const groupingKeyFunc = this.getCurrentGroupingKeyFunc_();
+ if (groupingKeyFunc === undefined) {
+ this.subRows_ = undefined;
+ return;
+ }
+
+ const dataByKey = {};
+ let hasValues = false;
+ this.data_.forEach(function(datum) {
+ const key = groupingKeyFunc(datum);
+ hasValues = hasValues || (key !== undefined);
+ if (dataByKey[key] === undefined) {
+ dataByKey[key] = [];
+ }
+ dataByKey[key].push(datum);
+ });
+ if (!hasValues) {
+ this.subRows_ = undefined;
+ return;
+ }
+
+ this.subRows_ = [];
+ for (const key in dataByKey) {
+ const row = new Row(key,
+ dataByKey[key],
+ this.groupingKeyFuncs_.slice(1),
+ this.rowStatsConstructor_);
+ this.subRows_.push(row);
+ }
+ },
+
+ get isExpanded() {
+ return (this.subRows &&
+ (this.subRows.length > 0) &&
+ (this.subRows.length < 5));
+ },
+
+ get subRows() {
+ this.rebuildSubRowsIfNeeded_();
+ return this.subRows_;
+ }
+ };
+
+ Polymer({
+ is: 'tr-ui-b-grouping-table',
+
+ created() {
+ this.dataToGroup_ = undefined;
+ this.groupBy_ = undefined;
+ this.rowStatsConstructor_ = undefined;
+ },
+
+ get tableColumns() {
+ return this.$.table.tableColumns;
+ },
+
+ set tableColumns(tableColumns) {
+ this.$.table.tableColumns = tableColumns;
+ },
+
+ get tableRows() {
+ return this.$.table.tableRows;
+ },
+
+ get sortColumnIndex() {
+ return this.$.table.sortColumnIndex;
+ },
+
+ set sortColumnIndex(sortColumnIndex) {
+ this.$.table.sortColumnIndex = sortColumnIndex;
+ },
+
+ get sortDescending() {
+ return this.$.table.sortDescending;
+ },
+
+ set sortDescending(sortDescending) {
+ this.$.table.sortDescending = sortDescending;
+ },
+
+ get selectionMode() {
+ return this.$.table.selectionMode;
+ },
+
+ set selectionMode(selectionMode) {
+ this.$.table.selectionMode = selectionMode;
+ },
+
+ get rowHighlightStyle() {
+ return this.$.table.rowHighlightStyle;
+ },
+
+ set rowHighlightStyle(rowHighlightStyle) {
+ this.$.table.rowHighlightStyle = rowHighlightStyle;
+ },
+
+ get cellHighlightStyle() {
+ return this.$.table.cellHighlightStyle;
+ },
+
+ set cellHighlightStyle(cellHighlightStyle) {
+ this.$.table.cellHighlightStyle = cellHighlightStyle;
+ },
+
+ get selectedColumnIndex() {
+ return this.$.table.selectedColumnIndex;
+ },
+
+ set selectedColumnIndex(selectedColumnIndex) {
+ this.$.table.selectedColumnIndex = selectedColumnIndex;
+ },
+
+ get selectedTableRow() {
+ return this.$.table.selectedTableRow;
+ },
+
+ set selectedTableRow(selectedTableRow) {
+ this.$.table.selectedTableRow = selectedTableRow;
+ },
+
+ get groupBy() {
+ return this.groupBy_;
+ },
+
+ set groupBy(groupBy) {
+ this.groupBy_ = groupBy;
+ this.updateContents_();
+ },
+
+ get dataToGroup() {
+ return this.dataToGroup_;
+ },
+
+ set dataToGroup(dataToGroup) {
+ this.dataToGroup_ = dataToGroup;
+ this.updateContents_();
+ },
+
+ get rowStatsConstructor() {
+ return this.rowStatsConstructor_;
+ },
+
+ set rowStatsConstructor(rowStatsConstructor) {
+ this.rowStatsConstructor_ = rowStatsConstructor;
+ this.updateContents_();
+ },
+
+ rebuild() {
+ this.$.table.rebuild();
+ },
+
+ updateContents_() {
+ const groupBy = this.groupBy_ || [];
+ const dataToGroup = this.dataToGroup_ || [];
+ const rowStatsConstructor = this.rowStatsConstructor_ || function() {};
+
+ const superRow = new Row('', dataToGroup, groupBy,
+ rowStatsConstructor);
+ this.$.table.tableRows = superRow.subRows || [];
+ }
+ });
+
+ return {
+ };
+});
+</script>