OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 /** | 5 /** |
6 * @constructor | 6 * @constructor |
7 * @param {string} currentPath | 7 * @param {string} currentPath |
8 */ | 8 */ |
9 var SelectionTreeNode = function(currentPath) { | 9 var SelectionTreeNode = function(currentPath) { |
10 /** @type {string} */ | 10 /** @type {string} */ |
(...skipping 17 matching lines...) Expand all Loading... |
28 | 28 |
29 /** @polymerBehavior */ | 29 /** @polymerBehavior */ |
30 var HistoryListBehavior = { | 30 var HistoryListBehavior = { |
31 properties: { | 31 properties: { |
32 /** | 32 /** |
33 * Polymer paths to the history items contained in this list. | 33 * Polymer paths to the history items contained in this list. |
34 * @type {!Set<string>} selectedPaths | 34 * @type {!Set<string>} selectedPaths |
35 */ | 35 */ |
36 selectedPaths: { | 36 selectedPaths: { |
37 type: Object, | 37 type: Object, |
38 value: /** @return {!Set<string>} */ function() { return new Set(); } | 38 value: /** @return {!Set<string>} */ () => new Set(), |
39 }, | 39 }, |
40 | 40 |
41 lastSelectedPath: String, | 41 lastSelectedPath: String, |
42 }, | 42 }, |
43 | 43 |
44 listeners: { | 44 listeners: { |
45 'history-checkbox-select': 'itemSelected_', | 45 'history-checkbox-select': 'itemSelected_', |
46 }, | 46 }, |
47 | 47 |
48 /** | 48 /** |
(...skipping 23 matching lines...) Expand all Loading... |
72 return ''; | 72 return ''; |
73 | 73 |
74 var messageId = searchedTerm !== '' ? 'noSearchResults' : 'noResults'; | 74 var messageId = searchedTerm !== '' ? 'noSearchResults' : 'noResults'; |
75 return loadTimeData.getString(messageId); | 75 return loadTimeData.getString(messageId); |
76 }, | 76 }, |
77 | 77 |
78 /** | 78 /** |
79 * Deselect each item in |selectedPaths|. | 79 * Deselect each item in |selectedPaths|. |
80 */ | 80 */ |
81 unselectAllItems: function() { | 81 unselectAllItems: function() { |
82 this.selectedPaths.forEach(function(path) { | 82 this.selectedPaths.forEach(path => this.set(path + '.selected', false)); |
83 this.set(path + '.selected', false); | |
84 }.bind(this)); | |
85 | |
86 this.selectedPaths.clear(); | 83 this.selectedPaths.clear(); |
87 }, | 84 }, |
88 | 85 |
89 /** | 86 /** |
90 * Performs a request to the backend to delete all selected items. If | 87 * Performs a request to the backend to delete all selected items. If |
91 * successful, removes them from the view. Does not prompt the user before | 88 * successful, removes them from the view. Does not prompt the user before |
92 * deleting -- see <history-list-container> for a version of this method which | 89 * deleting -- see <history-list-container> for a version of this method which |
93 * does prompt. | 90 * does prompt. |
94 */ | 91 */ |
95 deleteSelected: function() { | 92 deleteSelected: function() { |
96 var toBeRemoved = | 93 var toBeRemoved = |
97 Array.from(this.selectedPaths.values()).map(function(path) { | 94 Array.from(this.selectedPaths.values()).map(path => this.get(path)); |
98 return this.get(path); | |
99 }.bind(this)); | |
100 | 95 |
101 md_history.BrowserService.getInstance() | 96 md_history.BrowserService.getInstance() |
102 .deleteItems(toBeRemoved) | 97 .deleteItems(toBeRemoved) |
103 .then(function() { | 98 .then(() => { |
104 this.removeItemsByPath(Array.from(this.selectedPaths)); | 99 this.removeItemsByPath(Array.from(this.selectedPaths)); |
105 this.fire('unselect-all'); | 100 this.fire('unselect-all'); |
106 }.bind(this)); | 101 }); |
107 }, | 102 }, |
108 | 103 |
109 /** | 104 /** |
110 * Removes the history items in |paths|. Assumes paths are of a.0.b.0... | 105 * Removes the history items in |paths|. Assumes paths are of a.0.b.0... |
111 * structure. | 106 * structure. |
112 * | 107 * |
113 * We want to use notifySplices to update the arrays for performance reasons | 108 * We want to use notifySplices to update the arrays for performance reasons |
114 * which requires manually batching and sending the notifySplices for each | 109 * which requires manually batching and sending the notifySplices for each |
115 * level. To do this, we build a tree where each node is an array and then | 110 * level. To do this, we build a tree where each node is an array and then |
116 * depth traverse it to remove items. Each time a node has all children | 111 * depth traverse it to remove items. Each time a node has all children |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 * they become empty. | 159 * they become empty. |
165 * @param {SelectionTreeNode} node | 160 * @param {SelectionTreeNode} node |
166 * @return {boolean} Whether this node's array should be deleted. | 161 * @return {boolean} Whether this node's array should be deleted. |
167 * @private | 162 * @private |
168 */ | 163 */ |
169 removeItemsBeneathNode_: function(node) { | 164 removeItemsBeneathNode_: function(node) { |
170 var array = this.get(node.currentPath); | 165 var array = this.get(node.currentPath); |
171 var splices = []; | 166 var splices = []; |
172 | 167 |
173 node.indexes.sort(function(a, b) { return b - a; }); | 168 node.indexes.sort(function(a, b) { return b - a; }); |
174 node.indexes.forEach(function(index) { | 169 node.indexes.forEach(index => { |
175 if (node.leaf || this.removeItemsBeneathNode_(node.children[index])) { | 170 if (node.leaf || this.removeItemsBeneathNode_(node.children[index])) { |
176 var item = array.splice(index, 1)[0]; | 171 var item = array.splice(index, 1)[0]; |
177 splices.push({ | 172 splices.push({ |
178 index: index, | 173 index: index, |
179 removed: [item], | 174 removed: [item], |
180 addedCount: 0, | 175 addedCount: 0, |
181 object: array, | 176 object: array, |
182 type: 'splice' | 177 type: 'splice' |
183 }); | 178 }); |
184 } | 179 } |
185 }.bind(this)); | 180 }); |
186 | 181 |
187 if (array.length == 0 && node.currentPath.indexOf('.') != -1) | 182 if (array.length == 0 && node.currentPath.indexOf('.') != -1) |
188 return true; | 183 return true; |
189 | 184 |
190 // notifySplices gives better performance than individually splicing as it | 185 // notifySplices gives better performance than individually splicing as it |
191 // batches all of the updates together. | 186 // batches all of the updates together. |
192 this.notifySplices(node.currentPath, splices); | 187 this.notifySplices(node.currentPath, splices); |
193 return false; | 188 return false; |
194 }, | 189 }, |
195 | 190 |
(...skipping 21 matching lines...) Expand all Loading... |
217 paths.push(itemArrayPath + '.' + i); | 212 paths.push(itemArrayPath + '.' + i); |
218 } | 213 } |
219 } | 214 } |
220 } | 215 } |
221 | 216 |
222 if (paths.length == 0) | 217 if (paths.length == 0) |
223 paths.push(item.path); | 218 paths.push(item.path); |
224 | 219 |
225 var selected = !this.selectedPaths.has(item.path); | 220 var selected = !this.selectedPaths.has(item.path); |
226 | 221 |
227 paths.forEach(function(path) { | 222 paths.forEach(path => { |
228 this.set(path + '.selected', selected); | 223 this.set(path + '.selected', selected); |
229 | 224 |
230 if (selected) { | 225 if (selected) { |
231 this.selectedPaths.add(path); | 226 this.selectedPaths.add(path); |
232 return; | 227 return; |
233 } | 228 } |
234 | 229 |
235 this.selectedPaths.delete(path); | 230 this.selectedPaths.delete(path); |
236 }.bind(this)); | 231 }); |
237 | 232 |
238 this.lastSelectedPath = itemPath; | 233 this.lastSelectedPath = itemPath; |
239 }, | 234 }, |
240 }; | 235 }; |
OLD | NEW |