diff -u b/core/misc/message.js b/core/misc/message.js --- b/core/misc/message.js +++ b/core/misc/message.js @@ -28,7 +28,7 @@ Drupal.message = function (messageWrapper) { // If an argument is passed, verify that it's a DOM Node of some kind. if (arguments.length === 1) { - if (!messageWrapper || (messageWrapper && messageWrapper.nodeType !== 1)) { + if (!messageWrapper || messageWrapper.nodeType !== 1) { throw new Error(Drupal.t('Drupal.message() expect an HTMLElement as parameter.')); } } @@ -85,7 +85,7 @@ function messageRemove(messages) { // If there is no argument or if the argument is an empty array, // no message can be removed. - if (!messages || (messages && Array.isArray(messages) && messages.length === 0)) { + if (!messages || (Array.isArray(messages) && messages.length === 0)) { return 0; } @@ -94,12 +94,13 @@ return '[data-drupal-message="' + messageIndex + '"]'; }); - var toRemove = Array.from(messageWrapper.querySelectorAll(removeSelectors.join(','))); - toRemove.forEach(function (element) { - messageWrapper.removeChild(element); - }); + var toRemove = messageWrapper.querySelectorAll(removeSelectors.join(',')); + var length = toRemove.length; + for (var i = 0; i < length; i++) { + messageWrapper.removeChild(toRemove[i]); + } - return toRemove.length; + return length; } /** @@ -119,12 +120,13 @@ messageSelector += '[class~="messages--' + type + '"]'; } - var toRemove = Array.from(messageWrapper.querySelectorAll(messageSelector)); - toRemove.forEach(function (element) { - messageWrapper.removeChild(element); - }); + var toRemove = messageWrapper.querySelectorAll(messageSelector); + var length = toRemove.length; + for (var i = 0; i < length; i++) { + messageWrapper.removeChild(toRemove[i]); + } - return toRemove.length; + return length; } return { diff -u b/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 --- b/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 @@ -2,7 +2,6 @@ namespace Drupal\js_message_test\Controller; -use Drupal\Core\Url; use Drupal\system\Tests\JsMessageTestCases; /** @@ -119,7 +118,7 @@ 'drupalSettings' => [ 'testMessages' => [ 'selectors' => JsMessageTestCases::getMessagesSelectors(), - 'types' => JsMessageTestCases::getTypes(), + 'types' => JsMessageTestCases::getTypes(), ], ], ] diff -u b/core/tests/Drupal/FunctionalJavascriptTests/Core/JsMessageTest.php b/core/tests/Drupal/FunctionalJavascriptTests/Core/JsMessageTest.php --- b/core/tests/Drupal/FunctionalJavascriptTests/Core/JsMessageTest.php +++ b/core/tests/Drupal/FunctionalJavascriptTests/Core/JsMessageTest.php @@ -41,7 +41,7 @@ foreach (JsMessageTestCases::getMessagesSelectors() as $messagesSelector) { $web_assert->elementExists('css', $messagesSelector); foreach (JsMessageTestCases::getTypes() as $type) { - $this->click("#add-$messagesSelector-$type"); + $this->click('[id="add-' . $messagesSelector . '-' . $type . '"]'); $selector = "$messagesSelector .messages.messages--$type"; $msg_element = $web_assert->waitForElementVisible('css', $selector); $this->assertNotEmpty($msg_element, "Message element visible: $selector"); @@ -51,7 +51,7 @@ } // Remove messages 1 by 1 and confirm the messages are expected. foreach (JsMessageTestCases::getTypes() as $type) { - $this->click("#remove-$messagesSelector-$type"); + $this->click('[id="remove-' . $messagesSelector . '-' . $type . '"]'); $selector = "$messagesSelector .messages.messages--$type"; // The message for this selector should not be on the page. unset($current_messages[$selector]); @@ -66,19 +66,19 @@ } // Test adding multiple messages at once. // @see processMessages() - $this->click('#add-multiple'); + $this->click('[id="add-multiple"]'); $this->assertCurrentMessages($current_messages); - $this->click('#remove-multiple'); + $this->click('[id="remove-multiple"]'); $this->assertCurrentMessages([]); // The last message is of a different type and shouldn't get cleared. $last_message = 'Msg-' . count($current_messages); $current_messages[] = $last_message; - $this->click('#add-multiple-error'); + $this->click('[id="add-multiple-error"]'); $this->assertCurrentMessages($current_messages); - $this->click('#clear-type'); - $this->assertCurrentMessages($last_message); - $this->click('#clear-all'); + $this->click('[id="clear-type"]'); + $this->assertCurrentMessages([$last_message]); + $this->click('[id="clear-all"]'); $this->assertCurrentMessages([]); }