From 4e204ed2233ccd36b2eb7d3e56bfa741b9cb3e14 Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Thu, 8 Mar 2018 14:57:43 +0100 Subject: [IMP] web: restore scroll position This rev. improves the way the scroll position is restored when coming back to a view (e.g. open a kanban view, scroll, click on a record to open it in a form view, go back to kanban using the breadcrumbs): - generalize the scroll position handling from web_enterprise to web to make it available in the community webclient as well - also restore left scroll position, not only top (especially useful for grouped Kanban views with a lot of columns) - handle the case where the scrolling area is a sub element of the view (e.g. the grouped Kanban view in mobile). Task 34037 Co-authored-by: Mohammed Shekha Co-authored-by: Ankit Sathvara --- addons/web/static/src/js/chrome/action_manager.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'addons/web/static/src/js/chrome/action_manager.js') diff --git a/addons/web/static/src/js/chrome/action_manager.js b/addons/web/static/src/js/chrome/action_manager.js index 1e9c52238bc..4cf10b8813a 100644 --- a/addons/web/static/src/js/chrome/action_manager.js +++ b/addons/web/static/src/js/chrome/action_manager.js @@ -258,7 +258,9 @@ var ActionManager = Widget.extend({ callbacks: [{widget: controller.widget}], }); - this.trigger_up('scrollTo', {offset: controller.scrollTop || 0}); + if (controller.scrollPosition) { + this.trigger_up('scrollTo', controller.scrollPosition); + } if (!controller.widget.need_control_panel) { this.controlPanel.do_hide(); @@ -294,7 +296,7 @@ var ActionManager = Widget.extend({ _detachCurrentController: function () { var currentController = this.getCurrentController(); if (currentController) { - currentController.scrollTop = this._getScrollTop(); + currentController.scrollPosition = this._getScrollPosition(); dom.detach([{widget: currentController.widget}]); } }, @@ -613,19 +615,19 @@ var ActionManager = Widget.extend({ return state; }, /** - * Returns the current vertical scroll position. + * Returns the current horizontal and vertical scroll positions. * * @private - * @returns {integer} + * @returns {Object} */ - _getScrollTop: function () { - var scrollTop; - this.trigger_up('getScrollTop', { - callback: function (value) { - scrollTop = value; + _getScrollPosition: function () { + var scrollPosition; + this.trigger_up('getScrollPosition', { + callback: function (_scrollPosition) { + scrollPosition = _scrollPosition; } }); - return scrollTop; + return scrollPosition; }, /** * Dispatches the given action to the corresponding handler to execute it, -- cgit v1.2.3