UNPKG

3.19 kBJavaScriptView Raw
1/**
2 * Regular expression matching characters to ignore when calculating the initials.
3 */
4/**
5 * Regular expression matching characters within various types of enclosures, including the enclosures themselves
6 * so for example, (xyz) [xyz] {xyz} all would be ignored
7 */
8var UNWANTED_ENCLOSURES_REGEX = /[\(\[\{][^\)\]\}]*[\)\]\}]/g;
9/**
10 * Regular expression matching special ASCII characters except space, plus some unicode special characters.
11 * Applies after unwanted enclosures have been removed
12 */
13var UNWANTED_CHARS_REGEX = /[\0-\u001F\!-/:-@\[-`\{-\u00BF\u0250-\u036F\uD800-\uFFFF]/g;
14/**
15 * Regular expression matching phone numbers. Applied after chars matching UNWANTED_CHARS_REGEX have been removed
16 * and number has been trimmed for whitespaces
17 */
18var PHONENUMBER_REGEX = /^\d+[\d\s]*(:?ext|x|)\s*\d+$/i;
19/** Regular expression matching one or more spaces. */
20var MULTIPLE_WHITESPACES_REGEX = /\s+/g;
21/**
22 * Regular expression matching languages for which we currently don't support initials.
23 * Arabic: Arabic, Arabic Supplement, Arabic Extended-A.
24 * Korean: Hangul Jamo, Hangul Compatibility Jamo, Hangul Jamo Extended-A, Hangul Syllables, Hangul Jamo Extended-B.
25 * Japanese: Hiragana, Katakana.
26 * CJK: CJK Unified Ideographs Extension A, CJK Unified Ideographs, CJK Compatibility Ideographs,
27 * CJK Unified Ideographs Extension B
28 */
29// eslint-disable-next-line @fluentui/max-len
30var UNSUPPORTED_TEXT_REGEX = /[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\u1100-\u11FF\u3130-\u318F\uA960-\uA97F\uAC00-\uD7AF\uD7B0-\uD7FF\u3040-\u309F\u30A0-\u30FF\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD869][\uDC00-\uDED6]/;
31function getInitialsLatin(displayName, isRtl) {
32 var initials = '';
33 var splits = displayName.split(' ');
34 if (splits.length === 2) {
35 initials += splits[0].charAt(0).toUpperCase();
36 initials += splits[1].charAt(0).toUpperCase();
37 }
38 else if (splits.length === 3) {
39 initials += splits[0].charAt(0).toUpperCase();
40 initials += splits[2].charAt(0).toUpperCase();
41 }
42 else if (splits.length !== 0) {
43 initials += splits[0].charAt(0).toUpperCase();
44 }
45 if (isRtl && initials.length > 1) {
46 return initials.charAt(1) + initials.charAt(0);
47 }
48 return initials;
49}
50function cleanupDisplayName(displayName) {
51 displayName = displayName.replace(UNWANTED_ENCLOSURES_REGEX, '');
52 displayName = displayName.replace(UNWANTED_CHARS_REGEX, '');
53 displayName = displayName.replace(MULTIPLE_WHITESPACES_REGEX, ' ');
54 displayName = displayName.trim();
55 return displayName;
56}
57/**
58 * Get (up to 2 characters) initials based on display name of the persona.
59 *
60 * @public
61 */
62export function getInitials(displayName, isRtl, allowPhoneInitials) {
63 if (!displayName) {
64 return '';
65 }
66 displayName = cleanupDisplayName(displayName);
67 // For names containing CJK characters, and phone numbers, we don't display initials
68 if (UNSUPPORTED_TEXT_REGEX.test(displayName) || (!allowPhoneInitials && PHONENUMBER_REGEX.test(displayName))) {
69 return '';
70 }
71 return getInitialsLatin(displayName, isRtl);
72}
73//# sourceMappingURL=initials.js.map
\No newline at end of file