1(function ($) { 2 var changeOrInput = function (e) { 3 var container = $(e.target).parents('[data-sf-role="multiple-choice-field-container"]'); 4 var inputs = $(container).find('[data-sf-role="multiple-choice-field-input"]'); 5 inputs.each(function (index, input) { 6 input.validity.valueMissing = false; 7 setErrorMessage(input, ''); 8 }); 9 }; 10 11 var invalid = function (e) { 12 var validationMessages = getValidationMessages(e.target); 13 14 if (_getErrorMessageContainer(e.target)) { 15 e.preventDefault(); 16 } 17 18 if (e.target.validity.valueMissing) { 19 setErrorMessage(e.target, validationMessages.required); 20 } 21 22 var isValidLength = e.target.value.length <= 255; 23 if (e.target.validity.patternMismatch && !isValidLength) { 24 setErrorMessage(e.target, validationMessages.maxLength); 25 } 26 }; 27 28 var getValidationMessages = function (input) { 29 var container = $(input).parents('[data-sf-role="multiple-choice-field-container"]'); 30 var validationMessagesInput = $(container).find('[data-sf-role="violation-messages"]'); 31 var validationMessages = JSON.parse(validationMessagesInput.val()); 32 33 return validationMessages; 34 }; 35 36 var setErrorMessage = function (input, message) { 37 var errorMessagesContainer = _getErrorMessageContainer(input); 38 39 if (errorMessagesContainer) { 40 _toggleCustomErrorMessage(errorMessagesContainer, message); 41 } else { 42 input.setCustomValidity(message); 43 } 44 }; 45 46 var _toggleCustomErrorMessage = function (container, message) { 47 container.innerText = message; 48 49 if (message === '') { 50 container.style.display = 'none'; 51 } else { 52 container.style.display = 'block'; 53 } 54 }; 55 56 var _getErrorMessageContainer = function (input) { 57 var container = $(input).closest('[data-sf-role="multiple-choice-field-container"]')[0]; 58 if (container) { 59 var errorMessagesContainer = container.querySelector('[data-sf-role="error-message"]'); 60 return errorMessagesContainer; 61 } 62 63 return null; 64 }; 65 66 $(function () { 67 var containers = $('[data-sf-role="multiple-choice-field-container"]'); 68 69 if (!containers || containers.length < 1) 70 return; 71 72 var attachHandlers = function (input) { 73 input.on('change', function (e) { 74 changeOrInput(e); 75 if (typeof $.fn.processFormRules == 'function') 76 $(e.target).processFormRules(); 77 }); 78 input.on('input', changeOrInput); 79 input.on('invalid', invalid); 80 }; 81 82 var radioClickHandler = function (e) { 83 var container = $(e.target).parents('[data-sf-role="multiple-choice-field-container"]'); 84 var radios = container.find('input[data-sf-role="multiple-choice-field-input"]'); 85 var otherInput = $(container.find('[data-sf-multiple-choice-role="other-choice-text"]').first()); 86 var otherRadio = $(container.find('[data-sf-multiple-choice-role="other-choice-radio"]').first()); 87 var otherRadioIndex = radios.index(otherRadio); 88 var currentIndex = radios.index($(e.target)); 89 var isRequired = $(radios).first().attr('required'); 90 91 if (currentIndex == otherRadioIndex) { 92 otherInput.attr('type', 'text'); 93 94 if (isRequired) 95 otherInput.attr('required', 'required'); 96 97 otherInput.attr('pattern', '.{0,255}'); 98 otherInput.on('invalid', invalid); 99 } 100 else { 101 otherInput.attr('type', 'hidden'); 102 otherInput.removeAttr('required'); 103 } 104 }; 105 106 var inputChangeHandler = function (e) { 107 var container = $(e.target).parents('[data-sf-role="multiple-choice-field-container"]'); 108 var otherRadio = $(container.find('[data-sf-multiple-choice-role="other-choice-radio"]').first()); 109 otherRadio.val($(e.target).val()); 110 }; 111 112 for (var i = 0; i < containers.length; i++) { 113 var container = $(containers[i]); 114 var inputs = container.find('[data-sf-role="multiple-choice-field-input"]'); 115 116 attachHandlers(inputs); 117 118 var radios = container.find('input[data-sf-role="multiple-choice-field-input"]'); 119 120 var otherInput = $(container.find('[data-sf-multiple-choice-role="other-choice-text"]').first()); 121 122 radios.click(radioClickHandler); 123 otherInput.change(inputChangeHandler); 124 } 125 }); 126}(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.