Кастомне повідомлення валідації для вебформи в Drupal 9

Новий день - нове завдання в Drupal.

В нас є сайт на Drupal 9, де потрібно додати паттерн для input.

Додавання самого шаблону до полі вводу веб-форми не є такою складною задачею, але коли мова йде про повідомлення про помилку, виявляється, що неможливо змінити його текст через веб-форму. Для цього ми використовуватимемо код jquery.

Отже, для звичайної статичної форми ми створюємо файл scriptname.js із приблизно таким вмістом:

(function ($, Drupal) {
    Drupal.behaviors.addInputAttributes = {
      attach: function (context, settings) {
        var input = document.getElementById('id_of_our_input');
       
        input.oninvalid = function(event) {
            event.target.setCustomValidity('Please enter the number in the format XXX-XX-XXXXX');
        }
      }
    };
  })(jQuery, Drupal);

Але якщо нам потрібно змінити текст помилки поля, яке знаходиться в спливаючому вікні, нам треба незначно змінити наш скрипт, оскільки без цього наш скрипт не буде працювати. Коли він завантажується, він не побачить поле з нашим ID і просто видасть помилку. Тому ми створюємо script.js.

(function ($, Drupal) {
    Drupal.behaviors.addInputAttributes = {
      attach: function (context, settings) {
        $('button.info-button', context).once('addInputAttributes').on('click', function() {
          setTimeout(function() {
            var product_telinput = document.getElementById('id_of_our_input');
            if (product_telinput) {
              product_telinput.oninvalid = function(event) {
                event.target.setCustomValidity('Please enter the number in the format XXX-XX-XXXXX');
              };
            }
          }, 500);
        });
      }
    };
  })(jQuery, Drupal);

Ось ми спершу прописуємо, що все, що відбувається, стосується лише після натискання на кнопки із необхідним класом. Ми також додаємо таймер. Залежно від швидкості підключення користувача, поле з необхідним ідентифікатором може завантажуватися не так швидко, як нам б хотілося, тому після натискання кнопки розпочинається відлік 500 мс, після чого ми звертаємося лише до нашого поля.

Простий текст

  • Не дозволено жодних HTML теґів.
  • Рядки й абзаци переносяться автоматично.
  • Адреси вебсторінок та адреси електронної пошти автоматично перетворюються у посилання.
Код мови коментаря.