158 lines
3.8 KiB
JavaScript
158 lines
3.8 KiB
JavaScript
/**
|
|
* @file
|
|
* A Backbone Model for the toolbar.
|
|
*/
|
|
|
|
(function (Backbone, Drupal) {
|
|
|
|
"use strict";
|
|
|
|
/**
|
|
* Backbone model for the toolbar.
|
|
*
|
|
* @constructor
|
|
*
|
|
* @augments Backbone.Model
|
|
*/
|
|
Drupal.toolbar.ToolbarModel = Backbone.Model.extend(/** @lends Drupal.toolbar.ToolbarModel# */{
|
|
|
|
/**
|
|
* @type {object}
|
|
*
|
|
* @prop activeTab
|
|
* @prop activeTray
|
|
* @prop isOriented
|
|
* @prop isFixed
|
|
* @prop areSubtreesLoaded
|
|
* @prop isViewportOverflowConstrained
|
|
* @prop orientation
|
|
* @prop locked
|
|
* @prop isTrayToggleVisible
|
|
* @prop height
|
|
* @prop offsets
|
|
*/
|
|
defaults: /** @lends Drupal.toolbar.ToolbarModel# */{
|
|
|
|
/**
|
|
* The active toolbar tab. All other tabs should be inactive under
|
|
* normal circumstances. It will remain active across page loads. The
|
|
* active item is stored as an ID selector e.g. '#toolbar-item--1'.
|
|
*
|
|
* @type {string}
|
|
*/
|
|
activeTab: null,
|
|
|
|
/**
|
|
* Represents whether a tray is open or not. Stored as an ID selector e.g.
|
|
* '#toolbar-item--1-tray'.
|
|
*
|
|
* @type {string}
|
|
*/
|
|
activeTray: null,
|
|
|
|
/**
|
|
* Indicates whether the toolbar is displayed in an oriented fashion,
|
|
* either horizontal or vertical.
|
|
*
|
|
* @type {bool}
|
|
*/
|
|
isOriented: false,
|
|
|
|
/**
|
|
* Indicates whether the toolbar is positioned absolute (false) or fixed
|
|
* (true).
|
|
*
|
|
* @type {bool}
|
|
*/
|
|
isFixed: false,
|
|
|
|
/**
|
|
* Menu subtrees are loaded through an AJAX request only when the Toolbar
|
|
* is set to a vertical orientation.
|
|
*
|
|
* @type {bool}
|
|
*/
|
|
areSubtreesLoaded: false,
|
|
|
|
/**
|
|
* If the viewport overflow becomes constrained, isFixed must be true so
|
|
* that elements in the trays aren't lost off-screen and impossible to
|
|
* get to.
|
|
*
|
|
* @type {bool}
|
|
*/
|
|
isViewportOverflowConstrained: false,
|
|
|
|
/**
|
|
* The orientation of the active tray.
|
|
*
|
|
* @type {string}
|
|
*/
|
|
orientation: 'vertical',
|
|
|
|
/**
|
|
* A tray is locked if a user toggled it to vertical. Otherwise a tray
|
|
* will switch between vertical and horizontal orientation based on the
|
|
* configured breakpoints. The locked state will be maintained across page
|
|
* loads.
|
|
*
|
|
* @type {bool}
|
|
*/
|
|
locked: false,
|
|
|
|
/**
|
|
* Indicates whether the tray orientation toggle is visible.
|
|
*
|
|
* @type {bool}
|
|
*/
|
|
isTrayToggleVisible: false,
|
|
|
|
/**
|
|
* The height of the toolbar.
|
|
*
|
|
* @type {number}
|
|
*/
|
|
height: null,
|
|
|
|
/**
|
|
* The current viewport offsets determined by {@link Drupal.displace}. The
|
|
* offsets suggest how a module might position is components relative to
|
|
* the viewport.
|
|
*
|
|
* @type {object}
|
|
*
|
|
* @prop {number} top
|
|
* @prop {number} right
|
|
* @prop {number} bottom
|
|
* @prop {number} left
|
|
*/
|
|
offsets: {
|
|
top: 0,
|
|
right: 0,
|
|
bottom: 0,
|
|
left: 0
|
|
}
|
|
},
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*
|
|
* @param {object} attributes
|
|
* Attributes for the toolbar.
|
|
* @param {object} options
|
|
* Options for the toolbar.
|
|
*
|
|
* @return {string|undefined}
|
|
* Returns an error message if validation failed.
|
|
*/
|
|
validate: function (attributes, options) {
|
|
// Prevent the orientation being set to horizontal if it is locked, unless
|
|
// override has not been passed as an option.
|
|
if (attributes.orientation === 'horizontal' && this.get('locked') && !options.override) {
|
|
return Drupal.t('The toolbar cannot be set to a horizontal orientation when it is locked.');
|
|
}
|
|
}
|
|
});
|
|
|
|
}(Backbone, Drupal));
|