Mercurial > hg > isophonics-drupal-site
diff core/modules/toolbar/js/models/ToolbarModel.es6.js @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/toolbar/js/models/ToolbarModel.es6.js Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,153 @@ +/** + * @file + * A Backbone Model for the toolbar. + */ + +(function (Backbone, Drupal) { + /** + * 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: 'horizontal', + + /** + * 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: true, + + /** + * 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(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));