OLD | NEW |
---|---|
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <!-- | 2 <!-- |
3 Copyright 2016 The Chromium Authors. All rights reserved. | 3 Copyright 2016 The Chromium Authors. All rights reserved. |
4 Use of this source code is governed by a BSD-style license that can be | 4 Use of this source code is governed by a BSD-style license that can be |
5 found in the LICENSE file. | 5 found in the LICENSE file. |
6 --> | 6 --> |
7 <link rel="import" href="/dashboard/elements/chart-container.html"> | 7 <link rel="import" href="/dashboard/elements/chart-container.html"> |
8 <link rel="import" href="/dashboard/elements/test-picker.html"> | 8 <link rel="import" href="/dashboard/elements/test-picker.html"> |
9 <link rel="import" href="/dashboard/static/events.html"> | 9 <link rel="import" href="/dashboard/static/events.html"> |
10 <link rel="import" href="/dashboard/static/series_group.html"> | 10 <link rel="import" href="/dashboard/static/series_group.html"> |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
112 events.addEventListener(window, 'pagestaterequest', | 112 events.addEventListener(window, 'pagestaterequest', |
113 this.onPageStateRequest.bind(this)); | 113 this.onPageStateRequest.bind(this)); |
114 | 114 |
115 this.testPicker = this.$['test-picker']; | 115 this.testPicker = this.$['test-picker']; |
116 this.testPicker.addEventListener( | 116 this.testPicker.addEventListener( |
117 'add', this.onAddChartButtonClicked.bind(this)); | 117 'add', this.onAddChartButtonClicked.bind(this)); |
118 | 118 |
119 events.addEventListener(window, 'uriload', this.onUriLoad.bind(this)); | 119 events.addEventListener(window, 'uriload', this.onUriLoad.bind(this)); |
120 this.uriController = new uri.Controller(this.getPageState.bind(this)); | 120 this.uriController = new uri.Controller(this.getPageState.bind(this)); |
121 this.uriController.load(); | 121 this.uriController.load(); |
122 | |
123 this.addEventListener('click', this.onClick_.bind(this)); | |
124 }, | |
125 | |
126 async onClick_(event) { | |
127 // When the user clicks anywhere in any chart-title, populate the | |
128 // testPicker. | |
129 let chartTitle = event.target; | |
130 while (chartTitle !== this && chartTitle.tagName !== 'CHART-TITLE') { | |
131 chartTitle = chartTitle.parentNode; | |
132 } | |
133 if (chartTitle.tagName !== 'CHART-TITLE') return; | |
sullivan
2017/05/16 13:35:13
The event handling here is really different than t
benjhayden
2017/05/16 21:17:45
Done.
| |
134 | |
135 const testPaths = chartTitle.getTestPaths(); | |
eakuefner
2017/05/16 02:08:53
Can you write some comments that explain why this
benjhayden
2017/05/16 21:17:45
Changed to use event.titleParts.
| |
136 let testPath = testPaths.shift().split('/'); | |
137 for (const newPath of testPaths) { | |
138 for (let i = 0; i < Math.min(newPath.length, testPath.length); ++i) { | |
139 if (testPath[i] !== newPath[i]) { | |
140 testPath = testPath.slice(0, i); | |
141 } | |
142 } | |
143 } | |
144 | |
145 const suiteMenu = this.testPicker.getSelectionMenu(0); | |
146 const suiteName = testPath[2]; | |
147 for (let itemIndex = 0; itemIndex < suiteMenu.items.length; ++itemIndex) { | |
eakuefner
2017/05/16 02:08:52
Could you write this as a for..of loop?
benjhayden
2017/05/16 21:17:45
Done.
| |
148 if (suiteMenu.items[itemIndex].name === suiteName) { | |
149 suiteMenu.selectedItem = suiteMenu.items[itemIndex]; | |
150 break; | |
151 } | |
152 } | |
153 | |
154 this.testPicker.updateTestSuiteDescription(); | |
155 await this.testPicker.updateBotMenu(); | |
156 | |
157 const botName = testPath[1]; | |
158 const botMenu = this.testPicker.getSelectionMenu(1); | |
159 for (let itemIndex = 0; itemIndex < botMenu.items.length; ++itemIndex) { | |
160 if (botMenu.items[itemIndex].name === botName) { | |
161 botMenu.selectedItem = botMenu.items[itemIndex]; | |
162 break; | |
163 } | |
164 } | |
165 await this.testPicker.updateSubtestMenus(2); | |
166 | |
167 for (let i = 3; i < testPath.length; ++i) { | |
168 const name = testPath[i]; | |
169 const menu = this.testPicker.getSelectionMenu(i - 1); | |
170 | |
171 for (let itemIndex = 0; itemIndex < menu.items.length; ++itemIndex) { | |
172 if (menu.items[itemIndex].name === testPath[i]) { | |
173 menu.selectedItem = menu.items[itemIndex]; | |
174 break; | |
175 } | |
176 } | |
177 await this.testPicker.updateSubtestMenus(i); | |
178 } | |
122 }, | 179 }, |
123 | 180 |
124 /** | 181 /** |
125 * On 'uriload' event, adds charts from the current query parameters. | 182 * On 'uriload' event, adds charts from the current query parameters. |
126 * @param {Object} event Event object. | 183 * @param {Object} event Event object. |
127 */ | 184 */ |
128 onUriLoad(event) { | 185 onUriLoad(event) { |
129 const params = event.detail.params; | 186 const params = event.detail.params; |
130 const pageState = event.detail.state; | 187 const pageState = event.detail.state; |
131 if (!pageState) { | 188 if (!pageState) { |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
300 } else if (status == 'error') { | 357 } else if (status == 'error') { |
301 this.fire('display-toast', { | 358 this.fire('display-toast', { |
302 'text': 'Failed to save report.', | 359 'text': 'Failed to save report.', |
303 'error': true | 360 'error': true |
304 }); | 361 }); |
305 } | 362 } |
306 } | 363 } |
307 }); | 364 }); |
308 </script> | 365 </script> |
309 </dom-module> | 366 </dom-module> |
OLD | NEW |