From fec266f1c025e53962b0dd50128a06f915ea94eb Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 13 Aug 2015 19:30:02 +0100 Subject: [PATCH] Move avatars into their own components so I can add functionality like custom default avatars and onerror sources without having to add it in 13 separate places. Add the aforementioned features. --- skins/base/css/atoms/MemberAvatar.css | 22 ++++++ skins/base/css/molecules/MemberTile.css | 6 -- skins/base/views/atoms/MemberAvatar.js | 34 +++++++++ skins/base/views/atoms/RoomAvatar.js | 34 +++++++++ skins/base/views/molecules/EventAsTextTile.js | 3 +- skins/base/views/molecules/MRoomMemberTile.js | 3 +- skins/base/views/molecules/MemberInfo.js | 6 +- skins/base/views/molecules/MemberTile.js | 7 +- skins/base/views/molecules/MessageComposer.js | 5 +- skins/base/views/molecules/MessageTile.js | 3 +- skins/base/views/molecules/RoomHeader.js | 10 ++- skins/base/views/molecules/RoomTile.js | 8 +- .../views/molecules/voip/MCallAnswerTile.js | 2 +- .../views/molecules/voip/MCallHangupTile.js | 2 +- .../views/molecules/voip/MCallInviteTile.js | 2 +- skins/base/views/organisms/Notifier.js | 7 +- src/ComponentBroker.js | 2 + src/DefaultAvatar.js | 38 ++++++++++ src/controllers/atoms/MemberAvatar.js | 76 +++++++++++++++++++ src/controllers/atoms/RoomAvatar.js | 67 ++++++++++++++++ 20 files changed, 314 insertions(+), 23 deletions(-) create mode 100644 skins/base/css/atoms/MemberAvatar.css create mode 100644 skins/base/views/atoms/MemberAvatar.js create mode 100644 skins/base/views/atoms/RoomAvatar.js create mode 100644 src/DefaultAvatar.js create mode 100644 src/controllers/atoms/MemberAvatar.js create mode 100644 src/controllers/atoms/RoomAvatar.js diff --git a/skins/base/css/atoms/MemberAvatar.css b/skins/base/css/atoms/MemberAvatar.css new file mode 100644 index 0000000000..6422df798e --- /dev/null +++ b/skins/base/css/atoms/MemberAvatar.css @@ -0,0 +1,22 @@ +/* +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_MemberAvatar { + z-index: 20; + border-radius: 20px; + background-color: #dbdbdb; +} + diff --git a/skins/base/css/molecules/MemberTile.css b/skins/base/css/molecules/MemberTile.css index 2033b5b03e..f296668f31 100644 --- a/skins/base/css/molecules/MemberTile.css +++ b/skins/base/css/molecules/MemberTile.css @@ -31,12 +31,6 @@ limitations under the License. position: relative; } -.mx_MemberTile_avatarImg { - z-index: 20; - border-radius: 20px; - background-color: #dbdbdb; -} - .mx_MemberTile_inviteEditing { display: initial ! important; } diff --git a/skins/base/views/atoms/MemberAvatar.js b/skins/base/views/atoms/MemberAvatar.js new file mode 100644 index 0000000000..4ef5fea908 --- /dev/null +++ b/skins/base/views/atoms/MemberAvatar.js @@ -0,0 +1,34 @@ +/* +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. +*/ + +'use strict'; + +var React = require('react'); + +var MemberAvatarController = require("../../../../src/controllers/atoms/MemberAvatar"); + +module.exports = React.createClass({ + displayName: 'MemberAvatar', + mixins: [MemberAvatarController], + + render: function() { + return ( + + ); + } +}); diff --git a/skins/base/views/atoms/RoomAvatar.js b/skins/base/views/atoms/RoomAvatar.js new file mode 100644 index 0000000000..48febbc8c9 --- /dev/null +++ b/skins/base/views/atoms/RoomAvatar.js @@ -0,0 +1,34 @@ +/* +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. +*/ + +'use strict'; + +var React = require('react'); + +var RoomAvatarController = require("../../../../src/controllers/atoms/RoomAvatar"); + +module.exports = React.createClass({ + displayName: 'RoomAvatar', + mixins: [RoomAvatarController], + + render: function() { + return ( + + ); + } +}); diff --git a/skins/base/views/molecules/EventAsTextTile.js b/skins/base/views/molecules/EventAsTextTile.js index f53d83c6d7..bc585b8163 100644 --- a/skins/base/views/molecules/EventAsTextTile.js +++ b/skins/base/views/molecules/EventAsTextTile.js @@ -22,6 +22,7 @@ var MatrixClientPeg = require("../../../../src/MatrixClientPeg"); var EventAsTextTileController = require("../../../../src/controllers/molecules/EventAsTextTile"); var ComponentBroker = require('../../../../src/ComponentBroker'); var MessageTimestamp = ComponentBroker.get('atoms/MessageTimestamp'); +var MemberAvatar = ComponentBroker.get('atoms/MemberAvatar'); var TextForEvent = require("../../../../src/TextForEvent"); module.exports = React.createClass({ @@ -34,7 +35,7 @@ module.exports = React.createClass({ return (
- +
{ timestamp } diff --git a/skins/base/views/molecules/MRoomMemberTile.js b/skins/base/views/molecules/MRoomMemberTile.js index 3ca1428316..fb65d37572 100644 --- a/skins/base/views/molecules/MRoomMemberTile.js +++ b/skins/base/views/molecules/MRoomMemberTile.js @@ -24,6 +24,7 @@ var MatrixClientPeg = require("../../../../src/MatrixClientPeg"); var ComponentBroker = require('../../../../src/ComponentBroker'); var TextForEvent = require('../../../../src/TextForEvent'); var MessageTimestamp = ComponentBroker.get('atoms/MessageTimestamp'); +var MemberAvatar = ComponentBroker.get('atoms/MemberAvatar'); module.exports = React.createClass({ displayName: 'MRoomMemberTile', @@ -41,7 +42,7 @@ module.exports = React.createClass({ return (
- +
{ timestamp } diff --git a/skins/base/views/molecules/MemberInfo.js b/skins/base/views/molecules/MemberInfo.js index 3e4dbcd77f..e79b99a264 100644 --- a/skins/base/views/molecules/MemberInfo.js +++ b/skins/base/views/molecules/MemberInfo.js @@ -20,6 +20,8 @@ var React = require('react'); var MatrixClientPeg = require("../../../../src/MatrixClientPeg"); var MemberInfoController = require("../../../../src/controllers/molecules/MemberInfo"); +var ComponentBroker = require('../../../../src/ComponentBroker'); +var MemberAvatar = ComponentBroker.get('atoms/MemberAvatar'); module.exports = React.createClass({ displayName: 'MemberInfo', @@ -96,9 +98,7 @@ module.exports = React.createClass({
- +
{this.props.member.userId}
{opLabel} diff --git a/skins/base/views/molecules/MemberTile.js b/skins/base/views/molecules/MemberTile.js index cf5980b94d..bd1840511c 100644 --- a/skins/base/views/molecules/MemberTile.js +++ b/skins/base/views/molecules/MemberTile.js @@ -24,6 +24,7 @@ var Modal = require("../../../../src/Modal"); var MemberTileController = require("../../../../src/controllers/molecules/MemberTile"); var MemberInfo = ComponentBroker.get('molecules/MemberInfo'); var ErrorDialog = ComponentBroker.get("organisms/ErrorDialog"); +var MemberAvatar = ComponentBroker.get('atoms/MemberAvatar'); // The Lato WOFF doesn't include sensible combining diacritics, so Chrome chokes on rendering them. // Revert to Arial when this happens, which on OSX works at least. @@ -95,10 +96,8 @@ module.exports = React.createClass({ return (
- - { power } + + { power }
{ nameEl }
diff --git a/skins/base/views/molecules/MessageComposer.js b/skins/base/views/molecules/MessageComposer.js index 639c5bff0f..a8d8a4ebab 100644 --- a/skins/base/views/molecules/MessageComposer.js +++ b/skins/base/views/molecules/MessageComposer.js @@ -22,6 +22,9 @@ var MatrixClientPeg = require("../../../../src/MatrixClientPeg"); var MessageComposerController = require("../../../../src/controllers/molecules/MessageComposer"); var ContentMessages = require("../../../../src/ContentMessages"); +var ComponentBroker = require('../../../../src/ComponentBroker'); +var MemberAvatar = ComponentBroker.get('atoms/MemberAvatar'); + module.exports = React.createClass({ displayName: 'MessageComposer', mixins: [MessageComposerController], @@ -47,7 +50,7 @@ module.exports = React.createClass({
- +