messages.es6.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /**
  2. * @file
  3. * Customization of messages.
  4. */
  5. ((Drupal, once) => {
  6. /**
  7. * Adds a close button to the message.
  8. *
  9. * @param {object} message
  10. * The message object.
  11. */
  12. const closeMessage = (message) => {
  13. const messageContainer = message.querySelector(
  14. '[data-drupal-selector="messages-container"]',
  15. );
  16. const closeBtnWrapper = document.createElement('div');
  17. closeBtnWrapper.setAttribute('class', 'messages__button');
  18. const closeBtn = document.createElement('button');
  19. closeBtn.setAttribute('type', 'button');
  20. closeBtn.setAttribute('class', 'messages__close');
  21. const closeBtnText = document.createElement('span');
  22. closeBtnText.setAttribute('class', 'visually-hidden');
  23. closeBtnText.innerText = Drupal.t('Close message');
  24. messageContainer.appendChild(closeBtnWrapper);
  25. closeBtnWrapper.appendChild(closeBtn);
  26. closeBtn.appendChild(closeBtnText);
  27. closeBtn.addEventListener('click', () => {
  28. message.classList.add('hidden');
  29. });
  30. };
  31. /**
  32. * Get messages from context.
  33. *
  34. * @type {Drupal~behavior}
  35. *
  36. * @prop {Drupal~behaviorAttach} attach
  37. * Attaches the close button behavior for messages.
  38. */
  39. Drupal.behaviors.messages = {
  40. attach(context) {
  41. once('messages', '[data-drupal-selector="messages"]', context).forEach(
  42. closeMessage,
  43. );
  44. },
  45. };
  46. Drupal.olivero.closeMessage = closeMessage;
  47. })(Drupal, once);