blob: ea1cfbbb46b8df6ff70eb2132cd0be2fbdfcf8e4 [file] [log] [blame]
<!--
Renders a list of code review issues that have trybot runs associated with them.
Attributes:
None
Methods:
pageSelected(ctx) - Called by the router when the view becomes visible.
ctx is the context provided in the route dispatch of page.js.
pageDeselected - Called by the router when the view is no longer visible.
Events:
None
Mailboxes:
None
-->
<link rel="import" href="bower_components/polymer/polymer.html">
<link rel="import" href="bower_components/paper-button/paper-button.html">
<link rel="import" href="bower_components/iron-icons/iron-icons.html">
<link rel="import" href="bower_components/iron-icons/image-icons.html">
<link rel="import" href="../common/imp/paging.html">
<link rel="import" href="activity-sk.html">
<link rel="import" href="shared-styles.html">
<dom-module id="trybot-page-sk">
<template>
<style include="shared-styles">
.nameHeader,
.issueHeader,
.dateTimeHeader,
.subjectHeader,
.patchsetHeader {
font-weight: bold;
}
.nameHeader,
.nameValue {
width: 8em;
}
.dateTimeHeader,
.dateTimeValue {
width: 12em;
}
.subjectHeader,
.subjectValue {
min-width: 15em;
max-width: 35em;
}
.issueHeader,
.issueValue {
width: 6em;
}
.patchsetHeader,
.patchsetValue {
width: 7em;
}
.headerContainer {
padding-top: 2em;
}
tr.rowEntry:hover td {background:#DDDDDD}
</style>
<activity-sk id="activityTrybot" busy="{{_hideAll}}"></activity-sk>
<div hidden$="{{_hideAll}}">
<paging-sk id="trybotPagination" pagination="{{_pagination}}"></paging-sk>
<table class="headerContainer" hidden$="_">
<thead>
<tr>
<td class="issueHeader">Issue</td>
<td class="patchsetHeader">Results<br>Up To</td>
<td class="nameHeader">Owner</td>
<td class="dateTimeHeader">Updated</td>
<td class="subjectHeader">Subject</td>
</tr>
<template is="dom-repeat" items="{{_trybotEntries}}">
<tr class="rowEntry">
<td class="issueValue"><a target="_blank" title="See codereview in a new window" href$="{{item.url}}">{{item.id}}</a></td>
<td class="patchsetValue">
<a title$="Results up to Patchset {{item.patchsets.length}}"
href$="/search?issue={{item.id}}&unt=true&query={{_queryStr}}&master=false">
Patchset <span>{{item.patchsets.length}}</span>
</a>
</td>
<td class="nameValue">{{item.owner}}</td>
<td class="dateTimeValue">{{_humanDiffDate(item.updated)}}</td>
<td class="subjectValue">{{item.subject}}</td>
</tr>
</template>
</thead>
</table>
</div>
</template>
<script>
Polymer({
is: "trybot-page-sk",
behaviors: [gold.PageStateBehavior],
properties: {
_pagination: {
type: Object,
value: function() { return sk.object.shallowCopy(gold.defaultPagination); }
}
},
ready: function() {
this.listen(this.$.trybotPagination, 'pagechange', '_stateChanged');
this._setDefaultState(gold.defaultPaginationState, false);
},
pageSelected: function(ctx) {
this._initState(ctx, this._getDefaultStateWithCorpus());
this._load();
},
pageDeselected: function() {
// This function is called by the router in gold-app-sk for all top level views.
},
_stateChanged: function(ev) {
// We only need pagination here, because the toggle writes directly to state.
this._redirectToState(this._pagination);
},
// Load the listing.
_load: function() {
var q = window.location.search;
this.$.activityTrybot.startSpinner("Loading ...");
sk.get("/json/tryjob"+q).then(JSON.parse).then(function (json) {
this._trybotEntries = json.data;
this._replaceState(json.pagination);
this.set('_pagination', json.pagination);
this.$.activityTrybot.stopSpinner();
}.bind(this)).catch(function(e) {
sk.errorMessage(e);
this.$.activityTrybot.stopSpinner();
}.bind(this));
},
_humanDiffDate: function (timeStampMs) {
return sk.human.diffDate(timeStampMs);
}
});
</script>
</dom-module>