move getInitialLetter to Avatar so we can reuse it for editor pills

This commit is contained in:
Bruno Windels 2019-05-20 14:20:36 +02:00
parent a47e722fa1
commit e58d844e5b
2 changed files with 33 additions and 1 deletions

View file

@ -58,4 +58,36 @@ module.exports = {
} }
return require('../res/img/' + images[total % images.length] + '.png'); return require('../res/img/' + images[total % images.length] + '.png');
}, },
/**
* returns the first (non-sigil) character of 'name',
* converted to uppercase
*/
getInitialLetter(name) {
if (name.length < 1) {
return undefined;
}
let idx = 0;
const initial = name[0];
if ((initial === '@' || initial === '#' || initial === '+') && name[1]) {
idx++;
}
// string.codePointAt(0) would do this, but that isn't supported by
// some browsers (notably PhantomJS).
let chars = 1;
const first = name.charCodeAt(idx);
// check if its the start of a surrogate pair
if (first >= 0xD800 && first <= 0xDBFF && name[idx+1]) {
const second = name.charCodeAt(idx+1);
if (second >= 0xDC00 && second <= 0xDFFF) {
chars++;
}
}
const firstChar = name.substring(idx, idx+chars);
return firstChar.toUpperCase();
},
}; };

View file

@ -176,7 +176,7 @@ module.exports = React.createClass({
} = this.props; } = this.props;
if (imageUrl === this.state.defaultImageUrl) { if (imageUrl === this.state.defaultImageUrl) {
const initialLetter = this._getInitialLetter(name); const initialLetter = AvatarLogic.getInitialLetter(name);
const textNode = ( const textNode = (
<EmojiText className="mx_BaseAvatar_initial" aria-hidden="true" <EmojiText className="mx_BaseAvatar_initial" aria-hidden="true"
style={{ fontSize: (width * 0.65) + "px", style={{ fontSize: (width * 0.65) + "px",