diff --git a/core/lib/Drupal/Core/Ajax/MessageCommand.php b/core/lib/Drupal/Core/Ajax/MessageCommand.php index ba5b14e738e1f6670bdba60bcb6983e7f9382df5..5dd2ed78614603e03f28634b01dcd5a8785f6eca 100644 --- a/core/lib/Drupal/Core/Ajax/MessageCommand.php +++ b/core/lib/Drupal/Core/Ajax/MessageCommand.php @@ -7,21 +7,59 @@ /** * AJAX command for a JavaScript Drupal.message() call. * - * Developers should be extra careful if this command and - * \Drupal\Core\Ajax\AnnounceCommand are included in the same response. Unless - * the `announce` option is set to an empty string (''), this command will - * result in the message being announced to screen readers. When combined with - * AnnounceCommand, this may result in unexpected behavior. Manual testing with - * a screen reader is strongly recommended. + * AJAX command that allows you to add messages from an Ajax response. The command will create a new Drupal.Message() object and call its addMessage() method. * + * Usage examples: * Here are examples of how to suppress announcements: * @code + * $response = new AjaxResponse(); + * + * // A status message added in the default location. + * $response->addCommand(new MessageCommand('Your changes have been saved.')); + * + * // A warning message added in the default location. + * $response->addCommand(new MessageCommand('There was a problem. Save your work.', NULL, ['type' => 'warning'])); + * + * // A status message added an alternate location. + * $response->addCommand(new MessageCommand('Hey look over here!', '#alternate-message-container')); + * + * // An error added in an alternate location. + * $response->addCommand(new MessageCommand('Open the pod bay doors, HAL.', '#alternate-message-container', ['type' => 'error'])); + * @endcode + * + * By default, previous messages in a location are cleared before the message + * is added. If you would like to leave the previous messages in a location, + * you may do so by setting the fourth parameter to FALSE: + * Here are examples of how to suppress announcements: + * @code + * $response->addCommand(new MessageCommand('Hey look over here.', NULL, ['type' => 'error'], FALSE)); + * @endcode + * + * Developers should take care when using MessageCommand and AnnounceCommand + * together in the same AJAX response. Unless the "announce" option is set to + * an empty string (''), this command will result in the message being + * announced to screen readers. When combined with AnnounceCommand, this may + * result in unexpected behavior. Manual testing with a screen reader is + * strongly recommended. + * + * If you wish to display a message without the text being announced to screen + * readers, add options.announce = '' (i.e. an empty string): + * @code * $command = new MessageCommand("I won't be announced", NULL, [ * 'announce' => '', * ]); * @endcode * + * If you wish to set the announcement priority to assertive, you can do that + * this way: + * @code + * $response->addCommand(new MessageCommand('You added 3 cat pics.', '.js-media-library-messages', [ + * 'priority' => 'assertive', + * ]); + * @endcode + * * @see \Drupal\Core\Ajax\AnnounceCommand + * @see https://www.drupal.org/docs/develop/drupal-apis/ajax-api/core-ajax-callback-commands#s-messagecommand * * @ingroup ajax */