PageSourceSearch

https://www.dogsinvests.org/Content/js/jquery.validate.additional-methods.js

js dogsinvests.org collected 2026-10-02 00:23:15 UTC 4,648 bytes, 104 lines download raw bytes

1// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address
2// Retrieved 2019-03-12
3// Modified to require a top level domain.
4$.validator.methods.email = function (value, element) {
5    return this.optional(element) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/.test(value);
6};
7
8// JQuery validate rule to determine if file uploaded is larger than allowed.
9// Argument 0 is the limit in bytes, argument 1 is the limit in megabytes (used for validation message).
10$.validator.addMethod("maxfilesize", function (value, element, arg) {
11    if (this.optional(element) || !element.files || !element.files[0]) {
12        return true;
13    } else {
14        for (var i = 0; i < element.files.length; i++) {
15            if (element.files[i].size > arg[0]) {
16                return false;
17            }
18        }
19        return true;
20    }
21}, "Please select a file less than {1} megabytes.");
22
23// jQuery validate rule to disallow HTML elements. Use to give a user-friendly validation message so the server-side input validation message isn't seen.
24$.validator.addMethod('nohtml', function (value, element, params) {
25    let htmlPattern = /(<[a-zA-Z]+)|(<\/[a-zA-Z][a-zA-Z0-9-_]*>)/gi;
26    return !(htmlPattern.test(value));
27}, 'No HTML allowed.');
28
29$.validator.addMethod("remoteWithFallback", function (value, element, param, method) {
30    if (element.defaultValue != '' && element.defaultValue == element.value) {
31        return true;
32    }
33    if (this.optional(element)) {
34        return "dependency-mismatch";
35    }
36    method = typeof method === "string" && method || "remote";
37    var previous = this.previousValue(element, method), validator, data, optionDataString;
38    if (!this.settings.messages[element.name]) {
39        this.settings.messages[element.name] = {};
40    }
41    previous.originalMessage = previous.originalMessage || this.settings.messages[element.name][method];
42    this.settings.messages[element.name][method] = previous.message;
43
44    param = typeof param === "string" && { url: param } || param;
45    optionDataString = $.param($.extend({ data: value }, param.data));
46    if (previous.old === optionDataString) {
47        return previous.valid;
48    }
49
50    previous.old = optionDataString;
51    validator = this;
52    this.startRequest(element);
53    data = {};
54    data[element.name] = value;
55    $.ajax($.extend(true, {
56        mode: "abort",
57        port: "validate" + element.name,
58        dataType: "json",
59        data: data,
60        context: validator.currentForm,
61        success: function (response) {
62            var valid = response === true || response === "true",
63                errors, message, submitted;
64
65            validator.settings.messages[element.name][method] = previous.originalMessage;
66            if (valid) {
67                submitted = validator.formSubmitted;
68                validator.resetInternals();
69                validator.toHide = validator.errorsFor(element);
70                validator.formSubmitted = submitted;
71                validator.successList.push(element);
72                validator.invalid[element.name] = false;
73                validator.showErrors();
74            } else {
75                errors = {};
76                message = response || validator.defaultMessage(element, { method: method, parameters: value });
77                errors[element.name] = previous.message = message;
78                validator.invalid[element.name] = true;
79                validator.showErrors(errors);
80            }
81            previous.valid = valid;
82            validator.stopRequest(element, valid);
83        },
84        error: function (jqXHR, textStatus, errorThrown) {
85            var valid = false, errors, message, submitted;
86            validator.settings.messages[element.name][method] = previous.originalMessage;
87            errors = {};
88            if (jqXHR.status === 403) {
89                message = 'Unable to check this field. Please login again.'
90                if (typeof sessionRenew === 'object') {
91                    sessionRenew.openExpireDiv();
92                }
93            } else {
94                message = 'An error occurred when checking this field.';
95            }
96            errors[element.name] = previous.message = message;
97            validator.invalid[element.name] = true;
98            validator.showErrors(errors);
99            previous.valid = valid;
100            validator.stopRequest(element, valid);
101        }
102    }, param));
103    return "pending";
104});

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.