| 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 * @template T | 6 * @template T |
| 7 * @interface | 7 * @interface |
| 8 */ | 8 */ |
| 9 UI.ListDelegate = function() {}; | 9 UI.ListDelegate = function() {}; |
| 10 | 10 |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 if (this._mode !== UI.ListMode.EqualHeightItems) | 193 if (this._mode !== UI.ListMode.EqualHeightItems) |
| 194 throw 'Only supported in equal height items mode'; | 194 throw 'Only supported in equal height items mode'; |
| 195 this._fixedHeight = 0; | 195 this._fixedHeight = 0; |
| 196 if (this._items.length) { | 196 if (this._items.length) { |
| 197 this._itemToElement.clear(); | 197 this._itemToElement.clear(); |
| 198 this._invalidate(0, this._items.length, this._items.length); | 198 this._invalidate(0, this._items.length, this._items.length); |
| 199 } | 199 } |
| 200 } | 200 } |
| 201 | 201 |
| 202 /** | 202 /** |
| 203 * @param {!Element} element | 203 * @param {?Node} node |
| 204 * @return {?T} | 204 * @return {?T} |
| 205 */ | 205 */ |
| 206 itemForElement(element) { | 206 itemForNode(node) { |
| 207 while (node && node.parentNodeOrShadowHost() !== this.element) |
| 208 node = node.parentNodeOrShadowHost(); |
| 209 if (!node) |
| 210 return null; |
| 211 var element = /** @type {!Element} */ (node); |
| 207 var index = this._items.findIndex(item => this._itemToElement.get(item) ===
element); | 212 var index = this._items.findIndex(item => this._itemToElement.get(item) ===
element); |
| 208 return index !== -1 ? this._items[index] : null; | 213 return index !== -1 ? this._items[index] : null; |
| 209 } | 214 } |
| 210 | 215 |
| 211 /** | 216 /** |
| 212 * @param {T} item | 217 * @param {T} item |
| 213 * @param {boolean=} center | 218 * @param {boolean=} center |
| 214 */ | 219 */ |
| 215 scrollItemIntoView(item, center) { | 220 scrollItemIntoView(item, center) { |
| 216 var index = this._items.indexOf(item); | 221 var index = this._items.indexOf(item); |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 if (top < scrollTop) | 342 if (top < scrollTop) |
| 338 this._updateViewport(top, viewportHeight); | 343 this._updateViewport(top, viewportHeight); |
| 339 else if (bottom > scrollTop + viewportHeight) | 344 else if (bottom > scrollTop + viewportHeight) |
| 340 this._updateViewport(bottom - viewportHeight, viewportHeight); | 345 this._updateViewport(bottom - viewportHeight, viewportHeight); |
| 341 } | 346 } |
| 342 | 347 |
| 343 /** | 348 /** |
| 344 * @param {!Event} event | 349 * @param {!Event} event |
| 345 */ | 350 */ |
| 346 _onClick(event) { | 351 _onClick(event) { |
| 347 var node = event.target; | 352 var item = this.itemForNode(/** @type {?Node} */ (event.target)); |
| 348 while (node && node.parentNodeOrShadowHost() !== this.element) | 353 if (item && this._delegate.isItemSelectable(item)) |
| 349 node = node.parentNodeOrShadowHost(); | |
| 350 if (!node) | |
| 351 return; | |
| 352 var element = /** @type {!Element} */ (node); | |
| 353 var item = this.itemForElement(element); | |
| 354 if (item) | |
| 355 this.selectItem(item); | 354 this.selectItem(item); |
| 356 } | 355 } |
| 357 | 356 |
| 358 /** | 357 /** |
| 359 * @param {!Event} event | 358 * @param {!Event} event |
| 360 */ | 359 */ |
| 361 _onKeyDown(event) { | 360 _onKeyDown(event) { |
| 362 var selected = false; | 361 var selected = false; |
| 363 switch (event.key) { | 362 switch (event.key) { |
| 364 case 'ArrowUp': | 363 case 'ArrowUp': |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 651 this._firstIndex = firstIndex; | 650 this._firstIndex = firstIndex; |
| 652 this._lastIndex = lastIndex; | 651 this._lastIndex = lastIndex; |
| 653 this._topHeight = this._offsetAtIndex(firstIndex); | 652 this._topHeight = this._offsetAtIndex(firstIndex); |
| 654 this._topElement.style.height = this._topHeight + 'px'; | 653 this._topElement.style.height = this._topHeight + 'px'; |
| 655 this._bottomHeight = totalHeight - this._offsetAtIndex(lastIndex); | 654 this._bottomHeight = totalHeight - this._offsetAtIndex(lastIndex); |
| 656 this._bottomElement.style.height = this._bottomHeight + 'px'; | 655 this._bottomElement.style.height = this._bottomHeight + 'px'; |
| 657 this._renderedHeight = totalHeight; | 656 this._renderedHeight = totalHeight; |
| 658 this.element.scrollTop = scrollTop; | 657 this.element.scrollTop = scrollTop; |
| 659 } | 658 } |
| 660 }; | 659 }; |
| OLD | NEW |