diff options
| author | Aaron Bohy <aab@odoo.com> | 2018-03-08 14:57:43 +0100 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2018-03-10 09:01:46 +0100 |
| commit | 4e204ed2233ccd36b2eb7d3e56bfa741b9cb3e14 (patch) | |
| tree | a4c5dc6c77459b1590c601d4b21ca203ccc005f5 /addons/web/static/src/js/chrome/web_client.js | |
| parent | 1a99d22f19949cf8eb689a6e2d6eda859c963cf9 (diff) | |
[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 <msh@openerp.com>
Co-authored-by: Ankit Sathvara <asa@odoo.com>
Diffstat (limited to 'addons/web/static/src/js/chrome/web_client.js')
| -rw-r--r-- | addons/web/static/src/js/chrome/web_client.js | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/addons/web/static/src/js/chrome/web_client.js b/addons/web/static/src/js/chrome/web_client.js index 76aadf49463..3f832a6a49f 100644 --- a/addons/web/static/src/js/chrome/web_client.js +++ b/addons/web/static/src/js/chrome/web_client.js @@ -4,6 +4,7 @@ odoo.define('web.WebClient', function (require) { var AbstractWebClient = require('web.AbstractWebClient'); var config = require('web.config'); var data_manager = require('web.data_manager'); +var dom = require('web.dom'); var framework = require('web.framework'); var Menu = require('web.Menu'); var session = require('web.session'); @@ -177,6 +178,39 @@ return AbstractWebClient.extend({ this.menu.reflow(); } }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * @override + */ + _onGetScrollPosition: function (ev) { + ev.data.callback({ + left: this.action_manager.el.scrollLeft, + top: this.action_manager.el.scrollTop, + }); + }, + /** + * @override + */ + _onScrollTo: function (ev) { + var offset; + if (ev.data.selector) { + offset = dom.getPosition(document.querySelector(ev.data.selector)); + // substract the position of the ActionManager as it is the + // scrolling element + var actionManagerOffset = dom.getPosition(this.action_manager.el); + offset.left -= actionManagerOffset.left; + offset.top -= actionManagerOffset.top; + } else { + offset = {top: ev.data.top || 0, left: ev.data.left || 0}; + } + + this.action_manager.el.scrollTop = offset.top; + this.action_manager.el.scrollLeft = offset.left; + }, }); }); |
