diff options
Diffstat (limited to 'addons/website/static/src/snippets')
| -rw-r--r-- | addons/website/static/src/snippets/s_table_of_content/000.js | 36 |
1 files changed, 13 insertions, 23 deletions
diff --git a/addons/website/static/src/snippets/s_table_of_content/000.js b/addons/website/static/src/snippets/s_table_of_content/000.js index ac610304e48..68250bc88fa 100644 --- a/addons/website/static/src/snippets/s_table_of_content/000.js +++ b/addons/website/static/src/snippets/s_table_of_content/000.js @@ -11,18 +11,18 @@ const TableOfContent = publicWidget.Widget.extend({ /** * @override */ - start: function () { - this._initializeNavbarTopPosition(); + async start() { + await this._super(...arguments); + this._updateTableOfContentNavbarPosition(); extraMenuUpdateCallbacks.push(this._updateTableOfContentNavbarPosition.bind(this)); - return this._super.apply(this, arguments); }, /** * @override */ - destroy: function () { + destroy() { this.$target.css('top', ''); this.$target.find('.s_table_of_content_navbar').css('top', ''); - this._super.apply(this, arguments); + this._super(...arguments); }, //-------------------------------------------------------------------------- @@ -30,26 +30,16 @@ const TableOfContent = publicWidget.Widget.extend({ //-------------------------------------------------------------------------- /** - * Initialize the top position of the snippet navbar according to the height - * of the headers of the page. - * * @private */ - _initializeNavbarTopPosition: function () { - let headerHeight = 0; + _updateTableOfContentNavbarPosition() { + let position = 0; const $fixedElements = $('.o_top_fixed_element'); - _.each($fixedElements, el => headerHeight += $(el).outerHeight()); - this._updateTableOfContentNavbarPosition(headerHeight); - }, - /** - * @private - * @param {number} position - */ - _updateTableOfContentNavbarPosition: function (position) { + _.each($fixedElements, el => position += $(el).outerHeight()); const isHorizontalNavbar = this.$target.hasClass('s_table_of_content_horizontal_navbar'); this.$target.css('top', isHorizontalNavbar ? position : ''); this.$target.find('.s_table_of_content_navbar').css('top', isHorizontalNavbar ? '' : position + 20); - $('body').scrollspy({target: '.s_table_of_content_navbar', offset: position + 100}); + $().getScrollingElement().scrollspy({target: '.s_table_of_content_navbar', method: 'offset', offset: position + 100}); }, }); @@ -66,15 +56,15 @@ publicWidget.registry.anchorSlide.include({ * @override * @private */ - _computeHeaderHeight: function () { - let headerHeight = this._super(...arguments); + _computeExtraOffset() { + let extraOffset = this._super(...arguments); if (this.$el.hasClass('table_of_content_link')) { const tableOfContentNavbarEl = this.$el.closest('.s_table_of_content_navbar_sticky.s_table_of_content_horizontal_navbar'); if (tableOfContentNavbarEl.length > 0) { - headerHeight += $(tableOfContentNavbarEl).outerHeight(); + extraOffset += $(tableOfContentNavbarEl).outerHeight(); } } - return headerHeight; + return extraOffset; }, }); |
