diff --git a/src/skins/vector/css/atoms/MemberAvatar.css b/src/skins/vector/css/atoms/MemberAvatar.css
index fc5fd60d2..616882fd5 100644
--- a/src/skins/vector/css/atoms/MemberAvatar.css
+++ b/src/skins/vector/css/atoms/MemberAvatar.css
@@ -19,3 +19,8 @@ limitations under the License.
border-radius: 20px;
}
+.mx_MemberAvatar_initial {
+ position: absolute;
+ color: #fff;
+ text-align: center;
+}
\ No newline at end of file
diff --git a/src/skins/vector/css/atoms/RoomAvatar.css b/src/skins/vector/css/atoms/RoomAvatar.css
new file mode 100644
index 000000000..40d9064b2
--- /dev/null
+++ b/src/skins/vector/css/atoms/RoomAvatar.css
@@ -0,0 +1,24 @@
+/*
+Copyright 2015 OpenMarket Ltd
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+.mx_RoomAvatar {
+}
+
+.mx_RoomAvatar_initial {
+ position: absolute;
+ color: #fff;
+ text-align: center;
+}
\ No newline at end of file
diff --git a/src/skins/vector/views/atoms/MemberAvatar.js b/src/skins/vector/views/atoms/MemberAvatar.js
index 69652e1a2..088e7de26 100644
--- a/src/skins/vector/views/atoms/MemberAvatar.js
+++ b/src/skins/vector/views/atoms/MemberAvatar.js
@@ -40,6 +40,25 @@ module.exports = React.createClass({
},
render: function() {
+ // XXX: recalculates default avatar url constantly
+ if (this.state.imageUrl === this.defaultAvatarUrl(this.props.member)) {
+ var initial;
+ if (this.props.member.name[0])
+ initial = this.props.member.name[0].toUpperCase();
+ if (initial === '@' && this.props.member.name[1])
+ initial = this.props.member.name[1].toUpperCase();
+
+ return (
+
+ { initial }
+
+
+ );
+ }
return (
- );
+
+ // XXX: recalculates fallback avatar constantly
+ if (this.state.imageUrl === this.getFallbackAvatar()) {
+ var initial;
+ if (this.props.room.name[0])
+ initial = this.props.room.name[0].toUpperCase();
+ if (initial === '@' && this.props.room.name[1])
+ initial = this.props.room.name[1].toUpperCase();
+
+ return (
+
+ { initial }
+
+
+ );
+ }
+ else {
+ return
+ }
+
}
});