/** * @file * A Backbone view for the aural feedback of the toolbar. */ (function (Backbone, Drupal) { Drupal.toolbar.ToolbarAuralView = Backbone.View.extend( /** @lends Drupal.toolbar.ToolbarAuralView# */ { /** * Backbone view for the aural feedback of the toolbar. * * @constructs * * @augments Backbone.View * * @param {object} options * Options for the view. * @param {object} options.strings * Various strings to use in the view. */ initialize(options) { this.strings = options.strings; this.listenTo( this.model, 'change:orientation', this.onOrientationChange, ); this.listenTo(this.model, 'change:activeTray', this.onActiveTrayChange); }, /** * Announces an orientation change. * * @param {Drupal.toolbar.ToolbarModel} model * The toolbar model in question. * @param {string} orientation * The new value of the orientation attribute in the model. */ onOrientationChange(model, orientation) { Drupal.announce( Drupal.t('Tray orientation changed to @orientation.', { '@orientation': orientation, }), ); }, /** * Announces a changed active tray. * * @param {Drupal.toolbar.ToolbarModel} model * The toolbar model in question. * @param {HTMLElement} tray * The new value of the tray attribute in the model. */ onActiveTrayChange(model, tray) { const relevantTray = tray === null ? model.previous('activeTray') : tray; // Current activeTray and previous activeTray are empty, no state change // to announce. if (!relevantTray) { return; } const action = tray === null ? Drupal.t('closed') : Drupal.t('opened'); const trayNameElement = relevantTray.querySelector('.toolbar-tray-name'); let text; if (trayNameElement !== null) { text = Drupal.t('Tray "@tray" @action.', { '@tray': trayNameElement.textContent, '@action': action, }); } else { text = Drupal.t('Tray @action.', { '@action': action }); } Drupal.announce(text); }, }, ); })(Backbone, Drupal);