From 490e56bfbbfdbe50ce10250c926e4ed41c5fe8bd Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 5 Oct 2015 15:32:34 +0100 Subject: [PATCH 01/85] Improved url / hash change handling --- src/vector/index.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/vector/index.js b/src/vector/index.js index 597803f7..1f6585f7 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -53,14 +53,18 @@ function onHashChange(ev) { } var loaded = false; +var lastLoadedScreen = null; // This will be called whenever the SDK changes screens, // so a web page can update the URL bar appropriately. var onNewScreen = function(screen) { - if (!loaded) return; - var hash = '#/' + screen; - lastLocationHashSet = hash; - window.location.hash = hash; + if (!loaded) { + lastLoadedScreen = screen; + } else { + var hash = '#/' + screen; + lastLocationHashSet = hash; + window.location.hash = hash; + } } // We use this to work out what URL the SDK should @@ -85,5 +89,9 @@ window.addEventListener('hashchange', onHashChange); window.onload = function() { routeUrl(window.location); loaded = true; + if (lastLoadedScreen) { + onNewScreen(lastLoadedScreen); + lastLoadedScreen = null; + } } From 85636ccdadf4b0b269b723abbffe92ee39e676de Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 5 Oct 2015 16:29:07 +0100 Subject: [PATCH 02/85] Show end call button in states other than connected and ringback: it's perfectly valid to want to end the call at other times. Fixes #9 --- src/skins/vector/views/molecules/RoomHeader.js | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/skins/vector/views/molecules/RoomHeader.js b/src/skins/vector/views/molecules/RoomHeader.js index f7d3fe7e..fc097d39 100644 --- a/src/skins/vector/views/molecules/RoomHeader.js +++ b/src/skins/vector/views/molecules/RoomHeader.js @@ -53,17 +53,12 @@ module.exports = React.createClass({ var topic = this.props.room.currentState.getStateEvents('m.room.topic', ''); var callButtons; - if (this.state) { - switch (this.state.call_state) { - case "ringback": - case "connected": - callButtons = ( -
- End call -
- ); - break; - } + if (this.state && this.state.call_state != 'ended') { + callButtons = ( +
+ End call +
+ ); } var name = null; From 807e9471461cdc3e65be56c84a25a94812e0aec0 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 6 Oct 2015 14:12:45 +0100 Subject: [PATCH 03/85] Add spinner for inviting. Fixes #13. --- .../vector/views/organisms/MemberList.js | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/skins/vector/views/organisms/MemberList.js b/src/skins/vector/views/organisms/MemberList.js index 1cf0bf27..b525c6be 100644 --- a/src/skins/vector/views/organisms/MemberList.js +++ b/src/skins/vector/views/organisms/MemberList.js @@ -18,6 +18,7 @@ limitations under the License. var React = require('react'); var classNames = require('classnames'); +var Loader = require('react-loader'); var MemberListController = require('matrix-react-sdk/lib/controllers/organisms/MemberList') @@ -69,14 +70,20 @@ module.exports = React.createClass({ }); var EditableText = sdk.getComponent("atoms.EditableText"); - return ( -
-
-
- + if (this.state.inviting) { + return ( + + ); + } else { + return ( +
+
+
+ +
-
- ); + ); + } }, render: function() { From fca65a8cdbeee3708a1c8d80fbe341f9b5c645b4 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 6 Oct 2015 15:09:42 +0100 Subject: [PATCH 04/85] Show invited members separately. May not be the final look. Fixes #6 --- .../vector/views/organisms/MemberList.js | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/skins/vector/views/organisms/MemberList.js b/src/skins/vector/views/organisms/MemberList.js index b525c6be..06aa3ba6 100644 --- a/src/skins/vector/views/organisms/MemberList.js +++ b/src/skins/vector/views/organisms/MemberList.js @@ -33,11 +33,14 @@ module.exports = React.createClass({ return { editing: false }; }, - makeMemberTiles: function() { + makeMemberTiles: function(membership) { var MemberTile = sdk.getComponent("molecules.MemberTile"); var self = this; - return Object.keys(self.state.memberDict).map(function(userId) { + return Object.keys(self.state.memberDict).filter(function(userId) { + var m = self.state.memberDict[userId]; + return m.membership == membership; + }).map(function(userId) { var m = self.state.memberDict[userId]; return ( @@ -87,17 +90,32 @@ module.exports = React.createClass({ }, render: function() { + var invitedSection = null; + var invitedMemberTiles = this.makeMemberTiles('invite'); + if (invitedMemberTiles.length > 0) { + invitedSection = ( +
+

Invited

+
+ {invitedMemberTiles} +
+
+ ); + } return (
-

Members

-
- {this.makeMemberTiles()} - {this.inviteTile()} +
+

Members

+
+ {this.makeMemberTiles('join')} +
+ {invitedSection} + {this.inviteTile()}
); From c22442f6d1e6aa61a85ccf3c8ca187979dfca28f Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 7 Oct 2015 18:44:07 +0100 Subject: [PATCH 05/85] Add ChangeDisplayName component and use it --- src/skins/vector/skindex.js | 17 +++--- .../views/molecules/ChangeDisplayName.js | 56 +++++++++++++++++++ .../vector/views/organisms/UserSettings.js | 4 +- 3 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 src/skins/vector/views/molecules/ChangeDisplayName.js diff --git a/src/skins/vector/skindex.js b/src/skins/vector/skindex.js index 4f76ad62..dbc161fa 100644 --- a/src/skins/vector/skindex.js +++ b/src/skins/vector/skindex.js @@ -23,6 +23,9 @@ limitations under the License. var skin = {}; +skin['atoms.create_room.CreateRoomButton'] = require('./views/atoms/create_room/CreateRoomButton'); +skin['atoms.create_room.Presets'] = require('./views/atoms/create_room/Presets'); +skin['atoms.create_room.RoomAlias'] = require('./views/atoms/create_room/RoomAlias'); skin['atoms.EditableText'] = require('./views/atoms/EditableText'); skin['atoms.EnableNotificationsButton'] = require('./views/atoms/EnableNotificationsButton'); skin['atoms.ImageView'] = require('./views/atoms/ImageView'); @@ -30,26 +33,24 @@ skin['atoms.LogoutButton'] = require('./views/atoms/LogoutButton'); skin['atoms.MemberAvatar'] = require('./views/atoms/MemberAvatar'); skin['atoms.MessageTimestamp'] = require('./views/atoms/MessageTimestamp'); skin['atoms.RoomAvatar'] = require('./views/atoms/RoomAvatar'); -skin['atoms.create_room.CreateRoomButton'] = require('./views/atoms/create_room/CreateRoomButton'); -skin['atoms.create_room.Presets'] = require('./views/atoms/create_room/Presets'); -skin['atoms.create_room.RoomAlias'] = require('./views/atoms/create_room/RoomAlias'); skin['atoms.voip.VideoFeed'] = require('./views/atoms/voip/VideoFeed'); skin['molecules.BottomLeftMenu'] = require('./views/molecules/BottomLeftMenu'); skin['molecules.ChangeAvatar'] = require('./views/molecules/ChangeAvatar'); +skin['molecules.ChangeDisplayName'] = require('./views/molecules/ChangeDisplayName'); skin['molecules.ChangePassword'] = require('./views/molecules/ChangePassword'); skin['molecules.DateSeparator'] = require('./views/molecules/DateSeparator'); skin['molecules.EventAsTextTile'] = require('./views/molecules/EventAsTextTile'); +skin['molecules.MatrixToolbar'] = require('./views/molecules/MatrixToolbar'); +skin['molecules.MemberInfo'] = require('./views/molecules/MemberInfo'); +skin['molecules.MemberTile'] = require('./views/molecules/MemberTile'); skin['molecules.MEmoteTile'] = require('./views/molecules/MEmoteTile'); +skin['molecules.MessageComposer'] = require('./views/molecules/MessageComposer'); +skin['molecules.MessageTile'] = require('./views/molecules/MessageTile'); skin['molecules.MFileTile'] = require('./views/molecules/MFileTile'); skin['molecules.MImageTile'] = require('./views/molecules/MImageTile'); skin['molecules.MNoticeTile'] = require('./views/molecules/MNoticeTile'); skin['molecules.MRoomMemberTile'] = require('./views/molecules/MRoomMemberTile'); skin['molecules.MTextTile'] = require('./views/molecules/MTextTile'); -skin['molecules.MatrixToolbar'] = require('./views/molecules/MatrixToolbar'); -skin['molecules.MemberInfo'] = require('./views/molecules/MemberInfo'); -skin['molecules.MemberTile'] = require('./views/molecules/MemberTile'); -skin['molecules.MessageComposer'] = require('./views/molecules/MessageComposer'); -skin['molecules.MessageTile'] = require('./views/molecules/MessageTile'); skin['molecules.ProgressBar'] = require('./views/molecules/ProgressBar'); skin['molecules.RoomCreate'] = require('./views/molecules/RoomCreate'); skin['molecules.RoomDropTarget'] = require('./views/molecules/RoomDropTarget'); diff --git a/src/skins/vector/views/molecules/ChangeDisplayName.js b/src/skins/vector/views/molecules/ChangeDisplayName.js new file mode 100644 index 00000000..1a094ec2 --- /dev/null +++ b/src/skins/vector/views/molecules/ChangeDisplayName.js @@ -0,0 +1,56 @@ +/* +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 sdk = require('matrix-react-sdk'); + +var ChangeDisplayNameController = require("matrix-react-sdk/lib/controllers/molecules/ChangeDisplayName"); +var Loader = require("react-loader"); + + +module.exports = React.createClass({ + displayName: 'ChangeDisplayName', + mixins: [ChangeDisplayNameController], + + edit: function() { + this.refs.displayname_edit.edit() + }, + + onValueChanged: function(new_value, shouldSubmit) { + if (shouldSubmit) { + this.changeDisplayname(new_value); + } + }, + + render: function() { + if (this.state.busy) { + return ( + + ); + } else if (this.state.errorString) { + return ( +
{this.state.errorString}
+ ); + } else { + var EditableText = sdk.getComponent('atoms.EditableText'); + return ( + + ); + } + } +}); diff --git a/src/skins/vector/views/organisms/UserSettings.js b/src/skins/vector/views/organisms/UserSettings.js index 64aac34b..44798aee 100644 --- a/src/skins/vector/views/organisms/UserSettings.js +++ b/src/skins/vector/views/organisms/UserSettings.js @@ -60,7 +60,7 @@ module.exports = React.createClass({ case this.Phases.Loading: return case this.Phases.Display: - var EditableText = sdk.getComponent('atoms.EditableText'); + var ChangeDisplayName = sdk.getComponent('molecules.ChangeDisplayName'); var EnableNotificationsButton = sdk.getComponent('atoms.EnableNotificationsButton'); return (
@@ -74,7 +74,7 @@ module.exports = React.createClass({
- +
Edit
From ccc5f30c9b7fc1e2fc4e2950672c7867c22c8497 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 8 Oct 2015 15:22:16 +0100 Subject: [PATCH 06/85] Get the vector 'ongoing conference' bar back (vector now needs a custom RoomView for this: it would be nice it it didn't) --- src/controllers/organisms/RoomView.js | 485 +++++++++++++++++++ src/skins/vector/views/organisms/RoomView.js | 11 +- 2 files changed, 495 insertions(+), 1 deletion(-) create mode 100644 src/controllers/organisms/RoomView.js diff --git a/src/controllers/organisms/RoomView.js b/src/controllers/organisms/RoomView.js new file mode 100644 index 00000000..0166afde --- /dev/null +++ b/src/controllers/organisms/RoomView.js @@ -0,0 +1,485 @@ +/* +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. +*/ + +var MatrixClientPeg = require("matrix-react-sdk/lib/MatrixClientPeg"); +var React = require("react"); +var q = require("q"); +var ContentMessages = require("matrix-react-sdk/lib//ContentMessages"); +var WhoIsTyping = require("matrix-react-sdk/lib/WhoIsTyping"); +var Modal = require("matrix-react-sdk/lib/Modal"); +var sdk = require('matrix-react-sdk/lib/index'); +var CallHandler = require('matrix-react-sdk/lib/CallHandler'); +var VectorConferenceHandler = require('../../modules/VectorConferenceHandler'); + +var dis = require("matrix-react-sdk/lib/dispatcher"); + +var PAGINATE_SIZE = 20; +var INITIAL_SIZE = 20; + +module.exports = { + getInitialState: function() { + return { + room: this.props.roomId ? MatrixClientPeg.get().getRoom(this.props.roomId) : null, + messageCap: INITIAL_SIZE, + editingRoomSettings: false, + uploadingRoomSettings: false, + numUnreadMessages: 0, + draggingFile: false, + } + }, + + componentWillMount: function() { + this.dispatcherRef = dis.register(this.onAction); + MatrixClientPeg.get().on("Room.timeline", this.onRoomTimeline); + MatrixClientPeg.get().on("Room.name", this.onRoomName); + MatrixClientPeg.get().on("RoomMember.typing", this.onRoomMemberTyping); + MatrixClientPeg.get().on("RoomState.members", this.onRoomStateMember); + this.atBottom = true; + }, + + componentWillUnmount: function() { + if (this.refs.messageWrapper) { + var messageWrapper = this.refs.messageWrapper.getDOMNode(); + messageWrapper.removeEventListener('drop', this.onDrop); + messageWrapper.removeEventListener('dragover', this.onDragOver); + messageWrapper.removeEventListener('dragleave', this.onDragLeaveOrEnd); + messageWrapper.removeEventListener('dragend', this.onDragLeaveOrEnd); + } + dis.unregister(this.dispatcherRef); + if (MatrixClientPeg.get()) { + MatrixClientPeg.get().removeListener("Room.timeline", this.onRoomTimeline); + MatrixClientPeg.get().removeListener("Room.name", this.onRoomName); + MatrixClientPeg.get().removeListener("RoomMember.typing", this.onRoomMemberTyping); + } + }, + + onAction: function(payload) { + switch (payload.action) { + case 'message_send_failed': + case 'message_sent': + this.setState({ + room: MatrixClientPeg.get().getRoom(this.props.roomId) + }); + this.forceUpdate(); + break; + case 'notifier_enabled': + this.forceUpdate(); + break; + case 'call_state': + if (CallHandler.getCallForRoom(this.props.roomId)) { + // Call state has changed so we may be loading video elements + // which will obscure the message log. + // scroll to bottom + var messageWrapper = this.refs.messageWrapper; + if (messageWrapper) { + messageWrapper = messageWrapper.getDOMNode(); + messageWrapper.scrollTop = messageWrapper.scrollHeight; + } + } + + // possibly remove the conf call notification if we're now in + // the conf + this._updateConfCallNotification(); + break; + } + }, + + // MatrixRoom still showing the messages from the old room? + // Set the key to the room_id. Sadly you can no longer get at + // the key from inside the component, or we'd check this in code. + /*componentWillReceiveProps: function(props) { + },*/ + + onRoomTimeline: function(ev, room, toStartOfTimeline) { + if (!this.isMounted()) return; + + // ignore anything that comes in whilst pagingating: we get one + // event for each new matrix event so this would cause a huge + // number of UI updates. Just update the UI when the paginate + // call returns. + if (this.state.paginating) return; + + // no point handling anything while we're waiting for the join to finish: + // we'll only be showing a spinner. + if (this.state.joining) return; + if (room.roomId != this.props.roomId) return; + + if (this.refs.messageWrapper) { + var messageWrapper = this.refs.messageWrapper.getDOMNode(); + this.atBottom = ( + messageWrapper.scrollHeight - messageWrapper.scrollTop <= + (messageWrapper.clientHeight + 150) + ); + } + + var currentUnread = this.state.numUnreadMessages; + if (!toStartOfTimeline && + (ev.getSender() !== MatrixClientPeg.get().credentials.userId)) { + // update unread count when scrolled up + if (this.atBottom) { + currentUnread = 0; + } + else { + currentUnread += 1; + } + } + + + this.setState({ + room: MatrixClientPeg.get().getRoom(this.props.roomId), + numUnreadMessages: currentUnread + }); + + if (toStartOfTimeline && !this.state.paginating) { + this.fillSpace(); + } + }, + + onRoomName: function(room) { + if (room.roomId == this.props.roomId) { + this.setState({ + room: room + }); + } + }, + + onRoomMemberTyping: function(ev, member) { + this.forceUpdate(); + }, + + onRoomStateMember: function(ev, state, member) { + if (member.roomId !== this.props.roomId || + member.userId !== VectorConferenceHandler.getConferenceUserIdForRoom(member.roomId)) { + return; + } + this._updateConfCallNotification(); + }, + + _updateConfCallNotification: function() { + var room = MatrixClientPeg.get().getRoom(this.props.roomId); + if (!room) return; + var confMember = room.getMember( + VectorConferenceHandler.getConferenceUserIdForRoom(this.props.roomId) + ); + + if (!confMember) { + return; + } + var confCall = VectorConferenceHandler.getConferenceCallForRoom(confMember.roomId); + + // A conf call notification should be displayed if there is an ongoing + // conf call but this cilent isn't a part of it. + this.setState({ + displayConfCallNotification: ( + (!confCall || confCall.call_state === "ended") && + confMember.membership === "join" + ) + }); + }, + + componentDidMount: function() { + if (this.refs.messageWrapper) { + var messageWrapper = this.refs.messageWrapper.getDOMNode(); + + messageWrapper.addEventListener('drop', this.onDrop); + messageWrapper.addEventListener('dragover', this.onDragOver); + messageWrapper.addEventListener('dragleave', this.onDragLeaveOrEnd); + messageWrapper.addEventListener('dragend', this.onDragLeaveOrEnd); + + messageWrapper.scrollTop = messageWrapper.scrollHeight; + + this.fillSpace(); + } + + this._updateConfCallNotification(); + }, + + componentDidUpdate: function() { + if (!this.refs.messageWrapper) return; + + var messageWrapper = this.refs.messageWrapper.getDOMNode(); + + if (this.state.paginating && !this.waiting_for_paginate) { + var heightGained = messageWrapper.scrollHeight - this.oldScrollHeight; + messageWrapper.scrollTop += heightGained; + this.oldScrollHeight = undefined; + if (!this.fillSpace()) { + this.setState({paginating: false}); + } + } else if (this.atBottom) { + messageWrapper.scrollTop = messageWrapper.scrollHeight; + if (this.state.numUnreadMessages !== 0) { + this.setState({numUnreadMessages: 0}); + } + } + }, + + fillSpace: function() { + if (!this.refs.messageWrapper) return; + var messageWrapper = this.refs.messageWrapper.getDOMNode(); + if (messageWrapper.scrollTop < messageWrapper.clientHeight && this.state.room.oldState.paginationToken) { + this.setState({paginating: true}); + + this.oldScrollHeight = messageWrapper.scrollHeight; + + if (this.state.messageCap < this.state.room.timeline.length) { + this.waiting_for_paginate = false; + var cap = Math.min(this.state.messageCap + PAGINATE_SIZE, this.state.room.timeline.length); + this.setState({messageCap: cap, paginating: true}); + } else { + this.waiting_for_paginate = true; + var cap = this.state.messageCap + PAGINATE_SIZE; + this.setState({messageCap: cap, paginating: true}); + var self = this; + MatrixClientPeg.get().scrollback(this.state.room, PAGINATE_SIZE).finally(function() { + self.waiting_for_paginate = false; + if (self.isMounted()) { + self.setState({ + room: MatrixClientPeg.get().getRoom(self.props.roomId) + }); + } + // wait and set paginating to false when the component updates + }); + } + + return true; + } + return false; + }, + + onJoinButtonClicked: function(ev) { + var self = this; + MatrixClientPeg.get().joinRoom(this.props.roomId).then(function() { + self.setState({ + joining: false, + room: MatrixClientPeg.get().getRoom(self.props.roomId) + }); + }, function(error) { + self.setState({ + joining: false, + joinError: error + }); + }); + this.setState({ + joining: true + }); + }, + + onMessageListScroll: function(ev) { + if (this.refs.messageWrapper) { + var messageWrapper = this.refs.messageWrapper.getDOMNode(); + var wasAtBottom = this.atBottom; + this.atBottom = messageWrapper.scrollHeight - messageWrapper.scrollTop <= messageWrapper.clientHeight; + if (this.atBottom && !wasAtBottom) { + this.forceUpdate(); // remove unread msg count + } + } + if (!this.state.paginating) this.fillSpace(); + }, + + onDragOver: function(ev) { + ev.stopPropagation(); + ev.preventDefault(); + + ev.dataTransfer.dropEffect = 'none'; + + var items = ev.dataTransfer.items; + if (items.length == 1) { + if (items[0].kind == 'file') { + this.setState({ draggingFile : true }); + ev.dataTransfer.dropEffect = 'copy'; + } + } + }, + + onDrop: function(ev) { + ev.stopPropagation(); + ev.preventDefault(); + this.setState({ draggingFile : false }); + var files = ev.dataTransfer.files; + if (files.length == 1) { + this.uploadFile(files[0]); + } + }, + + onDragLeaveOrEnd: function(ev) { + ev.stopPropagation(); + ev.preventDefault(); + this.setState({ draggingFile : false }); + }, + + uploadFile: function(file) { + this.setState({ + upload: { + fileName: file.name, + uploadedBytes: 0, + totalBytes: file.size + } + }); + var self = this; + ContentMessages.sendContentToRoom( + file, this.props.roomId, MatrixClientPeg.get() + ).progress(function(ev) { + //console.log("Upload: "+ev.loaded+" / "+ev.total); + self.setState({ + upload: { + fileName: file.name, + uploadedBytes: ev.loaded, + totalBytes: ev.total + } + }); + }).finally(function() { + self.setState({ + upload: undefined + }); + }).done(undefined, function() { + // display error message + }); + }, + + getWhoIsTypingString: function() { + return WhoIsTyping.whoIsTypingString(this.state.room); + }, + + getEventTiles: function() { + var tileTypes = { + 'm.room.message': sdk.getComponent('molecules.MessageTile'), + 'm.room.member' : sdk.getComponent('molecules.EventAsTextTile'), + 'm.call.invite' : sdk.getComponent('molecules.EventAsTextTile'), + 'm.call.answer' : sdk.getComponent('molecules.EventAsTextTile'), + 'm.call.hangup' : sdk.getComponent('molecules.EventAsTextTile'), + 'm.room.topic' : sdk.getComponent('molecules.EventAsTextTile'), + }; + + var ret = []; + var count = 0; + + for (var i = this.state.room.timeline.length-1; i >= 0 && count < this.state.messageCap; --i) { + var mxEv = this.state.room.timeline[i]; + var TileType = tileTypes[mxEv.getType()]; + var continuation = false; + var last = false; + if (i == this.state.room.timeline.length - 1) { + last = true; + } + 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) && + (this.state.room.timeline[i].getType() == + this.state.room.timeline[i - 1].getType()) + ) + { + continuation = true; + } + } + if (!TileType) continue; + ret.unshift( +
  • + ); + ++count; + } + return ret; + }, + + uploadNewState: function(new_name, new_topic, new_join_rule, new_history_visibility, new_power_levels) { + var old_name = this.state.room.name; + + var old_topic = this.state.room.currentState.getStateEvents('m.room.topic', ''); + if (old_topic) { + old_topic = old_topic.getContent().topic; + } else { + old_topic = ""; + } + + var old_join_rule = this.state.room.currentState.getStateEvents('m.room.join_rules', ''); + if (old_join_rule) { + old_join_rule = old_join_rule.getContent().join_rule; + } else { + old_join_rule = "invite"; + } + + var old_history_visibility = this.state.room.currentState.getStateEvents('m.room.history_visibility', ''); + if (old_history_visibility) { + old_history_visibility = old_history_visibility.getContent().history_visibility; + } else { + old_history_visibility = "shared"; + } + + var deferreds = []; + + if (old_name != new_name && new_name != undefined && new_name) { + deferreds.push( + MatrixClientPeg.get().setRoomName(this.state.room.roomId, new_name) + ); + } + + if (old_topic != new_topic && new_topic != undefined) { + deferreds.push( + MatrixClientPeg.get().setRoomTopic(this.state.room.roomId, new_topic) + ); + } + + if (old_join_rule != new_join_rule && new_join_rule != undefined) { + deferreds.push( + MatrixClientPeg.get().sendStateEvent( + this.state.room.roomId, "m.room.join_rules", { + join_rule: new_join_rule, + }, "" + ) + ); + } + + if (old_history_visibility != new_history_visibility && new_history_visibility != undefined) { + deferreds.push( + MatrixClientPeg.get().sendStateEvent( + this.state.room.roomId, "m.room.history_visibility", { + history_visibility: new_history_visibility, + }, "" + ) + ); + } + + if (new_power_levels) { + deferreds.push( + MatrixClientPeg.get().sendStateEvent( + this.state.room.roomId, "m.room.power_levels", new_power_levels, "" + ) + ); + } + + if (deferreds.length) { + var self = this; + q.all(deferreds).fail(function(err) { + var ErrorDialog = sdk.getComponent("organisms.ErrorDialog"); + Modal.createDialog(ErrorDialog, { + title: "Failed to set state", + description: err.toString() + }); + }).finally(function() { + self.setState({ + uploadingRoomSettings: false, + }); + }); + } else { + this.setState({ + editingRoomSettings: false, + uploadingRoomSettings: false, + }); + } + } +}; diff --git a/src/skins/vector/views/organisms/RoomView.js b/src/skins/vector/views/organisms/RoomView.js index 17b6aac3..dfeedd2a 100644 --- a/src/skins/vector/views/organisms/RoomView.js +++ b/src/skins/vector/views/organisms/RoomView.js @@ -19,12 +19,13 @@ limitations under the License. var React = require('react'); var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); +var dis = require('matrix-react-sdk/lib/dispatcher'); var sdk = require('matrix-react-sdk') var classNames = require("classnames"); var filesize = require('filesize'); -var RoomViewController = require('matrix-react-sdk/lib/controllers/organisms/RoomView') +var RoomViewController = require('../../../../controllers/organisms/RoomView') var Loader = require("react-loader"); @@ -62,6 +63,14 @@ module.exports = React.createClass({ this.setState(this.getInitialState()); }, + onConferenceNotificationClick: function() { + dis.dispatch({ + action: 'place_call', + type: "video", + room_id: this.props.roomId + }); + }, + getUnreadMessagesString: function() { if (!this.state.numUnreadMessages) { return ""; From c68ef3839949ad5341f040e6d3788216d379d468 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 9 Oct 2015 11:56:16 +0100 Subject: [PATCH 07/85] Use ChangeDisplayNname / ChangeAvatar widgets to prompt for display name & avatar at signup. Fixes #7. --- src/controllers/templates/Register.js | 58 +++++++++++++++++++ .../vector/views/molecules/ChangeAvatar.js | 3 - .../vector/views/organisms/UserSettings.js | 16 ++++- src/skins/vector/views/templates/Register.js | 19 +++++- 4 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 src/controllers/templates/Register.js diff --git a/src/controllers/templates/Register.js b/src/controllers/templates/Register.js new file mode 100644 index 00000000..5f88d590 --- /dev/null +++ b/src/controllers/templates/Register.js @@ -0,0 +1,58 @@ +/* +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 extend = require('matrix-react-sdk/lib/extend'); +var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); +var BaseRegisterController = require('matrix-react-sdk/lib/controllers/templates/Register.js'); + +var RegisterController = {}; +extend(RegisterController, BaseRegisterController); + +RegisterController.onRegistered = function(user_id, access_token) { + MatrixClientPeg.replaceUsingAccessToken( + this.state.hs_url, this.state.is_url, user_id, access_token + ); + + this.setState({ + step: 'profile', + busy: true + }); + + var self = this; + var cli = MatrixClientPeg.get(); + cli.getProfileInfo(cli.credentials.userId).done(function(result) { + self.setState({ + avatarUrl: result.avatar_url, + busy: false + }); + }, + function(err) { + console.err(err); + self.setState({ + busy: false + }); + }); +}; + +RegisterController.onAccountReady = function() { + if (this.props.onLoggedIn) { + this.props.onLoggedIn(); + } +}; + +module.exports = RegisterController; diff --git a/src/skins/vector/views/molecules/ChangeAvatar.js b/src/skins/vector/views/molecules/ChangeAvatar.js index 8fafacc8..52a59e3f 100644 --- a/src/skins/vector/views/molecules/ChangeAvatar.js +++ b/src/skins/vector/views/molecules/ChangeAvatar.js @@ -51,9 +51,6 @@ module.exports = React.createClass({ {this.state.errorText}
    -
    - -
    ); case this.Phases.Uploading: diff --git a/src/skins/vector/views/organisms/UserSettings.js b/src/skins/vector/views/organisms/UserSettings.js index 44798aee..6071f82e 100644 --- a/src/skins/vector/views/organisms/UserSettings.js +++ b/src/skins/vector/views/organisms/UserSettings.js @@ -30,7 +30,15 @@ module.exports = React.createClass({ editAvatar: function() { var url = MatrixClientPeg.get().mxcUrlToHttp(this.state.avatarUrl); var ChangeAvatar = sdk.getComponent('molecules.ChangeAvatar'); - Modal.createDialog(ChangeAvatar, {initialAvatarUrl: url}); + var avatarDialog = ( +
    + +
    + +
    +
    + ); + this.avatarDialog = Modal.createDialogWithElement(avatarDialog); }, addEmail: function() { @@ -55,6 +63,10 @@ module.exports = React.createClass({ this.logoutModal.closeDialog(); }, + onAvatarDialogCancel: function() { + this.avatarDialog.close(); + }, + render: function() { switch (this.state.phase) { case this.Phases.Loading: @@ -80,7 +92,7 @@ module.exports = React.createClass({
    {this.state.threepids.map(function(val) { - return
    {val.address}
    ; + return
    {val.address}
    ; })}
    diff --git a/src/skins/vector/views/templates/Register.js b/src/skins/vector/views/templates/Register.js index fa4a3e18..638dac15 100644 --- a/src/skins/vector/views/templates/Register.js +++ b/src/skins/vector/views/templates/Register.js @@ -19,10 +19,11 @@ limitations under the License. var React = require('react'); var sdk = require('matrix-react-sdk') +var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg') var Loader = require("react-loader"); -var RegisterController = require('matrix-react-sdk/lib/controllers/templates/Register') +var RegisterController = require('../../../../controllers/templates/Register') module.exports = React.createClass({ DEFAULT_HS_URL: 'https://matrix.org', @@ -79,6 +80,10 @@ module.exports = React.createClass({ this.forceUpdate(); }, + onProfileContinueClicked: function() { + this.onAccountReady(); + }, + componentForStep: function(step) { switch (step) { case 'initial': @@ -127,6 +132,18 @@ module.exports = React.createClass({ return ( ); + } else if (this.state.step == 'profile') { + var ChangeDisplayName = sdk.getComponent('molecules.ChangeDisplayName'); + var ChangeAvatar = sdk.getComponent('molecules.ChangeAvatar'); + return ( +
    + Set a display name: + + Upload an avatar: + + +
    + ); } else { return (
    From 93f266a4faf89e9a2a56368f0efaece09462bcf1 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 9 Oct 2015 17:26:28 +0100 Subject: [PATCH 08/85] Update to new memberlist api and hopefully sort out presence (list wasn't being re-sorted at the right time) Hopefully fix #11 --- .../vector/views/organisms/MemberList.js | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/skins/vector/views/organisms/MemberList.js b/src/skins/vector/views/organisms/MemberList.js index 06aa3ba6..08f4e45c 100644 --- a/src/skins/vector/views/organisms/MemberList.js +++ b/src/skins/vector/views/organisms/MemberList.js @@ -33,15 +33,38 @@ module.exports = React.createClass({ return { editing: false }; }, + memberSort: function(userIdA, userIdB) { + var userA = this.memberDict[userIdA].user; + var userB = this.memberDict[userIdB].user; + + var presenceMap = { + online: 3, + unavailable: 2, + offline: 1 + }; + + var presenceOrdA = userA ? presenceMap[userA.presence] : 0; + var presenceOrdB = userB ? presenceMap[userB.presence] : 0; + + if (presenceOrdA != presenceOrdB) { + return presenceOrdB - presenceOrdA; + } + + var latA = userA ? (userA.lastPresenceTs - (userA.lastActiveAgo || userA.lastPresenceTs)) : 0; + var latB = userB ? (userB.lastPresenceTs - (userB.lastActiveAgo || userB.lastPresenceTs)) : 0; + + return latB - latA; + }, + makeMemberTiles: function(membership) { var MemberTile = sdk.getComponent("molecules.MemberTile"); var self = this; - return Object.keys(self.state.memberDict).filter(function(userId) { - var m = self.state.memberDict[userId]; + return self.state.members.filter(function(userId) { + var m = self.memberDict[userId]; return m.membership == membership; }).map(function(userId) { - var m = self.state.memberDict[userId]; + var m = self.memberDict[userId]; return ( ); From a05437e81f22cb260954629065c22b36deba42f2 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sat, 10 Oct 2015 18:51:22 +0100 Subject: [PATCH 09/85] add npm i source-map-loader troubleshooting step --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 690e1041..811f52f2 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,9 @@ changes to the react sdk, you can: If you add or remove any components from the Vector skin, you will need to rebuild the skin's index by running, `npm run reskindex`. +You may need to run `npm i source-map-loader` in matrix-js-sdk if you get errors +about "Cannot resolve module 'source-map-loader'" due to shortcomings in webpack. + Deployment ========== From a8d51cdf58f047ca539e27e626a29fd9839ee13d Mon Sep 17 00:00:00 2001 From: Steven Hammerton Date: Thu, 8 Oct 2015 22:42:09 +0100 Subject: [PATCH 10/85] Add support for CAS auth --- src/skins/vector/skindex.js | 1 + src/skins/vector/views/organisms/CasLogin.js | 50 ++++++++++++++++++++ src/skins/vector/views/templates/Login.js | 5 ++ src/vector/index.js | 29 +++++++----- 4 files changed, 74 insertions(+), 11 deletions(-) create mode 100644 src/skins/vector/views/organisms/CasLogin.js diff --git a/src/skins/vector/skindex.js b/src/skins/vector/skindex.js index dbc161fa..faf1e2b0 100644 --- a/src/skins/vector/skindex.js +++ b/src/skins/vector/skindex.js @@ -64,6 +64,7 @@ skin['molecules.UserSelector'] = require('./views/molecules/UserSelector'); skin['molecules.voip.CallView'] = require('./views/molecules/voip/CallView'); skin['molecules.voip.IncomingCallBox'] = require('./views/molecules/voip/IncomingCallBox'); skin['molecules.voip.VideoView'] = require('./views/molecules/voip/VideoView'); +skin['organisms.CasLogin'] = require('./views/organisms/CasLogin'); skin['organisms.CreateRoom'] = require('./views/organisms/CreateRoom'); skin['organisms.ErrorDialog'] = require('./views/organisms/ErrorDialog'); skin['organisms.LeftPanel'] = require('./views/organisms/LeftPanel'); diff --git a/src/skins/vector/views/organisms/CasLogin.js b/src/skins/vector/views/organisms/CasLogin.js new file mode 100644 index 00000000..2a73fd3c --- /dev/null +++ b/src/skins/vector/views/organisms/CasLogin.js @@ -0,0 +1,50 @@ +/* +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 MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); + +module.exports = React.createClass({ + displayName: 'CasLogin', + + getInitialState: function() { + var splitLocation = window.location.href.split('/'); + return {serviceUrl: splitLocation[0] + "//" + splitLocation[2]}; + }, + + onCasClicked: function(ev) { + var serviceRedirectUrl = this.state.serviceUrl + "/#/login/cas"; + var self = this; + MatrixClientPeg.get().getCasServer().done(function(data) { + var serverUrl = data.serverUrl + "/login?service=" + encodeURIComponent(serviceRedirectUrl); + window.location.href=serverUrl + }, function(error) { + self.setStep("stage_m.login.cas"); + self.setState({errorText: 'Login failed.'}); + }); + }, + + render: function() { + return ( +
    + +
    + ); + } +}); \ No newline at end of file diff --git a/src/skins/vector/views/templates/Login.js b/src/skins/vector/views/templates/Login.js index 4e78dce9..0378153a 100644 --- a/src/skins/vector/views/templates/Login.js +++ b/src/skins/vector/views/templates/Login.js @@ -141,6 +141,11 @@ module.exports = React.createClass({
    ); + case 'stage_m.login.cas': + var CasLogin = sdk.getComponent('organisms.CasLogin'); + return ( + + ); } }, diff --git a/src/vector/index.js b/src/vector/index.js index 1f6585f7..8a6a3448 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -23,22 +23,29 @@ sdk.loadModule(require('../modules/VectorConferenceHandler')); var lastLocationHashSet = null; + +function parseQueryParams(location) { + var hashparts = location.hash.split('?'); + var params = {}; + if (hashparts.length == 2) { + var pairs = hashparts[1].split('&'); + for (var i = 0; i < pairs.length; ++i) { + var parts = pairs[i].split('='); + if (parts.length != 2) continue; + params[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]); + } + } + return params +} + // Here, we do some crude URL analysis to allow // deep-linking. We only support registration // deep-links in this example. function routeUrl(location) { if (location.hash.indexOf('#/register') == 0) { - var hashparts = location.hash.split('?'); - var params = {}; - if (hashparts.length == 2) { - var pairs = hashparts[1].split('&'); - for (var i = 0; i < pairs.length; ++i) { - var parts = pairs[i].split('='); - if (parts.length != 2) continue; - params[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]); - } - } - window.matrixChat.showScreen('register', params); + window.matrixChat.showScreen('register', parseQueryParams(location)); + } else if (location.hash.indexOf('#/login/cas') == 0) { + window.matrixChat.showScreen('cas_login', parseQueryParams(location)); } else { window.matrixChat.showScreen(location.hash.substring(2)); } From 47ed8971e3ee05cec1b0d6206209c0eb00b783c8 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 11 Oct 2015 02:09:14 +0100 Subject: [PATCH 11/85] implement collapsible leftpanel at last --- src/controllers/organisms/RoomList.js | 1 + src/skins/vector/css/hide.css | 1 - src/skins/vector/css/molecules/RoomTile.css | 33 +++++++++++++++--- src/skins/vector/css/organisms/LeftPanel.css | 12 +++++-- src/skins/vector/css/organisms/RoomList.css | 1 + src/skins/vector/css/pages/MatrixChat.css | 5 +++ src/skins/vector/img/create-big.png | Bin 999 -> 15407 bytes src/skins/vector/img/directory-big.png | Bin 331 -> 14741 bytes src/skins/vector/img/hide.png | Bin 415 -> 1235 bytes src/skins/vector/img/menu.png | Bin 200 -> 122 bytes src/skins/vector/img/settings-big.png | Bin 1206 -> 15641 bytes .../vector/views/molecules/BottomLeftMenu.js | 6 ++-- .../vector/views/molecules/RoomHeader.js | 2 +- src/skins/vector/views/molecules/RoomTile.js | 29 +++++++++++++-- src/skins/vector/views/organisms/LeftPanel.js | 30 ++++++++++++++-- src/skins/vector/views/organisms/RoomList.js | 4 ++- 16 files changed, 107 insertions(+), 17 deletions(-) mode change 100644 => 100755 src/skins/vector/img/menu.png diff --git a/src/controllers/organisms/RoomList.js b/src/controllers/organisms/RoomList.js index 2602315a..b178fce7 100644 --- a/src/controllers/organisms/RoomList.js +++ b/src/controllers/organisms/RoomList.js @@ -159,6 +159,7 @@ module.exports = { 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 diff --git a/src/skins/vector/img/hide.png b/src/skins/vector/img/hide.png index 3e64618b09fc75d54a6a00f4ed237ac745c9598c..31604589afb230f0035d9b405768a5f345031a4a 100644 GIT binary patch literal 1235 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eM!2~4DCV9I7DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49pstArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMU}mmhZmDNz zYHn^~uA^XNU}&muV61O!plf7oWny4uVx#~CNh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+860W~8or6i znRy^VO|ULsUn|eN;*!L?|M!9x%-p0TZ`abWJ(~1EZs- zi(^Q|t)yT6ED1>pObV9&c*dUZ#JS8PL zCB>!i^8Ww-x7+@zeE2ti!G?C8-5WWiH>FKjG{64;`kntD|C?^VriaIoYtE`aFY*$8 z{`r0X({B5?zduf&JtMI2jOxjwK28=3H6Ep=c7;C;d6M|^*Yw1TZ}Yd?|2vo`WNnzwc(cQD(sNSqix!Jg| z;LX+bz5Mlm{(hI=eVDi9rqUFPn-Y@iYJO~f^X|KR{r}|ebB*M^=V*!Z8$Uk0zFvR- zZ(gB8Q!m*4`BVMiCO^k)!JCaL>Q*TX0tpOC4|eU^V|4unsF?9|^>bP0l+XkK$J4_` delta 387 zcmV-}0et?`37-QYiBL{Q4GJ0x0000DNk~Le0000W0000W2m$~A0Q?y3qmdyee*r;B zL_t(|+U%7*O9Md=hIj66FP9knKruv!34Ww9*a#LW1UqeP6v56PmnL?`AK?80jkV{= zHHm>7m@`uhy=0o3)(pS* z-(<^+$M2XoVSkkq1H6%F`yx?Te=EZ7vPG=H-B5G_-5J#ok-tlw%r8Z2R$3B)P#(t9E^nQ~Dqh*zzWW2^LJe*vzdJ zEP5Yk{%_1UZHxR!ng%mYszB``RuaAJ|aOJ{@I7n;#5Sy{wm`qOAP zflv$^pGI?tjrLWKBXQ*?LP50%=Noy)q)yYVd49R=%vtPtth%8{Yai&iz8}hiGEWPT h?c@ybuK*tc3;@;c${SSUJ8}R3002ovPDHLkV1i|vsM7!d diff --git a/src/skins/vector/img/menu.png b/src/skins/vector/img/menu.png old mode 100644 new mode 100755 index 3550878bf2b40f98f5eff0816b1b259857e2ac9e..b45f88950f03368dcae0c812c3e3a318b4540650 GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^(m*W2!3HF2n%o+I6k~CayA#8@b22Z191~9$#}E(R z<*2oYoLAxPgg&ebxsLQ0F0g{u>b%7 literal 200 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 B&Vc{` literal 1206 zcmV;n1WEgeP)}ZsQ4k{mh2Ek+nWJ6=~7kgFDx$ zu1uTVar$hMAO6|fj$jka@J(B%KJ;E)7QepJE~5?`_$iPnX^q zFnZ&3%W{5MvJ6H>S~>C@7{63df2~UF;zCAGaFQ#iYxCm$laa=U5)5xE=i{luTm44Q zZdD_U5VCJFtHTzz?Xj%&;d3!Y$-&Ovax|&5Olj&u%QdOFcK(F*dh zBn8t^pqv~W9_c#Qso%_r(0+)CKjj1#X^{Cwyk``9CxJO%G1c6rybzML_Itqr$w{NR^w=grBy<&PX`(>39IGjE=4=k@641^9JId_8MIV%~n* z@aO!G6?yqoG-cGx!k>6}Ygr<|GX(;bj#4ZLo7n&B;bUVt%Oh%)f%86nf~SIB;o%D% z908spz&dBz=`%_C)vP(t!u;M?6TPslhEK3SYz)*|Pol0z^d?xj82tkV0egf&?~{C# zInn;F5m3+mGbmYc9e3qzCal#SaV+Z={Vq z-=TZrznCd?MJb-2OtNNqKa>JZ*(X!QrK0MN)uhK2QKEhNPZ1O-mm!V=DLLQ8{n)Tz zh{2`7NCUg7>-P|VY*D@5YlIVBj2{<7Z-Ty*Ho|B=`W6!%Q;^LAED+Bl+i1C@3Z?nL z9e-%Ok};aJ`9R~pm@y{u7CM&$!(-QAUyMH%(c|1*Buu*jzbW@?)yZtq=JzDLsCejh z#&;U+q(R>3i`1igvzIK?AW8=xz;07*qoM6N<$f}Ws7WB>pF diff --git a/src/skins/vector/views/molecules/BottomLeftMenu.js b/src/skins/vector/views/molecules/BottomLeftMenu.js index 809da0ee..2af3bfc7 100644 --- a/src/skins/vector/views/molecules/BottomLeftMenu.js +++ b/src/skins/vector/views/molecules/BottomLeftMenu.js @@ -41,19 +41,19 @@ module.exports = React.createClass({
    - Create new room + Create new room
    Create new room
    - Directory + Directory
    Directory
    - Settings + Settings
    Settings
    diff --git a/src/skins/vector/views/molecules/RoomHeader.js b/src/skins/vector/views/molecules/RoomHeader.js index fc097d39..3518d1dd 100644 --- a/src/skins/vector/views/molecules/RoomHeader.js +++ b/src/skins/vector/views/molecules/RoomHeader.js @@ -92,7 +92,7 @@ module.exports = React.createClass({ var roomAvatar = null; if (this.props.room) { roomAvatar = ( - + ); } diff --git a/src/skins/vector/views/molecules/RoomTile.js b/src/skins/vector/views/molecules/RoomTile.js index 61fa0021..f43b0023 100644 --- a/src/skins/vector/views/molecules/RoomTile.js +++ b/src/skins/vector/views/molecules/RoomTile.js @@ -28,6 +28,19 @@ var sdk = require('matrix-react-sdk') module.exports = React.createClass({ displayName: 'RoomTile', mixins: [RoomTileController], + + getInitialState: function() { + return( { hover : false }); + }, + + onMouseEnter: function() { + this.setState( { hover : true }); + }, + + onMouseLeave: function() { + this.setState( { hover : false }); + }, + render: function() { var myUserId = MatrixClientPeg.get().credentials.userId; var classes = classNames({ @@ -57,14 +70,26 @@ module.exports = React.createClass({ nameCell =
    {name}
    ; } */ + + var nameElement; + if (!this.props.collapsed) { + nameElement =
    {name}
    ; + } + else if (this.state.hover) { + nameElement =
    + + { name } +
    ; + } + var RoomAvatar = sdk.getComponent('atoms.RoomAvatar'); return ( -
    +
    { badge }
    -
    {name}
    + { nameElement }
    ); } diff --git a/src/skins/vector/views/organisms/LeftPanel.js b/src/skins/vector/views/organisms/LeftPanel.js index 15612704..fbd5d3c1 100644 --- a/src/skins/vector/views/organisms/LeftPanel.js +++ b/src/skins/vector/views/organisms/LeftPanel.js @@ -22,16 +22,40 @@ var sdk = require('matrix-react-sdk') module.exports = React.createClass({ displayName: 'LeftPanel', + getInitialState: function() { + return { + collapsed: false, + }; + }, + + onShowClick: function() { + this.setState({ collapsed : false }); + }, + + onHideClick: function() { + this.setState({ collapsed : true }); + }, + render: function() { var RoomList = sdk.getComponent('organisms.RoomList'); var BottomLeftMenu = sdk.getComponent('molecules.BottomLeftMenu'); var IncomingCallBox = sdk.getComponent('molecules.voip.IncomingCallBox'); + var collapseButton; + var classes = "mx_LeftPanel"; + if (this.state.collapsed) { + classes += " collapsed"; + collapseButton = > + } + else { + collapseButton = < + } + return ( -
    ); } diff --git a/src/skins/vector/views/molecules/RoomTooltip.js b/src/skins/vector/views/molecules/RoomTooltip.js new file mode 100644 index 00000000..61c62908 --- /dev/null +++ b/src/skins/vector/views/molecules/RoomTooltip.js @@ -0,0 +1,53 @@ +/* +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 classNames = require('classnames'); + +var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); + +var sdk = require('matrix-react-sdk') +var dis = require('matrix-react-sdk/lib/dispatcher'); + +module.exports = React.createClass({ + displayName: 'RoomTooltip', + + componentDidMount: function() { + // tell the roomlist about us + dis.dispatch({ + action: 'view_tooltip', + tooltip: this.getDOMNode(), + }); + }, + + componentDidUnmount: function() { + dis.dispatch({ + action: 'view_tooltip', + tooltip: null, + }); + }, + + render: function() { + return ( +
    + + { this.props.room.name } +
    + ); + } +}); diff --git a/src/skins/vector/views/organisms/LeftPanel.js b/src/skins/vector/views/organisms/LeftPanel.js index fbd5d3c1..e1b8e252 100644 --- a/src/skins/vector/views/organisms/LeftPanel.js +++ b/src/skins/vector/views/organisms/LeftPanel.js @@ -18,22 +18,15 @@ limitations under the License. var React = require('react'); var sdk = require('matrix-react-sdk') +var dis = require('matrix-react-sdk/lib/dispatcher'); module.exports = React.createClass({ displayName: 'LeftPanel', - getInitialState: function() { - return { - collapsed: false, - }; - }, - - onShowClick: function() { - this.setState({ collapsed : false }); - }, - onHideClick: function() { - this.setState({ collapsed : true }); + dis.dispatch({ + action: 'hide_left_panel', + }); }, render: function() { @@ -43,9 +36,8 @@ module.exports = React.createClass({ var collapseButton; var classes = "mx_LeftPanel"; - if (this.state.collapsed) { + if (this.props.collapsed) { classes += " collapsed"; - collapseButton = > } else { collapseButton = < @@ -55,7 +47,7 @@ module.exports = React.createClass({ ); diff --git a/src/skins/vector/views/organisms/RoomList.js b/src/skins/vector/views/organisms/RoomList.js index 2bca90a0..0869fd28 100644 --- a/src/skins/vector/views/organisms/RoomList.js +++ b/src/skins/vector/views/organisms/RoomList.js @@ -18,6 +18,7 @@ limitations under the License. var React = require('react'); var sdk = require('matrix-react-sdk') +var dis = require('matrix-react-sdk/lib/dispatcher'); var RoomListController = require('../../../../controllers/organisms/RoomList') @@ -25,6 +26,12 @@ module.exports = React.createClass({ displayName: 'RoomList', mixins: [RoomListController], + onShowClick: function() { + dis.dispatch({ + action: 'show_left_panel', + }); + }, + render: function() { var CallView = sdk.getComponent('molecules.voip.CallView'); var RoomDropTarget = sdk.getComponent('molecules.RoomDropTarget'); @@ -34,15 +41,17 @@ module.exports = React.createClass({ callElement = } - var recentsLabel = this.props.collapsed ? "" : "Recents"; + var recentsLabel = this.props.collapsed ? + > : + "Recents"; return ( -
    +
    {callElement}

    Favourites

    -

    { recentsLabel } 

    +

    { recentsLabel }

    {this.makeRoomTiles()}
    diff --git a/src/skins/vector/views/pages/MatrixChat.js b/src/skins/vector/views/pages/MatrixChat.js index 5c72ff70..688ac96f 100644 --- a/src/skins/vector/views/pages/MatrixChat.js +++ b/src/skins/vector/views/pages/MatrixChat.js @@ -79,7 +79,7 @@ module.exports = React.createClass({
    - +
    {page_element}
    @@ -91,7 +91,7 @@ module.exports = React.createClass({ else { return (
    - +
    {page_element}
    From ae506b5b1f595a466a77b79a0c5853d1b44a0b1d Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 11 Oct 2015 13:56:25 +0100 Subject: [PATCH 14/85] fix cursor for unhide LHS button --- src/skins/vector/views/organisms/RoomList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skins/vector/views/organisms/RoomList.js b/src/skins/vector/views/organisms/RoomList.js index 0869fd28..dd8840e5 100644 --- a/src/skins/vector/views/organisms/RoomList.js +++ b/src/skins/vector/views/organisms/RoomList.js @@ -42,7 +42,7 @@ module.exports = React.createClass({ } var recentsLabel = this.props.collapsed ? - > : + > : "Recents"; return ( From b05f3343e2e336560ab9bc57a58019c2d9bc11bf Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 11 Oct 2015 15:00:43 +0100 Subject: [PATCH 15/85] tooltipize BottomLeftMenu too for consistency --- src/skins/vector/img/hide.png | Bin 1235 -> 1165 bytes src/skins/vector/skindex.js | 1 + .../vector/views/molecules/BottomLeftMenu.js | 34 +++++----- .../views/molecules/BottomLeftMenuTile.js | 60 ++++++++++++++++++ src/skins/vector/views/molecules/RoomTile.js | 2 +- .../vector/views/molecules/RoomTooltip.js | 30 ++++++--- src/skins/vector/views/organisms/LeftPanel.js | 2 +- 7 files changed, 98 insertions(+), 31 deletions(-) create mode 100644 src/skins/vector/views/molecules/BottomLeftMenuTile.js diff --git a/src/skins/vector/img/hide.png b/src/skins/vector/img/hide.png index 31604589afb230f0035d9b405768a5f345031a4a..c5aaf0dd0def9ce594a1bb8d9538aebba69039b4 100644 GIT binary patch delta 333 zcmV-T0kZzn35^Mm83+ad006o0+!3)MG6DfNli&gxlWqbb0XUP80#5-oli&h70XCD6 z0vVGv13`cJZ<=BN008?*L_t(|+G70w|33pMfRR)U3?L2o@Q0s&#Sc9D@gK&=Yr~6g ze;rrc{l4$Z-~SBm((Ip1McMe7a4Ej`=}-Nl+uy*7<++&|bcI+Yar)uH+g}g1KK>~W zlF<=hVepmXU}k1w{D)P;!RJ5!AAb1@%(fC^V{m_xVrRq|N?RWO_E=0qIU6%hO~BD_Ic-19yQ*W9|L#4ZncWprjG1#L3OU%=nGu#7Eua fO_doO2M}NYcmVLzBdu0a00000NkvXXu0mjf)t8}L delta 403 zcmV;E0c`$_3DXIX83+OZ001_UOGdFFG6DfJli&gxlWqbb0W_140#5-kli&h70Wy=2 z0vVGv13`ZlTYP5#00BWsL_t(|+G6@o1Ylwy0^n5i@z=kD&woPLELc^%`1W_j-S1!i z{^w$0G!CCSB1LO7u);$>xuSLIaXVfp%(VbSexw?F>D zZW22)W27>NfgtPe{|u|{e?R-?7k2BI7#V%!Ic&w*fFZQ~$RM#uYWJU x`wbGpmC!!?{CnWp4+xtP*?}Y{I%EJ4U;rZEy1KkF*Vq66002ovPDHLkV1h60#r*&P diff --git a/src/skins/vector/skindex.js b/src/skins/vector/skindex.js index 167ee644..e1476fac 100644 --- a/src/skins/vector/skindex.js +++ b/src/skins/vector/skindex.js @@ -35,6 +35,7 @@ skin['atoms.MessageTimestamp'] = require('./views/atoms/MessageTimestamp'); skin['atoms.RoomAvatar'] = require('./views/atoms/RoomAvatar'); skin['atoms.voip.VideoFeed'] = require('./views/atoms/voip/VideoFeed'); skin['molecules.BottomLeftMenu'] = require('./views/molecules/BottomLeftMenu'); +skin['molecules.BottomLeftMenuTile'] = require('./views/molecules/BottomLeftMenuTile'); skin['molecules.ChangeAvatar'] = require('./views/molecules/ChangeAvatar'); skin['molecules.ChangeDisplayName'] = require('./views/molecules/ChangeDisplayName'); skin['molecules.ChangePassword'] = require('./views/molecules/ChangePassword'); diff --git a/src/skins/vector/views/molecules/BottomLeftMenu.js b/src/skins/vector/views/molecules/BottomLeftMenu.js index 2af3bfc7..2020d29d 100644 --- a/src/skins/vector/views/molecules/BottomLeftMenu.js +++ b/src/skins/vector/views/molecules/BottomLeftMenu.js @@ -17,7 +17,7 @@ limitations under the License. 'use strict'; var React = require('react'); - +var sdk = require('matrix-react-sdk') var dis = require('matrix-react-sdk/lib/dispatcher'); module.exports = React.createClass({ @@ -35,28 +35,24 @@ module.exports = React.createClass({ dis.dispatch({action: 'view_create_room'}); }, + getLabel: function(name) { + if (!this.props.collapsed) { + return
    {name}
    + } + else if (this.state.hover) { + var RoomTooltip = sdk.getComponent("molecules.RoomTooltip"); + return ; + } + }, + render: function() { + var BottomLeftMenuTile = sdk.getComponent('molecules.BottomLeftMenuTile'); return (
    -
    -
    - Create new room -
    -
    Create new room
    -
    -
    -
    - Directory -
    -
    Directory
    -
    -
    -
    - Settings -
    -
    Settings
    -
    + + +
    ); diff --git a/src/skins/vector/views/molecules/BottomLeftMenuTile.js b/src/skins/vector/views/molecules/BottomLeftMenuTile.js new file mode 100644 index 00000000..b0d00c62 --- /dev/null +++ b/src/skins/vector/views/molecules/BottomLeftMenuTile.js @@ -0,0 +1,60 @@ +/* +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 classNames = require('classnames'); + +var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); + +var sdk = require('matrix-react-sdk') + +module.exports = React.createClass({ + displayName: 'BottomLeftMenuTile', + + getInitialState: function() { + return( { hover : false }); + }, + + onMouseEnter: function() { + this.setState( { hover : true }); + }, + + onMouseLeave: function() { + this.setState( { hover : false }); + }, + + render: function() { + var label; + if (!this.props.collapsed) { + label =
    { this.props.label }
    ; + } + else if (this.state.hover) { + var RoomTooltip = sdk.getComponent("molecules.RoomTooltip"); + label = ; + } + + return ( +
    +
    + +
    + { label } +
    + ); + } +}); diff --git a/src/skins/vector/views/molecules/RoomTile.js b/src/skins/vector/views/molecules/RoomTile.js index 92ac743f..39e7b43c 100644 --- a/src/skins/vector/views/molecules/RoomTile.js +++ b/src/skins/vector/views/molecules/RoomTile.js @@ -77,7 +77,7 @@ module.exports = React.createClass({ } else if (this.state.hover) { var RoomTooltip = sdk.getComponent("molecules.RoomTooltip"); - label = ; + label = ; } var RoomAvatar = sdk.getComponent('atoms.RoomAvatar'); diff --git a/src/skins/vector/views/molecules/RoomTooltip.js b/src/skins/vector/views/molecules/RoomTooltip.js index 61c62908..5116b3a9 100644 --- a/src/skins/vector/views/molecules/RoomTooltip.js +++ b/src/skins/vector/views/molecules/RoomTooltip.js @@ -28,25 +28,35 @@ module.exports = React.createClass({ displayName: 'RoomTooltip', componentDidMount: function() { - // tell the roomlist about us - dis.dispatch({ - action: 'view_tooltip', - tooltip: this.getDOMNode(), - }); + if (!this.props.bottom) { + // tell the roomlist about us so it can position us + dis.dispatch({ + action: 'view_tooltip', + tooltip: this.getDOMNode(), + }); + } + else { + var tooltip = this.getDOMNode(); + tooltip.style.top = tooltip.parentElement.getBoundingClientRect().top + "px"; + tooltip.style.display = "block"; + } }, componentDidUnmount: function() { - dis.dispatch({ - action: 'view_tooltip', - tooltip: null, - }); + if (!this.props.bottom) { + dis.dispatch({ + action: 'view_tooltip', + tooltip: null, + }); + } }, render: function() { + var label = this.props.room ? this.props.room.name : this.props.label; return (
    - { this.props.room.name } + { label }
    ); } diff --git a/src/skins/vector/views/organisms/LeftPanel.js b/src/skins/vector/views/organisms/LeftPanel.js index e1b8e252..a57f7a0a 100644 --- a/src/skins/vector/views/organisms/LeftPanel.js +++ b/src/skins/vector/views/organisms/LeftPanel.js @@ -48,7 +48,7 @@ module.exports = React.createClass({ { collapseButton } - + ); } From 9a8a9a4ce4e8c74a2c77cd0b44567b298e7e848f Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 11 Oct 2015 16:09:46 +0100 Subject: [PATCH 16/85] track RHS collapse state, and implement a basic responsive design --- .../vector/views/organisms/RightPanel.js | 19 +++++--- src/skins/vector/views/pages/MatrixChat.js | 45 +++++++++++++++++-- 2 files changed, 53 insertions(+), 11 deletions(-) diff --git a/src/skins/vector/views/organisms/RightPanel.js b/src/skins/vector/views/organisms/RightPanel.js index 58f74241..6d9dc743 100644 --- a/src/skins/vector/views/organisms/RightPanel.js +++ b/src/skins/vector/views/organisms/RightPanel.js @@ -18,13 +18,12 @@ limitations under the License. var React = require('react'); var sdk = require('matrix-react-sdk') +var dis = require('matrix-react-sdk/lib/dispatcher'); module.exports = React.createClass({ displayName: 'RightPanel', Phase : { - Blank: 'Blank', - None: 'None', MemberList: 'MemberList', FileList: 'FileList', }, @@ -36,11 +35,16 @@ module.exports = React.createClass({ }, onMemberListButtonClick: function() { - if (this.state.phase == this.Phase.None) { - this.setState({ phase: this.Phase.MemberList }); + if (this.props.collapsed) { + this.setState({ phase: this.Phase.MemberList }); + dis.dispatch({ + action: 'show_right_panel', + }); } else { - this.setState({ phase: this.Phase.None }); + dis.dispatch({ + action: 'hide_right_panel', + }); } }, @@ -48,6 +52,7 @@ module.exports = React.createClass({ var MemberList = sdk.getComponent('organisms.MemberList'); var buttonGroup; var panel; + if (this.props.roomId) { buttonGroup =
    @@ -59,13 +64,13 @@ module.exports = React.createClass({
    ; - if (this.state.phase == this.Phase.MemberList) { + if (!this.props.collapsed && this.state.phase == this.Phase.MemberList) { panel = } } var classes = "mx_RightPanel"; - if (this.state.phase === this.Phase.None) { + if (this.props.collapsed) { classes += " collapsed"; } diff --git a/src/skins/vector/views/pages/MatrixChat.js b/src/skins/vector/views/pages/MatrixChat.js index 688ac96f..e1558459 100644 --- a/src/skins/vector/views/pages/MatrixChat.js +++ b/src/skins/vector/views/pages/MatrixChat.js @@ -31,6 +31,43 @@ module.exports = React.createClass({ displayName: 'MatrixChat', mixins: [MatrixChatController], + getInitialState: function() { + return { + width: 10000, + } + }, + + componentDidMount: function() { + window.addEventListener('resize', this.handleResize); + this.handleResize(); + }, + + componentWillUnmount: function() { + window.removeEventListener('resize', this.handleResize); + }, + + handleResize: function(e) { + var hideLhsThreshold = 1000; + var showLhsThreshold = 1000; + var hideRhsThreshold = 820; + var showRhsThreshold = 820; + + if (this.state.width > hideLhsThreshold && window.innerWidth <= hideLhsThreshold) { + dis.dispatch({ action: 'hide_left_panel' }); + } + if (this.state.width <= showLhsThreshold && window.innerWidth > showLhsThreshold) { + dis.dispatch({ action: 'show_left_panel' }); + } + if (this.state.width > hideRhsThreshold && window.innerWidth <= hideRhsThreshold) { + dis.dispatch({ action: 'hide_right_panel' }); + } + if (this.state.width <= showRhsThreshold && window.innerWidth > showRhsThreshold) { + dis.dispatch({ action: 'show_right_panel' }); + } + + this.setState({width: window.innerWidth}); + }, + onRoomCreated: function(room_id) { dis.dispatch({ action: "view_room", @@ -57,19 +94,19 @@ module.exports = React.createClass({ switch (this.state.page_type) { case this.PageTypes.RoomView: page_element = - right_panel = + right_panel = break; case this.PageTypes.UserSettings: page_element = - right_panel = + right_panel = break; case this.PageTypes.CreateRoom: page_element = - right_panel = + right_panel = break; case this.PageTypes.RoomDirectory: page_element = - right_panel = + right_panel = break; } From ba0ae5ba5936dced94741de3966917135e482254 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 11 Oct 2015 17:28:36 +0100 Subject: [PATCH 17/85] various cosmetic fixes based on design feedback --- src/skins/vector/css/common.css | 6 ++++++ src/skins/vector/css/molecules/MessageTile.css | 2 +- src/skins/vector/css/molecules/RoomHeader.css | 5 ++++- src/skins/vector/css/organisms/RoomView.css | 2 -- src/skins/vector/views/atoms/MessageTimestamp.js | 11 ++++++++++- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/skins/vector/css/common.css b/src/skins/vector/css/common.css index 8afba88e..efe57cd3 100644 --- a/src/skins/vector/css/common.css +++ b/src/skins/vector/css/common.css @@ -34,6 +34,12 @@ h2 { margin-bottom: 16px; } +a:hover, +a:link, +a:visited { + color: #80CEF4; +} + .mx_ContextualMenu_background { position: fixed; top: 0; diff --git a/src/skins/vector/css/molecules/MessageTile.css b/src/skins/vector/css/molecules/MessageTile.css index 50a12c3a..c50f4abc 100644 --- a/src/skins/vector/css/molecules/MessageTile.css +++ b/src/skins/vector/css/molecules/MessageTile.css @@ -72,7 +72,7 @@ limitations under the License. } .mx_MessageTile_highlight { - color: #00f; + color: #FF0064; } .mx_MessageTile_msgOption { diff --git a/src/skins/vector/css/molecules/RoomHeader.css b/src/skins/vector/css/molecules/RoomHeader.css index c0c8567d..4f09275d 100644 --- a/src/skins/vector/css/molecules/RoomHeader.css +++ b/src/skins/vector/css/molecules/RoomHeader.css @@ -116,13 +116,16 @@ limitations under the License. margin-top: -5px; } -.mx_RoomHeader_nameInput { +.mx_RoomHeader_name input, .mx_RoomHeader_nameInput { border-radius: 3px; width: 260px; border: 1px solid #c7c7c7; font-weight: 300; font-size: 14px; padding: 9px; +} + +.mx_RoomHeader_nameInput { margin-top: 6px; } diff --git a/src/skins/vector/css/organisms/RoomView.css b/src/skins/vector/css/organisms/RoomView.css index babc5fe9..df1b46b8 100644 --- a/src/skins/vector/css/organisms/RoomView.css +++ b/src/skins/vector/css/organisms/RoomView.css @@ -106,8 +106,6 @@ limitations under the License. flex: 1 1 0; width: 100%; - margin-top: 18px; - margin-bottom: 18px; overflow-y: auto; } diff --git a/src/skins/vector/views/atoms/MessageTimestamp.js b/src/skins/vector/views/atoms/MessageTimestamp.js index ef866afa..e9b7bd13 100644 --- a/src/skins/vector/views/atoms/MessageTimestamp.js +++ b/src/skins/vector/views/atoms/MessageTimestamp.js @@ -24,11 +24,20 @@ module.exports = React.createClass({ displayName: 'MessageTimestamp', mixins: [MessageTimestampController], + formatDate: function(date) { + // date.toLocaleTimeString is completely system dependent. + // just go 24h for now + function pad(n) { + return (n < 10 ? '0' : '') + n; + } + return pad(date.getHours()) + ':' + pad(date.getMinutes()); + }, + render: function() { var date = new Date(this.props.ts); return ( - {date.toLocaleTimeString()} + { this.formatDate(date) } ); }, From 9be98058b7f11e77b6f8f80a5af82c1b24d9d702 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 11 Oct 2015 17:50:16 +0100 Subject: [PATCH 18/85] fix horizontal overscroll --- src/skins/vector/css/molecules/MatrixToolbar.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/skins/vector/css/molecules/MatrixToolbar.css b/src/skins/vector/css/molecules/MatrixToolbar.css index 76845e4b..99c28240 100644 --- a/src/skins/vector/css/molecules/MatrixToolbar.css +++ b/src/skins/vector/css/molecules/MatrixToolbar.css @@ -15,7 +15,6 @@ limitations under the License. */ .mx_MatrixToolbar { - width: 100%; text-align: center; background-color: #ff0064; color: #fff; From 201caed773204c01da449a2d6405a83fa55d3bf5 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 11 Oct 2015 17:50:24 +0100 Subject: [PATCH 19/85] fix rubberband bounce on OSX and iOS --- src/skins/vector/css/common.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/skins/vector/css/common.css b/src/skins/vector/css/common.css index efe57cd3..1b2aa410 100644 --- a/src/skins/vector/css/common.css +++ b/src/skins/vector/css/common.css @@ -14,6 +14,11 @@ See the License for the specific language governing permissions and limitations under the License. */ +html { + height: 100%; + overflow: hidden; +} + body { font-family: 'Lato', Helvetica, Arial, Sans-Serif; font-size: 16px; From 5d962e1feb26ad97f63f364141dac313d49709bc Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 11 Oct 2015 18:04:01 +0100 Subject: [PATCH 20/85] improve horizontal flexing of timeline --- src/skins/vector/css/common.css | 2 ++ src/skins/vector/css/pages/MatrixChat.css | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/skins/vector/css/common.css b/src/skins/vector/css/common.css index 1b2aa410..879561f9 100644 --- a/src/skins/vector/css/common.css +++ b/src/skins/vector/css/common.css @@ -15,6 +15,8 @@ limitations under the License. */ html { + /* hack to stop overscroll bounce on OSX and iOS. + N.B. Breaks things when we have legitimate horizontal overscroll */ height: 100%; overflow: hidden; } diff --git a/src/skins/vector/css/pages/MatrixChat.css b/src/skins/vector/css/pages/MatrixChat.css index 58f280fd..6fa0415a 100644 --- a/src/skins/vector/css/pages/MatrixChat.css +++ b/src/skins/vector/css/pages/MatrixChat.css @@ -88,7 +88,9 @@ limitations under the License. padding-left: 12px; padding-right: 12px; background-color: #f3f8fa; - width: 100%; + + -webkit-flex: 1; + flex: 1; /* XXX: Hack: apparently if you try to nest a flex-box * within a non-flex-box within a flex-box, the height From 191d56673b0b013f39f12bd4176ff050d5ee2f40 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 11 Oct 2015 18:21:36 +0100 Subject: [PATCH 21/85] fix message spacing on Safari caused by switching back to
  • s... --- src/skins/vector/css/organisms/RoomView.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/skins/vector/css/organisms/RoomView.css b/src/skins/vector/css/organisms/RoomView.css index df1b46b8..ebf9f44c 100644 --- a/src/skins/vector/css/organisms/RoomView.css +++ b/src/skins/vector/css/organisms/RoomView.css @@ -121,6 +121,10 @@ limitations under the License. padding: 0px; } +.mx_RoomView_MessageList li { + clear: both; +} + .mx_RoomView_MessageList h2 { clear: both; margin-top: 32px; From 50ebce69b7e52a24e91596870310a76f5e9e6ad2 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 11 Oct 2015 18:42:54 +0100 Subject: [PATCH 22/85] make file upload look slightly less crap --- src/skins/vector/css/organisms/RoomView.css | 20 ++++++++++++++++---- src/skins/vector/views/organisms/RoomView.js | 15 +++++++++++---- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/skins/vector/css/organisms/RoomView.css b/src/skins/vector/css/organisms/RoomView.css index ebf9f44c..1bd827bc 100644 --- a/src/skins/vector/css/organisms/RoomView.css +++ b/src/skins/vector/css/organisms/RoomView.css @@ -212,13 +212,25 @@ limitations under the License. .mx_RoomView_uploadProgressOuter { width: 100%; - background-color: black; - height: 5px; + background-color: #a9dbf4; + height: 4px; } .mx_RoomView_uploadProgressInner { - background-color: blue; - height: 5px; + background-color: #80cef4; + height: 4px; +} + +.mx_RoomView_uploadFilename { + margin-top: 15px; + margin-left: 56px; +} + +.mx_RoomView_uploadBytes { + float: right; + opacity: 0.5; + margin-top: 15px; + margin-right: 70px; } .mx_RoomView_ongoingConfCallNotification { diff --git a/src/skins/vector/views/organisms/RoomView.js b/src/skins/vector/views/organisms/RoomView.js index dfeedd2a..f45ed596 100644 --- a/src/skins/vector/views/organisms/RoomView.js +++ b/src/skins/vector/views/organisms/RoomView.js @@ -138,19 +138,26 @@ module.exports = React.createClass({
    ); + // for testing UI... + // this.state.upload = { + // uploadedBytes: 123493, + // totalBytes: 347534, + // fileName: "testing_fooble.jpg", + // } + if (this.state.upload) { var innerProgressStyle = { width: ((this.state.upload.uploadedBytes / this.state.upload.totalBytes) * 100) + '%' }; statusBar = (
    - Uploading {this.state.upload.fileName} - - {filesize(this.state.upload.uploadedBytes)} / {filesize(this.state.upload.totalBytes)} -
    +
    + {filesize(this.state.upload.uploadedBytes).replace(/ .*/, '')} / {filesize(this.state.upload.totalBytes)} +
    +
    Uploading {this.state.upload.fileName}
    ); } else { From 17c81c11015fcbe9062d745fdc06e3f2584b25d4 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 11 Oct 2015 22:51:00 +0100 Subject: [PATCH 23/85] icons --- src/skins/vector/css/organisms/LeftPanel.css | 5 +++-- src/skins/vector/css/organisms/RoomView.css | 16 ++++++++++++++-- src/skins/vector/img/cancel.png | Bin 0 -> 1209 bytes src/skins/vector/img/fileicon.png | Bin 0 -> 1193 bytes src/skins/vector/views/organisms/RoomView.js | 4 +++- 5 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 src/skins/vector/img/cancel.png create mode 100644 src/skins/vector/img/fileicon.png diff --git a/src/skins/vector/css/organisms/LeftPanel.css b/src/skins/vector/css/organisms/LeftPanel.css index 3639464f..0e7e077e 100644 --- a/src/skins/vector/css/organisms/LeftPanel.css +++ b/src/skins/vector/css/organisms/LeftPanel.css @@ -28,8 +28,9 @@ limitations under the License. .mx_LeftPanel_hideButton { position: absolute; - top: 18px; - right: 8px; + top: 10px; + right: 0px; + padding: 8px; cursor: pointer; } diff --git a/src/skins/vector/css/organisms/RoomView.css b/src/skins/vector/css/organisms/RoomView.css index 1bd827bc..2aab203a 100644 --- a/src/skins/vector/css/organisms/RoomView.css +++ b/src/skins/vector/css/organisms/RoomView.css @@ -212,7 +212,7 @@ limitations under the License. .mx_RoomView_uploadProgressOuter { width: 100%; - background-color: #a9dbf4; + background-color: rgba(169, 219, 244, 0.5); height: 4px; } @@ -226,11 +226,23 @@ limitations under the License. margin-left: 56px; } +.mx_RoomView_uploadIcon { + float: left; + margin-top: 6px; + margin-left: 5px; +} + +.mx_RoomView_uploadCancel { + float: right; + margin-top: 6px; + margin-right: 10px; +} + .mx_RoomView_uploadBytes { float: right; opacity: 0.5; margin-top: 15px; - margin-right: 70px; + margin-right: 10px; } .mx_RoomView_ongoingConfCallNotification { diff --git a/src/skins/vector/img/cancel.png b/src/skins/vector/img/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..c963a4b7b37a630c1be331c78156614cc0705094 GIT binary patch literal 1209 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m^Cs(B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxOgGuU%v{0TQqR!T z+}y-mN5ROz&{W^RSl`${*T~q)#K6kLNC66zfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7I$IMft0d=ry1 z^FV@{U|qhxR-SpqC5d^-sh%#jN= z1y1vzdQ)(_#S*7peV}9XLD7p8-7q0w8Uiuli5JL$C;!wuV45!iChn>q3c!59sP5_F z7*cWT&5gZWha7kq9?Y?Ibv)`S5L3f6-_cxM{+g@0{Gp2{m(FgExS(|HhDeK&tA4tl z$fUK0x5mF$=S&w6th3De@OYsEt5!fG*PkSnm#oc9*FQ>%?-u@5^I}GSowJkmL8mQ#4oUFwti;Y=X6PM>Y-YeH7?I~ePK(o;8MQ$Y5MdjPF&x`m!9)F zCwDex*2hmN0SQ+#b9{&tZSU|-1}jcs6Lm~~9@g_@Lg Q9H=nyboFyt=akR{0GueCmH+?% literal 0 HcmV?d00001 diff --git a/src/skins/vector/img/fileicon.png b/src/skins/vector/img/fileicon.png new file mode 100644 index 0000000000000000000000000000000000000000..be277a1c8afe9c15815f2c63fc277cf20f66f3d6 GIT binary patch literal 1193 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m^Cs(B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxOgGuU%v{0TQqR!T z+}y-mN5ROz&{W^RSl`${*T~q)#K6kLNC66zfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7I$IMft0d=ry1 z^FV@{U|qhxR-SpqC5d^-sh%#jNk+FfLnYoKGcDF$EreJXkRIejWz4}1M=!2pcDY{`oz%&G6!V@o$15f^`dB8MZ z1WepozUk%+42bO<&%g&CIN9gR*_i&u{e?mO84XskL4Bz_H45lG@Cc{_f_9QGH7y^_ERj&Wt(} zaCoALKD%bA3inpoEw!i9+G?xIk}V$HzrUa7{5(5WYa?UZ+60*wPamKD@c20YoKN+Q zeKETV7!NnJE?BjQ>0Z;%!`I(8>+|+)OLLR8cy%C
    + +
    - {filesize(this.state.upload.uploadedBytes).replace(/ .*/, '')} / {filesize(this.state.upload.totalBytes)} + {filesize(this.state.upload.uploadedBytes).replace(/ .*/, '')} / {filesize(this.state.upload.totalBytes)}
    Uploading {this.state.upload.fileName}
  • From 353af6c647ae99d50f69fcaeecfee481a8cf468f Mon Sep 17 00:00:00 2001 From: Steven Hammerton Date: Mon, 12 Oct 2015 10:10:26 +0100 Subject: [PATCH 24/85] Move CasLogin logic to controller class and logic object in react-sdk --- src/skins/vector/views/organisms/CasLogin.js | 23 +++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/skins/vector/views/organisms/CasLogin.js b/src/skins/vector/views/organisms/CasLogin.js index 2a73fd3c..80b4cae1 100644 --- a/src/skins/vector/views/organisms/CasLogin.js +++ b/src/skins/vector/views/organisms/CasLogin.js @@ -20,25 +20,11 @@ var React = require('react'); var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); +var CasLoginController = require('matrix-react-sdk/lib/controllers/organisms/CasLogin'); + module.exports = React.createClass({ displayName: 'CasLogin', - - getInitialState: function() { - var splitLocation = window.location.href.split('/'); - return {serviceUrl: splitLocation[0] + "//" + splitLocation[2]}; - }, - - onCasClicked: function(ev) { - var serviceRedirectUrl = this.state.serviceUrl + "/#/login/cas"; - var self = this; - MatrixClientPeg.get().getCasServer().done(function(data) { - var serverUrl = data.serverUrl + "/login?service=" + encodeURIComponent(serviceRedirectUrl); - window.location.href=serverUrl - }, function(error) { - self.setStep("stage_m.login.cas"); - self.setState({errorText: 'Login failed.'}); - }); - }, + mixins: [CasLoginController], render: function() { return ( @@ -47,4 +33,5 @@ module.exports = React.createClass({
    ); } -}); \ No newline at end of file + +}); From f5039ac9af1d8af52bae2246b24372ea10a8f287 Mon Sep 17 00:00:00 2001 From: Steven Hammerton Date: Mon, 12 Oct 2015 10:11:02 +0100 Subject: [PATCH 25/85] Use node querystring module to parse query string like name value pairs from fragment --- src/vector/index.js | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/vector/index.js b/src/vector/index.js index 8a6a3448..1be71052 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -21,21 +21,20 @@ var sdk = require("matrix-react-sdk"); sdk.loadSkin(require('../skins/vector/skindex')); sdk.loadModule(require('../modules/VectorConferenceHandler')); +var qs = require("querystring"); + var lastLocationHashSet = null; -function parseQueryParams(location) { +// We want to support some name / value pairs in the fragment +// so we're re-using query string ike format +function parseQsFromFragment(location) { var hashparts = location.hash.split('?'); - var params = {}; - if (hashparts.length == 2) { - var pairs = hashparts[1].split('&'); - for (var i = 0; i < pairs.length; ++i) { - var parts = pairs[i].split('='); - if (parts.length != 2) continue; - params[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]); - } + if (hashparts.length > 1) { + console.log(qs.parse(hashparts[1])); + return qs.parse(hashparts[1]); } - return params + return {}; } // Here, we do some crude URL analysis to allow @@ -43,9 +42,9 @@ function parseQueryParams(location) { // deep-links in this example. function routeUrl(location) { if (location.hash.indexOf('#/register') == 0) { - window.matrixChat.showScreen('register', parseQueryParams(location)); + window.matrixChat.showScreen('register', parseQsFromFragment(location)); } else if (location.hash.indexOf('#/login/cas') == 0) { - window.matrixChat.showScreen('cas_login', parseQueryParams(location)); + window.matrixChat.showScreen('cas_login', parseQsFromFragment(location)); } else { window.matrixChat.showScreen(location.hash.substring(2)); } From c561647460edc6dd37b23971dd033effee15dbfe Mon Sep 17 00:00:00 2001 From: Steven Hammerton Date: Mon, 12 Oct 2015 10:11:19 +0100 Subject: [PATCH 26/85] Add missing comma --- src/skins/vector/views/organisms/CasLogin.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/skins/vector/views/organisms/CasLogin.js b/src/skins/vector/views/organisms/CasLogin.js index 80b4cae1..9782549b 100644 --- a/src/skins/vector/views/organisms/CasLogin.js +++ b/src/skins/vector/views/organisms/CasLogin.js @@ -32,6 +32,7 @@ module.exports = React.createClass({
    ); - } + }, }); + From b5357d32989ab1ddfc012e3151a80713ed124003 Mon Sep 17 00:00:00 2001 From: Steven Hammerton Date: Mon, 12 Oct 2015 10:28:39 +0100 Subject: [PATCH 27/85] Remove whitespace --- src/skins/vector/views/organisms/CasLogin.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/skins/vector/views/organisms/CasLogin.js b/src/skins/vector/views/organisms/CasLogin.js index 9782549b..ae41e955 100644 --- a/src/skins/vector/views/organisms/CasLogin.js +++ b/src/skins/vector/views/organisms/CasLogin.js @@ -33,6 +33,5 @@ module.exports = React.createClass({
    ); }, - -}); +}); From 293ee1bbcb787480be8acfda095ca3d56419d982 Mon Sep 17 00:00:00 2001 From: Steven Hammerton Date: Mon, 12 Oct 2015 17:41:56 +0100 Subject: [PATCH 28/85] Fix typo in comment and remove console.log leftover from debugging --- src/vector/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/vector/index.js b/src/vector/index.js index 1be71052..22db05a3 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -27,11 +27,10 @@ var lastLocationHashSet = null; // We want to support some name / value pairs in the fragment -// so we're re-using query string ike format +// so we're re-using query string like format function parseQsFromFragment(location) { var hashparts = location.hash.split('?'); if (hashparts.length > 1) { - console.log(qs.parse(hashparts[1])); return qs.parse(hashparts[1]); } return {}; From 1dd707775a83dc078939bc478c4a79f7742d033a Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 13 Oct 2015 11:10:43 +0100 Subject: [PATCH 29/85] Use new js-sdk modified time to avoid unnecessary member tile updates. Also avoid double-updating since we were setting state and then forcing an update which is redundant. --- package.json | 2 +- .../vector/views/molecules/MemberTile.js | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 429e6139..275ef4c2 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "filesize": "^3.1.2", "flux": "~2.0.3", "linkifyjs": "^2.0.0-beta.4", - "matrix-js-sdk": "^0.2.1", + "matrix-js-sdk": "^0.2.2", "matrix-react-sdk": "^0.0.1", "q": "^1.4.1", "react": "^0.13.3", diff --git a/src/skins/vector/views/molecules/MemberTile.js b/src/skins/vector/views/molecules/MemberTile.js index 991616d5..2908fdae 100644 --- a/src/skins/vector/views/molecules/MemberTile.js +++ b/src/skins/vector/views/molecules/MemberTile.js @@ -31,6 +31,23 @@ module.exports = React.createClass({ displayName: 'MemberTile', mixins: [MemberTileController], + shouldComponentUpdate: function(nextProps, nextState) { + if ( + this.member_last_modified_time === undefined || + this.member_last_modified_time < nextProps.member.getLastModifiedTime() + ) { + return true + } + if ( + nextProps.member.user && + (this.user_last_modified_time === undefined || + this.user_last_modified_time < nextProps.member.user.getLastModifiedTime()) + ) { + return true + } + return false; + }, + mouseEnter: function(e) { this.setState({ 'hover': true }); }, @@ -93,6 +110,11 @@ module.exports = React.createClass({ }, render: function() { + this.member_last_modified_time = this.props.member.getLastModifiedTime(); + if (this.props.member.user) { + this.user_last_modified_time = this.props.member.user.getLastModifiedTime(); + } + var isMyUser = MatrixClientPeg.get().credentials.userId == this.props.member.userId; var power; From 47c1bb35db03d7017f6dbaafc6c59fbe024a8ec2 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 13 Oct 2015 15:17:20 +0100 Subject: [PATCH 30/85] Un-break member hovering --- src/skins/vector/views/molecules/MemberTile.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/skins/vector/views/molecules/MemberTile.js b/src/skins/vector/views/molecules/MemberTile.js index 2908fdae..4c34fcb7 100644 --- a/src/skins/vector/views/molecules/MemberTile.js +++ b/src/skins/vector/views/molecules/MemberTile.js @@ -32,6 +32,7 @@ module.exports = React.createClass({ mixins: [MemberTileController], shouldComponentUpdate: function(nextProps, nextState) { + if (this.state.hover !== nextState.hover) return true; if ( this.member_last_modified_time === undefined || this.member_last_modified_time < nextProps.member.getLastModifiedTime() From c0938f270eeb183af370d4788a0a31dea41cdddc Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 13 Oct 2015 16:03:07 +0100 Subject: [PATCH 31/85] Unused code --- src/skins/vector/views/molecules/BottomLeftMenuTile.js | 3 --- src/skins/vector/views/molecules/RoomTooltip.js | 4 ---- src/skins/vector/views/organisms/CasLogin.js | 2 -- 3 files changed, 9 deletions(-) diff --git a/src/skins/vector/views/molecules/BottomLeftMenuTile.js b/src/skins/vector/views/molecules/BottomLeftMenuTile.js index b0d00c62..2644769c 100644 --- a/src/skins/vector/views/molecules/BottomLeftMenuTile.js +++ b/src/skins/vector/views/molecules/BottomLeftMenuTile.js @@ -17,9 +17,6 @@ limitations under the License. 'use strict'; var React = require('react'); -var classNames = require('classnames'); - -var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); var sdk = require('matrix-react-sdk') diff --git a/src/skins/vector/views/molecules/RoomTooltip.js b/src/skins/vector/views/molecules/RoomTooltip.js index 5116b3a9..82e3e744 100644 --- a/src/skins/vector/views/molecules/RoomTooltip.js +++ b/src/skins/vector/views/molecules/RoomTooltip.js @@ -17,11 +17,7 @@ limitations under the License. 'use strict'; var React = require('react'); -var classNames = require('classnames'); -var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); - -var sdk = require('matrix-react-sdk') var dis = require('matrix-react-sdk/lib/dispatcher'); module.exports = React.createClass({ diff --git a/src/skins/vector/views/organisms/CasLogin.js b/src/skins/vector/views/organisms/CasLogin.js index ae41e955..ad9dbed9 100644 --- a/src/skins/vector/views/organisms/CasLogin.js +++ b/src/skins/vector/views/organisms/CasLogin.js @@ -18,8 +18,6 @@ limitations under the License. var React = require('react'); -var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); - var CasLoginController = require('matrix-react-sdk/lib/controllers/organisms/CasLogin'); module.exports = React.createClass({ From 2adb8bac5c821e13d3de16808786382e421744ec Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 14 Oct 2015 09:20:18 +0100 Subject: [PATCH 32/85] Actually turn on production mode: env vars need to be explicitly passed through --- webpack.config.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/webpack.config.js b/webpack.config.js index 6e557ae6..74e71113 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -19,7 +19,12 @@ module.exports = { }, }, plugins: [ - new webpack.IgnorePlugin(/^olm/) + new webpack.IgnorePlugin(/^olm/), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify(process.env.NODE_ENV) + } + }) ], devtool: 'source-map' }; From 48924a61066c26b5f8b1c8455312bbfee8c4d8ec Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 15 Oct 2015 14:14:33 +0100 Subject: [PATCH 33/85] Change resend buttons to a context menu with working resending and non-working 'view source' --- src/controllers/organisms/RoomView.js | 1 + src/skins/vector/skindex.js | 1 + .../views/molecules/MessageContextMenu.js | 72 +++++++++++++++++++ .../vector/views/molecules/MessageTile.js | 14 +++- 4 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 src/skins/vector/views/molecules/MessageContextMenu.js diff --git a/src/controllers/organisms/RoomView.js b/src/controllers/organisms/RoomView.js index 0166afde..ca62f72a 100644 --- a/src/controllers/organisms/RoomView.js +++ b/src/controllers/organisms/RoomView.js @@ -70,6 +70,7 @@ module.exports = { switch (payload.action) { case 'message_send_failed': case 'message_sent': + case 'message_resend_started': this.setState({ room: MatrixClientPeg.get().getRoom(this.props.roomId) }); diff --git a/src/skins/vector/skindex.js b/src/skins/vector/skindex.js index 51bfb105..c2cd9611 100644 --- a/src/skins/vector/skindex.js +++ b/src/skins/vector/skindex.js @@ -46,6 +46,7 @@ skin['molecules.MemberInfo'] = require('./views/molecules/MemberInfo'); skin['molecules.MemberTile'] = require('./views/molecules/MemberTile'); skin['molecules.MEmoteTile'] = require('./views/molecules/MEmoteTile'); skin['molecules.MessageComposer'] = require('./views/molecules/MessageComposer'); +skin['molecules.MessageContextMenu'] = require('./views/molecules/MessageContextMenu'); skin['molecules.MessageTile'] = require('./views/molecules/MessageTile'); skin['molecules.MFileTile'] = require('./views/molecules/MFileTile'); skin['molecules.MImageTile'] = require('./views/molecules/MImageTile'); diff --git a/src/skins/vector/views/molecules/MessageContextMenu.js b/src/skins/vector/views/molecules/MessageContextMenu.js new file mode 100644 index 00000000..adb8d10f --- /dev/null +++ b/src/skins/vector/views/molecules/MessageContextMenu.js @@ -0,0 +1,72 @@ +/* +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 MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); +var dis = require('matrix-react-sdk/lib/dispatcher'); + +module.exports = React.createClass({ + displayName: 'MessageContextMenu', + + onResendClick: function() { + MatrixClientPeg.get().resendEvent( + this.props.mxEvent, MatrixClientPeg.get().getRoom( + this.props.mxEvent.getRoomId() + ) + ).done(function() { + dis.dispatch({ + action: 'message_sent' + }); + }, function() { + dis.dispatch({ + action: 'message_send_failed' + }); + }); + dis.dispatch({action: 'message_resend_started'}); + if (this.props.onFinished) this.props.onFinished(); + }, + + onViewSourceClick: function() { + }, + + render: function() { + var resendButton; + var viewSourceButton; + + if (this.props.mxEvent.status == 'not_sent') { + resendButton = ( +
    + Resend +
    + ); + } + viewSourceButton = ( +
    + View Source +
    + ); + + return ( +
    + {resendButton} + {viewSourceButton} +
    + ); + } +}); diff --git a/src/skins/vector/views/molecules/MessageTile.js b/src/skins/vector/views/molecules/MessageTile.js index 386b19d3..acc74761 100644 --- a/src/skins/vector/views/molecules/MessageTile.js +++ b/src/skins/vector/views/molecules/MessageTile.js @@ -17,17 +17,26 @@ limitations under the License. 'use strict'; var React = require('react'); - var classNames = require("classnames"); var sdk = require('matrix-react-sdk') var MessageTileController = require('matrix-react-sdk/lib/controllers/molecules/MessageTile') +var ContextualMenu = require('../../../../ContextualMenu'); module.exports = React.createClass({ displayName: 'MessageTile', mixins: [MessageTileController], + onClick: function(e) { + var MessageContextMenu = sdk.getComponent('molecules.MessageContextMenu'); + ContextualMenu.createMenu(MessageContextMenu, { + mxEvent: this.props.mxEvent, + right: window.innerWidth - e.pageX, + top: e.pageY + }); + }, + render: function() { var MessageTimestamp = sdk.getComponent('atoms.MessageTimestamp'); var SenderProfile = sdk.getComponent('molecules.SenderProfile'); @@ -83,10 +92,9 @@ module.exports = React.createClass({ ; } return ( -
    +
    { avatar } { timestamp } - { resend } { sender }
    From 4b904d90f26fc9c103c6be5df6f7d4d4a9ec640f Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 15 Oct 2015 14:40:36 +0100 Subject: [PATCH 34/85] Slightly improve source path tree in the browser debugger --- webpack.config.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/webpack.config.js b/webpack.config.js index 74e71113..7868699d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -11,6 +11,18 @@ module.exports = { { test: /\.js$/, loader: "babel", include: path.resolve('./src') }, ] }, + output: { + devtoolModuleFilenameTemplate: function(info) { + // Reading input source maps gives only relative paths here for + // everything. Until I figure out how to fix this, this is a + // workaround. + // We use the relative resource path with any '../'s on the front + // removed which gives a tree with matrix-react-sdk and vector + // trees smashed together, but this fixes everything being under + // various levels of '.' and '..' + return info.resourcePath.replace(/^[\/\.]*/, ''); + } + }, resolve: { alias: { // alias any requires to the react module to the one in our path, otherwise From e3e49daddbfc45550dad48f35506402ca96fabe8 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 15 Oct 2015 14:41:12 +0100 Subject: [PATCH 35/85] Make 'view source' work --- src/skins/vector/css/organisms/ViewSource.css | 3 ++ src/skins/vector/skindex.js | 1 + .../views/molecules/MessageContextMenu.js | 7 ++++ .../vector/views/organisms/ViewSource.js | 34 +++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 src/skins/vector/css/organisms/ViewSource.css create mode 100644 src/skins/vector/views/organisms/ViewSource.js diff --git a/src/skins/vector/css/organisms/ViewSource.css b/src/skins/vector/css/organisms/ViewSource.css new file mode 100644 index 00000000..ae61ae58 --- /dev/null +++ b/src/skins/vector/css/organisms/ViewSource.css @@ -0,0 +1,3 @@ +.mx_ViewSource pre { + text-align: left; +} diff --git a/src/skins/vector/skindex.js b/src/skins/vector/skindex.js index c2cd9611..7cd83618 100644 --- a/src/skins/vector/skindex.js +++ b/src/skins/vector/skindex.js @@ -80,6 +80,7 @@ skin['organisms.RoomDirectory'] = require('./views/organisms/RoomDirectory'); skin['organisms.RoomList'] = require('./views/organisms/RoomList'); skin['organisms.RoomView'] = require('./views/organisms/RoomView'); skin['organisms.UserSettings'] = require('./views/organisms/UserSettings'); +skin['organisms.ViewSource'] = require('./views/organisms/ViewSource'); skin['pages.MatrixChat'] = require('./views/pages/MatrixChat'); skin['templates.Login'] = require('./views/templates/Login'); skin['templates.Register'] = require('./views/templates/Register'); diff --git a/src/skins/vector/views/molecules/MessageContextMenu.js b/src/skins/vector/views/molecules/MessageContextMenu.js index adb8d10f..66f1d6d4 100644 --- a/src/skins/vector/views/molecules/MessageContextMenu.js +++ b/src/skins/vector/views/molecules/MessageContextMenu.js @@ -20,6 +20,8 @@ var React = require('react'); var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); var dis = require('matrix-react-sdk/lib/dispatcher'); +var sdk = require('matrix-react-sdk') +var Modal = require('matrix-react-sdk/lib/Modal'); module.exports = React.createClass({ displayName: 'MessageContextMenu', @@ -43,6 +45,11 @@ module.exports = React.createClass({ }, onViewSourceClick: function() { + var ViewSource = sdk.getComponent('organisms.ViewSource'); + Modal.createDialog(ViewSource, { + mxEvent: this.props.mxEvent + }); + if (this.props.onFinished) this.props.onFinished(); }, render: function() { diff --git a/src/skins/vector/views/organisms/ViewSource.js b/src/skins/vector/views/organisms/ViewSource.js new file mode 100644 index 00000000..a00cfc85 --- /dev/null +++ b/src/skins/vector/views/organisms/ViewSource.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'); + +module.exports = React.createClass({ + displayName: 'ViewSource', + + render: function() { + return ( +
    +
    +                    {JSON.stringify(this.props.mxEvent.event, null, 2)}
    +                
    +
    + ); + } +}); + From 11aa6f8c3717157d16b43e4840e1df7f07ad9654 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 19 Oct 2015 14:33:45 +0100 Subject: [PATCH 36/85] Null check userId on member. Fixes #5. --- src/Avatar.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Avatar.js b/src/Avatar.js index 2f83ebd9..8de29f1d 100644 --- a/src/Avatar.js +++ b/src/Avatar.js @@ -27,7 +27,10 @@ module.exports = { resizeMethod ); if (!url) { - url = this.defaultAvatarUrlForString(member.userId); + // member can be null here currently since on invites, the JS SDK + // does not have enough info to build a RoomMember object for + // the inviter. + url = this.defaultAvatarUrlForString(member ? member.userId : ''); } return url; }, From 530b077a8ed9885252088bf48296f6e19201685f Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Mon, 19 Oct 2015 17:13:40 +0100 Subject: [PATCH 37/85] reimplement 1a95148dae48945a3b3639c1f1b1447b27825f45 which somehow got lost during refactoring vector-web into matrix-react-sdk and vector-web --- src/controllers/organisms/RoomView.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/controllers/organisms/RoomView.js b/src/controllers/organisms/RoomView.js index ca62f72a..1300f714 100644 --- a/src/controllers/organisms/RoomView.js +++ b/src/controllers/organisms/RoomView.js @@ -365,6 +365,8 @@ module.exports = { 'm.room.topic' : sdk.getComponent('molecules.EventAsTextTile'), }; + var DateSeparator = sdk.getComponent('molecules.DateSeparator'); + var ret = []; var count = 0; @@ -373,6 +375,7 @@ 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; } @@ -387,11 +390,21 @@ module.exports = { { 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; From d1cda75c8b10ac82d1679c23cd7447e246a258a6 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Mon, 19 Oct 2015 18:19:26 +0100 Subject: [PATCH 38/85] Date refinements. Show more detailed timestamps for older messages, and try to show a separator as the first message in every room --- src/controllers/organisms/RoomView.js | 7 +++++++ .../vector/views/atoms/MessageTimestamp.js | 18 +++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/controllers/organisms/RoomView.js b/src/controllers/organisms/RoomView.js index 1300f714..29933d4a 100644 --- a/src/controllers/organisms/RoomView.js +++ b/src/controllers/organisms/RoomView.js @@ -398,6 +398,13 @@ module.exports = { continuation = false; } } + + if (i === 1) { // n.b. 1, not 0, as the 0th event is an m.room.create and so doesn't show on the timeline + var ts1 = this.state.room.timeline[i].getTs(); + dateSeparator = ; + continuation = false; + } + if (!TileType) continue; ret.unshift(
  • diff --git a/src/skins/vector/views/atoms/MessageTimestamp.js b/src/skins/vector/views/atoms/MessageTimestamp.js index e9b7bd13..cd0c7a15 100644 --- a/src/skins/vector/views/atoms/MessageTimestamp.js +++ b/src/skins/vector/views/atoms/MessageTimestamp.js @@ -20,6 +20,9 @@ var React = require('react'); var MessageTimestampController = require('matrix-react-sdk/lib/controllers/atoms/MessageTimestamp') +var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; +var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + module.exports = React.createClass({ displayName: 'MessageTimestamp', mixins: [MessageTimestampController], @@ -30,7 +33,20 @@ module.exports = React.createClass({ function pad(n) { return (n < 10 ? '0' : '') + n; } - return pad(date.getHours()) + ':' + pad(date.getMinutes()); + + var now = new Date(); + if (date.toDateString() === now.toDateString()) { + return pad(date.getHours()) + ':' + pad(date.getMinutes()); + } + else if (now.getTime() - date.getTime() < 6 * 24 * 60 * 60 * 1000) { + return days[date.getDay()] + " " + pad(date.getHours()) + ':' + pad(date.getMinutes()); + } + else if (now.getFullYear() === date.getFullYear()) { + return days[date.getDay()] + ", " + months[date.getMonth()] + " " + (date.getDay()+1) + " " + pad(date.getHours()) + ':' + pad(date.getMinutes()); + } + else { + return days[date.getDay()] + ", " + months[date.getMonth()] + " " + (date.getDay()+1) + " " + date().getFullYear() + " " + pad(date.getHours()) + ':' + pad(date.getMinutes()); + } }, render: function() { From f256f794185d8008122f5dd983bd5f5e712f9427 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Mon, 19 Oct 2015 18:27:21 +0100 Subject: [PATCH 39/85] accidental regression that was causing the room list to scroll horizontally --- src/skins/vector/css/molecules/RoomTile.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skins/vector/css/molecules/RoomTile.css b/src/skins/vector/css/molecules/RoomTile.css index 7ff2ff14..511fc94f 100644 --- a/src/skins/vector/css/molecules/RoomTile.css +++ b/src/skins/vector/css/molecules/RoomTile.css @@ -16,7 +16,7 @@ limitations under the License. .mx_RoomTile { cursor: pointer; - /* display: table-row; */ + display: table-row; color: #818794; } From bdbfc2b6e039f2633d7558874a112a144de11d72 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 19 Oct 2015 19:28:35 +0100 Subject: [PATCH 40/85] Add the little edit widgets and make those the things that bring up the message context menus. Still need to add them to all event tiles and make the context menus point the right way. --- .../vector/css/molecules/MessageTile.css | 19 +++++++++++++ .../vector/views/molecules/MessageTile.js | 28 +++++++++++++++---- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/skins/vector/css/molecules/MessageTile.css b/src/skins/vector/css/molecules/MessageTile.css index c50f4abc..07324819 100644 --- a/src/skins/vector/css/molecules/MessageTile.css +++ b/src/skins/vector/css/molecules/MessageTile.css @@ -90,3 +90,22 @@ limitations under the License. .mx_MessageTile:hover .mx_MessageTimestamp { display: block; } + +.mx_MessageTile_editButton { + float: right; + display: none; + border: 0px; + outline: none; +} + +.mx_MessageTile:hover .mx_MessageTile_editButton { + display: inline-block; +} + +.mx_MessageTile.menu .mx_MessageTile_editButton { + display: inline-block; +} + +.mx_MessageTile.menu .mx_MessageTimestamp { + display: inline-block; +} diff --git a/src/skins/vector/views/molecules/MessageTile.js b/src/skins/vector/views/molecules/MessageTile.js index acc74761..76656000 100644 --- a/src/skins/vector/views/molecules/MessageTile.js +++ b/src/skins/vector/views/molecules/MessageTile.js @@ -28,13 +28,21 @@ module.exports = React.createClass({ displayName: 'MessageTile', mixins: [MessageTileController], - onClick: function(e) { + onEditClicked: function(e) { var MessageContextMenu = sdk.getComponent('molecules.MessageContextMenu'); + var buttonRect = e.target.getBoundingClientRect() + var x = window.innerWidth - buttonRect.left; + var y = buttonRect.top + (e.target.height / 2); + var self = this; ContextualMenu.createMenu(MessageContextMenu, { mxEvent: this.props.mxEvent, - right: window.innerWidth - e.pageX, - top: e.pageY + right: x, + top: y, + onFinished: function() { + self.setState({menu: false}); + } }); + this.setState({menu: true}); }, render: function() { @@ -67,8 +75,15 @@ module.exports = React.createClass({ mx_MessageTile_highlight: this.shouldHighlight(), mx_MessageTile_continuation: this.props.continuation, mx_MessageTile_last: this.props.last, + menu: this.state.menu }); var timestamp = + var editButton = ( + + ); var aux = null; if (msgtype === 'm.image') aux = "sent an image"; @@ -94,9 +109,12 @@ module.exports = React.createClass({ return (
    { avatar } - { timestamp } { sender } - +
    + { timestamp } + { editButton } + +
    ); }, From d302f3eebb21c6f61f03eccdbefdb26d6db2e67d Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Tue, 20 Oct 2015 09:55:34 +0100 Subject: [PATCH 41/85] Add in voip mute video/audio skin. Needs a bit more CSS tweaks. --- src/skins/vector/css/molecules/MemberTile.css | 4 +++ src/skins/vector/css/molecules/RoomHeader.css | 4 +++ .../vector/views/molecules/RoomHeader.js | 32 +++++++++++++++++-- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/skins/vector/css/molecules/MemberTile.css b/src/skins/vector/css/molecules/MemberTile.css index a4310d20..faae142a 100644 --- a/src/skins/vector/css/molecules/MemberTile.css +++ b/src/skins/vector/css/molecules/MemberTile.css @@ -128,3 +128,7 @@ limitations under the License. .mx_MemberTile_zalgo { font-family: Helvetica, Arial, Sans-Serif; } + +.mx_MemberTile:hover .mx_MessageTimestamp { + display: block; +} diff --git a/src/skins/vector/css/molecules/RoomHeader.css b/src/skins/vector/css/molecules/RoomHeader.css index 4f09275d..2736efcf 100644 --- a/src/skins/vector/css/molecules/RoomHeader.css +++ b/src/skins/vector/css/molecules/RoomHeader.css @@ -163,3 +163,7 @@ limitations under the License. .mx_RoomHeader_button img { cursor: pointer; } + +.mx_RoomHeader_voipButton { + display: table-cell; +} diff --git a/src/skins/vector/views/molecules/RoomHeader.js b/src/skins/vector/views/molecules/RoomHeader.js index 3518d1dd..262e3311 100644 --- a/src/skins/vector/views/molecules/RoomHeader.js +++ b/src/skins/vector/views/molecules/RoomHeader.js @@ -19,6 +19,7 @@ limitations under the License. var React = require('react'); var sdk = require('matrix-react-sdk') +var CallHandler = require('matrix-react-sdk/lib/CallHandler'); var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); var RoomHeaderController = require('matrix-react-sdk/lib/controllers/molecules/RoomHeader') @@ -54,9 +55,36 @@ module.exports = React.createClass({ var callButtons; if (this.state && this.state.call_state != 'ended') { + var muteVideoButton; + var activeCall = ( + CallHandler.getCallForRoom(this.props.room.roomId) + ); + if (activeCall && activeCall.type === "video") { + muteVideoButton = ( +
    + { + (activeCall.isLocalVideoMuted() ? + "Unmute" : "Mute") + " video" + } +
    + ); + } + callButtons = ( -
    - End call +
    +
    + End call +
    + {muteVideoButton} +
    + { + (activeCall && activeCall.isMicrophoneMuted() ? + "Unmute" : "Mute") + " audio" + } +
    ); } From f882ecc31be5057b51df62e575b052f32e87b59e Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Tue, 20 Oct 2015 10:22:23 +0100 Subject: [PATCH 42/85] 'center' the buttons just like the cog/video/voice buttons are. --- src/skins/vector/css/molecules/RoomHeader.css | 4 ++++ src/skins/vector/views/molecules/RoomHeader.js | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/skins/vector/css/molecules/RoomHeader.css b/src/skins/vector/css/molecules/RoomHeader.css index 2736efcf..f7adb618 100644 --- a/src/skins/vector/css/molecules/RoomHeader.css +++ b/src/skins/vector/css/molecules/RoomHeader.css @@ -167,3 +167,7 @@ limitations under the License. .mx_RoomHeader_voipButton { display: table-cell; } + +.mx_RoomHeader_voipButtons { + margin-top: 18px; +} \ No newline at end of file diff --git a/src/skins/vector/views/molecules/RoomHeader.js b/src/skins/vector/views/molecules/RoomHeader.js index 262e3311..3eae4161 100644 --- a/src/skins/vector/views/molecules/RoomHeader.js +++ b/src/skins/vector/views/molecules/RoomHeader.js @@ -72,7 +72,7 @@ module.exports = React.createClass({ } callButtons = ( -
    +
    End call From 078134d481440825b6caeee7ca86d7fb7d079ea8 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 20 Oct 2015 10:48:08 +0100 Subject: [PATCH 43/85] Add fullscreen button (not wired up to anything) --- src/skins/vector/views/molecules/RoomHeader.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/skins/vector/views/molecules/RoomHeader.js b/src/skins/vector/views/molecules/RoomHeader.js index 3eae4161..b7c0394c 100644 --- a/src/skins/vector/views/molecules/RoomHeader.js +++ b/src/skins/vector/views/molecules/RoomHeader.js @@ -85,6 +85,9 @@ module.exports = React.createClass({ "Unmute" : "Mute") + " audio" }
    +
    + Fullscreen +
    ); } From 34ad48a5d306de29a57301c647c389e23f4030b3 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 20 Oct 2015 11:03:32 +0100 Subject: [PATCH 44/85] Wire up fullscreen button. Requires react-sdk with sync flag to dispatcher. --- src/skins/vector/views/molecules/RoomHeader.js | 5 +++++ .../vector/views/molecules/voip/VideoView.js | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/skins/vector/views/molecules/RoomHeader.js b/src/skins/vector/views/molecules/RoomHeader.js index b7c0394c..527bf2f7 100644 --- a/src/skins/vector/views/molecules/RoomHeader.js +++ b/src/skins/vector/views/molecules/RoomHeader.js @@ -18,6 +18,7 @@ limitations under the License. var React = require('react'); var sdk = require('matrix-react-sdk') +var dis = require('matrix-react-sdk/lib/dispatcher') var CallHandler = require('matrix-react-sdk/lib/CallHandler'); var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); @@ -37,6 +38,10 @@ module.exports = React.createClass({ return this.refs.name_edit.getDOMNode().value; }, + onFullscreenClick: function() { + dis.dispatch({action: 'video_fullscreen'}, true); + }, + render: function() { var EditableText = sdk.getComponent("atoms.EditableText"); var RoomAvatar = sdk.getComponent('atoms.RoomAvatar'); diff --git a/src/skins/vector/views/molecules/voip/VideoView.js b/src/skins/vector/views/molecules/voip/VideoView.js index 80160b78..a27b74e0 100644 --- a/src/skins/vector/views/molecules/voip/VideoView.js +++ b/src/skins/vector/views/molecules/voip/VideoView.js @@ -19,12 +19,17 @@ limitations under the License. var React = require('react'); var sdk = require('matrix-react-sdk') +var dis = require('matrix-react-sdk/lib/dispatcher') var VideoViewController = require('matrix-react-sdk/lib/controllers/molecules/voip/VideoView') module.exports = React.createClass({ displayName: 'VideoView', mixins: [VideoViewController], + componentWillMount: function() { + dis.register(this.onAction); + }, + getRemoteVideoElement: function() { return this.refs.remote.getDOMNode(); }, @@ -33,10 +38,20 @@ module.exports = React.createClass({ return this.refs.local.getDOMNode(); }, + onAction: function(payload) { + switch (payload.action) { + case 'video_fullscreen': + var element = this.refs.container.getDOMNode(); + var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullscreen; + requestMethod.call(element); + break; + } + }, + render: function() { var VideoFeed = sdk.getComponent('atoms.voip.VideoFeed'); return ( -
    +
    From bb5895c157a0c6f981dbe695780b1e81584391a3 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Tue, 20 Oct 2015 11:30:54 +0100 Subject: [PATCH 45/85] move mute state into the existing voice/video buttons for now. move zoom button to that set for now --- .../vector/views/molecules/RoomHeader.js | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/skins/vector/views/molecules/RoomHeader.js b/src/skins/vector/views/molecules/RoomHeader.js index 527bf2f7..8b88c623 100644 --- a/src/skins/vector/views/molecules/RoomHeader.js +++ b/src/skins/vector/views/molecules/RoomHeader.js @@ -58,12 +58,14 @@ module.exports = React.createClass({ else { var topic = this.props.room.currentState.getStateEvents('m.room.topic', ''); - var callButtons; + var call_buttons; + var zoom_button; if (this.state && this.state.call_state != 'ended') { var muteVideoButton; var activeCall = ( CallHandler.getCallForRoom(this.props.room.roomId) ); +/* if (activeCall && activeCall.type === "video") { muteVideoButton = (
    ); } - - callButtons = ( -
    -
    - End call -
    {muteVideoButton}
    @@ -90,9 +85,18 @@ module.exports = React.createClass({ "Unmute" : "Mute") + " audio" }
    -
    - Fullscreen -
    +*/ + + call_buttons = ( +
    + End call +
    + ); + + zoom_button = ( +
    + Fullscreen
    ); } @@ -143,18 +147,19 @@ module.exports = React.createClass({ { topic_el }
    - {callButtons} + {call_buttons} {cancel_button} {save_button}
    { settings_button } + { zoom_button }
    Search
    -
    +
    Video call
    -
    +
    VoIP call
    From 137439243ab687c1fb6e5437f5cd0085e152ffc2 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Tue, 20 Oct 2015 11:49:08 +0100 Subject: [PATCH 46/85] fix layout --- src/skins/vector/views/molecules/RoomHeader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skins/vector/views/molecules/RoomHeader.js b/src/skins/vector/views/molecules/RoomHeader.js index 8b88c623..deecc5fb 100644 --- a/src/skins/vector/views/molecules/RoomHeader.js +++ b/src/skins/vector/views/molecules/RoomHeader.js @@ -96,7 +96,7 @@ module.exports = React.createClass({ zoom_button = (
    - Fullscreen + Fullscreen
    ); } From c74f7c956f9b62d4c1ea5d919ec6ab2bcd8b848d Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Tue, 20 Oct 2015 11:49:15 +0100 Subject: [PATCH 47/85] Fix missing getAvatarUrlForMember --- src/Avatar.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avatar.js b/src/Avatar.js index 8de29f1d..afc5e9dd 100644 --- a/src/Avatar.js +++ b/src/Avatar.js @@ -20,8 +20,8 @@ var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); module.exports = { avatarUrlForMember: function(member, width, height, resizeMethod) { - var url = MatrixClientPeg.get().getAvatarUrlForMember( - member, + var url = member.getAvatarUrl( + MatrixClientPeg.get().getHomeserverUrl(), width, height, resizeMethod From 79eda126564fd09382578eedc7a4c5ed4d8007b5 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Tue, 20 Oct 2015 12:10:31 +0100 Subject: [PATCH 48/85] doh --- src/skins/vector/img/zoom.png | Bin 0 -> 1288 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/skins/vector/img/zoom.png diff --git a/src/skins/vector/img/zoom.png b/src/skins/vector/img/zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..f05ea959b44b239bbe35095ded0502b5989aa239 GIT binary patch literal 1288 zcmV+j1^4=iP)Px(!bwCyR9Fekna_{gL=?y0IEj-crDRL@2V&bEkT~!|?H^Ey8wUhZ;eZ5J{sCGJ zoVan}(((_$1q3&!S_z3tJyfkYAyGs*Y=20!$+p|gcD?B)j(@}%-q*=^ovoemI^B{d zMIMjmz4!6V_|3eDpq%peBj;7KNT&@$ye))S9t`9X2|65_leEe8Yf{Q4*I)Jebm6VV z%H2G!#9oyCTH9Wzn&xLh&?l@nUo#C+Er;65rNJ!aPzbR7(Y|%0!=jAZf!1?5;08N%GUz=E^@$RG9Ek+}d=% zx@&oz9$S6Z0-LZ6AIz|~xBk7+IB?r?FWqbV+kP;3)@+eI*oF`Ig3k$^HTFnAVYTDi z1O5c}Ti^q};4@QCqRa7C&jU`qJbc0DXt>9EYwQLe1m?wl4y%INeTC0(PBKFrDw>=K zC1$DKSUy;&SN0e};s&QFI~13L3&HM&;?_^y=(rX-HJL|>|U!V1CT-}N~Br^)xX zd(oq7Yp(pQ=|=au0@^}HN!*sIQ&%v61xx@8yQE^8XRtzK3BuPOd1Seg-g(80UQky+ zTj)SnCtv^zmQ=J20lDsDEMGe1>uVluv7-$hBFp6kH=}HE+o29avJIVpWwhRtfn5nJ z%c3-{bika&?_xb11yd7pJ*1GXl~h-E%xTY2n!{;=!YY7V4b zZ)|vDk1QvU->ukkldox#*5=P$wvzP01UBLbezEQLliFzO(g2`1>6z9rH)uP32{r?p z%_0wY9;ug&#No!AQ^PvPZSn~AmtZq^m07|~UQv(_dpjS^11@9E<%I(am_jye)2CfH z0EwTH*XvRIS5Bbf#gOkl%Td=;sot_N>gJ41-J zX>iKUB*@*ilurB#Ca@Vusz-Ti{P|Pmi}zi+ygFP*b#O{K3G(u)OPAP|PQV1VA~OCv zmfPaI_4uUq82h;@Z|Pth3;*t6O>-EBJi>Ext}N(iY;TyPha8%v1-3AFajNCe4{5+_=W)T)a(E8ITI@)S`Zy1{Rz`z*Y$8c;0zr{79;G0?0Z;s^QkP$8)qr z&t-uF16XiG0^Km=>cdu=;M4&}BkKGnT7+jcX^Iw5WKlRPdC&>EdE;VQuVkr*PxuCd%IFgHW;$^n z5zo}oM>NE-?v$<0`bV}uxYF1TI{P`?uniyZ1)t2I4Zpz|;bQ ycBYSj Date: Tue, 20 Oct 2015 12:13:05 +0100 Subject: [PATCH 49/85] Try binding actin handler --- src/skins/vector/views/molecules/voip/VideoView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skins/vector/views/molecules/voip/VideoView.js b/src/skins/vector/views/molecules/voip/VideoView.js index a27b74e0..ab80219f 100644 --- a/src/skins/vector/views/molecules/voip/VideoView.js +++ b/src/skins/vector/views/molecules/voip/VideoView.js @@ -27,7 +27,7 @@ module.exports = React.createClass({ mixins: [VideoViewController], componentWillMount: function() { - dis.register(this.onAction); + dis.register(this.onAction.bind(this)); }, getRemoteVideoElement: function() { From fe0707535c17c000f3b224b99045888155d27deb Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 20 Oct 2015 17:46:11 +0100 Subject: [PATCH 50/85] binding makes no difference - put a null check in to catch the rogue exception --- src/skins/vector/views/molecules/voip/VideoView.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/skins/vector/views/molecules/voip/VideoView.js b/src/skins/vector/views/molecules/voip/VideoView.js index ab80219f..d590d1be 100644 --- a/src/skins/vector/views/molecules/voip/VideoView.js +++ b/src/skins/vector/views/molecules/voip/VideoView.js @@ -27,7 +27,7 @@ module.exports = React.createClass({ mixins: [VideoViewController], componentWillMount: function() { - dis.register(this.onAction.bind(this)); + dis.register(this.onAction); }, getRemoteVideoElement: function() { @@ -41,6 +41,9 @@ module.exports = React.createClass({ onAction: function(payload) { switch (payload.action) { case 'video_fullscreen': + if (!this.refs.container) { + return; + } var element = this.refs.container.getDOMNode(); var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullscreen; requestMethod.call(element); From 006f0b00c602e592378c1452cb7243a6759759e4 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 20 Oct 2015 18:23:27 +0100 Subject: [PATCH 51/85] Try refing the container using a functiob as it currently seems to be endinh up with no refs some of the time --- src/skins/vector/views/molecules/voip/VideoView.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/skins/vector/views/molecules/voip/VideoView.js b/src/skins/vector/views/molecules/voip/VideoView.js index d590d1be..196e1d6c 100644 --- a/src/skins/vector/views/molecules/voip/VideoView.js +++ b/src/skins/vector/views/molecules/voip/VideoView.js @@ -38,13 +38,17 @@ module.exports = React.createClass({ return this.refs.local.getDOMNode(); }, + setContainer: function(c) { + this.container = c; + }, + onAction: function(payload) { switch (payload.action) { case 'video_fullscreen': - if (!this.refs.container) { + if (!this.container) { return; } - var element = this.refs.container.getDOMNode(); + var element = this.container.getDOMNode(); var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullscreen; requestMethod.call(element); break; @@ -54,7 +58,7 @@ module.exports = React.createClass({ render: function() { var VideoFeed = sdk.getComponent('atoms.voip.VideoFeed'); return ( -
    +
    From 5d1ad4d259d3af6f3d62fb3ba92116fd06d39f28 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 21 Oct 2015 01:22:29 +0100 Subject: [PATCH 52/85] only show the zoom button on video calls --- src/skins/vector/views/molecules/RoomHeader.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/skins/vector/views/molecules/RoomHeader.js b/src/skins/vector/views/molecules/RoomHeader.js index deecc5fb..de6aea15 100644 --- a/src/skins/vector/views/molecules/RoomHeader.js +++ b/src/skins/vector/views/molecules/RoomHeader.js @@ -93,12 +93,6 @@ module.exports = React.createClass({ End call
    ); - - zoom_button = ( -
    - Fullscreen -
    - ); } var name = null; @@ -136,6 +130,14 @@ module.exports = React.createClass({ ); } + if (activeCall && activeCall.type == "video") { + zoom_button = ( +
    + Fullscreen +
    + ); + } + header =
    From c8f6d46c8b39df76d4b3197f6a36132efe005244 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 21 Oct 2015 01:22:46 +0100 Subject: [PATCH 53/85] add remoteAudioElement --- src/controllers/molecules/voip/CallView.js | 4 +++- src/skins/vector/views/molecules/voip/VideoView.js | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/controllers/molecules/voip/CallView.js b/src/controllers/molecules/voip/CallView.js index d511b9d4..b1665567 100644 --- a/src/controllers/molecules/voip/CallView.js +++ b/src/controllers/molecules/voip/CallView.js @@ -74,8 +74,10 @@ module.exports = { ); if (call) { call.setLocalVideoElement(this.getVideoView().getLocalVideoElement()); - // N.B. the remote video element is used for playback for audio for voice calls call.setRemoteVideoElement(this.getVideoView().getRemoteVideoElement()); + // give a separate element for audio stream playback - both for voice calls + // and for the voice stream of screen captures + call.setRemoteAudioElement(this.getVideoView().getRemoteAudioElement()); } if (call && call.type === "video" && call.state !== 'ended') { // if this call is a conf call, don't display local video as the diff --git a/src/skins/vector/views/molecules/voip/VideoView.js b/src/skins/vector/views/molecules/voip/VideoView.js index 196e1d6c..2bac8869 100644 --- a/src/skins/vector/views/molecules/voip/VideoView.js +++ b/src/skins/vector/views/molecules/voip/VideoView.js @@ -34,6 +34,10 @@ module.exports = React.createClass({ return this.refs.remote.getDOMNode(); }, + getRemoteAudioElement: function() { + return this.refs.remoteAudio.getDOMNode(); + }, + getLocalVideoElement: function() { return this.refs.local.getDOMNode(); }, @@ -61,6 +65,7 @@ module.exports = React.createClass({
    +
    From 7142ea8f1e33e32b0c87ed2175034d3dbf0a404d Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 21 Oct 2015 11:15:27 +0100 Subject: [PATCH 54/85] Redundant onclick --- src/skins/vector/views/molecules/MessageTile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skins/vector/views/molecules/MessageTile.js b/src/skins/vector/views/molecules/MessageTile.js index 76656000..425cc44b 100644 --- a/src/skins/vector/views/molecules/MessageTile.js +++ b/src/skins/vector/views/molecules/MessageTile.js @@ -107,7 +107,7 @@ module.exports = React.createClass({ ; } return ( -
    +
    { avatar } { sender }
    From 5e7bd1e51fbf7f2186a0e4c4fccd407c745af767 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 21 Oct 2015 15:17:03 +0100 Subject: [PATCH 55/85] Remove empty files --- src/controllers/atoms/ImageView.js | 20 -------------------- src/skins/vector/views/atoms/ImageView.js | 3 --- 2 files changed, 23 deletions(-) delete mode 100644 src/controllers/atoms/ImageView.js diff --git a/src/controllers/atoms/ImageView.js b/src/controllers/atoms/ImageView.js deleted file mode 100644 index d0977e00..00000000 --- a/src/controllers/atoms/ImageView.js +++ /dev/null @@ -1,20 +0,0 @@ -/* -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'; - -module.exports = { -}; diff --git a/src/skins/vector/views/atoms/ImageView.js b/src/skins/vector/views/atoms/ImageView.js index a0d69bcc..676348c0 100644 --- a/src/skins/vector/views/atoms/ImageView.js +++ b/src/skins/vector/views/atoms/ImageView.js @@ -18,11 +18,8 @@ limitations under the License. var React = require('react'); -var ImageViewController = require('../../../../controllers/atoms/ImageView') - module.exports = React.createClass({ displayName: 'ImageView', - mixins: [ImageViewController], // XXX: keyboard shortcuts for managing dialogs should be done by the modal dialog base class omehow, surely... componentDidMount: function() { From a9b093b7f57fbc9cd3d859bf1324562a9a445d4c Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 21 Oct 2015 15:30:04 +0100 Subject: [PATCH 56/85] Remove empty controllers --- src/skins/vector/views/atoms/MessageTimestamp.js | 3 --- src/skins/vector/views/atoms/voip/VideoFeed.js | 3 --- src/skins/vector/views/molecules/EventAsTextTile.js | 2 -- src/skins/vector/views/molecules/MImageTile.js | 3 --- src/skins/vector/views/molecules/MRoomMemberTile.js | 3 --- src/skins/vector/views/molecules/MatrixToolbar.js | 3 --- src/skins/vector/views/molecules/SenderProfile.js | 3 --- src/skins/vector/views/molecules/UnknownMessageTile.js | 3 --- src/skins/vector/views/molecules/voip/VideoView.js | 2 -- 9 files changed, 25 deletions(-) diff --git a/src/skins/vector/views/atoms/MessageTimestamp.js b/src/skins/vector/views/atoms/MessageTimestamp.js index cd0c7a15..32476314 100644 --- a/src/skins/vector/views/atoms/MessageTimestamp.js +++ b/src/skins/vector/views/atoms/MessageTimestamp.js @@ -18,14 +18,11 @@ limitations under the License. var React = require('react'); -var MessageTimestampController = require('matrix-react-sdk/lib/controllers/atoms/MessageTimestamp') - var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; module.exports = React.createClass({ displayName: 'MessageTimestamp', - mixins: [MessageTimestampController], formatDate: function(date) { // date.toLocaleTimeString is completely system dependent. diff --git a/src/skins/vector/views/atoms/voip/VideoFeed.js b/src/skins/vector/views/atoms/voip/VideoFeed.js index 748a431a..9cf28d1b 100644 --- a/src/skins/vector/views/atoms/voip/VideoFeed.js +++ b/src/skins/vector/views/atoms/voip/VideoFeed.js @@ -18,11 +18,8 @@ limitations under the License. var React = require('react'); -var VideoFeedController = require('matrix-react-sdk/lib/controllers/atoms/voip/VideoFeed') - module.exports = React.createClass({ displayName: 'VideoFeed', - mixins: [VideoFeedController], render: function() { return ( diff --git a/src/skins/vector/views/molecules/EventAsTextTile.js b/src/skins/vector/views/molecules/EventAsTextTile.js index e8beddf2..bf757f2f 100644 --- a/src/skins/vector/views/molecules/EventAsTextTile.js +++ b/src/skins/vector/views/molecules/EventAsTextTile.js @@ -18,13 +18,11 @@ limitations under the License. var React = require('react'); -var EventAsTextTileController = require('matrix-react-sdk/lib/controllers/molecules/EventAsTextTile') var sdk = require('matrix-react-sdk') var TextForEvent = require('matrix-react-sdk/lib/TextForEvent'); module.exports = React.createClass({ displayName: 'EventAsTextTile', - mixins: [EventAsTextTileController], render: function() { var MessageTimestamp = sdk.getComponent('atoms.MessageTimestamp'); diff --git a/src/skins/vector/views/molecules/MImageTile.js b/src/skins/vector/views/molecules/MImageTile.js index 59d9cfde..ed61a390 100644 --- a/src/skins/vector/views/molecules/MImageTile.js +++ b/src/skins/vector/views/molecules/MImageTile.js @@ -19,15 +19,12 @@ limitations under the License. var React = require('react'); var filesize = require('filesize'); -var MImageTileController = require('matrix-react-sdk/lib/controllers/molecules/MImageTile') - var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); var Modal = require('matrix-react-sdk/lib/Modal'); var sdk = require('matrix-react-sdk') module.exports = React.createClass({ displayName: 'MImageTile', - mixins: [MImageTileController], thumbHeight: function(fullWidth, fullHeight, thumbWidth, thumbHeight) { if (!fullWidth || !fullHeight) { diff --git a/src/skins/vector/views/molecules/MRoomMemberTile.js b/src/skins/vector/views/molecules/MRoomMemberTile.js index 4e163e1d..0048306d 100644 --- a/src/skins/vector/views/molecules/MRoomMemberTile.js +++ b/src/skins/vector/views/molecules/MRoomMemberTile.js @@ -18,14 +18,11 @@ limitations under the License. var React = require('react'); -var MRoomMemberTileController = require('matrix-react-sdk/lib/controllers/molecules/MRoomMemberTile') - var sdk = require('matrix-react-sdk') var TextForEvent = require('matrix-react-sdk/lib/TextForEvent'); module.exports = React.createClass({ displayName: 'MRoomMemberTile', - mixins: [MRoomMemberTileController], getMemberEventText: function() { return TextForEvent.textForEvent(this.props.mxEvent); diff --git a/src/skins/vector/views/molecules/MatrixToolbar.js b/src/skins/vector/views/molecules/MatrixToolbar.js index 0b6c58e0..4a299f14 100644 --- a/src/skins/vector/views/molecules/MatrixToolbar.js +++ b/src/skins/vector/views/molecules/MatrixToolbar.js @@ -20,11 +20,8 @@ var React = require('react'); var sdk = require('matrix-react-sdk') -var MatrixToolbarController = require('matrix-react-sdk/lib/controllers/molecules/MatrixToolbar') - module.exports = React.createClass({ displayName: 'MatrixToolbar', - mixins: [MatrixToolbarController], hideToolbar: function() { var Notifier = sdk.getComponent('organisms.Notifier'); diff --git a/src/skins/vector/views/molecules/SenderProfile.js b/src/skins/vector/views/molecules/SenderProfile.js index 8be3adf2..c09685aa 100644 --- a/src/skins/vector/views/molecules/SenderProfile.js +++ b/src/skins/vector/views/molecules/SenderProfile.js @@ -19,15 +19,12 @@ limitations under the License. var React = require('react'); var classNames = require("classnames"); -var SenderProfileController = require('matrix-react-sdk/lib/controllers/molecules/SenderProfile') - // 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. var zalgo = /[\u0300-\u036f\u1ab0-\u1aff\u1dc0-\u1dff\u20d0-\u20ff\ufe20-\ufe2f]/; module.exports = React.createClass({ displayName: 'SenderProfile', - mixins: [SenderProfileController], render: function() { var mxEvent = this.props.mxEvent; diff --git a/src/skins/vector/views/molecules/UnknownMessageTile.js b/src/skins/vector/views/molecules/UnknownMessageTile.js index d5a20c87..e8cd322a 100644 --- a/src/skins/vector/views/molecules/UnknownMessageTile.js +++ b/src/skins/vector/views/molecules/UnknownMessageTile.js @@ -18,11 +18,8 @@ limitations under the License. var React = require('react'); -var UnknownMessageTileController = require('matrix-react-sdk/lib/controllers/molecules/UnknownMessageTile') - module.exports = React.createClass({ displayName: 'UnknownMessageTile', - mixins: [UnknownMessageTileController], render: function() { var content = this.props.mxEvent.getContent(); diff --git a/src/skins/vector/views/molecules/voip/VideoView.js b/src/skins/vector/views/molecules/voip/VideoView.js index 2bac8869..9dff7cdf 100644 --- a/src/skins/vector/views/molecules/voip/VideoView.js +++ b/src/skins/vector/views/molecules/voip/VideoView.js @@ -20,11 +20,9 @@ var React = require('react'); var sdk = require('matrix-react-sdk') var dis = require('matrix-react-sdk/lib/dispatcher') -var VideoViewController = require('matrix-react-sdk/lib/controllers/molecules/voip/VideoView') module.exports = React.createClass({ displayName: 'VideoView', - mixins: [VideoViewController], componentWillMount: function() { dis.register(this.onAction); From bf400118155356a73f9f33bce2408040a59eabb3 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 21 Oct 2015 15:30:18 +0100 Subject: [PATCH 57/85] prettier file upload --- src/skins/vector/views/organisms/RoomView.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/skins/vector/views/organisms/RoomView.js b/src/skins/vector/views/organisms/RoomView.js index d1556b65..f62eb3c3 100644 --- a/src/skins/vector/views/organisms/RoomView.js +++ b/src/skins/vector/views/organisms/RoomView.js @@ -149,6 +149,11 @@ module.exports = React.createClass({ var innerProgressStyle = { width: ((this.state.upload.uploadedBytes / this.state.upload.totalBytes) * 100) + '%' }; + var uploadedSize = filesize(this.state.upload.uploadedBytes); + var totalSize = filesize(this.state.upload.totalBytes); + if (uploadedSize.replace(/^.* /,'') === totalSize.replace(/^.* /,'')) { + uploadedSize = uploadedSize.replace(/ .*/, ''); + } statusBar = (
    @@ -157,7 +162,7 @@ module.exports = React.createClass({
    - {filesize(this.state.upload.uploadedBytes).replace(/ .*/, '')} / {filesize(this.state.upload.totalBytes)} + { uploadedSize } / { totalSize }
    Uploading {this.state.upload.fileName}
    From af67df4c4a243bd42f1a419884ffcf9f9a467b9c Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 21 Oct 2015 15:52:35 +0100 Subject: [PATCH 58/85] Hook up delete button on contextual menu (#56) --- .../views/molecules/MessageContextMenu.js | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/skins/vector/views/molecules/MessageContextMenu.js b/src/skins/vector/views/molecules/MessageContextMenu.js index 66f1d6d4..249d9a34 100644 --- a/src/skins/vector/views/molecules/MessageContextMenu.js +++ b/src/skins/vector/views/molecules/MessageContextMenu.js @@ -52,9 +52,27 @@ module.exports = React.createClass({ if (this.props.onFinished) this.props.onFinished(); }, + onRedactClick: function() { + MatrixClientPeg.get().redactEvent( + this.props.mxEvent.getRoomId(), this.props.mxEvent.getId() + ).done(function() { + // message should disappear by itself + }, function(e) { + var ErrorDialog = sdk.getComponent("organisms.ErrorDialog"); + // display error message stating you couldn't delete this. + var code = e.errcode || e.statusCode; + Modal.createDialog(ErrorDialog, { + title: "Error", + description: "You cannot delete this message. (" + code + ")" + }); + }); + if (this.props.onFinished) this.props.onFinished(); + }, + render: function() { var resendButton; var viewSourceButton; + var redactButton; if (this.props.mxEvent.status == 'not_sent') { resendButton = ( @@ -63,6 +81,13 @@ module.exports = React.createClass({
    ); } + else { + redactButton = ( +
    + Delete +
    + ); + } viewSourceButton = (
    View Source @@ -72,6 +97,7 @@ module.exports = React.createClass({ return (
    {resendButton} + {redactButton} {viewSourceButton}
    ); From 3d3680e42fbf7472af3f7a20fbd29db29a399882 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 21 Oct 2015 16:11:40 +0100 Subject: [PATCH 59/85] NPE fix when accessing event.sender --- src/skins/vector/views/organisms/Notifier.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/skins/vector/views/organisms/Notifier.js b/src/skins/vector/views/organisms/Notifier.js index bbd2563d..8a9b2ffd 100644 --- a/src/skins/vector/views/organisms/Notifier.js +++ b/src/skins/vector/views/organisms/Notifier.js @@ -58,9 +58,9 @@ var NotifierView = { if (ev.getContent().body) msg = ev.getContent().body; } - var avatarUrl = Avatar.avatarUrlForMember( + var avatarUrl = ev.sender ? Avatar.avatarUrlForMember( ev.sender, 40, 40, 'crop' - ); + ) : null; var notification = new global.Notification( title, From 3779ff7691627c8ed68ed60759ea7376725e28b4 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 21 Oct 2015 17:45:53 +0100 Subject: [PATCH 60/85] Handle Length case. Add default case and whine loudly. --- src/skins/vector/views/templates/Register.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/skins/vector/views/templates/Register.js b/src/skins/vector/views/templates/Register.js index 638dac15..6db0786e 100644 --- a/src/skins/vector/views/templates/Register.js +++ b/src/skins/vector/views/templates/Register.js @@ -173,6 +173,12 @@ module.exports = React.createClass({ case this.FieldErrors.InUse: strings.push(keys[i]+" is already taken"); break; + case this.FieldErrors.Length: + strings.push(keys[i] + " is not long enough."); + break; + default: + console.error("Unhandled FieldError: %s", bad[keys[i]]); + break; } } var errtxt = strings.join(', '); From 1f3a6e408c0f262e2b5182fa8e883d1a45ab6544 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 21 Oct 2015 17:52:34 +0100 Subject: [PATCH 61/85] Factor out stuff commnon to all timeline events into EventTile: makes timestamp & edit button etc appear on everything, not just messages. --- src/controllers/organisms/RoomView.js | 22 ++- .../{MessageTile.css => EventTile.css} | 37 ++--- src/skins/vector/skindex.js | 1 + .../vector/views/molecules/EventAsTextTile.js | 11 +- src/skins/vector/views/molecules/EventTile.js | 131 ++++++++++++++++++ .../vector/views/molecules/MessageTile.js | 72 +--------- 6 files changed, 163 insertions(+), 111 deletions(-) rename src/skins/vector/css/molecules/{MessageTile.css => EventTile.css} (70%) create mode 100644 src/skins/vector/views/molecules/EventTile.js diff --git a/src/controllers/organisms/RoomView.js b/src/controllers/organisms/RoomView.js index 29933d4a..77359c8f 100644 --- a/src/controllers/organisms/RoomView.js +++ b/src/controllers/organisms/RoomView.js @@ -356,23 +356,20 @@ module.exports = { }, getEventTiles: function() { - var tileTypes = { - 'm.room.message': sdk.getComponent('molecules.MessageTile'), - 'm.room.member' : sdk.getComponent('molecules.EventAsTextTile'), - 'm.call.invite' : sdk.getComponent('molecules.EventAsTextTile'), - 'm.call.answer' : sdk.getComponent('molecules.EventAsTextTile'), - 'm.call.hangup' : sdk.getComponent('molecules.EventAsTextTile'), - 'm.room.topic' : sdk.getComponent('molecules.EventAsTextTile'), - }; - var DateSeparator = sdk.getComponent('molecules.DateSeparator'); var ret = []; var count = 0; + var EventTile = sdk.getComponent('molecules.EventTile'); + for (var i = this.state.room.timeline.length-1; i >= 0 && count < this.state.messageCap; --i) { var mxEv = this.state.room.timeline[i]; - var TileType = tileTypes[mxEv.getType()]; + + if (!EventTile.supportsEventType(mxEv.getType())) { + continue; + } + var continuation = false; var last = false; var dateSeparator = null; @@ -401,13 +398,12 @@ module.exports = { if (i === 1) { // n.b. 1, not 0, as the 0th event is an m.room.create and so doesn't show on the timeline var ts1 = this.state.room.timeline[i].getTs(); - dateSeparator = ; + dateSeparator =
  • ; continuation = false; } - if (!TileType) continue; ret.unshift( -
  • +
  • ); if (dateSeparator) { ret.unshift(dateSeparator); diff --git a/src/skins/vector/css/molecules/MessageTile.css b/src/skins/vector/css/molecules/EventTile.css similarity index 70% rename from src/skins/vector/css/molecules/MessageTile.css rename to src/skins/vector/css/molecules/EventTile.css index 07324819..1cd2fa46 100644 --- a/src/skins/vector/css/molecules/MessageTile.css +++ b/src/skins/vector/css/molecules/EventTile.css @@ -14,14 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. */ -.mx_MessageTile { +.mx_EventTile { max-width: 100%; clear: both; margin-top: 32px; margin-left: 56px; } -.mx_MessageTile_avatar { +.mx_EventTile_avatar { padding-left: 12px; padding-right: 12px; margin-left: -64px; @@ -29,17 +29,17 @@ limitations under the License. float: left; } -.mx_MessageTile_avatar img { +.mx_EventTile_avatar img { background-color: #dbdbdb; border-radius: 20px; border: 0px; } -.mx_MessageTile_continuation { +.mx_EventTile_continuation { margin-top: 8px ! important; } -.mx_MessageTile .mx_SenderProfile { +.mx_EventTile .mx_SenderProfile { color: #454545; opacity: 0.5; font-size: 14px; @@ -47,35 +47,35 @@ limitations under the License. display: block; } -.mx_MessageTile .mx_MessageTimestamp { +.mx_EventTile .mx_MessageTimestamp { color: #454545; opacity: 0.5; font-size: 14px; float: right; } -.mx_MessageTile_content { +.mx_EventTile_content { padding-right: 100px; display: block; } -.mx_MessageTile_notice .mx_MessageTile_content { +.mx_EventTile_notice .mx_MessageTile_content { opacity: 0.5; } -.mx_MessageTile_sending { +.mx_EventTile_sending { color: #ddd; } -.mx_MessageTile_notSent { +.mx_EventTile_notSent { color: #f11; } -.mx_MessageTile_highlight { +.mx_EventTile_highlight { color: #FF0064; } -.mx_MessageTile_msgOption { +.mx_EventTile_msgOption { float: right; } @@ -83,29 +83,30 @@ limitations under the License. display: none; } -.mx_MessageTile_last .mx_MessageTimestamp { +.mx_EventTile_last .mx_MessageTimestamp { display: block; } -.mx_MessageTile:hover .mx_MessageTimestamp { +.mx_EventTile:hover .mx_MessageTimestamp { display: block; } -.mx_MessageTile_editButton { +.mx_EventTile_editButton { float: right; display: none; border: 0px; outline: none; + margin-right: 3px; } -.mx_MessageTile:hover .mx_MessageTile_editButton { +.mx_EventTile:hover .mx_EventTile_editButton { display: inline-block; } -.mx_MessageTile.menu .mx_MessageTile_editButton { +.mx_EventTile.menu .mx_EventTile_editButton { display: inline-block; } -.mx_MessageTile.menu .mx_MessageTimestamp { +.mx_EventTile.menu .mx_MessageTimestamp { display: inline-block; } diff --git a/src/skins/vector/skindex.js b/src/skins/vector/skindex.js index 7cd83618..8dba10cf 100644 --- a/src/skins/vector/skindex.js +++ b/src/skins/vector/skindex.js @@ -41,6 +41,7 @@ skin['molecules.ChangeDisplayName'] = require('./views/molecules/ChangeDisplayNa skin['molecules.ChangePassword'] = require('./views/molecules/ChangePassword'); skin['molecules.DateSeparator'] = require('./views/molecules/DateSeparator'); skin['molecules.EventAsTextTile'] = require('./views/molecules/EventAsTextTile'); +skin['molecules.EventTile'] = require('./views/molecules/EventTile'); skin['molecules.MatrixToolbar'] = require('./views/molecules/MatrixToolbar'); skin['molecules.MemberInfo'] = require('./views/molecules/MemberInfo'); skin['molecules.MemberTile'] = require('./views/molecules/MemberTile'); diff --git a/src/skins/vector/views/molecules/EventAsTextTile.js b/src/skins/vector/views/molecules/EventAsTextTile.js index e8beddf2..445303e4 100644 --- a/src/skins/vector/views/molecules/EventAsTextTile.js +++ b/src/skins/vector/views/molecules/EventAsTextTile.js @@ -36,15 +36,8 @@ module.exports = React.createClass({ var timestamp = this.props.last ? : null; var avatar = this.props.mxEvent.sender ? : null; return ( -
    -
    - { avatar } -
    - { timestamp } - - - {TextForEvent.textForEvent(this.props.mxEvent)} - +
    + {TextForEvent.textForEvent(this.props.mxEvent)}
    ); }, diff --git a/src/skins/vector/views/molecules/EventTile.js b/src/skins/vector/views/molecules/EventTile.js new file mode 100644 index 00000000..b686ef15 --- /dev/null +++ b/src/skins/vector/views/molecules/EventTile.js @@ -0,0 +1,131 @@ +/* +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 classNames = require("classnames"); + +var sdk = require('matrix-react-sdk') + +var EventTileController = require('matrix-react-sdk/lib/controllers/molecules/EventTile') +var ContextualMenu = require('../../../../ContextualMenu'); + +var eventTileTypes = { + 'm.room.message': 'molecules.MessageTile', + 'm.room.member' : 'molecules.EventAsTextTile', + 'm.call.invite' : 'molecules.EventAsTextTile', + 'm.call.answer' : 'molecules.EventAsTextTile', + 'm.call.hangup' : 'molecules.EventAsTextTile', + 'm.room.topic' : 'molecules.EventAsTextTile', +}; + +module.exports = React.createClass({ + displayName: 'EventTile', + mixins: [EventTileController], + + statics: { + supportsEventType: function(et) { + return eventTileTypes[et] !== undefined; + } + }, + + getInitialState: function() { + return {menu: false}; + }, + + onEditClicked: function(e) { + var MessageContextMenu = sdk.getComponent('molecules.MessageContextMenu'); + var buttonRect = e.target.getBoundingClientRect() + var x = window.innerWidth - buttonRect.left; + var y = buttonRect.top + (e.target.height / 2); + var self = this; + ContextualMenu.createMenu(MessageContextMenu, { + mxEvent: this.props.mxEvent, + right: x, + top: y, + onFinished: function() { + self.setState({menu: false}); + } + }); + this.setState({menu: true}); + }, + + render: function() { + var MessageTimestamp = sdk.getComponent('atoms.MessageTimestamp'); + var SenderProfile = sdk.getComponent('molecules.SenderProfile'); + var MemberAvatar = sdk.getComponent('atoms.MemberAvatar'); + + var UnknownMessageTile = sdk.getComponent('molecules.UnknownMessageTile'); + + var content = this.props.mxEvent.getContent(); + var msgtype = content.msgtype; + + var EventTileType = sdk.getComponent(eventTileTypes[this.props.mxEvent.getType()]); + // This shouldn't happen: the caller should check we support this type + // before trying to instantiate us + if (!EventTileType) { + return null; + } + + var classes = classNames({ + mx_EventTile: true, + mx_EventTile_sending: ['sending', 'queued'].indexOf( + this.props.mxEvent.status + ) !== -1, + mx_EventTile_notSent: this.props.mxEvent.status == 'not_sent', + mx_EventTile_highlight: this.shouldHighlight(), + mx_EventTile_continuation: this.props.continuation, + mx_EventTile_last: this.props.last, + menu: this.state.menu + }); + var timestamp = + var editButton = ( + + ); + + var aux = null; + if (msgtype === 'm.image') aux = "sent an image"; + else if (msgtype === 'm.video') aux = "sent a video"; + else if (msgtype === 'm.file') aux = "uploaded a file"; + + var avatar, sender; + if (!this.props.continuation) { + if (this.props.mxEvent.sender) { + avatar = ( +
    + +
    + ); + } + sender = ; + } + return ( +
    + { avatar } + { sender } +
    + { timestamp } + { editButton } + +
    +
    + ); + }, +}); diff --git a/src/skins/vector/views/molecules/MessageTile.js b/src/skins/vector/views/molecules/MessageTile.js index 425cc44b..5e835050 100644 --- a/src/skins/vector/views/molecules/MessageTile.js +++ b/src/skins/vector/views/molecules/MessageTile.js @@ -28,28 +28,7 @@ module.exports = React.createClass({ displayName: 'MessageTile', mixins: [MessageTileController], - onEditClicked: function(e) { - var MessageContextMenu = sdk.getComponent('molecules.MessageContextMenu'); - var buttonRect = e.target.getBoundingClientRect() - var x = window.innerWidth - buttonRect.left; - var y = buttonRect.top + (e.target.height / 2); - var self = this; - ContextualMenu.createMenu(MessageContextMenu, { - mxEvent: this.props.mxEvent, - right: x, - top: y, - onFinished: function() { - self.setState({menu: false}); - } - }); - this.setState({menu: true}); - }, - render: function() { - var MessageTimestamp = sdk.getComponent('atoms.MessageTimestamp'); - var SenderProfile = sdk.getComponent('molecules.SenderProfile'); - var MemberAvatar = sdk.getComponent('atoms.MemberAvatar'); - var UnknownMessageTile = sdk.getComponent('molecules.UnknownMessageTile'); var tileTypes = { @@ -66,56 +45,7 @@ module.exports = React.createClass({ if (msgtype && tileTypes[msgtype]) { TileType = tileTypes[msgtype]; } - var classes = classNames({ - mx_MessageTile: true, - mx_MessageTile_sending: ['sending', 'queued'].indexOf( - this.props.mxEvent.status - ) !== -1, - mx_MessageTile_notSent: this.props.mxEvent.status == 'not_sent', - mx_MessageTile_highlight: this.shouldHighlight(), - mx_MessageTile_continuation: this.props.continuation, - mx_MessageTile_last: this.props.last, - menu: this.state.menu - }); - var timestamp = - var editButton = ( - - ); - var aux = null; - if (msgtype === 'm.image') aux = "sent an image"; - else if (msgtype === 'm.video') aux = "sent a video"; - else if (msgtype === 'm.file') aux = "uploaded a file"; - - var avatar, sender, resend; - if (!this.props.continuation) { - if (this.props.mxEvent.sender) { - avatar = ( -
    - -
    - ); - } - sender = ; - } - if (this.props.mxEvent.status === "not_sent" && !this.state.resending) { - resend = ; - } - return ( -
    - { avatar } - { sender } -
    - { timestamp } - { editButton } - -
    -
    - ); + return ; }, }); From 4b645bcd666de5f46dacdad3826d33c098833be4 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 21 Oct 2015 19:02:02 +0100 Subject: [PATCH 62/85] Make context menus point the right way --- src/ContextualMenu.js | 16 +++++++++++++--- src/skins/vector/css/common.css | 9 ++++++++- src/skins/vector/views/molecules/EventTile.js | 4 ++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/ContextualMenu.js b/src/ContextualMenu.js index cdfff952..7865e45a 100644 --- a/src/ContextualMenu.js +++ b/src/ContextualMenu.js @@ -49,15 +49,25 @@ module.exports = { var position = { top: props.top - 20, - right: props.right + 8, }; + var chevron = null; + if (props.left) { + chevron = + position.left = props.left + 8; + } else { + chevron = + position.right = props.right + 8; + } + + var className = 'mx_ContextualMenu_wrapper'; + // FIXME: If a menu uses getDefaultProps it clobbers the onFinished // property set here so you can't close the menu from a button click! var menu = ( -
    +
    - + {chevron}
    diff --git a/src/skins/vector/css/common.css b/src/skins/vector/css/common.css index 879561f9..aff9666e 100644 --- a/src/skins/vector/css/common.css +++ b/src/skins/vector/css/common.css @@ -67,13 +67,20 @@ a:visited { padding: 6px; } -.mx_ContextualMenu_chevron { +.mx_ContextualMenu_chevron_right { padding: 12px; position: absolute; right: -21px; top: 0px; } +.mx_ContextualMenu_chevron_left { + padding: 12px; + position: absolute; + left: -21px; + top: 0px; +} + .mx_ContextualMenu_field { padding: 3px 6px 3px 6px; cursor: pointer; diff --git a/src/skins/vector/views/molecules/EventTile.js b/src/skins/vector/views/molecules/EventTile.js index b686ef15..534af3c7 100644 --- a/src/skins/vector/views/molecules/EventTile.js +++ b/src/skins/vector/views/molecules/EventTile.js @@ -50,12 +50,12 @@ module.exports = React.createClass({ onEditClicked: function(e) { var MessageContextMenu = sdk.getComponent('molecules.MessageContextMenu'); var buttonRect = e.target.getBoundingClientRect() - var x = window.innerWidth - buttonRect.left; + var x = buttonRect.right; var y = buttonRect.top + (e.target.height / 2); var self = this; ContextualMenu.createMenu(MessageContextMenu, { mxEvent: this.props.mxEvent, - right: x, + left: x, top: y, onFinished: function() { self.setState({menu: false}); From 08270b26ee6df015cde22b3b271f032c7870774a Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 22 Oct 2015 13:10:02 +0100 Subject: [PATCH 63/85] Do room avatars properly. --- src/skins/vector/img/50e2c2.png | Bin 0 -> 146 bytes src/skins/vector/img/80cef4.png | Bin 0 -> 146 bytes src/skins/vector/img/f4c371.png | Bin 0 -> 146 bytes src/skins/vector/views/atoms/RoomAvatar.js | 18 ++++++++++++++++++ 4 files changed, 18 insertions(+) create mode 100644 src/skins/vector/img/50e2c2.png create mode 100644 src/skins/vector/img/80cef4.png create mode 100644 src/skins/vector/img/f4c371.png diff --git a/src/skins/vector/img/50e2c2.png b/src/skins/vector/img/50e2c2.png new file mode 100644 index 0000000000000000000000000000000000000000..ee0f85589570374f5e1dec95ff7867a6c731f7bf GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1SFZ~=vx6P$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GCY~;iAr-gYoMq%?FyLTNsC6=qKC0CJ@Yw=}$jcia9u?Xc lp(ECPGzm(5Joz;H@|siKCz>m5)(gQu&X%Q~loCII5dEd>Ao literal 0 HcmV?d00001 diff --git a/src/skins/vector/views/atoms/RoomAvatar.js b/src/skins/vector/views/atoms/RoomAvatar.js index ec2bf5ec..39b995a7 100644 --- a/src/skins/vector/views/atoms/RoomAvatar.js +++ b/src/skins/vector/views/atoms/RoomAvatar.js @@ -17,6 +17,7 @@ limitations under the License. 'use strict'; var React = require('react'); +var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); var RoomAvatarController = require('matrix-react-sdk/lib/controllers/atoms/RoomAvatar') @@ -24,6 +25,23 @@ module.exports = React.createClass({ displayName: 'RoomAvatar', mixins: [RoomAvatarController], + getUrlList: function() { + return [ + this.roomAvatarUrl(), + this.getOneToOneAvatar(), + this.getFallbackAvatar() + ]; + }, + + getFallbackAvatar: function() { + var images = [ '80cef4', '50e2c2', 'f4c371' ]; + var total = 0; + for (var i = 0; i < this.props.room.roomId.length; ++i) { + total += this.props.room.roomId.charCodeAt(i); + } + return 'img/' + images[total % images.length] + '.png'; + }, + render: function() { return ( Date: Thu, 22 Oct 2015 16:33:53 +0100 Subject: [PATCH 64/85] oops, typo --- src/skins/vector/views/atoms/MessageTimestamp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skins/vector/views/atoms/MessageTimestamp.js b/src/skins/vector/views/atoms/MessageTimestamp.js index cd0c7a15..a357ec23 100644 --- a/src/skins/vector/views/atoms/MessageTimestamp.js +++ b/src/skins/vector/views/atoms/MessageTimestamp.js @@ -45,7 +45,7 @@ module.exports = React.createClass({ return days[date.getDay()] + ", " + months[date.getMonth()] + " " + (date.getDay()+1) + " " + pad(date.getHours()) + ':' + pad(date.getMinutes()); } else { - return days[date.getDay()] + ", " + months[date.getMonth()] + " " + (date.getDay()+1) + " " + date().getFullYear() + " " + pad(date.getHours()) + ':' + pad(date.getMinutes()); + return days[date.getDay()] + ", " + months[date.getMonth()] + " " + (date.getDay()+1) + " " + date.getFullYear() + " " + pad(date.getHours()) + ':' + pad(date.getMinutes()); } }, From ad4e3418ffd31c79c07e7d936b493f401377d83a Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Fri, 23 Oct 2015 02:32:49 +0100 Subject: [PATCH 65/85] WIP of new CSS --- .gitignore | 5 +++ src/skins/vector/css/common.css | 8 ++-- src/skins/vector/css/hide.css | 4 +- src/skins/vector/css/molecules/EventTile.css | 9 ++-- src/skins/vector/css/molecules/MImageTile.css | 4 +- src/skins/vector/css/molecules/MemberTile.css | 8 ++-- .../vector/css/molecules/MessageComposer.css | 25 ++++++----- src/skins/vector/css/molecules/RoomHeader.css | 14 +++---- .../vector/css/molecules/RoomSettings.css | 2 +- src/skins/vector/css/molecules/RoomTile.css | 39 ++++++++++++++---- src/skins/vector/css/organisms/CreateRoom.css | 2 +- src/skins/vector/css/organisms/LeftPanel.css | 13 +++--- src/skins/vector/css/organisms/MemberList.css | 5 --- .../vector/css/organisms/RoomDirectory.css | 2 +- src/skins/vector/css/organisms/RoomList.css | 16 +++++-- src/skins/vector/css/organisms/RoomView.css | 34 ++++++++------- .../vector/css/organisms/UserSettings.css | 2 +- src/skins/vector/css/pages/MatrixChat.css | 5 ++- src/skins/vector/fonts/MyriadPro-Bold.woff | Bin 0 -> 60588 bytes src/skins/vector/fonts/MyriadPro-BoldIt.woff | Bin 0 -> 64728 bytes src/skins/vector/fonts/MyriadPro-It.woff | Bin 0 -> 62936 bytes src/skins/vector/fonts/MyriadPro-Regular.woff | Bin 0 -> 59864 bytes .../vector/fonts/MyriadPro-SemiBold.woff | Bin 0 -> 52824 bytes src/skins/vector/fonts/MyriadPro.css | 20 +++++++++ src/skins/vector/img/create-big.png | Bin 15407 -> 581 bytes src/skins/vector/img/directory-big.png | Bin 14741 -> 325 bytes src/skins/vector/img/selected.png | Bin 0 -> 995 bytes src/skins/vector/img/settings-big.png | Bin 15641 -> 810 bytes src/skins/vector/views/atoms/RoomAvatar.js | 2 +- .../views/molecules/BottomLeftMenuTile.js | 2 +- src/skins/vector/views/molecules/EventTile.js | 2 +- .../vector/views/molecules/MemberTile.js | 4 +- .../vector/views/molecules/MessageComposer.js | 4 +- src/skins/vector/views/molecules/RoomTile.js | 2 +- src/skins/vector/views/organisms/LeftPanel.js | 2 +- .../vector/views/organisms/MemberList.js | 6 +-- src/skins/vector/views/organisms/RoomList.js | 10 ++--- src/skins/vector/views/organisms/RoomView.js | 1 + vector/index.html | 2 +- 39 files changed, 156 insertions(+), 98 deletions(-) create mode 100644 src/skins/vector/fonts/MyriadPro-Bold.woff create mode 100644 src/skins/vector/fonts/MyriadPro-BoldIt.woff create mode 100644 src/skins/vector/fonts/MyriadPro-It.woff create mode 100644 src/skins/vector/fonts/MyriadPro-Regular.woff create mode 100644 src/skins/vector/fonts/MyriadPro-SemiBold.woff create mode 100644 src/skins/vector/fonts/MyriadPro.css create mode 100644 src/skins/vector/img/selected.png diff --git a/.gitignore b/.gitignore index 13466ce8..a28ca6b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ node_modules vector/bundle.* lib +bundle.css +.DS_Store +key.pem +cert.pem +build diff --git a/src/skins/vector/css/common.css b/src/skins/vector/css/common.css index aff9666e..381eb2cb 100644 --- a/src/skins/vector/css/common.css +++ b/src/skins/vector/css/common.css @@ -22,7 +22,7 @@ html { } body { - font-family: 'Lato', Helvetica, Arial, Sans-Serif; + font-family: 'Myriad Pro', Helvetica, Arial, Sans-Serif; font-size: 16px; color: #454545; border: 0px; @@ -34,7 +34,7 @@ div.error { } h2 { - color: #80cef4; + color: #454545; font-weight: 400; font-size: 20px; margin-top: 16px; @@ -44,7 +44,7 @@ h2 { a:hover, a:link, a:visited { - color: #80CEF4; + color: #76cfa6; } .mx_ContextualMenu_background { @@ -149,7 +149,7 @@ a:visited { font-weight: 400; font-size: 16px; color: #fff; - background-color: #80cef4; + background-color: #76cfa6; margin-left: 8px; margin-right: 8px; padding-left: 1em; diff --git a/src/skins/vector/css/hide.css b/src/skins/vector/css/hide.css index fbc2db20..df437e97 100644 --- a/src/skins/vector/css/hide.css +++ b/src/skins/vector/css/hide.css @@ -1,6 +1,6 @@ .mx_RoomDropTarget, -.mx_RoomList_favourites_label, -.mx_RoomList_archive_label, +.mx_RoomList_favouritesLabel, +.mx_RoomList_archiveLabel, .mx_RoomHeader_search, .mx_RoomSettings_encrypt, .mx_CreateRoom_encrypt, diff --git a/src/skins/vector/css/molecules/EventTile.css b/src/skins/vector/css/molecules/EventTile.css index 1cd2fa46..a9a5260c 100644 --- a/src/skins/vector/css/molecules/EventTile.css +++ b/src/skins/vector/css/molecules/EventTile.css @@ -22,10 +22,10 @@ limitations under the License. } .mx_EventTile_avatar { - padding-left: 12px; + padding-left: 18px; padding-right: 12px; margin-left: -64px; - margin-top: -7px; + margin-top: -4px; float: left; } @@ -48,9 +48,8 @@ limitations under the License. } .mx_EventTile .mx_MessageTimestamp { - color: #454545; - opacity: 0.5; - font-size: 14px; + color: #acacac; + font-size: 12px; float: right; } diff --git a/src/skins/vector/css/molecules/MImageTile.css b/src/skins/vector/css/molecules/MImageTile.css index 10e5b50b..94f1c919 100644 --- a/src/skins/vector/css/molecules/MImageTile.css +++ b/src/skins/vector/css/molecules/MImageTile.css @@ -23,12 +23,12 @@ limitations under the License. } .mx_MImageTile_download { - color: #80cef4; + color: #76cfa6; cursor: pointer; } .mx_MImageTile_download a { - color: #80cef4; + color: #76cfa6; text-decoration: none; } diff --git a/src/skins/vector/css/molecules/MemberTile.css b/src/skins/vector/css/molecules/MemberTile.css index faae142a..ca752541 100644 --- a/src/skins/vector/css/molecules/MemberTile.css +++ b/src/skins/vector/css/molecules/MemberTile.css @@ -27,8 +27,8 @@ limitations under the License. padding-top: 3px; padding-bottom: 3px; vertical-align: middle; - width: 40px; - height: 40px; + width: 36px; + height: 36px; position: relative; } @@ -60,8 +60,8 @@ limitations under the License. .mx_MemberTile_power { position: absolute; - width: 48px; - height: 48px; + width: 44px; + height: 44px; left: 10px; top: -1px; } diff --git a/src/skins/vector/css/molecules/MessageComposer.css b/src/skins/vector/css/molecules/MessageComposer.css index af4934ee..e7f6919c 100644 --- a/src/skins/vector/css/molecules/MessageComposer.css +++ b/src/skins/vector/css/molecules/MessageComposer.css @@ -15,30 +15,29 @@ limitations under the License. */ .mx_MessageComposer_wrapper { - max-width: 720px; - height: 50px; + max-width: 960px; + height: 70px; vertical-align: middle; margin: auto; background-color: #fff; - border-radius: 25px; - border: 1px solid #a9dbf4; + border-top: 2px solid #e1dddd; } .mx_MessageComposer_row { display: table-row; width: 100%; - height: 50px; + height: 70px; } .mx_MessageComposer .mx_MessageComposer_avatar { display: table-cell; - padding-left: 5px; - padding-right: 10px; - height: 50px; + padding-left: 10px; + padding-right: 20px; + height: 70px; } .mx_MessageComposer .mx_MessageComposer_avatar img { - margin-top: 5px; + margin-top: 18px; border-radius: 20px; background-color: #dbdbdb; } @@ -47,7 +46,7 @@ limitations under the License. display: table-cell; width: 100%; vertical-align: middle; - height: 50px; + height: 70px; } .mx_MessageComposer_input textarea { @@ -64,12 +63,16 @@ limitations under the License. box-shadow: none; /* needed for FF */ - font-family: 'Lato', Helvetica, Arial, Sans-Serif; + font-family: 'Myriad Pro', Helvetica, Arial, Sans-Serif; } /* hack for FF as vertical alignment of custom placeholder text is broken */ .mx_MessageComposer_input textarea::-moz-placeholder { line-height: 100%; + color: #76cfa6; +} +.mx_MessageComposer_input textarea::-webkit-input-placeholder { + color: #76cfa6; } .mx_MessageComposer_upload { diff --git a/src/skins/vector/css/molecules/RoomHeader.css b/src/skins/vector/css/molecules/RoomHeader.css index f7adb618..6ae067a0 100644 --- a/src/skins/vector/css/molecules/RoomHeader.css +++ b/src/skins/vector/css/molecules/RoomHeader.css @@ -18,10 +18,10 @@ limitations under the License. } .mx_RoomHeader_wrapper { - max-width: 720px; + max-width: 960px; margin: auto; height: 88px; - border-bottom: 1px solid #a8dbf3; + border-bottom: 1px solid #eeeeee; display: -webkit-box; display: -moz-box; @@ -47,7 +47,7 @@ limitations under the License. .mx_RoomHeader_textButton { height: 48px; margin-top: 18px; - background-color: #80cef4; + background-color: #76cfa6; border-radius: 48px; margin-right: 8px; color: #fff; @@ -92,7 +92,7 @@ limitations under the License. .mx_RoomHeader_simpleHeader { line-height: 88px; - color: #80cef4; + color: #76cfa6; font-weight: 400; font-size: 20px; overflow: hidden; @@ -102,8 +102,8 @@ limitations under the License. .mx_RoomHeader_name { vertical-align: middle; height: 28px; - color: #80cef4; - font-weight: 400; + color: #454545; + font-weight: 800; font-size: 20px; padding-left: 16px; padding-right: 16px; @@ -133,7 +133,7 @@ limitations under the License. vertical-align: bottom; float: left; max-height: 38px; - color: #70b5d7; + color: #454545; font-weight: 300; padding-left: 16px; padding-right: 16px; diff --git a/src/skins/vector/css/molecules/RoomSettings.css b/src/skins/vector/css/molecules/RoomSettings.css index 3a66f0e9..a669c5b2 100644 --- a/src/skins/vector/css/molecules/RoomSettings.css +++ b/src/skins/vector/css/molecules/RoomSettings.css @@ -61,7 +61,7 @@ limitations under the License. font-weight: 400; font-size: 16px; color: #fff; - background-color: #80cef4; + background-color: #76cfa6; width: auto; margin: auto; padding: 6px; diff --git a/src/skins/vector/css/molecules/RoomTile.css b/src/skins/vector/css/molecules/RoomTile.css index 511fc94f..cc933226 100644 --- a/src/skins/vector/css/molecules/RoomTile.css +++ b/src/skins/vector/css/molecules/RoomTile.css @@ -17,18 +17,19 @@ limitations under the License. .mx_RoomTile { cursor: pointer; display: table-row; - color: #818794; + font-size: 14px; } .mx_RoomTile_avatar { display: table-cell; - padding-right: 10px; + background: #eaf5f0; + padding-right: 8px; padding-top: 3px; padding-bottom: 3px; - padding-left: 10px; + padding-left: 18px; vertical-align: middle; - width: 36px; - height: 36px; + width: 24px; + height: 24px; position: relative; } @@ -43,6 +44,8 @@ limitations under the License. overflow: hidden; text-overflow: ellipsis; padding-right: 16px; + color: #454545; + opacity: 0.8; } .collapsed .mx_RoomTile_name { @@ -63,7 +66,7 @@ limitations under the License. } .mx_RoomTile_badge { - background-color: #80cef4; + background-color: #76cfa6; color: #fff; border-radius: 26px; font-weight: 400; @@ -75,6 +78,7 @@ limitations under the License. } */ +/* .mx_RoomTile_badge { background-color: #ff0064; border: 3px solid #fff; @@ -85,20 +89,37 @@ limitations under the License. right: 9px; bottom: 3px; } +*/ + +.mx_RoomTile_highlight .mx_RoomTile_sidebadge, +.mx_RoomTile_unread .mx_RoomTile_sidebadge { + background-color: #76cfa6; + width: 4px; + position: absolute; + left: 0px; +} .mx_RoomTile_unread, .mx_RoomTile_highlight, .mx_RoomTile_invited { font-weight: bold; - color: #000; } .mx_RoomTile_selected { - background-color: #f3f8fa; - color: #80cef4; font-weight: bold; } +.mx_RoomTile.mx_RoomTile_selected { + background: url('img/selected.png'); + background-repeat: no-repeat; + background-position: right center; +} + +.mx_RoomTile_arrow { + position: absolute; + right: 0px; +} + .mx_RoomTile:hover { } diff --git a/src/skins/vector/css/organisms/CreateRoom.css b/src/skins/vector/css/organisms/CreateRoom.css index d6b1765c..578c79e6 100644 --- a/src/skins/vector/css/organisms/CreateRoom.css +++ b/src/skins/vector/css/organisms/CreateRoom.css @@ -15,7 +15,7 @@ limitations under the License. */ .mx_CreateRoom { - width: 720px; + width: 960px; margin-left: auto; margin-right: auto; color: #4a4a4a; diff --git a/src/skins/vector/css/organisms/LeftPanel.css b/src/skins/vector/css/organisms/LeftPanel.css index 0e7e077e..67f00c35 100644 --- a/src/skins/vector/css/organisms/LeftPanel.css +++ b/src/skins/vector/css/organisms/LeftPanel.css @@ -53,17 +53,20 @@ limitations under the License. -webkit-order: 3; order: 3; - -webkit-flex: 0 0 170px; - flex: 0 0 170px; - - border-top: 1px solid #f3f8fa; + -webkit-flex: 0 0 126px; + flex: 0 0 126px; } .mx_LeftPanel .mx_BottomLeftMenu .mx_RoomTile { - color: #378bb4; + color: #454545; } .mx_LeftPanel .mx_BottomLeftMenu .mx_BottomLeftMenu_options { margin-top: 12px; width: 100%; +} + +.mx_LeftPanel .mx_BottomLeftMenu img { + border-radius: 0px; + background-color: transparent; } \ No newline at end of file diff --git a/src/skins/vector/css/organisms/MemberList.css b/src/skins/vector/css/organisms/MemberList.css index aab0def4..7320a127 100644 --- a/src/skins/vector/css/organisms/MemberList.css +++ b/src/skins/vector/css/organisms/MemberList.css @@ -16,8 +16,6 @@ limitations under the License. .mx_MemberList { height: 100%; - margin-bottom: 100px; - padding: 8px; -webkit-flex: 1; flex: 1; @@ -39,10 +37,7 @@ limitations under the License. } .mx_MemberList_border { - border: 1px solid #a9dbf4; overflow-y: auto; - border-radius: 8px; - background-color: #fff; order: 1; -webkit-flex: 1 1 0; diff --git a/src/skins/vector/css/organisms/RoomDirectory.css b/src/skins/vector/css/organisms/RoomDirectory.css index 21985a25..f53f0556 100644 --- a/src/skins/vector/css/organisms/RoomDirectory.css +++ b/src/skins/vector/css/organisms/RoomDirectory.css @@ -15,7 +15,7 @@ limitations under the License. */ .mx_RoomDirectory { - width: 720px; + width: 960px; margin-left: auto; margin-right: auto; margin-bottom: 12px; diff --git a/src/skins/vector/css/organisms/RoomList.css b/src/skins/vector/css/organisms/RoomList.css index 21cb7812..89181b82 100644 --- a/src/skins/vector/css/organisms/RoomList.css +++ b/src/skins/vector/css/organisms/RoomList.css @@ -15,6 +15,7 @@ limitations under the License. */ .mx_RoomList { + padding-top: 24px; } .mx_RoomList_recents { @@ -24,8 +25,15 @@ limitations under the License. width: 100%; } +.mx_RoomList_recentsLabel img { + margin-left: 8px; +} + .mx_RoomList h2 { - padding-left: 16px; - padding-right: 16px; - padding-bottom: 10px; -} \ No newline at end of file + text-transform: uppercase; + color: #3d3b39; + font-weight: 600; + font-size: 14px; + padding-left: 12px; + padding-right: 12px; +} diff --git a/src/skins/vector/css/organisms/RoomView.css b/src/skins/vector/css/organisms/RoomView.css index 2aab203a..8ca00803 100644 --- a/src/skins/vector/css/organisms/RoomView.css +++ b/src/skins/vector/css/organisms/RoomView.css @@ -42,7 +42,7 @@ limitations under the License. .mx_RoomView_fileDropTarget { min-width: 0px; - max-width: 720px; + max-width: 960px; width: 100%; font-size: 20px; text-align: center; @@ -61,7 +61,7 @@ limitations under the License. border-top-right-radius: 10px; background-color: rgba(255, 255, 255, 0.9); - border: 2px dashed #80cef4; + border: 2px dashed #76cfa6; border-bottom: none; position: absolute; top: 88px; @@ -84,12 +84,12 @@ limitations under the License. order: 2; min-width: 0px; - max-width: 720px; + max-width: 960px; width: 100%; margin: auto; overflow: auto; - border-bottom: 1px solid #a8dbf3; + border-bottom: 1px solid #eee; -webkit-flex: 0 0 auto; flex: 0 0 auto; @@ -111,7 +111,7 @@ limitations under the License. } .mx_RoomView_messageListWrapper { - max-width: 720px; + max-width: 960px; margin: auto; } @@ -129,8 +129,9 @@ limitations under the License. clear: both; margin-top: 32px; margin-bottom: 8px; + margin-left: 54px; padding-bottom: 6px; - border-bottom: 1px solid #a8dbf3; + border-bottom: 1px solid #eee; } .mx_RoomView_invitePrompt { @@ -141,7 +142,7 @@ limitations under the License. order: 2; min-width: 0px; - max-width: 720px; + max-width: 960px; width: 100%; margin: auto; @@ -157,14 +158,19 @@ limitations under the License. order: 4; width: 100%; - -webkit-flex: 0 0 58px; - flex: 0 0 58px; + -webkit-flex: 0 0 36px; + flex: 0 0 36px; } .mx_RoomView_statusAreaBox { - max-width: 720px; + max-width: 960px; margin: auto; - border-top: 1px solid #a8dbf3; +} + +.mx_RoomView_statusAreaBox_line { + border-top: 1px solid #eee; + margin-left: 54px; + height: 1px; } .mx_RoomView_unreadMessagesBar { @@ -205,8 +211,8 @@ limitations under the License. order: 5; width: 100%; - -webkit-flex: 0 0 63px; - flex: 0 0 63px; + -webkit-flex: 0 0 70px; + flex: 0 0 70px; margin-right: 2px; } @@ -217,7 +223,7 @@ limitations under the License. } .mx_RoomView_uploadProgressInner { - background-color: #80cef4; + background-color: #76cfa6; height: 4px; } diff --git a/src/skins/vector/css/organisms/UserSettings.css b/src/skins/vector/css/organisms/UserSettings.css index b69399b7..2b0aca3d 100644 --- a/src/skins/vector/css/organisms/UserSettings.css +++ b/src/skins/vector/css/organisms/UserSettings.css @@ -15,7 +15,7 @@ limitations under the License. */ .mx_UserSettings { - width: 720px; + width: 960px; margin-left: auto; margin-right: auto; } diff --git a/src/skins/vector/css/pages/MatrixChat.css b/src/skins/vector/css/pages/MatrixChat.css index 6fa0415a..f649aa24 100644 --- a/src/skins/vector/css/pages/MatrixChat.css +++ b/src/skins/vector/css/pages/MatrixChat.css @@ -69,6 +69,8 @@ limitations under the License. -webkit-order: 1; order: 1; + background-color: #eaf5f0; + -webkit-flex: 0 0 230px; flex: 0 0 230px; } @@ -87,7 +89,7 @@ limitations under the License. padding-left: 12px; padding-right: 12px; - background-color: #f3f8fa; + background-color: #fff; -webkit-flex: 1; flex: 1; @@ -114,7 +116,6 @@ limitations under the License. -webkit-order: 3; order: 3; - background-color: #f3f8fa; -webkit-flex: 0 0 230px; flex: 0 0 230px; } diff --git a/src/skins/vector/fonts/MyriadPro-Bold.woff b/src/skins/vector/fonts/MyriadPro-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..f30c591f91d7b699f0d788a8876f39c7e5cfeeb8 GIT binary patch literal 60588 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

    ?`rDdCDZZHhm88m(tr;KD@vp|6i->H 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 literal 0 HcmV?d00001 diff --git a/src/skins/vector/fonts/MyriadPro-It.woff b/src/skins/vector/fonts/MyriadPro-It.woff new file mode 100644 index 0000000000000000000000000000000000000000..9a133bcdec2d7d75f8833ce62370053bfc88b655 GIT binary patch literal 62936 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 l) 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 z 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 literal 0 HcmV?d00001 diff --git a/src/skins/vector/fonts/MyriadPro-SemiBold.woff b/src/skins/vector/fonts/MyriadPro-SemiBold.woff new file mode 100644 index 0000000000000000000000000000000000000000..2a80f65dbeb8a47b429adb8851b8dc431da3a389 GIT binary patch literal 52824 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 Ts#h8Q00000NkvXXu0mjfRwM*t literal 15407 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 X7jjMdDj9}v00000NkvXXu0mjf2epbS literal 14741 zcmeI3U5Fc16vt;>tnF$owW8Ll4M~+&o6Jl;H)E2eCf#nptm|${ckP2anYq~vo6L-v z*-ds4)~bkoP^d4~Vky)It%^dy7o{zWv>=NXv9?u&BGzwc1wpFR#ygX2a*|DYTj}Es zBssbF|3Bx>?|x)nX7|wGwv|2i_Am^yGC7bK#@`#P_wt+Yr2r=3^8vDM5v9k#@r zj5@bi1s$WQAxB&*B1gazbW2|C^hc-LB93NmgAM4}XUZ3FS1i#l&dpTo0 zIEobItT3GDua(2UqRyOY>H^D_N+nOp=h2E2EFTVsS6^<8#AgYmffo1swP>? zlR$=4RCH6(REL#U%xF_))akSe)nB#iD(Lk>s!?NyDY9izXL%3Dwlm36-J?$x^Y+kW ziA8x-K&okAAK%ue=QL9@a$1Ly_3n;^@tmYm_1bO6TPUwoW5Gqa$`0 z8QN4)LR+WtrMTK%y{Tjylhc&R>ghOkR8~6Jte&dPUJBJ2ir{M%;zcByS~0C@`B-(8 z4J{&c#N+m=a%@bAlA>B%H$~W1Q)9*(`A|YMQOsJAZk}^P;sj!Kbt1wx z8iBIDu7tRj*NS*pDCUc>?V5qhUTZ>9HB3>JP%;t24IV|21zDE7{%|Jj4hJR4?e}Iw z?p`DzcgD{L{6Wz#_M$4pR0`Ucq)uqkl(k=KspacT4eU!&KT%ZhStsU!#v1+gmS~e^ zNvQ$Fz$c?39l(Ibb-W5d2I?rN~ zwIz@oVVhbT!>T)LHs$|LU^PFmcdk*&A@yn-s+!7HbxvYvS+gV-(Uu9kCa!I_SMxR- zTMI;3>mMMmG*3mfwRwi@jgQyt(ix3d2b+Lb10I=Z&jKG|m$Wr1SM{UTtmda|eaOq< z7t33pH7o3HwT@lg3cFja4d-@MF=O6ZwU%b!vQFRX!7zev6i_S}2>1dKwzav{F{G4H zel(%r9c)L_|@`DX%J(Ii--scC@x5Y7*kwC zL{LC+K^nxE;vyn~0*VXLAjT9I5fKznT#yDarnrcRpn&3nG>9?9MMMMz6c?mHj43W6 zA}FA^APr(naS;(g0mTJr5MzpqhzJTOE=YqIQ(QzuP(X1(8pN35A|iqUiVM;p##hDF z(|G(3srZ?{5`MUE?$90$KN#qc28L4%Gy5RJJof^_{9VD{zcS1e$1uN*GmNm8VeZym zd-`}k*8ZGKY)O~D&0MZj`nr!WYr5~Be+R`+dhhaI`SSH+uO9p7l?%@P6XQ2e&peQQ zc<1!_;}>sB4f^NjDr-;2F1>N^izHgOBCee5U$(+?V#m44Zk@YB@wmFXT`pJGg5G7U zKK)~9?((H=`4xX0*fl@2_jqdG{`(fr?p^!C*S#;V;`^7qwCT*zx5oP4J9X*6t}fS| z{Ih@kzW&pXZ|OUfIrrh*i<>1WvwV2`?e8AK%H)}&Uu_zxtaq>5=3e(v{?y^`ny`Q_?s9&6#JTnOZ zn5wN{EB*6#`s4)v{(SQ2PkLaL7F(rl*0m!7mR!0GmezkpjH%R zRnv0XJX9oEMN$@JrHqo*bCRA@VE++#w8(Ai7OwVV@slBR7z=fTy4|kW&5ATyM{==P zM3RCOCBr>3@pi!MBoo9l0|rcDC-Oq((Ez55_8Q${hQO5`q~M1`+92+ii5Cndc8FwA zN>ds*n&$sqeShd3Gm9MRJ(f6bZifU}B&J)D!yDJ0NkfHtIU+WrQIpcmK@}Sv%4po7 zAuN}BRfDsp?RY_Ioa>=XQ?CUvvjd0Jupw|B(eqrrA{DW;Bx#zQ#j;#c3prWCg(_Cm zTy+^23Ii;r&X!LCHo&@v*uqF`IuL%yBV!VIH;7w}s1JLI>)vQB>PWsm)*Y=SKN5?$ z7?ig6NV^9nK11ntIK2EY9Dfq_%Q_{F$f!%NNN^Zk#{rog#VuNyBu`4jj4 z;#Xk*uC?&^tu@__-#_>=HvjU-`u6ah{q@6K=fvEdvBMSK+CRSs#=-Z~XRm?_`CsX^ Nt5xdw>GHLk{{SlNH*o*} literal 0 HcmV?d00001 diff --git a/src/skins/vector/img/settings-big.png b/src/skins/vector/img/settings-big.png index 3be13bc712461476cc48b9b1962d9facc487fceb..cb2e0a62d06f155ee89c02f6d5ca202fbda19e2e 100644 GIT binary patch literal 810 zcmV+_1J(SAP)Px%c#KELZq(h~PlY)!TMF+J| za41Ct>!2Vgg5cmJRtL4k=3|l|u9Xf-o1g)$pyCG-Bux{4C+6PVywJopUbsE~dp`c> z+BmSwrcy;7-^!6%Z*ZWiw=Tc z1YDp}8#%%3HGRP!v0X+=kyEy9dx_~njwcd{`^r}*pz>3YOew=gr6ggDrc$Y=0?a!Y z7DcCnB4zi-6^~BfcDpaK<)6y1Q3?51kH>RK#k&+(TwMI&_xp3)K}S2`4$jQY%`GTi zy#rA|zF8R@a+%6T(H)Rk!^;kz>T-2;wa3(3u~;l3JU?(urPX>>kQ561_%Qs|bzuPwSq6uO&CXTegf>IkQe*kMBNIQ42xY_-SNBo{{r zUa0`5Y-Ov(+6{N$B={d|Tei`P2z&op_Et8D!Cr9%gTWWb1-APRxeK|~BxHTa=krbH z^ZDPVUM`t_zlUy%si$E+vrfP@Ls#BzIDal}1j1WpKn+WqPGYOx2e=v3R9Zav_9c8{)cP89D)mnKh2*uje}c!u3SC>&Gsa%e@JOLSINSfP-9C0eqhM zjP*eR8oCAjC*~OX8Rk)ZJVMG_bd}?|D_Dk3Ad74^J5Q4LkZ&j8G>#b(zYPQeduV`t z;$w^?_8VgF>+5??%wB9aO>*&V`X=+A!XxxD^&nYRFX}*jueHKW|mI{*Lx07*qoM6N<$f}6>B?EnA( literal 15641 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 B&Vc{` diff --git a/src/skins/vector/views/atoms/RoomAvatar.js b/src/skins/vector/views/atoms/RoomAvatar.js index 39b995a7..4416a6b8 100644 --- a/src/skins/vector/views/atoms/RoomAvatar.js +++ b/src/skins/vector/views/atoms/RoomAvatar.js @@ -34,7 +34,7 @@ module.exports = React.createClass({ }, getFallbackAvatar: function() { - var images = [ '80cef4', '50e2c2', 'f4c371' ]; + var images = [ '76cfa6', '50e2c2', 'f4c371' ]; var total = 0; for (var i = 0; i < this.props.room.roomId.length; ++i) { total += this.props.room.roomId.charCodeAt(i); diff --git a/src/skins/vector/views/molecules/BottomLeftMenuTile.js b/src/skins/vector/views/molecules/BottomLeftMenuTile.js index 2644769c..8c28058d 100644 --- a/src/skins/vector/views/molecules/BottomLeftMenuTile.js +++ b/src/skins/vector/views/molecules/BottomLeftMenuTile.js @@ -48,7 +48,7 @@ module.exports = React.createClass({ return (

    diff --git a/src/skins/vector/views/molecules/EventTile.js b/src/skins/vector/views/molecules/EventTile.js index 534af3c7..a086ad00 100644 --- a/src/skins/vector/views/molecules/EventTile.js +++ b/src/skins/vector/views/molecules/EventTile.js @@ -110,7 +110,7 @@ module.exports = React.createClass({ if (this.props.mxEvent.sender) { avatar = (
    - +
    ); } diff --git a/src/skins/vector/views/molecules/MemberTile.js b/src/skins/vector/views/molecules/MemberTile.js index 4c34fcb7..845d2a97 100644 --- a/src/skins/vector/views/molecules/MemberTile.js +++ b/src/skins/vector/views/molecules/MemberTile.js @@ -121,7 +121,7 @@ module.exports = React.createClass({ var power; if (this.props.member && this.props.member.powerLevelNorm > 0) { var img = "img/p/p" + Math.floor(20 * this.props.member.powerLevelNorm / 100) + ".png"; - power = ; + power = ; } var presenceClass = "mx_MemberTile_offline"; var mainClassName = "mx_MemberTile "; @@ -177,7 +177,7 @@ module.exports = React.createClass({ return (
    - + { power }
    { nameEl } diff --git a/src/skins/vector/views/molecules/MessageComposer.js b/src/skins/vector/views/molecules/MessageComposer.js index c94cade5..67a0b18a 100644 --- a/src/skins/vector/views/molecules/MessageComposer.js +++ b/src/skins/vector/views/molecules/MessageComposer.js @@ -49,10 +49,10 @@ module.exports = React.createClass({
    - +
    -