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 offer_popup_OCB: { 143 required : BX.message('JS_REQUIRED_OFFER') 144 }, 145 }, 146 }); 147}); 148 149BX.namespace('Aspro.Validation'); 150 151BX.Aspro.Validation = { 152 appendSolutionField: (form) => { 153 const validateInputName = arAsproOptions.VALIDATION?.FORM_INPUT_NAME; 154 155 if (!form.querySelector(`[name="${validateInputName}"]`)) { 156 form.appendChild( 157 BX.create('input', { 158 attrs: { 159 type: 'hidden', 160 name: validateInputName, 161 } 162 }) 163 ); 164 } 165 } 166} 167 168$(document).on("click", ".captcha_reload", function (event) { 169 event.preventDefault(); 170 171 const $captcha = $(this).parents(".captcha-row"); 172 $.ajax({ 173 url: arAsproOptions["SITE_DIR"] + "ajax/captcha.php", 174 success: function (text) { 175 $captcha.find("input[name=captcha_sid],input[name=captcha_code]").val(text); 176 $captcha.find("img").attr("src", "/bitrix/tools/captcha.php?captcha_sid=" + text);
177 $captcha.find("input[name=captcha_word]").val("").removeClass("error"); 178 $captcha.find(".captcha_input").removeClass("error").find(".error").remove(); 179 }, 180 }); 181}); 182 183BX.addCustomEvent("onSubmitForm", function (eventdata) { 184 try { 185 if (typeof eventdata === "object" && eventdata && eventdata.form) { 186 if (!(eventdata.form instanceof Node)) { 187 eventdata.form = eventdata.form[0]; 188 } 189 190 BX.Aspro?.Validation?.appendSolutionField?.(eventdata.form); 191 192 new Promise((resolve, reject) => { 193 if (BX.Aspro?.Captcha) { 194 BX.Aspro.Captcha.onSubmit(eventdata) 195 .then((result) => { 196 resolve(result); 197 }) 198 .catch((e) => { 199 reject(e); 200 }); 201 202 return; 203 } 204 205 resolve(true); 206 }).then((result) => { 207 if (result) { 208 eventdata.form.submit(); 209 if (eventdata.form.closest(".form")) { 210 eventdata.form.closest(".form").classList.add("sending"); 211 } 212 } 213 }); 214 } 215 } catch (e) { 216 console.error(e); 217 } 218});
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.