--- /dev/null
+/**
+ * @file
+ * A Backbone view for the body element.
+ */
+
+(function ($, Drupal, Backbone) {
+ Drupal.toolbar.BodyVisualView = Backbone.View.extend(/** @lends Drupal.toolbar.BodyVisualView# */{
+ /**
+ * Adjusts the body element with the toolbar position and dimension changes.
+ *
+ * @constructs
+ *
+ * @augments Backbone.View
+ */
+ initialize() {
+ this.listenTo(this.model, 'change:activeTray ', this.render);
+ this.listenTo(this.model, 'change:isFixed change:isViewportOverflowConstrained', this.isToolbarFixed);
+ },
+
+ isToolbarFixed() {
+ // When the toolbar is fixed, it will not scroll with page scrolling.
+ const isViewportOverflowConstrained = this.model.get('isViewportOverflowConstrained');
+ $('body').toggleClass('toolbar-fixed', (isViewportOverflowConstrained || this.model.get('isFixed')));
+ },
+
+ /**
+ * @inheritdoc
+ */
+ render() {
+ $('body')
+ // Toggle the toolbar-tray-open class on the body element. The class is
+ // applied when a toolbar tray is active. Padding might be applied to
+ // the body element to prevent the tray from overlapping content.
+ .toggleClass('toolbar-tray-open', !!this.model.get('activeTray'));
+ },
+ });
+}(jQuery, Drupal, Backbone));