{"action":"created","comment":{"url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls/comments/46269177","id":46269177,"diff_hunk":"@@ -0,0 +1,199 @@\n+/*\n+Copyright 2015 OpenMarket Ltd\n+\n+Licensed under the Apache License, Version 2.0 (the \"License\");\n+you may not use this file except in compliance with the License.\n+You may obtain a copy of the License at\n+\n+    http://www.apache.org/licenses/LICENSE-2.0\n+\n+Unless required by applicable law or agreed to in writing, software\n+distributed under the License is distributed on an \"AS IS\" BASIS,\n+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+See the License for the specific language governing permissions and\n+limitations under the License.\n+*/\n+\n+'use strict';\n+\n+var React = require('react');\n+var ReactDOM = require('react-dom');\n+var sdk = require('../../../index');\n+var Signup = require(\"../../../Signup\");\n+var PasswordLogin = require(\"../../views/login/PasswordLogin\");\n+var CasLogin = require(\"../../views/login/CasLogin\");\n+var ServerConfig = require(\"../../views/login/ServerConfig\");\n+\n+/**\n+ * A wire component which glues together login UI components and Signup logic\n+ */\n+module.exports = React.createClass({displayName: 'Login',\n+    propTypes: {\n+        onLoggedIn: React.PropTypes.func.isRequired,\n+        homeserverUrl: React.PropTypes.string,\n+        identityServerUrl: React.PropTypes.string,\n+        // login shouldn't know or care how registration is done.\n+        onRegisterClick: React.PropTypes.func.isRequired\n+    },\n+\n+    getDefaultProps: function() {\n+        return {\n+            homeserverUrl: 'https://matrix.org/',\n+            identityServerUrl: 'https://vector.im'\n+        };\n+    },\n+\n+    getInitialState: function() {\n+        return {\n+            busy: false,\n+            errorText: null,\n+            enteredHomeserverUrl: this.props.homeserverUrl,\n+            enteredIdentityServerUrl: this.props.identityServerUrl\n+        };\n+    },\n+\n+    componentWillMount: function() {\n+        this._initLoginLogic();\n+    },\n+\n+    onPasswordLogin: function(username, password) {\n+        var self = this;\n+        self.setState({\n+            busy: true\n+        });\n+\n+        this._loginLogic.loginViaPassword(username, password).then(function(data) {\n+            self.props.onLoggedIn(data);\n+        }, function(error) {\n+            self._setErrorTextFromError(error);\n+        }).finally(function() {\n+            self.setState({\n+                busy: false\n+            });\n+        });\n+    },\n+\n+    onHsUrlChanged: function(newHsUrl) {\n+        this._initLoginLogic(newHsUrl);\n+    },\n+\n+    onIsUrlChanged: function(newIsUrl) {\n+        this._initLoginLogic(null, newIsUrl);\n+    },\n+\n+    _initLoginLogic: function(hsUrl, isUrl) {\n+        var self = this;\n+        hsUrl = hsUrl || this.state.enteredHomeserverUrl;\n+        isUrl = isUrl || this.state.enteredIdentityServerUrl;\n+\n+        var loginLogic = new Signup.Login(hsUrl, isUrl);\n+        this._loginLogic = loginLogic;\n+\n+        loginLogic.getFlows().then(function(flows) {\n+            // old behaviour was to always use the first flow without presenting\n+            // options. This works in most cases (we don't have a UI for multiple\n+            // logins so let's skip that for now).\n+            loginLogic.chooseFlow(0);\n+        }, function(err) {\n+            self._setErrorTextFromError(err);\n+        }).finally(function() {\n+            self.setState({\n+                busy: false\n+            });\n+        });\n+\n+        this.setState({\n+            enteredHomeserverUrl: hsUrl,\n+            enteredIdentityServerUrl: isUrl,\n+            busy: true,\n+            errorText: null // reset err messages\n+        });\n+    },\n+\n+    _getCurrentFlowStep: function() {\n+        return this._loginLogic ? this._loginLogic.getCurrentFlowStep() : null\n+    },\n+\n+    _setErrorTextFromError: function(err) {\n+        if (err.friendlyText) {\n+            this.setState({\n+                errorText: err.friendlyText\n+            });\n+            return;\n+        }\n+\n+        var errCode = err.errcode;\n+        if (!errCode && err.httpStatus) {\n+            errCode = \"HTTP \" + err.httpStatus;\n+        }\n+        this.setState({\n+            errorText: (\n+                \"Error: Problem communicating with the given homeserver \" +\n+                (errCode ? \"(\" + errCode + \")\" : \"\")\n+            )\n+        });\n+    },\n+\n+    componentForStep: function(step) {\n+        switch (step) {\n+            case 'm.login.password':\n+                return (\n+                    <PasswordLogin onSubmit={this.onPasswordLogin} />\n+                );\n+            case 'm.login.cas':\n+                return (\n+                    <CasLogin />\n+                );\n+            default:\n+                if (!step) {\n+                    return;\n+                }\n+                return (\n+                    <div>\n+                    Sorry, this homeserver is using a login which is not\n+                    recognised by Vector ({step})\n+                    </div>\n+                );\n+        }\n+    },\n+\n+    render: function() {\n+        var Loader = sdk.getComponent(\"elements.Spinner\");\n+        var loader = this.state.busy ? <div className=\"mx_Login_loader\"><Loader /></div> : null;\n+\n+        return (\n+            <div className=\"mx_Login\">\n+                <div className=\"mx_Login_box\">\n+                    <div className=\"mx_Login_logo\">\n+                        <img src=\"img/logo.png\" width=\"249\" height=\"78\" alt=\"vector\"/>\n+                    </div>\n+                    <div>\n+                        <h2>Sign in</h2>\n+                        { this.componentForStep(this._getCurrentFlowStep()) }\n+                        <ServerConfig ref=\"serverConfig\"\n+                            withToggleButton={true}\n+                            defaultHsUrl={this.props.homeserverUrl}\n+                            defaultIsUrl={this.props.identityServerUrl}\n+                            onHsUrlChanged={this.onHsUrlChanged}\n+                            onIsUrlChanged={this.onIsUrlChanged}\n+                            delayTimeMs={1000}/>\n+                        <div className=\"mx_Login_error\">\n+                                { loader }\n+                                { this.state.errorText }\n+                        </div>\n+                        <a className=\"mx_Login_create\" onClick={this.props.onRegisterClick} href=\"#\">\n+                            Create a new account\n+                        </a>\n+                        <br/>\n+                        <div className=\"mx_Login_links\">\n+                            <a href=\"https://medium.com/@Vector\">blog</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;\n+                            <a href=\"https://twitter.com/@VectorCo\">twitter</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;\n+                            <a href=\"https://github.com/vector-im/vector-web\">github</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;","path":"src/components/structures/login/Login.js","position":191,"original_position":191,"commit_id":"1e694da4603fa856dfe59b711887e6b2b909bf4e","original_commit_id":"1e694da4603fa856dfe59b711887e6b2b909bf4e","user":{"login":"dbkr","id":986903,"avatar_url":"https://avatars.githubusercontent.com/u/986903?v=3","gravatar_id":"","url":"https://api.github.com/users/dbkr","html_url":"https://github.com/dbkr","followers_url":"https://api.github.com/users/dbkr/followers","following_url":"https://api.github.com/users/dbkr/following{/other_user}","gists_url":"https://api.github.com/users/dbkr/gists{/gist_id}","starred_url":"https://api.github.com/users/dbkr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dbkr/subscriptions","organizations_url":"https://api.github.com/users/dbkr/orgs","repos_url":"https://api.github.com/users/dbkr/repos","events_url":"https://api.github.com/users/dbkr/events{/privacy}","received_events_url":"https://api.github.com/users/dbkr/received_events","type":"User","site_admin":false},"body":"More vectors","created_at":"2015-12-01T11:54:48Z","updated_at":"2015-12-01T11:54:48Z","html_url":"https://github.com/matrix-org/matrix-react-sdk/pull/42#discussion_r46269177","pull_request_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls/42","_links":{"self":{"href":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls/comments/46269177"},"html":{"href":"https://github.com/matrix-org/matrix-react-sdk/pull/42#discussion_r46269177"},"pull_request":{"href":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls/42"}}},"pull_request":{"url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls/42","id":52241737,"html_url":"https://github.com/matrix-org/matrix-react-sdk/pull/42","diff_url":"https://github.com/matrix-org/matrix-react-sdk/pull/42.diff","patch_url":"https://github.com/matrix-org/matrix-react-sdk/pull/42.patch","issue_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/issues/42","number":42,"state":"open","locked":false,"title":"Phase 4 controller merging","user":{"login":"Kegsay","id":7190048,"avatar_url":"https://avatars.githubusercontent.com/u/7190048?v=3","gravatar_id":"","url":"https://api.github.com/users/Kegsay","html_url":"https://github.com/Kegsay","followers_url":"https://api.github.com/users/Kegsay/followers","following_url":"https://api.github.com/users/Kegsay/following{/other_user}","gists_url":"https://api.github.com/users/Kegsay/gists{/gist_id}","starred_url":"https://api.github.com/users/Kegsay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kegsay/subscriptions","organizations_url":"https://api.github.com/users/Kegsay/orgs","repos_url":"https://api.github.com/users/Kegsay/repos","events_url":"https://api.github.com/users/Kegsay/events{/privacy}","received_events_url":"https://api.github.com/users/Kegsay/received_events","type":"User","site_admin":false},"body":"This PR is the final phase to finish merging all controller/views between react SDK and Vector.\r\n\r\nThe following additional changes have been made:\r\n - Move `src/DateUtils.js`and `src/Resend.js` from vector to react SDK.\r\n - Dependency inject a `ConferenceHandler` into `MatrixChat` in vector-web's `src/vector/index.js`. This removes the need for the `Modulator`.\r\n - Move the `Notifier` to be a pure logic class like everything else. It was masquerading as a UI component even though it's not a React class.\r\n\r\nAfter this PR lands we're mostly over the hill on the restructure. See https://github.com/vector-im/vector-web/pull/448 for the vector changes.","created_at":"2015-12-01T10:43:56Z","updated_at":"2015-12-01T11:54:48Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7651c29fe07f66728b1ac714e9ab10b857c903cb","assignee":{"login":"dbkr","id":986903,"avatar_url":"https://avatars.githubusercontent.com/u/986903?v=3","gravatar_id":"","url":"https://api.github.com/users/dbkr","html_url":"https://github.com/dbkr","followers_url":"https://api.github.com/users/dbkr/followers","following_url":"https://api.github.com/users/dbkr/following{/other_user}","gists_url":"https://api.github.com/users/dbkr/gists{/gist_id}","starred_url":"https://api.github.com/users/dbkr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dbkr/subscriptions","organizations_url":"https://api.github.com/users/dbkr/orgs","repos_url":"https://api.github.com/users/dbkr/repos","events_url":"https://api.github.com/users/dbkr/events{/privacy}","received_events_url":"https://api.github.com/users/dbkr/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls/42/commits","review_comments_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls/42/comments","review_comment_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls/comments{/number}","comments_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/issues/42/comments","statuses_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/statuses/1e694da4603fa856dfe59b711887e6b2b909bf4e","head":{"label":"matrix-org:kegan/controller-merging4","ref":"kegan/controller-merging4","sha":"1e694da4603fa856dfe59b711887e6b2b909bf4e","user":{"login":"matrix-org","id":8418310,"avatar_url":"https://avatars.githubusercontent.com/u/8418310?v=3","gravatar_id":"","url":"https://api.github.com/users/matrix-org","html_url":"https://github.com/matrix-org","followers_url":"https://api.github.com/users/matrix-org/followers","following_url":"https://api.github.com/users/matrix-org/following{/other_user}","gists_url":"https://api.github.com/users/matrix-org/gists{/gist_id}","starred_url":"https://api.github.com/users/matrix-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matrix-org/subscriptions","organizations_url":"https://api.github.com/users/matrix-org/orgs","repos_url":"https://api.github.com/users/matrix-org/repos","events_url":"https://api.github.com/users/matrix-org/events{/privacy}","received_events_url":"https://api.github.com/users/matrix-org/received_events","type":"Organization","site_admin":false},"repo":{"id":37144575,"name":"matrix-react-sdk","full_name":"matrix-org/matrix-react-sdk","owner":{"login":"matrix-org","id":8418310,"avatar_url":"https://avatars.githubusercontent.com/u/8418310?v=3","gravatar_id":"","url":"https://api.github.com/users/matrix-org","html_url":"https://github.com/matrix-org","followers_url":"https://api.github.com/users/matrix-org/followers","following_url":"https://api.github.com/users/matrix-org/following{/other_user}","gists_url":"https://api.github.com/users/matrix-org/gists{/gist_id}","starred_url":"https://api.github.com/users/matrix-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matrix-org/subscriptions","organizations_url":"https://api.github.com/users/matrix-org/orgs","repos_url":"https://api.github.com/users/matrix-org/repos","events_url":"https://api.github.com/users/matrix-org/events{/privacy}","received_events_url":"https://api.github.com/users/matrix-org/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/matrix-org/matrix-react-sdk","description":"Matrix SDK for React Javascript","fork":false,"url":"https://api.github.com/repos/matrix-org/matrix-react-sdk","forks_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/forks","keys_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/teams","hooks_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/hooks","issue_events_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/issues/events{/number}","events_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/events","assignees_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/assignees{/user}","branches_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/branches{/branch}","tags_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/tags","blobs_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/git/refs{/sha}","trees_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/statuses/{sha}","languages_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/languages","stargazers_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/stargazers","contributors_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/contributors","subscribers_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/subscribers","subscription_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/subscription","commits_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/commits{/sha}","git_commits_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/git/commits{/sha}","comments_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/comments{/number}","issue_comment_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/issues/comments{/number}","contents_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/contents/{+path}","compare_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/merges","archive_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/downloads","issues_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/issues{/number}","pulls_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls{/number}","milestones_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/milestones{/number}","notifications_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/labels{/name}","releases_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/releases{/id}","created_at":"2015-06-09T16:37:07Z","updated_at":"2015-11-30T22:07:52Z","pushed_at":"2015-12-01T11:20:06Z","git_url":"git://github.com/matrix-org/matrix-react-sdk.git","ssh_url":"git@github.com:matrix-org/matrix-react-sdk.git","clone_url":"https://github.com/matrix-org/matrix-react-sdk.git","svn_url":"https://github.com/matrix-org/matrix-react-sdk","homepage":null,"size":1026,"stargazers_count":9,"watchers_count":9,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":4,"forks":5,"open_issues":4,"watchers":9,"default_branch":"master"}},"base":{"label":"matrix-org:develop","ref":"develop","sha":"c67005c306bc31e3d631e0426b5ec870e0db6882","user":{"login":"matrix-org","id":8418310,"avatar_url":"https://avatars.githubusercontent.com/u/8418310?v=3","gravatar_id":"","url":"https://api.github.com/users/matrix-org","html_url":"https://github.com/matrix-org","followers_url":"https://api.github.com/users/matrix-org/followers","following_url":"https://api.github.com/users/matrix-org/following{/other_user}","gists_url":"https://api.github.com/users/matrix-org/gists{/gist_id}","starred_url":"https://api.github.com/users/matrix-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matrix-org/subscriptions","organizations_url":"https://api.github.com/users/matrix-org/orgs","repos_url":"https://api.github.com/users/matrix-org/repos","events_url":"https://api.github.com/users/matrix-org/events{/privacy}","received_events_url":"https://api.github.com/users/matrix-org/received_events","type":"Organization","site_admin":false},"repo":{"id":37144575,"name":"matrix-react-sdk","full_name":"matrix-org/matrix-react-sdk","owner":{"login":"matrix-org","id":8418310,"avatar_url":"https://avatars.githubusercontent.com/u/8418310?v=3","gravatar_id":"","url":"https://api.github.com/users/matrix-org","html_url":"https://github.com/matrix-org","followers_url":"https://api.github.com/users/matrix-org/followers","following_url":"https://api.github.com/users/matrix-org/following{/other_user}","gists_url":"https://api.github.com/users/matrix-org/gists{/gist_id}","starred_url":"https://api.github.com/users/matrix-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matrix-org/subscriptions","organizations_url":"https://api.github.com/users/matrix-org/orgs","repos_url":"https://api.github.com/users/matrix-org/repos","events_url":"https://api.github.com/users/matrix-org/events{/privacy}","received_events_url":"https://api.github.com/users/matrix-org/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/matrix-org/matrix-react-sdk","description":"Matrix SDK for React Javascript","fork":false,"url":"https://api.github.com/repos/matrix-org/matrix-react-sdk","forks_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/forks","keys_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/teams","hooks_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/hooks","issue_events_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/issues/events{/number}","events_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/events","assignees_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/assignees{/user}","branches_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/branches{/branch}","tags_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/tags","blobs_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/git/refs{/sha}","trees_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/statuses/{sha}","languages_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/languages","stargazers_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/stargazers","contributors_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/contributors","subscribers_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/subscribers","subscription_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/subscription","commits_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/commits{/sha}","git_commits_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/git/commits{/sha}","comments_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/comments{/number}","issue_comment_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/issues/comments{/number}","contents_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/contents/{+path}","compare_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/merges","archive_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/downloads","issues_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/issues{/number}","pulls_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls{/number}","milestones_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/milestones{/number}","notifications_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/labels{/name}","releases_url":"https://api.github.com/repos/matrix-org/matrix-react-sdk/releases{/id}","created_at":"2015-06-09T16:37:07Z","updated_at":"2015-11-30T22:07:52Z","pushed_at":"2015-12-01T11:20:06Z","git_url":"git://github.com/matrix-org/matrix-react-sdk.git","ssh_url":"git@github.com:matrix-org/matrix-react-sdk.git","clone_url":"https://github.com/matrix-org/matrix-react-sdk.git","svn_url":"https://github.com/matrix-org/matrix-react-sdk","homepage":null,"size":1026,"stargazers_count":9,"watchers_count":9,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":4,"forks":5,"open_issues":4,"watchers":9,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls/42"},"html":{"href":"https://github.com/matrix-org/matrix-react-sdk/pull/42"},"issue":{"href":"https://api.github.com/repos/matrix-org/matrix-react-sdk/issues/42"},"comments":{"href":"https://api.github.com/repos/matrix-org/matrix-react-sdk/issues/42/comments"},"review_comments":{"href":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls/42/comments"},"review_comment":{"href":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/matrix-org/matrix-react-sdk/pulls/42/commits"},"statuses":{"href":"https://api.github.com/repos/matrix-org/matrix-react-sdk/statuses/1e694da4603fa856dfe59b711887e6b2b909bf4e"}}}}