/** * @file * Attaches behaviors for the Contextual module's edit toolbar tab. */ (function ($, Drupal, Backbone) { const strings = { tabbingReleased: Drupal.t('Tabbing is no longer constrained by the Contextual module.'), tabbingConstrained: Drupal.t('Tabbing is constrained to a set of @contextualsCount and the edit mode toggle.'), pressEsc: Drupal.t('Press the esc key to exit.'), }; /** * Initializes a contextual link: updates its DOM, sets up model and views. * * @param {HTMLElement} context * A contextual links DOM element as rendered by the server. */ function initContextualToolbar(context) { if (!Drupal.contextual || !Drupal.contextual.collection) { return; } const contextualToolbar = Drupal.contextualToolbar; const model = contextualToolbar.model = new contextualToolbar.StateModel({ // Checks whether localStorage indicates we should start in edit mode // rather than view mode. // @see Drupal.contextualToolbar.VisualView.persist isViewing: localStorage.getItem('Drupal.contextualToolbar.isViewing') !== 'false', }, { contextualCollection: Drupal.contextual.collection, }); const viewOptions = { el: $('.toolbar .toolbar-bar .contextual-toolbar-tab'), model, strings, }; new contextualToolbar.VisualView(viewOptions); new contextualToolbar.AuralView(viewOptions); } /** * Attaches contextual's edit toolbar tab behavior. * * @type {Drupal~behavior} * * @prop {Drupal~behaviorAttach} attach * Attaches contextual toolbar behavior on a contextualToolbar-init event. */ Drupal.behaviors.contextualToolbar = { attach(context) { if ($('body').once('contextualToolbar-init').length) { initContextualToolbar(context); } }, }; /** * Namespace for the contextual toolbar. * * @namespace */ Drupal.contextualToolbar = { /** * The {@link Drupal.contextualToolbar.StateModel} instance. * * @type {?Drupal.contextualToolbar.StateModel} */ model: null, }; }(jQuery, Drupal, Backbone));