Chromium Code Reviews| Index: chrome/browser/resources/settings/settings_main/settings_main.js |
| diff --git a/chrome/browser/resources/settings/settings_main/settings_main.js b/chrome/browser/resources/settings/settings_main/settings_main.js |
| index 62a76e1a425eae45f5ceeeba7fde9f381c50c372..8ca37be59b2236007fb7ea410752939300cec8dc 100644 |
| --- a/chrome/browser/resources/settings/settings_main/settings_main.js |
| +++ b/chrome/browser/resources/settings/settings_main/settings_main.js |
| @@ -34,8 +34,12 @@ Polymer({ |
| value: false, |
| }, |
| - /** @private */ |
| - inSubpage_: Boolean, |
| + /** |
| + * True if a section is fully expanded to hide other sections beneath it. |
| + * Not true otherwise (even while animating a section open/closed). |
| + * @private |
| + */ |
| + hasExpandedSection_: Boolean, |
| /** |
| * Controls which main pages are displayed via dom-ifs. |
| @@ -71,6 +75,12 @@ Polymer({ |
| }, |
| }, |
| + listeners: { |
| + // Used to control overscroll behavior while animating sections. |
|
michaelpg
2016/08/04 07:07:36
Dave, these events let transitions actually start
|
| + 'overscroll-recalc': 'onOverscrollRecalc_', |
| + 'overscroll-suppress': 'onOverscrollSuppress_', |
| + }, |
| + |
| /** @override */ |
| attached: function() { |
| document.addEventListener('toggle-advanced-page', function(e) { |
| @@ -78,6 +88,20 @@ Polymer({ |
| settings.navigateTo(this.advancedToggleExpanded_ ? |
| settings.Route.ADVANCED : settings.Route.BASIC); |
| }.bind(this)); |
| + |
| + this.hasExpandedSection_ = |
| + this.currentRoute && this.currentRoute.subpage.length > 0; |
| + }, |
| + |
| + /** @private Enables overscroll calculating and recalculates it. */ |
| + onOverscrollRecalc_: function() { |
| + this.overscrollSuppressed_ = false; |
| + this.$.overscroll.style.paddingBottom = this.overscrollHeight_() + 'px'; |
|
dschuyler
2016/08/04 18:36:51
The overscroll calculation changed in a CL yesterd
Dan Beam
2016/08/05 00:47:06
yep, this it out of date
|
| + }, |
| + |
| + /** @private Disables overscroll calculating. */ |
| + onOverscrollSuppress_: function() { |
| + this.overscrollSuppressed_ = true; |
| }, |
| /** |
| @@ -91,29 +115,47 @@ Polymer({ |
| /** |
| * @param {boolean} showBasicPage |
| - * @param {boolean} inSubpage |
| + * @param {boolean} hasExpandedSection |
| * @return {boolean} |
| * @private |
| */ |
| - showAdvancedToggle_: function(showBasicPage, inSubpage) { |
| - return showBasicPage && !inSubpage; |
| + showAdvancedToggle_: function(showBasicPage, hasExpandedSection) { |
| + return showBasicPage && !hasExpandedSection; |
| + }, |
| + |
| + /** @private */ |
| + currentRouteChanged_: function(newRoute) { |
| + // When the route changes from a sub-page to the main page, immediately |
| + // update hasExpandedSection_ to unhide the other sections. |
| + if (newRoute.subpage.length == 0) |
| + this.hasExpandedSection_ = false; |
| + |
| + this.updatePagesShown_(); |
| + }, |
| + |
| + /** @private */ |
| + onSubpageExpand_: function() { |
| + // The subpage finished expanding fully. Hide pages other than the current |
| + // section's parent page. |
| + this.hasExpandedSection_ = true; |
| + this.updatePagesShown_(); |
| }, |
| /** |
| + * Updates the hidden state of the about, basic and advanced pages, based on |
| + * the current route and the Advanced toggle state. |
| * @private |
| */ |
| - currentRouteChanged_: function(newRoute) { |
| - this.inSubpage_ = newRoute.subpage.length > 0; |
| - this.style.height = this.inSubpage_ ? '100%' : ''; |
| - |
| - if (settings.Route.ABOUT.contains(newRoute)) { |
| + updatePagesShown_: function() { |
| + if (settings.Route.ABOUT.contains(this.currentRoute)) { |
| this.showPages_ = {about: true, basic: false, advanced: false}; |
| } else { |
| this.showPages_ = { |
| about: false, |
| - basic: settings.Route.BASIC.contains(newRoute) || !this.inSubpage_, |
| - advanced: settings.Route.ADVANCED.contains(newRoute) || |
| - (!this.inSubpage_ && this.advancedToggleExpanded_), |
| + basic: settings.Route.BASIC.contains(this.currentRoute) || |
| + !this.hasExpandedSection_, |
| + advanced: settings.Route.ADVANCED.contains(this.currentRoute) || |
| + (!this.hasExpandedSection_ && this.advancedToggleExpanded_), |
| }; |
| if (this.showPages_.advanced) { |
| @@ -128,7 +170,8 @@ Polymer({ |
| // Ensure any dom-if reflects the current properties. |
| Polymer.dom.flush(); |
| - this.$.overscroll.style.paddingBottom = this.overscrollHeight_() + 'px'; |
| + if (!this.overscrollSuppressed_) |
| + this.$.overscroll.style.paddingBottom = this.overscrollHeight_() + 'px'; |
| }.bind(this)); |
| }, |