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

Unified Diff: chrome/browser/resources/settings/global_scroll_target_behavior.js

Issue 2538183008: Fix issue caused by updating list that references global scroll target. (Closed)
Patch Set: nit Created 4 years 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 side-by-side diff with in-line comments
Download patch
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];

Powered by Google App Engine
This is Rietveld 408576698