From 3129e84b6c7de1b8a04f24cfc3f68ae4fe7efd32 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 31 Mar 2016 16:34:38 +0100 Subject: [PATCH 1/7] Switch js-sdk back to develop --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7c4bd714ef..6f363462d2 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "highlight.js": "^8.9.1", "linkifyjs": "^2.0.0-beta.4", "marked": "^0.3.5", - "matrix-js-sdk": "^0.5.1", + "matrix-js-sdk": "matrix-org/matrix-js-sdk#develop", "optimist": "^0.6.1", "q": "^1.4.1", "react": "^0.14.2", From 73f7528d0f313fa5d7bc982cc812b9b2da514faf Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 31 Mar 2016 16:38:56 +0100 Subject: [PATCH 2/7] Use babel 5 for karma tests --- karma.conf.js | 5 ++++- package.json | 12 +++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index e59a6c9e15..89437c203a 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -99,7 +99,10 @@ module.exports = function (config) { path.resolve('./test'), ], query: { - presets: ['react', 'es2015'] + // we're using react 5, for consistency with + // the release build, which doesn't use the + // presets. + // presets: ['react', 'es2015'], }, }, ], diff --git a/package.json b/package.json index 6f363462d2..c259700c92 100644 --- a/package.json +++ b/package.json @@ -40,13 +40,15 @@ "velocity-animate": "^1.2.3", "velocity-ui-pack": "^1.2.2" }, + "//babelversion": [ + "brief experiments with babel6 seems to show that it generates source ", + "maps which confuse chrome and make setting breakpoints tricky. So ", + "let's stick with v5 for now." + ], "devDependencies": { "babel": "^5.8.23", - "babel-core": "^6.7.4", - "babel-loader": "^6.2.4", - "babel-preset-es2015": "^6.6.0", - "babel-preset-react": "^6.5.0", - "babel-runtime": "^6.6.1", + "babel-core": "^5.8.38", + "babel-loader": "^5.4.0", "expect": "^1.16.0", "json-loader": "^0.5.3", "karma": "^0.13.22", From 25b35a09b9a6da767b9d253dc4bd4daa38a7f9bd Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 31 Mar 2016 17:01:11 +0100 Subject: [PATCH 3/7] Clean up some redundancy in the MessagePanel test --- .../structures/MessagePanel-test.js | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/test/components/structures/MessagePanel-test.js b/test/components/structures/MessagePanel-test.js index 3e984e8134..f775388617 100644 --- a/test/components/structures/MessagePanel-test.js +++ b/test/components/structures/MessagePanel-test.js @@ -91,11 +91,13 @@ describe('MessagePanel', function () { var tiles = TestUtils.scryRenderedComponentsWithType( mp, sdk.getComponent('rooms.EventTile')); + var tileContainers = tiles.map(function (t) { + return ReactDOM.findDOMNode(t).parentNode; + }); // find the
  • which wraps the read marker var rm = TestUtils.findRenderedDOMComponentWithClass(mp, 'mx_RoomView_myReadMarker_container'); - var eventContainer = ReactDOM.findDOMNode(tiles[4]).parentNode; - expect(rm.previousSibling).toEqual(eventContainer); + expect(rm.previousSibling).toEqual(tileContainers[4]); // now move the RM mp = ReactDOM.render( @@ -108,18 +110,11 @@ describe('MessagePanel', function () { expect(found.length).toEqual(2); // the first should be the ghost - var ghost = found[0]; - eventContainer = ReactDOM.findDOMNode(tiles[4]).parentNode; - expect(ghost.previousSibling).toEqual(eventContainer); - var hr = ghost.children[0]; - - // the first should be the ghost - eventContainer = ReactDOM.findDOMNode(tiles[4]).parentNode; - expect(found[0].previousSibling).toEqual(eventContainer); + expect(found[0].previousSibling).toEqual(tileContainers[4]); + var hr = found[0].children[0]; // the second should be the real thing - eventContainer = ReactDOM.findDOMNode(tiles[4]).parentNode; - expect(ghost.previousSibling).toEqual(eventContainer); + expect(found[1].previousSibling).toEqual(tileContainers[6]); // advance the clock, and then let the browser run an animation frame, // to let the animation start From 4ef148eaec8681a4b8b4f8b3dc0939e98be79562 Mon Sep 17 00:00:00 2001 From: Aviral Dasgupta Date: Sat, 2 Apr 2016 22:15:29 +0530 Subject: [PATCH 4/7] whitelist tag (fixes vector-im/vector-web#1339) --- src/HtmlUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/HtmlUtils.js b/src/HtmlUtils.js index 82aea0bb76..dbcb59a20a 100644 --- a/src/HtmlUtils.js +++ b/src/HtmlUtils.js @@ -27,7 +27,7 @@ var sanitizeHtmlParams = { 'del', // for markdown // deliberately no h1/h2 to stop people shouting. 'h3', 'h4', 'h5', 'h6', 'blockquote', 'p', 'a', 'ul', 'ol', - 'nl', 'li', 'b', 'i', 'strong', 'em', 'strike', 'code', 'hr', 'br', 'div', + 'nl', 'li', 'b', 'i', 'u', 'strong', 'em', 'strike', 'code', 'hr', 'br', 'div', 'table', 'thead', 'caption', 'tbody', 'tr', 'th', 'td', 'pre' ], allowedAttributes: { From 31e09ebe637d2d76e8f5b43825aca30f8338fb8c Mon Sep 17 00:00:00 2001 From: Aviral Dasgupta Date: Sun, 3 Apr 2016 00:54:23 +0530 Subject: [PATCH 5/7] Show full-size avatar on MemberInfo avatar click fixes vector-im/vector-web#65 --- src/components/views/rooms/MemberInfo.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/components/views/rooms/MemberInfo.js b/src/components/views/rooms/MemberInfo.js index 94bd5d6b8f..52313430d4 100644 --- a/src/components/views/rooms/MemberInfo.js +++ b/src/components/views/rooms/MemberInfo.js @@ -448,6 +448,20 @@ module.exports = React.createClass({ }); }, + onMemberAvatarClick: function () { + var avatarUrl = this.props.member.user.avatarUrl; + if(!avatarUrl) return; + + var httpUrl = MatrixClientPeg.get().mxcUrlToHttp(avatarUrl); + var ImageView = sdk.getComponent("elements.ImageView"); + var params = { + src: httpUrl, + name: this.props.member.name + }; + + Modal.createDialog(ImageView, params, "mx_Dialog_lightbox"); + }, + render: function() { var startChat, kickButton, banButton, muteButton, giveModButton, spinner; if (this.props.member.userId !== MatrixClientPeg.get().credentials.userId) { @@ -508,7 +522,7 @@ module.exports = React.createClass({
    - +

    { this.props.member.name }

    From 0eeaac88b46e4cae5dee1bcb44425c9f0b7f5457 Mon Sep 17 00:00:00 2001 From: Aviral Dasgupta Date: Sun, 3 Apr 2016 01:26:50 +0530 Subject: [PATCH 6/7] Allow multiple files to be uploaded at once fixes vector-im/vector-web#219 --- src/components/views/rooms/MessageComposer.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js index 7d5ce473d6..469356e7f4 100644 --- a/src/components/views/rooms/MessageComposer.js +++ b/src/components/views/rooms/MessageComposer.js @@ -48,8 +48,10 @@ module.exports = React.createClass({ onUploadFileSelected: function(ev) { var files = ev.target.files; // MessageComposer shouldn't have to rely on its parent passing in a callback to upload a file - if (files && files.length > 0) { - this.props.uploadFile(files[0]); + if (files) { + for(var i=0; i
    ); From 0574a28e36ad4bce6592873b8c7d9b7108e71b56 Mon Sep 17 00:00:00 2001 From: Aviral Dasgupta Date: Sun, 3 Apr 2016 02:22:05 +0530 Subject: [PATCH 7/7] Add confirmation dialog for file upload fixes vector-im/vector-web#92 --- src/components/views/rooms/MessageComposer.js | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js index 469356e7f4..6d26e7884d 100644 --- a/src/components/views/rooms/MessageComposer.js +++ b/src/components/views/rooms/MessageComposer.js @@ -17,6 +17,7 @@ var React = require('react'); var CallHandler = require('../../../CallHandler'); var MatrixClientPeg = require('../../../MatrixClientPeg'); +var Modal = require('../../../Modal'); var sdk = require('../../../index'); var dis = require('../../../dispatcher'); @@ -47,13 +48,40 @@ module.exports = React.createClass({ onUploadFileSelected: function(ev) { var files = ev.target.files; - // MessageComposer shouldn't have to rely on its parent passing in a callback to upload a file - if (files) { - for(var i=0; i + {files[i].name} +
  • ); } - this.refs.uploadInput.value = null; + + Modal.createDialog(QuestionDialog, { + title: "Upload Files", + description: ( +
    +

    Are you sure you want upload the following files?

    +
      + {fileList} +
    +
    + ), + onFinished: (shouldUpload) => { + if(shouldUpload) { + // MessageComposer shouldn't have to rely on its parent passing in a callback to upload a file + if (files) { + for(var i=0; i