diff --git a/core/misc/message.js b/core/misc/message.js index 4cdd7d2fd2..63a93826c7 100644 --- a/core/misc/message.js +++ b/core/misc/message.js @@ -10,9 +10,6 @@ /** * @typedef {object} Drupal.message~messageDefinition - * - * @prop {HTMLElement} element - * DOM element of the messages wrapper. */ /** @@ -29,7 +26,8 @@ * Object to add and remove messages. */ Drupal.message = function (messageWrapper) { - if (typeof messageWrapper === 'string') { + if ((messageWrapper === null || typeof messageWrapper === 'string') + || (arguments.length === 1 && typeof messageWrapper === 'undefined')) { throw new Error(Drupal.t('Drupal.message() expect an HTMLElement as parameter.')); } if (!messageWrapper) { @@ -60,11 +58,11 @@ } type = type || 'status'; options = options || {}; - // Send message to screenreader. + // Send message to screen reader. announce(message, type, options); // Generate a unique key to allow message deletion. options.index = Math.random().toFixed(15).replace('0.', ''); - this.element.innerHTML += Drupal.theme('message', {text: message, type: type}, options); + messageWrapper.innerHTML += Drupal.theme('message', {text: message, type: type}, options); return options.index; } @@ -93,17 +91,16 @@ return '[data-drupal-message="' + messageIndex + '"]'; }); - var remove = this.element.querySelectorAll(removeSelectors.join(', ')); + var remove = messageWrapper.querySelectorAll(removeSelectors.join(', ')); var length = remove.length; for (var i = 0; i < length; i += 1) { - this.element.removeChild(remove[i]); + messageWrapper.removeChild(remove[i]); } return length; } return { - element: messageWrapper, add: messageAdd, remove: messageRemove }; @@ -120,7 +117,7 @@ * Additional data. * @param {string} [options.announce] * Screen-reader version of the message if necessary. To prevent a message - * being sent to Drupal.annonce() this should be `''`. + * being sent to Drupal.announce() this should be `''`. * @param {string} [options.priority] * Priority of the message for Drupal.announce(). */ @@ -129,7 +126,7 @@ if (!options.priority && type !== 'status') { options.priority = 'assertive'; } - // If screenreader message is not disabled announce screenreader-specific + // If screen reader message is not disabled announce screen reader specific // text or fallback to the displayed message. if (options.announce !== '') { Drupal.announce(options.announce || message, options.priority); diff --git a/core/modules/system/tests/modules/js_message_test/src/Controller/JSMessageTestController.php b/core/modules/system/tests/modules/js_message_test/src/Controller/JSMessageTestController.php index 462f2c25a4..b02e4514dd 100644 --- a/core/modules/system/tests/modules/js_message_test/src/Controller/JSMessageTestController.php +++ b/core/modules/system/tests/modules/js_message_test/src/Controller/JSMessageTestController.php @@ -48,6 +48,7 @@ public function messageLinks() { 'url' => Url::fromRoute('js_message_test.links'), 'attributes' => [ 'class' => ['show-multiple'], + 'data-selector' => JsMessageTestCases::getMessagesSelectors()[0], ], ]; $links['remove-multi'] = [ @@ -55,6 +56,7 @@ public function messageLinks() { 'url' => Url::fromRoute('js_message_test.links'), 'attributes' => [ 'class' => ['remove-multiple'], + 'data-selector' => JsMessageTestCases::getMessagesSelectors()[0], ], ]; return [