PageSourceSearch

https://www.tbn.org/modules/contrib/miniorange_2fa/includes/js/mo_kba_validation.js?v=10.6.17

js tbn.org collected 2026-10-01 10:42:45 UTC 2,762 bytes, 61 lines download raw bytes

1(function ($, Drupal, drupalSettings, once) {
2  Drupal.behaviors.customKBAValidation = {
3    attach: function (context, settings) {
4      $(once('custom-kba-validation', '.custom-kba-validation', context)).on('input blur', function() {
5        var param = $(this).attr('id');
6        validateInput.call(this, param);
7      });
8    }
9  };
10
11  Drupal.behaviors.customKBAUniqueAnswer = {
12    attach: function (context, settings) {
13      $(once('custom-kba-unique-answer', '.custom-kba-validation', context)).on('blur', function () {
14        var textfield1        = $('#kba-answer-1').val();
15        var textfield2        = $('#kba-answer-2').val();
16        var textfield3        = $('#kba-answer-3').val();
17        var kba_answer_length = drupalSettings.miniorange_2fa.kba_answer_length;
18        var inputValue        = $(this).val().trim();
19        var pattern   = /^[\w\s]+$/;
20        var isValid  = pattern.test(inputValue);
21        var message    = 'Answers must be unique.';
22
23        if(isValid && inputValue.length >= kba_answer_length) {
24          if (textfield1 === textfield2 && textfield1 === textfield3 && textfield2 === textfield3) {
25            $('#kba-answer-2')[0].setCustomValidity(Drupal.t(message));
26          } else if (textfield1 === textfield2) {
27            $('#kba-answer-2')[0].setCustomValidity(Drupal.t(message));
28          } else if (textfield2 === textfield3) {
29            $('#kba-answer-3')[0].setCustomValidity(Drupal.t(message));
30          } else if (textfield1 === textfield3) {
31            $('#kba-answer-3')[0].setCustomValidity(Drupal.t(message));
32          } else {
33            $('#kba-answer-1')[0].setCustomValidity('')
34            $('#kba-answer-2')[0].setCustomValidity('')
35            $('#kba-answer-3')[0].setCustomValidity('')
36          }
37        }
38      });
39    }};
40
41  function validateInput(textfield){
42      var kba_answer_length = drupalSettings.miniorange_2fa.kba_answer_length;
43      var answer_textfield  = $('#' + textfield)[0];
44      var inputValue        = $('#' + textfield).val().trim();
45      var pattern   = /^[\w\s]+$/
46
47      if(inputValue.length >= 1){
48        if (inputValue.length < kba_answer_length) {
49          if(!pattern.test(inputValue)) {
50            answer_textfield.setCustomValidity(Drupal.t('Only alphanumeric characters are allowed.'));
51          } else {
52            answer_textfield.setCustomValidity(Drupal.t('Answers must contain at least @length characters.', {'@length' : kba_answer_length}));
53          }
54        } else if (!pattern.test(inputValue)) {
55          answer_textfield.setCustomValidity(Drupal.t('Only alphanumeric characters are allowed.'));
56        } else {
57          answer_textfield.setCustomValidity('');
58        }
59      }
60  }
61})(jQuery, Drupal, drupalSettings, once);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.