PageSourceSearch

https://account.potato222.com/register/js/name-validator.js?v=20251114

js potato222.com collected 2026-10-07 22:43:48 UTC 4,378 bytes, 145 lines download raw bytes

1function displayValidationResult(fieldName, result) {
2    if (result.length === 0) {
3        hideFieldErrorMsg(fieldName);
4    } else {
5        showFieldErrorMsg(fieldName, result[0]);
6    }
7}
8
9async function validateNameByCountry(personName, countryCode) {
10    return new Promise((resolve, reject) => {
11        validatePersonalNameUseLanguageInCountry(personName, countryCode, function (result) {
12            resolve(result);
13        });
14    });
15}
16
17async function newValidateNameField() {
18    var firstNameResult = await validateFirstName();
19    var lastNameResult = await validateLastName();
20
21    return firstNameResult && lastNameResult;
22}
23
24async function validateByRules(rules, target) {
25    return rules.reduce(async (promiseResult, rule) => {
26        var result = await promiseResult;
27        if (rule.asyncValidator) {
28            const failMessage = (await rule.asyncValidator(target)).failMessage;
29
30            if (failMessage !== null) {
31                result.push(failMessage);
32            }
33        }
34
35        if (rule.validator && !rule.validator(target)) {
36            result.push(rule.failMessage);
37        };
38
39        return result;
40    }, []);
41}
42
43async function validateByCountry(name) {
44    const fullNameRules = [{
45        asyncValidator: async (val) => {
46            var result = await validateNameByCountry(val, country.CountryCode);
47
48            return {
49                failMessage: result.IsValid ? null : result.Message
50            };
51        }
52    }];
53    const fullNameResult = await validateByRules(fullNameRules, name);
54    return fullNameResult;
55}
56
57async function validateFirstName() {
58    const firstName = getTextfieldTrimValue("FirstName");
59
60    const firstNameRules = [{
61        failMessage: validationMsg.FirstNameMustBeEntered,
62        validator: (val) => !isEmpty(val)
63    }, {
64        failMessage: validationMsg.CannotContainNumber,
65        validator: (val) => !isContainNumber(val)
66        }];
67
68    const firstNameResult = await validateByRules(firstNameRules, firstName);
69    const languageResult = await validateByCountry(firstName);
70    const result = firstNameResult.concat(languageResult);
71 
72    if (isFirstNameFieldDirty) {
73        displayValidationResult("FirstName", result);
74    }
75    return result.length === 0;
76}
77
78// TODO: refactor merge validateFirstName & validateFullName method
79async function validateFullName() {
80    const fullName = getTextfieldTrimValue("FullName");
81
82    const fullNameRules = [{
83        failMessage: validationMsg.FullNameMustBeEntered,
84        validator: (val) => !isEmpty(val)
85    }, {
86        failMessage: validationMsg.CannotContainNumber,
87        validator: (val) => !isContainNumber(val)
88        }];
89
90    const fullNameResult = await validateByRules(fullNameRules, fullName);
91    const languageResult = await validateByCountry(fullName);
92    const result = fullNameResult.concat(languageResult);
93 
94    if (isFullNameFieldDirty) {
95        displayValidationResult("FullName", result);
96    }
97    return result.length === 0;
98}
99
100async function validateLastName() {
101    const lastName = getTextfieldTrimValue("LastName");
102
103    const noNeedLastName = $("#cbNoLastName").is(":checked");
104
105    const lastNameRules = [{
106        failMessage: validationMsg.LastNameMustBeEntered,
107        validator: (val) => {
108            return noNeedLastName || !isEmpty(val);
109        }
110    }, {
111        failMessage: validationMsg.CannotContainNumber,
112        validator: (val) => {
113            return noNeedLastName || !isContainNumber(val);
114        }
115    }];
116
117    const lastNameResult = await validateByRules(lastNameRules, lastName);
118    const languageResult = await validateByCountry(lastName);
119    const result = lastNameResult.concat(languageResult);
120
121    if (isLastNameFieldDirty) {
122        displayValidationResult("LastName", result);
123    }
124    return result.length === 0;
125}
126
127const firstNameValidationDebounce = debounce(function () {
128    validateFirstName().then(function (isValid) {
129        stepTwoValidateProxy.proxy.txtFirstName = isValid;
130    });
131});
132
133const lastNameValidationDebounce = debounce(function () {
134    validateLastName().then(function (isValid) {
135        stepTwoValidateProxy.proxy.txtLastName = isValid;
136    });
137});
138
139const fullNameValidationDebounce = debounce(function () {
140    validateFullName().then(function (isValid) {
141        stepTwoValidateProxy.proxy.txtFullName = isValid;
142    });
143});
144
145

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.