| 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..5a9c0a9a090cb9c19de315f0aada37c541f8ad04 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,48 @@ 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
|
| + * @return {?HTMLElement}
|
| + * @private
|
| + */
|
| + getActiveTarget_: function(target, active) {
|
| + return active ? target : null;
|
| + },
|
| };
|
|
|
| /**
|
| @@ -39,7 +81,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];
|
|
|