Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 Coverage.CoverageListView = class extends UI.VBox { | 5 Coverage.CoverageListView = class extends UI.VBox { |
| 6 constructor() { | 6 constructor() { |
| 7 super(true); | 7 super(true); |
| 8 /** @type {!Map<!Coverage.URLCoverageInfo, !Coverage.CoverageListView.GridNo de>} */ | |
| 9 this._nodeForCoverageInfo = new Map(); | |
| 8 this.registerRequiredCSS('coverage/coverageListView.css'); | 10 this.registerRequiredCSS('coverage/coverageListView.css'); |
| 9 var columns = [ | 11 var columns = [ |
| 10 {id: 'url', title: Common.UIString('URL'), width: '300px', fixedWidth: fal se, sortable: true}, | 12 {id: 'url', title: Common.UIString('URL'), width: '300px', fixedWidth: fal se, sortable: true}, |
| 11 {id: 'type', title: Common.UIString('Type'), width: '45px', fixedWidth: tr ue, sortable: true}, { | 13 {id: 'type', title: Common.UIString('Type'), width: '45px', fixedWidth: tr ue, sortable: true}, { |
| 12 id: 'size', | 14 id: 'size', |
| 13 title: Common.UIString('Total Bytes'), | 15 title: Common.UIString('Total Bytes'), |
| 14 width: '60px', | 16 width: '60px', |
| 15 fixedWidth: true, | 17 fixedWidth: true, |
| 16 sortable: true, | 18 sortable: true, |
| 17 align: DataGrid.DataGrid.Align.Right | 19 align: DataGrid.DataGrid.Align.Right |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 35 this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged, thi s._sortingChanged, this); | 37 this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged, thi s._sortingChanged, this); |
| 36 | 38 |
| 37 var dataGridWidget = this._dataGrid.asWidget(); | 39 var dataGridWidget = this._dataGrid.asWidget(); |
| 38 dataGridWidget.show(this.contentElement); | 40 dataGridWidget.show(this.contentElement); |
| 39 } | 41 } |
| 40 | 42 |
| 41 /** | 43 /** |
| 42 * @param {!Array<!Coverage.URLCoverageInfo>} coverageInfo | 44 * @param {!Array<!Coverage.URLCoverageInfo>} coverageInfo |
| 43 */ | 45 */ |
| 44 update(coverageInfo) { | 46 update(coverageInfo) { |
| 47 var hadUpdates = false; | |
| 45 var maxSize = coverageInfo.reduce((acc, entry) => Math.max(acc, entry.size() ), 0); | 48 var maxSize = coverageInfo.reduce((acc, entry) => Math.max(acc, entry.size() ), 0); |
| 46 var rootNode = this._dataGrid.rootNode(); | 49 var rootNode = this._dataGrid.rootNode(); |
| 47 rootNode.removeChildren(); | 50 for (var entry of coverageInfo) { |
| 48 for (var entry of coverageInfo) | 51 var node = this._nodeForCoverageInfo.get(entry); |
| 49 rootNode.appendChild(new Coverage.CoverageListView.GridNode(entry, maxSize )); | 52 if (node) { |
| 50 this._sortingChanged(); | 53 hadUpdates = node._refreshIfNeeded(maxSize) || hadUpdates; |
| 54 continue; | |
| 55 } | |
| 56 hadUpdates = true; | |
| 57 node = new Coverage.CoverageListView.GridNode(entry, maxSize); | |
| 58 this._nodeForCoverageInfo.set(entry, node); | |
| 59 rootNode.appendChild(node); | |
| 60 } | |
| 61 if (hadUpdates) | |
| 62 this._sortingChanged(); | |
| 63 } | |
| 64 | |
| 65 reset() { | |
| 66 this._nodeForCoverageInfo.clear(); | |
| 67 this._dataGrid.rootNode().removeChildren(); | |
| 51 } | 68 } |
| 52 | 69 |
| 53 /** | 70 /** |
| 54 * @param {!Common.Event} event | 71 * @param {!Common.Event} event |
| 55 */ | 72 */ |
| 56 _onOpenedNode(event) { | 73 _onOpenedNode(event) { |
| 57 var node = /** @type Coverage.CoverageListView.GridNode */ (event.data); | 74 var node = /** @type Coverage.CoverageListView.GridNode */ (event.data); |
| 58 this._revealSourceForNode(node); | 75 this._revealSourceForNode(node); |
| 59 } | 76 } |
| 60 | 77 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 128 /** | 145 /** |
| 129 * @param {string} fieldName | 146 * @param {string} fieldName |
| 130 * @param {!DataGrid.DataGridNode} a | 147 * @param {!DataGrid.DataGridNode} a |
| 131 * @param {!DataGrid.DataGridNode} b | 148 * @param {!DataGrid.DataGridNode} b |
| 132 * @return {number} | 149 * @return {number} |
| 133 */ | 150 */ |
| 134 function compareNumericField(fieldName, a, b) { | 151 function compareNumericField(fieldName, a, b) { |
| 135 var nodeA = /** @type {!Coverage.CoverageListView.GridNode} */ (a); | 152 var nodeA = /** @type {!Coverage.CoverageListView.GridNode} */ (a); |
| 136 var nodeB = /** @type {!Coverage.CoverageListView.GridNode} */ (b); | 153 var nodeB = /** @type {!Coverage.CoverageListView.GridNode} */ (b); |
| 137 | 154 |
| 138 return nodeA._coverageInfo[fieldName]() - nodeB._coverageInfo[fieldName]() ; | 155 return nodeA._coverageInfo[fieldName]() - nodeB._coverageInfo[fieldName]() || compareURL(a, b); |
| 139 } | 156 } |
| 140 | 157 |
| 141 /** | 158 /** |
| 142 * @param {!DataGrid.DataGridNode} a | 159 * @param {!DataGrid.DataGridNode} a |
| 143 * @param {!DataGrid.DataGridNode} b | 160 * @param {!DataGrid.DataGridNode} b |
| 144 * @return {number} | 161 * @return {number} |
| 145 */ | 162 */ |
| 146 function compareType(a, b) { | 163 function compareType(a, b) { |
| 147 var nodeA = /** @type {!Coverage.CoverageListView.GridNode} */ (a); | 164 var nodeA = /** @type {!Coverage.CoverageListView.GridNode} */ (a); |
| 148 var nodeB = /** @type {!Coverage.CoverageListView.GridNode} */ (b); | 165 var nodeB = /** @type {!Coverage.CoverageListView.GridNode} */ (b); |
| 149 var typeA = Coverage.CoverageListView._typeToString(nodeA._coverageInfo.ty pe()); | 166 var typeA = Coverage.CoverageListView._typeToString(nodeA._coverageInfo.ty pe()); |
| 150 var typeB = Coverage.CoverageListView._typeToString(nodeB._coverageInfo.ty pe()); | 167 var typeB = Coverage.CoverageListView._typeToString(nodeB._coverageInfo.ty pe()); |
| 151 return typeA.localeCompare(typeB); | 168 return typeA.localeCompare(typeB) || compareURL(a, b); |
| 152 } | 169 } |
| 153 } | 170 } |
| 154 | 171 |
| 155 /** | 172 /** |
| 156 * @param {!Coverage.CoverageType} type | 173 * @param {!Coverage.CoverageType} type |
| 157 */ | 174 */ |
| 158 static _typeToString(type) { | 175 static _typeToString(type) { |
| 159 var types = []; | 176 var types = []; |
| 160 if (type & Coverage.CoverageType.CSS) | 177 if (type & Coverage.CoverageType.CSS) |
| 161 types.push(Common.UIString('CSS')); | 178 types.push(Common.UIString('CSS')); |
| 162 if (type & Coverage.CoverageType.JavaScript) | 179 if (type & Coverage.CoverageType.JavaScript) |
| 163 types.push(Common.UIString('JS')); | 180 types.push(Common.UIString('JS')); |
| 164 return types.join('+'); | 181 return types.join('+'); |
| 165 } | 182 } |
| 166 }; | 183 }; |
| 167 | 184 |
| 168 Coverage.CoverageListView.GridNode = class extends DataGrid.SortableDataGridNode { | 185 Coverage.CoverageListView.GridNode = class extends DataGrid.SortableDataGridNode { |
| 169 /** | 186 /** |
| 170 * @param {!Coverage.URLCoverageInfo} coverageInfo | 187 * @param {!Coverage.URLCoverageInfo} coverageInfo |
| 171 * @param {number} maxSize | 188 * @param {number} maxSize |
| 172 */ | 189 */ |
| 173 constructor(coverageInfo, maxSize) { | 190 constructor(coverageInfo, maxSize) { |
| 174 super(); | 191 super(); |
| 175 this._coverageInfo = coverageInfo; | 192 this._coverageInfo = coverageInfo; |
| 193 /** @type {number} */ | |
|
alph
2017/05/05 19:18:08
|undefined
| |
| 194 this._lastUsedSize; | |
| 176 this._url = coverageInfo.url(); | 195 this._url = coverageInfo.url(); |
| 177 this._displayURL = new Common.ParsedURL(this._url).displayName; | 196 this._displayURL = new Common.ParsedURL(this._url).displayName; |
| 178 this._maxSize = maxSize; | 197 this._maxSize = maxSize; |
| 179 } | 198 } |
| 180 | 199 |
| 181 /** | 200 /** |
| 201 * param {number} maxSize | |
|
alph
2017/05/05 19:18:08
@param
| |
| 202 */ | |
|
alph
2017/05/05 19:18:08
@return
| |
| 203 _refreshIfNeeded(maxSize) { | |
| 204 if (this._lastUsedSize === this._coverageInfo.usedSize() && maxSize === this ._maxSize) | |
| 205 return false; | |
| 206 this._lastUsedSize = this._coverageInfo.usedSize(); | |
| 207 this._maxSize = maxSize; | |
| 208 this.refresh(); | |
| 209 return true; | |
| 210 } | |
| 211 | |
| 212 /** | |
| 182 * @override | 213 * @override |
| 183 * @param {string} columnId | 214 * @param {string} columnId |
| 184 * @return {!Element} | 215 * @return {!Element} |
| 185 */ | 216 */ |
| 186 createCell(columnId) { | 217 createCell(columnId) { |
| 187 var cell = this.createTD(columnId); | 218 var cell = this.createTD(columnId); |
| 188 switch (columnId) { | 219 switch (columnId) { |
| 189 case 'url': | 220 case 'url': |
| 190 cell.title = this._url; | 221 cell.title = this._url; |
| 191 var outer = cell.createChild('div', 'url-outer'); | 222 var outer = cell.createChild('div', 'url-outer'); |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 211 case 'bars': | 242 case 'bars': |
| 212 var barContainer = cell.createChild('div', 'bar-container'); | 243 var barContainer = cell.createChild('div', 'bar-container'); |
| 213 var unusedSizeBar = barContainer.createChild('div', 'bar bar-unused-size '); | 244 var unusedSizeBar = barContainer.createChild('div', 'bar bar-unused-size '); |
| 214 unusedSizeBar.style.width = Math.ceil(100 * this._coverageInfo.unusedSiz e() / this._maxSize) + '%'; | 245 unusedSizeBar.style.width = Math.ceil(100 * this._coverageInfo.unusedSiz e() / this._maxSize) + '%'; |
| 215 var usedSizeBar = barContainer.createChild('div', 'bar bar-used-size'); | 246 var usedSizeBar = barContainer.createChild('div', 'bar bar-used-size'); |
| 216 usedSizeBar.style.width = Math.floor(100 * this._coverageInfo.usedSize() / this._maxSize) + '%'; | 247 usedSizeBar.style.width = Math.floor(100 * this._coverageInfo.usedSize() / this._maxSize) + '%'; |
| 217 } | 248 } |
| 218 return cell; | 249 return cell; |
| 219 } | 250 } |
| 220 }; | 251 }; |
| OLD | NEW |