Chromium Code Reviews| Index: chrome/browser/resources/settings/global_scroll_target_behavior.js |
| diff --git a/chrome/browser/resources/settings/global_scroll_target_behavior.js b/chrome/browser/resources/settings/global_scroll_target_behavior.js |
| index 80623632864d0c234cd6ba31255fef1c7a8f4d0a..2df39bff54672160581ead4661f3b6963f643569 100644 |
| --- a/chrome/browser/resources/settings/global_scroll_target_behavior.js |
| +++ b/chrome/browser/resources/settings/global_scroll_target_behavior.js |
| @@ -4,15 +4,21 @@ |
| /** |
| * @fileoverview |GlobalScrollTargetBehavior| allows an element to be aware of |
| - * the global scroll target. |scrollTarget| will be populated async by |
| - * |setGlobalScrollTarget|. |setGlobalScrollTarget| should only be called once. |
| + * the global scroll target. |
| + * |
| + * |scrollTarget| will be populated async by |setGlobalScrollTarget|. |
| + * |
| + * |subpageScrollTarget| will be equal to the |scrollTarget|, but will only be |
| + * populated when the current route is the |subpageRoute|. |
| + * |
| + * |setGlobalScrollTarget| should only be called once. |
| */ |
| cr.define('settings', function() { |
| var scrollTargetResolver = new PromiseResolver(); |
| /** @polymerBehavior */ |
| - var GlobalScrollTargetBehavior = { |
| + var GlobalScrollTargetBehaviorImpl = { |
| properties: { |
| /** |
| * Read only property for the scroll target. |
| @@ -22,12 +28,47 @@ cr.define('settings', function() { |
| type: Object, |
| readOnly: true, |
| }, |
| + |
| + /** |
| + * Read only property for the scroll target that a subpage should use. |
| + * It will be set/cleared based on the current route. |
| + * @type {HTMLElement} |
| + */ |
| + subpageScrollTarget: { |
| + type: Object, |
| + computed: 'getActiveTarget_(scrollTarget, active_)', |
| + }, |
| + |
| + /** |
| + * The |subpageScrollTarget| should only be set for this route. |
| + * @type {settings.Route} |
| + * @private |
| + */ |
| + subpageRoute: Object, |
| + |
| + /** Whether the |subpageRoute| is active or not. */ |
| + active_: Boolean, |
| }, |
| /** @override */ |
| attached: function() { |
| scrollTargetResolver.promise.then(this._setScrollTarget.bind(this)); |
| }, |
| + |
| + /** @param {!settings.Route} route */ |
| + currentRouteChanged: function(route) { |
| + this.active_ = route == this.subpageRoute; |
| + }, |
| + |
| + /** |
| + * Returns the target only when the route is active. |
| + * @param {HTMLElement} target |
| + * @param {boolean} active |
|
michaelpg
2016/12/06 02:52:56
nit: @return
|
| + * @private |
| + */ |
| + getActiveTarget_: function(target, active) { |
| + return active ? target : null; |
| + }, |
| }; |
| /** |
| @@ -39,7 +80,14 @@ cr.define('settings', function() { |
| }; |
| return { |
| - GlobalScrollTargetBehavior: GlobalScrollTargetBehavior, |
| + GlobalScrollTargetBehaviorImpl: GlobalScrollTargetBehaviorImpl, |
| setGlobalScrollTarget: setGlobalScrollTarget, |
| + scrollTargetResolver: scrollTargetResolver, |
| }; |
| }); |
| + |
| +// This is done to make the closure compiler happy: it needs fully qualified |
| +// names when specifying an array of behaviors. |
| +/** @polymerBehavior */ |
| +settings.GlobalScrollTargetBehavior = |
| + [settings.RouteObserverBehavior, settings.GlobalScrollTargetBehaviorImpl]; |