azure-devops-ui
Version:
React components for building web UI in Azure DevOps
80 lines (79 loc) • 2.63 kB
JavaScript
const PERSONA_COLOR_BLUE = { red: 37, green: 116, blue: 204 };
/**
* Colors added here should be checked via running FastPass before commiting.
*
* @see https://accessibilityinsights.io/
*/
const PERSONA_COLOR_PALETTE = [
{ red: 104, green: 123, blue: 33 },
{ red: 76, green: 119, blue: 168 },
{ red: 177, green: 87, blue: 144 },
{ red: 0, green: 133, blue: 0 },
{ red: 30, green: 113, blue: 69 },
{ red: 217, green: 0, blue: 128 },
{ red: 126, green: 56, blue: 120 },
{ red: 96, green: 60, blue: 186 },
{ red: 98, green: 113, blue: 171 },
{ red: 0, green: 130, blue: 129 },
PERSONA_COLOR_BLUE,
{ red: 43, green: 87, blue: 151 },
{ red: 196, green: 74, blue: 38 },
{ red: 185, green: 29, blue: 71 } // Dark Red
];
// Char.IsLetter ranges
const LETTERS = [
"[\u0030-\u0039]",
"[\u0041-\u005A]",
"[\u0400-\u042F]",
"[\u0061-\u007A]",
"[\u03AC-\u03CE]",
"[\u01C5]",
"[\u1FFC]",
"[\u02B0-\u02C1]",
"[\u1D2C-\u1D61]",
"[\u05D0-\u05EA]",
"[\u0621-\u063A]",
"[\u4E00-\u9FC3]",
"[\u00C0-\u00FF]",
"[\u0100-\u017F]",
"[\u0180-\u024F]" // LATIN-1 EXTENDED-B
];
const LETTERS_REGEX = LETTERS.join("|");
export function getInitialsColorFromName(displayName) {
if (!displayName) {
return PERSONA_COLOR_BLUE;
}
let hashCode = 0;
for (let i = displayName.length - 1; i >= 0; i--) {
const ch = displayName.charCodeAt(i);
const shift = i % 8;
// tslint:disable-next-line:no-bitwise
hashCode ^= (ch << shift) + (ch >> (8 - shift));
}
return PERSONA_COLOR_PALETTE[hashCode % PERSONA_COLOR_PALETTE.length];
}
export function getInitialsFromName(displayName) {
if (!displayName) {
return "";
}
// Extract the group name if the displayName is in the format "[scope name]\group name"
const groupNameMatch = displayName.match(/^\[.*?\]\\(.*)$/);
const nameToProcess = groupNameMatch ? groupNameMatch[1] : displayName;
const segments = nameToProcess.split(" ").filter(x => x !== "");
if (segments.length === 0) {
return "";
}
let firstNameInitial = "";
let lastNameInitial = "";
segments.forEach(segment => {
if (segment[0].match(LETTERS_REGEX)) {
if (firstNameInitial.length === 0) {
firstNameInitial = segment[0];
}
else {
lastNameInitial = segment[0];
}
}
});
return firstNameInitial.concat(lastNameInitial).toUpperCase();
}