| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <!-- | 2 <!-- |
| 3 Copyright (c) 2014 The Chromium Authors. All rights reserved. | 3 Copyright (c) 2014 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 | 7 |
| 8 <link rel="stylesheet" href="/tracing/ui/base/list_view.css"> | 8 <link rel="stylesheet" href="/tracing/ui/base/list_view.css"> |
| 9 | 9 |
| 10 <link rel="import" href="/tracing/base/event.html"> | 10 <link rel="import" href="/tracing/base/event.html"> |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 Polymer.dom(item).classList.add('list-item'); | 44 Polymer.dom(item).classList.add('list-item'); |
| 45 item.addEventListener('click', this.onItemClicked_, true); | 45 item.addEventListener('click', this.onItemClicked_, true); |
| 46 | 46 |
| 47 var listView = this; | 47 var listView = this; |
| 48 Object.defineProperty( | 48 Object.defineProperty( |
| 49 item, | 49 item, |
| 50 'selected', { | 50 'selected', { |
| 51 configurable: true, | 51 configurable: true, |
| 52 set: function(value) { | 52 set: function(value) { |
| 53 var oldSelection = listView.selectedElement; | 53 var oldSelection = listView.selectedElement; |
| 54 if (oldSelection && oldSelection !== this && value) | 54 if (oldSelection && oldSelection !== this && value) { |
| 55 Polymer.dom(listView.selectedElement).removeAttribute( | 55 Polymer.dom(listView.selectedElement).removeAttribute( |
| 56 'selected'); | 56 'selected'); |
| 57 if (value) | 57 } |
| 58 if (value) { |
| 58 Polymer.dom(this).setAttribute('selected', 'selected'); | 59 Polymer.dom(this).setAttribute('selected', 'selected'); |
| 59 else | 60 } else { |
| 60 Polymer.dom(this).removeAttribute('selected'); | 61 Polymer.dom(this).removeAttribute('selected'); |
| 62 } |
| 61 var newSelection = listView.selectedElement; | 63 var newSelection = listView.selectedElement; |
| 62 if (newSelection !== oldSelection) | 64 if (newSelection !== oldSelection) { |
| 63 tr.b.dispatchSimpleEvent(listView, 'selection-changed', false); | 65 tr.b.dispatchSimpleEvent(listView, 'selection-changed', false); |
| 66 } |
| 64 }, | 67 }, |
| 65 get: function() { | 68 get: function() { |
| 66 return this.hasAttribute('selected'); | 69 return this.hasAttribute('selected'); |
| 67 } | 70 } |
| 68 }); | 71 }); |
| 69 }, | 72 }, |
| 70 | 73 |
| 71 undecorateChild_: function(item) { | 74 undecorateChild_: function(item) { |
| 72 this.selectionChanged_ |= item.selected; | 75 this.selectionChanged_ |= item.selected; |
| 73 | 76 |
| 74 Polymer.dom(item).classList.remove('list-item'); | 77 Polymer.dom(item).classList.remove('list-item'); |
| 75 item.removeEventListener('click', this.onItemClicked_); | 78 item.removeEventListener('click', this.onItemClicked_); |
| 76 delete item.selected; | 79 delete item.selected; |
| 77 }, | 80 }, |
| 78 | 81 |
| 79 beginDecorating_: function() { | 82 beginDecorating_: function() { |
| 80 this.selectionChanged_ = false; | 83 this.selectionChanged_ = false; |
| 81 }, | 84 }, |
| 82 | 85 |
| 83 doneDecoratingForNow_: function() { | 86 doneDecoratingForNow_: function() { |
| 84 if (this.selectionChanged_) | 87 if (this.selectionChanged_) { |
| 85 tr.b.dispatchSimpleEvent(this, 'selection-changed', false); | 88 tr.b.dispatchSimpleEvent(this, 'selection-changed', false); |
| 89 } |
| 86 }, | 90 }, |
| 87 | 91 |
| 88 get selectedElement() { | 92 get selectedElement() { |
| 89 var el = Polymer.dom(this).querySelector('.list-item[selected]'); | 93 var el = Polymer.dom(this).querySelector('.list-item[selected]'); |
| 90 if (!el) | 94 if (!el) return undefined; |
| 91 return undefined; | |
| 92 return el; | 95 return el; |
| 93 }, | 96 }, |
| 94 | 97 |
| 95 set selectedElement(el) { | 98 set selectedElement(el) { |
| 96 if (!el) { | 99 if (!el) { |
| 97 if (this.selectedElement) | 100 if (this.selectedElement) { |
| 98 this.selectedElement.selected = false; | 101 this.selectedElement.selected = false; |
| 102 } |
| 99 return; | 103 return; |
| 100 } | 104 } |
| 101 | 105 |
| 102 if (el.parentElement !== this) | 106 if (el.parentElement !== this) { |
| 103 throw new Error( | 107 throw new Error( |
| 104 'Can only select elements that are children of this list view'); | 108 'Can only select elements that are children of this list view'); |
| 109 } |
| 105 el.selected = true; | 110 el.selected = true; |
| 106 }, | 111 }, |
| 107 | 112 |
| 108 getElementByIndex: function(index) { | 113 getElementByIndex: function(index) { |
| 109 return Polymer.dom(this) | 114 return Polymer.dom(this) |
| 110 .querySelector('.list-item:nth-child(' + index + ')'); | 115 .querySelector('.list-item:nth-child(' + index + ')'); |
| 111 }, | 116 }, |
| 112 | 117 |
| 113 clear: function() { | 118 clear: function() { |
| 114 var changed = this.selectedElement !== undefined; | 119 var changed = this.selectedElement !== undefined; |
| 115 tr.ui.b.ContainerThatDecoratesItsChildren.prototype.clear.call(this); | 120 tr.ui.b.ContainerThatDecoratesItsChildren.prototype.clear.call(this); |
| 116 if (changed) | 121 if (changed) { |
| 117 tr.b.dispatchSimpleEvent(this, 'selection-changed', false); | 122 tr.b.dispatchSimpleEvent(this, 'selection-changed', false); |
| 123 } |
| 118 }, | 124 }, |
| 119 | 125 |
| 120 onItemClicked_: function(e) { | 126 onItemClicked_: function(e) { |
| 121 var currentSelectedElement = this.selectedElement; | 127 var currentSelectedElement = this.selectedElement; |
| 122 if (currentSelectedElement) | 128 if (currentSelectedElement) { |
| 123 Polymer.dom(currentSelectedElement).removeAttribute('selected'); | 129 Polymer.dom(currentSelectedElement).removeAttribute('selected'); |
| 130 } |
| 124 var element = e.target; | 131 var element = e.target; |
| 125 while (element.parentElement !== this) | 132 while (element.parentElement !== this) { |
| 126 element = element.parentElement; | 133 element = element.parentElement; |
| 127 if (element !== currentSelectedElement) | 134 } |
| 135 if (element !== currentSelectedElement) { |
| 128 Polymer.dom(element).setAttribute('selected', 'selected'); | 136 Polymer.dom(element).setAttribute('selected', 'selected'); |
| 137 } |
| 129 tr.b.dispatchSimpleEvent(this, 'selection-changed', false); | 138 tr.b.dispatchSimpleEvent(this, 'selection-changed', false); |
| 130 }, | 139 }, |
| 131 | 140 |
| 132 onKeyDown_: function(e) { | 141 onKeyDown_: function(e) { |
| 133 if (this.selectedElement === undefined) | 142 if (this.selectedElement === undefined) return; |
| 134 return; | |
| 135 | 143 |
| 136 if (e.keyCode === 38) { // Up arrow. | 144 if (e.keyCode === 38) { // Up arrow. |
| 137 var prev = Polymer.dom(this.selectedElement).previousSibling; | 145 var prev = Polymer.dom(this.selectedElement).previousSibling; |
| 138 if (prev) { | 146 if (prev) { |
| 139 prev.selected = true; | 147 prev.selected = true; |
| 140 tr.ui.b.scrollIntoViewIfNeeded(prev); | 148 tr.ui.b.scrollIntoViewIfNeeded(prev); |
| 141 e.preventDefault(); | 149 e.preventDefault(); |
| 142 return true; | 150 return true; |
| 143 } | 151 } |
| 144 } else if (e.keyCode === 40) { // Down arrow. | 152 } else if (e.keyCode === 40) { // Down arrow. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 159 return item; | 167 return item; |
| 160 } | 168 } |
| 161 | 169 |
| 162 }; | 170 }; |
| 163 | 171 |
| 164 return { | 172 return { |
| 165 ListView, | 173 ListView, |
| 166 }; | 174 }; |
| 167 }); | 175 }); |
| 168 </script> | 176 </script> |
| OLD | NEW |