OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 * @fileoverview | 6 * @fileoverview |
7 * 'settings-main' displays the selected settings page. | 7 * 'settings-main' displays the selected settings page. |
8 */ | 8 */ |
9 Polymer({ | 9 Polymer({ |
10 is: 'settings-main', | 10 is: 'settings-main', |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
78 }.bind(this)); | 78 }.bind(this)); |
79 | 79 |
80 }, | 80 }, |
81 | 81 |
82 /** @private */ | 82 /** @private */ |
83 overscrollChanged_: function() { | 83 overscrollChanged_: function() { |
84 if (!this.overscroll_ && this.boundScroll_) { | 84 if (!this.overscroll_ && this.boundScroll_) { |
85 this.parentNode.scroller.removeEventListener('scroll', this.boundScroll_); | 85 this.parentNode.scroller.removeEventListener('scroll', this.boundScroll_); |
86 this.boundScroll_ = null; | 86 this.boundScroll_ = null; |
87 } else if (this.overscroll_ && !this.boundScroll_) { | 87 } else if (this.overscroll_ && !this.boundScroll_) { |
88 this.boundScroll_ = this.scrollEventListener_.bind(this); | 88 this.boundScroll_ = this.setOverscroll_.bind(this, 0); |
89 this.parentNode.scroller.addEventListener('scroll', this.boundScroll_); | 89 this.parentNode.scroller.addEventListener('scroll', this.boundScroll_); |
90 } | 90 } |
91 }, | 91 }, |
92 | 92 |
93 /** @private */ | 93 /** |
94 scrollEventListener_: function() { | 94 * Sets the overscroll padding. Never forces a scroll, i.e., always leaves |
95 * any currently visible overflow as-is. | |
96 * @param {number=} minHeight The minimum overscroll height needed. | |
Dan Beam
2016/08/09 23:26:40
opt_minHeight
michaelpg
2016/08/09 23:46:09
Done.
| |
97 */ | |
98 setOverscroll_: function(opt_minHeight) { | |
95 var scroller = this.parentNode.scroller; | 99 var scroller = this.parentNode.scroller; |
96 var overscroll = this.$.overscroll; | 100 var overscroll = this.$.overscroll; |
97 var visibleBottom = scroller.scrollTop + scroller.clientHeight; | 101 var visibleBottom = scroller.scrollTop + scroller.clientHeight; |
98 var overscrollBottom = overscroll.offsetTop + overscroll.scrollHeight; | 102 var overscrollBottom = overscroll.offsetTop + overscroll.scrollHeight; |
99 // How much of the overscroll is visible (may be negative). | 103 // How much of the overscroll is visible (may be negative). |
100 var visibleOverscroll = overscroll.scrollHeight - | 104 var visibleOverscroll = overscroll.scrollHeight - |
101 (overscrollBottom - visibleBottom); | 105 (overscrollBottom - visibleBottom); |
102 this.overscroll_ = Math.max(0, visibleOverscroll); | 106 if (typeof opt_minHeight == 'undefined') |
107 opt_minHeight = 0; | |
108 this.overscroll_ = Math.max(opt_minHeight, visibleOverscroll); | |
Dan Beam
2016/08/09 23:26:40
nit: opt_minHeight || 0
michaelpg
2016/08/09 23:46:09
Done.
| |
103 }, | 109 }, |
104 | 110 |
105 /** | 111 /** |
106 * @param {boolean} opened Whether the menu is expanded. | 112 * @param {boolean} opened Whether the menu is expanded. |
107 * @return {string} Which icon to use. | 113 * @return {string} Which icon to use. |
108 * @private | 114 * @private |
109 */ | 115 */ |
110 arrowState_: function(opened) { | 116 arrowState_: function(opened) { |
111 return opened ? 'settings:arrow-drop-up' : 'cr:arrow-drop-down'; | 117 return opened ? 'settings:arrow-drop-up' : 'cr:arrow-drop-down'; |
112 }, | 118 }, |
(...skipping 28 matching lines...) Expand all Loading... | |
141 this.pageVisibility.advancedSettings !== false); | 147 this.pageVisibility.advancedSettings !== false); |
142 this.advancedToggleExpanded_ = true; | 148 this.advancedToggleExpanded_ = true; |
143 } | 149 } |
144 } | 150 } |
145 | 151 |
146 // Wait for any other changes prior to calculating the overflow padding. | 152 // Wait for any other changes prior to calculating the overflow padding. |
147 setTimeout(function() { | 153 setTimeout(function() { |
148 // Ensure any dom-if reflects the current properties. | 154 // Ensure any dom-if reflects the current properties. |
149 Polymer.dom.flush(); | 155 Polymer.dom.flush(); |
150 | 156 |
151 this.overscroll_ = this.overscrollHeight_(); | 157 this.setOverscroll_(this.overscrollHeight_()); |
152 }.bind(this)); | 158 }.bind(this)); |
153 }, | 159 }, |
154 | 160 |
155 /** | 161 /** |
156 * Return the height that the overscroll padding should be set to. | 162 * Return the height that the overscroll padding should be set to. |
157 * This is used to determine how much padding to apply to the end of the | 163 * This is used to determine how much padding to apply to the end of the |
158 * content so that the last element may align with the top of the content | 164 * content so that the last element may align with the top of the content |
159 * area. | 165 * area. |
160 * @return {number} | 166 * @return {number} |
161 * @private | 167 * @private |
162 */ | 168 */ |
163 overscrollHeight_: function() { | 169 overscrollHeight_: function() { |
164 var route = settings.getCurrentRoute(); | 170 var route = settings.getCurrentRoute(); |
165 if (route.subpage.length != 0 || this.showPages_.about) | 171 if (route.subpage.length != 0 || this.showPages_.about) |
166 return 0; | 172 return 0; |
167 | 173 |
168 var query = 'settings-section[section="' + route.section + '"]'; | 174 var query = 'settings-section[section="' + route.section + '"]'; |
169 var topSection = this.$$('settings-basic-page').$$(query); | 175 var topSection = this.$$('settings-basic-page').$$(query); |
170 if (!topSection && this.showPages_.advanced) | 176 if (!topSection && this.showPages_.advanced) |
171 topSection = this.$$('settings-advanced-page').$$(query); | 177 topSection = this.$$('settings-advanced-page').$$(query); |
172 | 178 |
173 if (!topSection || !topSection.offsetParent) | 179 if (!topSection || !topSection.offsetParent) |
174 return 0; | 180 return 0; |
175 | 181 |
176 // Offset to the selected section (relative to the scrolling window). | 182 // Offset to the selected section (relative to the scrolling window). |
177 let sectionTop = topSection.offsetParent.offsetTop + topSection.offsetTop; | 183 let sectionTop = topSection.offsetParent.offsetTop + topSection.offsetTop; |
178 // The height of the selected section and remaining content (sections). | 184 // The height of the selected section and remaining content (sections). |
179 let heightOfShownSections = this.$.overscroll.offsetTop - sectionTop; | 185 let heightOfShownSections = this.$.overscroll.offsetTop - sectionTop; |
180 return Math.max(0, this.parentNode.scrollHeight - heightOfShownSections); | 186 return Math.max(0, this.parentNode.scrollHeight - heightOfShownSections); |
Dan Beam
2016/08/09 23:26:40
so can we simplify any of this yet?
michaelpg
2016/08/09 23:46:09
dschuyler? I think this is still necessary to *gro
dschuyler
2016/08/10 00:06:26
I think that something called overscrollHeight_ sh
michaelpg
2016/08/10 03:12:27
Ack (unchanged)
| |
181 }, | 187 }, |
182 | 188 |
183 /** @private */ | 189 /** @private */ |
184 toggleAdvancedPage_: function() { | 190 toggleAdvancedPage_: function() { |
185 this.fire('toggle-advanced-page', !this.advancedToggleExpanded_); | 191 this.fire('toggle-advanced-page', !this.advancedToggleExpanded_); |
186 }, | 192 }, |
187 | 193 |
188 /** | 194 /** |
189 * Navigates to the default search page (if necessary). | 195 * Navigates to the default search page (if necessary). |
190 * @private | 196 * @private |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
232 | 238 |
233 /** | 239 /** |
234 * @param {(boolean|undefined)} visibility | 240 * @param {(boolean|undefined)} visibility |
235 * @return {boolean} True unless visibility is false. | 241 * @return {boolean} True unless visibility is false. |
236 * @private | 242 * @private |
237 */ | 243 */ |
238 showAdvancedSettings_: function(visibility) { | 244 showAdvancedSettings_: function(visibility) { |
239 return visibility !== false; | 245 return visibility !== false; |
240 }, | 246 }, |
241 }); | 247 }); |
OLD | NEW |