blob: 886a5fe600348faa5b0048019a0b966504371bbc [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2015 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="/base/base.html">
<link rel="import" href="/ui/analysis/analysis_sub_view.html">
<link rel="import" href="/ui/base/dom_helpers.html">
<link rel="import" href="/ui/base/table.html">
<link rel="import" href="/ui/base/ui.html">
<polymer-element name="tr-ui-a-alert-sub-view"
extends="tr-ui-a-sub-view">
<template>
<style>
:host {
display: flex;
flex-direction: column;
}
#table {
flex: 1 1 auto;
align-self: stretch;
}
</style>
<tr-ui-b-table id="table">
</tr-ui-b-table>
</template>
<script>
'use strict';
Polymer({
ready: function() {
this.currentSelection_ = undefined;
this.$.table.tableColumns = [
{
title: 'Label',
value: function(row) { return row.name; },
width: '150px'
},
{
title: 'Value',
width: '100%',
value: function(row) { return row.value; }
}
];
this.$.table.showHeader = false;
},
get selection() {
return this.currentSelection_;
},
set selection(selection) {
this.currentSelection_ = selection;
this.updateContents_();
},
getRowsForSingleAlert_: function(alert) {
var rows = [];
// Arguments
for (var argName in alert.args) {
var argView =
document.createElement('tr-ui-a-generic-object-view');
argView.object = alert.args[argName];
rows.push({ name: argName, value: argView });
}
// Associated events
if (alert.associatedEvents.length) {
alert.associatedEvents.forEach(function(event, i) {
var linkEl = document.createElement('tr-ui-a-analysis-link');
linkEl.setSelectionAndContent(function() {
return event;
}, event.title);
var valueString = '';
if (event instanceof tr.model.TimedEvent)
valueString = 'took ' + event.duration.toFixed(2) + 'ms';
rows.push({
name: linkEl,
value: valueString
});
});
}
// Description
var descriptionEl = tr.ui.b.createDiv({
textContent: alert.info.description,
maxWidth: '300px'
});
rows.push({
name: 'Description',
value: descriptionEl
});
// Additional Reading Links
if (alert.info.docLinks) {
alert.info.docLinks.forEach(function(linkObject) {
var linkEl = document.createElement('a');
linkEl.target = '_blank';
linkEl.href = linkObject.href;
linkEl.textContent = linkObject.textContent;
rows.push({
name: linkObject.label,
value: linkEl
});
});
}
return rows;
},
getRowsForAlerts_: function(alerts) {
if (alerts.length == 1) {
var rows = [{
name: 'Alert',
value: alerts[0].title
}];
var detailRows = this.getRowsForSingleAlert_(alerts[0]);
rows.push.apply(rows, detailRows);
return rows;
} else {
return alerts.map(function(alert) {
return {
name: 'Alert',
value: alert.title,
isExpanded: alerts.size < 10, // This is somewhat arbitrary for now.
subRows: this.getRowsForSingleAlert_(alert)
};
}, this);
}
},
updateContents_: function() {
if (this.currentSelection_ === undefined) {
this.$.table.rows = [];
this.$.table.rebuild();
return;
}
var alerts = this.currentSelection_;
this.$.table.tableRows = this.getRowsForAlerts_(alerts);
this.$.table.rebuild();
},
get relatedEventsToHighlight() {
if (!this.currentSelection_)
return undefined;
return this.currentSelection_[0].associatedEvents;
}
});
</script>
</polymer-element>