From c7ffb5937423de31d88224c00262fe70e640bb9f Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Thu, 17 Mar 2016 15:35:23 +0000 Subject: [PATCH 1/5] click on nicks to insert them into the MessageComposer --- src/components/views/rooms/EventTile.js | 15 +++++++++++---- src/components/views/rooms/MessageComposer.js | 9 +++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index cfff797e7d..9d5a17b3d2 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -268,10 +268,17 @@ module.exports = React.createClass({ this.readAvatarNode = ReactDom.findDOMNode(node); }, - onMemberAvatarClicked: function(sender) { + onMemberAvatarClick: function(event) { dispatcher.dispatch({ action: 'view_user', - member: sender + member: this.props.mxEvent.sender, + }); + }, + + onSenderProfileClick: function(event) { + dispatcher.dispatch({ + action: 'insert_displayname', + displayname: this.props.mxEvent.sender.name, }); }, @@ -318,12 +325,12 @@ module.exports = React.createClass({ avatar = (
+ onClick={ this.onMemberAvatarClick } />
); } if (EventTileType.needsSenderProfile()) { - sender = ; + sender = ; } } return ( diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js index 6744de5d14..2cb2acb470 100644 --- a/src/components/views/rooms/MessageComposer.js +++ b/src/components/views/rooms/MessageComposer.js @@ -196,6 +196,15 @@ module.exports = React.createClass({ case 'focus_composer': this.refs.textarea.focus(); break; + case 'insert_displayname': + if (this.refs.textarea.value) { + this.refs.textarea.value = + this.refs.textarea.value.replace(/( ?)$/, " " + payload.displayname); + } + else { + this.refs.textarea.value = payload.displayname + ": "; + } + break; } }, From a64ad04a0e92d5227c6aae5a2519e1a4c12fd946 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Thu, 17 Mar 2016 16:29:37 +0000 Subject: [PATCH 2/5] handle focus nicely when inserting displaynames and let them be inserted in the middle of in-progress messages --- src/components/views/rooms/MessageComposer.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js index 2cb2acb470..53253376c9 100644 --- a/src/components/views/rooms/MessageComposer.js +++ b/src/components/views/rooms/MessageComposer.js @@ -192,17 +192,28 @@ module.exports = React.createClass({ }, onAction: function(payload) { + var textarea = this.refs.textarea; switch (payload.action) { case 'focus_composer': - this.refs.textarea.focus(); + textarea.focus(); break; case 'insert_displayname': - if (this.refs.textarea.value) { - this.refs.textarea.value = - this.refs.textarea.value.replace(/( ?)$/, " " + payload.displayname); + if (textarea.value) { + var left = textarea.value.substring(0, textarea.selectionStart); + var right = textarea.value.substring(textarea.selectionEnd); + if (right && right.length) { + left += payload.displayname; + } + else { + left = left.replace(/( ?)$/, " " + payload.displayname); + } + textarea.value = left + right; + textarea.focus(); + textarea.setSelectionRange(left.length, left.length); } else { this.refs.textarea.value = payload.displayname + ": "; + this.refs.textarea.focus(); } break; } From 1b4c5224fd2b45a8fd61130cf4d3b3c7fe1d3c14 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Thu, 17 Mar 2016 16:52:12 +0000 Subject: [PATCH 3/5] missed some s/this.refs.// --- src/components/views/rooms/MessageComposer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js index 53253376c9..059cafd311 100644 --- a/src/components/views/rooms/MessageComposer.js +++ b/src/components/views/rooms/MessageComposer.js @@ -212,8 +212,8 @@ module.exports = React.createClass({ textarea.setSelectionRange(left.length, left.length); } else { - this.refs.textarea.value = payload.displayname + ": "; - this.refs.textarea.focus(); + textarea.value = payload.displayname + ": "; + textarea.focus(); } break; } From 76d4e8a7887376231b820c7fbbf4235adc521324 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Thu, 17 Mar 2016 16:54:54 +0000 Subject: [PATCH 4/5] check length of textarea, not its trueiness --- src/components/views/rooms/MessageComposer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js index 059cafd311..94058ae6d0 100644 --- a/src/components/views/rooms/MessageComposer.js +++ b/src/components/views/rooms/MessageComposer.js @@ -198,7 +198,7 @@ module.exports = React.createClass({ textarea.focus(); break; case 'insert_displayname': - if (textarea.value) { + if (textarea.value.length) { var left = textarea.value.substring(0, textarea.selectionStart); var right = textarea.value.substring(textarea.selectionEnd); if (right && right.length) { From fd4e70970583e8b13fb6bf12169c79cd2ee8d6fe Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Thu, 17 Mar 2016 16:56:16 +0000 Subject: [PATCH 5/5] don't need null guard --- src/components/views/rooms/MessageComposer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js index 94058ae6d0..89633f18f8 100644 --- a/src/components/views/rooms/MessageComposer.js +++ b/src/components/views/rooms/MessageComposer.js @@ -201,7 +201,7 @@ module.exports = React.createClass({ if (textarea.value.length) { var left = textarea.value.substring(0, textarea.selectionStart); var right = textarea.value.substring(textarea.selectionEnd); - if (right && right.length) { + if (right.length) { left += payload.displayname; } else {