From b1371d5316aabdc67a6da54b46560df609e7de92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Sun, 15 May 2022 17:00:32 +0200 Subject: [PATCH 1/8] Make `disabled` optional MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/components/views/elements/ToggleSwitch.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/elements/ToggleSwitch.tsx b/src/components/views/elements/ToggleSwitch.tsx index 154a89a73ff..f56633786a9 100644 --- a/src/components/views/elements/ToggleSwitch.tsx +++ b/src/components/views/elements/ToggleSwitch.tsx @@ -25,7 +25,7 @@ interface IProps { checked: boolean; // Whether or not the user can interact with the switch - disabled: boolean; + disabled?: boolean; // Called when the checked state changes. First argument will be the new state. onChange(checked: boolean): void; From e2b8629be5a69ac36f367f5d127fb1badeb9cf1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Sun, 15 May 2022 17:16:04 +0200 Subject: [PATCH 2/8] Add support for disabling spell check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- res/css/views/settings/tabs/_SettingsTab.scss | 2 ++ .../tabs/user/_GeneralUserSettingsTab.scss | 4 +++ .../tabs/user/GeneralUserSettingsTab.tsx | 36 +++++++++++++------ src/i18n/strings/en_EN.json | 2 +- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/res/css/views/settings/tabs/_SettingsTab.scss b/res/css/views/settings/tabs/_SettingsTab.scss index 9b187a2f8cb..fb9461e2ce6 100644 --- a/res/css/views/settings/tabs/_SettingsTab.scss +++ b/res/css/views/settings/tabs/_SettingsTab.scss @@ -28,6 +28,7 @@ limitations under the License. color: $primary-content; margin-bottom: 10px; margin-top: 10px; + margin-right: 100px; } .mx_SettingsTab_heading:nth-child(n + 2) { @@ -41,6 +42,7 @@ limitations under the License. color: $primary-content; margin-bottom: 10px; margin-top: 12px; + margin-right: 100px; } .mx_SettingsTab_subsectionText { diff --git a/res/css/views/settings/tabs/user/_GeneralUserSettingsTab.scss b/res/css/views/settings/tabs/user/_GeneralUserSettingsTab.scss index 8b73e690315..cc9ca47d26a 100644 --- a/res/css/views/settings/tabs/user/_GeneralUserSettingsTab.scss +++ b/res/css/views/settings/tabs/user/_GeneralUserSettingsTab.scss @@ -46,3 +46,7 @@ limitations under the License. .mx_GeneralUserSettingsTab_warningIcon { vertical-align: middle; } + +.mx_SettingsTab_section_spellcheck .mx_ToggleSwitch { + float: right; +} diff --git a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx index 36d3e55d852..057e92a3e88 100644 --- a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx @@ -50,6 +50,7 @@ import ChangePassword from "../../ChangePassword"; import InlineTermsAgreement from "../../../terms/InlineTermsAgreement"; import SetIdServer from "../../SetIdServer"; import SetIntegrationManager from "../../SetIntegrationManager"; +import ToggleSwitch from "../../../elements/ToggleSwitch"; interface IProps { closeSettingsFn: () => void; @@ -57,6 +58,7 @@ interface IProps { interface IState { language: string; + spellCheckEnabled: boolean; spellCheckLanguages: string[]; haveIdServer: boolean; serverSupportsSeparateAddAndBind: boolean; @@ -85,6 +87,7 @@ export default class GeneralUserSettingsTab extends React.Component { - const plaf = PlatformPeg.get(); - if (plaf) { + const spellCheckLanguages = await PlatformPeg.get().getSpellCheckLanguages(); + + if (spellCheckLanguages) { this.setState({ - spellCheckLanguages: await plaf.getSpellCheckLanguages(), + spellCheckEnabled: Boolean(spellCheckLanguages.length), + spellCheckLanguages, }); } } @@ -238,10 +243,15 @@ export default class GeneralUserSettingsTab extends React.Component { this.setState({ spellCheckLanguages: languages }); + PlatformPeg.get()?.setSpellCheckLanguages(languages); + }; - const plaf = PlatformPeg.get(); - if (plaf) { - plaf.setSpellCheckLanguages(languages); + private onSpellCheckEnabledChange = (spellCheckEnabled: boolean): void => { + this.setState({ spellCheckEnabled }); + + if (!spellCheckEnabled) { + this.setState({ spellCheckLanguages: [] }); + PlatformPeg.get()?.setSpellCheckLanguages([]); } }; @@ -368,12 +378,18 @@ export default class GeneralUserSettingsTab extends React.Component - { _t("Spell check dictionaries") } - + + { _t("Spell check") } + + + { this.state.spellCheckEnabled && + /> } ); } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index ede1176ef68..a58108d015c 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1432,7 +1432,7 @@ "Set a new account password...": "Set a new account password...", "Account": "Account", "Language and region": "Language and region", - "Spell check dictionaries": "Spell check dictionaries", + "Spell check": "Spell check", "Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.", "Account management": "Account management", "Deactivating your account is a permanent action - be careful!": "Deactivating your account is a permanent action - be careful!", From 2d71fcf54b832476c9fec7a35463c3786b96c95b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Mon, 16 May 2022 16:13:34 +0200 Subject: [PATCH 3/8] Show spell check settings on macOS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- .../settings/tabs/user/GeneralUserSettingsTab.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx index 057e92a3e88..81aea9b0014 100644 --- a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx @@ -51,6 +51,7 @@ import InlineTermsAgreement from "../../../terms/InlineTermsAgreement"; import SetIdServer from "../../SetIdServer"; import SetIntegrationManager from "../../SetIntegrationManager"; import ToggleSwitch from "../../../elements/ToggleSwitch"; +import { IS_MAC } from "../../../../../Keyboard"; interface IProps { closeSettingsFn: () => void; @@ -249,7 +250,12 @@ export default class GeneralUserSettingsTab extends React.Component { this.setState({ spellCheckEnabled }); - if (!spellCheckEnabled) { + if (spellCheckEnabled && IS_MAC) { + // XXX: On macOS the languages are controlled by the system + // settings, so we just set something, so that spell check gets + // enabled + PlatformPeg.get()?.setSpellCheckLanguages(["en_US"]); + } else if (!spellCheckEnabled) { this.setState({ spellCheckLanguages: [] }); PlatformPeg.get()?.setSpellCheckLanguages([]); } @@ -386,7 +392,7 @@ export default class GeneralUserSettingsTab extends React.Component - { this.state.spellCheckEnabled && } From 7e36a202567aacb3956da90e10d243de3c224cde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Tue, 17 May 2022 07:44:03 +0200 Subject: [PATCH 4/8] `supportsMultiLanguageSpellCheck()` -> `supportsSpellCheckSettings()` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/BasePlatform.ts | 2 +- .../views/settings/tabs/user/GeneralUserSettingsTab.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BasePlatform.ts b/src/BasePlatform.ts index 95f34597635..1bf7c813884 100644 --- a/src/BasePlatform.ts +++ b/src/BasePlatform.ts @@ -141,7 +141,7 @@ export default abstract class BasePlatform { * Return true if platform supports multi-language * spell-checking, otherwise false. */ - supportsMultiLanguageSpellCheck(): boolean { + supportsSpellCheckSettings(): boolean { return false; } diff --git a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx index 81aea9b0014..e875025bae1 100644 --- a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx @@ -471,7 +471,7 @@ export default class GeneralUserSettingsTab extends React.Component Date: Sun, 26 Jun 2022 11:45:04 +0200 Subject: [PATCH 5/8] Improve the way we handle enabling/disabling spell check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- res/css/views/settings/tabs/_SettingsTab.scss | 2 ++ src/BasePlatform.ts | 6 ++++++ .../settings/tabs/user/GeneralUserSettingsTab.tsx | 14 +++----------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/res/css/views/settings/tabs/_SettingsTab.scss b/res/css/views/settings/tabs/_SettingsTab.scss index 583e0374f47..71c4d3117c2 100644 --- a/res/css/views/settings/tabs/_SettingsTab.scss +++ b/res/css/views/settings/tabs/_SettingsTab.scss @@ -36,6 +36,7 @@ limitations under the License. color: $primary-content; margin-top: 10px; // TODO: Use a spacing variable margin-bottom: 10px; // TODO: Use a spacing variable + margin-right: 100px; // TODO: Use a spacing variable &:nth-child(n + 2) { margin-top: 30px; // TODO: Use a spacing variable @@ -49,6 +50,7 @@ limitations under the License. color: $primary-content; margin-top: $spacing-12; margin-bottom: 10px; // TODO: Use a spacing variable + margin-right: 100px; // TODO: Use a spacing variable } .mx_SettingsTab_subsectionText { diff --git a/src/BasePlatform.ts b/src/BasePlatform.ts index 600d809e364..f2a95955fa7 100644 --- a/src/BasePlatform.ts +++ b/src/BasePlatform.ts @@ -266,6 +266,12 @@ export default abstract class BasePlatform { public setLanguage(preferredLangs: string[]) {} + public setSpellCheckEnabled(enabled: boolean): void {} + + public async getSpellCheckEnabled(): Promise { + return null; + } + public setSpellCheckLanguages(preferredLangs: string[]) {} public getSpellCheckLanguages(): Promise | null { diff --git a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx index cd977c686c8..0e19b9bc169 100644 --- a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx @@ -130,11 +130,12 @@ export default class GeneralUserSettingsTab extends React.Component { + const spellCheckEnabled = await PlatformPeg.get().getSpellCheckEnabled(); const spellCheckLanguages = await PlatformPeg.get().getSpellCheckLanguages(); if (spellCheckLanguages) { this.setState({ - spellCheckEnabled: Boolean(spellCheckLanguages.length), + spellCheckEnabled, spellCheckLanguages, }); } @@ -249,16 +250,7 @@ export default class GeneralUserSettingsTab extends React.Component { this.setState({ spellCheckEnabled }); - - if (spellCheckEnabled && IS_MAC) { - // XXX: On macOS the languages are controlled by the system - // settings, so we just set something, so that spell check gets - // enabled - PlatformPeg.get()?.setSpellCheckLanguages(["en_US"]); - } else if (!spellCheckEnabled) { - this.setState({ spellCheckLanguages: [] }); - PlatformPeg.get()?.setSpellCheckLanguages([]); - } + PlatformPeg.get()?.setSpellCheckEnabled(spellCheckEnabled); }; private onPasswordChangeError = (err): void => { From 6e8f0de3365bb9aa04487ec213b98e19cfaed158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Wed, 13 Jul 2022 11:23:50 +0200 Subject: [PATCH 6/8] Add `Promise.all()` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- .../views/settings/tabs/user/GeneralUserSettingsTab.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx index 0e19b9bc169..ffcd12f3cc5 100644 --- a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx @@ -130,8 +130,11 @@ export default class GeneralUserSettingsTab extends React.Component { - const spellCheckEnabled = await PlatformPeg.get().getSpellCheckEnabled(); - const spellCheckLanguages = await PlatformPeg.get().getSpellCheckLanguages(); + const plat = PlatformPeg.get(); + const [spellCheckEnabled, spellCheckLanguages] = await Promise.all([ + plat.getSpellCheckEnabled(), + plat.getSpellCheckLanguages(), + ]); if (spellCheckLanguages) { this.setState({ From 0d8158b89499f48e4d532c42c85b2f402dff63f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Thu, 28 Jul 2022 09:38:20 +0200 Subject: [PATCH 7/8] Add a placeholder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/components/views/elements/Dropdown.tsx | 4 +++- src/components/views/elements/SpellCheckLanguagesDropdown.tsx | 4 +++- src/components/views/settings/SpellCheckSettings.tsx | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/components/views/elements/Dropdown.tsx b/src/components/views/elements/Dropdown.tsx index 4f572875a57..b9d8122ec55 100644 --- a/src/components/views/elements/Dropdown.tsx +++ b/src/components/views/elements/Dropdown.tsx @@ -82,6 +82,8 @@ interface IProps { // width. menuWidth?: number; searchEnabled?: boolean; + // Placeholder to show when no value is selected + placeholder?: string; // Called when the selected option changes onOptionChange(dropdownKey: string): void; // Called when the value of the search field changes @@ -362,7 +364,7 @@ export default class Dropdown extends React.Component { this.props.getShortOption(this.props.value) : this.childrenByKey[this.props.value]; currentValue =
- { selectedChild } + { selectedChild || this.props.placeholder }
; } diff --git a/src/components/views/elements/SpellCheckLanguagesDropdown.tsx b/src/components/views/elements/SpellCheckLanguagesDropdown.tsx index a269ac00106..b7a8083e72d 100644 --- a/src/components/views/elements/SpellCheckLanguagesDropdown.tsx +++ b/src/components/views/elements/SpellCheckLanguagesDropdown.tsx @@ -116,7 +116,9 @@ export default class SpellCheckLanguagesDropdown extends React.Component + label={_t("Language Dropdown")} + placeholder={_t("Choose a locale")} + > { options } ; } diff --git a/src/components/views/settings/SpellCheckSettings.tsx b/src/components/views/settings/SpellCheckSettings.tsx index 83c3492a874..abccadb74f5 100644 --- a/src/components/views/settings/SpellCheckSettings.tsx +++ b/src/components/views/settings/SpellCheckSettings.tsx @@ -72,6 +72,7 @@ export default class SpellCheckLanguages extends React.Component Date: Thu, 28 Jul 2022 09:40:57 +0200 Subject: [PATCH 8/8] i18n MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/i18n/strings/en_EN.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 7ff3d358c3f..88454032939 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2377,6 +2377,7 @@ "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use %(brand)s with an existing Matrix account on a different homeserver.": "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use %(brand)s with an existing Matrix account on a different homeserver.", "Join millions for free on the largest public server": "Join millions for free on the largest public server", "Homeserver": "Homeserver", + "Choose a locale": "Choose a locale", "Continue with %(provider)s": "Continue with %(provider)s", "Sign in with single sign-on": "Sign in with single sign-on", "And %(count)s more...|other": "And %(count)s more...",