+ { /* Instead of a blank placeholder, use a copy of the avatar itself. */ }
+ { provided.placeholder ? avatarClone : }
+
+ ) }
+
+
+ ) }
+
+ );
+ }
+
// XXX: Use onMouseDown as a workaround for https://github.com/atlassian/react-beautiful-dnd/issues/273
// instead of onClick. Otherwise we experience https://github.com/vector-im/riot-web/issues/6156
return
-
- { (droppableProvided, droppableSnapshot) => (
-
-
- { (provided, snapshot) => (
-
-
-
-
-
-
- { /* Instead of a blank placeholder, use a copy of the avatar itself. */ }
- { provided.placeholder ?
-
-
-
:
-
- }
-
- ) }
-
-
- ) }
-
+ { avatarElement }
{ name }
{ descElement }
diff --git a/src/components/views/settings/tabs/AdvancedRoomSettingsTab.js b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js
similarity index 93%
rename from src/components/views/settings/tabs/AdvancedRoomSettingsTab.js
rename to src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js
index 9b99622516..3c6a7addc3 100644
--- a/src/components/views/settings/tabs/AdvancedRoomSettingsTab.js
+++ b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js
@@ -16,11 +16,11 @@ limitations under the License.
import React from 'react';
import PropTypes from 'prop-types';
-import {_t} from "../../../../languageHandler";
-import MatrixClientPeg from "../../../../MatrixClientPeg";
-import sdk from "../../../../index";
-import AccessibleButton from "../../elements/AccessibleButton";
-import Modal from "../../../../Modal";
+import {_t} from "../../../../../languageHandler";
+import MatrixClientPeg from "../../../../../MatrixClientPeg";
+import sdk from "../../../../..";
+import AccessibleButton from "../../../elements/AccessibleButton";
+import Modal from "../../../../../Modal";
export default class AdvancedRoomSettingsTab extends React.Component {
static propTypes = {
diff --git a/src/components/views/settings/tabs/GeneralRoomSettingsTab.js b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js
similarity index 92%
rename from src/components/views/settings/tabs/GeneralRoomSettingsTab.js
rename to src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js
index f43fc8a682..5d707fcf16 100644
--- a/src/components/views/settings/tabs/GeneralRoomSettingsTab.js
+++ b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js
@@ -16,14 +16,14 @@ limitations under the License.
import React from 'react';
import PropTypes from 'prop-types';
-import {_t} from "../../../../languageHandler";
-import RoomProfileSettings from "../../room_settings/RoomProfileSettings";
-import MatrixClientPeg from "../../../../MatrixClientPeg";
-import sdk from "../../../../index";
-import AccessibleButton from "../../elements/AccessibleButton";
+import {_t} from "../../../../../languageHandler";
+import RoomProfileSettings from "../../../room_settings/RoomProfileSettings";
+import MatrixClientPeg from "../../../../../MatrixClientPeg";
+import sdk from "../../../../..";
+import AccessibleButton from "../../../elements/AccessibleButton";
import {MatrixClient} from "matrix-js-sdk";
-import dis from "../../../../dispatcher";
-import LabelledToggleSwitch from "../../elements/LabelledToggleSwitch";
+import dis from "../../../../../dispatcher";
+import LabelledToggleSwitch from "../../../elements/LabelledToggleSwitch";
export default class GeneralRoomSettingsTab extends React.Component {
static childContextTypes = {
diff --git a/src/components/views/settings/tabs/RolesRoomSettingsTab.js b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js
similarity index 98%
rename from src/components/views/settings/tabs/RolesRoomSettingsTab.js
rename to src/components/views/settings/tabs/room/RolesRoomSettingsTab.js
index d223e8f2e9..a6dac5a147 100644
--- a/src/components/views/settings/tabs/RolesRoomSettingsTab.js
+++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js
@@ -16,11 +16,11 @@ limitations under the License.
import React from 'react';
import PropTypes from 'prop-types';
-import {_t, _td} from "../../../../languageHandler";
-import MatrixClientPeg from "../../../../MatrixClientPeg";
-import sdk from "../../../../index";
-import AccessibleButton from "../../elements/AccessibleButton";
-import Modal from "../../../../Modal";
+import {_t, _td} from "../../../../../languageHandler";
+import MatrixClientPeg from "../../../../../MatrixClientPeg";
+import sdk from "../../../../..";
+import AccessibleButton from "../../../elements/AccessibleButton";
+import Modal from "../../../../../Modal";
const plEventsToLabels = {
// These will be translated for us later.
diff --git a/src/components/views/settings/tabs/SecurityRoomSettingsTab.js b/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.js
similarity index 96%
rename from src/components/views/settings/tabs/SecurityRoomSettingsTab.js
rename to src/components/views/settings/tabs/room/SecurityRoomSettingsTab.js
index 698f67dd18..a6eca3bf19 100644
--- a/src/components/views/settings/tabs/SecurityRoomSettingsTab.js
+++ b/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.js
@@ -16,11 +16,11 @@ limitations under the License.
import React from 'react';
import PropTypes from 'prop-types';
-import {_t} from "../../../../languageHandler";
-import MatrixClientPeg from "../../../../MatrixClientPeg";
-import sdk from "../../../../index";
-import LabelledToggleSwitch from "../../elements/LabelledToggleSwitch";
-import {SettingLevel} from "../../../../settings/SettingsStore";
+import {_t} from "../../../../../languageHandler";
+import MatrixClientPeg from "../../../../../MatrixClientPeg";
+import sdk from "../../../../..";
+import LabelledToggleSwitch from "../../../elements/LabelledToggleSwitch";
+import {SettingLevel} from "../../../../../settings/SettingsStore";
export default class SecurityRoomSettingsTab extends React.Component {
static propTypes = {
@@ -188,7 +188,7 @@ export default class SecurityRoomSettingsTab extends React.Component {
if (joinRule !== 'public' && guestAccess === 'forbidden') {
guestWarning = (
-
+
{_t("Guests cannot join this room even if explicitly invited.")}
{_t("Click here to fix")}
@@ -201,7 +201,7 @@ export default class SecurityRoomSettingsTab extends React.Component {
if (joinRule === 'public' && !hasAliases) {
aliasWarning = (
-
+
{_t("To link to this room, please add an alias.")}
diff --git a/src/components/views/settings/tabs/FlairSettingsTab.js b/src/components/views/settings/tabs/user/FlairUserSettingsTab.js
similarity index 74%
rename from src/components/views/settings/tabs/FlairSettingsTab.js
rename to src/components/views/settings/tabs/user/FlairUserSettingsTab.js
index db513a161a..0063a9a981 100644
--- a/src/components/views/settings/tabs/FlairSettingsTab.js
+++ b/src/components/views/settings/tabs/user/FlairUserSettingsTab.js
@@ -15,14 +15,13 @@ limitations under the License.
*/
import React from 'react';
-import {_t} from "../../../../languageHandler";
-import {DragDropContext} from "react-beautiful-dnd";
-import GroupUserSettings from "../../groups/GroupUserSettings";
-import MatrixClientPeg from "../../../../MatrixClientPeg";
+import {_t} from "../../../../../languageHandler";
+import GroupUserSettings from "../../../groups/GroupUserSettings";
+import MatrixClientPeg from "../../../../../MatrixClientPeg";
import PropTypes from "prop-types";
import {MatrixClient} from "matrix-js-sdk";
-export default class FlairSettingsTab extends React.Component {
+export default class FlairUserSettingsTab extends React.Component {
static childContextTypes = {
matrixClient: PropTypes.instanceOf(MatrixClient),
};
@@ -42,9 +41,7 @@ export default class FlairSettingsTab extends React.Component {
{_t("Flair")}
-
-
-
+
);
diff --git a/src/components/views/settings/tabs/GeneralUserSettingsTab.js b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js
similarity index 88%
rename from src/components/views/settings/tabs/GeneralUserSettingsTab.js
rename to src/components/views/settings/tabs/user/GeneralUserSettingsTab.js
index fd3274c9e0..093160e330 100644
--- a/src/components/views/settings/tabs/GeneralUserSettingsTab.js
+++ b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js
@@ -15,21 +15,21 @@ limitations under the License.
*/
import React from 'react';
-import {_t} from "../../../../languageHandler";
-import ProfileSettings from "../ProfileSettings";
-import EmailAddresses from "../EmailAddresses";
-import PhoneNumbers from "../PhoneNumbers";
-import Field from "../../elements/Field";
-import * as languageHandler from "../../../../languageHandler";
-import {SettingLevel} from "../../../../settings/SettingsStore";
-import SettingsStore from "../../../../settings/SettingsStore";
-import LanguageDropdown from "../../elements/LanguageDropdown";
-import AccessibleButton from "../../elements/AccessibleButton";
-import DeactivateAccountDialog from "../../dialogs/DeactivateAccountDialog";
-const PlatformPeg = require("../../../../PlatformPeg");
-const sdk = require('../../../../index');
-const Modal = require("../../../../Modal");
-const dis = require("../../../../dispatcher");
+import {_t} from "../../../../../languageHandler";
+import ProfileSettings from "../../ProfileSettings";
+import EmailAddresses from "../../EmailAddresses";
+import PhoneNumbers from "../../PhoneNumbers";
+import Field from "../../../elements/Field";
+import * as languageHandler from "../../../../../languageHandler";
+import {SettingLevel} from "../../../../../settings/SettingsStore";
+import SettingsStore from "../../../../../settings/SettingsStore";
+import LanguageDropdown from "../../../elements/LanguageDropdown";
+import AccessibleButton from "../../../elements/AccessibleButton";
+import DeactivateAccountDialog from "../../../dialogs/DeactivateAccountDialog";
+const PlatformPeg = require("../../../../../PlatformPeg");
+const sdk = require('../../../../..');
+const Modal = require("../../../../../Modal");
+const dis = require("../../../../../dispatcher");
export default class GeneralUserSettingsTab extends React.Component {
constructor() {
diff --git a/src/components/views/settings/tabs/HelpSettingsTab.js b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js
similarity index 90%
rename from src/components/views/settings/tabs/HelpSettingsTab.js
rename to src/components/views/settings/tabs/user/HelpUserSettingsTab.js
index 4ad62451cb..d001a3f2e6 100644
--- a/src/components/views/settings/tabs/HelpSettingsTab.js
+++ b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js
@@ -16,15 +16,15 @@ limitations under the License.
import React from 'react';
import PropTypes from 'prop-types';
-import {_t, getCurrentLanguage} from "../../../../languageHandler";
-import MatrixClientPeg from "../../../../MatrixClientPeg";
-import AccessibleButton from "../../elements/AccessibleButton";
-import SdkConfig from "../../../../SdkConfig";
-import createRoom from "../../../../createRoom";
-const packageJson = require('../../../../../package.json');
-const Modal = require("../../../../Modal");
-const sdk = require("../../../../index");
-const PlatformPeg = require("../../../../PlatformPeg");
+import {_t, getCurrentLanguage} from "../../../../../languageHandler";
+import MatrixClientPeg from "../../../../../MatrixClientPeg";
+import AccessibleButton from "../../../elements/AccessibleButton";
+import SdkConfig from "../../../../../SdkConfig";
+import createRoom from "../../../../../createRoom";
+const packageJson = require('../../../../../../package.json');
+const Modal = require("../../../../../Modal");
+const sdk = require("../../../../..");
+const PlatformPeg = require("../../../../../PlatformPeg");
// if this looks like a release, use the 'version' from package.json; else use
// the git sha. Prepend version with v, to look like riot-web version
@@ -45,7 +45,7 @@ const ghVersionLabel = function(repo, token='') {
return { token };
};
-export default class HelpSettingsTab extends React.Component {
+export default class HelpUserSettingsTab extends React.Component {
static propTypes = {
closeSettingsFn: PropTypes.func.isRequired,
};
@@ -117,7 +117,7 @@ export default class HelpSettingsTab extends React.Component {
}
return (
-
{_t("Devices")}
diff --git a/src/components/views/settings/tabs/VoiceSettingsTab.js b/src/components/views/settings/tabs/user/VoiceUserSettingsTab.js
similarity index 90%
rename from src/components/views/settings/tabs/VoiceSettingsTab.js
rename to src/components/views/settings/tabs/user/VoiceUserSettingsTab.js
index aefb114dd3..31791708e0 100644
--- a/src/components/views/settings/tabs/VoiceSettingsTab.js
+++ b/src/components/views/settings/tabs/user/VoiceUserSettingsTab.js
@@ -15,16 +15,16 @@ limitations under the License.
*/
import React from 'react';
-import {_t} from "../../../../languageHandler";
-import CallMediaHandler from "../../../../CallMediaHandler";
-import Field from "../../elements/Field";
-import AccessibleButton from "../../elements/AccessibleButton";
-import {SettingLevel} from "../../../../settings/SettingsStore";
-const Modal = require("../../../../Modal");
-const sdk = require("../../../../index");
-const MatrixClientPeg = require("../../../../MatrixClientPeg");
+import {_t} from "../../../../../languageHandler";
+import CallMediaHandler from "../../../../../CallMediaHandler";
+import Field from "../../../elements/Field";
+import AccessibleButton from "../../../elements/AccessibleButton";
+import {SettingLevel} from "../../../../../settings/SettingsStore";
+const Modal = require("../../../../../Modal");
+const sdk = require("../../../../..");
+const MatrixClientPeg = require("../../../../../MatrixClientPeg");
-export default class VoiceSettingsTab extends React.Component {
+export default class VoiceUserSettingsTab extends React.Component {
constructor() {
super();
@@ -103,7 +103,7 @@ export default class VoiceSettingsTab extends React.Component {
let webcamDropdown = null;
if (this.state.mediaDevices === false) {
requestButton = (
-
+
{_t("Missing media permissions, click the button below to request.")}
{_t("Request media permissions")}
@@ -166,7 +166,7 @@ export default class VoiceSettingsTab extends React.Component {
}
return (
-
+
{_t("Voice & Video")}
{requestButton}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index 23fdfd283f..979bbd0553 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -501,19 +501,7 @@
"Upload profile picture": "Upload profile picture",
"Display Name": "Display Name",
"Save": "Save",
- "This room is not accessible by remote Matrix servers": "This room is not accessible by remote Matrix servers",
- "Upgrade room to version %(ver)s": "Upgrade room to version %(ver)s",
- "Room information": "Room information",
- "Internal room ID:": "Internal room ID:",
- "Room version": "Room version",
- "Room version:": "Room version:",
- "Developer options": "Developer options",
- "Open Devtools": "Open Devtools",
"Flair": "Flair",
- "General": "General",
- "Room Addresses": "Room Addresses",
- "Publish this room to the public in %(domain)s's room directory?": "Publish this room to the public in %(domain)s's room directory?",
- "URL Previews": "URL Previews",
"Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?",
"Success": "Success",
"Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them",
@@ -529,6 +517,7 @@
"Account management": "Account management",
"Deactivating your account is a permanent action - be careful!": "Deactivating your account is a permanent action - be careful!",
"Deactivate Account": "Deactivate Account",
+ "General": "General",
"Legal": "Legal",
"Credits": "Credits",
"For help with using Riot, click here.": "For help with using Riot, click here.",
@@ -558,6 +547,44 @@
"Timeline": "Timeline",
"Room list": "Room list",
"Autocomplete delay (ms)": "Autocomplete delay (ms)",
+ "Unignore": "Unignore",
+ "": "",
+ "Import E2E room keys": "Import E2E room keys",
+ "Cryptography": "Cryptography",
+ "Device ID:": "Device ID:",
+ "Device key:": "Device key:",
+ "Ignored users": "Ignored users",
+ "Bulk options": "Bulk options",
+ "Reject all %(invitedRooms)s invites": "Reject all %(invitedRooms)s invites",
+ "Key backup": "Key backup",
+ "Security & Privacy": "Security & Privacy",
+ "Devices": "Devices",
+ "Riot collects anonymous analytics to allow us to improve the application.": "Riot collects anonymous analytics to allow us to improve the application.",
+ "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.",
+ "Learn more about how we use analytics.": "Learn more about how we use analytics.",
+ "No media permissions": "No media permissions",
+ "You may need to manually permit Riot to access your microphone/webcam": "You may need to manually permit Riot to access your microphone/webcam",
+ "Missing media permissions, click the button below to request.": "Missing media permissions, click the button below to request.",
+ "Request media permissions": "Request media permissions",
+ "No Audio Outputs detected": "No Audio Outputs detected",
+ "No Microphones detected": "No Microphones detected",
+ "No Webcams detected": "No Webcams detected",
+ "Default Device": "Default Device",
+ "Audio Output": "Audio Output",
+ "Microphone": "Microphone",
+ "Camera": "Camera",
+ "Voice & Video": "Voice & Video",
+ "This room is not accessible by remote Matrix servers": "This room is not accessible by remote Matrix servers",
+ "Upgrade room to version %(ver)s": "Upgrade room to version %(ver)s",
+ "Room information": "Room information",
+ "Internal room ID:": "Internal room ID:",
+ "Room version": "Room version",
+ "Room version:": "Room version:",
+ "Developer options": "Developer options",
+ "Open Devtools": "Open Devtools",
+ "Room Addresses": "Room Addresses",
+ "Publish this room to the public in %(domain)s's room directory?": "Publish this room to the public in %(domain)s's room directory?",
+ "URL Previews": "URL Previews",
"To change the room's avatar, you must be a": "To change the room's avatar, you must be a",
"To change the room's name, you must be a": "To change the room's name, you must be a",
"To change the room's main address, you must be a": "To change the room's main address, you must be a",
@@ -595,38 +622,11 @@
"Members only (since the point in time of selecting this option)": "Members only (since the point in time of selecting this option)",
"Members only (since they were invited)": "Members only (since they were invited)",
"Members only (since they joined)": "Members only (since they joined)",
- "Security & Privacy": "Security & Privacy",
"Encryption": "Encryption",
"Once enabled, encryption cannot be disabled.": "Once enabled, encryption cannot be disabled.",
"Encrypted": "Encrypted",
"Who can access this room?": "Who can access this room?",
"Who can read history?": "Who can read history?",
- "Unignore": "Unignore",
- "": "",
- "Import E2E room keys": "Import E2E room keys",
- "Cryptography": "Cryptography",
- "Device ID:": "Device ID:",
- "Device key:": "Device key:",
- "Ignored users": "Ignored users",
- "Bulk options": "Bulk options",
- "Reject all %(invitedRooms)s invites": "Reject all %(invitedRooms)s invites",
- "Key backup": "Key backup",
- "Devices": "Devices",
- "Riot collects anonymous analytics to allow us to improve the application.": "Riot collects anonymous analytics to allow us to improve the application.",
- "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.",
- "Learn more about how we use analytics.": "Learn more about how we use analytics.",
- "No media permissions": "No media permissions",
- "You may need to manually permit Riot to access your microphone/webcam": "You may need to manually permit Riot to access your microphone/webcam",
- "Missing media permissions, click the button below to request.": "Missing media permissions, click the button below to request.",
- "Request media permissions": "Request media permissions",
- "No Audio Outputs detected": "No Audio Outputs detected",
- "No Microphones detected": "No Microphones detected",
- "No Webcams detected": "No Webcams detected",
- "Default Device": "Default Device",
- "Audio Output": "Audio Output",
- "Microphone": "Microphone",
- "Camera": "Camera",
- "Voice & Video": "Voice & Video",
"Cannot add any more widgets": "Cannot add any more widgets",
"The maximum permitted number of widgets have already been added to this room.": "The maximum permitted number of widgets have already been added to this room.",
"Add a widget": "Add a widget",