diff --git a/skins/base/css/common.css b/skins/base/css/common.css index 4c2e7c0b8d..aa10e40988 100644 --- a/skins/base/css/common.css +++ b/skins/base/css/common.css @@ -28,6 +28,7 @@ div.error { } h2 { + color: #80cef4; font-weight: 400; font-size: 20px; margin-top: 16px; diff --git a/skins/base/css/organisms/LeftPanel.css b/skins/base/css/organisms/LeftPanel.css index 70a4b6f772..bfe26f115f 100644 --- a/skins/base/css/organisms/LeftPanel.css +++ b/skins/base/css/organisms/LeftPanel.css @@ -44,7 +44,6 @@ limitations under the License. padding-left: 16px; padding-right: 16px; - /* background-color: #0ff; */ height: 100%; overflow-y: scroll; } diff --git a/skins/base/css/organisms/RoomView.css b/skins/base/css/organisms/RoomView.css index bc1a16927d..e1f3ea6bd9 100644 --- a/skins/base/css/organisms/RoomView.css +++ b/skins/base/css/organisms/RoomView.css @@ -64,7 +64,6 @@ limitations under the License. width: 100%; height: 100%; margin-bottom: 60px; - /* background-color: #ff0; */ overflow-y: scroll; } @@ -78,6 +77,14 @@ limitations under the License. width: 100%; } +.mx_RoomView_MessageList h2 { + clear: both; + margin-top: 32px; + margin-bottom: 8px; + padding-bottom: 6px; + border-bottom: 1px solid #a8dbf3; +} + .mx_RoomView_invitePrompt { } diff --git a/skins/base/views/molecules/MRoomMemberTile.js b/skins/base/views/molecules/MRoomMemberTile.js index 92b6b119e3..996b6f9c67 100644 --- a/skins/base/views/molecules/MRoomMemberTile.js +++ b/skins/base/views/molecules/MRoomMemberTile.js @@ -45,12 +45,14 @@ module.exports = React.createClass({ render: function() { // XXX: for now, just cheekily borrow the css from message tile... + var timestamp = this.props.last ? : null; + return (
- + { timestamp } {this.getMemberEventText()} diff --git a/src/ComponentBroker.js b/src/ComponentBroker.js index 431f4766a8..0f606dd314 100644 --- a/src/ComponentBroker.js +++ b/src/ComponentBroker.js @@ -98,6 +98,7 @@ require('../skins/base/views/organisms/RightPanel'); require('../skins/base/views/molecules/RoomCreate'); require('../skins/base/views/molecules/RoomDropTarget'); require('../skins/base/views/molecules/DirectoryMenu'); +require('../skins/base/views/molecules/DateSeparator'); require('../skins/base/views/atoms/voip/VideoFeed'); require('../skins/base/views/molecules/voip/VideoView'); require('../skins/base/views/molecules/voip/CallView'); diff --git a/src/controllers/organisms/RoomView.js b/src/controllers/organisms/RoomView.js index 9078d558db..f1a26ee4dc 100644 --- a/src/controllers/organisms/RoomView.js +++ b/src/controllers/organisms/RoomView.js @@ -36,6 +36,8 @@ var tileTypes = { 'm.call.hangup': ComponentBroker.get('molecules/voip/MCallHangupTile') }; +var DateSeparator = ComponentBroker.get('molecules/DateSeparator'); + module.exports = { getInitialState: function() { return { @@ -231,22 +233,33 @@ module.exports = { var TileType = tileTypes[mxEv.getType()]; var continuation = false; var last = false; + var dateSeparator = null; if (i == this.state.room.timeline.length - 1) { last = true; } - if (i > 0 && - count < this.state.messageCap - 1 && - this.state.room.timeline[i].sender && - this.state.room.timeline[i - 1].sender && - this.state.room.timeline[i].sender.userId === + if (i > 0 && count < this.state.messageCap - 1) { + if (this.state.room.timeline[i].sender && + this.state.room.timeline[i - 1].sender && + this.state.room.timeline[i].sender.userId === this.state.room.timeline[i - 1].sender.userId) - { - continuation = true; - } + { + continuation = true; + } + + var ts0 = this.state.room.timeline[i - 1].getTs(); + var ts1 = this.state.room.timeline[i].getTs(); + if (new Date(ts0).toDateString() !== new Date(ts1).toDateString()) { + dateSeparator = ; + continuation = false; + } + } if (!TileType) continue; ret.unshift( ); + if (dateSeparator) { + ret.unshift(dateSeparator); + } ++count; } return ret;