Chromium Code Reviews| 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="import" href="/tracing/ui/analysis/analysis_sub_view.html"> | |
| 9 | |
| 8 <!-- | 10 <!-- |
| 9 @fileoverview A series of tabs for the analysis view that controls which | 11 @fileoverview A series of tabs for the analysis view that controls which |
| 10 analysis sub-view is being displayed. | 12 analysis sub-view is being displayed. |
| 11 | 13 |
| 12 We follow a fairly standard web convention of backing our tabs with hidden radio | 14 We follow a fairly standard web convention of backing our tabs with hidden radio |
| 13 buttons but visible radio button labels (the tabs themselves) which toggle the | 15 buttons but visible radio button labels (the tabs themselves) which toggle the |
| 14 input element when clicked. Using hidden radio buttons makes sense, as both tabs | 16 input element when clicked. Using hidden radio buttons makes sense, as both tabs |
| 15 and radio buttons are input elements that allow user selection through clicking | 17 and radio buttons are input elements that allow user selection through clicking |
| 16 and limit users to having one option selected at a time. | 18 and limit users to having one option selected at a time. |
| 17 --> | 19 --> |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 48 margin: 5px 0px 0px 15px; | 50 margin: 5px 0px 0px 15px; |
| 49 padding: 3px 10px 3px 10px; | 51 padding: 3px 10px 3px 10px; |
| 50 } | 52 } |
| 51 | 53 |
| 52 #tabs input[type=radio]:checked ~ label { | 54 #tabs input[type=radio]:checked ~ label { |
| 53 background-color: white; | 55 background-color: white; |
| 54 border: 1px solid #8e8e8e; | 56 border: 1px solid #8e8e8e; |
| 55 border-bottom: 1px solid white; | 57 border-bottom: 1px solid white; |
| 56 } | 58 } |
| 57 </style> | 59 </style> |
| 58 <div id='tabs'> | 60 <div id='tabs' hidden="[[tabsHidden]]"> |
|
charliea (OOO until 10-5)
2016/07/19 15:08:08
The value set view that Ben created for results2.h
| |
| 59 <label id=selection_description>[[label_]]</label> | 61 <label id=selection_description>[[label_]]</label> |
| 60 <template is=dom-repeat items=[[subViews_]]> | 62 <template is=dom-repeat items=[[subViews_]]> |
| 61 <tab> | 63 <tab> |
| 62 <input type=radio name=tabs id$=[[computeRadioId_(item)]] | 64 <input type=radio name=tabs id$=[[computeRadioId_(item)]] |
| 63 on-change='onTabChanged_' | 65 on-change='onTabChanged_' |
| 64 checked$='[[isChecked_(item)]]' /> | 66 checked$='[[isChecked_(item)]]' /> |
| 65 <label for$=[[computeRadioId_(item)]]>[[item.tabLabel]]</label> | 67 <label for$=[[computeRadioId_(item)]]>[[item.tabLabel]]</label> |
| 66 </tab> | 68 </tab> |
| 67 </template> | 69 </template> |
| 68 </div> | 70 </div> |
| 69 <div id='subView'></div> | 71 <div id='subView'></div> |
| 70 <content> | 72 <content> |
| 71 </content> | 73 </content> |
| 72 </template> | 74 </template> |
| 73 </dom-module> | 75 </dom-module> |
| 74 <script> | 76 <script> |
| 75 'use strict'; | 77 'use strict'; |
| 76 | 78 |
| 77 Polymer({ | 79 Polymer({ |
| 78 is: 'tr-ui-a-tab-view', | 80 is: 'tr-ui-a-tab-view', |
| 79 | 81 |
| 80 properties: { | 82 properties: { |
| 81 label_: { | 83 label_: { |
| 82 type: String, | 84 type: String, |
| 83 value: () => '' | 85 value: () => '' |
| 84 }, | 86 }, |
| 87 selectedSubView_: Object, | |
| 85 subViews_: { | 88 subViews_: { |
| 86 type: Array, | 89 type: Array, |
| 87 value: () => [] | 90 value: () => [] |
| 88 }, | 91 }, |
| 89 selectedSubView_: Object | 92 tabsHidden: { |
| 93 type: Boolean, | |
| 94 value: false | |
| 95 } | |
| 90 }, | 96 }, |
| 91 | 97 |
| 92 set label(newLabel) { | 98 set label(newLabel) { |
| 93 this.set('label_', newLabel); | 99 this.set('label_', newLabel); |
| 94 }, | 100 }, |
| 95 | 101 |
| 96 get tabs() { | 102 get tabs() { |
| 97 return this.get('subViews_'); | 103 return this.get('subViews_'); |
| 98 }, | 104 }, |
| 99 | 105 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 115 | 121 |
| 116 this.fire('selected-tab-change'); | 122 this.fire('selected-tab-change'); |
| 117 }, | 123 }, |
| 118 | 124 |
| 119 clearSubViews: function() { | 125 clearSubViews: function() { |
| 120 this.splice('subViews_', 0, this.subViews_.length); | 126 this.splice('subViews_', 0, this.subViews_.length); |
| 121 this.selectedSubView = undefined; | 127 this.selectedSubView = undefined; |
| 122 }, | 128 }, |
| 123 | 129 |
| 124 addSubView: function(subView) { | 130 addSubView: function(subView) { |
| 125 if (!(subView instanceof HTMLElement) || | |
|
charliea (OOO until 10-5)
2016/07/19 15:08:06
When I rewrote the tab view, I assumed that it wou
| |
| 126 !subView.behaviors || | |
| 127 subView.behaviors.indexOf( | |
| 128 tr.ui.analysis.behaviors.AnalysisSubView) < 0) { | |
| 129 throw new Error('Sub-view being added must be a registered Polymer ' + | |
| 130 'element with the sub-view behavior'); | |
| 131 } | |
| 132 | |
| 133 if (!this.selectedSubView_) | 131 if (!this.selectedSubView_) |
| 134 this.selectedSubView = subView; | 132 this.selectedSubView = subView; |
| 135 | 133 |
| 136 this.push('subViews_', subView); | 134 this.push('subViews_', subView); |
| 137 }, | 135 }, |
| 138 | 136 |
| 139 onTabChanged_: function(event) { | 137 onTabChanged_: function(event) { |
| 140 this.selectedSubView = event.model.item; | 138 this.selectedSubView = event.model.item; |
| 141 }, | 139 }, |
| 142 | 140 |
| 143 isChecked_: function(subView) { | 141 isChecked_: function(subView) { |
| 144 return this.selectedSubView_ === subView; | 142 return this.selectedSubView_ === subView; |
| 145 }, | 143 }, |
| 146 | 144 |
| 147 computeRadioId_: function(subView) { | 145 computeRadioId_: function(subView) { |
| 148 // We can't just use the tagName as the radio's ID because there are | 146 // We can't just use the tagName as the radio's ID because there are |
| 149 // instances where a single subview type can handle multiple event types, | 147 // instances where a single subview type can handle multiple event types, |
| 150 // and thus might be present multiple times in a single tab view. In order | 148 // and thus might be present multiple times in a single tab view. In order |
| 151 // to avoid the case where we might have two tabs with the same ID, we | 149 // to avoid the case where we might have two tabs with the same ID, we |
| 152 // uniquify this ID by appending the tab's label with all spaces replaced | 150 // uniquify this ID by appending the tab's label with all spaces replaced |
| 153 // by dashes (because spaces aren't allowed in HTML IDs). | 151 // by dashes (because spaces aren't allowed in HTML IDs). |
| 154 return subView.tagName + '-' + subView.tabLabel.replace(/ /g, '-'); | 152 return subView.tagName + '-' + subView.tabLabel.replace(/ /g, '-'); |
| 155 } | 153 } |
| 156 }); | 154 }); |
| 157 </script> | 155 </script> |
| OLD | NEW |