PageSourceSearch

https://komplektadr.ru/bitrix/templates/aspro_max/js/conditional/validation.js

js komplektadr.ru collected 2026-10-08 15:20:27 UTC 5,947 bytes, 218 lines download raw bytes

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.