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.