;
} else if (this.state.error) {
return this.state.error;
@@ -164,9 +164,9 @@ export default class SetIdServer extends React.Component {
} else {
sectionTitle = _t("Identity Server");
bodyText = _t(
- "You are not currently using an Identity Server. " +
+ "You are not currently using an identity server. " +
"To discover and be discoverable by existing contacts you know, " +
- "add one below",
+ "add one below.",
);
}
From 860a9dbc820bb25c3a768657496ccfb9bc8ace3e Mon Sep 17 00:00:00 2001
From: David Baker
Date: Tue, 13 Aug 2019 11:01:04 +0100
Subject: [PATCH 22/33] s/tooltip/tooltipContent/
---
src/components/views/elements/Field.js | 9 ++++-----
src/components/views/settings/SetIdServer.js | 2 +-
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/src/components/views/elements/Field.js b/src/components/views/elements/Field.js
index 084ec1bd6a..8272b36639 100644
--- a/src/components/views/elements/Field.js
+++ b/src/components/views/elements/Field.js
@@ -48,7 +48,7 @@ export default class Field extends React.PureComponent {
onValidate: PropTypes.func,
// If specified, contents will appear as a tooltip on the element and
// validation feedback tooltips will be suppressed.
- tooltip: PropTypes.node,
+ tooltipContent: PropTypes.node,
// All other props pass through to the .
};
@@ -137,8 +137,7 @@ export default class Field extends React.PureComponent {
}, VALIDATION_THROTTLE_MS);
render() {
- const { element, prefix, onValidate, children, ...inputProps } = this.props;
- delete inputProps.tooltip; // needs to be removed from props but we don't need it here
+ const { element, prefix, onValidate, children, tooltipContent, ...inputProps } = this.props;
const inputElement = element || "input";
@@ -170,11 +169,11 @@ export default class Field extends React.PureComponent {
// Handle displaying feedback on validity
const Tooltip = sdk.getComponent("elements.Tooltip");
let fieldTooltip;
- if (this.props.tooltip || this.state.feedback) {
+ if (tooltipContent || this.state.feedback) {
fieldTooltip = ;
}
diff --git a/src/components/views/settings/SetIdServer.js b/src/components/views/settings/SetIdServer.js
index b20f6930e5..9fa67379d0 100644
--- a/src/components/views/settings/SetIdServer.js
+++ b/src/components/views/settings/SetIdServer.js
@@ -182,7 +182,7 @@ export default class SetIdServer extends React.Component {
id="mx_SetIdServer_idServer"
type="text" value={this.state.idServer} autoComplete="off"
onChange={this._onIdentityServerChanged}
- tooltip={this._getTooltip()}
+ tooltipContent={this._getTooltip()}
/>
Date: Tue, 13 Aug 2019 11:05:41 +0100
Subject: [PATCH 23/33] link to doc issue
---
src/components/views/settings/SetIdServer.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/components/views/settings/SetIdServer.js b/src/components/views/settings/SetIdServer.js
index 9fa67379d0..a9762b6e50 100644
--- a/src/components/views/settings/SetIdServer.js
+++ b/src/components/views/settings/SetIdServer.js
@@ -72,6 +72,7 @@ async function checkIdentityServerUrl(url) {
request(
// also XXX: we don't really know whether to hit /v1 or /v2 for this: we
// probably want a /versions endpoint like the C/S API.
+ // https://github.com/matrix-org/matrix-doc/issues/1665
{ method: "GET", url: isUrl + '/_matrix/identity/api/v1' },
(err, response, body) => {
if (err) {
From e07c22a78d1024e678ddc7ab3900490145256d83 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Tue, 13 Aug 2019 12:53:14 +0100
Subject: [PATCH 24/33] Make mixin for fields in settings that need to be the
same width
and make that width narrower so we can fit a tooltip in the left
hand side (they were a little too wide anyway for the kind of data
being entered, even on a narrow window).
---
res/css/_common.scss | 4 ++++
res/css/views/settings/_ProfileSettings.scss | 4 ++++
res/css/views/settings/_SetIdServer.scss | 2 +-
.../views/settings/tabs/user/_GeneralUserSettingsTab.scss | 8 ++++----
.../settings/tabs/user/_PreferencesUserSettingsTab.scss | 2 +-
.../views/settings/tabs/user/_VoiceUserSettingsTab.scss | 2 +-
6 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/res/css/_common.scss b/res/css/_common.scss
index 517ced43fb..1b7c8ec938 100644
--- a/res/css/_common.scss
+++ b/res/css/_common.scss
@@ -559,3 +559,7 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus {
.mx_Username_color8 {
color: $username-variant8-color;
}
+
+@define-mixin mx_Settings_fullWidthField {
+ margin-right: 200px;
+}
diff --git a/res/css/views/settings/_ProfileSettings.scss b/res/css/views/settings/_ProfileSettings.scss
index 3e97a0ff6d..161cd7fa7a 100644
--- a/res/css/views/settings/_ProfileSettings.scss
+++ b/res/css/views/settings/_ProfileSettings.scss
@@ -30,6 +30,10 @@ limitations under the License.
margin-top: 0;
}
+.mx_ProfileSettings_controls .mx_Field {
+ margin-right: 100px;
+}
+
.mx_ProfileSettings_hostingSignup {
margin-left: 20px;
diff --git a/res/css/views/settings/_SetIdServer.scss b/res/css/views/settings/_SetIdServer.scss
index cc58a61073..55ad6eef02 100644
--- a/res/css/views/settings/_SetIdServer.scss
+++ b/res/css/views/settings/_SetIdServer.scss
@@ -15,5 +15,5 @@ limitations under the License.
*/
.mx_SetIdServer .mx_Field_input {
- width: 300px;
+ @mixin mx_Settings_fullWidthField;
}
diff --git a/res/css/views/settings/tabs/user/_GeneralUserSettingsTab.scss b/res/css/views/settings/tabs/user/_GeneralUserSettingsTab.scss
index 091c98ffb8..16467165cf 100644
--- a/res/css/views/settings/tabs/user/_GeneralUserSettingsTab.scss
+++ b/res/css/views/settings/tabs/user/_GeneralUserSettingsTab.scss
@@ -16,15 +16,15 @@ limitations under the License.
.mx_GeneralUserSettingsTab_changePassword .mx_Field,
.mx_GeneralUserSettingsTab_themeSection .mx_Field {
- margin-right: 100px; // Align with the other fields on the page
+ @mixin mx_Settings_fullWidthField;
}
.mx_GeneralUserSettingsTab_changePassword .mx_Field:first-child {
margin-top: 0;
}
-.mx_GeneralUserSettingsTab_accountSection > .mx_EmailAddresses,
-.mx_GeneralUserSettingsTab_accountSection > .mx_PhoneNumbers,
+.mx_GeneralUserSettingsTab_accountSection .mx_EmailAddresses,
+.mx_GeneralUserSettingsTab_accountSection .mx_PhoneNumbers,
.mx_GeneralUserSettingsTab_languageInput {
- margin-right: 100px; // Align with the other fields on the page
+ @mixin mx_Settings_fullWidthField;
}
diff --git a/res/css/views/settings/tabs/user/_PreferencesUserSettingsTab.scss b/res/css/views/settings/tabs/user/_PreferencesUserSettingsTab.scss
index b3430f47af..d003e175d9 100644
--- a/res/css/views/settings/tabs/user/_PreferencesUserSettingsTab.scss
+++ b/res/css/views/settings/tabs/user/_PreferencesUserSettingsTab.scss
@@ -15,5 +15,5 @@ limitations under the License.
*/
.mx_PreferencesUserSettingsTab .mx_Field {
- margin-right: 100px; // Align with the rest of the controls
+ @mixin mx_Settings_fullWidthField;
}
diff --git a/res/css/views/settings/tabs/user/_VoiceUserSettingsTab.scss b/res/css/views/settings/tabs/user/_VoiceUserSettingsTab.scss
index 36c8cfd896..69d57bdba1 100644
--- a/res/css/views/settings/tabs/user/_VoiceUserSettingsTab.scss
+++ b/res/css/views/settings/tabs/user/_VoiceUserSettingsTab.scss
@@ -15,7 +15,7 @@ limitations under the License.
*/
.mx_VoiceUserSettingsTab .mx_Field {
- margin-right: 100px; // align with the rest of the fields
+ @mixin mx_Settings_fullWidthField;
}
.mx_VoiceUserSettingsTab_missingMediaPermissions {
From 02504b995924e29b3749d75775a301763aa903c7 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Tue, 13 Aug 2019 12:59:34 +0100
Subject: [PATCH 25/33] make it work again
---
src/components/views/settings/SetIdServer.js | 10 +++++-----
src/i18n/strings/en_EN.json | 8 ++++----
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/src/components/views/settings/SetIdServer.js b/src/components/views/settings/SetIdServer.js
index a9762b6e50..70140d4b6a 100644
--- a/src/components/views/settings/SetIdServer.js
+++ b/src/components/views/settings/SetIdServer.js
@@ -58,11 +58,11 @@ function unabbreviateUrl(u) {
/**
* Check an IS URL is valid, including liveness check
*
- * @param {string} isUrl The url to check
+ * @param {string} u The url to check
* @returns {string} null if url passes all checks, otherwise i18ned error string
*/
-async function checkIdentityServerUrl(url) {
- const parsedUrl = url.parse(isUrl);
+async function checkIdentityServerUrl(u) {
+ const parsedUrl = url.parse(u);
if (parsedUrl.protocol !== 'https:') return _t("Identity Server URL must be HTTPS");
@@ -73,7 +73,7 @@ async function checkIdentityServerUrl(url) {
// also XXX: we don't really know whether to hit /v1 or /v2 for this: we
// probably want a /versions endpoint like the C/S API.
// https://github.com/matrix-org/matrix-doc/issues/1665
- { method: "GET", url: isUrl + '/_matrix/identity/api/v1' },
+ { method: "GET", url: u + '/_matrix/identity/api/v1' },
(err, response, body) => {
if (err) {
resolve(_t("Could not connect to Identity Server"));
@@ -133,7 +133,7 @@ export default class SetIdServer extends React.Component {
const fullUrl = unabbreviateUrl(this.state.idServer);
- const errStr = await checkIsUrl(fullUrl);
+ const errStr = await checkIdentityServerUrl(fullUrl);
let newFormValue = this.state.idServer;
if (!errStr) {
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index 154871a977..5576ee6122 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -540,13 +540,13 @@
"Display Name": "Display Name",
"Save": "Save",
"Identity Server URL must be HTTPS": "Identity Server URL must be HTTPS",
- "Could not connect to ID Server": "Could not connect to ID Server",
- "Not a valid ID Server (status code %(code)s)": "Not a valid ID Server (status code %(code)s)",
- "Checking Server": "Checking Server",
+ "Could not connect to Identity Server": "Could not connect to Identity Server",
+ "Not a valid Identity Server (status code %(code)s)": "Not a valid Identity Server (status code %(code)s)",
+ "Checking server": "Checking server",
"Identity Server (%(server)s)": "Identity Server (%(server)s)",
"You are currently using to discover and be discoverable by existing contacts you know. You can change your identity server below.": "You are currently using to discover and be discoverable by existing contacts you know. You can change your identity server below.",
"Identity Server": "Identity Server",
- "You are not currently using an Identity Server. To discover and be discoverable by existing contacts you know, add one below": "You are not currently using an Identity Server. To discover and be discoverable by existing contacts you know, add one below",
+ "You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.",
"Change": "Change",
"Flair": "Flair",
"Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?",
From 050766e7bb73fba8fd7f6a2705ba82fa0e9448d2 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Tue, 13 Aug 2019 15:19:39 +0100
Subject: [PATCH 26/33] selector ordering
---
res/css/views/settings/_ProfileSettings.scss | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/res/css/views/settings/_ProfileSettings.scss b/res/css/views/settings/_ProfileSettings.scss
index 161cd7fa7a..afac75986f 100644
--- a/res/css/views/settings/_ProfileSettings.scss
+++ b/res/css/views/settings/_ProfileSettings.scss
@@ -26,14 +26,14 @@ limitations under the License.
height: 4em;
}
-.mx_ProfileSettings_controls .mx_Field:first-child {
- margin-top: 0;
-}
-
.mx_ProfileSettings_controls .mx_Field {
margin-right: 100px;
}
+.mx_ProfileSettings_controls .mx_Field:first-child {
+ margin-top: 0;
+}
+
.mx_ProfileSettings_hostingSignup {
margin-left: 20px;
From 7a9246533d0084d954709ebbadfe1cfffc156c1b Mon Sep 17 00:00:00 2001
From: David Baker
Date: Tue, 13 Aug 2019 15:40:03 +0100
Subject: [PATCH 27/33] Hack to ignore @define-mixin
as per bug in comment
---
.stylelintrc.js | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/.stylelintrc.js b/.stylelintrc.js
index 97e1ec8023..f028c76cc0 100644
--- a/.stylelintrc.js
+++ b/.stylelintrc.js
@@ -15,6 +15,9 @@ module.exports = {
"number-leading-zero": null,
"selector-list-comma-newline-after": null,
"at-rule-no-unknown": null,
- "scss/at-rule-no-unknown": true,
+ "scss/at-rule-no-unknown": [true, {
+ // https://github.com/vector-im/riot-web/issues/10544
+ "ignoreAtRules": ["define-mixin"],
+ }],
}
}
From 31fd36efba4eb9afca36e388ebf06a89dadac4a5 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Tue, 13 Aug 2019 16:20:30 +0100
Subject: [PATCH 28/33] use accessiblebutton
---
src/components/views/settings/SetIdServer.js | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/src/components/views/settings/SetIdServer.js b/src/components/views/settings/SetIdServer.js
index 70140d4b6a..72a47bd2ae 100644
--- a/src/components/views/settings/SetIdServer.js
+++ b/src/components/views/settings/SetIdServer.js
@@ -128,7 +128,9 @@ export default class SetIdServer extends React.Component {
return !!this.state.idServer && !this.state.busy;
};
- _saveIdServer = async () => {
+ _saveIdServer = async (e) => {
+ e.preventDefault();
+
this.setState({busy: true});
const fullUrl = unabbreviateUrl(this.state.idServer);
@@ -171,6 +173,7 @@ export default class SetIdServer extends React.Component {
);
}
+ const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
return (
);
}
From 2539da0dfa26ed9f11f825cfcde856f6f00ab7d7 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Tue, 13 Aug 2019 16:37:56 +0100
Subject: [PATCH 29/33] Use fetch instead of browser-request
---
src/components/views/settings/SetIdServer.js | 29 ++++++++------------
1 file changed, 12 insertions(+), 17 deletions(-)
diff --git a/src/components/views/settings/SetIdServer.js b/src/components/views/settings/SetIdServer.js
index 72a47bd2ae..5cc63ea261 100644
--- a/src/components/views/settings/SetIdServer.js
+++ b/src/components/views/settings/SetIdServer.js
@@ -68,23 +68,18 @@ async function checkIdentityServerUrl(u) {
// XXX: duplicated logic from js-sdk but it's quite tied up in the validation logic in the
// js-sdk so probably as easy to duplicate it than to separate it out so we can reuse it
- return new Promise((resolve) => {
- request(
- // also XXX: we don't really know whether to hit /v1 or /v2 for this: we
- // probably want a /versions endpoint like the C/S API.
- // https://github.com/matrix-org/matrix-doc/issues/1665
- { method: "GET", url: u + '/_matrix/identity/api/v1' },
- (err, response, body) => {
- if (err) {
- resolve(_t("Could not connect to Identity Server"));
- } else if (response.status < 200 || response.status >= 300) {
- resolve(_t("Not a valid Identity Server (status code %(code)s)", {code: response.status}));
- } else {
- resolve(null);
- }
- },
- );
- });
+ try {
+ const response = await fetch(u + '/_matrix/identity/api/v1');
+ if (response.ok) {
+ return null;
+ } else if (response.status < 200 || response.status >= 300) {
+ return _t("Not a valid Identity Server (status code %(code)s)", {code: response.status});
+ } else {
+ return _t("Could not connect to Identity Server");
+ }
+ } catch (e) {
+ return _t("Could not connect to Identity Server");
+ }
}
export default class SetIdServer extends React.Component {
From 596ff93049881211d94ffd312d3b1b880d3371d4 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Tue, 13 Aug 2019 16:38:46 +0100
Subject: [PATCH 30/33] unused import
---
src/components/views/settings/SetIdServer.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/components/views/settings/SetIdServer.js b/src/components/views/settings/SetIdServer.js
index 5cc63ea261..9012c4893b 100644
--- a/src/components/views/settings/SetIdServer.js
+++ b/src/components/views/settings/SetIdServer.js
@@ -14,7 +14,6 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-import request from 'browser-request';
import url from 'url';
import React from 'react';
import {_t} from "../../../languageHandler";
From c80c8dcf244d661102ecdadb4c306c7e45d599b9 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Tue, 13 Aug 2019 17:55:10 +0100
Subject: [PATCH 31/33] prefill id server box with default if there isn't one
---
src/components/views/settings/SetIdServer.js | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/components/views/settings/SetIdServer.js b/src/components/views/settings/SetIdServer.js
index 9012c4893b..f1600358aa 100644
--- a/src/components/views/settings/SetIdServer.js
+++ b/src/components/views/settings/SetIdServer.js
@@ -85,9 +85,11 @@ export default class SetIdServer extends React.Component {
constructor() {
super();
- let defaultIdServer = abbreviateUrl(MatrixClientPeg.get().getIdentityServerUrl());
- if (!defaultIdServer) {
- defaultIdServer = abbreviateUrl(SdkConfig.get()['validated_server_config']['idServer']) || '';
+ let defaultIdServer = '';
+ if (!MatrixClientPeg.get().getIdentityServerUrl() && SdkConfig.get()['validated_server_config']['isUrl']) {
+ // If no ID server is configured but there's one in the config, prepopulate
+ // the field to help the user.
+ defaultIdServer = abbreviateUrl(SdkConfig.get()['validated_server_config']['isUrl']);
}
this.state = {
From 7c35107a3736d9f03626a845c386f6e4ecc8df86 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Tue, 13 Aug 2019 18:40:27 +0100
Subject: [PATCH 32/33] Update 3pids section visibility when id server set /
unset
---
src/components/views/settings/SetIdServer.js | 4 +++-
.../settings/tabs/user/GeneralUserSettingsTab.js | 15 ++++++++++++++-
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/src/components/views/settings/SetIdServer.js b/src/components/views/settings/SetIdServer.js
index f1600358aa..22b2330f33 100644
--- a/src/components/views/settings/SetIdServer.js
+++ b/src/components/views/settings/SetIdServer.js
@@ -20,7 +20,7 @@ import {_t} from "../../../languageHandler";
import sdk from '../../../index';
import MatrixClientPeg from "../../../MatrixClientPeg";
import SdkConfig from "../../../SdkConfig";
-import Field from "../elements/Field";
+import dis from "../../../dispatcher";
/**
* If a url has no path component, etc. abbreviate it to just the hostname
@@ -138,6 +138,7 @@ export default class SetIdServer extends React.Component {
MatrixClientPeg.get().setIdentityServerUrl(fullUrl);
localStorage.removeItem("mx_is_access_token");
localStorage.setItem("mx_is_url", fullUrl);
+ dis.dispatch({action: 'id_server_changed'});
newFormValue = '';
}
this.setState({
@@ -170,6 +171,7 @@ export default class SetIdServer extends React.Component {
}
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
+ const Field = sdk.getComponent('elements.Field');
return (