1BX.Aspro.Utils.readyDOM(() => { 2 $.extend($.validator.messages, { 3 required: BX.message("JS_REQUIRED"), 4 email: BX.message("JS_FORMAT"), 5 equalTo: BX.message("JS_PASSWORD_COPY"), 6 minlength: BX.message("JS_PASSWORD_LENGTH"), 7 remote: BX.message("JS_ERROR"), 8 licenses_popup: BX.message("JS_REQUIRED_LICENSES"), 9 }); 10 11 $.validator.addMethod( 12 "regexp", 13 function (value, element, regexp) { 14 var re = new RegExp(regexp); 15 return this.optional(element) || re.test(value); 16 }, 17 BX.message("JS_FORMAT") 18 ); 19 20 $.validator.addMethod( 21 "filesize", 22 function (value, element, param) { 23 return this.optional(element) || element.files[0].size <= param; 24 }, 25 BX.message("JS_FILE_SIZE") 26 ); 27 28 $.validator.addMethod( 29 "date", 30 function (value, element, param) { 31 var status = false; 32 if (!value || value.length <= 0) { 33 status = false; 34 } else { 35 // html5 date allways yyyy-mm-dd 36 var re = new RegExp("^([0-9]{4})(.)([0-9]{2})(.)([0-9]{2})$"); 37 var matches = re.exec(value); 38 if (matches) { 39 var composedDate = new Date(matches[1], matches[3] - 1, matches[5]); 40 status = 41 composedDate.getMonth() == matches[3] - 1 && 42 composedDate.getDate() == matches[5] && 43 composedDate.getFullYear() == matches[1]; 44 } else { 45 // firefox 46 var re = new RegExp("^([0-9]{2})(.)([0-9]{2})(.)([0-9]{4})$"); 47 var matches = re.exec(value); 48 if (matches) { 49 var composedDate = new Date(matches[5], matches[3] - 1, matches[1]); 50 status = 51 composedDate.getMonth() == matches[3] - 1 && 52 composedDate.getDate() == matches[1] && 53 composedDate.getFullYear() == matches[5]; 54 } 55 } 56 } 57 return status; 58 }, 59 BX.message("JS_DATE") 60 ); 61 62 $.validator.addMethod( 63 "extension", 64 function (value, element, param) { 65 param = typeof param === "string" ? param.replace(/,/g, "|") : "png|jpe?g|gif"; 66 return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); 67 }, 68 BX.message("JS_FILE_EXT") 69 ); 70 71 $.validator.addMethod( 72 "captcha", 73 function (value, element, params) { 74 let $sid = $(element).closest("form").find('input[name="captcha_sid"]'); 75 if (!$sid.length) { 76 $sid = $(element).closest("form").find('input[name="captcha_code"]'); 77 } 78 79 let sid = $sid.val(); 80 81 return $.validator.methods.remote.call(this, value, element, { 82 url: arAsproOptions["SITE_DIR"] + "ajax/check-captcha.php", 83 type: "post", 84 data: { 85 captcha_word: value, 86 captcha_sid: sid, 87 }, 88 }); 89 }, 90 BX.message("JS_ERROR") 91 ); 92 93 $.validator.addMethod( 94 "recaptcha", 95 function (value, element, param) { 96 if (BX.Aspro?.Captcha) { 97 return BX.Aspro.Captcha.validate(element); 98 } 99 100 return true; 101 }, 102 BX.message("JS_RECAPTCHA_ERROR") 103 ); 104 105 $.validator.addClassRules({ 106 confirm_password: { 107 equalTo: 'input[name="REGISTER[PASSWORD]"]', 108 minlength: 6, 109 }, 110 password: { 111 minlength: 6, 112 }, 113 inputfile: { 114 extension: arAsproOptions["THEME"]["VALIDATE_FILE_EXT"], 115 filesize: 5000000, 116 }, 117 captcha: { 118 captcha: "", 119 }, 120 recaptcha: { 121 recaptcha: "", 122 }, 123 }); 124 125 $.validator.setDefaults({ 126 highlight: function (element) { 127 $(element).parent().addClass("error"); 128 }, 129 unhighlight: function (element) { 130 $(element).parent().removeClass("error"); 131 }, 132 errorPlacement: function (error, element) { 133 error.insertBefore(element); 134 }, 135 messages:{ 136 licenses_popup: { 137 required : BX.message('JS_REQUIRED_LICENSES'), 138 }, 139 licenses_subscribe: { 140 required : BX.message('JS_REQUIRED_LICENSES'), 141 }, 142 }, 143 144 }); 145}); 146 147BX.namespace('Aspro.Validation'); 148 149BX.Aspro.Validation = { 150 appendSolutionField: (form) => { 151 const validateInputName = arAsproOptions.VALIDATION?.FORM_INPUT_NAME; 152 153 if (!form.querySelector(`[name="${validateInputName}"]`)) { 154 form.appendChild( 155 BX.create('input', { 156 attrs: { 157 type: 'hidden', 158 name: validateInputName, 159 } 160 }) 161 ); 162 } 163 } 164} 165 166$(document).on("click", ".captcha_reload", function (event) { 167 event.preventDefault(); 168 169 const $captcha = $(this).parents(".captcha-row"); 170 $.ajax({
171 url: arAsproOptions["SITE_DIR"] + "ajax/captcha.php", 172 success: function (text) { 173 $captcha.find("input[name=captcha_sid],input[name=captcha_code]").val(text); 174 $captcha.find("img").attr("src", "/bitrix/tools/captcha.php?captcha_sid=" + text); 175 $captcha.find("input[name=captcha_word]").val("").removeClass("error"); 176 $captcha.find(".captcha_input").removeClass("error").find(".error").remove(); 177 }, 178 }); 179}); 180 181BX.addCustomEvent("onSubmitForm", function (eventdata) { 182 try { 183 if (typeof eventdata === "object" && eventdata && eventdata.form) { 184 if (!(eventdata.form instanceof Node)) { 185 eventdata.form = eventdata.form[0]; 186 } 187 188 BX.Aspro?.Validation?.appendSolutionField?.(eventdata.form); 189 190 new Promise((resolve, reject) => { 191 if (BX.Aspro?.Captcha) { 192 BX.Aspro.Captcha.onSubmit(eventdata) 193 .then((result) => { 194 resolve(result); 195 }) 196 .catch((e) => { 197 reject(e); 198 }); 199 200 return; 201 } 202 203 resolve(true); 204 }).then((result) => { 205 if (result) { 206 eventdata.form.submit(); 207 if (eventdata.form.closest(".form")) { 208 eventdata.form.closest(".form").classList.add("sending"); 209 } 210 } 211 }); 212 } 213 } catch (e) { 214 console.error(e); 215 } 216});
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.