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 /** |
7 * @param {function(!Coverage.URLCoverageInfo):boolean} filterCallback | |
8 */ | |
9 constructor(filterCallback) { | |
7 super(true); | 10 super(true); |
8 /** @type {!Map<!Coverage.URLCoverageInfo, !Coverage.CoverageListView.GridNo de>} */ | 11 /** @type {!Map<!Coverage.URLCoverageInfo, !Coverage.CoverageListView.GridNo de>} */ |
9 this._nodeForCoverageInfo = new Map(); | 12 this._nodeForCoverageInfo = new Map(); |
13 /** @type {function(!Coverage.URLCoverageInfo):boolean} */ | |
alph
2017/05/18 01:02:31
no need to annotate
| |
14 this._filterCallback = filterCallback; | |
10 /** @type {?RegExp} */ | 15 /** @type {?RegExp} */ |
11 this._filterRegExp = null; | 16 this._highlightRegExp = null; |
12 this.registerRequiredCSS('coverage/coverageListView.css'); | 17 this.registerRequiredCSS('coverage/coverageListView.css'); |
13 var columns = [ | 18 var columns = [ |
14 {id: 'url', title: Common.UIString('URL'), width: '300px', fixedWidth: fal se, sortable: true}, | 19 {id: 'url', title: Common.UIString('URL'), width: '250px', fixedWidth: fal se, sortable: true}, |
15 {id: 'type', title: Common.UIString('Type'), width: '45px', fixedWidth: tr ue, sortable: true}, { | 20 {id: 'type', title: Common.UIString('Type'), width: '45px', fixedWidth: tr ue, sortable: true}, { |
16 id: 'size', | 21 id: 'size', |
17 title: Common.UIString('Total Bytes'), | 22 title: Common.UIString('Total Bytes'), |
18 width: '60px', | 23 width: '60px', |
19 fixedWidth: true, | 24 fixedWidth: true, |
20 sortable: true, | 25 sortable: true, |
21 align: DataGrid.DataGrid.Align.Right | 26 align: DataGrid.DataGrid.Align.Right |
22 }, | 27 }, |
23 { | 28 { |
24 id: 'unusedSize', | 29 id: 'unusedSize', |
25 title: Common.UIString('Unused Bytes'), | 30 title: Common.UIString('Unused Bytes'), |
26 width: '60px', | 31 width: '100px', |
27 fixedWidth: true, | 32 fixedWidth: true, |
28 sortable: true, | 33 sortable: true, |
29 align: DataGrid.DataGrid.Align.Right, | 34 align: DataGrid.DataGrid.Align.Right, |
30 sort: DataGrid.DataGrid.Order.Descending | 35 sort: DataGrid.DataGrid.Order.Descending |
31 }, | 36 }, |
32 {id: 'bars', title: '', width: '500px', fixedWidth: false, sortable: true} | 37 {id: 'bars', title: '', width: '250px', fixedWidth: false, sortable: true} |
33 ]; | 38 ]; |
34 this._dataGrid = new DataGrid.SortableDataGrid(columns); | 39 this._dataGrid = new DataGrid.SortableDataGrid(columns); |
35 this._dataGrid.setResizeMethod(DataGrid.DataGrid.ResizeMethod.Last); | 40 this._dataGrid.setResizeMethod(DataGrid.DataGrid.ResizeMethod.Last); |
36 this._dataGrid.element.classList.add('flex-auto'); | 41 this._dataGrid.element.classList.add('flex-auto'); |
37 this._dataGrid.element.addEventListener('keydown', this._onKeyDown.bind(this ), false); | 42 this._dataGrid.element.addEventListener('keydown', this._onKeyDown.bind(this ), false); |
38 this._dataGrid.addEventListener(DataGrid.DataGrid.Events.OpenedNode, this._o nOpenedNode, this); | 43 this._dataGrid.addEventListener(DataGrid.DataGrid.Events.OpenedNode, this._o nOpenedNode, this); |
39 this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged, thi s._sortingChanged, this); | 44 this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged, thi s._sortingChanged, this); |
40 | 45 |
41 var dataGridWidget = this._dataGrid.asWidget(); | 46 var dataGridWidget = this._dataGrid.asWidget(); |
42 dataGridWidget.show(this.contentElement); | 47 dataGridWidget.show(this.contentElement); |
43 } | 48 } |
44 | 49 |
45 /** | 50 /** |
46 * @param {!Array<!Coverage.URLCoverageInfo>} coverageInfo | 51 * @param {!Array<!Coverage.URLCoverageInfo>} coverageInfo |
47 */ | 52 */ |
48 update(coverageInfo) { | 53 update(coverageInfo) { |
49 var hadUpdates = false; | 54 var hadUpdates = false; |
50 var maxSize = coverageInfo.reduce((acc, entry) => Math.max(acc, entry.size() ), 0); | 55 var maxSize = coverageInfo.reduce((acc, entry) => Math.max(acc, entry.size() ), 0); |
51 var rootNode = this._dataGrid.rootNode(); | 56 var rootNode = this._dataGrid.rootNode(); |
52 for (var entry of coverageInfo) { | 57 for (var entry of coverageInfo) { |
53 var node = this._nodeForCoverageInfo.get(entry); | 58 var node = this._nodeForCoverageInfo.get(entry); |
54 if (node) { | 59 if (node) { |
55 if (this._isVisible(node)) | 60 if (this._filterCallback(node._coverageInfo)) |
56 hadUpdates = node._refreshIfNeeded(maxSize) || hadUpdates; | 61 hadUpdates = node._refreshIfNeeded(maxSize) || hadUpdates; |
57 continue; | 62 continue; |
58 } | 63 } |
59 node = new Coverage.CoverageListView.GridNode(entry, maxSize); | 64 node = new Coverage.CoverageListView.GridNode(entry, maxSize); |
60 this._nodeForCoverageInfo.set(entry, node); | 65 this._nodeForCoverageInfo.set(entry, node); |
61 if (this._isVisible(node)) { | 66 if (this._filterCallback(node._coverageInfo)) { |
62 rootNode.appendChild(node); | 67 rootNode.appendChild(node); |
63 hadUpdates = true; | 68 hadUpdates = true; |
64 } | 69 } |
65 } | 70 } |
66 if (hadUpdates) | 71 if (hadUpdates) |
67 this._sortingChanged(); | 72 this._sortingChanged(); |
68 } | 73 } |
69 | 74 |
70 reset() { | 75 reset() { |
71 this._nodeForCoverageInfo.clear(); | 76 this._nodeForCoverageInfo.clear(); |
72 this._dataGrid.rootNode().removeChildren(); | 77 this._dataGrid.rootNode().removeChildren(); |
73 } | 78 } |
74 | 79 |
75 /** | 80 /** |
76 * @param {?RegExp} regExp | 81 * @param {?RegExp} highlightRegExp |
77 */ | 82 */ |
78 setFilter(regExp) { | 83 updateFilterAndHighlight(highlightRegExp) { |
79 this._filterRegExp = regExp; | 84 this._highlightRegExp = highlightRegExp; |
80 var hadTreeUpdates = false; | 85 var hadTreeUpdates = false; |
81 for (var node of this._nodeForCoverageInfo.values()) { | 86 for (var node of this._nodeForCoverageInfo.values()) { |
82 var shouldBeVisible = this._isVisible(node); | 87 var shouldBeVisible = this._filterCallback(node._coverageInfo); |
83 var isVisible = !!node.parent; | 88 var isVisible = !!node.parent; |
84 if (shouldBeVisible) | 89 if (shouldBeVisible) |
85 node._setHighlight(regExp); | 90 node._setHighlight(this._highlightRegExp); |
86 if (shouldBeVisible === isVisible) | 91 if (shouldBeVisible === isVisible) |
87 continue; | 92 continue; |
88 hadTreeUpdates = true; | 93 hadTreeUpdates = true; |
89 if (!shouldBeVisible) | 94 if (!shouldBeVisible) |
90 node.remove(); | 95 node.remove(); |
91 else | 96 else |
92 this._dataGrid.rootNode().appendChild(node); | 97 this._dataGrid.rootNode().appendChild(node); |
93 } | 98 } |
94 if (hadTreeUpdates) | 99 if (hadTreeUpdates) |
95 this._sortingChanged(); | 100 this._sortingChanged(); |
96 } | 101 } |
97 | 102 |
98 /** | 103 /** |
99 * @param {!Common.Event} event | 104 * @param {!Common.Event} event |
100 */ | 105 */ |
101 _onOpenedNode(event) { | 106 _onOpenedNode(event) { |
102 var node = /** @type Coverage.CoverageListView.GridNode */ (event.data); | 107 var node = /** @type Coverage.CoverageListView.GridNode */ (event.data); |
103 this._revealSourceForNode(node); | 108 this._revealSourceForNode(node); |
104 } | 109 } |
105 | 110 |
106 /** | 111 /** |
107 * @param {!Coverage.CoverageListView.GridNode} node | |
108 * @return {boolean} | |
109 */ | |
110 _isVisible(node) { | |
111 return !this._filterRegExp || this._filterRegExp.test(node._url); | |
112 } | |
113 | |
114 /** | |
115 * @param {!Event} event | 112 * @param {!Event} event |
116 */ | 113 */ |
117 _onKeyDown(event) { | 114 _onKeyDown(event) { |
118 if (!isEnterKey(event)) | 115 if (!isEnterKey(event)) |
119 return; | 116 return; |
120 event.consume(true); | 117 event.consume(true); |
121 this._revealSourceForNode(this._dataGrid.selectedNode); | 118 this._revealSourceForNode(this._dataGrid.selectedNode); |
122 } | 119 } |
123 | 120 |
124 /** | 121 /** |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
305 * @param {string} textContent | 302 * @param {string} textContent |
306 */ | 303 */ |
307 _highlight(element, textContent) { | 304 _highlight(element, textContent) { |
308 var matches = this._highlightRegExp.exec(textContent); | 305 var matches = this._highlightRegExp.exec(textContent); |
309 if (!matches || !matches.length) | 306 if (!matches || !matches.length) |
310 return; | 307 return; |
311 var range = new TextUtils.SourceRange(matches.index, matches[0].length); | 308 var range = new TextUtils.SourceRange(matches.index, matches[0].length); |
312 UI.highlightRangesWithStyleClass(element, [range], 'filter-highlight'); | 309 UI.highlightRangesWithStyleClass(element, [range], 'filter-highlight'); |
313 } | 310 } |
314 }; | 311 }; |
OLD | NEW |