Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(281)

Side by Side Diff: chrome/browser/resources/settings/settings_main/settings_main.js

Issue 2230123002: MD Settings: fix collapse animation once and for all (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Overscroll2
Patch Set: rebase, rebase fix (doWhenReady) Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 * @typedef {{about: boolean, basic: boolean, advanced: boolean}} 6 * @typedef {{about: boolean, basic: boolean, advanced: boolean}}
7 */ 7 */
8 var MainPageVisibility; 8 var MainPageVisibility;
9 9
10 /** 10 /**
(...skipping 13 matching lines...) Expand all
24 type: Object, 24 type: Object,
25 notify: true, 25 notify: true,
26 }, 26 },
27 27
28 /** @private */ 28 /** @private */
29 advancedToggleExpanded_: { 29 advancedToggleExpanded_: {
30 type: Boolean, 30 type: Boolean,
31 value: false, 31 value: false,
32 }, 32 },
33 33
34 /** @private */ 34 /**
35 inSubpage_: Boolean, 35 * True if a section is fully expanded to hide other sections beneath it.
36 * Not true otherwise (even while animating a section open/closed).
37 * @private
38 */
39 hasExpandedSection_: Boolean,
36 40
37 /** @private */ 41 /** @private */
38 overscroll_: { 42 overscroll_: {
39 type: Number, 43 type: Number,
40 observer: 'overscrollChanged_', 44 observer: 'overscrollChanged_',
41 }, 45 },
42 46
43 /** 47 /**
44 * Controls which main pages are displayed via dom-ifs. 48 * Controls which main pages are displayed via dom-ifs.
45 * @private {!MainPageVisibility} 49 * @private {!MainPageVisibility}
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 value: function() { return {}; }, 87 value: function() { return {}; },
84 }, 88 },
85 }, 89 },
86 90
87 /** @override */ 91 /** @override */
88 attached: function() { 92 attached: function() {
89 document.addEventListener('toggle-advanced-page', function(e) { 93 document.addEventListener('toggle-advanced-page', function(e) {
90 this.advancedToggleExpanded_ = e.detail; 94 this.advancedToggleExpanded_ = e.detail;
91 this.currentRouteChanged(settings.getCurrentRoute()); 95 this.currentRouteChanged(settings.getCurrentRoute());
92 }.bind(this)); 96 }.bind(this));
97
98 var currentRoute = settings.getCurrentRoute();
99 this.hasExpandedSection_ = currentRoute && currentRoute.isSubpage();
93 }, 100 },
94 101
95 /** @private */ 102 /** @private */
96 overscrollChanged_: function() { 103 overscrollChanged_: function() {
97 if (!this.overscroll_ && this.boundScroll_) { 104 if (!this.overscroll_ && this.boundScroll_) {
98 this.offsetParent.removeEventListener('scroll', this.boundScroll_); 105 this.offsetParent.removeEventListener('scroll', this.boundScroll_);
99 this.boundScroll_ = null; 106 this.boundScroll_ = null;
100 } else if (this.overscroll_ && !this.boundScroll_) { 107 } else if (this.overscroll_ && !this.boundScroll_) {
101 this.boundScroll_ = this.setOverscroll_.bind(this, 0); 108 this.boundScroll_ = this.setOverscroll_.bind(this, 0);
102 this.offsetParent.addEventListener('scroll', this.boundScroll_); 109 this.offsetParent.addEventListener('scroll', this.boundScroll_);
(...skipping 26 matching lines...) Expand all
129 arrowState_: function(opened) { 136 arrowState_: function(opened) {
130 return opened ? 'settings:arrow-drop-up' : 'cr:arrow-drop-down'; 137 return opened ? 'settings:arrow-drop-up' : 'cr:arrow-drop-down';
131 }, 138 },
132 139
133 /** 140 /**
134 * @return {boolean} 141 * @return {boolean}
135 * @private 142 * @private
136 */ 143 */
137 showAdvancedToggle_: function() { 144 showAdvancedToggle_: function() {
138 var inSearchMode = !!this.previousShowPages_; 145 var inSearchMode = !!this.previousShowPages_;
139 return this.showPages_.basic && !this.inSubpage_ && !inSearchMode; 146 return !inSearchMode && this.showPages_.basic && !this.hasExpandedSection_;
140 }, 147 },
141 148
142 /** @protected */
143 currentRouteChanged: function(newRoute) { 149 currentRouteChanged: function(newRoute) {
144 this.inSubpage_ = newRoute.isSubpage(); 150 // When the route changes from a sub-page to the main page, immediately
145 this.style.height = this.inSubpage_ ? '100%' : ''; 151 // update hasExpandedSection_ to unhide the other sections.
152 if (!newRoute.isSubpage())
153 this.hasExpandedSection_ = false;
146 154
147 if (settings.Route.ABOUT.contains(newRoute)) { 155 this.updatePagesShown_();
156 },
157
158 /** @private */
159 onSubpageExpand_: function() {
160 // The subpage finished expanding fully. Hide pages other than the current
161 // section's parent page.
162 this.hasExpandedSection_ = true;
163 this.updatePagesShown_();
164 },
165
166 /**
167 * Updates the hidden state of the about, basic and advanced pages, based on
168 * the current route and the Advanced toggle state.
169 * @private
170 */
171 updatePagesShown_: function() {
172 var currentRoute = settings.getCurrentRoute();
173 if (settings.Route.ABOUT.contains(currentRoute)) {
148 this.showPages_ = {about: true, basic: false, advanced: false}; 174 this.showPages_ = {about: true, basic: false, advanced: false};
149 } else { 175 } else {
150 this.showPages_ = { 176 this.showPages_ = {
151 about: false, 177 about: false,
152 basic: settings.Route.BASIC.contains(newRoute) || !this.inSubpage_, 178 basic: settings.Route.BASIC.contains(currentRoute) ||
153 advanced: settings.Route.ADVANCED.contains(newRoute) || 179 !this.hasExpandedSection_,
154 (!this.inSubpage_ && this.advancedToggleExpanded_), 180 advanced: settings.Route.ADVANCED.contains(currentRoute) ||
181 (!this.hasExpandedSection_ && this.advancedToggleExpanded_),
155 }; 182 };
156 183
157 if (this.showPages_.advanced) { 184 if (this.showPages_.advanced) {
158 assert(!this.pageVisibility || 185 assert(!this.pageVisibility ||
159 this.pageVisibility.advancedSettings !== false); 186 this.pageVisibility.advancedSettings !== false);
160 this.advancedToggleExpanded_ = true; 187 this.advancedToggleExpanded_ = true;
161 } 188 }
162 } 189 }
163 190
164 // Wait for any other changes prior to calculating the overflow padding. 191 // Wait for any other changes prior to calculating the overflow padding.
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 310
284 /** 311 /**
285 * @param {(boolean|undefined)} visibility 312 * @param {(boolean|undefined)} visibility
286 * @return {boolean} True unless visibility is false. 313 * @return {boolean} True unless visibility is false.
287 * @private 314 * @private
288 */ 315 */
289 showAdvancedSettings_: function(visibility) { 316 showAdvancedSettings_: function(visibility) {
290 return visibility !== false; 317 return visibility !== false;
291 }, 318 },
292 }); 319 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698