1(function ($) { 2 $(function () { 3 4 function processRules(e) { 5 if (typeof $.fn.processFormRules === 'function') { 6 $(e.target).processFormRules(); 7 } 8 } 9 10 var delayTimer; 11 function processRulesWithDelay(e) { 12 clearTimeout(delayTimer); 13 delayTimer = setTimeout(function () { 14 processRules(e); 15 }, 300); 16 } 17 18 function handleValidation(e) { 19 if (typeof e.target.validity === 'undefined') 20 return; 21 22 if (e.target.required && e.target.validity.valueMissing) { 23 var validationMessages = getValidationMessages(e.target); 24 setErrorMessage(e.target, validationMessages.required); 25 } else { 26 setErrorMessage(e.target, ''); 27 } 28 } 29 30 function onChange(e) { 31 handleValidation(e); 32 processRules(e); 33 } 34 35 function onInput(e) { 36 handleValidation(e); 37 processRulesWithDelay(e); 38 } 39
40 function invalid(e) { 41 if (typeof e.target.validity === 'undefined') 42 return; 43 44 if (_getErrorMessageContainer(e.target)) { 45 e.preventDefault(); 46 } 47 48 var validationMessages = getValidationMessages(e.target); 49 var validationRestrictions = getValidationRestrictions(e.target); 50 var isValidLength = e.target.value.length >= validationRestrictions.minLength; 51 52 if (validationRestrictions.maxLength > 0) 53 isValidLength &= e.target.value.length <= validationRestrictions.maxLength; 54 55 if (e.target.validity.valueMissing) { 56 setErrorMessage(e.target, validationMessages.required); 57 } 58 else if (e.target.validity.typeMismatch && isValidLength) { 59 setErrorMessage(e.target, validationMessages.regularExpression); 60 } 61 else if (e.target.validity.patternMismatch && !isValidLength) { 62 setErrorMessage(e.target, validationMessages.maxLength); 63 } 64 else if (e.target.validity.patternMismatch && isValidLength) { 65 setErrorMessage(e.target, validationMessages.regularExpression); 66 } 67 else if (!e.target.validity.valid) { 68 setErrorMessage(e.target, validationMessages.invalid); 69 } 70 } 71
72 function getValidationMessages(input) { 73 var container = $(input).parents('[data-sf-role="email-text-field-container"]'); 74 var validationMessagesInput = $(container).find('[data-sf-role="violation-messages"]'); 75 var validationMessages = JSON.parse(validationMessagesInput.val()); 76 77 return validationMessages; 78 } 79 80 function getValidationRestrictions(input) { 81 var container = $(input).parents('[data-sf-role="email-text-field-container"]'); 82 var validationRestrictionsInput = $(container).find('[data-sf-role="violation-restrictions"]'); 83 var validationRestrictions = JSON.parse(validationRestrictionsInput.val()); 84 85 return validationRestrictions; 86 } 87 88 function setErrorMessage(input, message) { 89 var errorMessagesContainer = _getErrorMessageContainer(input); 90 91 if (errorMessagesContainer) { 92 _toggleCustomErrorMessage(errorMessagesContainer, message); 93 } else { 94 input.setCustomValidity(message); 95 } 96 } 97 98 function _toggleCustomErrorMessage(container, message) { 99 container.innerText = message; 100 101 if (message === '') { 102 container.style.display = 'none'; 103 } else { 104 container.style.display = 'block'; 105 } 106 } 107 108 function _getErrorMessageContainer(input) { 109 var container = $(input).closest('[data-sf-role="email-text-field-container"]')[0]; 110 if (container) { 111 var errorMessagesContainer = container.querySelector('[data-sf-role="error-message"]'); 112 return errorMessagesContainer; 113 } 114 115 return null; 116 } 117 118 function init() { 119 var containers = $('[data-sf-role="email-text-field-container"]'); 120 121 if (!containers || containers.length < 1) 122 return; 123 124 for (var i = 0; i < containers.length; i++) { 125 var input = $(containers[i]).find('[data-sf-role="email-text-field-input"]'); 126 127 if (input) { 128 input.on('change', onChange); 129 input.on('input', onInput); 130 input.on('invalid', invalid); 131 } 132 } 133 } 134 135 init(); 136 }); 137}(jQuery));
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.