diff options
Diffstat (limited to 'theme_common/static/src/js/preheader.js')
| -rw-r--r-- | theme_common/static/src/js/preheader.js | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/theme_common/static/src/js/preheader.js b/theme_common/static/src/js/preheader.js new file mode 100644 index 0000000..7c1e8e2 --- /dev/null +++ b/theme_common/static/src/js/preheader.js @@ -0,0 +1,115 @@ +odoo.define('theme_common.preheader', function (require) { +'use strict'; + +var publicWidget = require('web.public.widget'); +require('website.content.menu'); + +publicWidget.registry.StandardAffixedHeader.include({ + /** + * @override + */ + start: function () { + this.$preheader = this.$el.find('#o_theme_preheader'); + this.preheaderVisible = this.$preheader.css('display') !== 'none'; + return this._super.apply(this, arguments); + }, + /** + * @override + */ + destroy: function () { + this.$el.find('#o_theme_preheader').show(); + return this._super.apply(this, arguments); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @override + */ + _updateHeaderOnScroll: function (scrollTop) { + var def = this._super.apply(this, arguments); + if (this.preheaderVisible) { + if (this.$el.hasClass('o_header_is_scrolled')) { + this.$el.find('#o_theme_preheader').hide(); + } else { + this.$el.find('#o_theme_preheader').show(200); + } + } + return def; + } +}); +publicWidget.registry.FixedHeader.include({ + /** + * @override + */ + start: function () { + this.$preheader = this.$el.find('#o_theme_preheader'); + this.preheaderVisible = this.$preheader.css('display') !== 'none'; + return this._super.apply(this, arguments); + }, + /** + * @override + */ + destroy: function () { + this.$el.css('transform', ''); + return this._super.apply(this, arguments); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @override + */ + _updateHeaderOnScroll: function (scrollTop) { + var def = this._super.apply(this, arguments); + if (this.preheaderVisible) { + if (this.$el.hasClass('o_header_is_scrolled')) { + if (!this.$el.hasClass('o_header_disappears') && !this.$el.hasClass('o_header_fade_out')) { + const preheaderHeight = this.$el.find('#o_theme_preheader').outerHeight(); + this.$el.css('transform', 'translate(0, -' + preheaderHeight + 'px)'); + } + } else { + this.$el.css('transform', ''); + } + } + return def; + } +}); + +const BaseDisappearingPreheader = { + /** + * @override + */ + start: function () { + this.$preheader = this.$el.find('#o_theme_preheader'); + this.preheaderVisible = this.$preheader.css('display') !== 'none'; + return this._super.apply(this, arguments); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @override + */ + _showHeader: function () { + var def = this._super.apply(this, arguments); + if (this.preheaderVisible) { + const preheaderHeight = this.$preheader.outerHeight(); + if (this.$el.hasClass('o_header_is_scrolled')) { + this.$el.css('transform', 'translate(0, -' + preheaderHeight + 'px)'); + } + } + return def; + } +}; + +publicWidget.registry.DisappearingHeader.include(BaseDisappearingPreheader); +publicWidget.registry.FadeOutHeader.include(BaseDisappearingPreheader); + +}); |
