/** * @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));