blob: 84aab1705075e9ea1198104959df33676f699ee7 [file] [log] [blame]
<!--
The res/js/status.js file must be included before this file.
This in an HTML Import-able file that contains the definition
of the following elements:
<commits-table-sk>
This element renders the status table. It includes a UI to filter the table by task spec group
(e.g. Interesting, Comments, etc), a UI to type in a search term to filter the task specs by, and
a way to change if the author name or commit subject should be displayed. It is important
to note that the filtering of the data does not happen here, it happens in commits-data-sk.
To use this file import it:
<link href="/res/imp/commits-table-sk.html" rel="import" />
Usage:
<commits-table-sk></commits-table-sk>
Properties:
// inputs
task_details: Object, a map of commit hash to an object that has the task results by task spec.
task_specs: Object, a map of the task spec names to an object that has, among other things, category, subcategory, comments and master.
tasks: Object, a map of the task spec names to an object that maps task numbers to task results.
categories: Object, a map of the task spec categories to an object that has the subcategories and the colspan (total number of included task specs).
category_list: Array<String>, an array of the task spec category names.
commits: Array<Object>, the commit objects, in chronological detail.
commits_map: Object, a map of commit hash to commit objects.
logged_in: Boolean, if the links should be for internal or external pages.
relanded_map: Object, a map of a commit hash that was relanded to the commit hash that relands it.
repo: String, the current repo. Used to direct comments to the right place.
repo_base: The base URL for commits. Commit hashes will be appended to this.
reverted_map: Object, a map of a commit hash that was reverted to the commit hash that relands it.
swarming_url: String, the URL of the Swarming server.
task_scheduler_url: String, the URL of the Task Scheduler.
// outputs
commit_label: String, "author" or "subject", which indicates what info should be displayed about a commit.
drawing: Boolean, if the table is being drawn.
filter: String, the task spec filter to be used.
search: String, the string to be used if filter is "search".
Methods:
None.
Events:
None.
-->
<link rel="import" href="/res/imp/bower_components/iron-icons/iron-icons.html">
<link rel="import" href="/res/imp/bower_components/iron-icons/communication-icons.html">
<link rel="import" href="/res/imp/bower_components/iron-icons/image-icons.html">
<link rel="import" href="/res/imp/bower_components/paper-button/paper-button.html">
<link rel="import" href="/res/imp/bower_components/paper-dialog/paper-dialog.html">
<link rel="import" href="/res/imp/bower_components/paper-input/paper-input.html">
<link rel="import" href="/res/imp/bower_components/paper-radio-group/paper-radio-group.html">
<link rel="import" href="/res/imp/bower_components/paper-radio-button/paper-radio-button.html">
<link rel="import" href="/res/common/imp/confirm-dialog-sk.html">
<link rel="import" href="commits-table-d3-sk.html">
<dom-module id="commits-table-sk">
<template>
<style include="iron-flex iron-flex-alignment iron-positioning">
.filters{
font-size: .75em;
height: 50px;
min-width: 950px;
max-width: 1250px;
}
div.tooltip {
padding-right: 12px;
display:inline-block;
}
#taskSpecTextFilter {
max-width:144px;
display:inline-block;
--paper-input-container-label: {
font-size:0.75em;
};
}
/* Depending on if the subject or author is being shown, we may need more or less space.*/
#filterSelector.near {
margin-left: 40px;
}
#filterSelector.far {
margin-left: 380px;
}
.helpicon {
width: 12px;
height: 12px;
vertical-align: top;
}
paper-radio-group {
--paper-radio-group-item-padding: 2px;
}
:host {
/* prevent the comments-sk from making the popup super wide or super narrow*/
--comments-sk-style: {
max-width: 1200px;
min-width: 300px;
};
}
a.nodecorate {
color: #000000;
text-decoration: none;
}
</style>
<confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
<div>
<div id="filterWrapper">
<div class="filters horizontal layout center">
<paper-radio-group id="commitLabelSelector" selected="{{commit_label}}">
<template is="dom-repeat" items="{{_commit_labels}}" as="label">
<paper-radio-button name="{{label}}">{{_getPrettyCommitLabel(label)}}</paper-radio-button><br/>
</template>
</paper-radio-group>
<paper-radio-group id="filterSelector" class$="{{_getLeftAlign(commit_label)}} horizontal layout center" selected="{{filter}}">
<template is="dom-repeat" items="{{_short_filters}}" as="filter">
<paper-radio-button name="{{filter}}">{{_getPrettyFilterLabel(filter)}}</paper-radio-button>
<div class="tooltip" title$="{{_getPrettyFilterText(filter)}}">
<iron-icon icon="icons:help" class="helpicon"></iron-icon>
</div>
</template>
<paper-radio-button name="search"></paper-radio-button>
</paper-radio-group>
<paper-input
id="taskSpecTextFilter"
value="{{_searchVal}}"
label="Filter task spec"
on-change="_setFilterToSearch"
no-label-float>
</paper-input>
<div class="tooltip" title$="{{_getPrettyFilterText('search')}}">
<iron-icon icon="icons:help" class="helpicon"></iron-icon>
</div>
<a href$="{{_trigger_job_url}}" target="_blank" class="nodecorate" rel="noopener">
<paper-button raised>
<iron-icon icon="icons:add"></iron-icon>
Trigger a Job
</paper-button>
</a>
<a href$="{{_rerun_purple_url}}" target="_blank" class="nodecorate" rel="noopener">
<paper-button raised>
<iron-icon icon="icons:autorenew"></iron-icon>
Re-Run Purple Jobs
</paper-button>
</a>
</div>
</div>
<commits-table-d3-sk
task_specs="[[task_specs]]"
tasks="[[tasks]]"
categories="[[categories]]"
category_list="[[category_list]]"
task_details="[[task_details]]"
commit_label="[[commit_label]]"
commits="[[commits]]"
commits_map="[[commits_map]]"
logged_in="[[logged_in]]"
relanded_map="[[relanded_map]]"
repo="[[repo]]"
repo_base="[[repo_base]]"
reverted_map="[[reverted_map]]"
swarming_url="[[swarming_url]]"
task_scheduler_url="[[task_scheduler_url]]"
time_points="[[time_points]]"
drawing="{{drawing}}">
</commits-table-d3-sk>
</div>
</template>
<script>
(function(){
var PRETTY_COMMIT_LABELS = {
"author": "Author",
"subject": "Subject",
};
var PRETTY_FILTER_LABELS = {
"interesting": ["Interesting", "Bots which have both successes and failures within the visible commit window."],
"failures": ["Failures", "Bots which have failures within the visible commit window."],
"comments": ["Comments", "Bots which have comments."],
"nocomment": ["Failing w/o comment", "Bots which have failures within the visible commit window but have no comments."],
"all": ["All", "Display all bots."],
"search": [" ", "Enter a search string. Substrings and regular expressions may be used, per the Javascript String match() rules."],
};
Polymer({
is: "commits-table-sk",
properties: {
// inputs from data source to render.
task_specs: {
type: Object,
},
categories: {
type: Object,
},
category_list: {
type: Array,
},
task_details: {
type: Object,
},
tasks: {
type: Object,
},
commits: {
type: Array,
},
commits_map: {
type: Object,
},
logged_in: {
type: Boolean,
},
purple_tasks: {
type: Array,
},
relanded_map: {
type: Object,
},
repo: {
type: String,
},
repo_base: {
type: String,
},
reverted_map: {
type: Object,
},
swarming_url: {
type: String,
},
task_scheduler_url: {
type: String,
},
time_points: {
type: Object,
},
// outputs (from UI elements)
commit_label: {
type: String,
notify:true,
},
drawing: {
type: Boolean,
notify: true,
},
filter: {
type: String,
notify: true,
},
search: {
type: String,
notify:true,
},
// private
_commit_labels: {
type: Array,
value: function(){
return ["author", "subject"];
}
},
_rerun_purple_url: {
type: String,
computed: "_getRerunJobsUrl(task_scheduler_url, purple_tasks)",
},
_searchVal: {
type: String,
value: "",
},
_short_filters: {
type: Array,
value: function(){
// "search" is omitted because it is drawn seperately, being a paper-input and all.
return ["interesting","failures","comments","nocomment","all"];
}
},
_trigger_job_url: {
type: String,
computed: "_getTriggerJobUrl(task_scheduler_url)",
},
_triggered_jobs: {
type: Array,
value: function() {
return [];
},
},
},
_getPrettyCommitLabel: function(key) {
return PRETTY_COMMIT_LABELS[key];
},
_getPrettyFilterLabel: function(key) {
// index 0 is the short name, index 1 is the description
return PRETTY_FILTER_LABELS[key][0];
},
_getPrettyFilterText: function(key) {
// index 0 is the short name, index 1 is the description
return PRETTY_FILTER_LABELS[key][1];
},
_getTriggerJobUrl: function() {
return this.task_scheduler_url + "/trigger";
},
_getRerunJobsUrl: function() {
var url = this.task_scheduler_url + "/trigger";
for (var i = 0; i < this.purple_tasks.length; i++) {
var sep = "&";
if (i === 0) {
sep = "?";
}
var t = this.purple_tasks[i];
url += sep + "job=" + t.name + "@" + t.commit;
}
return url;
},
_setFilterToSearch: function() {
this.set("filter", "search");
this.set("search", this._searchVal);
},
_getLeftAlign: function(commit_label) {
if (commit_label == "author") {
return "near";
}
return "far";
}
});
})()
</script>
</dom-module