| <!-- |
| The <filter-dialog-sk> custom element declaration. |
| |
| A dialog that provides input elements to filter search results by |
| metric values. |
| |
| Attributes: |
| None. |
| |
| Methods: |
| open() - Opens the dialog. |
| |
| close() - Closes the dialog. |
| |
| setValue(newValue): Sets the values to be filtered. Needs to be called |
| before the dialog is opened. |
| |
| setCommitInfo(commitinfo) - Where commitinfo is an array of objects of the form: |
| |
| { |
| author: "foo@example.org" |
| commit_time: 1428574804 |
| hash: "d9f8862ab6bed4195cbfe5dda48693e1062b01e2" |
| } |
| |
| Events: |
| 'edit' - emitted when user clicks the 'Filter' button (and closes the dialog in the process). |
| The 'detail' field of the event contains the modified version |
| of filter object. |
| |
| Mailboxes: |
| None |
| |
| --> |
| |
| <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="bower_components/iron-flex-layout/iron-flex-layout-classes.html"> |
| <link rel="import" href="bower_components/paper-button/paper-button.html"> |
| <link rel="import" href="bower_components/paper-dialog/paper-dialog.html"> |
| <link rel="import" href="bower_components/paper-dialog-scrollable/paper-dialog-scrollable.html"> |
| <link rel="import" href="bower_components/paper-dropdown-menu/paper-dropdown-menu.html"> |
| <link rel="import" href="bower_components/paper-item/paper-item.html"> |
| <link rel="import" href="bower_components/paper-listbox/paper-listbox.html"> |
| <link rel="import" href="bower_components/paper-slider/paper-slider.html"> |
| <link rel="import" href="bower_components/paper-toggle-button/paper-toggle-button.html"> |
| <link rel="import" href="bower_components/polymer/polymer.html"> |
| |
| <link rel=import href="../common/imp/commit-picker.html"> |
| |
| <link rel="import" href="query-dialog-sk.html"> |
| <link rel="import" href="select-popup-sk.html"> |
| <link rel="import" href="shared-styles.html"> |
| |
| <dom-module id="filter-dialog-sk"> |
| <template> |
| <style include="iron-flex iron-flex-alignment shared-styles"> |
| paper-slider { |
| width: 25em; |
| margin-top: 0; |
| --paper-slider-input: { |
| width: 7em; |
| }; |
| } |
| |
| .sliderHeader { |
| font-weight: bold; |
| font-size: 110%; |
| } |
| |
| .filterItem { |
| padding: 1em; |
| } |
| |
| .selectLabel { |
| font-weight: bold; |
| width:15em; |
| padding-right: 2em; |
| } |
| |
| .selectLabel.metricLabel { |
| padding-top: .5em; |
| width: 2.5em; |
| } |
| |
| .inlineLabel { |
| font-weight: bold; |
| padding-right: 1em; |
| } |
| |
| .currSelection { |
| padding: 1em 0 0 1em; |
| min-width: 5em; |
| max-width: 15em; |
| display: inline-block; |
| } |
| |
| #rightQueryButton { |
| max-height: 3em; |
| } |
| |
| .diffMetricSelect { |
| width: 7em; |
| margin-right: 1em; |
| }; |
| |
| </style> |
| <paper-dialog id="filterDialog" with-backdrop> |
| <paper-dialog-scrollable> |
| <div class="vertical layout"> |
| <div class="filterItem horizontal layout"> |
| <span class="inlineLabel">Diff Config:</span> |
| <paper-button id="rightQueryButton" raised><iron-icon icon="image:tune"></iron-icon></paper-button> |
| <div class="currSelection"> |
| [[_splitAmp(_curr.rquery)]] |
| </div> |
| </div> |
| |
| <div class="filterItem"> |
| Commit Range: |
| <commit-picker-sk id="startCommitPicker" repo="[[_repo]]"></commit-picker-sk> |
| <commit-picker-sk id="endCommitPicker" repo="[[_repo]]"></commit-picker-sk> |
| </div> |
| |
| <!-- group by test --> |
| <div class="filterItem"> |
| <span class="selectLabel">Group By Test:</span> |
| <paper-dropdown-menu class="groupTestSelect" no-label-float> |
| <paper-listbox id="groupTest" class="dropdown-content" selected="{{_curr.fgrouptest}}" attr-for-selected="value"> |
| <paper-item value=""></paper-item> |
| <template is='dom-repeat' items='[[_groupTests]]'> |
| <paper-item value="[[item]]">[[item]]</paper-item> |
| </template> |
| </paper-listbox> |
| </paper-dropdown-menu> |
| </div> |
| |
| <!-- min RGBA delta --> |
| <div class="filterItem"> |
| <div class="sliderHeader">Min RGBA Delta</div> |
| <paper-slider value="{{_curr.frgbamin}}" min="0" max="255" editable></paper-slider> |
| </div> |
| |
| <!-- max RGBA delta --> |
| <div class="filterItem"> |
| <div class="sliderHeader">Max RGBA Delta</div> |
| <paper-slider value="{{_curr.frgbamax}}" min="0" max="255" editable></paper-slider> |
| </div> |
| |
| <!-- Max Diff --> |
| <div class="filterItem"> |
| <div class="sliderHeader">Max Diff</div> |
| <paper-slider value="{{_curr.fdiffmax}}" min="-1" max="1" step="0.05" editable></paper-slider> |
| </div> |
| |
| <!-- match --> |
| <div class="filterItem horizontal layout justified"> |
| <div> |
| <div class="selectLabel">Fields Must Match:</div> |
| <template is='dom-repeat' items='[[_curr.match]]'> |
| <div>[[item]]</div> |
| </template> |
| </div> |
| <select-popup-sk id="paramsSelect" icon="icons:create"></select-popup-sk> |
| <!--<select-popup-sk id="paramsSelect"></select-popup-sk>--> |
| </div> |
| |
| <!-- metric --> |
| <div class="filterItem layout horizontal"> |
| <!-- Note:The values of the dropdown need to match the metric ids on the backend --> |
| <span class="selectLabel metricLabel">Metric:</span> |
| <paper-dropdown-menu class="diffMetricSelect" no-label-float> |
| <paper-listbox id="diffMetric" class="dropdown-content" selected="{{_curr.metric}}" attr-for-selected="value"> |
| <template is='dom-repeat' items='[[_metrics]]'> |
| <paper-item value="[[item]]">[[item]]</paper-item> |
| </template> |
| </paper-listbox> |
| </paper-dropdown-menu> |
| |
| <span class="selectLabel metricLabel">Sort:</span> |
| <paper-dropdown-menu class="diffMetricSelect" no-label-float> |
| <paper-listbox id="sortResult" class="dropdown-content" selected="{{_curr.sort}}" attr-for-selected="value"> |
| <template is='dom-repeat' items='[[_sortOptions]]'> |
| <paper-item value="[[item]]">[[item]]</paper-item> |
| </template> |
| </paper-listbox> |
| </paper-dropdown-menu> |
| </div> |
| |
| <!-- has ref image --> |
| <div class="filterItem"> |
| <paper-toggle-button checked="{{_curr.fref}}"><span class="selectLabel">Must have Reference Image</span></paper-toggle-button> |
| </div> |
| </div> |
| </div> |
| </paper-dialog-scrollable> |
| <div class="buttons"> |
| <paper-button id="cancelButton" dialog-dismiss>Cancel</paper-button> |
| <paper-button id="editButton" raised dialog-dismiss>Filter</paper-button> |
| </div> |
| </paper-dialog> |
| <query-dialog-sk id="rightQueryDialog" submit-label="Select"></query-dialog-sk> |
| </template> |
| <script> |
| (function() { |
| // The fields we are interested in. |
| var filterFields = [ |
| "rquery", |
| "metric", |
| "match", |
| "frgbamin", |
| "frgbamax", |
| "fdiffmax", |
| "fgrouptest", |
| "fbegin", |
| "fend", |
| "fref", |
| "sort" |
| ]; |
| |
| Polymer({ |
| is: "filter-dialog-sk", |
| |
| properties: { |
| _curr: { |
| type: Object |
| }, |
| _repo: { |
| type: String, |
| value: sk.app_config.baseRepoURL |
| }, |
| }, |
| |
| ready: function() { |
| this.listen(this.$.editButton, 'tap', '_handleEditButton'); |
| this.listen(this.$.paramsSelect, 'changed-selection', '_handleMatchChanged'); |
| this.listen(this.$.rightQueryButton, 'tap', '_handleRightQueryButton'); |
| this.listen(this.$.rightQueryDialog, 'edit', '_handleRightQueryEdit'); |
| this.set('_metrics', gold.allMetrics.slice()); |
| this.set('_groupTests', gold.groupTestOps.slice()); |
| this.set('_sortOptions', gold.sortOptions.slice()); |
| this.listen(this.$.startCommitPicker, 'commit-selected', '_handleCommitSelected'); |
| this.listen(this.$.endCommitPicker, 'commit-selected', '_handleCommitSelected'); |
| }, |
| |
| _handleCommitSelected: function(ev) { |
| if (this._curr) { |
| var target = ev.currentTarget; |
| var commit = ev.detail.commit; |
| if (target.id === 'startCommitPicker') { |
| this._curr.fbegin = (commit) ? (commit.hash) : (''); |
| } else { |
| this._curr.fend = (commit) ? (commit.hash) : (''); |
| } |
| } |
| }, |
| |
| open: function() { |
| this.set('_curr', sk.object.shallowCopy(this._value)); |
| this.$.paramsSelect.setSelection(this._curr.match); |
| this.$.filterDialog.open(); |
| }, |
| |
| close: function() { |
| this.$.filterDialog.close(); |
| }, |
| |
| setParamSet: function(params) { |
| this.$.rightQueryDialog.queryEle.setParamSet(params); |
| this.$.paramsSelect.setParamSet(params); |
| }, |
| |
| setValue: function(newVal) { |
| // Extract the fields we are interested in. |
| var value = {}; |
| for(var i=0; i < filterFields.length; i++) { |
| var f = filterFields[i]; |
| if (newVal.hasOwnProperty(f)) { |
| if (Array.isArray(newVal[f])) { |
| value[f] = newVal[f].slice(); |
| } else { |
| value[f] = newVal[f]; |
| } |
| } |
| } |
| this._setCommitPicker(this.$.startCommitPicker, newVal.fbegin); |
| this._setCommitPicker(this.$.endCommitPicker, newVal.fend); |
| this.$.paramsSelect.setSelection(value.match); |
| this._value = value; |
| }, |
| |
| _setCommitPicker: function(pickerEle, hash) { |
| pickerEle.selectHash(hash); |
| }, |
| |
| setCommitInfo: function(commits) { |
| this._commits = commits; |
| this.$.startCommitPicker.setCommitInfo(commits); |
| this.$.endCommitPicker.setCommitInfo(commits); |
| }, |
| |
| _handleEditButton: function(ev) { |
| this._value = sk.object.shallowCopy(this._curr); |
| this.fire('edit', sk.object.shallowCopy(this._curr)); |
| }, |
| |
| _handleMatchChanged: function(ev) { |
| this.set('_curr.match', ev.detail); |
| }, |
| |
| _handleRightQueryButton: function(ev) { |
| ev.stopPropagation(); |
| this.$.rightQueryDialog.open(this._curr.rquery); |
| }, |
| |
| _handleRightQueryEdit: function(ev) { |
| ev.stopPropagation(); |
| this.set('_curr.rquery', ev.detail); |
| }, |
| |
| _splitAmp: function(qStr) { |
| return sk.query.splitAmp(qStr, ' \n'); |
| } |
| }); |
| })(); |
| </script> |
| </dom-module> |