[gold] Add corpus selector into search-controls
It now gets data from /paramset, which means it will
have up-to-date data for tryjobs.
I'll be glad when we can port this to lit-html.
Bug: skia:9879
Change-Id: I4d08b889f120cd579466790a44df62678f939fa9
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/290021
Reviewed-by: Leandro Lovisolo <lovisolo@google.com>
diff --git a/golden/frontend/res/imp/search-controls-sk.html b/golden/frontend/res/imp/search-controls-sk.html
index d5458bd..6371079 100644
--- a/golden/frontend/res/imp/search-controls-sk.html
+++ b/golden/frontend/res/imp/search-controls-sk.html
@@ -7,7 +7,7 @@
and send an update to the host element to reload data based
on the new query state.
- The state object contains these fiels:
+ The state object contains these fields:
- pos: show positive (boolean).
- neg: show negative (boolean).
- unt: show untriaged (boolean).
@@ -18,7 +18,6 @@
Attributes:
state - The current query state.
- orientation - Orientation of the controls. Values: 'horizontal', 'vertical'
disabled - Boolean to indicate whether to disable all the controls.
beta - Boolean to enable beta-level functions.
@@ -55,56 +54,49 @@
<template>
<style include="iron-flex iron-flex-alignment"></style>
<style include="shared-styles">
- .horizontalTopControl, .verticalTopControl {
+ .horizontalTopControl {
font-weight: bold;
}
- .verticalTopControl {
- margin: 0 0 1em 0;
- }
-
.horizontalTopControl {
margin: 0 2em 0 0;
}
- .buttonContainer {
- width: 8em;
- }
-
- .buttonContainer.verticalTopControl {
- margin-top: 2em;
- }
-
.horizontal.currSelection {
margin-left: 1em;
margin-right: 3em;
max-width: 20em;
}
- .vertical.currSelection {
- padding-top: 1em;
- max-width: 10em;
+ .corpus_label {
+ font-weight: bold;
+ margin: auto 0;
}
- </style>
- <div class$="[[orientation]] layout">
- <paper-toggle-button class$="{{_tcClass(orientation)}}" checked="{{state.pos}}" disabled={{disabled}}>Positive</paper-toggle-button>
- <paper-toggle-button class$="{{_tcClass(orientation)}}" checked="{{state.neg}}" disabled={{disabled}}>Negative</paper-toggle-button>
- <paper-toggle-button class$="{{_tcClass(orientation)}}" checked="{{state.unt}}" disabled={{disabled}}>Untriaged</paper-toggle-button>
- <paper-toggle-button class$="{{_tcClass(orientation)}}" checked="{{state.head}}" disabled={{disabled}}>Head</paper-toggle-button>
- <paper-toggle-button class$="{{_tcClass(orientation)}}" checked="{{state.include}}" disabled={{disabled}}>Ignored</paper-toggle-button>
- <div class="buttonContainer">
- <paper-button id="searchButton" class$="topControl" raised disabled="[[disabled]]"
- title="Filter Traces"><iron-icon icon="image:tune"></iron-icon></paper-button>
- </div>
- <!-- TODO(stephana): Enable filter button when backend is ready -->
- <div class$="{{_tcClass(orientation)}} buttonContainer">
+ </style>
+ <div class="vertical layout">
+ <div class="horizontal layout">
+ <paper-toggle-button class="horizontalTopControl" checked="{{state.pos}}" disabled={{disabled}}>Positive</paper-toggle-button>
+ <paper-toggle-button class="horizontalTopControl" checked="{{state.neg}}" disabled={{disabled}}>Negative</paper-toggle-button>
+ <paper-toggle-button class="horizontalTopControl" checked="{{state.unt}}" disabled={{disabled}}>Untriaged</paper-toggle-button>
+ <paper-toggle-button class="horizontalTopControl" checked="{{state.head}}" disabled={{disabled}}>Head</paper-toggle-button>
+ <paper-toggle-button class="horizontalTopControl" checked="{{state.include}}" disabled={{disabled}}>Ignored</paper-toggle-button>
+
<paper-button id="filterButton" class$="topControl" raised disabled="[[disabled]]"
title="Metrics Filter"><iron-icon icon="icons:filter-list"></iron-icon>
</paper-button>
</div>
- <div class$="[[orientation]] currSelection">
- [[_splitAmp(state.query, orientation)]]
+ <div class="horizontal layout">
+ <span class=corpus_label>Corpus:</span>
+ <corpus-selector-sk id="corpusSelector"></corpus-selector-sk>
+ </div>
+ <div class="horizontal layout">
+ <paper-button id="searchButton" class$="topControl" raised disabled="[[disabled]]"
+ title="Filter Traces"><iron-icon icon="image:tune"></iron-icon></paper-button>
+
+ <div class="horizontal currSelection">
+ [[_splitAmp(state.query)]]
+ </div>
</div>
</div>
@@ -121,11 +113,6 @@
type: Object
},
- orientation: {
- type: String,
- value: "horizontal"
- },
-
disabled: {
type: Boolean,
value: false
@@ -146,6 +133,7 @@
this.listen(this.$.filterButton, 'tap', '_handleFilterButton');
this.listen(this.$.queryDialog, 'edit', '_handleQueryEdit');
this.listen(this.$.filterDialog, 'edit', '_handleFilterEdit');
+ this.listen(this.$.corpusSelector, 'corpus_selected', '_handleCorpusChange');
// If the corpus changes make sure we do cleanup work.
this.async(function() {
@@ -160,11 +148,26 @@
this._noFire = !fireEvent;
this.set('state', sk.object.shallowCopy(state));
this.$.filterDialog.setValue(this.state);
+ const query = sk.query.toParamSet(state.query);
+ const corporaSelected = query['source_type'];
+ if (corporaSelected && corporaSelected.length) {
+ this.$.corpusSelector.selectedCorpus = corporaSelected[0];
+ } else {
+ this.$.corpusSelector.selectedCorpus = sk.app_config.defaultCorpus;
+ }
},
setParamSet: function(params) {
this.$.queryDialog.queryEle.setParamSet(params);
this.$.filterDialog.setParamSet(params);
+ // TODO(kjlubick) in the lit-html version, this should reflect of digests as matched by
+ // the positive/negative/diff selector (i.e. the things above it).
+ const corpora = params['source_type'].map((name) => {
+ return {
+ name: name,
+ };
+ });
+ this.$.corpusSelector.corpora = corpora;
},
setCommitInfo: function(commits) {
@@ -195,6 +198,14 @@
_handleCorpusChange: function(ev) {
this.$.queryDialog.close();
+
+ // TODO(kjlubick) This is a dirty ugly hack, making the corpus change reload the entire
+ // page. However, the port to lit-html is coming soon, and I don't feel like making
+ // more changes to this Polymer code than is necessary.
+ const params = sk.query.toParamSet(this.state.query);
+ params.source_type = [ev.detail.corpus];
+ this.state.query = sk.query.fromParamSet(params);
+ window.location = window.location.pathname + gold.queryFromState(this.state);
},
_fireStateChange: function() {
@@ -207,12 +218,8 @@
this.fire('state-change', detail);
},
- _tcClass: function(orientation) {
- return (orientation==='horizontal') ? "horizontalTopControl" : "verticalTopControl";
- },
-
- _splitAmp: function(qStr, orientation) {
- return sk.query.splitAmp(qStr, (orientation === 'horizontal') ? ', ':' \n');
+ _splitAmp: function(qStr) {
+ return sk.query.splitAmp(qStr, ', ');
}
});
diff --git a/golden/modules/byblame-page-sk/byblame-page-sk.js b/golden/modules/byblame-page-sk/byblame-page-sk.js
index 64316e6..4f1925e 100644
--- a/golden/modules/byblame-page-sk/byblame-page-sk.js
+++ b/golden/modules/byblame-page-sk/byblame-page-sk.js
@@ -23,7 +23,7 @@
.corpora=${ele._corpora}
.selectedCorpus=${ele._corpus}
.corpusRendererFn=${corpusRendererFn}
- @corpus-selected=${ele._handleCorpusChange}>
+ @corpus_selected=${ele._handleCorpusChange}>
</corpus-selector-sk>
</div>
diff --git a/golden/modules/corpus-selector-sk/corpus-selector-sk-demo.js b/golden/modules/corpus-selector-sk/corpus-selector-sk-demo.js
index cd14196..1393450 100644
--- a/golden/modules/corpus-selector-sk/corpus-selector-sk-demo.js
+++ b/golden/modules/corpus-selector-sk/corpus-selector-sk-demo.js
@@ -12,7 +12,7 @@
const ele = document.createElement('corpus-selector-sk');
ele.corpora = exampleCorpora;
ele.selectedCorpus = 'gm';
-ele.addEventListener('corpus-selected', handleCorpusSelected);
+ele.addEventListener('corpus_selected', handleCorpusSelected);
$$('#default').appendChild(ele);
// Custom corpus renderer function.
@@ -20,7 +20,7 @@
eleCustom.corpora = exampleCorpora;
eleCustom.selectedCorpus = 'gm';
eleCustom.corpusRendererFn = (corpus) => `${corpus.name} : ${corpus.untriagedCount} / ${corpus.negativeCount}`;
-eleCustom.addEventListener('corpus-selected', handleCorpusSelected);
+eleCustom.addEventListener('corpus_selected', handleCorpusSelected);
$$('#custom-fn').appendChild(eleCustom);
// Custom corpus renderer function (long).
@@ -28,5 +28,5 @@
eleLong.corpora = exampleCorpora;
eleLong.selectedCorpus = 'gm';
eleLong.corpusRendererFn = (corpus) => `${corpus.name} : yadda yadda yadda yadda yadda`;
-eleLong.addEventListener('corpus-selected', handleCorpusSelected);
+eleLong.addEventListener('corpus_selected', handleCorpusSelected);
$$('#custom-fn-long-corpus').appendChild(eleLong);
diff --git a/golden/modules/corpus-selector-sk/corpus-selector-sk.js b/golden/modules/corpus-selector-sk/corpus-selector-sk.js
index da7fc81..4c7c0c6 100644
--- a/golden/modules/corpus-selector-sk/corpus-selector-sk.js
+++ b/golden/modules/corpus-selector-sk/corpus-selector-sk.js
@@ -4,7 +4,7 @@
*
* Lists the available corpora and lets the user select a corpus.
*
- * @evt corpus-selected - Sent when the user selects a different corpus. Field
+ * @evt corpus_selected - Sent when the user selects a different corpus. Field
* event.detail.corpus will contain the selected corpus.
*/
@@ -78,7 +78,7 @@
_sendCorpusSelected() {
this.dispatchEvent(
- new CustomEvent('corpus-selected', {
+ new CustomEvent('corpus_selected', {
detail: {
corpus: this.selectedCorpus,
},
diff --git a/golden/modules/corpus-selector-sk/corpus-selector-sk_test.js b/golden/modules/corpus-selector-sk/corpus-selector-sk_test.js
index 3194055..aa8d410 100644
--- a/golden/modules/corpus-selector-sk/corpus-selector-sk_test.js
+++ b/golden/modules/corpus-selector-sk/corpus-selector-sk_test.js
@@ -59,14 +59,14 @@
'svg : 19 / 21']);
});
- it('selects corpus and emits "corpus-selected" event when clicked', async () => {
+ it('selects corpus and emits "corpus_selected" event when clicked', async () => {
const corpusSelectorSk = newCorpusSelectorSk({ selectedCorpus: 'gm' });
expect(corpusSelectorSk.selectedCorpus).to.equal('gm');
expect(selectedCorpusLiText(corpusSelectorSk)).to.equal('gm');
// Click on 'svg' corpus.
- const corpusSelected = eventPromise('corpus-selected');
+ const corpusSelected = eventPromise('corpus_selected');
$$('li[title="svg"]', corpusSelectorSk).click();
const ev = await corpusSelected;
diff --git a/golden/pages/transitional.js b/golden/pages/transitional.js
index 7e5522f..4c15e15 100644
--- a/golden/pages/transitional.js
+++ b/golden/pages/transitional.js
@@ -5,6 +5,7 @@
import '../../infra-sk/modules/paramset-sk';
import '../node_modules/@webcomponents/custom-elements/custom-elements.min';
import '../modules/changelist-controls-sk';
+import '../modules/corpus-selector-sk';
import '../modules/digest-details-sk';
import '../modules/dots-legend-sk';
import '../modules/dots-sk';