From ccd3234873184393ac5afe4abbe3494461f87ac6 Mon Sep 17 00:00:00 2001 From: Christopher Date: Tue, 21 Jan 2020 16:13:14 +0000 Subject: [PATCH 001/522] Moved read receipts to the bottom of the EventTile. --- res/css/views/rooms/_EventTile.scss | 17 +---------------- src/components/views/rooms/EventTile.js | 6 +++--- 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/res/css/views/rooms/_EventTile.scss b/res/css/views/rooms/_EventTile.scss index fbac1e932a..0b5c4a48a6 100644 --- a/res/css/views/rooms/_EventTile.scss +++ b/res/css/views/rooms/_EventTile.scss @@ -289,17 +289,11 @@ div.mx_EventTile_notSent.mx_EventTile_redacted .mx_UnknownBody { display: inline-block; width: 14px; height: 14px; - top: 29px; + top: -19px; user-select: none; z-index: 1; } -.mx_EventTile_continuation .mx_EventTile_readAvatars, -.mx_EventTile_info .mx_EventTile_readAvatars, -.mx_EventTile_emote .mx_EventTile_readAvatars { - top: 7px; -} - .mx_EventTile_readAvatars .mx_BaseAvatar { position: absolute; display: inline-block; @@ -621,15 +615,6 @@ div.mx_EventTile_notSent.mx_EventTile_redacted .mx_UnknownBody { top: 27px; } - .mx_EventTile_continuation .mx_EventTile_readAvatars, - .mx_EventTile_emote .mx_EventTile_readAvatars { - top: 5px; - } - - .mx_EventTile_info .mx_EventTile_readAvatars { - top: 4px; - } - .mx_RoomView_MessageList h2 { margin-top: 6px; } diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index dce4dc8a93..8ee51a9377 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -820,9 +820,6 @@ export default createReactClass({ // tab-index=-1 to allow it to be focusable but do not add tab stop for it, primarily for screen readers return (
-
- { readAvatars } -
{ sender }
+
+ { readAvatars } +
{ // The avatar goes after the event tile as it's absolutely positioned to be over the // event tile line, so needs to be later in the DOM so it appears on top (this avoids From 8087f18bf786b7780efbdb0f61fda39e104e3624 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 14 Feb 2020 10:32:42 +0000 Subject: [PATCH 002/522] Remove unused props Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/RoomSubList.js | 2 -- src/components/views/rooms/RoomList.js | 9 --------- 2 files changed, 11 deletions(-) diff --git a/src/components/structures/RoomSubList.js b/src/components/structures/RoomSubList.js index 600b418fe0..fa2231328c 100644 --- a/src/components/structures/RoomSubList.js +++ b/src/components/structures/RoomSubList.js @@ -46,8 +46,6 @@ export default class RoomSubList extends React.PureComponent { tagName: PropTypes.string, addRoomLabel: PropTypes.string, - order: PropTypes.string.isRequired, - // passed through to RoomTile and used to highlight room with `!` regardless of notifications count isInvite: PropTypes.bool, diff --git a/src/components/views/rooms/RoomList.js b/src/components/views/rooms/RoomList.js index f41400ecfc..ad64ef1a97 100644 --- a/src/components/views/rooms/RoomList.js +++ b/src/components/views/rooms/RoomList.js @@ -700,13 +700,11 @@ export default createReactClass({ list: [], extraTiles: this._makeGroupInviteTiles(this.props.searchFilter), label: _t('Community Invites'), - order: "recent", isInvite: true, }, { list: this.state.lists['im.vector.fake.invite'], label: _t('Invites'), - order: "recent", incomingCall: incomingCallIfTaggedAs('im.vector.fake.invite'), isInvite: true, }, @@ -714,14 +712,12 @@ export default createReactClass({ list: this.state.lists['m.favourite'], label: _t('Favourites'), tagName: "m.favourite", - order: "manual", incomingCall: incomingCallIfTaggedAs('m.favourite'), }, { list: this.state.lists['im.vector.fake.direct'], label: _t('Direct Messages'), tagName: "im.vector.fake.direct", - order: "recent", incomingCall: incomingCallIfTaggedAs('im.vector.fake.direct'), onAddRoom: () => {dis.dispatch({action: 'view_create_chat'});}, addRoomLabel: _t("Start chat"), @@ -729,7 +725,6 @@ export default createReactClass({ { list: this.state.lists['im.vector.fake.recent'], label: _t('Rooms'), - order: "recent", incomingCall: incomingCallIfTaggedAs('im.vector.fake.recent'), onAddRoom: () => {dis.dispatch({action: 'view_create_room'});}, }, @@ -744,7 +739,6 @@ export default createReactClass({ key: tagName, label: labelForTagName(tagName), tagName: tagName, - order: "manual", incomingCall: incomingCallIfTaggedAs(tagName), }; }); @@ -754,13 +748,11 @@ export default createReactClass({ list: this.state.lists['m.lowpriority'], label: _t('Low priority'), tagName: "m.lowpriority", - order: "recent", incomingCall: incomingCallIfTaggedAs('m.lowpriority'), }, { list: this.state.lists['im.vector.fake.archived'], label: _t('Historical'), - order: "recent", incomingCall: incomingCallIfTaggedAs('im.vector.fake.archived'), startAsHidden: true, showSpinner: this.state.isLoadingLeftRooms, @@ -770,7 +762,6 @@ export default createReactClass({ list: this.state.lists['m.server_notice'], label: _t('System Alerts'), tagName: "m.lowpriority", - order: "recent", incomingCall: incomingCallIfTaggedAs('m.server_notice'), }, ]); From 932c9b3106e744ae520a75241dc76c3b57520437 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 18 Feb 2020 14:55:12 +0000 Subject: [PATCH 003/522] First attempt alpha room list sorting Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../tabs/user/PreferencesUserSettingsTab.js | 1 + src/i18n/strings/en_EN.json | 5 +- src/settings/Settings.js | 11 +- src/settings/SettingsStore.js | 6 +- .../controllers/RoomListOrderingController.js | 25 +++ src/settings/controllers/SettingController.js | 11 ++ src/stores/RoomListStore.js | 180 ++++++++++++------ 7 files changed, 173 insertions(+), 66 deletions(-) create mode 100644 src/settings/controllers/RoomListOrderingController.js diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js index fea2e8c81f..b7fb895a9a 100644 --- a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js @@ -48,6 +48,7 @@ export default class PreferencesUserSettingsTab extends React.Component { ]; static ROOM_LIST_SETTINGS = [ + 'RoomList.orderingAlgorithm', // this has a controller which maps the boolean inputs to algorithms 'RoomList.orderByImportance', 'breadcrumbs', ]; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 7a8642be95..1f4d9829ad 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -413,8 +413,9 @@ "Enable widget screenshots on supported widgets": "Enable widget screenshots on supported widgets", "Prompt before sending invites to potentially invalid matrix IDs": "Prompt before sending invites to potentially invalid matrix IDs", "Show developer tools": "Show developer tools", - "Order rooms in the room list by most important first instead of most recent": "Order rooms in the room list by most important first instead of most recent", - "Show recently visited rooms above the room list": "Show recently visited rooms above the room list", + "Order rooms by message activity instead of by name": "Order rooms by message activity instead of by name", + "Show rooms with unread notifications first": "Show rooms with unread notifications first", + "Show shortcuts to recently viewed rooms above the room list": "Show shortcuts to recently viewed rooms above the room list", "Show hidden events in timeline": "Show hidden events in timeline", "Low bandwidth mode": "Low bandwidth mode", "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)", diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 936b651211..87c1526eaa 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -26,6 +26,7 @@ import CustomStatusController from "./controllers/CustomStatusController"; import ThemeController from './controllers/ThemeController'; import ReloadOnChangeController from "./controllers/ReloadOnChangeController"; import {RIGHT_PANEL_PHASES} from "../stores/RightPanelStorePhases"; +import RoomListOrderingController from "./controllers/RoomListOrderingController"; // These are just a bunch of helper arrays to avoid copy/pasting a bunch of times const LEVELS_ROOM_SETTINGS = ['device', 'room-device', 'room-account', 'account', 'config']; @@ -433,14 +434,20 @@ export const SETTINGS = { deny: [], }, }, + "RoomList.orderingAlgorithm": { + supportedLevels: LEVELS_ACCOUNT_SETTINGS, + displayName: _td("Order rooms by message activity instead of by name"), + default: "recent", // XXX controller maps boolean onto algorithm for future flexibility + controller: new RoomListOrderingController(), + }, "RoomList.orderByImportance": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, - displayName: _td('Order rooms in the room list by most important first instead of most recent'), + displayName: _td("Show rooms with unread notifications first"), default: true, }, "breadcrumbs": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, - displayName: _td("Show recently visited rooms above the room list"), + displayName: _td("Show shortcuts to recently viewed rooms above the room list"), default: true, }, "showHiddenEventsInTimeline": { diff --git a/src/settings/SettingsStore.js b/src/settings/SettingsStore.js index 0122916bc3..897c2521cc 100644 --- a/src/settings/SettingsStore.js +++ b/src/settings/SettingsStore.js @@ -420,9 +420,13 @@ export default class SettingsStore { throw new Error("User cannot set " + settingName + " at " + level + " in " + roomId); } + const controller = setting.controller; + if (controller) { + value = controller.augmentValue(level, roomId, value); + } + await handler.setValue(settingName, roomId, value); - const controller = setting.controller; if (controller) { controller.onChange(level, roomId, value); } diff --git a/src/settings/controllers/RoomListOrderingController.js b/src/settings/controllers/RoomListOrderingController.js new file mode 100644 index 0000000000..449e21545a --- /dev/null +++ b/src/settings/controllers/RoomListOrderingController.js @@ -0,0 +1,25 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import SettingController from "./SettingController"; + +export default class RoomListOrderingController extends SettingController { + augmentValue(level, roomId, newValue): * { + // currently we expose algorithm as a boolean but store it as a string for future flexibility + // where we may want >2 algorithms available for the user to choose between. + return newValue ? "recent" : "alphabetic"; + } +} diff --git a/src/settings/controllers/SettingController.js b/src/settings/controllers/SettingController.js index a7d0ccf21a..9327f6ab48 100644 --- a/src/settings/controllers/SettingController.js +++ b/src/settings/controllers/SettingController.js @@ -47,4 +47,15 @@ export default class SettingController { onChange(level, roomId, newValue) { // do nothing by default } + + /** + * Gets the value which should actually get written into the store based on the input value from setValue. + * @param {string} level The level at which the setting has been modified. + * @param {String} roomId The room ID, may be null. + * @param {*} newValue The new value for the setting, may be null. + * @return {*} The value that should be used, may be null. + */ + augmentValue(level, roomId, newValue) { + return newValue; + } } diff --git a/src/stores/RoomListStore.js b/src/stores/RoomListStore.js index a0785cf10e..e99214dea1 100644 --- a/src/stores/RoomListStore.js +++ b/src/stores/RoomListStore.js @@ -36,29 +36,48 @@ const CATEGORY_GREY = "grey"; // Unread notified messages (not mentions) const CATEGORY_BOLD = "bold"; // Unread messages (not notified, 'Mentions Only' rooms) const CATEGORY_IDLE = "idle"; // Nothing of interest -const CATEGORY_ORDER = [CATEGORY_RED, CATEGORY_GREY, CATEGORY_BOLD, CATEGORY_IDLE]; -const LIST_ORDERS = { - "m.favourite": "manual", - "im.vector.fake.invite": "recent", - "im.vector.fake.recent": "recent", - "im.vector.fake.direct": "recent", - "m.lowpriority": "recent", - "im.vector.fake.archived": "recent", -}; - /** - * Identifier for the "breadcrumb" (or "sort by most important room first") algorithm. - * Includes a provision for keeping the currently open room from flying down the room - * list. + * Identifier for manual sorting behaviour: sort by the user defined order. * @type {string} */ -const ALGO_IMPORTANCE = "importance"; +export const ALGO_MANUAL = "manual"; + +/** + * Identifier for alphabetic sorting behaviour: sort by the room name alphabetically first. + * @type {string} + */ +export const ALGO_ALPHABETIC = "alphabetic"; /** * Identifier for classic sorting behaviour: sort by the most recent message first. * @type {string} */ -const ALGO_RECENT = "recent"; +export const ALGO_RECENT = "recent"; + +const CATEGORY_ORDER = [CATEGORY_RED, CATEGORY_GREY, CATEGORY_BOLD, CATEGORY_IDLE]; +const getListAlgorithm = (listKey, settingAlgorithm) => { + switch (listKey) { + case "m.favourite": + return ALGO_MANUAL; + case "im.vector.fake.invite": + case "im.vector.fake.recent": + case "im.vector.fake.direct": + case "im.vector.fake.archived": + case "m.lowpriority": + return settingAlgorithm; + default: + return ALGO_MANUAL; // TODO verify this is desired + } +}; + +const knownLists = new Set([ + "m.favourite", + "im.vector.fake.invite", + "im.vector.fake.recent", + "im.vector.fake.direct", + "im.vector.fake.archived", + "m.lowpriority", +]); /** * A class for storing application state for categorising rooms in @@ -76,13 +95,12 @@ class RoomListStore extends Store { /** * Changes the sorting algorithm used by the RoomListStore. * @param {string} algorithm The new algorithm to use. Should be one of the ALGO_* constants. + * @param {boolean} orderImportantFirst Whether to sort by categories of importance */ - updateSortingAlgorithm(algorithm) { + updateSortingAlgorithm(algorithm, orderImportantFirst) { // Dev note: We only have two algorithms at the moment, but it isn't impossible that we want // multiple in the future. Also constants make things slightly clearer. - const byImportance = algorithm === ALGO_IMPORTANCE; - console.log("Updating room sorting algorithm: sortByImportance=" + byImportance); - this._setState({orderRoomsByImportance: byImportance}); + this._setState({algorithm, orderImportantFirst}); // Trigger a resort of the entire list to reflect the change in algorithm this._generateInitialRoomLists(); @@ -106,10 +124,12 @@ class RoomListStore extends Store { presentationLists: defaultLists, // like `lists`, but with arrays of rooms instead ready: false, stickyRoomId: null, - orderRoomsByImportance: true, + algorithm: ALGO_RECENT, + orderImportantFirst: false, }; SettingsStore.monitorSetting('RoomList.orderByImportance', null); + SettingsStore.monitorSetting('RoomList.orderingAlgorithm', null); SettingsStore.monitorSetting('feature_custom_tags', null); } @@ -135,11 +155,17 @@ class RoomListStore extends Store { case 'setting_updated': { if (!logicallyReady) break; - if (payload.settingName === 'RoomList.orderByImportance') { - this.updateSortingAlgorithm(payload.newValue === true ? ALGO_IMPORTANCE : ALGO_RECENT); - } else if (payload.settingName === 'feature_custom_tags') { - this._setState({tagsEnabled: payload.newValue}); - this._generateInitialRoomLists(); // Tags means we have to start from scratch + switch (payload.settingName) { + case "RoomList.orderingAlgorithm": + this.updateSortingAlgorithm(payload.newValue, this._state.orderImportantFirst); + break; + case "RoomList.orderByImportance": + this.updateSortingAlgorithm(this._state.algorithm, payload.newValue); + break; + case "feature_custom_tags": + this._setState({tagsEnabled: payload.newValue}); + this._generateInitialRoomLists(); // Tags means we have to start from scratch + break; } } break; @@ -157,9 +183,9 @@ class RoomListStore extends Store { this._matrixClient = payload.matrixClient; - const algorithm = SettingsStore.getValue("RoomList.orderByImportance") - ? ALGO_IMPORTANCE : ALGO_RECENT; - this.updateSortingAlgorithm(algorithm); + const algorithm = SettingsStore.getValue("RoomList.orderingAlgorithm"); + const orderByImportance = SettingsStore.getValue("RoomList.orderByImportance"); + this.updateSortingAlgorithm(algorithm, orderByImportance); } break; case 'MatrixActions.Room.receipt': { @@ -188,7 +214,8 @@ class RoomListStore extends Store { if (!logicallyReady || !payload.isLiveEvent || !payload.isLiveUnfilteredRoomTimelineEvent || - !this._eventTriggersRecentReorder(payload.event) + !this._eventTriggersRecentReorder(payload.event) || + this._state.algorithm !== ALGO_RECENT ) { break; } @@ -302,7 +329,7 @@ class RoomListStore extends Store { _filterTags(tags) { tags = tags ? Object.keys(tags) : []; if (this._state.tagsEnabled) return tags; - return tags.filter((t) => !!LIST_ORDERS[t]); + return tags.filter((t) => knownLists.has(t)); } _getRecommendedTagsForRoom(room) { @@ -419,9 +446,11 @@ class RoomListStore extends Store { if (changedBoundary) { // If we changed a boundary, then we've gone too far - go to the top of the last // section instead. + console.log("DEBUG changedBoundary", room.name, room, category); newList.splice(desiredCategoryBoundaryIndex, 0, {room, category}); } else { // If we're ordering by timestamp, just insert normally + console.log("DEBUG 11push", room.name, room, category); newList.push({room, category}); } pushedEntry = true; @@ -473,16 +502,19 @@ class RoomListStore extends Store { // Speed optimization: Don't do complicated math if we don't have to. if (!shouldHaveRoom) { + console.log("DEBUG A"); listsClone[key] = this._state.lists[key].filter((e) => e.room.roomId !== room.roomId); - } else if (LIST_ORDERS[key] !== 'recent') { + } else if (getListAlgorithm(key, this._state.algorithm) === ALGO_MANUAL) { // Manually ordered tags are sorted later, so for now we'll just clone the tag // and add our room if needed listsClone[key] = this._state.lists[key].filter((e) => e.room.roomId !== room.roomId); + console.log("DEBUG push", room.name, room, category); listsClone[key].push({room, category}); insertedIntoTags.push(key); } else { listsClone[key] = []; + console.log("DEBUG slot"); const pushedEntry = this._slotRoomIntoList( room, category, key, this._state.lists[key], listsClone[key], lastTimestamp); @@ -529,16 +561,23 @@ class RoomListStore extends Store { console.warn(`!! List for tag ${targetTag} does not exist - creating`); listsClone[targetTag] = []; } + console.log("DEBUG123", room.name, room, category); listsClone[targetTag].splice(0, 0, {room, category}); } } + console.log("DEBUG targetTags", targetTags); + // Sort the favourites before we set the clone for (const tag of Object.keys(listsClone)) { - if (LIST_ORDERS[tag] === 'recent') continue; // skip recents (pre-sorted) + if (getListAlgorithm(tag, this._state.algorithm) !== ALGO_MANUAL) continue; // skip recents (pre-sorted) + console.log("DEBUG applying manual sort to", tag); listsClone[tag].sort(this._getManualComparator(tag)); } + console.log("DEBUG setting lists=listsClone", + this._state.lists["im.vector.fake.recent"].map(e => e.room.name), + listsClone["im.vector.fake.recent"].map(e => e.room.name)); this._setState({lists: listsClone}); } @@ -585,8 +624,10 @@ class RoomListStore extends Store { // Default to an arbitrary category for tags which aren't ordered by recents let category = CATEGORY_IDLE; - if (LIST_ORDERS[tagName] === 'recent') category = this._calculateCategory(room); - lists[tagName].push({room, category: category}); + if (getListAlgorithm(tagName, this._state.algorithm) !== ALGO_MANUAL) { + category = this._calculateCategory(room); + } + lists[tagName].push({room, category}); } } else if (dmRoomMap.getUserIdForRoomId(room.roomId)) { // "Direct Message" rooms (that we're still in and that aren't otherwise tagged) @@ -605,33 +646,41 @@ class RoomListStore extends Store { // cache only needs to survive the sort operation below and should not be implemented outside // of this function, otherwise the room lists will almost certainly be out of date and wrong. const latestEventTsCache = {}; // roomId => timestamp + const tsOfNewestEventFn = (room) => { + if (!room) return Number.MAX_SAFE_INTEGER; // Should only happen in tests + + if (latestEventTsCache[room.roomId]) { + return latestEventTsCache[room.roomId]; + } + + const ts = this._tsOfNewestEvent(room); + latestEventTsCache[room.roomId] = ts; + return ts; + }; Object.keys(lists).forEach((listKey) => { let comparator; - switch (LIST_ORDERS[listKey]) { - case "recent": + console.log("DEBUG sorting", listKey, "using", getListAlgorithm(listKey, this._state.algorithm)); + switch (getListAlgorithm(listKey, this._state.algorithm)) { + case ALGO_RECENT: comparator = (entryA, entryB) => { - return this._recentsComparator(entryA, entryB, (room) => { - if (!room) return Number.MAX_SAFE_INTEGER; // Should only happen in tests - - if (latestEventTsCache[room.roomId]) { - return latestEventTsCache[room.roomId]; - } - - const ts = this._tsOfNewestEvent(room); - latestEventTsCache[room.roomId] = ts; - return ts; - }); + return this._recentsComparator(entryA, entryB, tsOfNewestEventFn); }; break; - case "manual": + case ALGO_ALPHABETIC: + comparator = (entryA, entryB) => this._alphabeticComparator(entryA, entryB); + break; + case ALGO_MANUAL: default: comparator = this._getManualComparator(listKey); break; } - lists[listKey].sort(comparator); + console.log("DEBUG before", listKey, lists[listKey].map(e => e.room.name)); + lists[listKey].sort(comparator); // TODO inline the common CATEGORY comparator here? + console.log("DEBUG after", listKey, lists[listKey].map(e => e.room.name)); }); + console.log("DEBUG setting lists after comparator"); this._setState({ lists, ready: true, // Ready to receive updates to ordering @@ -668,7 +717,7 @@ class RoomListStore extends Store { } _calculateCategory(room) { - if (!this._state.orderRoomsByImportance) { + if (!this._state.orderImportantFirst) { // Effectively disable the categorization of rooms if we're supposed to // be sorting by more recent messages first. This triggers the timestamp // comparison bit of _setRoomCategory and _recentsComparator instead of @@ -689,26 +738,35 @@ class RoomListStore extends Store { } _recentsComparator(entryA, entryB, tsOfNewestEventFn) { - const roomA = entryA.room; - const roomB = entryB.room; - const categoryA = entryA.category; - const categoryB = entryB.category; - - if (categoryA !== categoryB) { - const idxA = CATEGORY_ORDER.indexOf(categoryA); - const idxB = CATEGORY_ORDER.indexOf(categoryB); + console.trace("DEBUG recents"); + if (entryA.category !== entryB.category) { + const idxA = CATEGORY_ORDER.indexOf(entryA.category); + const idxB = CATEGORY_ORDER.indexOf(entryB.category); if (idxA > idxB) return 1; if (idxA < idxB) return -1; return 0; // Technically not possible } - const timestampA = tsOfNewestEventFn(roomA); - const timestampB = tsOfNewestEventFn(roomB); + const timestampA = tsOfNewestEventFn(entryA.room); + const timestampB = tsOfNewestEventFn(entryB.room); return timestampB - timestampA; } + _alphabeticComparator(entryA, entryB) { + if (entryA.category !== entryB.category) { + const idxA = CATEGORY_ORDER.indexOf(entryA.category); + const idxB = CATEGORY_ORDER.indexOf(entryB.category); + if (idxA > idxB) return 1; + if (idxA < idxB) return -1; + return 0; // Technically not possible + } + + // console.log("DEBUG alphabetic, same category", JSON.stringify(entryA.room.name), JSON.stringify(entryB.room.name), this._lexicographicalComparator(entryA.room, entryB.room)); + return this._lexicographicalComparator(entryA.room, entryB.room); + } + _lexicographicalComparator(roomA, roomB) { - return roomA.name > roomB.name ? 1 : -1; + return roomA.name.localeCompare(roomB.name); } _getManualComparator(tagName, optimisticRequest) { From d70a9bd001c9ec85074bc9bb2f3b741148dea7a6 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 19 Feb 2020 14:39:36 +0000 Subject: [PATCH 004/522] small tweaks, still not working reliably Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/settings/Settings.js | 2 +- src/settings/controllers/RoomListOrderingController.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 87c1526eaa..2b7dc70623 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -437,7 +437,7 @@ export const SETTINGS = { "RoomList.orderingAlgorithm": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, displayName: _td("Order rooms by message activity instead of by name"), - default: "recent", // XXX controller maps boolean onto algorithm for future flexibility + default: "recent", // controller maps boolean onto algorithm for future flexibility to >2 algorithms controller: new RoomListOrderingController(), }, "RoomList.orderByImportance": { diff --git a/src/settings/controllers/RoomListOrderingController.js b/src/settings/controllers/RoomListOrderingController.js index 449e21545a..7c55e607fc 100644 --- a/src/settings/controllers/RoomListOrderingController.js +++ b/src/settings/controllers/RoomListOrderingController.js @@ -22,4 +22,14 @@ export default class RoomListOrderingController extends SettingController { // where we may want >2 algorithms available for the user to choose between. return newValue ? "recent" : "alphabetic"; } + + getValueOverride(level: string, roomId: String, calculatedValue: *, calculatedAtLevel: string): * { + switch (calculatedValue) { + case "alphabetic": + return false; + case "recent": + default: + return true; + } + } } From a6edc34e9758295832baa49b03776aa0699b8d27 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 19 Feb 2020 14:52:00 +0000 Subject: [PATCH 005/522] Iterate things Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../tabs/user/PreferencesUserSettingsTab.js | 2 +- src/settings/Settings.js | 6 +- src/settings/SettingsStore.js | 6 +- .../controllers/RoomListOrderingController.js | 35 -------- src/stores/RoomListStore.js | 84 +++++++------------ 5 files changed, 35 insertions(+), 98 deletions(-) delete mode 100644 src/settings/controllers/RoomListOrderingController.js diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js index b7fb895a9a..09b9151ddc 100644 --- a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js @@ -48,7 +48,7 @@ export default class PreferencesUserSettingsTab extends React.Component { ]; static ROOM_LIST_SETTINGS = [ - 'RoomList.orderingAlgorithm', // this has a controller which maps the boolean inputs to algorithms + 'RoomList.orderByRecents', 'RoomList.orderByImportance', 'breadcrumbs', ]; diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 2b7dc70623..b35301f124 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -26,7 +26,6 @@ import CustomStatusController from "./controllers/CustomStatusController"; import ThemeController from './controllers/ThemeController'; import ReloadOnChangeController from "./controllers/ReloadOnChangeController"; import {RIGHT_PANEL_PHASES} from "../stores/RightPanelStorePhases"; -import RoomListOrderingController from "./controllers/RoomListOrderingController"; // These are just a bunch of helper arrays to avoid copy/pasting a bunch of times const LEVELS_ROOM_SETTINGS = ['device', 'room-device', 'room-account', 'account', 'config']; @@ -434,11 +433,10 @@ export const SETTINGS = { deny: [], }, }, - "RoomList.orderingAlgorithm": { + "RoomList.orderByRecents": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, displayName: _td("Order rooms by message activity instead of by name"), - default: "recent", // controller maps boolean onto algorithm for future flexibility to >2 algorithms - controller: new RoomListOrderingController(), + default: true, }, "RoomList.orderByImportance": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, diff --git a/src/settings/SettingsStore.js b/src/settings/SettingsStore.js index 897c2521cc..0122916bc3 100644 --- a/src/settings/SettingsStore.js +++ b/src/settings/SettingsStore.js @@ -420,13 +420,9 @@ export default class SettingsStore { throw new Error("User cannot set " + settingName + " at " + level + " in " + roomId); } - const controller = setting.controller; - if (controller) { - value = controller.augmentValue(level, roomId, value); - } - await handler.setValue(settingName, roomId, value); + const controller = setting.controller; if (controller) { controller.onChange(level, roomId, value); } diff --git a/src/settings/controllers/RoomListOrderingController.js b/src/settings/controllers/RoomListOrderingController.js deleted file mode 100644 index 7c55e607fc..0000000000 --- a/src/settings/controllers/RoomListOrderingController.js +++ /dev/null @@ -1,35 +0,0 @@ -/* -Copyright 2020 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import SettingController from "./SettingController"; - -export default class RoomListOrderingController extends SettingController { - augmentValue(level, roomId, newValue): * { - // currently we expose algorithm as a boolean but store it as a string for future flexibility - // where we may want >2 algorithms available for the user to choose between. - return newValue ? "recent" : "alphabetic"; - } - - getValueOverride(level: string, roomId: String, calculatedValue: *, calculatedAtLevel: string): * { - switch (calculatedValue) { - case "alphabetic": - return false; - case "recent": - default: - return true; - } - } -} diff --git a/src/stores/RoomListStore.js b/src/stores/RoomListStore.js index e99214dea1..3c6171f272 100644 --- a/src/stores/RoomListStore.js +++ b/src/stores/RoomListStore.js @@ -56,6 +56,8 @@ export const ALGO_RECENT = "recent"; const CATEGORY_ORDER = [CATEGORY_RED, CATEGORY_GREY, CATEGORY_BOLD, CATEGORY_IDLE]; const getListAlgorithm = (listKey, settingAlgorithm) => { + // apply manual sorting only to m.favourite, otherwise respect the global setting + // all the known tags are listed explicitly here to simplify future changes switch (listKey) { case "m.favourite": return ALGO_MANUAL; @@ -64,9 +66,8 @@ const getListAlgorithm = (listKey, settingAlgorithm) => { case "im.vector.fake.direct": case "im.vector.fake.archived": case "m.lowpriority": - return settingAlgorithm; default: - return ALGO_MANUAL; // TODO verify this is desired + return settingAlgorithm; } }; @@ -129,7 +130,7 @@ class RoomListStore extends Store { }; SettingsStore.monitorSetting('RoomList.orderByImportance', null); - SettingsStore.monitorSetting('RoomList.orderingAlgorithm', null); + SettingsStore.monitorSetting('RoomList.orderByRecents', null); SettingsStore.monitorSetting('feature_custom_tags', null); } @@ -156,8 +157,9 @@ class RoomListStore extends Store { if (!logicallyReady) break; switch (payload.settingName) { - case "RoomList.orderingAlgorithm": - this.updateSortingAlgorithm(payload.newValue, this._state.orderImportantFirst); + case "RoomList.orderByRecents": + this.updateSortingAlgorithm(payload.newValue ? ALGO_RECENT : ALGO_ALPHABETIC, + this._state.orderImportantFirst); break; case "RoomList.orderByImportance": this.updateSortingAlgorithm(this._state.algorithm, payload.newValue); @@ -183,9 +185,9 @@ class RoomListStore extends Store { this._matrixClient = payload.matrixClient; - const algorithm = SettingsStore.getValue("RoomList.orderingAlgorithm"); + const orderByRecents = SettingsStore.getValue("RoomList.orderByRecents"); const orderByImportance = SettingsStore.getValue("RoomList.orderByImportance"); - this.updateSortingAlgorithm(algorithm, orderByImportance); + this.updateSortingAlgorithm(orderByRecents ? ALGO_RECENT : ALGO_ALPHABETIC, orderByImportance); } break; case 'MatrixActions.Room.receipt': { @@ -446,11 +448,9 @@ class RoomListStore extends Store { if (changedBoundary) { // If we changed a boundary, then we've gone too far - go to the top of the last // section instead. - console.log("DEBUG changedBoundary", room.name, room, category); newList.splice(desiredCategoryBoundaryIndex, 0, {room, category}); } else { // If we're ordering by timestamp, just insert normally - console.log("DEBUG 11push", room.name, room, category); newList.push({room, category}); } pushedEntry = true; @@ -502,19 +502,16 @@ class RoomListStore extends Store { // Speed optimization: Don't do complicated math if we don't have to. if (!shouldHaveRoom) { - console.log("DEBUG A"); listsClone[key] = this._state.lists[key].filter((e) => e.room.roomId !== room.roomId); - } else if (getListAlgorithm(key, this._state.algorithm) === ALGO_MANUAL) { + } else if (getListAlgorithm(key, this._state.algorithm) === ALGO_MANUAL || !this._state.orderImportantFirst) { // Manually ordered tags are sorted later, so for now we'll just clone the tag // and add our room if needed listsClone[key] = this._state.lists[key].filter((e) => e.room.roomId !== room.roomId); - console.log("DEBUG push", room.name, room, category); listsClone[key].push({room, category}); insertedIntoTags.push(key); } else { listsClone[key] = []; - console.log("DEBUG slot"); const pushedEntry = this._slotRoomIntoList( room, category, key, this._state.lists[key], listsClone[key], lastTimestamp); @@ -561,23 +558,16 @@ class RoomListStore extends Store { console.warn(`!! List for tag ${targetTag} does not exist - creating`); listsClone[targetTag] = []; } - console.log("DEBUG123", room.name, room, category); listsClone[targetTag].splice(0, 0, {room, category}); } } - console.log("DEBUG targetTags", targetTags); - // Sort the favourites before we set the clone for (const tag of Object.keys(listsClone)) { if (getListAlgorithm(tag, this._state.algorithm) !== ALGO_MANUAL) continue; // skip recents (pre-sorted) - console.log("DEBUG applying manual sort to", tag); listsClone[tag].sort(this._getManualComparator(tag)); } - console.log("DEBUG setting lists=listsClone", - this._state.lists["im.vector.fake.recent"].map(e => e.room.name), - listsClone["im.vector.fake.recent"].map(e => e.room.name)); this._setState({lists: listsClone}); } @@ -660,27 +650,36 @@ class RoomListStore extends Store { Object.keys(lists).forEach((listKey) => { let comparator; - console.log("DEBUG sorting", listKey, "using", getListAlgorithm(listKey, this._state.algorithm)); switch (getListAlgorithm(listKey, this._state.algorithm)) { case ALGO_RECENT: - comparator = (entryA, entryB) => { - return this._recentsComparator(entryA, entryB, tsOfNewestEventFn); - }; + comparator = (entryA, entryB) => this._recentsComparator(entryA, entryB, tsOfNewestEventFn); break; case ALGO_ALPHABETIC: - comparator = (entryA, entryB) => this._alphabeticComparator(entryA, entryB); + comparator = this._lexicographicalComparator; break; case ALGO_MANUAL: default: comparator = this._getManualComparator(listKey); break; } - console.log("DEBUG before", listKey, lists[listKey].map(e => e.room.name)); - lists[listKey].sort(comparator); // TODO inline the common CATEGORY comparator here? - console.log("DEBUG after", listKey, lists[listKey].map(e => e.room.name)); + + if (this._state.orderImportantFirst) { + lists[listKey].sort((entryA, entryB) => { + if (entryA.category !== entryB.category) { + const idxA = CATEGORY_ORDER.indexOf(entryA.category); + const idxB = CATEGORY_ORDER.indexOf(entryB.category); + if (idxA > idxB) return 1; + if (idxA < idxB) return -1; + return 0; // Technically not possible + } + return comparator(entryA, entryB); + }); + } else { + // skip the category comparison even though it should no-op when orderImportantFirst disabled + lists[listKey].sort(comparator); + } }); - console.log("DEBUG setting lists after comparator"); this._setState({ lists, ready: true, // Ready to receive updates to ordering @@ -739,34 +738,13 @@ class RoomListStore extends Store { _recentsComparator(entryA, entryB, tsOfNewestEventFn) { console.trace("DEBUG recents"); - if (entryA.category !== entryB.category) { - const idxA = CATEGORY_ORDER.indexOf(entryA.category); - const idxB = CATEGORY_ORDER.indexOf(entryB.category); - if (idxA > idxB) return 1; - if (idxA < idxB) return -1; - return 0; // Technically not possible - } - const timestampA = tsOfNewestEventFn(entryA.room); const timestampB = tsOfNewestEventFn(entryB.room); return timestampB - timestampA; } - _alphabeticComparator(entryA, entryB) { - if (entryA.category !== entryB.category) { - const idxA = CATEGORY_ORDER.indexOf(entryA.category); - const idxB = CATEGORY_ORDER.indexOf(entryB.category); - if (idxA > idxB) return 1; - if (idxA < idxB) return -1; - return 0; // Technically not possible - } - - // console.log("DEBUG alphabetic, same category", JSON.stringify(entryA.room.name), JSON.stringify(entryB.room.name), this._lexicographicalComparator(entryA.room, entryB.room)); - return this._lexicographicalComparator(entryA.room, entryB.room); - } - - _lexicographicalComparator(roomA, roomB) { - return roomA.name.localeCompare(roomB.name); + _lexicographicalComparator(entryA, entryB) { + return entryA.room.name.localeCompare(entryB.room.name); } _getManualComparator(tagName, optimisticRequest) { @@ -791,7 +769,7 @@ class RoomListStore extends Store { return -1; } - return a === b ? this._lexicographicalComparator(roomA, roomB) : (a > b ? 1 : -1); + return a === b ? this._lexicographicalComparator(entryA, entryB) : (a > b ? 1 : -1); }; } From d1503d8a65c0a985863c26c8daefa3e192c0c05c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 19 Feb 2020 14:55:49 +0000 Subject: [PATCH 006/522] fix edge case Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/stores/RoomListStore.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/stores/RoomListStore.js b/src/stores/RoomListStore.js index 3c6171f272..02dd04bda9 100644 --- a/src/stores/RoomListStore.js +++ b/src/stores/RoomListStore.js @@ -474,6 +474,12 @@ class RoomListStore extends Store { _setRoomCategory(room, category) { if (!room) return; // This should only happen in tests + if (!this._state.orderImportantFirst) { + // XXX bail here early to avoid https://github.com/vector-im/riot-web/issues/9216 + // this may mean that category updates are missed whilst not ordering by importance first + return; + } + const listsClone = {}; // Micro optimization: Support lazily loading the last timestamp in a room From 5a31b308cd3b017984d45e558415643b37c23a35 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 19 Feb 2020 15:09:05 +0000 Subject: [PATCH 007/522] remove unused clause Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/stores/RoomListStore.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stores/RoomListStore.js b/src/stores/RoomListStore.js index 02dd04bda9..5f2ed0f1b7 100644 --- a/src/stores/RoomListStore.js +++ b/src/stores/RoomListStore.js @@ -509,7 +509,7 @@ class RoomListStore extends Store { // Speed optimization: Don't do complicated math if we don't have to. if (!shouldHaveRoom) { listsClone[key] = this._state.lists[key].filter((e) => e.room.roomId !== room.roomId); - } else if (getListAlgorithm(key, this._state.algorithm) === ALGO_MANUAL || !this._state.orderImportantFirst) { + } else if (getListAlgorithm(key, this._state.algorithm) === ALGO_MANUAL) { // Manually ordered tags are sorted later, so for now we'll just clone the tag // and add our room if needed listsClone[key] = this._state.lists[key].filter((e) => e.room.roomId !== room.roomId); From f074e858634d3e459a9318ffa319506c256322aa Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 19 Feb 2020 16:35:05 +0000 Subject: [PATCH 008/522] tidy up Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/stores/RoomListStore.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stores/RoomListStore.js b/src/stores/RoomListStore.js index 5f2ed0f1b7..8467b0be58 100644 --- a/src/stores/RoomListStore.js +++ b/src/stores/RoomListStore.js @@ -55,6 +55,7 @@ export const ALGO_ALPHABETIC = "alphabetic"; export const ALGO_RECENT = "recent"; const CATEGORY_ORDER = [CATEGORY_RED, CATEGORY_GREY, CATEGORY_BOLD, CATEGORY_IDLE]; + const getListAlgorithm = (listKey, settingAlgorithm) => { // apply manual sorting only to m.favourite, otherwise respect the global setting // all the known tags are listed explicitly here to simplify future changes @@ -743,7 +744,6 @@ class RoomListStore extends Store { } _recentsComparator(entryA, entryB, tsOfNewestEventFn) { - console.trace("DEBUG recents"); const timestampA = tsOfNewestEventFn(entryA.room); const timestampB = tsOfNewestEventFn(entryB.room); return timestampB - timestampA; From 1739b7e0cc500a1ff52504d06a2b8c11ece49b83 Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Thu, 20 Feb 2020 20:09:03 -0600 Subject: [PATCH 009/522] Don't ask to enable analytics when Do Not Track is enabled Signed-off-by: Aaron Raimist --- src/components/structures/LoggedInView.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/structures/LoggedInView.js b/src/components/structures/LoggedInView.js index 9597f99cd2..023272cef1 100644 --- a/src/components/structures/LoggedInView.js +++ b/src/components/structures/LoggedInView.js @@ -585,7 +585,8 @@ const LoggedInView = createReactClass({ limitType={usageLimitEvent.getContent().limit_type} />; } else if (this.props.showCookieBar && - this.props.config.piwik + this.props.config.piwik && + navigator.doNotTrack != 1 ) { const policyUrl = this.props.config.piwik.policyUrl || null; topBar = ; From d3367834d0b2bbec83395059f7cf4804579dd89d Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Fri, 21 Feb 2020 21:53:51 -0600 Subject: [PATCH 010/522] Fix redo keyboard shortcut on macOS I added the correct macOS shortcut for redo which is Cmd+Shift+Z. I had to reorder the if statement so redo is checked first, otherwise it would detect the undo first and never check that I was actually trying to redo. Signed-off-by: Aaron Raimist --- .../views/rooms/BasicMessageComposer.js | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/components/views/rooms/BasicMessageComposer.js b/src/components/views/rooms/BasicMessageComposer.js index a2a01f4444..2b0f9a7554 100644 --- a/src/components/views/rooms/BasicMessageComposer.js +++ b/src/components/views/rooms/BasicMessageComposer.js @@ -370,6 +370,17 @@ export default class BasicMessageEditor extends React.Component { } else if (modKey && event.key === Key.GREATER_THAN) { this._onFormatAction("quote"); handled = true; + // redo + } else if ((modKey && event.key === Key.Y) || + (IS_MAC && event.shiftKey && event.key === Key.Z)) { + debugger; + if (this.historyManager.canRedo()) { + const {parts, caret} = this.historyManager.redo(); + // pass matching inputType so historyManager doesn't push echo + // when invoked from rerender callback. + model.reset(parts, caret, "historyRedo"); + } + handled = true; // undo } else if (modKey && event.key === Key.Z) { if (this.historyManager.canUndo()) { @@ -379,15 +390,6 @@ export default class BasicMessageEditor extends React.Component { model.reset(parts, caret, "historyUndo"); } handled = true; - // redo - } else if (modKey && event.key === Key.Y) { - if (this.historyManager.canRedo()) { - const {parts, caret} = this.historyManager.redo(); - // pass matching inputType so historyManager doesn't push echo - // when invoked from rerender callback. - model.reset(parts, caret, "historyRedo"); - } - handled = true; // insert newline on Shift+Enter } else if (event.key === Key.ENTER && (event.shiftKey || (IS_MAC && event.altKey))) { this._insertText("\n"); From 42c6818f952af0dbb159eb56d41dc621d6ca5e67 Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Fri, 21 Feb 2020 21:59:43 -0600 Subject: [PATCH 011/522] Remove debugger; Signed-off-by: Aaron Raimist --- src/components/views/rooms/BasicMessageComposer.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/views/rooms/BasicMessageComposer.js b/src/components/views/rooms/BasicMessageComposer.js index 2b0f9a7554..dd6addd062 100644 --- a/src/components/views/rooms/BasicMessageComposer.js +++ b/src/components/views/rooms/BasicMessageComposer.js @@ -373,7 +373,6 @@ export default class BasicMessageEditor extends React.Component { // redo } else if ((modKey && event.key === Key.Y) || (IS_MAC && event.shiftKey && event.key === Key.Z)) { - debugger; if (this.historyManager.canRedo()) { const {parts, caret} = this.historyManager.redo(); // pass matching inputType so historyManager doesn't push echo From 9bcea0aecaaa5914aa8306b37fd1fe178db951e1 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 24 Feb 2020 17:11:08 +0000 Subject: [PATCH 012/522] Notify electron of language changes Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/BasePlatform.js | 2 ++ src/languageHandler.js | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/src/BasePlatform.js b/src/BasePlatform.js index 14e34a1f40..295f99f6b4 100644 --- a/src/BasePlatform.js +++ b/src/BasePlatform.js @@ -162,4 +162,6 @@ export default class BasePlatform { getEventIndexingManager(): BaseEventIndexManager | null { return null; } + + async setLanguage(preferredLangs: string[]): Promise {} } diff --git a/src/languageHandler.js b/src/languageHandler.js index ddb7e2718c..79a172015a 100644 --- a/src/languageHandler.js +++ b/src/languageHandler.js @@ -21,6 +21,7 @@ import request from 'browser-request'; import counterpart from 'counterpart'; import React from 'react'; import SettingsStore, {SettingLevel} from "./settings/SettingsStore"; +import PlatformPeg from "./PlatformPeg"; // $webapp is a webpack resolve alias pointing to the output directory, see webpack config import webpackLangJsonUrl from "$webapp/i18n/languages.json"; @@ -285,6 +286,11 @@ export function setLanguage(preferredLangs) { preferredLangs = [preferredLangs]; } + const plaf = PlatformPeg.get(); + if (plaf) { + plaf.setLanguage(preferredLangs); + } + let langToUse; let availLangs; return getLangsJson().then((result) => { From 550ee216c64bace5a4b728e77a705d745a5e9cc1 Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Mon, 24 Feb 2020 18:22:07 -0600 Subject: [PATCH 013/522] Apply suggestions from code review Co-Authored-By: David Baker --- src/components/views/rooms/BasicMessageComposer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/rooms/BasicMessageComposer.js b/src/components/views/rooms/BasicMessageComposer.js index dd6addd062..52947aa6e2 100644 --- a/src/components/views/rooms/BasicMessageComposer.js +++ b/src/components/views/rooms/BasicMessageComposer.js @@ -371,8 +371,8 @@ export default class BasicMessageEditor extends React.Component { this._onFormatAction("quote"); handled = true; // redo - } else if ((modKey && event.key === Key.Y) || - (IS_MAC && event.shiftKey && event.key === Key.Z)) { + } else if ((!IS_MAC && modKey && event.key === Key.Y) || + (IS_MAC && modkey && event.shiftKey && event.key === Key.Z)) { if (this.historyManager.canRedo()) { const {parts, caret} = this.historyManager.redo(); // pass matching inputType so historyManager doesn't push echo From 866ed68615fadb80315e89813a235997ea6c96ff Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 24 Feb 2020 19:43:11 -0700 Subject: [PATCH 014/522] Ensure DMs tagged outside of account data work in the invite dialog Fixes https://github.com/vector-im/riot-web/issues/12418 Includes a refactor so we don't need to litter the code with the same magic string for DM tags. --- src/actions/RoomListActions.js | 14 +++++++------- src/components/views/dialogs/InviteDialog.js | 19 ++++++++++++++++++- src/components/views/rooms/RoomList.js | 8 ++++---- src/stores/RoomListStore.js | 13 ++++++++----- test/components/views/rooms/RoomList-test.js | 15 ++++++++------- 5 files changed, 45 insertions(+), 24 deletions(-) diff --git a/src/actions/RoomListActions.js b/src/actions/RoomListActions.js index d534fe5d1d..10a3848dda 100644 --- a/src/actions/RoomListActions.js +++ b/src/actions/RoomListActions.js @@ -15,7 +15,7 @@ limitations under the License. */ import { asyncAction } from './actionCreators'; -import RoomListStore from '../stores/RoomListStore'; +import RoomListStore, {TAG_DM} from '../stores/RoomListStore'; import Modal from '../Modal'; import * as Rooms from '../Rooms'; import { _t } from '../languageHandler'; @@ -73,11 +73,11 @@ RoomListActions.tagRoom = function(matrixClient, room, oldTag, newTag, oldIndex, const roomId = room.roomId; // Evil hack to get DMs behaving - if ((oldTag === undefined && newTag === 'im.vector.fake.direct') || - (oldTag === 'im.vector.fake.direct' && newTag === undefined) + if ((oldTag === undefined && newTag === TAG_DM) || + (oldTag === TAG_DM && newTag === undefined) ) { return Rooms.guessAndSetDMRoom( - room, newTag === 'im.vector.fake.direct', + room, newTag === TAG_DM, ).catch((err) => { const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); console.error("Failed to set direct chat tag " + err); @@ -91,10 +91,10 @@ RoomListActions.tagRoom = function(matrixClient, room, oldTag, newTag, oldIndex, const hasChangedSubLists = oldTag !== newTag; // More evilness: We will still be dealing with moving to favourites/low prio, - // but we avoid ever doing a request with 'im.vector.fake.direct`. + // but we avoid ever doing a request with TAG_DM. // // if we moved lists, remove the old tag - if (oldTag && oldTag !== 'im.vector.fake.direct' && + if (oldTag && oldTag !== TAG_DM && hasChangedSubLists ) { const promiseToDelete = matrixClient.deleteRoomTag( @@ -112,7 +112,7 @@ RoomListActions.tagRoom = function(matrixClient, room, oldTag, newTag, oldIndex, } // if we moved lists or the ordering changed, add the new tag - if (newTag && newTag !== 'im.vector.fake.direct' && + if (newTag && newTag !== TAG_DM && (hasChangedSubLists || metaData) ) { // metaData is the body of the PUT to set the tag, so it must diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js index 15e307fcd0..d229a4eedd 100644 --- a/src/components/views/dialogs/InviteDialog.js +++ b/src/components/views/dialogs/InviteDialog.js @@ -34,6 +34,7 @@ import {humanizeTime} from "../../../utils/humanize"; import createRoom, {canEncryptToAllUsers} from "../../../createRoom"; import {inviteMultipleToRoom} from "../../../RoomInvite"; import SettingsStore from '../../../settings/SettingsStore'; +import RoomListStore, {TAG_DM} from "../../../stores/RoomListStore"; export const KIND_DM = "dm"; export const KIND_INVITE = "invite"; @@ -332,7 +333,23 @@ export default class InviteDialog extends React.PureComponent { } _buildRecents(excludedTargetIds: Set): {userId: string, user: RoomMember, lastActive: number} { - const rooms = DMRoomMap.shared().getUniqueRoomsWithIndividuals(); + const rooms = DMRoomMap.shared().getUniqueRoomsWithIndividuals(); // map of userId => js-sdk Room + + // Also pull in all the rooms tagged as m.direct so we don't miss anything. Sometimes the + // room list doesn't tag the room for the DMRoomMap, but does for the room list. + const taggedRooms = RoomListStore.getRoomLists(); + const dmTaggedRooms = taggedRooms[TAG_DM]; + const myUserId = MatrixClientPeg.get().getUserId(); + for (const dmRoom of dmTaggedRooms) { + const otherMembers = dmRoom.getJoinedMembers().filter(u => u.userId !== myUserId); + for (const member of otherMembers) { + if (rooms[member.userId]) continue; // already have a room + + console.warn(`Adding DM room for ${member.userId} as ${dmRoom.roomId} from tag, not DM map`); + rooms[member.userId] = dmRoom; + } + } + const recents = []; for (const userId in rooms) { // Filter out user IDs that are already in the room / should be excluded diff --git a/src/components/views/rooms/RoomList.js b/src/components/views/rooms/RoomList.js index f41400ecfc..99f30d9ba1 100644 --- a/src/components/views/rooms/RoomList.js +++ b/src/components/views/rooms/RoomList.js @@ -28,7 +28,7 @@ import rate_limited_func from "../../../ratelimitedfunc"; import * as Rooms from '../../../Rooms'; import DMRoomMap from '../../../utils/DMRoomMap'; import TagOrderStore from '../../../stores/TagOrderStore'; -import RoomListStore from '../../../stores/RoomListStore'; +import RoomListStore, {TAG_DM} from '../../../stores/RoomListStore'; import CustomRoomTagStore from '../../../stores/CustomRoomTagStore'; import GroupStore from '../../../stores/GroupStore'; import RoomSubList from '../../structures/RoomSubList'; @@ -718,11 +718,11 @@ export default createReactClass({ incomingCall: incomingCallIfTaggedAs('m.favourite'), }, { - list: this.state.lists['im.vector.fake.direct'], + list: this.state.lists[TAG_DM], label: _t('Direct Messages'), - tagName: "im.vector.fake.direct", + tagName: TAG_DM, order: "recent", - incomingCall: incomingCallIfTaggedAs('im.vector.fake.direct'), + incomingCall: incomingCallIfTaggedAs(TAG_DM), onAddRoom: () => {dis.dispatch({action: 'view_create_chat'});}, addRoomLabel: _t("Start chat"), }, diff --git a/src/stores/RoomListStore.js b/src/stores/RoomListStore.js index a0785cf10e..0a38ac6591 100644 --- a/src/stores/RoomListStore.js +++ b/src/stores/RoomListStore.js @@ -37,11 +37,14 @@ const CATEGORY_BOLD = "bold"; // Unread messages (not notified, 'Mentions Only const CATEGORY_IDLE = "idle"; // Nothing of interest const CATEGORY_ORDER = [CATEGORY_RED, CATEGORY_GREY, CATEGORY_BOLD, CATEGORY_IDLE]; + +export const TAG_DM = "im.vector.fake.direct"; + const LIST_ORDERS = { "m.favourite": "manual", "im.vector.fake.invite": "recent", "im.vector.fake.recent": "recent", - "im.vector.fake.direct": "recent", + [TAG_DM]: "recent", "m.lowpriority": "recent", "im.vector.fake.archived": "recent", }; @@ -95,7 +98,7 @@ class RoomListStore extends Store { "im.vector.fake.invite": [], "m.favourite": [], "im.vector.fake.recent": [], - "im.vector.fake.direct": [], + [TAG_DM]: [], "m.lowpriority": [], "im.vector.fake.archived": [], }; @@ -323,7 +326,7 @@ class RoomListStore extends Store { } else if (dmRoomMap.getUserIdForRoomId(room.roomId) && tags.length === 0) { // We intentionally don't duplicate rooms in other tags into the people list // as a feature. - tags.push("im.vector.fake.direct"); + tags.push(TAG_DM); } else if (tags.length === 0) { tags.push("im.vector.fake.recent"); } @@ -553,7 +556,7 @@ class RoomListStore extends Store { "im.vector.fake.invite": [], "m.favourite": [], "im.vector.fake.recent": [], - "im.vector.fake.direct": [], + [TAG_DM]: [], "m.lowpriority": [], "im.vector.fake.archived": [], }; @@ -590,7 +593,7 @@ class RoomListStore extends Store { } } else if (dmRoomMap.getUserIdForRoomId(room.roomId)) { // "Direct Message" rooms (that we're still in and that aren't otherwise tagged) - lists["im.vector.fake.direct"].push({room, category: this._calculateCategory(room)}); + lists[TAG_DM].push({room, category: this._calculateCategory(room)}); } else { lists["im.vector.fake.recent"].push({room, category: this._calculateCategory(room)}); } diff --git a/test/components/views/rooms/RoomList-test.js b/test/components/views/rooms/RoomList-test.js index dc92221c21..8dc4647920 100644 --- a/test/components/views/rooms/RoomList-test.js +++ b/test/components/views/rooms/RoomList-test.js @@ -14,6 +14,7 @@ import DMRoomMap from '../../../../src/utils/DMRoomMap.js'; import GroupStore from '../../../../src/stores/GroupStore.js'; import { MatrixClient, Room, RoomMember } from 'matrix-js-sdk'; +import {TAG_DM} from "../../../../src/stores/RoomListStore"; function generateRoomId() { return '!' + Math.random().toString().slice(2, 10) + ':domain'; @@ -152,7 +153,7 @@ describe('RoomList', () => { // Set up the room that will be moved such that it has the correct state for a room in // the section for oldTag if (['m.favourite', 'm.lowpriority'].includes(oldTag)) movingRoom.tags = {[oldTag]: {}}; - if (oldTag === 'im.vector.fake.direct') { + if (oldTag === TAG_DM) { // Mock inverse m.direct DMRoomMap.shared().roomToUser = { [movingRoom.roomId]: '@someotheruser:domain', @@ -179,7 +180,7 @@ describe('RoomList', () => { // TODO: Re-enable dragging tests when we support dragging again. describe.skip('does correct optimistic update when dragging from', () => { it('rooms to people', () => { - expectCorrectMove(undefined, 'im.vector.fake.direct'); + expectCorrectMove(undefined, TAG_DM); }); it('rooms to favourites', () => { @@ -194,15 +195,15 @@ describe('RoomList', () => { // Whe running the app live, it updates when some other event occurs (likely the // m.direct arriving) that these tests do not fire. xit('people to rooms', () => { - expectCorrectMove('im.vector.fake.direct', undefined); + expectCorrectMove(TAG_DM, undefined); }); it('people to favourites', () => { - expectCorrectMove('im.vector.fake.direct', 'm.favourite'); + expectCorrectMove(TAG_DM, 'm.favourite'); }); it('people to lowpriority', () => { - expectCorrectMove('im.vector.fake.direct', 'm.lowpriority'); + expectCorrectMove(TAG_DM, 'm.lowpriority'); }); it('low priority to rooms', () => { @@ -210,7 +211,7 @@ describe('RoomList', () => { }); it('low priority to people', () => { - expectCorrectMove('m.lowpriority', 'im.vector.fake.direct'); + expectCorrectMove('m.lowpriority', TAG_DM); }); it('low priority to low priority', () => { @@ -222,7 +223,7 @@ describe('RoomList', () => { }); it('favourites to people', () => { - expectCorrectMove('m.favourite', 'im.vector.fake.direct'); + expectCorrectMove('m.favourite', TAG_DM); }); it('favourites to low priority', () => { From e63370799ee8f8defdf343d2e8a220b43b6968cf Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 25 Feb 2020 10:57:40 +0000 Subject: [PATCH 015/522] make BasePlatform::setLanguage sync, handle promises internally Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/BasePlatform.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BasePlatform.js b/src/BasePlatform.js index 295f99f6b4..a935f4a767 100644 --- a/src/BasePlatform.js +++ b/src/BasePlatform.js @@ -163,5 +163,5 @@ export default class BasePlatform { return null; } - async setLanguage(preferredLangs: string[]): Promise {} + setLanguage(preferredLangs: string[]) {} } From 12e8ad8f6bb8d4b68b61e165db104489cc2e2b19 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Tue, 25 Feb 2020 11:23:51 +0000 Subject: [PATCH 016/522] Show both bootstrap and reset cross-signing where appropriate For cases like having keys on your account but not on the current device, this ensures we offer both bootstrap and reset as possible paths. --- .../views/settings/CrossSigningPanel.js | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/components/views/settings/CrossSigningPanel.js b/src/components/views/settings/CrossSigningPanel.js index aba2d03ad2..d583210c9a 100644 --- a/src/components/views/settings/CrossSigningPanel.js +++ b/src/components/views/settings/CrossSigningPanel.js @@ -158,18 +158,27 @@ export default class CrossSigningPanel extends React.PureComponent { )}

; } - let bootstrapButton; + let resetButton; if (enabledForAccount) { - bootstrapButton = ( - - {_t("Reset cross-signing and secret storage")} - + resetButton = ( +
+ + {_t("Reset cross-signing and secret storage")} + +
); - } else if (!enabledForAccount && homeserverSupportsCrossSigning) { + } + let bootstrapButton; + if ( + (!enabledForAccount || !crossSigningPublicKeysOnDevice) && + homeserverSupportsCrossSigning + ) { bootstrapButton = ( - - {_t("Bootstrap cross-signing and secret storage")} - +
+ + {_t("Bootstrap cross-signing and secret storage")} + +
); } @@ -198,9 +207,8 @@ export default class CrossSigningPanel extends React.PureComponent { {errorSection} -
- {bootstrapButton} -
+ {bootstrapButton} + {resetButton}
); } From 9ed83b8648e9a33443d6f77a9b95fcce1cc1ee9c Mon Sep 17 00:00:00 2001 From: Zoe Date: Tue, 25 Feb 2020 11:34:01 +0000 Subject: [PATCH 017/522] Show a warning dialog when user indicates a new session wasn't them --- .../views/dialogs/NewSessionReviewDialog.js | 20 ++++++++++++++++++- .../views/toasts/UnverifiedSessionToast.js | 6 ++++++ src/i18n/strings/en_EN.json | 5 +++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/components/views/dialogs/NewSessionReviewDialog.js b/src/components/views/dialogs/NewSessionReviewDialog.js index 0019e0644f..4cc8cb54ed 100644 --- a/src/components/views/dialogs/NewSessionReviewDialog.js +++ b/src/components/views/dialogs/NewSessionReviewDialog.js @@ -23,6 +23,7 @@ import VerificationRequestDialog from './VerificationRequestDialog'; import BaseDialog from './BaseDialog'; import DialogButtons from '../elements/DialogButtons'; import {MatrixClientPeg} from "../../../MatrixClientPeg"; +import * as sdk from '../../../index'; @replaceableComponent("views.dialogs.NewSessionReviewDialog") export default class NewSessionReviewDialog extends React.PureComponent { @@ -33,7 +34,24 @@ export default class NewSessionReviewDialog extends React.PureComponent { } onCancelClick = () => { - this.props.onFinished(false); + const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); + Modal.createTrackedDialog("Verification failed", "insecure", ErrorDialog, { + headerImage: require("../../../../res/img/e2e/warning.svg"), + title: _t("Your account is not secure"), + description:
+ {_t("One of the following may be compromised:")} +
    +
  • {_t("Your password")}
  • +
  • {_t("Your homeserver")}
  • +
  • {_t("This device, or the other device")}
  • +
  • {_t("The internet connection either device is using")}
  • +
+
+ {_t("We recomment you change your password and recovery key in Settings immediately")} +
+
, + onFinished: () => this.props.onFinished(false), + }); } onContinueClick = async () => { diff --git a/src/components/views/toasts/UnverifiedSessionToast.js b/src/components/views/toasts/UnverifiedSessionToast.js index 15cf18f47d..cb0cadcdc8 100644 --- a/src/components/views/toasts/UnverifiedSessionToast.js +++ b/src/components/views/toasts/UnverifiedSessionToast.js @@ -42,6 +42,12 @@ export default class UnverifiedSessionToast extends React.PureComponent { Modal.createTrackedDialog('New Session Review', 'Starting dialog', NewSessionReviewDialog, { userId: MatrixClientPeg.get().getUserId(), device, + onFinished: (r) => { + if (!r) { + /* This'll come back false if the user clicks "this wasn't me" and saw a warning dialog */ + this._onLaterClick(); + } + }, }, null, /* priority = */ false, /* static = */ true); }; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 1d030f5118..31e9abd646 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1572,6 +1572,11 @@ "Are you sure you want to sign out?": "Are you sure you want to sign out?", "Your homeserver doesn't seem to support this feature.": "Your homeserver doesn't seem to support this feature.", "Message edits": "Message edits", + "Your account is not secure": "Your account is not secure", + "Your password": "Your password", + "This device, or the other device": "This device, or the other device", + "The internet connection either device is using": "The internet connection either device is using", + "We recomment you change your password and recovery key in Settings immediately": "We recomment you change your password and recovery key in Settings immediately", "New session": "New session", "Use this session to verify your new one, granting it access to encrypted messages:": "Use this session to verify your new one, granting it access to encrypted messages:", "If you didn’t sign in to this session, your account may be compromised.": "If you didn’t sign in to this session, your account may be compromised.", From 569d5b6156fee2e353ee02ac96feac548a812b3f Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 25 Feb 2020 13:13:31 +0100 Subject: [PATCH 018/522] show right panel before waiting for .ready event to send --- src/components/views/toasts/VerificationRequestToast.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/toasts/VerificationRequestToast.js b/src/components/views/toasts/VerificationRequestToast.js index 4a881ae852..c11cefc839 100644 --- a/src/components/views/toasts/VerificationRequestToast.js +++ b/src/components/views/toasts/VerificationRequestToast.js @@ -78,7 +78,6 @@ export default class VerificationRequestToast extends React.PureComponent { // no room id for to_device requests const cli = MatrixClientPeg.get(); try { - await request.accept(); if (request.channel.roomId) { dis.dispatch({ action: 'view_room', @@ -99,6 +98,7 @@ export default class VerificationRequestToast extends React.PureComponent { verificationRequest: request, }, null, /* priority = */ false, /* static = */ true); } + await request.accept(); } catch (err) { console.error(err.message); } From 2127edb7b8007092ec30648db0e0f8ebba3253c8 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 25 Feb 2020 13:13:51 +0100 Subject: [PATCH 019/522] show "Waiting for network" in EncryptionInfo after accepting in toast --- .../views/right_panel/EncryptionInfo.js | 15 ++++++++++----- .../views/right_panel/EncryptionPanel.js | 7 ++++++- src/i18n/strings/en_EN.json | 1 + 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/components/views/right_panel/EncryptionInfo.js b/src/components/views/right_panel/EncryptionInfo.js index 299e553769..3638e1058f 100644 --- a/src/components/views/right_panel/EncryptionInfo.js +++ b/src/components/views/right_panel/EncryptionInfo.js @@ -28,12 +28,17 @@ export const PendingActionSpinner = ({text}) => {
; }; -const EncryptionInfo = ({pending, member, onStartVerification}) => { +const EncryptionInfo = ({waitingForOtherParty, waitingForNetwork, member, onStartVerification}) => { let content; - if (pending) { - const text = _t("Waiting for %(displayName)s to accept…", { - displayName: member.displayName || member.name || member.userId, - }); + if (waitingForOtherParty || waitingForNetwork) { + let text; + if (waitingForOtherParty) { + text = _t("Waiting for %(displayName)s to accept…", { + displayName: member.displayName || member.name || member.userId, + }); + } else { + text = _t("Waiting for network…"); + } content = ; } else { const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); diff --git a/src/components/views/right_panel/EncryptionPanel.js b/src/components/views/right_panel/EncryptionPanel.js index 24d2f9f010..3ba6ca9a8a 100644 --- a/src/components/views/right_panel/EncryptionPanel.js +++ b/src/components/views/right_panel/EncryptionPanel.js @@ -76,8 +76,13 @@ const EncryptionPanel = ({verificationRequest, member, onClose, layout}) => { }, [member.userId]); const requested = request && (phase === PHASE_REQUESTED || phase === PHASE_UNSENT || phase === undefined); + const initiatedByMe = request && request.initiatedByMe; if (!request || requested) { - return ; + return ; } else { return ( Date: Tue, 25 Feb 2020 13:18:27 +0100 Subject: [PATCH 020/522] UI spinner when clicking "they don't match" --- .../views/verification/VerificationShowSas.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/components/views/verification/VerificationShowSas.js b/src/components/views/verification/VerificationShowSas.js index 4d3c962385..ea81ef3d65 100644 --- a/src/components/views/verification/VerificationShowSas.js +++ b/src/components/views/verification/VerificationShowSas.js @@ -48,6 +48,11 @@ export default class VerificationShowSas extends React.Component { this.props.onDone(); }; + onDontMatchClick = () => { + this.setState({ cancelling: true }); + this.props.onCancel(); + }; + render() { let sasDisplay; let sasCaption; @@ -98,9 +103,14 @@ export default class VerificationShowSas extends React.Component { } let confirm; - if (this.state.pending) { - const {displayName} = this.props; - const text = _t("Waiting for %(displayName)s to verify…", {displayName}); + if (this.state.pending || this.state.cancelling) { + let text; + if (this.state.pending) { + const {displayName} = this.props; + text = _t("Waiting for %(displayName)s to verify…", {displayName}); + } else { + text = _t("Waiting for network…"); + } confirm = ; } else { // FIXME: stop using DialogButtons here once this component is only used in the right panel verification @@ -109,7 +119,7 @@ export default class VerificationShowSas extends React.Component { onPrimaryButtonClick={this.onMatchClick} primaryButtonClass="mx_UserInfo_wideButton" cancelButton={_t("They don't match")} - onCancel={this.props.onCancel} + onCancel={this.onDontMatchClick} cancelButtonClass="mx_UserInfo_wideButton" />; } From bd584ab23651ac29eaeb445b1a36844ffb328f0f Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 25 Feb 2020 13:27:19 +0100 Subject: [PATCH 021/522] from verification tile, also don't wait to show right panel --- src/components/views/messages/MKeyVerificationRequest.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/messages/MKeyVerificationRequest.js b/src/components/views/messages/MKeyVerificationRequest.js index d02319119e..df1e14a717 100644 --- a/src/components/views/messages/MKeyVerificationRequest.js +++ b/src/components/views/messages/MKeyVerificationRequest.js @@ -62,8 +62,8 @@ export default class MKeyVerificationRequest extends React.Component { const request = this.props.mxEvent.verificationRequest; if (request) { try { - await request.accept(); this._openRequest(); + await request.accept(); } catch (err) { console.error(err.message); } From 682781aa48fb4f2b41ebae6662cd24628c33ddce Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 25 Feb 2020 13:27:59 +0100 Subject: [PATCH 022/522] better word smithing --- src/components/views/messages/MKeyVerificationRequest.js | 4 ++-- src/components/views/right_panel/EncryptionInfo.js | 2 +- src/components/views/verification/VerificationShowSas.js | 2 +- src/i18n/strings/en_EN.json | 7 ++++--- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/components/views/messages/MKeyVerificationRequest.js b/src/components/views/messages/MKeyVerificationRequest.js index df1e14a717..f49ae1b6b1 100644 --- a/src/components/views/messages/MKeyVerificationRequest.js +++ b/src/components/views/messages/MKeyVerificationRequest.js @@ -136,9 +136,9 @@ export default class MKeyVerificationRequest extends React.Component { } else if (request.cancelled) { stateLabel = this._cancelledLabel(request.cancellingUserId); } else if (request.accepting) { - stateLabel = _t("accepting …"); + stateLabel = _t("Accepting …"); } else if (request.declining) { - stateLabel = _t("declining …"); + stateLabel = _t("Declining …"); } stateNode = (
{stateLabel}
); } diff --git a/src/components/views/right_panel/EncryptionInfo.js b/src/components/views/right_panel/EncryptionInfo.js index 3638e1058f..bbedc9b303 100644 --- a/src/components/views/right_panel/EncryptionInfo.js +++ b/src/components/views/right_panel/EncryptionInfo.js @@ -37,7 +37,7 @@ const EncryptionInfo = ({waitingForOtherParty, waitingForNetwork, member, onStar displayName: member.displayName || member.name || member.userId, }); } else { - text = _t("Waiting for network…"); + text = _t("Accepting…"); } content = ; } else { diff --git a/src/components/views/verification/VerificationShowSas.js b/src/components/views/verification/VerificationShowSas.js index ea81ef3d65..e640a75129 100644 --- a/src/components/views/verification/VerificationShowSas.js +++ b/src/components/views/verification/VerificationShowSas.js @@ -109,7 +109,7 @@ export default class VerificationShowSas extends React.Component { const {displayName} = this.props; text = _t("Waiting for %(displayName)s to verify…", {displayName}); } else { - text = _t("Waiting for network…"); + text = _t("Cancelling…"); } confirm = ; } else { diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 6192302d18..3b2bca49a3 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -465,6 +465,7 @@ "Verify this user by confirming the following number appears on their screen.": "Verify this user by confirming the following number appears on their screen.", "Unable to find a supported verification method.": "Unable to find a supported verification method.", "Waiting for %(displayName)s to verify…": "Waiting for %(displayName)s to verify…", + "Cancelling…": "Cancelling…", "They match": "They match", "They don't match": "They don't match", "To be secure, do this in person or use a trusted way to communicate.": "To be secure, do this in person or use a trusted way to communicate.", @@ -1165,7 +1166,7 @@ "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.", "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.", "Waiting for %(displayName)s to accept…": "Waiting for %(displayName)s to accept…", - "Waiting for network…": "Waiting for network…", + "Accepting…": "Accepting…", "Start Verification": "Start Verification", "Messages in this room are end-to-end encrypted.": "Messages in this room are end-to-end encrypted.", "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Your messages are secured and only you and the recipient have the unique keys to unlock them.", @@ -1249,8 +1250,8 @@ "You cancelled": "You cancelled", "%(name)s declined": "%(name)s declined", "%(name)s cancelled": "%(name)s cancelled", - "accepting …": "accepting …", - "declining …": "declining …", + "Accepting …": "Accepting …", + "Declining …": "Declining …", "%(name)s wants to verify": "%(name)s wants to verify", "You sent a verification request": "You sent a verification request", "Error decrypting video": "Error decrypting video", From 1d8756b95d7b7230159548911f781e94f55957cf Mon Sep 17 00:00:00 2001 From: Zoe Date: Tue, 25 Feb 2020 15:40:06 +0000 Subject: [PATCH 023/522] text improvements --- src/components/views/dialogs/NewSessionReviewDialog.js | 6 +++--- src/i18n/strings/en_EN.json | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/views/dialogs/NewSessionReviewDialog.js b/src/components/views/dialogs/NewSessionReviewDialog.js index 4cc8cb54ed..125811115f 100644 --- a/src/components/views/dialogs/NewSessionReviewDialog.js +++ b/src/components/views/dialogs/NewSessionReviewDialog.js @@ -43,11 +43,11 @@ export default class NewSessionReviewDialog extends React.PureComponent {
  • {_t("Your password")}
  • {_t("Your homeserver")}
  • -
  • {_t("This device, or the other device")}
  • -
  • {_t("The internet connection either device is using")}
  • +
  • {_t("This session, or the other session")}
  • +
  • {_t("The internet connection either session is using")}
- {_t("We recomment you change your password and recovery key in Settings immediately")} + {_t("We recommend you change your password and recovery key in Settings immediately")}
, onFinished: () => this.props.onFinished(false), diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 31e9abd646..f702da6b4c 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1574,9 +1574,9 @@ "Message edits": "Message edits", "Your account is not secure": "Your account is not secure", "Your password": "Your password", - "This device, or the other device": "This device, or the other device", - "The internet connection either device is using": "The internet connection either device is using", - "We recomment you change your password and recovery key in Settings immediately": "We recomment you change your password and recovery key in Settings immediately", + "This session, or the other session": "This session, or the other session", + "The internet connection either session is using": "The internet connection either session is using", + "We recommend you change your password and recovery key in Settings immediately": "We recommend you change your password and recovery key in Settings immediately", "New session": "New session", "Use this session to verify your new one, granting it access to encrypted messages:": "Use this session to verify your new one, granting it access to encrypted messages:", "If you didn’t sign in to this session, your account may be compromised.": "If you didn’t sign in to this session, your account may be compromised.", From 8299ee4128599d6676b2c5de7f891de80f8f8174 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Tue, 25 Feb 2020 02:28:30 +0000 Subject: [PATCH 024/522] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2130 of 2130 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 0cbbaccb35..d14a77744e 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2157,5 +2157,9 @@ "You declined": "您拒絕了", "%(name)s declined": "%(name)s 拒絕了", "accepting …": "正在接受……", - "declining …": "正在拒絕……" + "declining …": "正在拒絕……", + "Your homeserver does not support cross-signing.": "您的家伺服器不支援交叉簽章。", + "Homeserver feature support:": "家伺服器功能支援:", + "exists": "存在", + "Verification Requests": "驗證請求" } From fe30b63404b5f43e3e8f632c4ca5690d49c6f7f4 Mon Sep 17 00:00:00 2001 From: Nathan Follens Date: Tue, 25 Feb 2020 14:57:12 +0000 Subject: [PATCH 025/522] Translated using Weblate (Dutch) Currently translated at 88.1% (1877 of 2130 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nl/ --- src/i18n/strings/nl.json | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index e57d28d5e5..8636efee1d 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -247,8 +247,8 @@ "%(senderName)s requested a VoIP conference.": "%(senderName)s heeft een VoIP-vergadering aangevraagd.", "Results from DuckDuckGo": "Resultaten van DuckDuckGo", "Return to login screen": "Terug naar het aanmeldscherm", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot heeft geen toestemming u meldingen te versturen - controleer uw browserinstellingen", - "Riot was not given permission to send notifications - please try again": "Riot kreeg geen toestemming u meldingen te sturen - probeer het opnieuw", + "Riot does not have permission to send you notifications - please check your browser settings": "Riot heeft geen toestemming om u meldingen te versturen - controleer uw browserinstellingen", + "Riot was not given permission to send notifications - please try again": "Riot kreeg geen toestemming om u meldingen te sturen - probeer het opnieuw", "riot-web version:": "riot-web-versie:", "Room %(roomId)s not visible": "Gesprek %(roomId)s is niet zichtbaar", "Room Colour": "Gesprekskleur", @@ -914,7 +914,7 @@ "You need to register to do this. Would you like to register now?": "Hiervoor dient u zich te registreren. Wilt u dat nu doen?", "This homeserver has hit its Monthly Active User limit.": "Deze thuisserver heeft zijn limiet voor maandelijks actieve gebruikers bereikt.", "This homeserver has exceeded one of its resource limits.": "Deze thuisserver heeft één van zijn systeembronlimieten overschreden.", - "Whether or not you're logged in (we don't record your username)": "Of u al dan niet ingelogd bent (we slaan uw gebruiksnaam niet op)", + "Whether or not you're logged in (we don't record your username)": "Of u al dan niet aangemeld bent (we slaan uw gebruikersnaam niet op)", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Het bestand ‘%(fileName)s’ is groter dan de uploadlimiet van de thuisserver", "Unable to load! Check your network connectivity and try again.": "Laden mislukt! Controleer uw netwerktoegang en probeer het nogmaals.", "Failed to invite users to the room:": "Kon de volgende gebruikers hier niet uitnodigen:", @@ -1669,12 +1669,12 @@ "Notification Autocomplete": "Meldingen automatisch voltooien", "Room Autocomplete": "Gesprekken automatisch aanvullen", "User Autocomplete": "Gebruikers automatisch aanvullen", - "Add Email Address": "Emailadres toevoegen", + "Add Email Address": "E-mailadres toevoegen", "Add Phone Number": "Telefoonnummer toevoegen", "Your email address hasn't been verified yet": "Uw emailadres is nog niet gecontroleerd", "Click the link in the email you received to verify and then click continue again.": "Open de link in de ontvangen contrôle-email, en klik dan op \"Doorgaan\".", "%(creator)s created and configured the room.": "Gesprek gestart en ingesteld door %(creator)s.", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Dit gesprek bevat onbekende sessies. Tenzij u die verifieert zou iemand u kunnen afluisteren.", + "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Dit gesprek bevat onbekende sessies. Tenzij u die verifieert zou iemand u kunnen afluisteren.", "Setting up keys": "Sleutelconfiguratie", "Verify this session": "Deze sessie verifiëren", "Encryption upgrade available": "Er is een bijgewerkte versleuteling beschikbaar", @@ -1682,18 +1682,18 @@ "Help": "Hulp", "Set up encryption": "Versleuteling instellen", "Unverified session": "Ongeverifieerde sessie", - "This action requires accessing the default identity server to validate an email address or phone number, but the server does not have any terms of service.": "Dit vergt toegang tot de verstek-identiteitsserver om emailadres of telefoonummer te valideren, maar die server heeft kent geen gebruiksvoorwaarden.", - "Trust": "Vertrouw", + "This action requires accessing the default identity server to validate an email address or phone number, but the server does not have any terms of service.": "Dit vergt toegang tot de standaardidentiteitsserver om een e-mailadres of telefoonnummer te valideren, maar die server heeft geen gebruiksvoorwaarden.", + "Trust": "Vertrouwen", "Custom (%(level)s)": "Aangepast (%(level)s)", - "Error upgrading room": "Bijwerken gesprek mislukt", - "Double check that your server supports the room version chosen and try again.": "Ga nogmaals na dat de server de gekozen gespreksversie ondersteunt, en probeer dan opnieuw.", + "Error upgrading room": "Bijwerken van gesprek mislukt", + "Double check that your server supports the room version chosen and try again.": "Ga nogmaals na dat de server de gekozen gespreksversie ondersteunt, en probeer het dan opnieuw.", "Verifies a user, session, and pubkey tuple": "Verifieert een combinatie van gebruiker+sessie+publieke sleutel", "Unknown (user, session) pair:": "Onbekende combinatie gebruiker+sessie:", "Session already verified!": "Sessie al geverifieerd!", - "WARNING: Session already verified, but keys do NOT MATCH!": "PAS OP: De sessie is al geverifieerd, maar de sleutels komen NIET OVEREEN!", - "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "PAS OP: Sleutelverificatie MISLUKT! De combinatie %userId)s + sessie %(deviceId)s is ondertekend met \"%(fprint)s\" - maar de opgegeven sleutel is \"%(fingerprint)s\". Wellicht worden uw berichten onderschept!", - "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "De door u verschafte en de van %(userId)ss sessie %(deviceId)s verkregen sleutels komen overeen. De sessie is daarmee geverifieerd.", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName) heeft %(addedAddresses)s en %(count)d andere adressen aan dit gesprek toegevoegd", + "WARNING: Session already verified, but keys do NOT MATCH!": "PAS OP: de sessie is al geverifieerd, maar de sleutels komen NIET OVEREEN!", + "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "PAS OP: sleutelverificatie MISLUKT! De combinatie %(userId)s + sessie %(deviceId)s is ondertekend met ‘%(fprint)s’ - maar de opgegeven sleutel is ‘%(fingerprint)s’. Wellicht worden uw berichten onderschept!", + "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "De door u verschafte en de van %(userId)ss sessie %(deviceId)s verkregen sleutels komen overeen. De sessie is daarmee geverifieerd.", + "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s heeft %(addedAddresses)s en %(count)s andere adressen aan dit gesprek toegevoegd", "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s heeft dit gesprek ontdaan van %(removedAddresses)s en %(count)s andere adressen", "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s heeft dit gesprek ontdaan van %(countRemoved)s adressen, en er %(countAdded)s toegevoegd", "%(senderName)s placed a voice call.": "%(senderName)s probeert u te bellen.", @@ -1717,12 +1717,12 @@ "%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s heeft het patroon van een banregel voor gesprekken wegens %(reason)s aangepast van %(oldGlob)s tot %(newGlob)s", "%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s heeft het patroon van een banregel voor servers wegens %(reason)s aangepast van %(oldGlob)s tot %(newGlob)s", "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s heeft het patroon van een banregel wegens %(reason)s aangepast van %(oldGlob)s tot %(newGlob)s", - "The message you are trying to send is too large.": "Uw bericht is te lang om te verzenden.", + "The message you are trying to send is too large.": "Uw bericht is te lang om te versturen.", "a few seconds ago": "enige tellen geleden", "about a minute ago": "een minuut of zo geleden", "%(num)s minutes ago": "%(num)s minuten geleden", "about an hour ago": "een uur of zo geleden", - "%(num)s hours ago": "%(num)s uren geleden", + "%(num)s hours ago": "%(num)s uur geleden", "about a day ago": "een dag of zo geleden", "%(num)s days ago": "%(num)s dagen geleden", "a few seconds from now": "over een paar tellen", @@ -1778,12 +1778,12 @@ "The version of Riot": "De versie van Riot", "Whether you're using Riot on a device where touch is the primary input mechanism": "Of u Riot op een apparaat gebruikt waarop een aanraakscherm de voornaamste invoermethode is", "Whether you're using Riot as an installed Progressive Web App": "Of u Riot gebruikt als een geïnstalleerde Progressive-Web-App", - "Your user agent": "Uw browsers user-agent", + "Your user agent": "Uw gebruikersagent", "The information being sent to us to help make Riot better includes:": "De informatie die naar ons wordt verstuurd om Riot te verbeteren bevat:", - "If you cancel now, you won't complete verifying the other user.": "Als u nu annuleert zul u de andere gebruiker niet verifiëren.", - "If you cancel now, you won't complete verifying your other session.": "Als u nu annuleert zal u uw andere sessie niet verifiëren.", + "If you cancel now, you won't complete verifying the other user.": "Als u nu annuleert zult u de andere gebruiker niet verifiëren.", + "If you cancel now, you won't complete verifying your other session.": "Als u nu annuleert zult u uw andere sessie niet verifiëren.", "If you cancel now, you won't complete your secret storage operation.": "Als u nu annuleert zal de sleutelopslag worden afgebroken.", - "Cancel entering passphrase?": "Wachtwoord invoer annuleren?", + "Cancel entering passphrase?": "Wachtwoordinvoer annuleren?", "Show typing notifications": "Typmeldingen weergeven", "Verify this session by completing one of the following:": "Verifieer deze sessie door een van het volgende te doen:", "Scan this unique code": "Scan deze unieke code", From ffb82e4ed6118ef529066b356ec46fa03b5770de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Tue, 25 Feb 2020 08:14:46 +0000 Subject: [PATCH 026/522] Translated using Weblate (French) Currently translated at 100.0% (2130 of 2130 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 63e8159924..23e574013d 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2158,5 +2158,9 @@ "You declined": "Vous avez refusé", "%(name)s declined": "%(name)s a refusé", "accepting …": "nous acceptons…", - "declining …": "nous refusons…" + "declining …": "nous refusons…", + "Your homeserver does not support cross-signing.": "Votre serveur d’accueil ne prend pas en charge la signature croisée.", + "Homeserver feature support:": "Prise en charge de la fonctionnalité par le serveur d’accueil :", + "exists": "existant", + "Verification Requests": "Demandes de vérification" } From d3bc735479e890a9f83a7ce587d8e635bf991a8a Mon Sep 17 00:00:00 2001 From: random Date: Tue, 25 Feb 2020 10:59:03 +0000 Subject: [PATCH 027/522] Translated using Weblate (Italian) Currently translated at 100.0% (2130 of 2130 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index d1e12bdd77..26a95062fd 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2155,5 +2155,9 @@ "You declined": "Hai rifiutato", "%(name)s declined": "%(name)s ha rifiutato", "accepting …": "accettazione …", - "declining …": "rifiuto …" + "declining …": "rifiuto …", + "Your homeserver does not support cross-signing.": "Il tuo homeserver non supporta la firma incrociata.", + "Homeserver feature support:": "Funzioni supportate dall'homeserver:", + "exists": "esiste", + "Verification Requests": "Richieste di verifica" } From 1aefbc771f8716af3109e998a40f1a2450fc06fd Mon Sep 17 00:00:00 2001 From: "Nils J. Haugen" Date: Mon, 24 Feb 2020 19:33:39 +0000 Subject: [PATCH 028/522] Translated using Weblate (Norwegian Nynorsk) Currently translated at 50.6% (1077 of 2130 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nn/ --- src/i18n/strings/nn.json | 71 ++++++++++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 13 deletions(-) diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json index dd95ea89bf..0bdf358533 100644 --- a/src/i18n/strings/nn.json +++ b/src/i18n/strings/nn.json @@ -56,16 +56,16 @@ "Add rooms to the community": "Legg til rom i samfunnet", "Room name or alias": "Romnamn eller alias", "Add to community": "Legg til i samfunn", - "Failed to invite the following users to %(groupId)s:": "Fylgjande brukarar lét seg ikkje byda inn i %(groupId)s:", - "Failed to invite users to community": "Fekk ikkje til å byda brukarar inn til samfunnet", + "Failed to invite the following users to %(groupId)s:": "Fekk ikkje til å invitera følgjande brukarar i %(groupId)s:", + "Failed to invite users to community": "Fekk ikkje til å invitera brukarar til fellesskapet.", "Failed to invite users to %(groupId)s": "Fekk ikkje til å byda brukarar inn til %(groupId)s", - "Failed to add the following rooms to %(groupId)s:": "Fylgjande rom lét seg ikkje leggja til i %(groupId)s:", + "Failed to add the following rooms to %(groupId)s:": "Fekk ikkje til å invitera følgjande rom til %(groupId)s:", "Riot does not have permission to send you notifications - please check your browser settings": "Riot har ikkje tillating til å senda deg varsel - ver venleg og sjekk nettlesarinnstillingane dine", "Riot was not given permission to send notifications - please try again": "Riot fekk ikkje tillating til å senda varsel - ver venleg og prøv igjen", "Unable to enable Notifications": "Klarte ikkje å skru på Varsel", "This email address was not found": "Denne epostadressa var ikkje funnen", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Epostadressa di ser ikkje ut til å vera tilknytta ein Matrix-ID på denne heimtenaren.", - "Default": "Utgangspunktinnstilling", + "Default": "Opphavleg innstilling", "Restricted": "Avgrensa", "Moderator": "Moderator", "Admin": "Administrator", @@ -86,10 +86,10 @@ "Room %(roomId)s not visible": "Rommet %(roomId)s er ikkje synleg", "Missing user_id in request": "Manglande user_id i førespurnad", "Usage": "Bruk", - "Searches DuckDuckGo for results": "Røkjer DuckDuckGo etter resultat", + "Searches DuckDuckGo for results": "Søker på DuckDuckGo for resultat", "Your language of choice": "Ditt valde mål", "e.g. %(exampleValue)s": "t.d. %(exampleValue)s", - "/ddg is not a command": "/ddg er ikkje eit påbod", + "/ddg is not a command": "/ddg er ikkje ein kommando", "Changes your display nickname": "Forandrar kallenamnet ditt", "Invites user with given id to current room": "Byd brukarar med den gjevne IDen inn til det noverande rommet", "Joins room with given alias": "Gjeng inn i eit rom med det gjevne aliaset", @@ -114,14 +114,14 @@ "Analytics": "Statistikk", "Unable to capture screen": "Klarte ikkje ta opp skjermen", "Existing Call": "Samtale er i gang", - "To use it, just wait for autocomplete results to load and tab through them.": "For å bruka han, vent på at resultata fyller seg ut og tab gjennom dei.", + "To use it, just wait for autocomplete results to load and tab through them.": "For å bruka den, vent på at resultata fyller seg ut og tab gjennom dei.", "Deops user with given id": "AvOPar brukarar med den gjevne IDen", "Opens the Developer Tools dialog": "Opnar Utviklarverktøy-tekstboksen", "Unverify": "Fjern godkjenning", "Verify...": "Godkjenn...", "Which officially provided instance you are using, if any": "Kva offisielt gjevne instanse du brukar, viss nokon", "The remote side failed to pick up": "Den andre sida tok ikkje røret", - "Verified key": "Godkjend nykel", + "Verified key": "Godkjend nøkkel", "Displays action": "Visar handlingar", "Reason": "Grunnlag", "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s sa ja til innbydinga frå %(displayName)s.", @@ -167,10 +167,10 @@ "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s-widget lagt til av %(senderName)s", "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget fjerna av %(senderName)s", "Failure to create room": "Klarte ikkje å laga rommet", - "Server may be unavailable, overloaded, or you hit a bug.": "tenaren er kanskje utilgjengeleg, overlasta elles so traff du ein bøgg.", + "Server may be unavailable, overloaded, or you hit a bug.": "Serveren er kanskje utilgjengeleg, overlasta elles så traff du ein bug.", "Send anyway": "Send likevel", "Send": "Send", - "Unnamed Room": "Rom utan Namn", + "Unnamed Room": "Rom utan namn", "Your browser does not support the required cryptography extensions": "Nettlesaren din støttar ikkje dei naudsynte kryptografiske utvidingane", "Not a valid Riot keyfile": "Ikkje ei gyldig Riot-nykelfil", "Authentication check failed: incorrect password?": "Godkjenningssjekk mislukkast: urett passord?", @@ -290,7 +290,7 @@ "Ignore": "Oversjå", "Mention": "Nemn", "Invite": "Byd inn", - "Enable inline URL previews by default": "Skru URL-førehandsvisingar i tekstfeltet på", + "Enable inline URL previews by default": "Skru URL-førehandsvising i tekstfeltet på", "Share Link to User": "Del Brukarlenkje", "User Options": "Brukarinnstillingar", "Direct chats": "Direktesamtaler", @@ -1014,7 +1014,7 @@ "Replying With Files": "Send svar med filer", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Nett no er det ikkje mogleg å senda svar med ei fil. Vil du lasta opp denne fila utan å senda svaret?", "The file '%(fileName)s' failed to upload.": "Fila '%(fileName)s' vart ikkje lasta opp.", - "The server does not support the room version specified.": "Tenaren støttar ikkje den spesifikke versjonen av rommet.", + "The server does not support the room version specified.": "Serveren støttar ikkje den spesifikke versjonen av rommet.", "Name or Matrix ID": "Namn eller Matrix ID", "Registration Required": "Registrering er obligatorisk", "You need to register to do this. Would you like to register now?": "Du må registrera for å gjera dette. Ynskjer du å registrera no?", @@ -1045,5 +1045,50 @@ "Sends the given message coloured as a rainbow": "Sender den bestemte meldinga farga som ein regnboge", "Displays list of commands with usages and descriptions": "Viser ei liste over kommandoar med bruksområde og skildringar", "%(senderName)s made no change.": "%(senderName)s utførde ingen endring.", - "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s oppgraderte dette rommet." + "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s oppgraderte dette rommet.", + "The version of Riot": "Gjeldande versjon av Riot", + "Whether you're using Riot on a device where touch is the primary input mechanism": "Om du brukar Riot på ein innretning som er satt opp for touch-skjerm", + "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Om du nyttar funksjonen 'breadcrumbs' (avatarane over romkatalogen)", + "Whether you're using Riot as an installed Progressive Web App": "Om din Riot er installert som ein webapplikasjon (Progressive Web App)", + "Your user agent": "Din nettlesar (User-Agent)", + "The information being sent to us to help make Riot better includes:": "Informasjon sendt til oss for å forbetre Riot inkluderar:", + "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Det er ukjende sesjonar i dette rommet: om går vidare utan å verifisere dei, kan andre avlytte samtalen.", + "If you cancel now, you won't complete verifying the other user.": "Om du avbryter no, vil dette stoppe verifikasjonsprosessen for den andre brukaren.", + "If you cancel now, you won't complete verifying your other session.": "Om du avbryter no, vil dette stoppe verifikasjonsprosessen for den andre sesjonen.", + "If you cancel now, you won't complete your secret storage operation.": "Om du avbryter no, vil dette stoppe lagringa av den hemmelege passfrasen.", + "Cancel entering passphrase?": "Avbryte inntasting av passfrase ?", + "Setting up keys": "Setter opp nøklar", + "Verify this session": "Stadfest denne sesjonen", + "Encryption upgrade available": "Kryptering kan oppgraderast", + "Set up encryption": "Sett opp kryptering", + "Unverified session": "Uverifisert sesjon", + "Identity server has no terms of service": "Identitetsserveren manglar bruksvilkår", + "This action requires accessing the default identity server to validate an email address or phone number, but the server does not have any terms of service.": "Denne handlinga krev kommunikasjon mot (standard identitetsserver) for å verifisere e-post eller telefonnummer, men serveren manglar bruksvilkår.", + "Only continue if you trust the owner of the server.": "Gå vidare så lenge du har tillit til eigar av serveren.", + "Trust": "Tillat", + "Custom (%(level)s)": "Tilpassa (%(level)s)", + "Error upgrading room": "Feil ved oppgradering av rom", + "Double check that your server supports the room version chosen and try again.": "Sjekk at server støttar romversjon, og prøv på nytt.", + "Verifies a user, session, and pubkey tuple": "Verifiser brukar, sesjon eller public key objekt (pubkey tuple)", + "Unknown (user, session) pair:": "Ukjent (brukar,sesjon) par:", + "Session already verified!": "Sesjon er tidligare verifisert!", + "WARNING: Session already verified, but keys do NOT MATCH!": "ÅTVARING: Sesjon er tidligare verifisert, men nøklane STEMMER IKKJE!", + "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "ÅTVARING: NØKKELVERIFIKASJON FEILA! Signeringsnøkkel for %(userId)s og sesjon %(deviceId)s er \"%(fprint)s\" stemmer ikkje med innsendt nøkkel \"%(fingerprint)s\". Dette kan vere teikn på at kommunikasjonen er avlytta!", + "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Innsendt signeringsnøkkel er lik nøkkelen du mottok frå %(userId)s med sesjon %(deviceId)s. Sesjonen no er verifisert.", + "%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s satte rommet til offentleg for alle som har linken.", + "%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s avgrensa romtilgang til inviterte deltakarar.", + "%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s satte tilgangsregelen til %(rule)s", + "%(senderDisplayName)s has allowed guests to join the room.": "%(senderDisplayName)s har opna for gjestetilgang i rommet.", + "%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s har hindra gjestetilgang i rommet.", + "%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s endra gjestetilgang til %(rule)s", + "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s satte etikett for %(groups)s i dette rommet.", + "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s deaktiverte etikettar for %(groups)s i dette rommet.", + "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s har aktivert etikettar for %(newGroups)s, og deaktivert etikettar for %(oldGroups)s i dette rommet.", + "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s la til %(addedAddresses)s og %(count)s andre adresser i dette rommet", + "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s la til %(addedAddresses)s som adresser for dette rommet.", + "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s la til %(addedAddresses)s som adresse for dette rommet.", + "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s fjerna %(removedAddresses)s og %(count)s andre som adresse for dette rommet", + "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s fjerna %(removedAddresses)s som adresser for dette rommet.", + "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s fjerna %(removedAddresses)s som adresse for dette rommet.", + "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s fjerna %(countRemoved)s og la til %(countAdded)s adresser for dette rommet" } From 75f73dad3e2494a1eb6100025e371365a8fdf321 Mon Sep 17 00:00:00 2001 From: catborise Date: Mon, 24 Feb 2020 19:21:34 +0000 Subject: [PATCH 029/522] Translated using Weblate (Turkish) Currently translated at 72.7% (1549 of 2130 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/tr/ --- src/i18n/strings/tr.json | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index 13840a4601..b8926b85cb 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -1550,5 +1550,19 @@ "A widget would like to verify your identity": "Bir görsel tasarım kimliğinizi teyit etmek istiyor", "Remember my selection for this widget": "Bu görsel bileşen işin seçimimi hatırla", "Deny": "Reddet", - "Recovery key mismatch": "Kurtarma anahtarı uyumsuz" + "Recovery key mismatch": "Kurtarma anahtarı uyumsuz", + "Backup restored": "Yedek geri dönüldü", + "Enter recovery key": "Kurtarma anahtarı gir", + "Help": "Yardım", + "Take picture": "Resim çek", + "Premium": "Premium", + "Sign in to your Matrix account on %(serverName)s": "%(serverName)s adresindeki Matrix hesabınıza oturum açın", + "Sign in to your Matrix account on ": " adresindeki Matrix hesabına oturum açın", + "Add to summary": "Özete ekle", + "Add users to the community summary": "Topluluk özetine kullanıcıları ekle", + "Who would you like to add to this summary?": "Bu özete kimi eklemek istersiniz?", + "Failed to update community": "Toluluğu güncelleme başarısız", + "Downloading mesages for %(currentRoom)s.": "%(currentRoom)s için mesajlar indiriliyor.", + "Indexed rooms:": "İndekslenmiş odalar:", + "%(crawlingRooms)s out of %(totalRooms)s": "%(totalRooms)s odadan %(crawlingRooms)s tanesi" } From b7c7b6c33a798c6512dab996f32facd99e4afd65 Mon Sep 17 00:00:00 2001 From: Nathan Follens Date: Tue, 25 Feb 2020 14:36:30 +0000 Subject: [PATCH 030/522] Translated using Weblate (West Flemish) Currently translated at 72.7% (1548 of 2130 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/vls/ --- src/i18n/strings/vls.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/vls.json b/src/i18n/strings/vls.json index b705afc4fe..b08bc31e5d 100644 --- a/src/i18n/strings/vls.json +++ b/src/i18n/strings/vls.json @@ -2,7 +2,7 @@ "This email address is already in use": "Dat e-mailadresse hier es al in gebruuk", "This phone number is already in use": "Dezen telefongnumero es al in gebruuk", "Failed to verify email address: make sure you clicked the link in the email": "Kostege ’t e-mailadresse nie verifieern: zorgt dervoor da je de koppelienge in den e-mail èt angeklikt", - "The platform you're on": "’t Platform wuk da je gebruukt", + "The platform you're on": "’t Platform da je gebruukt", "The version of Riot.im": "De versie van Riot.im", "Whether or not you're logged in (we don't record your username)": "Of da je al dan nie angemeld zyt (we sloan je gebruukersnoame nie ip)", "Your language of choice": "De deur joun gekoozn toale", From c848489cc143c9dcc7e0a96fb34bb3f45539121b Mon Sep 17 00:00:00 2001 From: Nathan Follens Date: Tue, 25 Feb 2020 16:07:56 +0000 Subject: [PATCH 031/522] Translated using Weblate (Dutch) Currently translated at 87.9% (1877 of 2135 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nl/ --- src/i18n/strings/nl.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 8636efee1d..f0bee97f03 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -963,7 +963,7 @@ "Avoid years that are associated with you": "Vermijd jaren die op uzelf betrekking hebben", "Avoid dates and years that are associated with you": "Vermijd data en jaren die op uzelf betrekking hebben", "Capitalization doesn't help very much": "Hoofdlettergebruik helpt niet echt", - "All-uppercase is almost as easy to guess as all-lowercase": "Enkel hoofdletters is nauwelijks moeilijker te raden als enkel kleine letters", + "All-uppercase is almost as easy to guess as all-lowercase": "Enkel hoofdletters is nauwelijks moeilijker te raden dan enkel kleine letters", "Reversed words aren't much harder to guess": "Omgedraaide woorden zijn bijna even gemakkelijk te raden", "Predictable substitutions like '@' instead of 'a' don't help very much": "Voorspelbare vervangingen (zoals '@' i.p.v. 'a') zijn niet erg zinvol", "Add another word or two. Uncommon words are better.": "Voeg nog een paar (liefst weinig gebruikte) woorden toe.", @@ -1736,10 +1736,10 @@ "Try out new ways to ignore people (experimental)": "Nieuwe manieren om mensen te negeren uitproberen (nog in ontwikkeling)", "Show a presence dot next to DMs in the room list": "Toon aanwezigheid bij tweegesprekken in de gesprekkenlijst", "Enable cross-signing to verify per-user instead of per-session (in development)": "Gebruik gebruikersverificatie in plaats van sessieverificatie (nog in ontwikkeling)", - "Enable local event indexing and E2EE search (requires restart)": "Indexeer lokaal gebeurtenissen en maak zo E2EE-zoeken mogelijk (vergt een herstart)", + "Enable local event indexing and E2EE search (requires restart)": "Indexeer gebeurtenissen lokaal en maak zo E2EE-zoeken mogelijk (vergt een herstart)", "Show info about bridges in room settings": "Toon bruginformatie in gespreksinstellingen", "Show padlocks on invite only rooms": "Toon hangsloten op besloten gesprekken", - "Match system theme": "Pas aan aan systeemthema", + "Match system theme": "Aanpassen aan systeemthema", "Never send encrypted messages to unverified sessions from this session": "Zend vanaf deze sessie nooit versleutelde berichten naar ongeverifieerde sessies", "Never send encrypted messages to unverified sessions in this room from this session": "Zend vanaf deze sessie nooit versleutelde berichten naar ongeverifieerde sessies in dit gesprek", "Enable message search in encrypted rooms": "Sta zoeken in versleutelde gesprekken toe", @@ -1747,12 +1747,12 @@ "How fast should messages be downloaded.": "Ophaalfrequentie van berichten.", "My Ban List": "Mijn banlijst", "This is your list of users/servers you have blocked - don't leave the room!": "Dit is de lijst van door u geblokkeerde servers/gebruikers. Verlaat dit gesprek niet!", - "Confirm the emoji below are displayed on both devices, in the same order:": "Bevestig dat beide apparaten dezelfde emojis in dezelfde volgorde tonen:", + "Confirm the emoji below are displayed on both devices, in the same order:": "Bevestig dat beide apparaten dezelfde emoji’s in dezelfde volgorde tonen:", "Verify this device by confirming the following number appears on its screen.": "Verifieer dit apparaat door te bevestigen dat het scherm het volgende getal toont.", "Waiting for %(displayName)s to verify…": "Wachten tot %(displayName)s geverifieerd heeft…", "They match": "Ze komen overeen", "They don't match": "Ze komen niet overeen", - "To be secure, do this in person or use a trusted way to communicate.": "Doe dit voor de zekerheid in persona, of via een betrouwbaar communicatiemedium.", + "To be secure, do this in person or use a trusted way to communicate.": "Doe dit voor de zekerheid onder vier ogen, of via een betrouwbaar communicatiemedium.", "Lock": "Hangslot", "Verify yourself & others to keep your chats safe": "Verifieer jezelf en anderen om je gesprekken veilig te houden", "Other users may not trust it": "Mogelijk wantrouwen anderen het", @@ -1789,7 +1789,7 @@ "Scan this unique code": "Scan deze unieke code", "or": "of", "Compare unique emoji": "Vergelijk unieke emoji", - "Compare a unique set of emoji if you don't have a camera on either device": "Vergelijk een unieke lijst emoji als beide apparaten geen camera bevatten", + "Compare a unique set of emoji if you don't have a camera on either device": "Vergelijk een unieke lijst met emoji als geen van beide apparaten een camera heeft", "Start": "Start", "Securely cache encrypted messages locally for them to appear in search results.": "Sla versleutelde berichten beveiligd op om ze weer te geven in zoekresultaten.", "Enable": "Inschakelen", From 5d1d50645d36a19736d68d19ea05412b226a9fb1 Mon Sep 17 00:00:00 2001 From: Silke Date: Tue, 25 Feb 2020 16:11:37 +0000 Subject: [PATCH 032/522] Translated using Weblate (Dutch) Currently translated at 87.9% (1877 of 2135 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nl/ --- src/i18n/strings/nl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index f0bee97f03..7c31dc1e0c 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -1753,7 +1753,7 @@ "They match": "Ze komen overeen", "They don't match": "Ze komen niet overeen", "To be secure, do this in person or use a trusted way to communicate.": "Doe dit voor de zekerheid onder vier ogen, of via een betrouwbaar communicatiemedium.", - "Lock": "Hangslot", + "Lock": "Slot", "Verify yourself & others to keep your chats safe": "Verifieer jezelf en anderen om je gesprekken veilig te houden", "Other users may not trust it": "Mogelijk wantrouwen anderen het", "Upgrade": "Bijwerken", From 7091e7a4af4f6e48617c860c589d64cca4d55a53 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 25 Feb 2020 09:19:37 -0700 Subject: [PATCH 033/522] Use the right keyword --- src/components/views/dialogs/InviteDialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js index d229a4eedd..20c8fb5b14 100644 --- a/src/components/views/dialogs/InviteDialog.js +++ b/src/components/views/dialogs/InviteDialog.js @@ -335,7 +335,7 @@ export default class InviteDialog extends React.PureComponent { _buildRecents(excludedTargetIds: Set): {userId: string, user: RoomMember, lastActive: number} { const rooms = DMRoomMap.shared().getUniqueRoomsWithIndividuals(); // map of userId => js-sdk Room - // Also pull in all the rooms tagged as m.direct so we don't miss anything. Sometimes the + // Also pull in all the rooms tagged as TAG_DM so we don't miss anything. Sometimes the // room list doesn't tag the room for the DMRoomMap, but does for the room list. const taggedRooms = RoomListStore.getRoomLists(); const dmTaggedRooms = taggedRooms[TAG_DM]; From 5ef02fabf9a2b4b340183f53fc55c53490aa9417 Mon Sep 17 00:00:00 2001 From: Nathan Follens Date: Tue, 25 Feb 2020 16:11:42 +0000 Subject: [PATCH 034/522] Translated using Weblate (Dutch) Currently translated at 88.1% (1880 of 2135 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nl/ --- src/i18n/strings/nl.json | 179 ++++++++++++++++++++------------------- 1 file changed, 91 insertions(+), 88 deletions(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 7c31dc1e0c..fce04510d4 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -142,7 +142,7 @@ "/ddg is not a command": "/ddg is geen opdracht", "Deactivate Account": "Account deactiveren", "Decline": "Weigeren", - "Decrypt %(text)s": "%(text)s ontcijferen", + "Decrypt %(text)s": "%(text)s ontsleutelen", "Decryption error": "Ontsleutelingsfout", "Device ID": "Apparaats-ID", "device id: ": "apparaats-ID: ", @@ -165,7 +165,7 @@ "%(senderName)s ended the call.": "%(senderName)s heeft opgehangen.", "End-to-end encryption information": "Info over eind-tot-eind-versleuteling", "Enter passphrase": "Voer wachtwoord in", - "Error decrypting attachment": "Fout bij het ontcijferen van de bijlage", + "Error decrypting attachment": "Fout bij het ontsleutelen van de bijlage", "Error: Problem communicating with the given homeserver.": "Fout: probleem bij communicatie met de gegeven thuisserver.", "Event information": "Gebeurtenisinformatie", "Existing Call": "Bestaande oproep", @@ -321,7 +321,7 @@ "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (macht %(powerLevelNumber)s)", "Username invalid: %(errMessage)s": "Ongeldige gebruikersnaam: %(errMessage)s", "Users": "Gebruikers", - "Verification Pending": "Contrôle in afwachting", + "Verification Pending": "Verificatie in afwachting", "Verification": "Verificatie", "verified": "geverifieerd", "Verified key": "Geverifieerde sleutel", @@ -374,10 +374,10 @@ "Import room keys": "Gesprekssleutels inlezen", "File to import": "In te lezen bestand", "This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Hiermee kunt u de sleutels van uw ontvangen berichten in versleutelde gesprekken naar een lokaal bestand wegschrijven. Als u dat bestand dan in een andere Matrix-cliënt inleest kan die ook die berichten ontcijferen.", - "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "Wie het weggeschreven bestand kan lezen, kan daarmee ook alle versleutelde berichten die u kunt zien ontcijferen - ga er dus zorgvuldig mee om! Daartoe kunt u hieronder een wachtwoord invoeren, dat dan gebruikt zal worden om het bestand te versleutelen. Het is dan enkel mogelijk de gegevens in te lezen met hetzelfde wachtwoord.", - "This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Hiermee kunt u vanuit een andere Matrix-cliënt weggeschreven ontcijferingssleutels inlezen, zodat u alle berichten die de andere cliënt kon ontcijferen ook hier kunt lezen.", - "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Het weggeschreven bestand is beveiligd met een wachtwoord. Voer dat wachtwoord hier in om het bestand te ontcijferen.", - "You must join the room to see its files": "Slechts na toetreding tot het gesprek toetreden zult u de bestanden kunnen zien", + "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "Wie het weggeschreven bestand kan lezen, kan daarmee ook alle versleutelde berichten die u kunt zien ontcijferen - ga er dus zorgvuldig mee om! Daartoe kunt u hieronder een wachtwoord invoeren, dat dan gebruikt zal worden om het bestand te versleutelen. Het is dan enkel mogelijk de gegevens in te lezen met hetzelfde wachtwoord.", + "This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Hiermee kunt u vanuit een andere Matrix-cliënt weggeschreven versleutelingssleutels inlezen, zodat u alle berichten die de andere cliënt kon ontcijferen ook hier kunt lezen.", + "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Het weggeschreven bestand is beveiligd met een wachtwoord. Voer dat wachtwoord hier in om het bestand te ontsleutelen.", + "You must join the room to see its files": "Slechts na toetreding tot het gesprek zult u de bestanden kunnen zien", "Reject all %(invitedRooms)s invites": "Alle %(invitedRooms)s-uitnodigingen weigeren", "Failed to invite": "Uitnodigen is mislukt", "Failed to invite the following users to the %(roomName)s room:": "Kon de volgende gebruikers niet uitnodigen voor gesprek %(roomName)s:", @@ -400,9 +400,9 @@ "Token incorrect": "Bewijs onjuist", "Please enter the code it contains:": "Voer de code in die het bevat:", "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Als u geen e-mailadres opgeeft, zult u uw wachtwoord niet opnieuw kunnen instellen. Weet u het zeker?", - "Error decrypting audio": "Fout bij het ontcijferen van de audio", - "Error decrypting image": "Fout bij het ontcijferen van de afbeelding", - "Error decrypting video": "Fout bij het ontcijferen van de video", + "Error decrypting audio": "Fout bij het ontsleutelen van de audio", + "Error decrypting image": "Fout bij het ontsleutelen van de afbeelding", + "Error decrypting video": "Fout bij het ontsleutelen van de video", "Add an Integration": "Voeg een integratie toe", "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "U wordt zo dadelijk naar een derdepartijwebsite gebracht zodat u de account kunt legitimeren voor gebruik met %(integrationsUrl)s. Wilt u doorgaan?", "Removed or unknown message type": "Verwijderd of onbekend berichttype", @@ -586,8 +586,8 @@ "%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)s is weggegaan en weer toegetreden", "%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)s hebben hun uitnodigingen %(count)s keer afgewezen", "%(severalUsers)srejected their invitations %(count)s times|one": "%(severalUsers)s hebben hun uitnodigingen afgewezen", - "%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)s heeft de uitnodiging %(count)s maal afgewezen", - "%(oneUser)srejected their invitation %(count)s times|one": "%(oneUser)s heeft de uitnodiging afgeslagen", + "%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)s heeft de uitnodiging %(count)s maal geweigerd", + "%(oneUser)srejected their invitation %(count)s times|one": "%(oneUser)s heeft de uitnodiging geweigerd", "%(severalUsers)shad their invitations withdrawn %(count)s times|other": "De uitnodigingen van %(severalUsers)s zijn %(count)s keer ingetrokken", "%(severalUsers)shad their invitations withdrawn %(count)s times|one": "De uitnodigingen van %(severalUsers)s zijn ingetrokken", "%(oneUser)shad their invitation withdrawn %(count)s times|other": "De uitnodiging van %(oneUser)s is %(count)s keer ingetrokken", @@ -664,7 +664,7 @@ "Community %(groupId)s not found": "Gemeenschap %(groupId)s is niet gevonden", "Failed to load %(groupId)s": "Laden van %(groupId)s is mislukt", "Old cryptography data detected": "Oude cryptografiegegevens gedetecteerd", - "Data from an older version of Riot has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Er zijn gegevens van een oudere versie van Riot gevonden, die problemen veroorzaakt hebben met de eind-tot-eind-versleuteling in de oude versie. Onlangs vanuit de oude versie verzonden eind-tot-eind-versleutelde berichten zijn mogelijk onontcijferbaar in deze versie. Ook kunnen berichten die met deze versie gewisseld zijn falen. Mocht u problemen ervaren, meld u dan opnieuw aan. Schrijf uw de sleutels weg en lees ze weer in om uw berichtgeschiedenis te behouden.", + "Data from an older version of Riot has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Er zijn gegevens van een oudere versie van Riot gevonden, die problemen veroorzaakt hebben met de eind-tot-eind-versleuteling in de oude versie. Onlangs vanuit de oude versie verzonden eind-tot-eind-versleutelde berichten zijn mogelijk onontsleutelbaar in deze versie. Ook kunnen berichten die met deze versie uitgewisseld zijn falen. Mocht u problemen ervaren, meld u dan opnieuw aan. Schrijf uw sleutels weg en lees ze weer in om uw berichtgeschiedenis te behouden.", "Your Communities": "Uw gemeenschappen", "Error whilst fetching joined communities": "Er is een fout opgetreden bij het ophalen van de gemeenschappen waarvan u lid bent", "Create a new community": "Maak een nieuwe gemeenschap aan", @@ -718,14 +718,14 @@ "Who can join this community?": "Wie kan er tot deze gemeenschap toetreden?", "Everyone": "Iedereen", "Leave this community": "Deze gemeenschap verlaten", - "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Voor het oplossen van in GitHub gemelde problemen helpen foutopsporingslogboeken ons enorm. Deze bevatten wel gebruiksgegevens (waaronder uw gebruikersnaam, de ID’s of bijnamen van de gesprekken en groepen die u heeft bezocht, en de namen van andere gebruikers), maar geen berichten.", + "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Voor het oplossen van in GitHub gemelde problemen helpen foutopsporingslogboeken ons enorm. Deze bevatten wel gebruiksgegevens (waaronder uw gebruikersnaam, de ID’s of bijnamen van de gesprekken en groepen die u heeft bezocht, en de namen van andere gebruikers), maar geen berichten.", "Submit debug logs": "Foutopsporingslogboeken indienen", "Opens the Developer Tools dialog": "Opent het dialoogvenster met ontwikkelaarsgereedschap", "Fetching third party location failed": "Het ophalen van de locatie van de derde partij is mislukt", "A new version of Riot is available.": "Er is een nieuwe versie van Riot beschikbaar.", "I understand the risks and wish to continue": "Ik begrijp de risico’s en wil graag verdergaan", "Send Account Data": "Accountgegevens versturen", - "All notifications are currently disabled for all targets.": "Alle meldingen voor alle bestemmingen staan momenteel uit.", + "All notifications are currently disabled for all targets.": "Alle meldingen voor alle bestemmingen zijn momenteel uitgeschakeld.", "Uploading report": "Rapport wordt geüpload", "Sunday": "Zondag", "Notification targets": "Meldingsbestemmingen", @@ -1154,7 +1154,7 @@ "Roles & Permissions": "Rollen & toestemmingen", "Select the roles required to change various parts of the room": "Selecteer de rollen vereist om verschillende delen van het gesprek te wijzigen", "Enable encryption?": "Versleuteling inschakelen?", - "Once enabled, encryption for a room cannot be disabled. Messages sent in an encrypted room cannot be seen by the server, only by the participants of the room. Enabling encryption may prevent many bots and bridges from working correctly.
Learn more about encryption.": "Gespreksversleuteling is onomkeerbaar. Berichten in versleutelde gesprekken zijn niet leesbaar voor de server; enkel voor de gespreksdeelnemers. Veel robots en overbruggingen werken niet correct in versleutelde gesprekken. Lees meer over versleuteling.", + "Once enabled, encryption for a room cannot be disabled. Messages sent in an encrypted room cannot be seen by the server, only by the participants of the room. Enabling encryption may prevent many bots and bridges from working correctly. Learn more about encryption.": "Gespreksversleuteling is onomkeerbaar. Berichten in versleutelde gesprekken zijn niet leesbaar voor de server; enkel voor de gespreksdeelnemers. Veel robots en overbruggingen werken niet correct in versleutelde gesprekken. Lees meer over versleuteling.", "To link to this room, please add an alias.": "Voeg een bijnaam toe om naar dit gesprek te verwijzen.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Wijzigingen aan wie de geschiedenis kan lezen gelden enkel voor toekomstige berichten in dit gesprek. De zichtbaarheid van de bestaande geschiedenis blijft ongewijzigd.", "Encryption": "Versleuteling", @@ -1196,7 +1196,7 @@ "Invite anyway": "Alsnog uitnodigen", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Vooraleer u logboeken indient, dient u uw probleem te melden op GitHub.", "Unable to load commit detail: %(msg)s": "Kan commitdetail niet laden: %(msg)s", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Om uw gespreksgeschiedenis niet te verliezen, moet u vóór het afmelden uw gesprekssleutels wegschrijven. Dat moet vanuit de nieuwere versie van Riot", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Om uw gespreksgeschiedenis niet te verliezen, moet u vóór het afmelden uw gesprekssleutels wegschrijven. Dat moet vanuit de nieuwere versie van Riot", "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "U heeft eerder een nieuwere versie van Riot op %(host)s gebruikt. Om deze versie opnieuw met eind-tot-eind-versleuteling te gebruiken, zult u zich moeten afmelden en opnieuw aanmelden. ", "Incompatible Database": "Incompatibele database", "Continue With Encryption Disabled": "Verdergaan met versleuteling uitgeschakeld", @@ -1221,7 +1221,7 @@ "You'll lose access to your encrypted messages": "U zult de toegang tot uw versleutelde berichten verliezen", "Are you sure you want to sign out?": "Weet u zeker dat u zich wilt afmelden?", "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Als u fouten zou tegenkomen of voorstellen zou hebben, laat het ons dan weten op GitHub.", - "To help avoid duplicate issues, please view existing issues first (and add a +1) or create a new issue if you can't find it.": "Voorkom dubbele meldingen: doorzoek eerst de bestaande meldingen (en voeg desgewenst een +1 toe). Maak enkel een nieuwe melding aan indien u niets kunt vinden.", + "To help avoid duplicate issues, please view existing issues first (and add a +1) or create a new issue if you can't find it.": "Voorkom dubbele meldingen: doorzoek eerst de bestaande meldingen (en voeg desgewenst een +1 toe). Maak enkel een nieuwe melding aan indien u niets kunt vinden.", "Report bugs & give feedback": "Fouten melden & feedback geven", "Go back": "Terug", "Room Settings - %(roomName)s": "Gespreksinstellingen - %(roomName)s", @@ -1232,18 +1232,18 @@ "Create a new room with the same name, description and avatar": "Een nieuw gesprek aanmaken met dezelfde naam, beschrijving en avatar", "Update any local room aliases to point to the new room": "Alle lokale gespreksbijnamen naar het nieuwe gesprek laten verwijzen", "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "Gebruikers verhinderen aan de oude versie van het gesprek bij te dragen, en daar een bericht plaatsen dat de gebruikers verwijst naar het nieuwe gesprek", - "Put a link back to the old room at the start of the new room so people can see old messages": "Bovenaan het nieuwe gesprek naar het oude te verwijzen, om oude berichten te lezen", + "Put a link back to the old room at the start of the new room so people can see old messages": "Bovenaan het nieuwe gesprek naar het oude verwijzen, om oude berichten te lezen", "A username can only contain lower case letters, numbers and '=_-./'": "Een gebruikersnaam mag enkel kleine letters, cijfers en ‘=_-./’ bevatten", "Checking...": "Bezig met controleren…", "Unable to load backup status": "Kan back-upstatus niet laden", "Recovery Key Mismatch": "Herstelsleutel komt niet overeen", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "De back-up kon met deze sleutel niet ontcijferd worden: controleer of u de juiste herstelsleutel heeft ingevoerd.", + "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "De back-up kon met deze sleutel niet ontsleuteld worden: controleer of u de juiste herstelsleutel heeft ingevoerd.", "Incorrect Recovery Passphrase": "Onjuist herstelwachtwoord", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "De back-up kon met dit wachtwoord niet ontcijferd worden: controleer of u het juiste herstelwachtwoord heeft ingevoerd.", + "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "De back-up kon met dit wachtwoord niet ontsleuteld worden: controleer of u het juiste herstelwachtwoord heeft ingevoerd.", "Unable to restore backup": "Kan back-up niet terugzetten", "No backup found!": "Geen back-up gevonden!", "Backup Restored": "Back-up hersteld", - "Failed to decrypt %(failedCount)s sessions!": "Ontcijferen van %(failedCount)s sessies is mislukt!", + "Failed to decrypt %(failedCount)s sessions!": "Ontsleutelen van %(failedCount)s sessies is mislukt!", "Restored %(sessionCount)s session keys": "%(sessionCount)s sessiesleutels hersteld", "Enter Recovery Passphrase": "Voer het herstelwachtwoord in", "Warning: you should only set up key backup from a trusted computer.": "Let op: stel sleutelback-up enkel in op een vertrouwde computer.", @@ -1386,7 +1386,7 @@ "Sign out and remove encryption keys?": "Afmelden en versleutelingssleutels verwijderen?", "To help us prevent this in future, please send us logs.": "Gelieve ons logboeken te sturen om dit in de toekomst te helpen voorkomen.", "Missing session data": "Sessiegegevens ontbreken", - "Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Sommige sessiegegevens, waaronder sleutels voor versleutelde berichten, ontbreken. Herstel de sleutels uit uw back-up door u af en weer aan te melden.", + "Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Sommige sessiegegevens, waaronder sleutels voor versleutelde berichten, ontbreken. Herstel de sleutels uit uw back-up door u af- en weer aan te melden.", "Your browser likely removed this data when running low on disk space.": "Uw browser heeft deze gegevens wellicht verwijderd toen de beschikbare opslagruimte vol was.", "Upload files (%(current)s of %(total)s)": "Bestanden versturen (%(current)s van %(total)s)", "Upload files": "Bestanden versturen", @@ -1395,9 +1395,9 @@ "These files are too large to upload. The file size limit is %(limit)s.": "Deze bestanden zijn te groot om te versturen. De bestandsgroottelimiet is %(limit)s.", "Some files are too large to be uploaded. The file size limit is %(limit)s.": "Sommige bestanden zijn te groot om te versturen. De bestandsgroottelimiet is %(limit)s.", "Upload %(count)s other files|other": "%(count)s overige bestanden versturen", - "Upload %(count)s other files|one": "%(count)s overig bestanden versturen", + "Upload %(count)s other files|one": "%(count)s overig bestand versturen", "Cancel All": "Alles annuleren", - "Upload Error": "Fout bij versturen bestand", + "Upload Error": "Fout bij versturen van bestand", "A conference call could not be started because the integrations server is not available": "Daar de integratieserver onbereikbaar is kon het groepsaudiogesprek niet gestart worden", "The server does not support the room version specified.": "De server ondersteunt deze versie van gesprekken niet.", "Name or Matrix ID": "Naam of Matrix-ID", @@ -1582,7 +1582,7 @@ "You are still sharing your personal data on the identity server .": "U deelt nog steeds uw persoonlijke gegevens op de identiteitsserver .", "We recommend that you remove your email addresses and phone numbers from the identity server before disconnecting.": "We raden u aan uw e-mailadressen en telefoonnummers van de identiteitsserver te verwijderen vooraleer u de verbinding verbreekt.", "Disconnect anyway": "Verbinding toch verbreken", - "If you don't want to use to discover and be discoverable by existing contacts you know, enter another identity server below.": "Mocht u om bekenden te zoeken en vindbaar te zijn niet willen gebruiken, voer dan hieronder een andere identiteitsserver in.", + "If you don't want to use to discover and be discoverable by existing contacts you know, enter another identity server below.": "Mocht u om bekenden te zoeken en zelf vindbaar te zijn niet willen gebruiken, voer dan hieronder een andere identiteitsserver in.", "Using an identity server is optional. If you choose not to use an identity server, you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Een identiteitsserver is niet verplicht, maar zonder identiteitsserver zult u geen bekenden op e-mailadres of telefoonnummer kunnen zoeken, noch door hen vindbaar zijn.", "Do not use an identity server": "Geen identiteitsserver gebruiken", "Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Aanvaard de gebruiksvoorwaarden van de identiteitsserver (%(serverName)s) om vindbaar te zijn op e-mailadres of telefoonnummer.", @@ -1638,7 +1638,7 @@ "Explore rooms": "Gesprekken ontdekken", "Show previews/thumbnails for images": "Toon voorbeelden voor afbeeldingen", "Clear cache and reload": "Cache wissen en herladen", - "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "U staat op het punt 1 bericht door %(user)s te verwijderen. Dit kan niet ongedaan worden gemaakt. Wilt u doorgaan?", + "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "U staat op het punt 1 bericht door %(user)s te verwijderen. Dit kan niet ongedaan gemaakt worden. Wilt u doorgaan?", "Remove %(count)s messages|one": "1 bericht verwijderen", "%(count)s unread messages including mentions.|other": "%(count)s ongelezen berichten, inclusief vermeldingen.", "%(count)s unread messages.|other": "%(count)s ongelezen berichten.", @@ -1671,14 +1671,14 @@ "User Autocomplete": "Gebruikers automatisch aanvullen", "Add Email Address": "E-mailadres toevoegen", "Add Phone Number": "Telefoonnummer toevoegen", - "Your email address hasn't been verified yet": "Uw emailadres is nog niet gecontroleerd", - "Click the link in the email you received to verify and then click continue again.": "Open de link in de ontvangen contrôle-email, en klik dan op \"Doorgaan\".", + "Your email address hasn't been verified yet": "Uw e-mailadres is nog niet geverifieerd", + "Click the link in the email you received to verify and then click continue again.": "Open de koppeling in de ontvangen verificatie-e-mail, en klik dan op ‘Doorgaan’.", "%(creator)s created and configured the room.": "Gesprek gestart en ingesteld door %(creator)s.", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Dit gesprek bevat onbekende sessies. Tenzij u die verifieert zou iemand u kunnen afluisteren.", "Setting up keys": "Sleutelconfiguratie", "Verify this session": "Deze sessie verifiëren", "Encryption upgrade available": "Er is een bijgewerkte versleuteling beschikbaar", - "You can use /help to list available commands. Did you mean to send this as a message?": "Type /help om alle opdrachten te zien. Was het uw bedoeling dit als bericht te sturen?", + "You can use /help to list available commands. Did you mean to send this as a message?": "Typ /help om alle opdrachten te zien. Was het uw bedoeling dit als bericht te sturen?", "Help": "Hulp", "Set up encryption": "Versleuteling instellen", "Unverified session": "Ongeverifieerde sessie", @@ -1753,13 +1753,13 @@ "They match": "Ze komen overeen", "They don't match": "Ze komen niet overeen", "To be secure, do this in person or use a trusted way to communicate.": "Doe dit voor de zekerheid onder vier ogen, of via een betrouwbaar communicatiemedium.", - "Lock": "Slot", - "Verify yourself & others to keep your chats safe": "Verifieer jezelf en anderen om je gesprekken veilig te houden", + "Lock": "Hangslot", + "Verify yourself & others to keep your chats safe": "Verifieer uzelf en anderen om uw gesprekken veilig te houden", "Other users may not trust it": "Mogelijk wantrouwen anderen het", "Upgrade": "Bijwerken", "Verify": "Verifiëren", "Later": "Later", - "Review": "Contrôle", + "Review": "Controle", "Decline (%(counter)s)": "Afwijzen (%(counter)s)", "This bridge was provisioned by .": "Dank aan voor de brug.", "This bridge is managed by .": "Brug onderhouden door .", @@ -1767,14 +1767,14 @@ "Channel: %(channelName)s": "Kanaal: %(channelName)s", "Show less": "Minder tonen", "Show more": "Meer tonen", - "Changing password will currently reset any end-to-end encryption keys on all sessions, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Momenteel stelt een wachtwoordswijziging alle berichtsleutels in alle sessies opnieuw in, en maakt zo oude versleutelde berichten onleesbaar - tenzij u uw sleutels eerst wegschrijft, en na afloop weer inleest. Dit zal verbeterd worden.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Geef hier te negeren gebruikers en servers in. Asterisken staan voor willekeurige tekenreeksen; zo leidt @bot:* tot het negeren van gebruikers die 'bot' heten op alle servers.", + "Changing password will currently reset any end-to-end encryption keys on all sessions, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Momenteel stelt een wachtwoordswijziging alle berichtsleutels in alle sessies opnieuw in, en maakt zo oude versleutelde berichten onleesbaar - tenzij u uw sleutels eerst wegschrijft, en na afloop weer inleest. Dit zal verbeterd worden.", + "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Geef hier te negeren gebruikers en servers in. Asterisken staan voor willekeurige tekenreeksen; zo leidt @bot:* tot het negeren van alle gebruikers die ‘bot’ heten op alle servers.", "in memory": "in het geheugen", "not found": "niet gevonden", "Your homeserver does not support session management.": "Uw thuisserver ondersteunt geen sessiebeheer.", "Unable to load session list": "Kan sessielijst niet laden", - "Delete %(count)s sessions|other": "Verwijder %(count)s sessies", - "Delete %(count)s sessions|one": "Verwijder %(count)s sessie", + "Delete %(count)s sessions|other": "%(count)s sessies verwijderen", + "Delete %(count)s sessions|one": "%(count)s sessie verwijderen", "The version of Riot": "De versie van Riot", "Whether you're using Riot on a device where touch is the primary input mechanism": "Of u Riot op een apparaat gebruikt waarop een aanraakscherm de voornaamste invoermethode is", "Whether you're using Riot as an installed Progressive Web App": "Of u Riot gebruikt als een geïnstalleerde Progressive-Web-App", @@ -1793,65 +1793,65 @@ "Start": "Start", "Securely cache encrypted messages locally for them to appear in search results.": "Sla versleutelde berichten beveiligd op om ze weer te geven in zoekresultaten.", "Enable": "Inschakelen", - "Connecting to integration manager...": "Verbinding maken met de integratiebeheerder...", + "Connecting to integration manager...": "Verbinding maken met de integratiebeheerder…", "Cannot connect to integration manager": "Kan geen verbinding maken met de integratiebeheerder", "The integration manager is offline or it cannot reach your homeserver.": "De integratiebeheerder is offline of kan uw thuisserver niet bereiken.", "This session is backing up your keys. ": "Deze sessie maakt back-ups van uw sleutels. ", "not stored": "niet opgeslagen", - "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Uw wachtwoord is gewijzigd. U zal geen pushmeldingen op uw andere sessies meer ontvangen, totdat u uzelf daarop opnieuw aanmeld", - "Ignored/Blocked": "Genegeerd/Geblokkeerd", + "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Uw wachtwoord is gewijzigd. U zult geen pushmeldingen op uw andere sessies meer ontvangen, totdat u zichzelf daarop opnieuw aanmeldt", + "Ignored/Blocked": "Genegeerd/geblokkeerd", "Error adding ignored user/server": "Fout bij het toevoegen van een genegeerde gebruiker/server", - "Something went wrong. Please try again or view your console for hints.": "Er is iets fout gegaan. Probeer het opnieuw of bekijk de console om inzicht te krijgen.", + "Something went wrong. Please try again or view your console for hints.": "Er is iets fout gegaan. Probeer het opnieuw of bekijk de console om voor meer informatie.", "Error subscribing to list": "Fout bij het abonneren op de lijst", - "Please verify the room ID or alias and try again.": "Controleer de gespreks-ID of gespreks(bij)naam en probeer het opnieuw.", + "Please verify the room ID or alias and try again.": "Controleer de gespreks-ID of -(bij)naam en probeer het opnieuw.", "Error removing ignored user/server": "Fout bij het verwijderen van genegeerde gebruiker/server", "Error unsubscribing from list": "Fout bij het opzeggen van een abonnement op de lijst", - "Please try again or view your console for hints.": "Probeer het opnieuw of bekijk de console om inzicht te krijgen.", + "Please try again or view your console for hints.": "Probeer het opnieuw of bekijk de console voor meer informatie.", "None": "Geen", "You have not ignored anyone.": "U heeft niemand genegeerd.", "You are currently ignoring:": "U negeert op dit moment:", "You are not subscribed to any lists": "U heeft geen abonnement op een lijst", - "Unsubscribe": "Zeg abonnement op", + "Unsubscribe": "Abonnement opzeggen", "View rules": "Bekijk regels", "You are currently subscribed to:": "U heeft een abonnement op:", "⚠ These settings are meant for advanced users.": "⚠ Deze instellingen zijn bedoeld voor gevorderde gebruikers.", - "Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.": "Het negeren van gebruikers gaat via banlijsten. Deze bevatten regels over wie verbannen moet worden. Het nemen van een abonnement op een banlijst betekend dat je de gebruikers/servers die op de lijst staan niet meer zult zien.", + "Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.": "Het negeren van gebruikers gaat via banlijsten. Deze bevatten regels over wie verbannen moet worden. Het abonneren op een banlijst betekent dat u de gebruikers/servers die op de lijst staan niet meer zult zien.", "Personal ban list": "Persoonlijke banlijst", - "Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Uw persoonlijke banlijst bevat alle gebruikers/server waar u geen berichten meer van wilt zien. Nadat u een gebruiker/server heeft genegeerd, zal een nieuwe kamer worden aangemaakt met de naam \"Mijn Banlijst\". Om de lijst actief te houden dient u de kamer niet te verlaten.", + "Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Uw persoonlijke banlijst bevat alle gebruikers/server waar u geen berichten meer van wilt zien. Nadat u een gebruiker/server heeft genegeerd, zal er een nieuw gesprek worden aangemaakt met de naam ‘Mijn banlijst’. Om de lijst actief te houden dient u het gesprek niet te verlaten.", "Server or user ID to ignore": "Server of gebruikers-ID om te negeren", - "eg: @bot:* or example.org": "bijvoorbeeld: @bot:* of example.org", + "eg: @bot:* or example.org": "bijvoorbeeld: @bot:* of voorbeeld.org", "Subscribed lists": "Abonnementen op lijsten", - "Subscribing to a ban list will cause you to join it!": "Wanneer u een abonnement neemt zal u worden toegevoegd!", + "Subscribing to a ban list will cause you to join it!": "Wanneer u zich abonneert op een banlijst zal u eraan worden toegevoegd!", "If this isn't what you want, please use a different tool to ignore users.": "Als u dit niet wilt kunt u een andere methode gebruiken om gebruikers te negeren.", - "Room ID or alias of ban list": "Gespreks-ID of (bij)naam of banlijst", - "Subscribe": "Abonneer", - "Enable desktop notifications for this session": "Schakel desktopmeldingen in voor deze sessie", - "Enable audible notifications for this session": "Schakel meldingen met geluid in voor deze sessie", - "You should:": "U zou:", - "check your browser plugins for anything that might block the identity server (such as Privacy Badger)": "uw browser extensies bekijken voor extensies die mogelijk de identiteitsserver blokkeren (zoals Privacy Badger)", + "Room ID or alias of ban list": "Gespreks-ID of (bij)naam van banlijst", + "Subscribe": "Abonneren", + "Enable desktop notifications for this session": "Bureaubladmeldingen inschakelen voor deze sessie", + "Enable audible notifications for this session": "Meldingen met geluid inschakelen voor deze sessie", + "You should:": "U zou best:", + "check your browser plugins for anything that might block the identity server (such as Privacy Badger)": "uw browserextensies bekijken voor extensies die mogelijk de identiteitsserver blokkeren (zoals Privacy Badger)", "contact the administrators of identity server ": "contact opnemen met de beheerders van de identiteitsserver ", "wait and try again later": "wachten en het later weer proberen", "Use an Integration Manager (%(serverName)s) to manage bots, widgets, and sticker packs.": "Gebruik een integratiebeheerder (%(serverName)s) om robots, widgets en stickerpakketten te beheren.", "Use an Integration Manager to manage bots, widgets, and sticker packs.": "Gebruik een integratiebeheerder om robots, widgets en stickerpakketten te beheren.", "Manage integrations": "Beheer integraties", - "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Integratiebeheerders ontvangen configuratie-informatie en kunnen widgets aanpassen, uitnodigingen voor de kamer versturen en machtsniveau's namens u aanpassen.", - "Ban list rules - %(roomName)s": "Banlijst regels - %(roomName)s", - "Server rules": "Server regels", - "User rules": "Gebruiker regels", - "Show tray icon and minimize window to it on close": "Geef een icoon in de systeembalk weer en minimaliseer het venster wanneer het wordt gesloten", + "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Integratiebeheerders ontvangen configuratie-informatie en kunnen widgets aanpassen, gespreksuitnodigingen versturen en machtsniveau’s namens u aanpassen.", + "Ban list rules - %(roomName)s": "Banlijstregels - %(roomName)s", + "Server rules": "Serverregels", + "User rules": "Gebruikersregels", + "Show tray icon and minimize window to it on close": "Geef een pictogram weer in de systeembalk en minimaliseer het venster wanneer het wordt gesloten", "Session ID:": "Sessie-ID:", "Session key:": "Sessiesleutel:", "Message search": "Berichten zoeken", "Sessions": "Sessies", - "A session's public name is visible to people you communicate with": "Een sessie's publieke naam is zichtbaar voor de mensen waarmee u communiceert", - "This room is bridging messages to the following platforms. Learn more.": "Dit gesprek wordt overbrugt naar de volgende platformen. Lees meer", - "This room isn’t bridging messages to any platforms. Learn more.": "Dit gesprek wordt niet overbrugt naar andere platformen. Lees meer.", - "Bridges": "Overbruggingen", - "This user has not verified all of their sessions.": "Deze gebruiker heeft niet al haar sessies geverifieerd.", + "A session's public name is visible to people you communicate with": "De publieke naam van een sessie is zichtbaar voor de mensen waarmee u communiceert", + "This room is bridging messages to the following platforms. Learn more.": "Dit gesprek wordt overbrugd naar de volgende platformen. Lees meer", + "This room isn’t bridging messages to any platforms. Learn more.": "Dit gesprek wordt niet overbrugd naar andere platformen. Lees meer.", + "Bridges": "Bruggen", + "This user has not verified all of their sessions.": "Deze gebruiker heeft niet al zijn sessies geverifieerd.", "You have not verified this user.": "U heeft deze gebruiker niet geverifieerd.", - "You have verified this user. This user has verified all of their sessions.": "U heeft deze gebruiker geverifieerd. Deze gebruiker heeft al haar sessies geverifieerd.", + "You have verified this user. This user has verified all of their sessions.": "U heeft deze gebruiker geverifieerd. Deze gebruiker heeft al zijn sessies geverifieerd.", "Someone is using an unknown session": "Iemand gebruikt een onbekende sessie", - "This room is end-to-end encrypted": "Dit gesprek is van eind-tot-eind versleuteld", + "This room is end-to-end encrypted": "Dit gesprek is eind-tot-eind-versleuteld", "Everyone in this room is verified": "Iedereen in dit gesprek is geverifieerd", "Some sessions for this user are not trusted": "Sommige sessies van deze gebruiker zijn niet vertrouwd", "All sessions for this user are trusted": "Alle sessies van deze gebruiker zijn vertrouwd", @@ -1861,37 +1861,40 @@ "rooms.": "gesprekken.", "Recent rooms": "Actuele gesprekken", "Direct Messages": "Tweegesprekken", - "If disabled, messages from encrypted rooms won't appear in search results.": "Dit moet aanstaan om te kunnen zoeken in versleutelde gesprekken.", + "If disabled, messages from encrypted rooms won't appear in search results.": "Dit moet aan staan om te kunnen zoeken in versleutelde gesprekken.", "Indexed rooms:": "Geïndexeerde gesprekken:", - "Cross-signing and secret storage are enabled.": "Cross-signing en sleutelopslag zijn ingeschakeld.", - "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Uw account heeft een cross-signing identiteit in de sleutelopslag, maar deze is nog niet vertrouwd door de huidige sessie.", - "Cross-signing and secret storage are not yet set up.": "Cross-signing en sleutelopslag zijn nog niet ingesteld.", - "Bootstrap cross-signing and secret storage": "Cross-signing en sleutelopslag opzetten", - "Reset cross-signing and secret storage": "Cross-signing en sleutelopslag resetten", - "Cross-signing public keys:": "Cross-signing publieke sleutels:", - "Cross-signing private keys:": "Cross-signing privésleutels:", + "Cross-signing and secret storage are enabled.": "Kruiselings ondertekenen en sleutelopslag zijn ingeschakeld.", + "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Uw account heeft een identiteit voor kruiselings ondertekenen in de sleutelopslag, maar deze is nog niet vertrouwd door de huidige sessie.", + "Cross-signing and secret storage are not yet set up.": "Kruiselings ondertekenen en sleutelopslag zijn nog niet ingesteld.", + "Bootstrap cross-signing and secret storage": "Kruiselings ondertekenen en sleutelopslag instellen", + "Reset cross-signing and secret storage": "Kruiselings ondertekenen en sleutelopslag opnieuw instellen", + "Cross-signing public keys:": "Publieke sleutels voor kruiselings ondertekenen:", + "Cross-signing private keys:": "Privésleutels voor kruiselings ondertekenen:", "in secret storage": "in de sleutelopslag", "Secret storage public key:": "Sleutelopslag publieke sleutel:", "in account data": "in accountinformatie", "Securely cache encrypted messages locally for them to appear in search results, using ": "Sla versleutelde berichten beveiligd op om ze weer te geven in de zoekresultaten, door gebruik te maken van ", " to store messages from ": " om berichten op te slaan van ", "Manage": "Beheren", - "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Verbind deze sessie met de sleutelback-up voordat u uitlogt. Dit voorkomt dat u sleutels verliest die alleen op deze sessie voorkomen.", + "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Verbind deze sessie met de sleutelback-up voordat u zich afmeldt. Dit voorkomt dat u sleutels verliest die alleen op deze sessie voorkomen.", "Connect this session to Key Backup": "Verbind deze sessie met de sleutelback-up", - "Backup has a valid signature from this user": "De back-up heeft een correcte ondertekening van deze gebruiker", - "Backup has a invalid signature from this user": "De back-up heeft een incorrecte ondertekening van deze gebruiker", - "Backup has a signature from unknown user with ID %(deviceId)s": "De back-up heeft een ondertekening van onbekende gebruiker met ID %(deviceId)s", - "Backup has a signature from unknown session with ID %(deviceId)s": "De back-up heeft een ondertekening van onbekende sessie met ID %(deviceId)s", - "Backup has a valid signature from this session": "De back-up heeft een correcte ondertekening van deze sessie", - "Backup has an invalid signature from this session": "De back-up heeft een incorrecte ondertekening van deze sessie", - "Backup has a valid signature from verified session ": "De back-up heeft een correcte ondertekening van geverifieerde sessie ", - "Backup has a valid signature from unverified session ": "De back-up heeft een correcte ondertekening van ongeverifieerde sessie ", - "Backup has an invalid signature from verified session ": "De back-up heeft een incorrecte ondertekening van geverifieerde sessie ", - "Backup has an invalid signature from unverified session ": "De back-up heeft een incorrecte ondertekening van ongeverifieerde sessie ", + "Backup has a valid signature from this user": "De back-up heeft een geldige ondertekening van deze gebruiker", + "Backup has a invalid signature from this user": "De back-up heeft een ongeldige ondertekening van deze gebruiker", + "Backup has a signature from unknown user with ID %(deviceId)s": "De back-up heeft een ondertekening van een onbekende gebruiker met ID %(deviceId)s", + "Backup has a signature from unknown session with ID %(deviceId)s": "De back-up heeft een ondertekening van een onbekende sessie met ID %(deviceId)s", + "Backup has a valid signature from this session": "De back-up heeft een geldige ondertekening van deze sessie", + "Backup has an invalid signature from this session": "De back-up heeft een ongeldige ondertekening van deze sessie", + "Backup has a valid signature from verified session ": "De back-up heeft een geldige ondertekening van een geverifieerde sessie ", + "Backup has a valid signature from unverified session ": "De back-up heeft een geldige ondertekening van een ongeverifieerde sessie ", + "Backup has an invalid signature from verified session ": "De back-up heeft een ongeldige ondertekening van een geverifieerde sessie ", + "Backup has an invalid signature from unverified session ": "De back-up heeft een ongeldige ondertekening van een ongeverifieerde sessie ", "Backup is not signed by any of your sessions": "De back-up is door geen van uw sessies ondertekend", - "This backup is trusted because it has been restored on this session": "Deze back-up is vertrouwd omdat het is hersteld naar deze sessie", + "This backup is trusted because it has been restored on this session": "Deze back-up is vertrouwd omdat hij hersteld is naar deze sessie", "Backup key stored: ": "Back-upsleutel opgeslagen: ", "Your keys are not being backed up from this session.": "Uw sleutels worden niet geback-upt van deze sessie.", - "Clear notifications": "Notificaties wissen", - "You should remove your personal data from identity server before disconnecting. Unfortunately, identity server is currently offline or cannot be reached.": "U moet uw persoonlijke informatie van de identiteitsserver verwijderen voordat u zich ontkoppeld. Helaas kan de identiteitsserver op dit moment niet worden bereikt. Mogelijk is het offline." + "Clear notifications": "Meldingen wissen", + "You should remove your personal data from identity server before disconnecting. Unfortunately, identity server is currently offline or cannot be reached.": "U moet uw persoonlijke informatie van de identiteitsserver verwijderen voordat u zich ontkoppelt. Helaas kan de identiteitsserver op dit moment niet worden bereikt. Mogelijk is hij offline.", + "Your homeserver does not support cross-signing.": "Uw thuisserver biedt geen ondersteuning voor kruiselings ondertekenen.", + "Homeserver feature support:": "Functies ondersteund door thuisserver:", + "exists": "bestaat" } From f6fdddb9bac6d62891eb7c19611c0df1a7ce4b87 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 25 Feb 2020 09:54:48 -0700 Subject: [PATCH 035/522] Don't prefix QR codes with the length of the static marker string Fixes https://github.com/vector-im/riot-web/issues/12489 --- src/components/views/elements/crypto/VerificationQRCode.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/views/elements/crypto/VerificationQRCode.js b/src/components/views/elements/crypto/VerificationQRCode.js index cbbe2912d6..88f9608138 100644 --- a/src/components/views/elements/crypto/VerificationQRCode.js +++ b/src/components/views/elements/crypto/VerificationQRCode.js @@ -130,9 +130,9 @@ export default class VerificationQRCode extends React.PureComponent { tmpBuf.writeInt8(i, 0); buf = Buffer.concat([buf, tmpBuf]); }; - const appendStr = (s: string, enc: string) => { + const appendStr = (s: string, enc: string, withLengthPrefix = true) => { const tmpBuf = Buffer.from(s, enc); - appendInt(tmpBuf.byteLength); + if (withLengthPrefix) appendInt(tmpBuf.byteLength); buf = Buffer.concat([buf, tmpBuf]); }; const appendEncBase64 = (b64: string) => { @@ -142,7 +142,7 @@ export default class VerificationQRCode extends React.PureComponent { }; // Actually build the buffer for the QR code - appendStr(this.props.prefix, "ascii"); + appendStr(this.props.prefix, "ascii", false); appendByte(this.props.version); appendByte(this.props.mode); appendStr(this.props.transactionId, "utf-8"); From 566db6c406c9b6905fbf154e18a89312258c41f0 Mon Sep 17 00:00:00 2001 From: Ben Parsons Date: Tue, 25 Feb 2020 17:29:59 +0000 Subject: [PATCH 036/522] link to matrix.org/security-disclosure-policy in help screen --- .../views/settings/tabs/user/HelpUserSettingsTab.js | 9 +++++++++ src/i18n/strings/en_EN.json | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/components/views/settings/tabs/user/HelpUserSettingsTab.js b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js index 258b55bb4e..1222cc1634 100644 --- a/src/components/views/settings/tabs/user/HelpUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js @@ -225,6 +225,15 @@ export default class HelpUserSettingsTab extends React.Component { {_t("Clear cache and reload")} + { + _t( "To submit a security-related bug report, please read the Matrix.org " + + "Security Disclosure Policy.", {}, + { + 'a': (sub) => + {sub}, + }) + }
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index f702da6b4c..9223c13408 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2133,5 +2133,6 @@ "Message downloading sleep time(ms)": "Message downloading sleep time(ms)", "Failed to set direct chat tag": "Failed to set direct chat tag", "Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room", - "Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room" + "Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room", + "To submit a security-related bug report, please read the Matrix.org Security Disclosure Policy.": "To submit a security-related bug report, please read the Matrix.org Security Disclosure Policy." } From 92bc3e83ef08d99739961f81c22eeb529a72ca6a Mon Sep 17 00:00:00 2001 From: Ben Parsons Date: Tue, 25 Feb 2020 17:57:31 +0000 Subject: [PATCH 037/522] yarn i18n --- src/i18n/strings/en_EN.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 9223c13408..c0470af357 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -725,6 +725,7 @@ "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.", "Submit debug logs": "Submit debug logs", "Clear cache and reload": "Clear cache and reload", + "To submit a security-related bug report, please read the Matrix.org Security Disclosure Policy.": "To submit a security-related bug report, please read the Matrix.org Security Disclosure Policy.", "FAQ": "FAQ", "Versions": "Versions", "riot-web version:": "riot-web version:", @@ -2133,6 +2134,5 @@ "Message downloading sleep time(ms)": "Message downloading sleep time(ms)", "Failed to set direct chat tag": "Failed to set direct chat tag", "Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room", - "Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room", - "To submit a security-related bug report, please read the Matrix.org Security Disclosure Policy.": "To submit a security-related bug report, please read the Matrix.org Security Disclosure Policy." + "Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room" } From 30a0d88074542eb538f98e869d04e5ad58d8c853 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 25 Feb 2020 13:13:41 -0700 Subject: [PATCH 038/522] Don't print errors when the tab is used with no autocomplete present Fixes https://github.com/vector-im/riot-web/issues/12461 Not a release blocker because the error is caught, and is at the end of the function. Just log spam. --- src/components/views/rooms/BasicMessageComposer.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/components/views/rooms/BasicMessageComposer.js b/src/components/views/rooms/BasicMessageComposer.js index ff4e5e8385..e366a20326 100644 --- a/src/components/views/rooms/BasicMessageComposer.js +++ b/src/components/views/rooms/BasicMessageComposer.js @@ -471,10 +471,14 @@ export default class BasicMessageEditor extends React.Component { const addedLen = range.replace([partCreator.pillCandidate(range.text)]); return model.positionForOffset(caret.offset + addedLen, true); }); - await model.autoComplete.onTab(); - if (!model.autoComplete.hasSelection()) { - this.setState({showVisualBell: true}); - model.autoComplete.close(); + + // Don't try to do things with the autocomplete if there is none shown + if (model.autoComplete) { + await model.autoComplete.onTab(); + if (!model.autoComplete.hasSelection()) { + this.setState({showVisualBell: true}); + model.autoComplete.close(); + } } } catch (err) { console.error(err); From 6008124e65da7f21d29e80e781d02d3ae1655f67 Mon Sep 17 00:00:00 2001 From: "Nils J. Haugen" Date: Tue, 25 Feb 2020 17:52:54 +0000 Subject: [PATCH 039/522] Translated using Weblate (Norwegian Nynorsk) Currently translated at 50.9% (1088 of 2137 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nn/ --- src/i18n/strings/nn.json | 130 +++++++++++++++++++++------------------ 1 file changed, 70 insertions(+), 60 deletions(-) diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json index 0bdf358533..c9b98f9a26 100644 --- a/src/i18n/strings/nn.json +++ b/src/i18n/strings/nn.json @@ -47,15 +47,15 @@ "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(time)s", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s", - "Who would you like to add to this community?": "Kven vil du leggja til i dette samfunnet?", - "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Åtvaring: alle du legg til i eit samfunn vert offentleg synleg til alle som kan samfunns-IDen", - "Invite new community members": "Byd nye samfunnsmedlemer inn", - "Invite to Community": "Byd inn til Samfunn", - "Which rooms would you like to add to this community?": "Kva rom vil du leggja til i dette samfunnet?", - "Show these rooms to non-members on the community page and room list?": "Vis desse romma til ikkje-medlemer på samfunnssida og romlista?", - "Add rooms to the community": "Legg til rom i samfunnet", + "Who would you like to add to this community?": "Kven vil du leggja til i dette fellesskapet?", + "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Åtvaring: alle du legg til i eit fellesskap blir offentleg synleg til alle som kan fellesskaps-IDen", + "Invite new community members": "Inviter nye fellesskapsmedlem", + "Invite to Community": "Inviter til Felleskapet", + "Which rooms would you like to add to this community?": "Kva rom vil du leggja til i dette fellesskapet?", + "Show these rooms to non-members on the community page and room list?": "Vise desse romma til ikkje-medlem på fellesskapssida og romkatalogen?", + "Add rooms to the community": "Legg til rom i fellesskapet", "Room name or alias": "Romnamn eller alias", - "Add to community": "Legg til i samfunn", + "Add to community": "Legg til i fellesskapet", "Failed to invite the following users to %(groupId)s:": "Fekk ikkje til å invitera følgjande brukarar i %(groupId)s:", "Failed to invite users to community": "Fekk ikkje til å invitera brukarar til fellesskapet.", "Failed to invite users to %(groupId)s": "Fekk ikkje til å byda brukarar inn til %(groupId)s", @@ -127,7 +127,7 @@ "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s sa ja til innbydinga frå %(displayName)s.", "%(targetName)s accepted an invitation.": "%(targetName)s sa ja til ei innbyding.", "%(senderName)s requested a VoIP conference.": "%(senderName)s bad om ei VoIP-gruppesamtale.", - "%(senderName)s invited %(targetName)s.": "%(senderName)s baud %(targetName)s inn.", + "%(senderName)s invited %(targetName)s.": "%(senderName)s inviterte %(targetName)s.", "%(senderName)s banned %(targetName)s.": "%(senderName)s stengde %(targetName)s ute.", "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s endra visingsnamnet sitt til %(displayName)s.", "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s sette visingsnamnet sitt som %(displayName)s.", @@ -149,13 +149,13 @@ "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s sende eit bilete.", "Someone": "Nokon", "(not supported by this browser)": "(ikkje støtta av denne nettlesaren)", - "%(senderName)s answered the call.": "%(senderName)s tok røret.", + "%(senderName)s answered the call.": "%(senderName)s svarde på samtalen.", "(could not connect media)": "(klarte ikkje å kopla media saman)", "(no answer)": "(ingen svar)", - "(unknown failure: %(reason)s)": "(ukjend mislukking: %(reason)s)", - "%(senderName)s ended the call.": "%(senderName)s enda samtala.", - "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s baud %(targetDisplayName)s inn til rommet.", - "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s gjorde slik at den framtidige romhistoria er tilgjengeleg for alle rommedlemer frå då dei vart innbodne.", + "(unknown failure: %(reason)s)": "(ukjend feil: %(reason)s)", + "%(senderName)s ended the call.": "%(senderName)s avslutta samtalen.", + "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s inviterte %(targetDisplayName)s til å bli med i rommet.", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s gjorde slik at den framtidige romhistoria er tilgjengeleg for alle rommedlemar frå då dei vart invitert.", "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s gjorde slik at den framtidige romhistoria er tilgjengeleg for alle rommedlemer frå då dei kom inn.", "%(senderName)s made future room history visible to all room members.": "%(senderName)s gjorde den framtidige romhistoria tilgjengeleg for alle rommedlemer.", "%(senderName)s made future room history visible to anyone.": "%(senderName)s gjorde den framtidige romhistoria tilgjengelg for kven som helst.", @@ -349,7 +349,7 @@ "Forget room": "Gløym rom", "Search": "Søk", "Share room": "Del rom", - "Community Invites": "Samfunnsinnbydingar", + "Community Invites": "Fellesskapsinvitasjonar", "Invites": "Innbydingar", "Favourites": "Yndlingar", "Rooms": "Rom", @@ -397,12 +397,12 @@ "Local addresses for this room:": "Lokaladresser for dette rommet:", "This room has no local addresses": "Dette rommer har ingen lokaladresser", "New address (e.g. #foo:%(localDomain)s)": "Ny adresse (t.d. #foo:%(localDomain)s)", - "Invalid community ID": "Ugangbar samfunnsID", - "'%(groupId)s' is not a valid community ID": "'%(groupId)s' er ikkje ein gangbar samfunnsID", + "Invalid community ID": "Ugyldig fellesskaps-ID", + "'%(groupId)s' is not a valid community ID": "'%(groupId)s' er ikkje ein gyldig fellesskaps-ID", "Flair": "Særpreg", "Showing flair for these communities:": "Viser særpreg for desse samfunna:", "This room is not showing flair for any communities": "Dette rommet viser ikkje særpreg for nokre samfunn", - "New community ID (e.g. +foo:%(localDomain)s)": "Ny samfunnsID (t.d. +foo:%(localDomain)s)", + "New community ID (e.g. +foo:%(localDomain)s)": "Ny fellesskaps-ID (t.d. +foo:%(localDomain)s)", "You have enabled URL previews by default.": "Du har skrudd URL-førehandsvisingar på i utgangspunktet.", "You have disabled URL previews by default.": "Du har skrudd URL-førehandsvisingar av i utgangspunktet.", "URL previews are enabled by default for participants in this room.": "URL-førehandsvisingar er skrudd på i utgangspunktet for dette rommet.", @@ -450,23 +450,23 @@ "Sign in": "Logg inn", "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Viss du ikkje seier kva epostadresse du vil bruka vil du ikkje kunna attendestille passordet ditt. Er du sikker?", "Register": "Meld deg inn", - "Remove from community": "Fjern frå samfunnet", - "Disinvite this user from community?": "Fjern denne brukaren si innbyding til samfunnet?", - "Remove this user from community?": "Fjern denne brukaren frå samfunnet?", + "Remove from community": "Fjern frå fellesskapet", + "Disinvite this user from community?": "Fjerne denne brukaren sin invitasjon til fellesskapet?", + "Remove this user from community?": "Fjerne denne brukaren frå fellesskapet?", "Failed to withdraw invitation": "Fekk ikkje til å taka innbydinga att", - "Failed to remove user from community": "Fekk ikkje til å fjerna brukaren frå samfunnet", + "Failed to remove user from community": "Fekk ikkje til å fjerna brukaren frå fellesskapet", "Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "Er du sikker på at du vil fjerna '%(roomName)s' frå %(groupId)s?", - "Removing a room from the community will also remove it from the community page.": "Å fjerna eit rom frå samfunnet fjernar det frå samfunnssida òg.", + "Removing a room from the community will also remove it from the community page.": "Fjerning av rom frå fellesskapet vil i tillegg fjerna det frå fellesskapssida.", "Remove": "Fjern", - "Failed to remove room from community": "Fekk ikkje til å fjerna rommet frå samfunnet", + "Failed to remove room from community": "Fekk ikkje til å fjerna rommet frå fellesskapet", "Failed to remove '%(roomName)s' from %(groupId)s": "Fekk ikkje til å fjerna '%(roomName)s' frå %(groupId)s", "Something went wrong!": "Noko gjekk gale!", "The visibility of '%(roomName)s' in %(groupId)s could not be updated.": "Kunne ikkje oppdatera synligheita til '%(roomName)s' i %(groupId)s.", "Visibility in Room List": "Synligheit i Romlista", "Visible to everyone": "Synleg for alle", - "Only visible to community members": "Berre synleg for samfunnsmedlemer", + "Only visible to community members": "Berre synleg for medlemar av fellesskapet", "Something went wrong when trying to get your communities.": "Noko gjekk gale med framhentinga av samfunna dine.", - "Display your community flair in rooms configured to show it.": "Vis samfunnssærpreget ditt i rom som er stilt inn til å visa det.", + "Display your community flair in rooms configured to show it.": "Vis fellesskapsetiketten din i rom som er stilt inn til å visa det.", "You're not currently a member of any communities.": "Du er for augeblunket ikkje medlem i nokre samfunn.", "Yes, I want to help!": "Ja, eg vil vera til nytte!", "You are not receiving desktop notifications": "Du fær ikkje skrivebordsvarsel", @@ -571,11 +571,11 @@ "Send logs": "Send loggar inn", "Unavailable": "Utilgjengeleg", "Changelog": "Endringslogg", - "Something went wrong whilst creating your community": "Noko gjekk gale med laginga av samfunnet ditt", - "Create Community": "Lag Samfunn", - "Community Name": "Samfunnsnamn", + "Something went wrong whilst creating your community": "Noko gjekk gale med laginga av felleskapet ditt", + "Create Community": "Lag Fellesskap", + "Community Name": "Fellesskapsnamn", "Example": "Døme", - "Community ID": "Samfunns-ID", + "Community ID": "Fellesskap-ID", "example": "døme", "Create": "Lag", "Create Room": "Lag eit Rom", @@ -584,8 +584,8 @@ "Minimize apps": "Legg æppar ned", "Confirm Removal": "Godkjenn Fjerning", "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Er du sikker på at du vil fjerna (sletta) denne hendingen? Merk deg at vis du slettar eit romnamn eller ei emneendring kan det gjera om på endringa.", - "Community IDs cannot be empty.": "Samfunns-IDfeltet kan ikkje vera tomt.", - "Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Samfunns-IDar kan berre innehalda teikna a-z, 0-9, eller '=_-./'", + "Community IDs cannot be empty.": "Feltet Fellesskap-ID kan ikkje vera tomt.", + "Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Fellesskap-IDar kan berre innehalda teikna a-z, 0-9, eller '=_-./'", "Unknown error": "Noko ukjend gjekk galt", "Incorrect password": "Urett passord", "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Dette gjer at brukaren din vert ubrukeleg til evig tid. Du kjem ikkje til å kunna logga inn, og ingen andre kjem til å kunna melde seg inn med den gamle brukar-IDen din. Brukaren din forlét òg alle rom han er i, og brukardetaljane dine vil verta fjerna frå identitetstenaren. Denne handlinga kan ikkje gjerast om.", @@ -642,7 +642,7 @@ "Share Room": "Del Rom", "Link to most recent message": "Lenk til den nyaste meldinga", "Share User": "Del Brukar", - "Share Community": "Del Samfunn", + "Share Community": "Del Fellesskap", "Share Room Message": "Del Rommelding", "Link to selected message": "Lenk til den valde meldinga", "COPY": "KOPIER", @@ -673,7 +673,7 @@ "Forget": "Gløym", "Low Priority": "Lågrett", "Direct Chat": "Direktesamtale", - "View Community": "Sjå Samfunn", + "View Community": "Sjå Fellesskap", "Sorry, your browser is not able to run Riot.": "Orsak, nettlesaren din klarer ikkje å køyra Riot.", "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot brukar mange omfattande nettlesarfunksjonar, og nokre av dei er ikkje tilgjengelege eller i utprøving i nettlesaren din.", "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Med denne nettlesaren, er det mogleg at synet og kjensla av applikasjonen er fullstendig gale, og nokre eller alle funksjonar verkar kanskje ikkje. Viss du vil prøva likevel kan du gå fram, men då du må sjølv handtera alle vanskar du møter på!", @@ -682,44 +682,44 @@ "You must register to use this functionality": "Du må melda deg inn for å bruka denne funksjonen", "You must join the room to see its files": "Du må fare inn i rommet for å sjå filene dets", "There are no visible files in this room": "Det er ingen synlege filer i dette rommet", - "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n": "

HTML for samfunnssida di

\n

\n Bruk den Lange Skildringa for å ynskja nye medlemer velkomen, eller gje ut viktige lenkjer\n

\n

\n Du kan til og med bruka 'img'-merkelappar!\n

\n", - "Add rooms to the community summary": "Legg rom til i samfunnsoppsamanfattinga", + "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n": "

HTML for samfunnssida di

\n

\n Bruk den Lange Skildringa for å ynskja nye medlemer velkomen, eller gje ut viktige lenkjer\n

\n

\n Du kan til og med bruka 'img' HTML-taggar!\n

\n", + "Add rooms to the community summary": "Legg rom til i samandraget for fellesskapet", "Which rooms would you like to add to this summary?": "Kva rom ynskjer du å leggja til i samanfattinga?", "Add to summary": "Legg til i samanfattinga", "Failed to add the following rooms to the summary of %(groupId)s:": "Fekk ikkje til å leggja dei fylgjande romma til i samanfattinga av %(groupId)s:", "Add a Room": "Legg eit Rom til", "Failed to remove the room from the summary of %(groupId)s": "Fekk ikkje til å fjerna rommet frå samanfattinga av %(groupId)s", "The room '%(roomName)s' could not be removed from the summary.": "Rommet '%(roomName)s' lét seg ikkje fjerna frå samanfattinga.", - "Add users to the community summary": "Legg brukarar til i samfunnsamanfattinga", + "Add users to the community summary": "Legg brukarar til i samandraget for fellesskapet", "Who would you like to add to this summary?": "Kven vil du leggja til i samanfattinga?", "Failed to add the following users to the summary of %(groupId)s:": "Fekk ikkje til å leggja fylgjande brukarar til i samanfattinga av %(groupId)s:", "Add a User": "Legg ein Brukar til", "Failed to remove a user from the summary of %(groupId)s": "Fekk ikkje til å fjerna brukaren frå samanfattinga av %(groupId)s", "The user '%(displayName)s' could not be removed from the summary.": "Brukaren '%(displayName)s' lét seg ikkje fjerna frå samanfattinga.", "Failed to upload image": "Fekk ikkje til å lasta biletet opp", - "Failed to update community": "Fekk ikkje til å oppdatera samfunnet", + "Failed to update community": "Fekk ikkje til å oppdatera fellesskapet", "Unable to accept invite": "Fekk ikkje til å seia ja til innbydinga", - "Unable to join community": "Fekk ikkje til å fara inn i samfunnet", - "Leave Community": "Far frå Samfunnet", + "Unable to join community": "Fekk ikkje til å bli med i fellesskapet", + "Leave Community": "Forlat fellesskapet", "Leave %(groupName)s?": "Far frå %(groupName)s?", - "Unable to leave community": "Fekk ikkje til å fara frå samfunnet", - "Community Settings": "Samfunninnstillingar", - "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "Endringar gjort på samfunnsnamnet og samfunnsavataren vert kanskje ikkje synleg forandre før opp til 30 minutt har gått.", - "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Desse romma vert viste for samfunnsmedlemer på samfunnsida. Samfunnsmedlemer kan fara inn i romma ved å klikka på dei.", - "Add rooms to this community": "Legg rom til i samfunnet", + "Unable to leave community": "Fekk ikkje til å forlate fellesskapet", + "Community Settings": "Fellesskapsinnstillingar", + "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "Endringar gjort på felleskapsnamn og felleskapsavatar blir kanskje ikkje synleg for andre før etter 30 minutt.", + "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Desse romma vert viste for medlem i felleskapet på felleskapssida. Felleskapsmedlemar kan bli med i romma ved å klikke på dei.", + "Add rooms to this community": "Legg rom til i fellesskapet", "Featured Rooms:": "Utvalde Rom:", "Featured Users:": "Utvalde Brukarar:", - "%(inviter)s has invited you to join this community": "%(inviter)s baud deg inn til dette samfunnet", - "Join this community": "Far inn i samfunnet", - "Leave this community": "Far frå samfunnet", - "You are an administrator of this community": "Du er administrator i dette samfunnet", - "You are a member of this community": "Du er eit medlem av dette samfunnet", - "Who can join this community?": "Kven kan verta med i samfunnet?", + "%(inviter)s has invited you to join this community": "%(inviter)s inviterte deg med i dette fellesskapet", + "Join this community": "Bli med i dette felleskapet", + "Leave this community": "Forlat dette felleskapet", + "You are an administrator of this community": "Du er administrator av dette fellesskapet", + "You are a member of this community": "Du er medlem av dette fellesskapet", + "Who can join this community?": "Kven kan bli med i dette fellesskapet?", "Everyone": "Alle", - "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "Samfunnet ditt har ikkje ei Lang Skilrding (ei HTML-side for å visa til samfunnsmedlem.)
Klikk her for å opna innstillingar og gje det ei!", + "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "Fellesskapet ditt har ikkje ein lang beskrivelse (HTML-side for å visa til fellesskapsmedlem.)
Klikk her for å opna innstillingar og legge dette til!", "Long Description (HTML)": "Lang Skildring (HTML)", "Description": "Skildring", - "Community %(groupId)s not found": "Fann ikkje samfunnet %(groupId)s", + "Community %(groupId)s not found": "Fann ikkje fellesskapet %(groupId)s", "Failed to load %(groupId)s": "Fekk ikkje til å lasta %(groupId)s", "Failed to reject invitation": "Fekk ikkje til å seia nei til innbyding", "This room is not public. You will not be able to rejoin without an invite.": "Dette rommet er ikkje offentleg. Du kjem ikkje til å kunna koma inn att utan ei innbyding.", @@ -737,13 +737,13 @@ "Logout": "Loggar ut", "Your Communities": "Dine Samfunn", "Error whilst fetching joined communities": "Noko gjekk gale med innhentinga av samfunna du er i", - "Create a new community": "Lag eit nytt samfunn", + "Create a new community": "Lag eit nytt fellesskap", "You have no visible notifications": "Du har ingen synlege varsel", "Members": "Medlemer", "Invite to this room": "Byd inn til rommet", "Files": "Filer", "Notifications": "Varsel", - "Invite to this community": "Byd inn til samfunnet", + "Invite to this community": "Inviter til dette fellesskapet", "The server may be unavailable or overloaded": "Tenaren er kanskje utilgjengeleg eller overlasta", "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Slett rommaliaset %(alias)s og fjern %(name)s frå utvalet?", "Remove %(name)s from the directory?": "Fjern %(name)s frå utvalet?", @@ -866,9 +866,9 @@ "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "Når nokon legg ein URL med i meldinga si, kan ei URL-førehandsvising visast for å gje meir info om lenkja slik som tittelen, skildringa, og eit bilete frå nettsida.", "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Du held på å verta teken til ei tredje-partisside so du kan godkjenna brukaren din til bruk med %(integrationsUrl)s. Vil du gå fram?", "Token incorrect": "Teiknet er gale", - "Filter community members": "Filtrer samfunnsmedlemer", + "Filter community members": "Filtrer fellesskapssmedlemar", "Custom Server Options": "Tilpassa tenar-innstillingar", - "Filter community rooms": "Filtrer samfunnsrom", + "Filter community rooms": "Filtrer rom i fellesskapet", "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Ver venleg og hjelp oss å forbetra Riot.im ved å senda anonym brukardata. Dette brukar ei datakake (ver venleg og sjå på Datakakeretningslinene våre).", "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Ver venleg og hjelp oss å forbetra Riot.im ved å senda anonym brukardata. Dette brukar ei datakake.", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Om du brukar Riktekst-innstillinga på Riktekstfeltet", @@ -887,8 +887,8 @@ "Custom": "Sjølvsett", "Failed to set Direct Message status of room": "Fekk ikkje til å setja Direktemelding-tilstanden til rommet", "Did you know: you can use communities to filter your Riot.im experience!": "Visste du at: du kan bruka samfunn for å filtrera Riot.im-opplevinga di!", - "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "For å setja opp eit filter, drag ein samfunnsavatar bort til filterpanelet til venstre på skjermen. Du kan klikka på ein avatar i filterpanelet når som helst for å sjå berre romma og folka tilknytta det samfunnet.", - "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Lag eit samfunn for å føra saman brukarar og rom! Bygg di eiga heimeside for å kreva din del av Matrix-verda.", + "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "For å setja opp eit filter, dra ein fellesskapsavatar bort til filterpanelet til venstre på skjermen. Du kan klikka på ein avatar i filterpanelet når som helst for å sjå berre romma og folka tilknytta det fellesskapet.", + "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Lag eit fellesskap for å føra saman brukarar og rom! Bygg di eiga heimeside for å kreva din del av Matrix-verda.", "Unable to look up room ID from server": "Klarte ikkje å henta rom-ID frå tenaren", "Server may be unavailable, overloaded, or search timed out :(": "Tenaren er kanskje utilgjengeleg, overlasta, elles så vart søket tidsavbrote :(", "Clear filter": "Tøm filter", @@ -1090,5 +1090,15 @@ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s fjerna %(removedAddresses)s og %(count)s andre som adresse for dette rommet", "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s fjerna %(removedAddresses)s som adresser for dette rommet.", "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s fjerna %(removedAddresses)s som adresse for dette rommet.", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s fjerna %(countRemoved)s og la til %(countAdded)s adresser for dette rommet" + "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s fjerna %(countRemoved)s og la til %(countAdded)s adresser for dette rommet", + "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s la til %(addedAddresses)s og tok vekk %(removedAddresses)s som adresser for dette rommet.", + "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s satte standardadressa for dette rommet til %(address)s.", + "%(senderName)s removed the main address for this room.": "%(senderName)s fjerna standardadressa for dette rommet.", + "%(senderName)s placed a voice call.": "%(senderName)s starta eit taleanrop.", + "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s starta eit taleanrop. (ikkje støtta av denne nettlesaren)", + "%(senderName)s placed a video call.": "%(senderName)s starta ein videosamtale.", + "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s starta ein videosamtale. (ikkje støtta av denne nettlesaren)", + "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s trekte tilbake invitasjonen for at %(targetDisplayName)s kan bli medlem i rommet.", + "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Du er administrator for dette fellesskapet. Du kan ikkje melde deg inn igjen utan at du har invitasjon frå ein annan administrator.", + "Want more than a community? Get your own server": "Treng du meir enn eit fellesskap? Skaff din eigen server" } From b32fbcb64fef82f1e7c229efd29d849d93a493f9 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 25 Feb 2020 15:40:15 -0700 Subject: [PATCH 040/522] Don't try to collapse zero events with a group Fixes https://github.com/vector-im/riot-web/issues/12423 When events are redacted they fail to make it into the Grouper because the `shouldAddEvent` check blocks them from entering. However, the grouper expects that when `getTiles()` is called that there's events to group and dutifully grabs some context from the array. Because JavaScript is the least helpful language, `myArray[-1]` returns `undefined` or `null` and thus you get `cannot read 'sender' of undefined`. Regressed in https://github.com/matrix-org/matrix-react-sdk/pull/4059 --- src/components/structures/MessagePanel.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/components/structures/MessagePanel.js b/src/components/structures/MessagePanel.js index b8b11fbb31..d0e35e1c2b 100644 --- a/src/components/structures/MessagePanel.js +++ b/src/components/structures/MessagePanel.js @@ -873,6 +873,11 @@ class CreationGrouper { } getTiles() { + // If we don't have any events to group, don't even try to group them. The logic + // below assumes that we have a group of events to deal with, but we might not if + // the events we were supposed to group were redacted. + if (!this.events || !this.events.length) return []; + const DateSeparator = sdk.getComponent('messages.DateSeparator'); const EventListSummary = sdk.getComponent('views.elements.EventListSummary'); @@ -959,6 +964,11 @@ class MemberGrouper { } getTiles() { + // If we don't have any events to group, don't even try to group them. The logic + // below assumes that we have a group of events to deal with, but we might not if + // the events we were supposed to group were redacted. + if (!this.events || !this.events.length) return []; + const DateSeparator = sdk.getComponent('messages.DateSeparator'); const MemberEventListSummary = sdk.getComponent('views.elements.MemberEventListSummary'); From 9673fbfc2ab33dabc58734242b079a9b8204ef64 Mon Sep 17 00:00:00 2001 From: Tuomas Hietala Date: Tue, 25 Feb 2020 21:20:16 +0000 Subject: [PATCH 041/522] Translated using Weblate (Finnish) Currently translated at 89.8% (1918 of 2137 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fi/ --- src/i18n/strings/fi.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 370f0b5394..769e92ac27 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -1920,5 +1920,24 @@ "Backup restored": "Varmuuskopio palautettu", "Go Back": "Takaisin", "Copy": "Kopioi", - "Upgrade your encryption": "Päivitä salauksesi" + "Upgrade your encryption": "Päivitä salauksesi", + "Unknown (user, session) pair:": "Tuntematon (käyttäjä, istunto) -pari:", + "Your homeserver does not support session management.": "Kotipalvelimesi ei tue istunnonhallintaa.", + "Unable to load session list": "Istuntoluettelon lataaminen ei onnistu", + "Delete %(count)s sessions|one": "Poista %(count)s istunto", + "Backup has a valid signature from this session": "Varmuuskopiossa on kelvollinen allekirjoitus tästä istunnosta", + "Backup has an invalid signature from this session": "Varmuuskopiossa on epäkelpo allekirjoitus tästä istunnosta", + "Enable desktop notifications for this session": "Ota käyttöön työpöytäilmoitukset tälle istunnolle", + "Enable audible notifications for this session": "Ota käyttöön ääni-ilmoitukset tälle istunnolle", + "A session's public name is visible to people you communicate with": "Istunnon julkinen nimi näkyy ihmisille, joiden kanssa viestit", + "Someone is using an unknown session": "Joku käyttää tuntematonta istuntoa", + "%(count)s sessions|other": "%(count)s istuntoa", + "%(count)s sessions|one": "%(count)s istunto", + "Hide sessions": "Piilota istunnot", + "Clear all data in this session?": "Poista kaikki tämän istunnon tiedot?", + "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Kaikkien tämän istunnon tietojen poistaminen on pysyvää. Salatut viestit menetetään, ellei niiden avaimia ole varmuuskopioitu.", + "Session name": "Istunnon nimi", + "You added a new session '%(displayName)s', which is requesting encryption keys.": "Lisäsit uuden istunnon '%(displayName)s', joka pyytää salausavaimia.", + "Loading session info...": "Ladataan istunnon tietoja...", + "New session": "Uusi istunto" } From 167092d35b62c1c38b2353a983df4c979e6f1a4d Mon Sep 17 00:00:00 2001 From: Szimszon Date: Tue, 25 Feb 2020 20:29:50 +0000 Subject: [PATCH 042/522] Translated using Weblate (Hungarian) Currently translated at 100.0% (2137 of 2137 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index b1531daa42..4b08fb8294 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2154,5 +2154,18 @@ "You declined": "Elutasítottad", "%(name)s declined": "%(name)s elutasította", "accepting …": "elfogadás …", - "declining …": "elutasítás …" + "declining …": "elutasítás …", + "Cancelling…": "Megszakítás…", + "Your homeserver does not support cross-signing.": "A matrix szervered nem támogatja az eszközök közti hitelesítést.", + "Homeserver feature support:": "Matrix szerver támogatott szolgáltatások:", + "exists": "létezik", + "Accepting…": "Elfogadás…", + "Accepting …": "Elfogadás …", + "Declining …": "Elutasítás …", + "Verification Requests": "Hitelesítés Kérések", + "Your account is not secure": "A fiókod nem biztonságos", + "Your password": "A jelszavad", + "This session, or the other session": "Ez vagy másik munkamenet", + "The internet connection either session is using": "Az egyik munkamenet internet kapcsolata", + "We recommend you change your password and recovery key in Settings immediately": "Javasoljuk, hogy a jelszavadat és a visszaállítási kulcsodat mihamarabb változtasd meg a Beállításokban" } From 9be61497fb33bb3cb52e7e7e631d9b0477b70161 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 25 Feb 2020 16:11:07 -0700 Subject: [PATCH 043/522] Handle errors when previewing rooms more safely Fixes https://github.com/vector-im/riot-web/issues/12500 See https://github.com/matrix-org/synapse/issues/6992 for additional context. --- src/components/structures/RoomView.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 0efa46416e..edd916697a 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -342,7 +342,7 @@ export default createReactClass({ peekLoading: false, }); this._onRoomLoaded(room); - }, (err) => { + }).catch((err) => { if (this.unmounted) { return; } @@ -355,7 +355,7 @@ export default createReactClass({ // This won't necessarily be a MatrixError, but we duck-type // here and say if it's got an 'errcode' key with the right value, // it means we can't peek. - if (err.errcode == "M_GUEST_ACCESS_FORBIDDEN") { + if (err.errcode === "M_GUEST_ACCESS_FORBIDDEN" || err.errcode === 'M_FORBIDDEN') { // This is fine: the room just isn't peekable (we assume). this.setState({ peekLoading: false, @@ -365,8 +365,6 @@ export default createReactClass({ } }); } else if (room) { - //viewing a previously joined room, try to lazy load members - // Stop peeking because we have joined this room previously MatrixClientPeg.get().stopPeeking(); this.setState({isPeeking: false}); From 15dd6b319d8dfd5b614a91429e1635bd53d0ef8a Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Wed, 26 Feb 2020 02:12:30 +0000 Subject: [PATCH 044/522] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2137 of 2137 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index d14a77744e..0551f2f3ec 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2161,5 +2161,14 @@ "Your homeserver does not support cross-signing.": "您的家伺服器不支援交叉簽章。", "Homeserver feature support:": "家伺服器功能支援:", "exists": "存在", - "Verification Requests": "驗證請求" + "Verification Requests": "驗證請求", + "Cancelling…": "正在取消……", + "Accepting…": "正在接受……", + "Accepting …": "正在接受……", + "Declining …": "正在拒絕……", + "Your account is not secure": "您的帳號不安全", + "Your password": "您的密碼", + "This session, or the other session": "此工作階段或其他工作階段", + "The internet connection either session is using": "任何一個工作階段正在使用的網際網路連線", + "We recommend you change your password and recovery key in Settings immediately": "我們建議您立刻在設定中變更您的密碼與復原金鑰" } From 9a1236a016eb2f6217f3b8c78d44f7813472ffa7 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 26 Feb 2020 10:40:33 +0000 Subject: [PATCH 045/522] Fix message context menu breaking on invalid m.room.pinned_events event Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/context_menus/MessageContextMenu.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/views/context_menus/MessageContextMenu.js b/src/components/views/context_menus/MessageContextMenu.js index ea5623fe48..a73b0d640e 100644 --- a/src/components/views/context_menus/MessageContextMenu.js +++ b/src/components/views/context_menus/MessageContextMenu.js @@ -90,7 +90,8 @@ export default createReactClass({ const room = MatrixClientPeg.get().getRoom(this.props.mxEvent.getRoomId()); const pinnedEvent = room.currentState.getStateEvents('m.room.pinned_events', ''); if (!pinnedEvent) return false; - return pinnedEvent.getContent().pinned.includes(this.props.mxEvent.getId()); + const content = pinnedEvent.getContent(); + return content.pinned && Array.isArray(content.pinned) && content.pinned.includes(this.props.mxEvent.getId()); }, onResendClick: function() { From c4ce9a310e585a8d6bc469e76242063ffeb66f1c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 26 Feb 2020 13:44:35 +0000 Subject: [PATCH 046/522] Limit UserInfo Displayname to 3 lines to get rid of scrollbars and ugliness Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/right_panel/_UserInfo.scss | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/res/css/views/right_panel/_UserInfo.scss b/res/css/views/right_panel/_UserInfo.scss index 46d5e99d64..074d625963 100644 --- a/res/css/views/right_panel/_UserInfo.scss +++ b/res/css/views/right_panel/_UserInfo.scss @@ -137,12 +137,20 @@ limitations under the License. font-size: 18px; line-height: 25px; flex: 1; - overflow-x: auto; - max-height: 50px; display: flex; justify-content: center; align-items: center; + // limit to 2 lines, show an ellipsis if it overflows + // this looks webkit specific but is supported by Firefox 68+ + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + + overflow: hidden; + word-break: break-all; + text-overflow: ellipsis; + .mx_E2EIcon { margin: 5px; } From 2ce006a9ea5b481621d37e86e35859e5315fc94c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 26 Feb 2020 13:48:22 +0000 Subject: [PATCH 047/522] delint css Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/right_panel/_UserInfo.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/res/css/views/right_panel/_UserInfo.scss b/res/css/views/right_panel/_UserInfo.scss index 074d625963..0e4b1bda9e 100644 --- a/res/css/views/right_panel/_UserInfo.scss +++ b/res/css/views/right_panel/_UserInfo.scss @@ -137,7 +137,6 @@ limitations under the License. font-size: 18px; line-height: 25px; flex: 1; - display: flex; justify-content: center; align-items: center; From 9afa66364e1a38362528c88fb496fc4466de7663 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 26 Feb 2020 14:24:58 +0000 Subject: [PATCH 048/522] Upgrade matrix-js-sdk to 5.1.0-rc.1 --- package.json | 2 +- yarn.lock | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 624f2d6ecb..5c18d9119e 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "is-ip": "^2.0.0", "linkifyjs": "^2.1.6", "lodash": "^4.17.14", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop", + "matrix-js-sdk": "5.1.0-rc.1", "minimist": "^1.2.0", "pako": "^1.0.5", "png-chunks-extract": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index d57ecfbeb9..b01b64a8b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5791,9 +5791,10 @@ mathml-tag-names@^2.0.1: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz#6dff66c99d55ecf739ca53c492e626f1d12a33cc" integrity sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw== -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": - version "5.0.1" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/a998006842ae558f02819ca84fbaad43685cc10b" +matrix-js-sdk@5.1.0-rc.1: + version "5.1.0-rc.1" + resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-5.1.0-rc.1.tgz#48154133f1c8bc19557164a24535d6d45d1cf482" + integrity sha512-3pf8NOziyaldtJkYsas9Cq/b8TloGMY89KRA4tJLRDCdMrlBEJoQ4qb9MCmhS53Yb8N4ysI7qUUC21FtBryAVQ== dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" From 9926b32f24c6c7b5564a4b7ebace3e06b12bb529 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 26 Feb 2020 14:29:31 +0000 Subject: [PATCH 049/522] Prepare changelog for v2.2.0-rc.1 --- CHANGELOG.md | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa02dc1ae3..e4b86317c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,89 @@ +Changes in [2.2.0-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.2.0-rc.1) (2020-02-26) +============================================================================================================= +[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.1.1...v2.2.0-rc.1) + + * Upgrade JS SDK to 5.1.0-rc.1 + * Fix message context menu breaking on invalid m.room.pinned_events event + [\#4133](https://github.com/matrix-org/matrix-react-sdk/pull/4133) + * Update from Weblate + [\#4134](https://github.com/matrix-org/matrix-react-sdk/pull/4134) + * Notify platform of language changes + [\#4121](https://github.com/matrix-org/matrix-react-sdk/pull/4121) + * Handle errors when previewing rooms more safely + [\#4132](https://github.com/matrix-org/matrix-react-sdk/pull/4132) + * Don't try to collapse zero events with a group + [\#4131](https://github.com/matrix-org/matrix-react-sdk/pull/4131) + * Don't print errors when the tab is used with no autocomplete present + [\#4130](https://github.com/matrix-org/matrix-react-sdk/pull/4130) + * Improve UI feedback while waiting for network + [\#4126](https://github.com/matrix-org/matrix-react-sdk/pull/4126) + * Ensure DMs tagged outside of account data work in the invite dialog + [\#4123](https://github.com/matrix-org/matrix-react-sdk/pull/4123) + * Show a warning dialog when user indicates a new session wasn't them + [\#4125](https://github.com/matrix-org/matrix-react-sdk/pull/4125) + * Show cancel events as hidden events if we wouldn't usually render them + [\#4120](https://github.com/matrix-org/matrix-react-sdk/pull/4120) + * Collapsed room list has unaligned room tiles #4030 version 2 + [\#4033](https://github.com/matrix-org/matrix-react-sdk/pull/4033) + * Check for cross-signing homeserver support + [\#4118](https://github.com/matrix-org/matrix-react-sdk/pull/4118) + * Don't leak if show_sas never comes (or already came) + [\#4119](https://github.com/matrix-org/matrix-react-sdk/pull/4119) + * Add verification request viewer in devtools + [\#4106](https://github.com/matrix-org/matrix-react-sdk/pull/4106) + * update phase when request prop changes + [\#4117](https://github.com/matrix-org/matrix-react-sdk/pull/4117) + * Handle file downloading locally in electron rather than sending to browser + [\#4113](https://github.com/matrix-org/matrix-react-sdk/pull/4113) + * Remove unused CIDER setting watcher + [\#4116](https://github.com/matrix-org/matrix-react-sdk/pull/4116) + * Use alt_aliases for pills and autocomplete + [\#4102](https://github.com/matrix-org/matrix-react-sdk/pull/4102) + * Add shortcuts for beginning / end of composer + [\#4108](https://github.com/matrix-org/matrix-react-sdk/pull/4108) + * Update from Weblate + [\#4115](https://github.com/matrix-org/matrix-react-sdk/pull/4115) + * Revert "Fix escaped markdown passing backslashes through" + [\#4114](https://github.com/matrix-org/matrix-react-sdk/pull/4114) + * Fix a couple of React warnings/errors + [\#4112](https://github.com/matrix-org/matrix-react-sdk/pull/4112) + * Fix two big DOM leaks which were locking Chrome solid. + [\#4111](https://github.com/matrix-org/matrix-react-sdk/pull/4111) + * Filter out empty strings when pasting IDs into the invite dialog + [\#4109](https://github.com/matrix-org/matrix-react-sdk/pull/4109) + * Remove buildkite pipeline + [\#4107](https://github.com/matrix-org/matrix-react-sdk/pull/4107) + * Use binary packing for verification QR codes + [\#4091](https://github.com/matrix-org/matrix-react-sdk/pull/4091) + * Fix several small bugs with the invite/DM dialog + [\#4099](https://github.com/matrix-org/matrix-react-sdk/pull/4099) + * ignore e2e tests node_modules during linting + [\#4103](https://github.com/matrix-org/matrix-react-sdk/pull/4103) + * Apply null-guard to room pills for when we can't fetch the room + [\#4104](https://github.com/matrix-org/matrix-react-sdk/pull/4104) + * Fix theme being overridden to light even after login is completed + [\#4105](https://github.com/matrix-org/matrix-react-sdk/pull/4105) + * Fix bug where SSSS could be overwritten if user never cross-signs + [\#4100](https://github.com/matrix-org/matrix-react-sdk/pull/4100) + * Accept canonical alias for pills + [\#4096](https://github.com/matrix-org/matrix-react-sdk/pull/4096) + * Fix: don't advertise ability to scan a QR code for verification + [\#4094](https://github.com/matrix-org/matrix-react-sdk/pull/4094) + * Fixes for printing event indexing stats. + [\#4082](https://github.com/matrix-org/matrix-react-sdk/pull/4082) + * Remove exec so release script continues + [\#4095](https://github.com/matrix-org/matrix-react-sdk/pull/4095) + * Use Persistent Storage where possible + [\#4092](https://github.com/matrix-org/matrix-react-sdk/pull/4092) + * Fix user page (missing null check) + [\#4088](https://github.com/matrix-org/matrix-react-sdk/pull/4088) + * Cancel verification request on dialog close + [\#4081](https://github.com/matrix-org/matrix-react-sdk/pull/4081) + * Fix various memory leaks due to method re-binding + [\#4093](https://github.com/matrix-org/matrix-react-sdk/pull/4093) + * Fix share message context menu option keyboard a11y + [\#4073](https://github.com/matrix-org/matrix-react-sdk/pull/4073) + Changes in [2.1.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.1.1) (2020-02-19) =================================================================================================== [Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.1.0...v2.1.1) From c7246f8eabd55f8e2c98bd3ebc7d1c85b21fbb31 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 26 Feb 2020 14:29:31 +0000 Subject: [PATCH 050/522] v2.2.0-rc.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c18d9119e..db877edc8c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-react-sdk", - "version": "2.1.1", + "version": "2.2.0-rc.1", "description": "SDK for matrix.org using React", "author": "matrix.org", "repository": { From c8493d5b08242dfe469b6b5d80cdac7dd5f5b6e0 Mon Sep 17 00:00:00 2001 From: Ben Bucksch Date: Wed, 26 Feb 2020 15:29:51 +0100 Subject: [PATCH 051/522] Solve fixed-width digits display in flowed text Noto Color Emoji contains digits, in fixed-width, therefore causing digits in flowed text to stand out. Fixes: https://github.com/vector-im/riot-web/issues/12504 Signed-off-by: Ben Bucksch --- res/themes/light/css/_light.scss | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/res/themes/light/css/_light.scss b/res/themes/light/css/_light.scss index c868c81549..626ccb2e13 100644 --- a/res/themes/light/css/_light.scss +++ b/res/themes/light/css/_light.scss @@ -5,9 +5,12 @@ Arial empirically gets it right, hence prioritising Arial here. */ /* We fall through to Twemoji for emoji rather than falling through to native Emoji fonts (if any) to ensure cross-browser consistency */ -$font-family: Nunito, Twemoji, 'Apple Color Emoji', 'Segoe UI Emoji', 'Noto Color Emoji', Arial, Helvetica, Sans-Serif; +/* Noto Color Emoji contains digits, in fixed-width, therefore causing + digits in flowed text to stand out. + TODO: Consider putting all emoji fonts to the end rather than the front. */ +$font-family: Nunito, Twemoji, 'Apple Color Emoji', 'Segoe UI Emoji', Arial, Helvetica, Sans-Serif, 'Noto Color Emoji'; -$monospace-font-family: Inconsolata, Twemoji, 'Apple Color Emoji', 'Segoe UI Emoji', 'Noto Color Emoji', Courier, monospace; +$monospace-font-family: Inconsolata, Twemoji, 'Apple Color Emoji', 'Segoe UI Emoji', Courier, monospace, 'Noto Color Emoji'; // unified palette // try to use these colors when possible From 65e002cfe90875db40c531e1349b3d10d7792240 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Wed, 26 Feb 2020 15:03:24 +0000 Subject: [PATCH 052/522] Upgrade deps --- yarn.lock | 2619 +++++++++++++++++++++++++---------------------------- 1 file changed, 1244 insertions(+), 1375 deletions(-) diff --git a/yarn.lock b/yarn.lock index d57ecfbeb9..1dbcc91288 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,9 +3,9 @@ "@babel/cli@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.7.5.tgz#25702cc65418efc06989af3727897b9f4c8690b6" - integrity sha512-y2YrMGXM3NUyu1Myg0pxg+Lx6g8XhEyvLHYNRwTBV6fDek3H7Io6b7N/LXscLs4HWn4HxMdy7f2rM1rTMp2mFg== + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.8.4.tgz#505fb053721a98777b2b175323ea4f090b7d3c1c" + integrity sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" @@ -18,198 +18,162 @@ optionalDependencies: chokidar "^2.1.8" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== dependencies: - "@babel/highlight" "^7.0.0" + "@babel/highlight" "^7.8.3" -"@babel/core@>=7.2.2": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.4.tgz#37e864532200cb6b50ee9a4045f5f817840166ab" - integrity sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ== +"@babel/compat-data@^7.8.4": + version "7.8.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.5.tgz#d28ce872778c23551cbb9432fc68d28495b613b9" + integrity sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg== dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.4" - "@babel/helpers" "^7.7.4" - "@babel/parser" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" + browserslist "^4.8.5" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@>=7.2.2", "@babel/core@^7.1.0", "@babel/core@^7.7.5": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" + integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.4" + "@babel/helpers" "^7.8.4" + "@babel/parser" "^7.8.4" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.4" + "@babel/types" "^7.8.3" convert-source-map "^1.7.0" debug "^4.1.0" + gensync "^1.0.0-beta.1" json5 "^2.1.0" lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.7.tgz#ee155d2e12300bcc0cff6a8ad46f2af5063803e9" - integrity sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ== +"@babel/generator@^7.4.0", "@babel/generator@^7.8.3", "@babel/generator@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" + integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.7" - "@babel/helpers" "^7.7.4" - "@babel/parser" "^7.7.7" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - convert-source-map "^1.7.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.5.tgz#ae1323cd035b5160293307f50647e83f8ba62f7e" - integrity sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.4" - "@babel/helpers" "^7.7.4" - "@babel/parser" "^7.7.5" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - convert-source-map "^1.7.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.4.0", "@babel/generator@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.7.tgz#859ac733c44c74148e1a72980a64ec84b85f4f45" - integrity sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ== - dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.8.3" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" -"@babel/generator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369" - integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg== +"@babel/helper-annotate-as-pure@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" + integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== dependencies: - "@babel/types" "^7.7.4" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" + "@babel/types" "^7.8.3" -"@babel/helper-annotate-as-pure@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" - integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" + integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== dependencies: - "@babel/types" "^7.7.4" + "@babel/helper-explode-assignable-expression" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" - integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== +"@babel/helper-builder-react-jsx@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz#dee98d7d79cc1f003d80b76fe01c7f8945665ff6" + integrity sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ== dependencies: - "@babel/helper-explode-assignable-expression" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-builder-react-jsx@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.4.tgz#da188d247508b65375b2c30cf59de187be6b0c66" - integrity sha512-kvbfHJNN9dg4rkEM4xn1s8d1/h6TYNvajy9L1wx4qLn9HFg0IkTsQi4rfBe92nxrPUFcMsHoMV+8rU7MJb3fCA== - dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.8.3" esutils "^2.0.0" -"@babel/helper-call-delegate@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" - integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== +"@babel/helper-call-delegate@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692" + integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A== dependencies: - "@babel/helper-hoist-variables" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-create-class-features-plugin@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" - integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA== +"@babel/helper-compilation-targets@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz#03d7ecd454b7ebe19a254f76617e61770aed2c88" + integrity sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg== dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-member-expression-to-functions" "^7.7.4" - "@babel/helper-optimise-call-expression" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/compat-data" "^7.8.4" + browserslist "^4.8.5" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" -"@babel/helper-create-regexp-features-plugin@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" - integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== +"@babel/helper-create-class-features-plugin@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz#5b94be88c255f140fd2c10dd151e7f98f4bff397" + integrity sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA== dependencies: - "@babel/helper-regex" "^7.4.4" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + +"@babel/helper-create-regexp-features-plugin@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" + integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q== + dependencies: + "@babel/helper-regex" "^7.8.3" regexpu-core "^4.6.0" -"@babel/helper-define-map@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" - integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== +"@babel/helper-define-map@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" + integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/helper-function-name" "^7.8.3" + "@babel/types" "^7.8.3" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" - integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== +"@babel/helper-explode-assignable-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" + integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== dependencies: - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-function-name@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" - integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== +"@babel/helper-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== dependencies: - "@babel/helper-get-function-arity" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-get-function-arity@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" - integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.8.3" -"@babel/helper-hoist-variables@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" - integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== +"@babel/helper-hoist-variables@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" + integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.8.3" -"@babel/helper-member-expression-to-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" - integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== dependencies: - "@babel/types" "^7.7.4" - -"@babel/helper-module-imports@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" - integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== - dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.8.3" "@babel/helper-module-imports@^7.8.3": version "7.8.3" @@ -218,534 +182,550 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-module-transforms@^7.7.4", "@babel/helper-module-transforms@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz#d044da7ffd91ec967db25cd6748f704b6b244835" - integrity sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw== +"@babel/helper-module-transforms@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590" + integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q== dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-simple-access" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" - integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.8.3" -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== - -"@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== -"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" - integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== +"@babel/helper-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" + integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" - integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== +"@babel/helper-remap-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" + integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== dependencies: - "@babel/helper-annotate-as-pure" "^7.7.4" - "@babel/helper-wrap-function" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-wrap-function" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-replace-supers@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" - integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== +"@babel/helper-replace-supers@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc" + integrity sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.7.4" - "@babel/helper-optimise-call-expression" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-simple-access@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" - integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== dependencies: - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-split-export-declaration@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" - integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.8.3" -"@babel/helper-wrap-function@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" - integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== +"@babel/helper-wrap-function@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" + integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/helper-function-name" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helpers@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" - integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== +"@babel/helpers@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" + integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== dependencies: - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.4" + "@babel/types" "^7.8.3" -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== +"@babel/highlight@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" + integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.4.tgz#75ab2d7110c2cf2fa949959afb05fa346d2231bb" - integrity sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g== +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" + integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.7.tgz#1b886595419cf92d811316d5b715a53ff38b4937" - integrity sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw== - -"@babel/parser@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.5.tgz#cbf45321619ac12d83363fcf9c94bb67fa646d71" - integrity sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig== - -"@babel/plugin-proposal-async-generator-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" - integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== +"@babel/plugin-proposal-async-generator-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" + integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.4" - "@babel/plugin-syntax-async-generators" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" "@babel/plugin-proposal-class-properties@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" - integrity sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" + integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-proposal-decorators@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.7.4.tgz#58c1e21d21ea12f9f5f0a757e46e687b94a7ab2b" - integrity sha512-GftcVDcLCwVdzKmwOBDjATd548+IE+mBo7ttgatqNDR7VG7GqIuZPtRWlMLHbhTXhcnFZiGER8iIYl1n/imtsg== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e" + integrity sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w== dependencies: - "@babel/helper-create-class-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-decorators" "^7.7.4" + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-decorators" "^7.8.3" -"@babel/plugin-proposal-dynamic-import@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" - integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== +"@babel/plugin-proposal-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" + integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-proposal-export-default-from@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.7.4.tgz#890de3c0c475374638292df31f6582160b54d639" - integrity sha512-1t6dh7BHYUz4zD1m4pozYYEZy/3m8dgOr9owx3r0mPPI3iGKRUKUbIxfYmcJ4hwljs/dhd0qOTr1ZDUp43ix+w== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.8.3.tgz#4cb7c2fdeaed490b60d9bfd3dc8a20f81f9c2e7c" + integrity sha512-PYtv2S2OdCdp7GSPDg5ndGZFm9DmWFvuLoS5nBxZCgOBggluLnhTScspJxng96alHQzPyrrHxvC9/w4bFuspeA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-export-default-from" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-export-default-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" - integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== +"@babel/plugin-proposal-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" + integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" + integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" "@babel/plugin-proposal-numeric-separator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.7.4.tgz#7819a17445f4197bb9575e5750ed349776da858a" - integrity sha512-CG605v7lLpVgVldSY6kxsN9ui1DxFOyepBfuX2AzU2TNriMAYApoU55mrGw9Jr4TlrTzPCG10CL8YXyi+E/iPw== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" + integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-numeric-separator" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" -"@babel/plugin-proposal-object-rest-spread@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71" - integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ== +"@babel/plugin-proposal-object-rest-spread@^7.7.4", "@babel/plugin-proposal-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" + integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" -"@babel/plugin-proposal-optional-catch-binding@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" - integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== +"@babel/plugin-proposal-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" + integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz#7c239ccaf09470dbe1d453d50057460e84517ebb" - integrity sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA== +"@babel/plugin-proposal-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" + integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-syntax-async-generators@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" - integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== +"@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz#b646c3adea5f98800c9ab45105ac34d06cd4a47f" + integrity sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-decorators@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.7.4.tgz#3c91cfee2a111663ff3ac21b851140f5a52a4e0b" - integrity sha512-0oNLWNH4k5ZbBVfAwiTU53rKFWIeTh6ZlaWOXWJc4ywxs0tjz5fc3uZ6jKAnZSxN98eXVgg7bJIuzjX+3SXY+A== +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-dynamic-import@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" - integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== +"@babel/plugin-syntax-decorators@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda" + integrity sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-export-default-from@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.7.4.tgz#897f05808298060b52873fa804ff853540790ea1" - integrity sha512-j888jpjATLEzOWhKawq46UrpXnCRDbdhBd5io4jgwjJ3+CHHGCRb6PNAVEgs+BXIb+dNRAmnkv36zfB992PRVw== +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-flow@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.7.4.tgz#6d91b59e1a0e4c17f36af2e10dd64ef220919d7b" - integrity sha512-2AMAWl5PsmM5KPkB22cvOkUyWk6MjUaqhHNU5nSPUl/ns3j5qLfw2SuYP5RbVZ0tfLvePr4zUScbICtDP2CUNw== +"@babel/plugin-syntax-export-default-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.8.3.tgz#f1e55ce850091442af4ba9c2550106035b29d678" + integrity sha512-a1qnnsr73KLNIQcQlcQ4ZHxqqfBKM6iNQZW2OMTyxNbA2WC7SHWHtGVpFzWtQAuS2pspkWVzdEBXXx8Ik0Za4w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-json-strings@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" - integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== +"@babel/plugin-syntax-flow@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz#f2c883bd61a6316f2c89380ae5122f923ba4527f" + integrity sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-jsx@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz#dab2b56a36fb6c3c222a1fbc71f7bf97f327a9ec" - integrity sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg== +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.7.4.tgz#39818f8042a09d4c6248d85d82555369da4da5c4" - integrity sha512-vmlUUBlLuFnbpaR+1kKIdo62xQEN+THWbtAHSEilo+0rHl2dKKCn6GLUVKpI848wL/T0ZPQgAy8asRJ9yYEjog== +"@babel/plugin-syntax-jsx@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" + integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" - integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" - integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" + integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-top-level-await@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" - integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-typescript@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz#5d037ffa10f3b25a16f32570ebbe7a8c2efa304b" - integrity sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ== +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-arrow-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" - integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-async-to-generator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" - integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" + integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-block-scoped-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" - integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== +"@babel/plugin-syntax-typescript@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc" + integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-block-scoping@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" - integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== +"@babel/plugin-transform-arrow-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" + integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" + integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + +"@babel/plugin-transform-block-scoped-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" + integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-block-scoping@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" + integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" - integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== +"@babel/plugin-transform-classes@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8" + integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w== dependencies: - "@babel/helper-annotate-as-pure" "^7.7.4" - "@babel/helper-define-map" "^7.7.4" - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-optimise-call-expression" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-define-map" "^7.8.3" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" - integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== +"@babel/plugin-transform-computed-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" + integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-destructuring@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" - integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== +"@babel/plugin-transform-destructuring@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b" + integrity sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-dotall-regex@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz#f7ccda61118c5b7a2599a72d5e3210884a021e96" - integrity sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw== +"@babel/plugin-transform-dotall-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" + integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-duplicate-keys@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" - integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== +"@babel/plugin-transform-duplicate-keys@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" + integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" - integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== +"@babel/plugin-transform-exponentiation-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" + integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-flow-comments@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-comments/-/plugin-transform-flow-comments-7.7.4.tgz#663be88fc101b982975bdac4eefc15ba475b3368" - integrity sha512-e3nHGPo/wQcQMmNAHyqaM3Cl8dNKLognPi1RPmObnuVwyI6gHAQJtW6sg5HiNP4LBGRlPW8Npihm0/EzS/1Pzw== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-comments/-/plugin-transform-flow-comments-7.8.3.tgz#0a7e6c49224ac24271e4da25774da0600605ef2c" + integrity sha512-SEmbGPsaUig0x3QkB/Nai3Snk1sRxODBN2EGjdQqgBb5TMcbEejV2TtMGi2XiLmw9Cy/BvJX7CAnfJMctuyglg== dependencies: - "@babel/generator" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.7.4" + "@babel/generator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-flow" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.7.4.tgz#cc73f85944782df1d77d80977bc097920a8bf31a" - integrity sha512-w9dRNlHY5ElNimyMYy0oQowvQpwt/PRHI0QS98ZJCTZU2bvSnKXo5zEiD5u76FBPigTm8TkqzmnUTg16T7qbkA== +"@babel/plugin-transform-flow-strip-types@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.8.3.tgz#da705a655466b2a9b36046b57bf0cbcd53551bd4" + integrity sha512-g/6WTWG/xbdd2exBBzMfygjX/zw4eyNC4X8pRaq7aRHRoDUCzAIu3kGYIXviOv8BjCuWm8vDBwjHcjiRNgXrPA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-flow" "^7.8.3" -"@babel/plugin-transform-for-of@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" - integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== +"@babel/plugin-transform-for-of@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz#6fe8eae5d6875086ee185dd0b098a8513783b47d" + integrity sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-function-name@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" - integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== +"@babel/plugin-transform-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" + integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-literals@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" - integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== +"@babel/plugin-transform-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" + integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-member-expression-literals@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" - integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== +"@babel/plugin-transform-member-expression-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" + integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-modules-amd@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz#39e0fb717224b59475b306402bb8eedab01e729c" - integrity sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ== +"@babel/plugin-transform-modules-amd@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" + integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== dependencies: - "@babel/helper-module-transforms" "^7.7.5" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz#1d27f5eb0bcf7543e774950e5b2fa782e637b345" - integrity sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q== +"@babel/plugin-transform-modules-commonjs@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" + integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== dependencies: - "@babel/helper-module-transforms" "^7.7.5" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.7.4" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-systemjs@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" - integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== +"@babel/plugin-transform-modules-systemjs@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" + integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== dependencies: - "@babel/helper-hoist-variables" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-umd@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" - integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== +"@babel/plugin-transform-modules-umd@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" + integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== dependencies: - "@babel/helper-module-transforms" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" - integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" + integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" -"@babel/plugin-transform-new-target@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" - integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== +"@babel/plugin-transform-new-target@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" + integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-object-super@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" - integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== +"@babel/plugin-transform-object-super@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" + integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" -"@babel/plugin-transform-parameters@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz#da4555c97f39b51ac089d31c7380f03bca4075ce" - integrity sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw== +"@babel/plugin-transform-parameters@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz#1d5155de0b65db0ccf9971165745d3bb990d77d3" + integrity sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA== dependencies: - "@babel/helper-call-delegate" "^7.7.4" - "@babel/helper-get-function-arity" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-call-delegate" "^7.8.3" + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-property-literals@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" - integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== +"@babel/plugin-transform-property-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" + integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-react-display-name@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.7.4.tgz#9f2b80b14ebc97eef4a9b29b612c58ed9c0d10dd" - integrity sha512-sBbIvqYkthai0X0vkD2xsAwluBp+LtNHH+/V4a5ydifmTtb8KOVOlrMIk/MYmIc4uTYDnjZUHQildYNo36SRJw== +"@babel/plugin-transform-react-display-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" + integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-react-jsx-self@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.7.4.tgz#81b8fbfd14b2215e8f1c2c3adfba266127b0231c" - integrity sha512-PWYjSfqrO273mc1pKCRTIJXyqfc9vWYBax88yIhQb+bpw3XChVC7VWS4VwRVs63wFHKxizvGSd00XEr+YB9Q2A== +"@babel/plugin-transform-react-jsx-self@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz#c4f178b2aa588ecfa8d077ea80d4194ee77ed702" + integrity sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-react-jsx-source@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.7.4.tgz#8994b1bf6014b133f5a46d3b7d1ee5f5e3e72c10" - integrity sha512-5ZU9FnPhqtHsOXxutRtXZAzoEJwDaP32QcobbMP1/qt7NYcsCNK8XgzJcJfoEr/ZnzVvUNInNjIW22Z6I8p9mg== +"@babel/plugin-transform-react-jsx-source@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz#951e75a8af47f9f120db731be095d2b2c34920e0" + integrity sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-react-jsx@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.4.tgz#d91205717fae4e2f84d020cd3057ec02a10f11da" - integrity sha512-LixU4BS95ZTEAZdPaIuyg/k8FiiqN9laQ0dMHB4MlpydHY53uQdWCUrwjLr5o6ilS6fAgZey4Q14XBjl5tL6xw== +"@babel/plugin-transform-react-jsx@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz#4220349c0390fdefa505365f68c103562ab2fc4a" + integrity sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g== dependencies: - "@babel/helper-builder-react-jsx" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.7.4" + "@babel/helper-builder-react-jsx" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-regenerator@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz#3a8757ee1a2780f390e89f246065ecf59c26fce9" - integrity sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw== +"@babel/plugin-transform-regenerator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8" + integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA== dependencies: regenerator-transform "^0.14.0" -"@babel/plugin-transform-reserved-words@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" - integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== +"@babel/plugin-transform-reserved-words@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" + integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-runtime@^7.8.3": version "7.8.3" @@ -757,148 +737,154 @@ resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" - integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== +"@babel/plugin-transform-shorthand-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" + integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-spread@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" - integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== +"@babel/plugin-transform-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" + integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-sticky-regex@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" - integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== +"@babel/plugin-transform-sticky-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" + integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-regex" "^7.8.3" -"@babel/plugin-transform-template-literals@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" - integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== +"@babel/plugin-transform-template-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" + integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-typeof-symbol@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" - integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== +"@babel/plugin-transform-typeof-symbol@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" + integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-typescript@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz#2974fd05f4e85c695acaf497f432342de9fc0636" - integrity sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg== +"@babel/plugin-transform-typescript@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.3.tgz#be6f01a7ef423be68e65ace1f04fc407e6d88917" + integrity sha512-Ebj230AxcrKGZPKIp4g4TdQLrqX95TobLUWKd/CwG7X1XHUH1ZpkpFvXuXqWbtGRWb7uuEWNlrl681wsOArAdQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.7.4" + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-typescript" "^7.8.3" -"@babel/plugin-transform-unicode-regex@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" - integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== +"@babel/plugin-transform-unicode-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" + integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" "@babel/preset-env@^7.7.6": - version "7.7.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.6.tgz#39ac600427bbb94eec6b27953f1dfa1d64d457b2" - integrity sha512-k5hO17iF/Q7tR9Jv8PdNBZWYW6RofxhnxKjBMc0nG4JTaWvOTiPoO/RLFwAKcA4FpmuBFm6jkoqaRJLGi0zdaQ== + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.4.tgz#9dac6df5f423015d3d49b6e9e5fa3413e4a72c4e" + integrity sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w== dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.7.4" - "@babel/plugin-proposal-dynamic-import" "^7.7.4" - "@babel/plugin-proposal-json-strings" "^7.7.4" - "@babel/plugin-proposal-object-rest-spread" "^7.7.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" - "@babel/plugin-syntax-async-generators" "^7.7.4" - "@babel/plugin-syntax-dynamic-import" "^7.7.4" - "@babel/plugin-syntax-json-strings" "^7.7.4" - "@babel/plugin-syntax-object-rest-spread" "^7.7.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" - "@babel/plugin-syntax-top-level-await" "^7.7.4" - "@babel/plugin-transform-arrow-functions" "^7.7.4" - "@babel/plugin-transform-async-to-generator" "^7.7.4" - "@babel/plugin-transform-block-scoped-functions" "^7.7.4" - "@babel/plugin-transform-block-scoping" "^7.7.4" - "@babel/plugin-transform-classes" "^7.7.4" - "@babel/plugin-transform-computed-properties" "^7.7.4" - "@babel/plugin-transform-destructuring" "^7.7.4" - "@babel/plugin-transform-dotall-regex" "^7.7.4" - "@babel/plugin-transform-duplicate-keys" "^7.7.4" - "@babel/plugin-transform-exponentiation-operator" "^7.7.4" - "@babel/plugin-transform-for-of" "^7.7.4" - "@babel/plugin-transform-function-name" "^7.7.4" - "@babel/plugin-transform-literals" "^7.7.4" - "@babel/plugin-transform-member-expression-literals" "^7.7.4" - "@babel/plugin-transform-modules-amd" "^7.7.5" - "@babel/plugin-transform-modules-commonjs" "^7.7.5" - "@babel/plugin-transform-modules-systemjs" "^7.7.4" - "@babel/plugin-transform-modules-umd" "^7.7.4" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" - "@babel/plugin-transform-new-target" "^7.7.4" - "@babel/plugin-transform-object-super" "^7.7.4" - "@babel/plugin-transform-parameters" "^7.7.4" - "@babel/plugin-transform-property-literals" "^7.7.4" - "@babel/plugin-transform-regenerator" "^7.7.5" - "@babel/plugin-transform-reserved-words" "^7.7.4" - "@babel/plugin-transform-shorthand-properties" "^7.7.4" - "@babel/plugin-transform-spread" "^7.7.4" - "@babel/plugin-transform-sticky-regex" "^7.7.4" - "@babel/plugin-transform-template-literals" "^7.7.4" - "@babel/plugin-transform-typeof-symbol" "^7.7.4" - "@babel/plugin-transform-unicode-regex" "^7.7.4" - "@babel/types" "^7.7.4" - browserslist "^4.6.0" - core-js-compat "^3.4.7" + "@babel/compat-data" "^7.8.4" + "@babel/helper-compilation-targets" "^7.8.4" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.8.3" + "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-async-to-generator" "^7.8.3" + "@babel/plugin-transform-block-scoped-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.8.3" + "@babel/plugin-transform-computed-properties" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.8.3" + "@babel/plugin-transform-dotall-regex" "^7.8.3" + "@babel/plugin-transform-duplicate-keys" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.8.4" + "@babel/plugin-transform-function-name" "^7.8.3" + "@babel/plugin-transform-literals" "^7.8.3" + "@babel/plugin-transform-member-expression-literals" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.8.3" + "@babel/plugin-transform-modules-commonjs" "^7.8.3" + "@babel/plugin-transform-modules-systemjs" "^7.8.3" + "@babel/plugin-transform-modules-umd" "^7.8.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.8.3" + "@babel/plugin-transform-object-super" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.8.4" + "@babel/plugin-transform-property-literals" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.3" + "@babel/plugin-transform-reserved-words" "^7.8.3" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-sticky-regex" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.4" + "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/types" "^7.8.3" + browserslist "^4.8.5" + core-js-compat "^3.6.2" invariant "^2.2.2" - js-levenshtein "^1.1.3" + levenary "^1.1.1" semver "^5.5.0" "@babel/preset-flow@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.7.4.tgz#99c1349b6fd7132783196de181e6b32d0949427e" - integrity sha512-6LbUqcHD8BcRtXMOp5bc5nJeU8RlKh6q5U8TgZeCrf9ebBdW8Wyy5ujAUnbJfmzQ56Kkq5XtwErC/5+5RHyFYA== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.8.3.tgz#52af74c6a4e80d889bd9436e8e278d0fecac6e18" + integrity sha512-iCXFk+T4demnq+dNLLvlGOgvYF6sPZ/hS1EmswugOqh1Ysp2vuiqJzpgsnp5rW8+6dLJT/0CXDzye28ZH6BAfQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-flow-strip-types" "^7.8.3" "@babel/preset-react@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.4.tgz#3fe2ea698d8fb536d8e7881a592c3c1ee8bf5707" - integrity sha512-j+vZtg0/8pQr1H8wKoaJyGL2IEk3rG/GIvua7Sec7meXVIvGycihlGMx5xcU00kqCJbwzHs18xTu3YfREOqQ+g== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.8.3.tgz#23dc63f1b5b0751283e04252e78cf1d6589273d2" + integrity sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.7.4" - "@babel/plugin-transform-react-jsx" "^7.7.4" - "@babel/plugin-transform-react-jsx-self" "^7.7.4" - "@babel/plugin-transform-react-jsx-source" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-react-display-name" "^7.8.3" + "@babel/plugin-transform-react-jsx" "^7.8.3" + "@babel/plugin-transform-react-jsx-self" "^7.8.3" + "@babel/plugin-transform-react-jsx-source" "^7.8.3" "@babel/preset-typescript@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.7.4.tgz#780059a78e6fa7f7a4c87f027292a86b31ce080a" - integrity sha512-rqrjxfdiHPsnuPur0jKrIIGQCIgoTWMTjlbWE69G4QJ6TIOVnnRnIJhUxNTL/VwDmEAVX08Tq3B1nirer5341w== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.8.3.tgz#90af8690121beecd9a75d0cc26c6be39d1595d13" + integrity sha512-qee5LgPGui9zQ0jR1TeU5/fP9L+ovoArklEqY12ek8P/wV5ZeM/VYSQYwICeoT6FfpJTekG9Ilay5PhwsOpMHA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-typescript" "^7.8.3" "@babel/register@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.7.4.tgz#45a4956471a9df3b012b747f5781cc084ee8f128" - integrity sha512-/fmONZqL6ZMl9KJUYajetCrID6m0xmL4odX7v+Xvoxcv0DdbP/oO0TWIeLUCHqczQ6L6njDMqmqHFy2cp3FFsA== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.8.3.tgz#5d5d30cfcc918437535d724b8ac1e4a60c5db1f8" + integrity sha512-t7UqebaWwo9nXWClIPLPloa5pN33A2leVs8Hf0e9g9YwUP8/H9NeR7DJU+4CXo23QtjChQv5a3DjEtT83ih1rg== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.13" @@ -906,61 +892,38 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.0.0": - version "7.7.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f" - integrity sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.8.3": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308" + integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ== dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.1.2": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.4.tgz#b23a856751e4bf099262f867767889c0e3fe175b" - integrity sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/runtime@^7.8.3": +"@babel/template@^7.4.0", "@babel/template@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.3.tgz#0811944f73a6c926bb2ad35e918dcc1bfab279f1" - integrity sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w== + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" + integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== dependencies: - regenerator-runtime "^0.13.2" + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/template@^7.4.0", "@babel/template@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" - integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" + integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" - integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.4" - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - "@babel/parser" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.4" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.8.4" + "@babel/types" "^7.8.3" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" - integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.8.3": +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.7.0", "@babel/types@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== @@ -970,9 +933,9 @@ to-fast-properties "^2.0.0" "@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: exec-sh "^0.3.2" minimist "^1.2.0" @@ -1166,16 +1129,16 @@ webcrypto-core "^1.0.17" "@sinonjs/commons@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.0.tgz#f90ffc52a2e519f018b13b6c4da03cbff36ebed6" - integrity sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg== + version "1.7.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.1.tgz#da5fd19a5f71177a53778073978873964f49acf1" + integrity sha512-Debi3Baff1Qu1Unc3mjJ96MgpbwTn43S1+9yJ0llWygPwDNu2aaWBD6yc9y/Z8XDRNhx7U+u2UDg2OGQXkclUQ== dependencies: type-detect "4.0.8" "@types/babel__core@^7.1.0": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30" - integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA== + version "7.1.6" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.6.tgz#16ff42a5ae203c9af1c6e190ed1f30f83207b610" + integrity sha512-tTnhWszAqvXnhW7m5jQU9PomXSiKXk2sFxpahXvI20SZKu9ylPi8WtIxueZ6ehDWikPT0jeFujMj3X4ZHuf3Tg== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1199,9 +1162,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.8.tgz#479a4ee3e291a403a1096106013ec22cf9b64012" - integrity sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw== + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a" + integrity sha512-jEFQ8L1tuvPjOI8lnpaf73oCJe+aoxL6ygqSy6c8LcW98zaC+4mzWuQIRCEvKeCOu+lbqdXcg4Uqmm1S8AP1tw== dependencies: "@babel/types" "^7.3.0" @@ -1225,9 +1188,9 @@ integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== "@types/istanbul-lib-report@*": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" - integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" @@ -1240,9 +1203,9 @@ "@types/istanbul-lib-report" "*" "@types/json-schema@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" - integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== + version "7.0.4" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" + integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== "@types/minimatch@*": version "3.0.3" @@ -1250,9 +1213,9 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "12.12.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.14.tgz#1c1d6e3c75dba466e0326948d56e8bd72a1903d2" - integrity sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA== + version "13.7.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.6.tgz#cb734a7c191472ae6a2b3a502b4dfffcea974113" + integrity sha512-eyK7MWD0R1HqVTp+PtwRgFeIsemzuj4gBFSQxfPHY5iMjS7474e5wq+VFgTcdpyHeNxyKSaetYAjdMLJlKoWqA== "@types/stack-utils@^1.0.1": version "1.0.1" @@ -1281,36 +1244,36 @@ "@types/vfile-message" "*" "@types/yargs-parser@*": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" - integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^13.0.0": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.5.tgz#18121bfd39dc12f280cee58f92c5b21d32041908" - integrity sha512-CF/+sxTO7FOwbIRL4wMv0ZYLCRfMid2HQpzDRyViH7kSpfoAFiMdGqKIxb1PxWfjtQXQhnQuD33lvRHNwr809Q== + version "13.0.8" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99" + integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/experimental-utils@^2.5.0": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.10.0.tgz#8db1656cdfd3d9dcbdbf360b8274dea76f0b2c2c" - integrity sha512-FZhWq6hWWZBP76aZ7bkrfzTMP31CCefVIImrwP3giPLcoXocmLTmr92NLZxuIcTL4GTEOE33jQMWy9PwelL+yQ== + version "2.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.21.0.tgz#71de390a3ec00b280b69138d80733406e6e86bfa" + integrity sha512-olKw9JP/XUkav4lq0I7S1mhGgONJF9rHNhKFn9wJlpfRVjNo3PPjSvybxEldvCXnvD+WAshSzqH5cEjPp9CsBA== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.10.0" + "@typescript-eslint/typescript-estree" "2.21.0" eslint-scope "^5.0.0" -"@typescript-eslint/typescript-estree@2.10.0": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.10.0.tgz#89cdabd5e8c774e9d590588cb42fb9afd14dcbd9" - integrity sha512-oOYnplddQNm/LGVkqbkAwx4TIBuuZ36cAQq9v3nFIU9FmhemHuVzAesMSXNQDdAzCa5bFgCrfD3JWhYVKlRN2g== +"@typescript-eslint/typescript-estree@2.21.0": + version "2.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.21.0.tgz#7e4be29f2e338195a2e8c818949ed0ff727cc943" + integrity sha512-NC/nogZNb9IK2MEFQqyDBAciOT8Lp8O3KgAfvHx2Skx6WBo+KmDqlU3R9KxHONaijfTIKtojRe3SZQyMjr3wBw== dependencies: debug "^4.1.1" eslint-visitor-keys "^1.1.0" glob "^7.1.6" is-glob "^4.0.1" - lodash.unescape "4.0.1" + lodash "^4.17.15" semver "^6.3.0" tsutils "^3.17.1" @@ -1489,9 +1452,9 @@ acorn-globals@^4.1.0: acorn-walk "^6.0.1" acorn-jsx@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" - integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== acorn-walk@^6.0.1: version "6.2.0" @@ -1556,11 +1519,11 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + version "6.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" + integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== dependencies: - fast-deep-equal "^2.0.1" + fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" @@ -1663,13 +1626,14 @@ array-find-index@^1.0.1: resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= +array-includes@^3.0.3, array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" array-union@^1.0.2: version "1.0.2" @@ -1678,7 +1642,7 @@ array-union@^1.0.2: dependencies: array-uniq "^1.0.1" -array-uniq@^1.0.1, array-uniq@^1.0.2: +array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= @@ -1689,12 +1653,12 @@ array-unique@^0.3.2: integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= array.prototype.find@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.0.tgz#630f2eaf70a39e608ac3573e45cf8ccd0ede9ad7" - integrity sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg== + version "2.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.1.tgz#3baca26108ca7affb08db06bf0be6cb3115a969c" + integrity sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA== dependencies: define-properties "^1.1.3" - es-abstract "^1.13.0" + es-abstract "^1.17.4" array.prototype.flat@^1.2.3: version "1.2.3" @@ -1782,22 +1746,22 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.1: +atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^9.0.0: - version "9.7.3" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.3.tgz#fd42ed03f53de9beb4ca0d61fb4f7268a9bb50b4" - integrity sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q== + version "9.7.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378" + integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g== dependencies: - browserslist "^4.8.0" - caniuse-lite "^1.0.30001012" + browserslist "^4.8.3" + caniuse-lite "^1.0.30001020" chalk "^2.4.2" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.23" + postcss "^7.0.26" postcss-value-parser "^4.0.2" aws-sign2@~0.7.0: @@ -1806,19 +1770,19 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c" - integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A== + version "1.9.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== babel-eslint@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a" - integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA== + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" eslint-visitor-keys "^1.0.0" resolve "^1.12.0" @@ -1876,9 +1840,9 @@ babel-runtime@^6.26.0: regenerator-runtime "^0.11.0" bail@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.4.tgz#7181b66d508aa3055d3f6c13f0a0c720641dde9b" - integrity sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww== + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== balanced-match@^1.0.0: version "1.0.0" @@ -1886,9 +1850,9 @@ balanced-match@^1.0.0: integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base-x@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.7.tgz#1c5a7fafe8f66b4114063e8da102799d4e7c408f" - integrity sha512-zAKJGuQPihXW22fkrfOclUUZXM2g92z5GzlSMHxhO6r6Qj+Nm0ccaGNBzDZojzwOMkpjAv4J0fOv1U4go+a4iw== + version "3.0.8" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" + integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== dependencies: safe-buffer "^5.0.1" @@ -1932,15 +1896,22 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + bluebird@^3.5.0, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== blueimp-canvas-to-blob@^3.5.0: - version "3.16.0" - resolved "https://registry.yarnpkg.com/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.16.0.tgz#eb5932207f9bf23558c8bc2fbcdc5ca2cca35c36" - integrity sha512-r5TRlxH5Y0iKrRajCfiW1K4o2U1JniarjLXuNJrC5nnlWV/UopieF8sysw9pAYBauxg2I3Ah1hUp3NEuinwmkA== + version "3.17.0" + resolved "https://registry.yarnpkg.com/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.17.0.tgz#d796e72aa1fd37f9471e0396e64d323956564a23" + integrity sha512-LcuVZZtKtE4yUrLb0IQA7ndMm19gooDTrzvjjkvmQ1MhkFlSzTw+8Ftp+/ckfGeP2UDQvDsPyy8mIT69itAqbg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" @@ -2069,23 +2040,14 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.6.0, browserslist@^4.8.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.2.tgz#b45720ad5fbc8713b7253c20766f701c9a694289" - integrity sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA== +browserslist@^4.8.3, browserslist@^4.8.5: + version "4.8.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.7.tgz#ec8301ff415e6a42c949d0e66b405eb539c532d0" + integrity sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA== dependencies: - caniuse-lite "^1.0.30001015" - electron-to-chromium "^1.3.322" - node-releases "^1.1.42" - -browserslist@^4.8.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.0.tgz#6f06b0f974a7cc3a84babc2ccc56493668e3c789" - integrity sha512-HYnxc/oLRWvJ3TsGegR0SRL/UDnknGq2s/a8dYYEO+kOQ9m9apKoS5oiathLKZdh/e9uE+/J3j92qPlGD/vTqA== - dependencies: - caniuse-lite "^1.0.30001012" - electron-to-chromium "^1.3.317" - node-releases "^1.1.41" + caniuse-lite "^1.0.30001027" + electron-to-chromium "^1.3.349" + node-releases "^1.1.49" bs58@^4.0.1: version "4.0.1" @@ -2240,10 +2202,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001012, caniuse-lite@^1.0.30001015: - version "1.0.30001015" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz#15a7ddf66aba786a71d99626bc8f2b91c6f0f5f0" - integrity sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ== +caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001027: + version "1.0.30001030" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001030.tgz#78076c4c6d67d3e41d6eb9399853fb27fe6e44ee" + integrity sha512-QGK0W4Ft/Ac+zTjEiRJfwDNATvS3fodDczBXrH42784kcfqcDKpEPfN08N0HQjrAp8He/Jw8QiSS9QRn7XAbUw== capture-exit@^2.0.0: version "2.0.0" @@ -2258,9 +2220,9 @@ caseless@~0.12.0: integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= ccount@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.4.tgz#9cf2de494ca84060a2a8d2854edd6dfb0445f386" - integrity sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w== + version "1.0.5" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" + integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw== chain-function@^1.0.0: version "1.0.1" @@ -2277,24 +2239,24 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4. supports-color "^5.3.0" character-entities-html4@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.3.tgz#5ce6e01618e47048ac22f34f7f39db5c6fd679ef" - integrity sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg== + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" + integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g== character-entities-legacy@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4" - integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww== + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== character-entities@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6" - integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w== + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== character-reference-invalid@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85" - integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg== + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== chardet@^0.7.0: version "0.7.0" @@ -2348,9 +2310,9 @@ chokidar@^3.3.1: fsevents "~2.1.2" chownr@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chrome-trace-event@^1.0.2: version "1.0.2" @@ -2436,9 +2398,9 @@ code-point-at@^1.0.0: integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= collapse-white-space@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a" - integrity sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== collection-visit@^1.0.0: version "1.0.0" @@ -2467,15 +2429,15 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.12.1, commander@^2.19.0, commander@^2.20.0, commander@~2.20.3: +commander@^2.12.1, commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.0.1.tgz#b67622721785993182e807f4883633e6401ba53c" - integrity sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA== + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== commondir@^1.0.1: version "1.0.1" @@ -2571,13 +2533,13 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.4.7: - version "3.5.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.5.0.tgz#5a11a619a9e9dd2dcf1c742b2060bc4a2143e5b6" - integrity sha512-E7iJB72svRjJTnm9HDvujzNVMCm3ZcDYEedkJ/sDTNsy/0yooCd9Cg7GSzE7b4e0LfIkjijdB1tqg0pGwxWeWg== +core-js-compat@^3.6.2: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" + integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== dependencies: - browserslist "^4.8.2" - semver "^6.3.0" + browserslist "^4.8.3" + semver "7.0.0" core-js@^1.0.0: version "1.2.7" @@ -2585,9 +2547,9 @@ core-js@^1.0.0: integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= core-js@^2.4.0: - version "2.6.10" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" - integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -2900,9 +2862,9 @@ diff-sequences@^24.9.0: integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== diff@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" - integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== diffie-hellman@^5.0.0: version "5.0.3" @@ -2951,7 +2913,7 @@ dom-helpers@^3.2.0: dependencies: "@babel/runtime" "^7.1.2" -dom-serializer@0: +dom-serializer@0, dom-serializer@^0.2.1: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== @@ -2996,6 +2958,13 @@ domhandler@^2.3.0: dependencies: domelementtype "1" +domhandler@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" + integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== + dependencies: + domelementtype "^2.0.1" + domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -3012,12 +2981,21 @@ domutils@^1.5.1: dom-serializer "0" domelementtype "1" -dot-prop@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +domutils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.0.0.tgz#15b8278e37bfa8468d157478c58c367718133c08" + integrity sha512-n5SelJ1axbO636c2yUtOGia/IcJtVtlhQbFiVDBZHKV5ReJO1ViX7sFEemtuyoAnBxk5meNSYgA8V4s0271efg== dependencies: - is-obj "^1.0.0" + dom-serializer "^0.2.1" + domelementtype "^2.0.1" + domhandler "^3.0.0" + +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + dependencies: + is-obj "^2.0.0" duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" @@ -3037,10 +3015,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.317, electron-to-chromium@^1.3.322: - version "1.3.322" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" - integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== +electron-to-chromium@^1.3.349: + version "1.3.361" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.361.tgz#a820bf52da171c0024314745462cfe0dc944373e" + integrity sha512-OzSVjWpsRhJyr9PSAXkeloSe6e9viU2ToGt1wXlXFsGcxuI9vlsnalL+V/AM59Z2pEo3wRxIddtOGsT7Y6x/sQ== elliptic@^6.0.0: version "6.5.2" @@ -3066,20 +3044,25 @@ emoji-regex@^8.0.0: integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emojibase-data@^4.0.2: - version "4.1.0" - resolved "https://registry.yarnpkg.com/emojibase-data/-/emojibase-data-4.1.0.tgz#7fb1ddea4f1750d7f156ff4ed5ed58ac474874eb" - integrity sha512-9x59OnrGpX1TgOk5DvePw3D70kVCisgRauazHnXFhLKlgR35CEgRTOoD1vOX12zMBdwKDyX3MmAU7YQmR/lA4w== + version "4.2.1" + resolved "https://registry.yarnpkg.com/emojibase-data/-/emojibase-data-4.2.1.tgz#3d1f0c69ddbb2ca7b7014f5e34654190802a40df" + integrity sha512-O0vxoPMgVkRq/uII/gdAjz9RwNv6ClJrd3J9QCCRC4btZRmeut/qohC/Fi+NNXUcjY08RWNTvxSnq/vij8hvrw== emojibase-regex@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/emojibase-regex/-/emojibase-regex-3.1.0.tgz#7ba60828618efddee6cf782231a99a860e522b98" - integrity sha512-Ylnk6lMrqbNCOR40N8ix3Mi+J0GT1wu7vnsOjd4YhY6HyLmG8seOD1m/dZBls/dH+OKPVmcSaOc5GCq5IH7BTw== + version "3.2.1" + resolved "https://registry.yarnpkg.com/emojibase-regex/-/emojibase-regex-3.2.1.tgz#122935958c9a49c96bb29ac69ccbbac0b2e7022d" + integrity sha512-VAX2Rc2U/alu5q6P2cET2alzC63o1Uarm6Ea/b3ab+KOzxZT4JKmB0tCU1sTZvfNKa16KMLCK2k7hJBHJq4vWQ== emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -3204,26 +3187,10 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.12.0, es-abstract@^1.15.0, es-abstract@^1.16.2, es-abstract@^1.7.0: - version "1.16.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.2.tgz#4e874331645e9925edef141e74fc4bd144669d34" - integrity sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-inspect "^1.7.0" - object-keys "^1.1.1" - string.prototype.trimleft "^2.1.0" - string.prototype.trimright "^2.1.0" - -es-abstract@^1.13.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0.tgz#f42a517d0036a5591dbb2c463591dc8bb50309b1" - integrity sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug== +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4: + version "1.17.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" + integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" @@ -3237,34 +3204,17 @@ es-abstract@^1.13.0: string.prototype.trimleft "^2.1.1" string.prototype.trimright "^2.1.1" -es-abstract@^1.17.0-next.1: - version "1.17.0-next.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0-next.1.tgz#94acc93e20b05a6e96dacb5ab2f1cb3a81fc2172" - integrity sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimleft "^2.1.0" - string.prototype.trimright "^2.1.0" - es-get-iterator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.0.1.tgz#ebc4d3bbc2d59dd95a0ecef441ca2dbce7d9e2cd" - integrity sha512-pswpctxWRElQDcP0RJy0qmNrpf6nH9SeQl8dra5fFHBPHKfpVIST27Kv4j5enE8JhIssRBI4QPMrNvcyIPhapQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8" + integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ== dependencies: - es-abstract "^1.16.2" + es-abstract "^1.17.4" has-symbols "^1.0.1" is-arguments "^1.0.4" - is-map "^2.0.0" - is-set "^2.0.0" - is-string "^1.0.4" + is-map "^2.0.1" + is-set "^2.0.1" + is-string "^1.0.5" isarray "^2.0.5" es-to-primitive@^1.2.1: @@ -3299,11 +3249,11 @@ escape-string-regexp@^1.0.5: integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.9.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" - integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== + version "1.14.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" + integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== dependencies: - esprima "^3.1.3" + esprima "^4.0.1" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" @@ -3322,11 +3272,6 @@ eslint-plugin-babel@^5.2.1: dependencies: eslint-rule-composer "^0.3.0" -eslint-plugin-eslint-plugin@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-2.1.0.tgz#a7a00f15a886957d855feacaafee264f039e62d5" - integrity sha512-kT3A/ZJftt28gbl/Cv04qezb/NQ1dwYIbi8lyf806XMxkus7DvOVCLIfTXMrorp322Pnoez7+zabXH29tADIDg== - eslint-plugin-flowtype@^2.30.0: version "2.50.3" resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz#61379d6dce1d010370acd6681740fd913d68175f" @@ -3335,32 +3280,32 @@ eslint-plugin-flowtype@^2.30.0: lodash "^4.17.10" eslint-plugin-jest@^23.0.4: - version "23.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.1.1.tgz#1220ab53d5a4bf5c3c4cd07c0dabc6199d4064dd" - integrity sha512-2oPxHKNh4j1zmJ6GaCBuGcb8FVZU7YjFUOJzGOPnl9ic7VA/MGAskArLJiRIlnFUmi1EUxY+UiATAy8dv8s5JA== + version "23.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.8.0.tgz#c978f959fa8395801742d13c5a3125a986d2661e" + integrity sha512-DKXmLxguZ1Lru4u5YM12ko3WLq6gqo7dhV2b63K731+/PNyZ/Ff6NGONQsGUtPLG9zU3kdz/N+2LTbweNZifeg== dependencies: "@typescript-eslint/experimental-utils" "^2.5.0" eslint-plugin-react-hooks@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.3.0.tgz#53e073961f1f5ccf8dd19558036c1fac8c29d99a" - integrity sha512-gLKCa52G4ee7uXzdLiorca7JIQZPPXRAQDXV83J4bUEeUuc5pIEyZYAZ45Xnxe5IuupxEqHS+hUhSLIimK1EMw== + version "2.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.4.0.tgz#db6ee1cc953e3a217035da3d4e9d4356d3c672a4" + integrity sha512-bH5DOCP6WpuOqNaux2BlaDCrSgv8s5BitP90bTgtZ1ZsRn2bdIfeMDY5F2RnJVnyKDy6KRQRDbipPLZ1y77QtQ== eslint-plugin-react@^7.7.0: - version "7.17.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.17.0.tgz#a31b3e134b76046abe3cd278e7482bd35a1d12d7" - integrity sha512-ODB7yg6lxhBVMeiH1c7E95FLD4E/TwmFjltiU+ethv7KPdCwgiFuOZg9zNRHyufStTDLl/dEFqI2Q1VPmCd78A== + version "7.18.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.18.3.tgz#8be671b7f6be095098e79d27ac32f9580f599bc8" + integrity sha512-Bt56LNHAQCoou88s8ViKRjMB2+36XRejCQ1VoLj716KI1MoE99HpTVvIThJ0rvFmG4E4Gsq+UgToEjn+j044Bg== dependencies: - array-includes "^3.0.3" + array-includes "^3.1.1" doctrine "^2.1.0" - eslint-plugin-eslint-plugin "^2.1.0" has "^1.0.3" jsx-ast-utils "^2.2.3" - object.entries "^1.1.0" - object.fromentries "^2.0.1" - object.values "^1.1.0" + object.entries "^1.1.1" + object.fromentries "^2.0.2" + object.values "^1.1.1" prop-types "^15.7.2" - resolve "^1.13.1" + resolve "^1.14.2" + string.prototype.matchall "^4.0.2" eslint-rule-composer@^0.3.0: version "0.3.0" @@ -3446,20 +3391,15 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48" + integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q== dependencies: estraverse "^4.0.0" @@ -3491,9 +3431,9 @@ esutils@^2.0.0, esutils@^2.0.2: integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== events@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" - integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -3638,10 +3578,10 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== fast-glob@^2.2.6: version "2.2.7" @@ -3656,9 +3596,9 @@ fast-glob@^2.2.6: micromatch "^3.1.10" fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@~2.0.6: version "2.0.6" @@ -3740,6 +3680,11 @@ file-saver@^1.3.3: resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-1.3.8.tgz#e68a30c7cb044e2fb362b428469feb291c2e09d8" integrity sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg== +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + filesize@3.5.6: version "3.5.6" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.6.tgz#5fd98f3eac94ec9516ef8ed5782fad84a01a0a1a" @@ -3916,12 +3861,12 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + version "1.2.11" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" + integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== dependencies: + bindings "^1.5.0" nan "^2.12.1" - node-pre-gyp "^0.12.0" fsevents@~2.1.2: version "2.1.2" @@ -3948,9 +3893,9 @@ functional-red-black-tree@^1.0.1: integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= functions-have-names@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.0.tgz#83da7583e4ea0c9ac5ff530f73394b033e0bf77d" - integrity sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ== + version "1.2.1" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.1.tgz#a981ac397fa0c9964551402cdc5533d7a4d52f91" + integrity sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA== fuse.js@^2.2.0: version "2.7.4" @@ -3975,6 +3920,11 @@ gauge@~2.7.3: version "1.4.3" resolved "https://codeload.github.com/matrix-org/gemini-scrollbar/tar.gz/91e1e566fa33324188f278801baf4a79f9f554ab" +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -4139,23 +4089,12 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.1.2: - version "4.6.0" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.6.0.tgz#33af6c3eda930d7a924f5d8f1c6d8edc3180512e" - integrity sha512-i1ZUP7Qp2JdkMaFon2a+b0m5geE8Z4ZTLaGkgrObkEd+OkUKyRbRWw4KxuFCoHfdETSY1yf9/574eVoNSiK7pw== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0: +har-validator@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== @@ -4238,9 +4177,9 @@ hash.js@^1.0.0, hash.js@^1.0.3: minimalistic-assert "^1.0.1" highlight.js@^9.15.8: - version "9.16.2" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.16.2.tgz#68368d039ffe1c6211bcc07e483daf95de3e403e" - integrity sha512-feMUrVLZvjy0oC7FVJQcSQRqbBq9kwqnYE4+Kj9ZjbHh3g+BisiPgF49NyQbVLNdrL/qqZr3Ca9yOKwgn2i/tw== + version "9.18.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.1.tgz#ed21aa001fe6252bb10a3d76d47573c6539fe13c" + integrity sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg== hmac-drbg@^1.0.0: version "1.0.1" @@ -4252,9 +4191,9 @@ hmac-drbg@^1.0.0: minimalistic-crypto-utils "^1.0.1" hoist-non-react-statics@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f" - integrity sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw== + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" @@ -4273,9 +4212,9 @@ hosted-git-info@3.0.0: lru-cache "^5.1.1" hosted-git-info@^2.1.4: - version "2.8.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" - integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== + version "2.8.6" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.6.tgz#3a6e6d0324c5371fc8c7ba7175e1e5d14578724d" + integrity sha512-Kp6rShEsCHhF5dD3EWKdkgVA8ix90oSUJ0VY4g9goxxa0+f4lx63muTftn0mlJ/+8IESGWyKnP//V2D7S4ZbIQ== html-element-map@^1.2.0: version "1.2.0" @@ -4296,6 +4235,11 @@ html-entities@^1.2.1: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= +html-escaper@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" + integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig== + html-tags@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" @@ -4313,6 +4257,16 @@ htmlparser2@^3.10.0, htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^3.1.1" +htmlparser2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" + http-cache-semantics@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -4456,7 +4410,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4495,6 +4449,15 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + interpret@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" @@ -4537,9 +4500,9 @@ is-accessor-descriptor@^1.0.0: kind-of "^6.0.0" is-alphabetical@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8" - integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== is-alphanumeric@^1.0.0: version "1.0.0" @@ -4547,9 +4510,9 @@ is-alphanumeric@^1.0.0: integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= is-alphanumerical@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c" - integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== dependencies: is-alphabetical "^1.0.0" is-decimal "^1.0.0" @@ -4590,12 +4553,7 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" - integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M= - -is-boolean-object@^1.0.1: +is-boolean-object@^1.0.0, is-boolean-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e" integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ== @@ -4610,12 +4568,7 @@ is-buffer@^2.0.0: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== -is-callable@^1.0.4, is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -is-callable@^1.1.5: +is-callable@^1.0.4, is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== @@ -4642,14 +4595,14 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-decimal@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7" - integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== is-descriptor@^0.1.0: version "0.1.6" @@ -4757,9 +4710,9 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: is-extglob "^2.1.1" is-hexadecimal@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee" - integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== is-ip@^2.0.0: version "2.0.0" @@ -4768,17 +4721,12 @@ is-ip@^2.0.0: dependencies: ip-regex "^2.0.0" -is-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.0.tgz#1d223ada48a1f5fdb7b3c5c21a45b6a4d48aec3c" - integrity sha512-ptj+FffEGJN9hLuakga2S3mYQt5PVN+w7+fL3SAgxKhlCePSt24Q3fiSozhvphbwCQ0+QPA1rJnLSoS2LnbCVw== +is-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" + integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== -is-number-object@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" - integrity sha1-8mWrian0RQNO9q/xWo8AsA9VF5k= - -is-number-object@^1.0.4: +is-number-object@^1.0.3, is-number-object@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== @@ -4795,10 +4743,10 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-plain-obj@^1.1.0: version "1.1.0" @@ -4817,14 +4765,7 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= -is-regex@^1.0.3, is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-regex@^1.0.5: +is-regex@^1.0.3, is-regex@^1.0.4, is-regex@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== @@ -4836,22 +4777,17 @@ is-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-set@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.0.tgz#ae93342b1de5560c720b4b71599abc799d183cf4" - integrity sha512-So5/xwRDzU3X7kOt2vpvrsj/Asx5E7Q5IyX6itksB96FJgyydSe9tFwfCq7IZ8URDS4h45FhNgfENToTgBfmgw== +is-set@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" + integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-string@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" - integrity sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ= - -is-string@^1.0.5: +is-string@^1.0.4, is-string@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== @@ -4878,20 +4814,20 @@ is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-weakmap@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.0.tgz#88bd0b8ec3a5724477637d58ed96cb00552593fd" - integrity sha512-vZKPGTqgcrNWsav9/lvXA4DvZtxqzdkSm624p85UvZV47pk1cvw+JQ5YrZfQ1KqsogYxnIztAtu4WBdPNz/n/w== +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== -is-weakset@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.0.tgz#119577bcf75528e7d5b4c7ebaa4fdee9e2d3e5d7" - integrity sha512-bDiKqyPK2GeWiZNsm1zHf0adJJ2I0gNzwjBxu4iajQPgJH3UZiXTGUPMNmbQ3TIBYPs+tVNpiDSF/eF5U4EF7A== +is-weakset@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.1.tgz#e9a0af88dbd751589f5e50d80f4c98b780884f83" + integrity sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw== is-whitespace-character@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz#b3ad9546d916d7d3ffa78204bca0c26b56257fac" - integrity sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" @@ -4899,9 +4835,9 @@ is-windows@^1.0.1, is-windows@^1.0.2: integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-word-character@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.3.tgz#264d15541cbad0ba833d3992c34e6b40873b08aa" - integrity sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== is-wsl@^1.1.0: version "1.1.0" @@ -4987,11 +4923,11 @@ istanbul-lib-source-maps@^3.0.1: source-map "^0.6.1" istanbul-reports@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" - integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== + version "2.2.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" + integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== dependencies: - handlebars "^4.1.2" + html-escaper "^2.0.0" jest-changed-files@^24.9.0: version "24.9.0" @@ -5347,16 +5283,6 @@ jest@^24.9.0: import-local "^2.0.0" jest-cli "^24.9.0" -jquery@^3.3.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" - integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== - -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -5494,9 +5420,9 @@ kind-of@^5.0.0: integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^3.0.3: version "3.0.3" @@ -5530,6 +5456,13 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -5539,13 +5472,9 @@ levn@^0.3.0, levn@~0.3.0: type-check "~0.3.2" linkifyjs@^2.1.6: - version "2.1.8" - resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-2.1.8.tgz#2bee2272674dc196cce3740b8436c43df2162f9c" - integrity sha512-j3QpiEr4UYzN5foKhrr9Sr06VI9vSlI4HisDWt+7Mq+TWDwpJ6H/LLpogYsXcyUIJLVhGblXXdUnblHsVNMPpg== - optionalDependencies: - jquery "^3.3.1" - react "^16.4.2" - react-dom "^16.4.2" + version "2.1.9" + resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-2.1.9.tgz#af06e45a2866ff06c4766582590d098a4d584702" + integrity sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug== load-json-file@^4.0.0: version "4.0.0" @@ -5562,7 +5491,7 @@ loader-runner@^2.4.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -5571,6 +5500,15 @@ loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2. emojis-list "^2.0.0" json5 "^1.0.1" +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -5619,11 +5557,6 @@ lodash.flattendeep@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= - lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" @@ -5634,11 +5567,6 @@ lodash.isplainobject@^4.0.6: resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= -lodash.isregexp@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isregexp/-/lodash.isregexp-4.0.1.tgz#e13e647b30cd559752a04cd912086faf7da1c30b" - integrity sha1-4T5kezDNVZdSoEzZEghvr32hwws= - lodash.isstring@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" @@ -5654,11 +5582,6 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.unescape@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" - integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= - lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" @@ -5672,9 +5595,9 @@ log-symbols@^2.0.0, log-symbols@^2.2.0: chalk "^2.0.1" loglevel@^1.6.4: - version "1.6.6" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" - integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ== + version "1.6.7" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56" + integrity sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A== lolex@^5.1.2: version "5.1.2" @@ -5684,9 +5607,9 @@ lolex@^5.1.2: "@sinonjs/commons" "^1.7.0" longest-streak@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.3.tgz#3de7a3f47ee18e9074ded8575b5c091f5d0a4105" - integrity sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" @@ -5777,9 +5700,9 @@ map-visit@^1.0.0: object-visit "^1.0.0" markdown-escapes@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5" - integrity sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw== + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== markdown-table@^1.1.0: version "1.1.3" @@ -5787,13 +5710,13 @@ markdown-table@^1.1.0: integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== mathml-tag-names@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz#6dff66c99d55ecf739ca53c492e626f1d12a33cc" - integrity sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw== + version "2.1.3" + resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" + integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== "matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": version "5.0.1" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/a998006842ae558f02819ca84fbaad43685cc10b" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/ce668d051c8866dbfedae4955e9dbf4b6ac7b81d" dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" @@ -5921,17 +5844,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.42.0: - version "1.42.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" - integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== +mime-db@1.43.0: + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.25" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" - integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== dependencies: - mime-db "1.42.0" + mime-db "1.43.0" mimic-fn@^1.0.0: version "1.2.0" @@ -5983,11 +5906,6 @@ minimist@1.2.0, minimist@^1.1.1, minimist@^1.2.0, "minimist@~ 1.2.0": resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -6034,10 +5952,10 @@ mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" -moo@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.4.3.tgz#3f847a26f31cf625a956a87f2b10fbc013bfd10e" - integrity sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw== +moo@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4" + integrity sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w== move-concurrently@^1.0.1: version "1.0.1" @@ -6094,26 +6012,26 @@ natural-compare@^1.4.0: integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= nearley@^2.7.10: - version "2.19.0" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.0.tgz#37717781d0fd0f2bfc95e233ebd75678ca4bda46" - integrity sha512-2v52FTw7RPqieZr3Gth1luAXZR7Je6q3KaDHY5bjl/paDUdMu35fZ8ICNgiYJRr3tf3NMvIQQR1r27AvEr9CRA== + version "2.19.1" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.1.tgz#4af4006e16645ff800e9f993c3af039857d9dbdc" + integrity sha512-xq47GIUGXxU9vQg7g/y1o1xuKnkO7ev4nRWqftmQrLkfnE/FjRqDaGOUakM8XHPn/6pW3bGjU2wgoJyId90rqg== dependencies: commander "^2.19.0" - moo "^0.4.3" + moo "^0.5.0" railroad-diagrams "^1.0.0" randexp "0.4.6" semver "^5.4.1" needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + version "2.3.2" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.2.tgz#3342dea100b7160960a450dc8c22160ac712a528" + integrity sha512-DUzITvPVDUy6vczKKYTnWc/pBZ0EnjMJnQ3y+Jo5zfKFimJs7S3HFCxCRZYB9FUZcrzUQr3WsmvZgddMEIZv6w== dependencies: debug "^3.2.6" iconv-lite "^0.4.4" sax "^1.2.4" -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: +neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== @@ -6190,10 +6108,10 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== +node-pre-gyp@*: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" @@ -6204,12 +6122,12 @@ node-pre-gyp@^0.12.0: rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" - tar "^4" + tar "^4.4.2" -node-releases@^1.1.41, node-releases@^1.1.42: - version "1.1.42" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.42.tgz#a999f6a62f8746981f6da90627a8d2fc090bbad7" - integrity sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA== +node-releases@^1.1.49: + version "1.1.50" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.50.tgz#803c40d2c45db172d0410e4efec83aa8c6ad0592" + integrity sha512-lgAmPv9eYZ0bGwUYAKlr8MG6K4CvWliWqnkcT2P8mMAgVrH3lqfBPorFlxiG1pHQnqmavJZ9vbMXUTNyMLbrgQ== dependencies: semver "^6.3.0" @@ -6254,17 +6172,25 @@ normalize-selector@^0.2.0: integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== npm-packlist@^1.1.6: - version "1.4.6" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" - integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" npm-run-path@^2.0.0: version "2.0.2" @@ -6356,17 +6282,7 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.entries@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" - integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - -object.entries@^1.1.1: +object.entries@^1.1.0, object.entries@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ== @@ -6376,16 +6292,6 @@ object.entries@^1.1.1: function-bind "^1.1.1" has "^1.0.3" -object.fromentries@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.1.tgz#050f077855c7af8ae6649f45c80b16ee2d31e704" - integrity sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.15.0" - function-bind "^1.1.1" - has "^1.0.3" - object.fromentries@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" @@ -6396,7 +6302,7 @@ object.fromentries@^2.0.2: function-bind "^1.1.1" has "^1.0.3" -object.getownpropertydescriptors@^2.0.3: +object.getownpropertydescriptors@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== @@ -6411,16 +6317,6 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" - integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - object.values@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" @@ -6445,14 +6341,6 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - optionator@^0.8.1, optionator@^0.8.2: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -6527,9 +6415,9 @@ p-limit@^1.1.0: p-try "^1.0.0" p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" - integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== dependencies: p-try "^2.0.0" @@ -6570,9 +6458,9 @@ p-try@^2.0.0: integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pako@^1.0.5, pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parallel-transform@^1.1.0: version "1.2.0" @@ -6776,9 +6664,9 @@ postcss-html@^0.36.0: htmlparser2 "^3.10.0" postcss-jsx@^0.36.0: - version "0.36.3" - resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.3.tgz#c91113eae2935a1c94f00353b788ece9acae3f46" - integrity sha512-yV8Ndo6KzU8eho5mCn7LoLUGPkXrRXRjhMpX4AaYJ9wLJPv099xbtpbRQ8FrPnzVxb/cuMebbPR7LweSt+hTfA== + version "0.36.4" + resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.4.tgz#37a68f300a39e5748d547f19a747b3257240bd50" + integrity sha512-jwO/7qWUvYuWYnpOb0+4bIIgJt7003pgU3P6nETBLaOyBXuTD55ho21xnals5nBrlpTIFodyd3/jBi6UO3dHvA== dependencies: "@babel/core" ">=7.2.2" @@ -6818,11 +6706,11 @@ postcss-resolve-nested-selector@^0.1.1: integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= postcss-safe-parser@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" - integrity sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ== + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" + integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== dependencies: - postcss "^7.0.0" + postcss "^7.0.26" postcss-sass@^0.3.5: version "0.3.5" @@ -6840,11 +6728,11 @@ postcss-scss@^2.0.0: postcss "^7.0.0" postcss-selector-parser@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== dependencies: - dot-prop "^4.1.1" + dot-prop "^5.2.0" indexes-of "^1.0.1" uniq "^1.0.1" @@ -6868,14 +6756,14 @@ postcss-value-parser@^3.3.0: integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== postcss-value-parser@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" - integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d" + integrity sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg== -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.13, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.23, postcss@^7.0.5, postcss@^7.0.7: - version "7.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.23.tgz#9f9759fad661b15964f3cfc3140f66f1e05eadc1" - integrity sha512-hOlMf3ouRIFXD+j2VJecwssTwbvsPGJVMzupptg+85WA+i7MwyrydmQAgY3R+m0Bc0exunhbJmijy8u8+vufuQ== +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.13, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.7: + version "7.0.27" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" + integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -6937,12 +6825,12 @@ promise@^7.0.3, promise@^7.1.1: asap "~2.0.3" prompts@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4" - integrity sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg== + version "2.3.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.1.tgz#b63a9ce2809f106fa9ae1277c275b167af46ea05" + integrity sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA== dependencies: kleur "^3.0.3" - sisteransi "^1.0.3" + sisteransi "^1.0.4" prop-types-exact@^1.2.0: version "1.2.0" @@ -6967,15 +6855,10 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -psl@^1.1.24: - version "1.5.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.5.0.tgz#47fd1292def7fdb1e138cd78afa8814cebcf7b13" - integrity sha512-4vqUjKi2huMu1OJiLhi3jN6jeeKvMZdI1tYgi/njW5zV52jNLgSAZSdN16m9bJFe61/cT8ulmw4qFitV9QRsEA== - psl@^1.1.28: - version "1.6.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.6.0.tgz#60557582ee23b6c43719d9890fb4170ecd91e110" - integrity sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA== + version "1.7.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" + integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== public-encrypt@^4.0.0: version "4.0.3" @@ -7019,7 +6902,7 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= @@ -7171,7 +7054,7 @@ react-clientside-effect@^1.2.2: dependencies: "@babel/runtime" "^7.0.0" -react-dom@^16.4.2, react-dom@^16.9.0: +react-dom@^16.9.0: version "16.12.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== @@ -7252,7 +7135,7 @@ react-transition-group@^1.2.0: prop-types "^15.5.6" warning "^3.0.0" -react@^16.4.2, react@^16.9.0: +react@^16.9.0: version "16.12.0" resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== @@ -7296,9 +7179,9 @@ read-pkg@^4.0.1: pify "^3.0.0" "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -7309,9 +7192,9 @@ read-pkg@^4.0.1: util-deprecate "~1.0.1" readable-stream@^3.1.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -7405,6 +7288,14 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -7436,9 +7327,9 @@ regjsgen@^0.5.0: integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== + version "0.6.3" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.3.tgz#74192c5805d35e9f5ebe3c1fb5b40d40a8a38460" + integrity sha512-8uZvYbnfAtEm9Ab8NTb3hdLwL4g/LQzEYP7Xs27T96abJCCE2d6r3cPZPQEsLKy0vRSGVNG+/zVGtLr86HQduA== dependencies: jsesc "~0.5.0" @@ -7529,9 +7420,9 @@ request-promise-native@^1.0.5: tough-cookie "^2.3.3" request@^2.87.0, request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -7540,7 +7431,7 @@ request@^2.87.0, request@^2.88.0: extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" - har-validator "~5.1.0" + har-validator "~5.1.3" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" @@ -7550,7 +7441,7 @@ request@^2.87.0, request@^2.88.0: performance-now "^2.1.0" qs "~6.5.2" safe-buffer "^5.1.2" - tough-cookie "~2.4.3" + tough-cookie "~2.5.0" tunnel-agent "^0.6.0" uuid "^3.3.2" @@ -7614,17 +7505,10 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2: - version "1.13.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" - integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.8.1: - version "1.14.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2" - integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ== +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.3.2, resolve@^1.8.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" @@ -7669,17 +7553,17 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: inherits "^2.0.1" rollup-plugin-terser@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.1.2.tgz#3e41256205cb75f196fc70d4634227d1002c255c" - integrity sha512-sWKBCOS+vUkRtHtEiJPAf+WnBqk/C402fBD9AVHxSIXMqjsY7MnYWKYEUqGixtr0c8+1DjzUEPlNgOYQPVrS1g== + version "5.2.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.2.0.tgz#ba758adf769347b7f1eaf9ef35978d2e207dccc7" + integrity sha512-jQI+nYhtDBc9HFRBz8iGttQg7li9klmzR62RG2W2nN6hJ/FI2K2ItYQ7kJ7/zn+vs+BP1AEccmVRjRN989I+Nw== dependencies: - "@babel/code-frame" "^7.0.0" - jest-worker "^24.6.0" - rollup-pluginutils "^2.8.1" - serialize-javascript "^1.7.0" - terser "^4.1.0" + "@babel/code-frame" "^7.5.5" + jest-worker "^24.9.0" + rollup-pluginutils "^2.8.2" + serialize-javascript "^2.1.2" + terser "^4.6.2" -rollup-pluginutils@^2.8.1: +rollup-pluginutils@^2.8.2: version "2.8.2" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== @@ -7700,9 +7584,9 @@ rsvp@^4.8.4: integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + version "2.4.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" + integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== dependencies: is-promise "^2.1.0" @@ -7714,9 +7598,9 @@ run-queue@^1.0.0, run-queue@^1.0.3: aproba "^1.1.1" rxjs@^6.4.0, rxjs@^6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" - integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== dependencies: tslib "^1.9.0" @@ -7758,19 +7642,19 @@ sane@^4.0.3: walker "~1.0.5" sanitize-html@^1.18.4: - version "1.20.1" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.20.1.tgz#f6effdf55dd398807171215a62bfc21811bacf85" - integrity sha512-txnH8TQjaQvg2Q0HY06G6CDJLVYCpbnxrdO0WN8gjCKaU5J0KbyGYhZxx5QJg3WLZ1lB7XU9kDkfrCXUozqptA== + version "1.22.0" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.22.0.tgz#9df779c53cf5755adb2322943c21c1c1dffca7bf" + integrity sha512-3RPo65mbTKpOAdAYWU496MSty1YbB3Y5bjwL5OclgaSSMtv65xvM7RW/EHRumzaZ1UddEJowCbSdK0xl5sAu0A== dependencies: chalk "^2.4.1" - htmlparser2 "^3.10.0" + htmlparser2 "^4.1.0" lodash.clonedeep "^4.5.0" lodash.escaperegexp "^4.1.2" lodash.isplainobject "^4.0.6" lodash.isstring "^4.0.1" lodash.mergewith "^4.6.1" - postcss "^7.0.5" - srcset "^1.0.0" + postcss "^7.0.27" + srcset "^2.0.1" xtend "^4.0.1" sax@^1.2.4: @@ -7805,10 +7689,15 @@ semver@6.3.0, semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -serialize-javascript@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -7855,12 +7744,20 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" + integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== + dependencies: + es-abstract "^1.17.0-next.1" + object-inspect "^1.7.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -sisteransi@^1.0.3: +sisteransi@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig== @@ -7944,11 +7841,11 @@ source-map-loader@^0.2.3: loader-utils "^1.1.0" source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" @@ -8030,13 +7927,10 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -srcset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/srcset/-/srcset-1.0.0.tgz#a5669de12b42f3b1d5e83ed03c71046fc48f41ef" - integrity sha1-pWad4StC87HV6D7QPHEEb8SPQe8= - dependencies: - array-uniq "^1.0.2" - number-is-nan "^1.0.0" +srcset@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/srcset/-/srcset-2.0.1.tgz#8f842d357487eb797f413d9c309de7a5149df5ac" + integrity sha512-00kZI87TdRKwt+P8jj8UZxbfp7mK2ufxcIMWvhAOZNJTRROimpHeruWrGvCZneiuVDLqdyHefVp748ECTnyUBQ== sshpk@^1.7.0: version "1.16.1" @@ -8066,9 +7960,9 @@ stack-utils@^1.0.1: integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== state-toggle@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.2.tgz#75e93a61944116b4959d665c8db2d243631d6ddc" - integrity sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== static-extend@^0.1.1: version "0.1.2" @@ -8111,9 +8005,9 @@ stream-http@^2.7.2: xtend "^4.0.0" stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== string-length@^2.0.0: version "2.0.0" @@ -8158,6 +8052,18 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string.prototype.matchall@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" + integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.2" + string.prototype.repeat@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" @@ -8172,14 +8078,6 @@ string.prototype.trim@^1.2.1: es-abstract "^1.17.0-next.1" function-bind "^1.1.1" -string.prototype.trimleft@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" - integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - string.prototype.trimleft@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" @@ -8188,14 +8086,6 @@ string.prototype.trimleft@^2.1.1: define-properties "^1.1.3" function-bind "^1.1.1" -string.prototype.trimright@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" - integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - string.prototype.trimright@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" @@ -8287,13 +8177,11 @@ stylelint-config-standard@^18.2.0: stylelint-config-recommended "^2.2.0" stylelint-scss@^3.9.0: - version "3.13.0" - resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-3.13.0.tgz#875c76e61d95333c4f0ae737a310be6f1d27d780" - integrity sha512-SaLnvQyndaPcsgVJsMh6zJ1uKVzkRZJx+Wg/stzoB1mTBdEmGketbHrGbMQNymzH/0mJ06zDSpeCDvNxqIJE5A== + version "3.14.2" + resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-3.14.2.tgz#e449a47e0ac410e6909f1a71b49550202c978bf9" + integrity sha512-59/BkIEWyFoORiejDIQB2P2kmg0KcqMn7wtj1y5sRvS4N+Qh+Ng3hbKelOzgS+OM2Ezbai0uEev8xckXxkh9TQ== dependencies: - lodash.isboolean "^3.0.3" - lodash.isregexp "^4.0.1" - lodash.isstring "^4.0.1" + lodash "^4.17.15" postcss-media-query-parser "^0.2.3" postcss-resolve-nested-selector "^0.1.1" postcss-selector-parser "^6.0.2" @@ -8410,7 +8298,7 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^4: +tar@^4.4.2: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== @@ -8423,25 +8311,25 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" -terser-webpack-plugin@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" - integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== +terser-webpack-plugin@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^1.7.0" + serialize-javascript "^2.1.2" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.1.0, terser@^4.1.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.2.tgz#448fffad0245f4c8a277ce89788b458bfd7706e8" - integrity sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ== +terser@^4.1.2, terser@^4.6.2: + version "4.6.4" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.4.tgz#40a0b37afbe5b57e494536815efa68326840fc00" + integrity sha512-5fqgBPLgVHZ/fVvqRhhUp9YUiGXhFJ9ZkrZWD9vQtFBR4QIGTnbsb+/kKqSqfgp3WnBwGWAFnedGTtmX1YTn0w== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -8551,7 +8439,7 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@^2.3.3, tough-cookie@^2.3.4: +tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -8559,14 +8447,6 @@ tough-cookie@^2.3.3, tough-cookie@^2.3.4: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -8575,9 +8455,9 @@ tr46@^1.0.1: punycode "^2.1.0" tree-kill@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" - integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q== + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== trim-newlines@^2.0.0: version "2.0.0" @@ -8585,9 +8465,9 @@ trim-newlines@^2.0.0: integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= trim-trailing-lines@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz#d2f1e153161152e9f02fabc670fb40bec2ea2e3a" - integrity sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q== + version "1.1.3" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94" + integrity sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA== trim@0.0.1: version "0.0.1" @@ -8595,14 +8475,14 @@ trim@0.0.1: integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= trough@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.4.tgz#3b52b1f13924f460c3fbfd0df69b587dbcbc762e" - integrity sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q== + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== tslib@^1.10.0, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + version "1.11.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc" + integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg== tslint@^5.20.1: version "5.20.1" @@ -8672,35 +8552,27 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^3.7.3: - version "3.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.3.tgz#b36840668a16458a7025b9eabfad11b66ab85c69" - integrity sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw== + version "3.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.2.tgz#91d6868aaead7da74f493c553aeff76c0c0b1d5a" + integrity sha512-EgOVgL/4xfVrCMbhYKUQTdF37SQn4Iw73H5BgCrF1Abdun7Kwy/QZsE/ssAy0y4LxBbvua3PIbFsbRczWWnDdQ== ua-parser-js@^0.7.18: - version "0.7.20" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" - integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw== - -uglify-js@^3.1.4: - version "3.7.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.2.tgz#cb1a601e67536e9ed094a92dd1e333459643d3f9" - integrity sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA== - dependencies: - commander "~2.20.3" - source-map "~0.6.1" + version "0.7.21" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== unherit@^1.0.4: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.2.tgz#14f1f397253ee4ec95cec167762e77df83678449" - integrity sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w== + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== dependencies: - inherits "^2.0.1" - xtend "^4.0.1" + inherits "^2.0.0" + xtend "^4.0.0" unhomoglyph@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/unhomoglyph/-/unhomoglyph-1.0.3.tgz#8d3551622b57754e10a831bf81442d7f15d1ddfd" - integrity sha512-PC/OAHE8aiTK0Gfmy0PxOlePazRn+BeCM1r4kFtkHgEnkJZgJoI7yD2yUEjsfSdLXKU1FSt/EcIZvNoKazYUTw== + version "1.0.4" + resolved "https://registry.yarnpkg.com/unhomoglyph/-/unhomoglyph-1.0.4.tgz#38d2ec9de84ab921623ebd9fb60f710963c601f4" + integrity sha512-+y+QeEXwm4f0H8Tmy9fFUWHM95YcFjJLlv83/p3+EARUkeJBxnSOBADVyeuSq0TsRJ/UexxCXBKXo40ksu715w== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -8886,12 +8758,14 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" util@0.10.3: version "0.10.3" @@ -8908,9 +8782,9 @@ util@^0.11.0: inherits "2.0.3" uuid@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== v8-compile-cache@2.0.3: version "2.0.3" @@ -9025,9 +8899,9 @@ webidl-conversions@^4.0.2: integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webpack-cli@^3.1.1: - version "3.3.10" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.10.tgz#17b279267e9b4fb549023fae170da8e6e766da13" - integrity sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg== + version "3.3.11" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" + integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g== dependencies: chalk "2.4.2" cross-spawn "6.0.5" @@ -9050,9 +8924,9 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-map "~0.6.1" webpack@^4.20.2: - version "4.41.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e" - integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A== + version "4.41.6" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.6.tgz#12f2f804bf6542ef166755050d4afbc8f66ba7e1" + integrity sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" @@ -9074,7 +8948,7 @@ webpack@^4.20.2: node-libs-browser "^2.2.1" schema-utils "^1.0.0" tapable "^1.1.3" - terser-webpack-plugin "^1.4.1" + terser-webpack-plugin "^1.4.3" watchpack "^1.6.0" webpack-sources "^1.4.1" @@ -9135,14 +9009,14 @@ which-boxed-primitive@^1.0.1: is-symbol "^1.0.2" which-collection@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.0.tgz#303d38022473f4b7048b529b45f6c842d8814269" - integrity sha512-mG4RtFHE+17N2AxRNvBQ488oBjrhaOaI/G+soUaRJwdyDbu5zmqoAKPYBlY7Zd+QTwpfvInRLKo40feo2si1yA== + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== dependencies: - is-map "^2.0.0" - is-set "^2.0.0" - is-weakmap "^2.0.0" - is-weakset "^2.0.0" + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" which-module@^2.0.0: version "2.0.0" @@ -9168,11 +9042,6 @@ word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" From afe45241da8b5714f97329bd69847cf9be5cce8d Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 26 Feb 2020 17:14:54 +0000 Subject: [PATCH 053/522] Remove debug line from Analytics Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/Analytics.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Analytics.js b/src/Analytics.js index 8eea47ea89..c96cfdefee 100644 --- a/src/Analytics.js +++ b/src/Analytics.js @@ -260,7 +260,6 @@ class Analytics { }); } catch (e) { console.error("Analytics error: ", e); - window.err = e; } } From 50b64d8c557c65974f4f4bddd893b1a4f8a92d27 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 26 Feb 2020 18:30:20 +0100 Subject: [PATCH 054/522] add local echo for clicking 'start verification' button --- src/components/views/right_panel/EncryptionPanel.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/components/views/right_panel/EncryptionPanel.js b/src/components/views/right_panel/EncryptionPanel.js index 3ba6ca9a8a..3e9fa4f8b2 100644 --- a/src/components/views/right_panel/EncryptionPanel.js +++ b/src/components/views/right_panel/EncryptionPanel.js @@ -37,6 +37,7 @@ const EncryptionPanel = ({verificationRequest, member, onClose, layout}) => { useEffect(() => { setRequest(verificationRequest); if (verificationRequest) { + setRequesting(false); setPhase(verificationRequest.phase); } }, [verificationRequest]); @@ -67,7 +68,11 @@ const EncryptionPanel = ({verificationRequest, member, onClose, layout}) => { }, [onClose, request]); useEventEmitter(request, "change", changeHandler); + // state to show a spinner immediately after clicking "start verification", + // before we have a request + const [isRequesting, setRequesting] = useState(false); const onStartVerification = useCallback(async () => { + setRequesting(true); const cli = MatrixClientPeg.get(); const roomId = await ensureDMExists(cli, member.userId); const verificationRequest = await cli.requestVerificationDM(member.userId, roomId); @@ -75,9 +80,11 @@ const EncryptionPanel = ({verificationRequest, member, onClose, layout}) => { setPhase(verificationRequest.phase); }, [member.userId]); - const requested = request && (phase === PHASE_REQUESTED || phase === PHASE_UNSENT || phase === undefined); - const initiatedByMe = request && request.initiatedByMe; + const requested = + (!request && isRequesting) || + (request && (phase === PHASE_REQUESTED || phase === PHASE_UNSENT || phase === undefined)); if (!request || requested) { + const initiatedByMe = (!request && isRequesting) || (request && request.initiatedByMe); return Date: Wed, 26 Feb 2020 13:21:11 -0700 Subject: [PATCH 055/522] Ensure verification QR codes use the right buffer size The string length buffer only needs 2 bytes, not 4. --- src/components/views/elements/crypto/VerificationQRCode.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/elements/crypto/VerificationQRCode.js b/src/components/views/elements/crypto/VerificationQRCode.js index 88f9608138..b7232048e5 100644 --- a/src/components/views/elements/crypto/VerificationQRCode.js +++ b/src/components/views/elements/crypto/VerificationQRCode.js @@ -126,7 +126,7 @@ export default class VerificationQRCode extends React.PureComponent { buf = Buffer.concat([buf, tmpBuf]); }; const appendInt = (i: number) => { - const tmpBuf = Buffer.alloc(4); + const tmpBuf = Buffer.alloc(2); tmpBuf.writeInt8(i, 0); buf = Buffer.concat([buf, tmpBuf]); }; From 3abd3137c77c97ddbaa8e344588f139ba1efa4f6 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 26 Feb 2020 13:37:19 -0700 Subject: [PATCH 056/522] Use the right function for creating binary verification QR codes `writeInt8` happened to work because the strings we're writing happen to fit within a single byte so the LSB doesn't matter. We actually want a 16 bit (2 byte) number in big-endian format. --- src/components/views/elements/crypto/VerificationQRCode.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/elements/crypto/VerificationQRCode.js b/src/components/views/elements/crypto/VerificationQRCode.js index b7232048e5..3838aa61ff 100644 --- a/src/components/views/elements/crypto/VerificationQRCode.js +++ b/src/components/views/elements/crypto/VerificationQRCode.js @@ -127,7 +127,7 @@ export default class VerificationQRCode extends React.PureComponent { }; const appendInt = (i: number) => { const tmpBuf = Buffer.alloc(2); - tmpBuf.writeInt8(i, 0); + tmpBuf.writeInt16BE(i, 0); buf = Buffer.concat([buf, tmpBuf]); }; const appendStr = (s: string, enc: string, withLengthPrefix = true) => { From aad17a0be5c5285363526f9995f8744bbebc7181 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Tue, 7 Jan 2020 16:47:43 +0000 Subject: [PATCH 057/522] Add some buttons --- src/Registration.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Registration.js b/src/Registration.js index ac8baa3cca..5f23854f47 100644 --- a/src/Registration.js +++ b/src/Registration.js @@ -67,9 +67,15 @@ export async function startAnyRegistrationFlow(options) { //} else { const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); Modal.createTrackedDialog('Registration required', '', QuestionDialog, { - title: _t("Registration Required"), - description: _t("You need to register to do this. Would you like to register now?"), + title: _t("Login or Registration Required"), + description: _t("You need to login or register to do this."), button: _t("Register"), + extraButtons: [ + , + ], onFinished: (proceed) => { if (proceed) { dis.dispatch({action: 'start_registration'}); @@ -101,4 +107,3 @@ export async function startAnyRegistrationFlow(options) { // } // throw new Error("Register request succeeded when it should have returned 401!"); // } - From 2c6045fe9f7dd6b816727bff61892f2b4bdaf961 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Wed, 8 Jan 2020 10:34:47 +0000 Subject: [PATCH 058/522] close modal --- src/Registration.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Registration.js b/src/Registration.js index 5f23854f47..5f123a7669 100644 --- a/src/Registration.js +++ b/src/Registration.js @@ -66,13 +66,13 @@ export async function startAnyRegistrationFlow(options) { // }); //} else { const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); - Modal.createTrackedDialog('Registration required', '', QuestionDialog, { + const modal = Modal.createTrackedDialog('Registration required', '', QuestionDialog, { title: _t("Login or Registration Required"), description: _t("You need to login or register to do this."), button: _t("Register"), extraButtons: [ , ], From 32eb2c13bfe283324654f5f4e8a0564df9b33f4d Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Sun, 12 Jan 2020 17:15:19 +0000 Subject: [PATCH 059/522] Add support for specifying the screen after require_registration Also use it in start chat and join group Signed-off-by: Stuart Mumford --- src/Registration.js | 8 ++++++-- src/components/structures/GroupView.js | 6 ++++-- src/components/structures/MatrixChat.js | 5 +++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/Registration.js b/src/Registration.js index 5f123a7669..a6e7127010 100644 --- a/src/Registration.js +++ b/src/Registration.js @@ -39,6 +39,8 @@ export const SAFE_LOCALPART_REGEX = /^[a-z0-9=_\-./]+$/; * If true, goes to the home page if the user cancels the action * @param {bool} options.go_welcome_on_cancel * If true, goes to the welcome page if the user cancels the action + * @param {bool} options.screen_after + * If present the screen to redict to after a successful login or register. */ export async function startAnyRegistrationFlow(options) { if (options === undefined) options = {}; @@ -72,13 +74,15 @@ export async function startAnyRegistrationFlow(options) { button: _t("Register"), extraButtons: [ , ], onFinished: (proceed) => { if (proceed) { - dis.dispatch({action: 'start_registration'}); + dis.dispatch({action: 'start_registration', + screenAfterLogin: options.screen_after}); } else if (options.go_home_on_cancel) { dis.dispatch({action: 'view_home_page'}); } else if (options.go_welcome_on_cancel) { diff --git a/src/components/structures/GroupView.js b/src/components/structures/GroupView.js index e98dcae1a4..2b7f15df7a 100644 --- a/src/components/structures/GroupView.js +++ b/src/components/structures/GroupView.js @@ -481,7 +481,8 @@ export default createReactClass({ group_id: groupId, }, }); - dis.dispatch({action: 'require_registration'}); + dis.dispatch({action: 'require_registration', + screen_after: {screen: `group/${groupId}`}}); willDoOnboarding = true; } if (stateKey === GroupStore.STATE_KEY.Summary) { @@ -726,7 +727,8 @@ export default createReactClass({ _onJoinClick: async function() { if (this._matrixClient.isGuest()) { - dis.dispatch({action: 'require_registration'}); + dis.dispatch({action: 'require_registration', + screen_after: {screen: `group/${this.props.groupId}`}}); return; } diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index 339ea279ee..3175f5b7b8 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -1008,6 +1008,11 @@ export default createReactClass({ // needs to be reset so that they can revisit /user/.. // (and trigger // `_chatCreateOrReuse` again) go_welcome_on_cancel: true, + screen_after: {screen: `user/${this.props.config.welcomeUserId}`, + params: { + action: 'chat' + } + } }); return; } From e454d84e9d04ff304c8027364c64e37fd82d60a3 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Mon, 13 Jan 2020 10:56:41 +0000 Subject: [PATCH 060/522] Lint Signed-off-by: Stuart Mumford --- src/Registration.js | 9 ++++++--- src/components/structures/MatrixChat.js | 6 +++--- src/i18n/strings/en_EN.json | 5 +++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/Registration.js b/src/Registration.js index a6e7127010..c301f36ae1 100644 --- a/src/Registration.js +++ b/src/Registration.js @@ -73,9 +73,12 @@ export async function startAnyRegistrationFlow(options) { description: _t("You need to login or register to do this."), button: _t("Register"), extraButtons: [ - , ], diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index 3175f5b7b8..a9bb8e3a7d 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -1010,9 +1010,9 @@ export default createReactClass({ go_welcome_on_cancel: true, screen_after: {screen: `user/${this.props.config.welcomeUserId}`, params: { - action: 'chat' - } - } + action: 'chat', + }, + }, }); return; } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 79b045dd34..8692d38788 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -123,9 +123,10 @@ "Unable to enable Notifications": "Unable to enable Notifications", "This email address was not found": "This email address was not found", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Your email address does not appear to be associated with a Matrix ID on this Homeserver.", - "Registration Required": "Registration Required", - "You need to register to do this. Would you like to register now?": "You need to register to do this. Would you like to register now?", + "Login or Registration Required": "Login or Registration Required", + "You need to login or register to do this.": "You need to login or register to do this.", "Register": "Register", + "Login": "Login", "Default": "Default", "Restricted": "Restricted", "Moderator": "Moderator", From 5edb0ec9122ffb578afcd8d90c3eb13bb92b621c Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Sat, 18 Jan 2020 23:23:46 +0000 Subject: [PATCH 061/522] Resolve correct screen not being shown after new registration --- src/components/structures/MatrixChat.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index a9bb8e3a7d..e226b6aaf7 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -1182,7 +1182,15 @@ export default createReactClass({ _onLoggedIn: async function() { ThemeController.isLogin = false; this.setStateForNewView({ view: VIEWS.LOGGED_IN }); - if (MatrixClientPeg.currentUserIsJustRegistered()) { + // If a specific screen is set to be shown after login, show that above + // all else, as it probably means the user clicked on something already. + if (this._screenAfterLogin && this._screenAfterLogin.screen) { + this.showScreen( + this._screenAfterLogin.screen, + this._screenAfterLogin.params, + ); + this._screenAfterLogin = null; + } else if (MatrixClientPeg.currentUserIsJustRegistered()) { MatrixClientPeg.setJustRegisteredUserId(null); if (this.props.config.welcomeUserId && getCurrentLanguage().startsWith("en")) { From de05965fc05dfbedc8c04e2f2ad6170cb7f75403 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Wed, 5 Feb 2020 15:36:00 +0000 Subject: [PATCH 062/522] Update src/Registration.js Co-Authored-By: Will Hunt --- src/Registration.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Registration.js b/src/Registration.js index c301f36ae1..149b59f42c 100644 --- a/src/Registration.js +++ b/src/Registration.js @@ -40,7 +40,7 @@ export const SAFE_LOCALPART_REGEX = /^[a-z0-9=_\-./]+$/; * @param {bool} options.go_welcome_on_cancel * If true, goes to the welcome page if the user cancels the action * @param {bool} options.screen_after - * If present the screen to redict to after a successful login or register. + * If present the screen to redirect to after a successful login or register. */ export async function startAnyRegistrationFlow(options) { if (options === undefined) options = {}; @@ -75,8 +75,9 @@ export async function startAnyRegistrationFlow(options) { extraButtons: [ , ], onFinished: (proceed) => { diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 8692d38788..9a7fbefd2d 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -123,9 +123,9 @@ "Unable to enable Notifications": "Unable to enable Notifications", "This email address was not found": "This email address was not found", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Your email address does not appear to be associated with a Matrix ID on this Homeserver.", - "Login or Registration Required": "Login or Registration Required", - "You need to login or register to do this.": "You need to login or register to do this.", - "Register": "Register", + "Sign In or Create Account": "Sign In or Create Account", + "Use your account or create a new one to continue.": "Use your account or create a new one to continue.", + "Create Account": "Create Account", "Login": "Login", "Default": "Default", "Restricted": "Restricted", From ae9c2f2c4acc52fc511e2764aeedb558e75d7efd Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Wed, 26 Feb 2020 14:28:50 +0000 Subject: [PATCH 064/522] Keep cancel button for now and make login unfilled --- src/Registration.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Registration.js b/src/Registration.js index ad1d59e3ee..8d7354e7ff 100644 --- a/src/Registration.js +++ b/src/Registration.js @@ -69,12 +69,12 @@ export async function startAnyRegistrationFlow(options) { //} else { const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); const modal = Modal.createTrackedDialog('Registration required', '', QuestionDialog, { - hasCancelButton: false, + hasCancelButton: true, title: _t("Sign In or Create Account"), description: _t("Use your account or create a new one to continue."), button: _t("Create Account"), extraButtons: [ - -
diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js index 20c8fb5b14..e8c39b6d5a 100644 --- a/src/components/views/dialogs/InviteDialog.js +++ b/src/components/views/dialogs/InviteDialog.js @@ -564,7 +564,7 @@ export default class InviteDialog extends React.PureComponent { return; } - const createRoomOptions = {}; + const createRoomOptions = {inlineErrors: true}; if (SettingsStore.isFeatureEnabled("feature_cross_signing")) { // Check whether all users have uploaded device keys before. diff --git a/src/createRoom.js b/src/createRoom.js index 07eaee3e8f..45e849065d 100644 --- a/src/createRoom.js +++ b/src/createRoom.js @@ -37,6 +37,8 @@ import SettingsStore from "./settings/SettingsStore"; * Default: True * @param {bool=} opts.encryption Whether to enable encryption. * Default: False + * @param {bool=} opts.inlineErrors True to raise errors off the promise instead of resolving to null. + * Default: False * * @returns {Promise} which resolves to the room id, or null if the * action was aborted or failed. @@ -140,6 +142,9 @@ export default function createRoom(opts) { } return roomId; }, function(err) { + // Raise the error if the caller requested that we do so. + if (opts.inlineErrors) throw err; + // We also failed to join the room (this sets joining to false in RoomViewStore) dis.dispatch({ action: 'join_room_error', From aec622d5d086ed43ad238935e9908d1b42d1158e Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Fri, 28 Feb 2020 10:47:23 +0000 Subject: [PATCH 082/522] Apply suggestions from code review Co-Authored-By: Travis Ralston --- src/Registration.js | 14 ++++---------- src/components/structures/GroupView.js | 6 ++---- src/components/structures/MatrixChat.js | 9 ++++----- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/Registration.js b/src/Registration.js index 5f6ac4b68e..ca162bac03 100644 --- a/src/Registration.js +++ b/src/Registration.js @@ -75,20 +75,14 @@ export async function startAnyRegistrationFlow(options) { description: _t("Use your account or create a new one to continue."), button: _t("Create Account"), extraButtons: [ - , + dis.dispatch({action: 'start_login', screenAfterLogin: options.screen_after}); + }}>{ _t('Sign In') }, ], onFinished: (proceed) => { if (proceed) { - dis.dispatch({action: 'start_registration', - screenAfterLogin: options.screen_after}); + dis.dispatch({action: 'start_registration', screenAfterLogin: options.screen_after}); } else if (options.go_home_on_cancel) { dis.dispatch({action: 'view_home_page'}); } else if (options.go_welcome_on_cancel) { diff --git a/src/components/structures/GroupView.js b/src/components/structures/GroupView.js index 2b7f15df7a..af90fbbe83 100644 --- a/src/components/structures/GroupView.js +++ b/src/components/structures/GroupView.js @@ -481,8 +481,7 @@ export default createReactClass({ group_id: groupId, }, }); - dis.dispatch({action: 'require_registration', - screen_after: {screen: `group/${groupId}`}}); + dis.dispatch({action: 'require_registration', screen_after: {screen: `group/${groupId}`}}); willDoOnboarding = true; } if (stateKey === GroupStore.STATE_KEY.Summary) { @@ -727,8 +726,7 @@ export default createReactClass({ _onJoinClick: async function() { if (this._matrixClient.isGuest()) { - dis.dispatch({action: 'require_registration', - screen_after: {screen: `group/${this.props.groupId}`}}); + dis.dispatch({action: 'require_registration', screen_after: {screen: `group/${this.props.groupId}`}}); return; } diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index e226b6aaf7..448cce933d 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -1008,11 +1008,10 @@ export default createReactClass({ // needs to be reset so that they can revisit /user/.. // (and trigger // `_chatCreateOrReuse` again) go_welcome_on_cancel: true, - screen_after: {screen: `user/${this.props.config.welcomeUserId}`, - params: { - action: 'chat', - }, - }, + screen_after: { + screen: `user/${this.props.config.welcomeUserId}`, + params: { action: 'chat' }, + }, }); return; } From a93c13306cb98fb69caf85242056258faab27b53 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 28 Feb 2020 11:25:04 +0000 Subject: [PATCH 083/522] Prefer account password variation of upgrading This shows the account password variation of upgrade encryption first if it's possible to do so. This ensures we match the logic that locks the next button. Fixes https://github.com/vector-im/riot-web/issues/12560 --- .../secretstorage/CreateSecretStorageDialog.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index 84b94ab64c..08d1e0638b 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -400,12 +400,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent { let authPrompt; let nextCaption = _t("Next"); - if (!this.state.backupSigStatus.usable) { - authPrompt =
-
{_t("Restore your key backup to upgrade your encryption")}
-
; - nextCaption = _t("Restore"); - } else if (this.state.canUploadKeysWithPasswordOnly) { + if (this.state.canUploadKeysWithPasswordOnly) { authPrompt =
{_t("Enter your account password to confirm the upgrade:")}
; + } else if (!this.state.backupSigStatus.usable) { + authPrompt =
+
{_t("Restore your key backup to upgrade your encryption")}
+
; + nextCaption = _t("Restore"); } else { authPrompt =

{_t("You'll need to authenticate with the server to confirm the upgrade.")} From 41e3e266e475a4fbcc4b2215a73d6c17038c0406 Mon Sep 17 00:00:00 2001 From: Marco Zehe Date: Fri, 28 Feb 2020 12:40:43 +0100 Subject: [PATCH 084/522] Hide user avatars from screen readers in group and room user lists. Like in pill components, these only duplicate information for screen readers, so hide them. Signed-off-by: Marco Zehe --- src/components/views/groups/GroupMemberTile.js | 2 +- src/components/views/rooms/EntityTile.js | 2 +- src/components/views/rooms/MemberTile.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/views/groups/GroupMemberTile.js b/src/components/views/groups/GroupMemberTile.js index 68513cf0db..659cfb5a91 100644 --- a/src/components/views/groups/GroupMemberTile.js +++ b/src/components/views/groups/GroupMemberTile.js @@ -59,7 +59,7 @@ export default createReactClass({ ); const av = ( -

{authPrompt}
From b7f5f5a95f4c43749e2e1bdaaa9f4e6d63c48a6d Mon Sep 17 00:00:00 2001 From: Walter Date: Wed, 26 Feb 2020 13:04:20 +0000 Subject: [PATCH 091/522] Translated using Weblate (Russian) Currently translated at 84.1% (1797 of 2137 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ru/ --- src/i18n/strings/ru.json | 104 ++++++++++++++++++++++++++++++++------- 1 file changed, 87 insertions(+), 17 deletions(-) diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index abe39b2cbd..298025ea6a 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -350,7 +350,7 @@ "Please check your email to continue registration.": "Чтобы продолжить регистрацию, проверьте электронную почту.", "Token incorrect": "Неверный код проверки", "Please enter the code it contains:": "Введите полученный код:", - "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Если не указать email, вы не сможете при необходимости сбросить свой пароль. Уверены?", + "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "If you don't specify an email address, you won't be able to reset your password. Вы уверены?", "Error decrypting audio": "Ошибка расшифровки аудиозаписи", "Error decrypting image": "Ошибка расшифровки изображения", "Error decrypting video": "Ошибка расшифровки видео", @@ -918,13 +918,13 @@ "Put a link back to the old room at the start of the new room so people can see old messages": "Разместим ссылку на старую комнату, чтобы люди могли видеть старые сообщения", "Please contact your service administrator to continue using this service.": "Пожалуйста, обратитесь к вашему администратору, чтобы продолжить использовать этот сервис.", "Registration Required": "Требуется регистрация", - "You need to register to do this. Would you like to register now?": "Необходима регистрация. Хотите зарегистрироваться?", + "You need to register to do this. Would you like to register now?": "Вам необходимо зарегистрироваться для этого действия. Вы хотели бы зарегистрировать сейчас?", "Whether or not you're logged in (we don't record your username)": "Независимо от того, вошли вы или нет (мы не записываем ваше имя пользователя)", "Unable to load! Check your network connectivity and try again.": "Не удалось загрузить! Проверьте подключение к сети и попробуйте снова.", "Failed to invite users to the room:": "Не удалось пригласить пользователей в комнату:", "Upgrades a room to a new version": "Модернизирует комнату до новой версии", "Sets the room name": "Устанавливает название комнаты", - "Forces the current outbound group session in an encrypted room to be discarded": "Принудительно отбрасывает текущая сессия исходящей группы в зашифрованной комнате", + "Forces the current outbound group session in an encrypted room to be discarded": "Принудительно отбрасывает текущую сессию исходящей группы в зашифрованной комнате", "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s модернизировал эту комнату.", "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s добавил %(addedAddresses)s к списку адресов комнаты.", "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s добавил %(addedAddresses)s к списку адресов комнаты.", @@ -939,7 +939,7 @@ "%(names)s and %(lastPerson)s are typing …": "%(names)s и %(lastPerson)s печатают…", "This homeserver has hit its Monthly Active User limit.": "Сервер достиг ежемесячного ограничения активных пользователей.", "This homeserver has exceeded one of its resource limits.": "Превышен один из лимитов на ресурсы сервера.", - "Unable to connect to Homeserver. Retrying...": "Невозможно подключиться к серверу. Выполняется повторная попытка...", + "Unable to connect to Homeserver. Retrying...": "Невозможно соединиться с домашним сервером. Повторить", "Unrecognised address": "Нераспознанный адрес", "You do not have permission to invite people to this room.": "У вас нет разрешения приглашать людей в эту комнату.", "User %(user_id)s may or may not exist": "Пользователя %(user_id)s не существует", @@ -956,7 +956,7 @@ "All-uppercase is almost as easy to guess as all-lowercase": "Всё прописными буквами так же легко угадывается как и всё строчными", "Reversed words aren't much harder to guess": "Угадать перевёрнутые слова не сильно труднее", "Predictable substitutions like '@' instead of 'a' don't help very much": "Предсказуемые замены типа «@» вместо «a» не особо помогают", - "Add another word or two. Uncommon words are better.": "Добавьте ещё слово или два. Лучше редких.", + "Add another word or two. Uncommon words are better.": "Добавить другое слово или два. Необычные слова лучше.", "Repeats like \"aaa\" are easy to guess": "Повторы типа \"ааа\" легко угадываемы", "Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Повторы типа «abcabcabc», лишь немного сложнее угадать, чем «abc»", "Sequences like abc or 6543 are easy to guess": "Последовательности типа abc или 6543 легко угадываемы", @@ -1044,8 +1044,8 @@ "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Превышен один из ресурсных лимитов сервера, по этому некоторые пользователи не смогут залогиниться.", "Join": "Присоединиться", "That doesn't look like a valid email address": "Это не похоже на адрес электронной почты", - "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "Ваше сообщение не было отправлено, потому что этот домашний сервер превысил месячный лимит активных пользователей. обратитесь к администратору службы, чтобы продолжить использование службы.", - "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Ваше сообщение не было отправлено, потому что этот домашний сервер превысил лимит ресурсов. обратитесь к администратору службы, чтобы продолжить использование службы.", + "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Пожалуйста, обратитесь к вашему администратору, чтобы продолжить использование сервиса.", + "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Your message wasn't sent because this homeserver has exceeded a resource limit. Пожалуйста, обратитесь к вашему администратору, чтобы продолжить использование сервиса.", "User %(user_id)s does not exist": "Пользователя %(user_id)s не существует", "Enable Community Filter Panel": "Включить панель сообществ", "Prompt before sending invites to potentially invalid matrix IDs": "Подтверждать отправку приглашений на потенциально недействительные matrix ID", @@ -1194,7 +1194,7 @@ "Scissors": "Ножницы", "Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "Общение с этим пользователем зашифровано сквозным шифрованием и недоступно третьим лицам.", "We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "Мы отправили вам сообщение для подтверждения адреса электронной почты. Пожалуйста выполните указания данные в сообщении и нажмите кнопку внизу.", - "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Вы уверены? Зашифрованные сообщения будут безвозвратно утеряны при отсутствии соответствующего резервного копирования ваших ключей.", + "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Вы уверены? You will lose your encrypted messages if your keys are not backed up properly.", "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Зашифрованные сообщения защищены сквозным шифрованием. Только вы и ваш собеседник имеете ключи для их расшифровки и чтения.", "Unable to load key backup status": "Не удалось получить статус резервного копирования для ключей шифрования", "Restore from Backup": "Восстановить из резервной копии", @@ -1229,7 +1229,7 @@ "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Используете ли вы функцию \"хлебные крошки\" (аватары над списком комнат) или нет", "A conference call could not be started because the integrations server is not available": "Конференц-вызов не может быть запущен, так как сервер интеграции недоступен", "Replying With Files": "Ответ файлами", - "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "В настоящее время нет возможности ответить файлом. Хотели бы вы загрузить этот файл без ответа?", + "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "На данный момент не возможнo ответить с файлом. Хотите загрузить этот файл без ответа?", "The file '%(fileName)s' failed to upload.": "Файл '%(fileName)s' не был загружен.", "The server does not support the room version specified.": "Сервер не поддерживает указанную версию комнаты.", "Name or Matrix ID": "Имя или Matrix ID", @@ -1481,9 +1481,9 @@ "Unexpected error resolving identity server configuration": "Неопределённая ошибка при разборе параметра сервера идентификации", "Use lowercase letters, numbers, dashes and underscores only": "Используйте только строчные буквы, цифры, тире и подчеркивания", "Cannot reach identity server": "Не удаётся связаться с сервером идентификации", - "You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Вы можете зарегистрироваться, но некоторые возможности не будет доступны, пока сервер идентификации не станет доступным. Если вы продолжаете видеть это предупреждение, проверьте вашу конфигурацию или свяжитесь с администратором сервера.", - "You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Вы можете сбросить пароль, но некоторые возможности не будет доступны, пока сервер идентификации не станет доступным. Если вы продолжаете видеть это предупреждение, проверьте вашу конфигурацию или свяжитесь с администратором сервера.", - "You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Вы можете войти в систему, но некоторые возможности не будет доступны, пока сервер идентификации не станет доступным. Если вы продолжаете видеть это предупреждение, проверьте вашу конфигурацию или свяжитесь с администратором сервера.", + "You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.", + "You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.", + "You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.", "Log in to your new account.": "Войти в вашу новую учётную запись.", "You can now close this window or log in to your new account.": "Вы можете закрыть это окно или войти в вашу новую учётную запись.", "Registration Successful": "Регистрация успешно завершена", @@ -1552,8 +1552,8 @@ "Alternatively, you can try to use the public server at turn.matrix.org, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "Кроме того, вы можете попытаться использовать общедоступный сервер по адресу turn.matrix.org , но это не будет настолько надежным, и он предоставит ваш IP-адрес этому серверу. Вы также можете управлять этим в настройках.", "Sends a message as plain text, without interpreting it as markdown": "Посылает сообщение в виде простого текста, не интерпретируя его как разметку", "Use an identity server": "Используйте сервер идентификации", - "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Используйте идентификационный сервер для приглашения по электронной почте. Нажмите «Продолжить», чтобы использовать сервер идентификации по умолчанию (%(defaultIdentityServerName)s) или измените его в настройках.", - "Use an identity server to invite by email. Manage in Settings.": "Используйте идентификационный сервер для приглашения по электронной почте. Управление в меню Настройки.", + "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Используйте сервер идентификации что бы пригласить по электронной почте Нажмите Продолжить, чтобы использовать стандартный сервер идентифицации(%(defaultIdentityServerName)s) или изменить в Настройках.", + "Use an identity server to invite by email. Manage in Settings.": "Используйте сервер идентификации что бы пригласить по электронной почте Управление в настройках.", "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Разрешить резервный вызов поддержки сервера turn.matrix.org, когда ваш домашний сервер не предлагает такой поддержки (ваш IP-адрес будет использоваться во время вызова)", "Add Email Address": "Добавить адрес Email", "Add Phone Number": "Добавить номер телефона", @@ -1661,8 +1661,8 @@ "This client does not support end-to-end encryption.": "Этот клиент не поддерживает сквозное шифрование.", "Messages in this room are not end-to-end encrypted.": "Сообщения в этой комнате не шифруются сквозным шифрованием.", "Please create a new issue on GitHub so that we can investigate this bug.": "Пожалуйста, создайте новую проблему/вопрос на GitHub, чтобы мы могли расследовать эту ошибку.", - "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Используйте идентификационный сервер для приглашения по электронной почте. Используйте значение по умолчанию (%(defaultIdentityServerName)s) или управляйте в Настройках.", - "Use an identity server to invite by email. Manage in Settings.": "Используйте идентификационный сервер для приглашения по электронной почте. Управление в Настройки.", + "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Используйте сервер идентификации что бы пригласить по электронной почте Use the default (%(defaultIdentityServerName)s) or manage in Settings.", + "Use an identity server to invite by email. Manage in Settings.": "Используйте сервер идентификации что бы пригласить по электронной почте Manage in Settings.", "Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Запретить пользователям других Matrix-Серверов присоединяться к этой комнате (этот параметр нельзя изменить позже!)", "Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "Отчет о данном сообщении отправит свой уникальный 'event ID' администратору вашего домашнего сервера. Если сообщения в этой комнате зашифрованы, администратор вашего домашнего сервера не сможет прочитать текст сообщения или просмотреть какие-либо файлы или изображения.", "Missing captcha public key in homeserver configuration. Please report this to your homeserver administrator.": "Отсутствует Капча открытого ключа в конфигурации домашнего сервера. Пожалуйста, сообщите об этом администратору вашего домашнего сервера.", @@ -1746,5 +1746,75 @@ "Server or user ID to ignore": "ID сервера или пользователя для игнорирования", "Subscribed lists": "Подписанные списки", "Subscribe": "Подписать", - "A session's public name is visible to people you communicate with": "Публичное имя сессии видны людям, с которыми вы общаетесь" + "A session's public name is visible to people you communicate with": "Публичное имя сессии видны людям, с которыми вы общаетесь", + "If you cancel now, you won't complete verifying the other user.": "Если вы сейчас отмените, у вас не будет завершена проверка других пользователей.", + "If you cancel now, you won't complete your secret storage operation.": "Если вы сейчас отмените, вы не завершите операцию секретного хранения.", + "Cancel entering passphrase?": "Отмена ввода пароль?", + "Setting up keys": "Настройка ключей", + "Encryption upgrade available": "Доступно обновление шифрования", + "Set up encryption": "Настройка шифрования", + "Double check that your server supports the room version chosen and try again.": "Дважды проверьте, что ваш сервер поддерживает версию комнаты и попробуйте снова.", + "WARNING: Session already verified, but keys do NOT MATCH!": "ВНИМАНИЕ:Сессия уже подтверждена, но ключи НЕ совпадают!", + "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "ВНИМАНИЕ: ПРОВЕРКА КЛЮЧА НЕ ПРОШЛА! Ключом подписи для %(userId)s и сессии %(deviceId)s является \"%(fprint)s\", что не соответствует указанному ключу \"%(fingerprint)s\". Это может означать, что ваши сообщения перехватываются!", + "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Ключ подписи, который вы предоставили, соответствует ключу подписи, который вы получили от %(userId)s's сессии %(deviceId)s. Сессия отмечена как подтверждена.", + "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s добавил %(addedAddresses)s и %(count)s другие адреса к этой комнате", + "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s удалил %(removedAddresses)s и %(count)s другие адреса из этой комнаты", + "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s удалил %(countRemoved)s и добавил %(countAdded)s адреса к этой комнате", + "%(senderName)s placed a voice call.": "%(senderName)s сделал голосовой вызов.", + "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s сделал голосовой вызов. (не поддерживается этим браузером)", + "%(senderName)s placed a video call.": "%(senderName)s сделал видео вызов.", + "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s сделал видео вызов. (не поддерживается этим браузером)", + "%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s удалил правило, запрещающее пользователям соответствовать %(glob)s", + "%(senderName)s removed the rule banning rooms matching %(glob)s": "%(senderName)s removed the rule banning rooms matching %(glob)s", + "a few seconds ago": "несколько секунд назад", + "about a minute ago": "около минуты назад", + "%(num)s minutes ago": "%(num)s минут назад", + "about an hour ago": "около часа назад", + "%(num)s hours ago": "%(num)s часов назад ", + "about a day ago": "около суток назад", + "%(num)s days ago": "%(num)s дней назад", + "a few seconds from now": "несколько секунд назад", + "about a minute from now": "примерно через минуту", + "%(num)s minutes from now": "%(num)s минут спустя", + "about an hour from now": "примерно через час", + "%(num)s hours from now": "%(num)s часов спустя", + "about a day from now": "примерно через день", + "%(num)s days from now": "%(num)s дней спустя", + "Show a presence dot next to DMs in the room list": "Показать точку присутствия рядом с DMs в списке комнат", + "Enable cross-signing to verify per-user instead of per-session (in development)": "Включение перекрестной подписи для проверки в расчете на одного пользователя, а не за сессию (в разработке)", + "Enable local event indexing and E2EE search (requires restart)": "Включить локальное индексирование событий и E2EE поиска (требуется перезапуск)", + "Show info about bridges in room settings": "Показать информацию о мостах в настройках комнаты", + "Show padlocks on invite only rooms": "Показывать замки по приглашению только комнаты", + "Enable message search in encrypted rooms": "Включить поиск сообщений в зашифрованных комнатах", + "Keep secret storage passphrase in memory for this session": "Храните в памяти секретную парольную фразу для этого сеанса", + "How fast should messages be downloaded.": "Как быстро сообщения должны быть загружены.", + "This is your list of users/servers you have blocked - don't leave the room!": "Это список пользователей/серверов, которые вы заблокировали - не покидайте комнату!", + "Verify this session by completing one of the following:": "Проверить эту сессию, выполнив одно из следующих действий:", + "Scan this unique code": "Отсканируйте этот уникальный код", + "or": "или", + "Compare unique emoji": "Сравнитe уникальныe эмодзи", + "Compare a unique set of emoji if you don't have a camera on either device": "Сравните уникальный набор смайликов, если у вас нет камеры ни на одном из устройств.", + "Start": "Начать", + "Confirm the emoji below are displayed on both devices, in the same order:": "Подтвердите, что смайлики, приведенные ниже, отображаются на обоих устройствах в одном и том же порядке:", + "Verify this device by confirming the following number appears on its screen.": "Проверьте это устройство, подтвердив, что на его экране появляется следующий номер.", + "Waiting for %(displayName)s to verify…": "Ждите %(displayName)s, чтобы проверить...", + "Cancelling…": "Отменяется...", + "They match": "Они совпадают", + "They don't match": "Они не совпадают", + "To be secure, do this in person or use a trusted way to communicate.": "Чтобы быть в безопасности, делайте это лично или используйте надежный способ связи.", + "Lock": "Заблокировать", + "Verify yourself & others to keep your chats safe": "Проверить себя и других, чтобы сохранить ваши чаты безопасными", + "Other users may not trust it": "Другие пользователи могут не доверять этому", + "Upgrade": "Обновление", + "Verify": "Проверить", + "Later": "Позже", + "Review": "Обзор", + "Decline (%(counter)s)": "Сокращение (%(counter)s)", + "This bridge was provisioned by .": "Этот мост был подготовлен пользователем .", + "This bridge is managed by .": "Этот мост управляется .", + "Workspace: %(networkName)s": "Рабочая область: %(networkName)s", + "Channel: %(channelName)s": "Канал: %(channelName)s", + "Show less": "Показать меньше", + "Show more": "Показать больше", + "Changing password will currently reset any end-to-end encryption keys on all sessions, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Changing password will currently reset any end-to-end encryption keys on all sessions, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved." } From b1543c414182ff97cf69572d1cc85cae2b579af4 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 28 Feb 2020 12:32:14 +0000 Subject: [PATCH 092/522] Regen i18n --- src/i18n/strings/en_EN.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 79b045dd34..ed042d7f96 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2064,9 +2064,9 @@ "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.", "File to import": "File to import", "Import": "Import", + "Enter your account password to confirm the upgrade:": "Enter your account password to confirm the upgrade:", "Restore your key backup to upgrade your encryption": "Restore your key backup to upgrade your encryption", "Restore": "Restore", - "Enter your account password to confirm the upgrade:": "Enter your account password to confirm the upgrade:", "You'll need to authenticate with the server to confirm the upgrade.": "You'll need to authenticate with the server to confirm the upgrade.", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.", "Great! This passphrase looks strong enough.": "Great! This passphrase looks strong enough.", From 337c8232313fff63af71381e08bc11f4f7658b0f Mon Sep 17 00:00:00 2001 From: Szimszon Date: Fri, 28 Feb 2020 12:08:32 +0000 Subject: [PATCH 093/522] Translated using Weblate (Hungarian) Currently translated at 100.0% (2138 of 2138 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 26c7fb071f..47f87967bb 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2167,5 +2167,8 @@ "Your password": "A jelszavad", "This session, or the other session": "Ez vagy másik munkamenet", "The internet connection either session is using": "Az egyik munkamenet internet kapcsolata", - "We recommend you change your password and recovery key in Settings immediately": "Javasoljuk, hogy a jelszavadat és a visszaállítási kulcsodat mihamarabb változtasd meg a Beállításokban" + "We recommend you change your password and recovery key in Settings immediately": "Javasoljuk, hogy a jelszavadat és a visszaállítási kulcsodat mihamarabb változtasd meg a Beállításokban", + "Order rooms by name": "Szobák rendezése név szerint", + "Show rooms with unread notifications first": "Olvasatlan üzeneteket tartalmazó szobák megjelenítése elől", + "Show shortcuts to recently viewed rooms above the room list": "Billentyűkombináció megjelenítése a nemrég meglátogatott szobákhoz a szoba lista felett" } From d3c7a7ff1fe9f8715d050c8c11ccc3ae23cd5f34 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 28 Feb 2020 13:47:12 +0000 Subject: [PATCH 094/522] Use latest backup status directly rather than via state This uses the latest backup status we just retrieved by returning from the lookup path (instead of using it indirectly via state). This is important because state updates are batched, so we can't rely on the value to be updated immediately like we were. Fixes https://github.com/vector-im/riot-web/issues/12562 --- .../secretstorage/CreateSecretStorageDialog.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index 712f7d5f95..c42eb7d8dc 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -117,6 +117,11 @@ export default class CreateSecretStorageDialog extends React.PureComponent { backupInfo, backupSigStatus, }); + + return { + backupInfo, + backupSigStatus, + }; } async _queryKeyUploadAuth() { @@ -269,13 +274,13 @@ export default class CreateSecretStorageDialog extends React.PureComponent { const RestoreKeyBackupDialog = sdk.getComponent('dialogs.keybackup.RestoreKeyBackupDialog'); const { finished } = Modal.createTrackedDialog( 'Restore Backup', '', RestoreKeyBackupDialog, {showSummary: false}, null, - /* priority = */ false, /* static = */ true, + /* priority = */ false, /* static = */ false, ); await finished; - await this._fetchBackupInfo(); + const { backupSigStatus } = await this._fetchBackupInfo(); if ( - this.state.backupSigStatus.usable && + backupSigStatus.usable && this.state.canUploadKeysWithPasswordOnly && this.state.accountPassword ) { From 4db1d04764e554e5234230dfcd821487558da666 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 28 Feb 2020 13:52:24 +0000 Subject: [PATCH 095/522] Fix warning about uncontrolled vs. controlled state --- .../views/dialogs/secretstorage/CreateSecretStorageDialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index c42eb7d8dc..49b103ecf7 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -83,7 +83,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent { // does the server offer a UI auth flow with just m.login.password // for /keys/device_signing/upload? canUploadKeysWithPasswordOnly: null, - accountPassword: props.accountPassword, + accountPassword: props.accountPassword || "", accountPasswordCorrect: null, // status of the key backup toggle switch useKeyBackup: true, From fee04d2b8306a20f875df7e81c410ab6ca0baa6e Mon Sep 17 00:00:00 2001 From: Ji-Hyeon Gim Date: Fri, 28 Feb 2020 13:16:20 +0000 Subject: [PATCH 096/522] Translated using Weblate (Korean) Currently translated at 83.3% (1781 of 2138 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ko/ --- src/i18n/strings/ko.json | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index 1e3eced284..4271864216 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -1776,5 +1776,28 @@ "Decline (%(counter)s)": "거절 (%(counter)s)", "Connecting to integration manager...": "통합 관리자로 연결 중...", "Cannot connect to integration manager": "통합 관리자에 연결할 수 없음", - "The integration manager is offline or it cannot reach your homeserver.": "통합 관리자가 오프라인이거나 당신의 홈서버에서 접근할 수 없습니다." + "The integration manager is offline or it cannot reach your homeserver.": "통합 관리자가 오프라인이거나 당신의 홈서버에서 접근할 수 없습니다.", + "The version of Riot": "Riot의 버전", + "Whether you're using Riot on a device where touch is the primary input mechanism": "터치가 기본 입력 방식인 기기에서 Riot을 사용하는지 여부", + "Whether you're using Riot as an installed Progressive Web App": "Riot을 설치형 프로그레시브 웹 앱으로 사용하는지 여부", + "Your user agent": "사용자 에이전트", + "The information being sent to us to help make Riot better includes:": "Riot을 개선하기 위해 당사에 전송되는 정보에는 다음과 같은 것들이 포함됩니다:", + "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "이 방에는 알 수 없는 세션들이 있습니다: 검증 없이 진행하면 누군가 당신의 전화를 도청할 수도 있습니다.", + "If you cancel now, you won't complete verifying the other user.": "지금 취소하면 다른 사용자 확인이 완료될 수 없습니다.", + "If you cancel now, you won't complete verifying your other session.": "지금 취소하면 당신의 다른 세션을 검증할 수 없습니다.", + "If you cancel now, you won't complete your secret storage operation.": "지금 취소하면 보안 저장 작업을 완료할 수 없습니다.", + "Cancel entering passphrase?": "암호 입력을 취소하시겠습니까?", + "Setting up keys": "키 설정", + "Verify this session": "이 세션 검증", + "Encryption upgrade available": "암호화 업그레이드 가능", + "Set up encryption": "암호화 설정", + "Unverified session": "검증되지 않은 세션", + "Error upgrading room": "방 업그레이드 오류", + "Double check that your server supports the room version chosen and try again.": "서버가 선택한 방 버전을 지원하는지 확인한 뒤에 다시 시도해주세요.", + "Verifies a user, session, and pubkey tuple": "사용자, 세션, 공개키 튜플을 검증합니다", + "Unknown (user, session) pair:": "알 수 없는 (사용자, 세션) 쌍:", + "Session already verified!": "이미 검증된 세션입니다!", + "WARNING: Session already verified, but keys do NOT MATCH!": "경고: 이미 검증된 세션이지만 키가 일치하지 않습니다!", + "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "경고: 키 검증 실패! 제공된 키인 \"%(fingerprint)s\"가 사용자 %(userId)s와 %(deviceId)s 세션의 서명 키인 \"%(fprint)s\"와 일치하지 않습니다. 이는 통신이 탈취되고 있는 중일 수도 있다는 뜻입니다!", + "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "사용자 %(userId)s의 세션 %(deviceId)s에서 받은 서명 키와 당신이 제공한 서명 키가 일치합니다. 세션이 검증되었습니다." } From 20b66e7088f4ecb27778481f17bc00c9c659d22a Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Fri, 28 Feb 2020 16:50:26 +0000 Subject: [PATCH 097/522] Translated using Weblate (Albanian) Currently translated at 99.7% (2131 of 2138 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 546b6f0766..9cb7191288 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2146,5 +2146,21 @@ "You declined": "Hodhët poshtë", "%(name)s declined": "%(name)s hodhi poshtë", "accepting …": "po pranohet …", - "declining …": "po hidhet poshtë …" + "declining …": "po hidhet poshtë …", + "Order rooms by name": "Renditini dhomat sipas emrash", + "Show rooms with unread notifications first": "Shfaq së pari dhoma me njoftime të palexuara", + "Show shortcuts to recently viewed rooms above the room list": "Shfaq te lista e dhomave shkurtore për te dhoma të para së fundi", + "Cancelling…": "Po anulohet…", + "Your homeserver does not support cross-signing.": "Shërbyesi juaj Home nuk mbulon cross-signing.", + "Homeserver feature support:": "Mbulim veçorish nga shërbyesi Home:", + "exists": "ekziston", + "Accepting…": "Po pranohet…", + "Accepting …": "Po pranohet …", + "Declining …": "Po hidhet poshtë …", + "Verification Requests": "Kërkesa Verifikimi", + "Your account is not secure": "Llogaria juaj s’është e sigurt", + "Your password": "Fjalëkalimi juaj", + "This session, or the other session": "Ky sesion, ose sesioni tjetër", + "The internet connection either session is using": "Lidhja internet që përdor cilido nga dy sesionet", + "We recommend you change your password and recovery key in Settings immediately": "Këshillojmë të ndryshoni menjëherë te Rregullimet fjalëkalimin tuaj dhe kyçin e rimarrjeve" } From 8520310e6e3e97a554c737952d9649d0be53e2b4 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 28 Feb 2020 11:42:16 -0700 Subject: [PATCH 098/522] Proof of concept for custom theme adding For https://github.com/vector-im/riot-web/issues/12517 --- .../tabs/user/GeneralUserSettingsTab.js | 52 +++++++++++++++++++ src/i18n/strings/en_EN.json | 5 ++ src/settings/Settings.js | 6 +++ 3 files changed, 63 insertions(+) diff --git a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js index 304bb6449f..7af9aae146 100644 --- a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js @@ -61,6 +61,8 @@ export default class GeneralUserSettingsTab extends React.Component { emails: [], msisdns: [], ...this._calculateThemeState(), + customThemeUrl: "", + customThemeError: "", }; this.dispatcherRef = dis.register(this._onAction); @@ -274,6 +276,33 @@ export default class GeneralUserSettingsTab extends React.Component { }); }; + _onAddCustomTheme = async () => { + let currentThemes = SettingsStore.getValue("custom_themes"); + if (!currentThemes) currentThemes = []; + currentThemes = currentThemes.map(c => c); // cheap clone + + try { + const r = await fetch(this.state.customThemeUrl); + const themeInfo = await r.json(); + if (!themeInfo || typeof(themeInfo['name']) !== 'string' || typeof(themeInfo['colors']) !== 'object') { + console.log(themeInfo); + this.setState({customThemeError: _t("Invalid theme schema.")}); + return; + } + currentThemes.push(themeInfo); + } catch (e) { + console.error(e); + this.setState({customThemeError: _t("Error downloading theme information.")}); + } + + await SettingsStore.setValue("custom_themes", null, SettingLevel.ACCOUNT, currentThemes); + this.setState({customThemeUrl: "", customThemeError: ""}); + }; + + _onCustomThemeChange = (e) => { + this.setState({customThemeUrl: e.target.value}); + }; + _renderProfileSection() { return (
@@ -368,6 +397,28 @@ export default class GeneralUserSettingsTab extends React.Component { />
; } + + let customThemeForm; + if (SettingsStore.isFeatureEnabled("feature_custom_themes")) { + customThemeForm = ( +
+ +
{this.state.customThemeError}
+ {_t("Add theme")} + + ); + } + return (
{_t("Theme")} @@ -380,6 +431,7 @@ export default class GeneralUserSettingsTab extends React.Component { return ; })} + {customThemeForm}
); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index ba48f7cd37..6984e21f06 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -379,6 +379,7 @@ "Multiple integration managers": "Multiple integration managers", "Try out new ways to ignore people (experimental)": "Try out new ways to ignore people (experimental)", "Show a presence dot next to DMs in the room list": "Show a presence dot next to DMs in the room list", + "Support adding custom themes": "Support adding custom themes", "Enable cross-signing to verify per-user instead of per-session (in development)": "Enable cross-signing to verify per-user instead of per-session (in development)", "Enable local event indexing and E2EE search (requires restart)": "Enable local event indexing and E2EE search (requires restart)", "Show info about bridges in room settings": "Show info about bridges in room settings", @@ -702,12 +703,16 @@ "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 sessions until you log back in to them": "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them", + "Invalid theme schema.": "Invalid theme schema.", + "Error downloading theme information.": "Error downloading theme information.", "Profile": "Profile", "Email addresses": "Email addresses", "Phone numbers": "Phone numbers", "Set a new account password...": "Set a new account password...", "Account": "Account", "Language and region": "Language and region", + "Custom theme URL": "Custom theme URL", + "Add theme": "Add theme", "Theme": "Theme", "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", diff --git a/src/settings/Settings.js b/src/settings/Settings.js index b77fb392e9..ba6df47a04 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -134,6 +134,12 @@ export const SETTINGS = { supportedLevels: LEVELS_FEATURE, default: false, }, + "feature_custom_themes": { + isFeature: true, + displayName: _td("Support adding custom themes"), + supportedLevels: LEVELS_FEATURE, + default: false, + }, "mjolnirRooms": { supportedLevels: ['account'], default: [], From 6269780f4b943ce4216faa6d29771dde3a599804 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 28 Feb 2020 13:57:56 -0700 Subject: [PATCH 099/522] Suggest the server's results as lower quality This is a quick win for fixing https://github.com/vector-im/riot-web/issues/12488 but might not be a long-term solution. Idea is to see how this feels and go from there, which may mean scoring the results again to filter them in or altering the debounce timers. --- src/components/views/dialogs/InviteDialog.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js index e8c39b6d5a..b1ad4a34d0 100644 --- a/src/components/views/dialogs/InviteDialog.js +++ b/src/components/views/dialogs/InviteDialog.js @@ -906,24 +906,24 @@ export default class InviteDialog extends React.PureComponent { // Mix in the server results if we have any, but only if we're searching. We track the additional // members separately because we want to filter sourceMembers but trust the mixin arrays to have // the right members in them. - let additionalMembers = []; + let priorityAdditionalMembers = []; // Shows up before our own suggestions, higher quality + let otherAdditionalMembers = []; // Shows up after our own suggestions, lower quality const hasMixins = this.state.serverResultsMixin || this.state.threepidResultsMixin; if (this.state.filterText && hasMixins && kind === 'suggestions') { // We don't want to duplicate members though, so just exclude anyone we've already seen. const notAlreadyExists = (u: Member): boolean => { return !sourceMembers.some(m => m.userId === u.userId) - && !additionalMembers.some(m => m.userId === u.userId); + && !priorityAdditionalMembers.some(m => m.userId === u.userId) + && !otherAdditionalMembers.some(m => m.userId === u.userId); }; - const uniqueServerResults = this.state.serverResultsMixin.filter(notAlreadyExists); - additionalMembers = additionalMembers.concat(...uniqueServerResults); - - const uniqueThreepidResults = this.state.threepidResultsMixin.filter(notAlreadyExists); - additionalMembers = additionalMembers.concat(...uniqueThreepidResults); + otherAdditionalMembers = this.state.serverResultsMixin.filter(notAlreadyExists); + priorityAdditionalMembers = this.state.threepidResultsMixin.filter(notAlreadyExists); } + const hasAdditionalMembers = priorityAdditionalMembers.length > 0 || otherAdditionalMembers.length > 0; // Hide the section if there's nothing to filter by - if (sourceMembers.length === 0 && additionalMembers.length === 0) return null; + if (sourceMembers.length === 0 && !hasAdditionalMembers) return null; // Do some simple filtering on the input before going much further. If we get no results, say so. if (this.state.filterText) { @@ -931,7 +931,7 @@ export default class InviteDialog extends React.PureComponent { sourceMembers = sourceMembers .filter(m => m.user.name.toLowerCase().includes(filterBy) || m.userId.toLowerCase().includes(filterBy)); - if (sourceMembers.length === 0 && additionalMembers.length === 0) { + if (sourceMembers.length === 0 && !hasAdditionalMembers) { return (

{sectionName}

@@ -943,7 +943,7 @@ export default class InviteDialog extends React.PureComponent { // Now we mix in the additional members. Again, we presume these have already been filtered. We // also assume they are more relevant than our suggestions and prepend them to the list. - sourceMembers = [...additionalMembers, ...sourceMembers]; + sourceMembers = [...priorityAdditionalMembers, ...sourceMembers, ...otherAdditionalMembers]; // If we're going to hide one member behind 'show more', just use up the space of the button // with the member's tile instead. From 7cfaa63aac337462f24aa5ddd1f473fa2ab7cc9a Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 28 Feb 2020 14:08:43 -0700 Subject: [PATCH 100/522] Fix the last char of people's names being cut off in the invite dialog If someone named "TravisR" was being searched for with just "Travis", the last R in their name would be cut off because of the highlighting. Entering "TravisR" would restore it. Likewise, searching for "vis" would have done the same thing. --- src/components/views/dialogs/InviteDialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js index e8c39b6d5a..a01c4cc481 100644 --- a/src/components/views/dialogs/InviteDialog.js +++ b/src/components/views/dialogs/InviteDialog.js @@ -219,7 +219,7 @@ class DMRoomTile extends React.PureComponent { } // Push any text we missed (end of text) - if (i < (str.length - 1)) { + if (i < str.length) { result.push({str.substring(i)}); } From 87e717cd397b651c6fef6a6d0a2ab3cc04b6f5df Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 28 Feb 2020 23:12:10 +0000 Subject: [PATCH 101/522] Fix Quote on search results page Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/MatrixChat.js | 14 ++++++++++---- src/components/structures/RoomView.js | 16 ++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index 448cce933d..bc11e66d2c 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -559,13 +559,19 @@ export default createReactClass({ case 'view_user_info': this._viewUser(payload.userId, payload.subAction); break; - case 'view_room': + case 'view_room': { // Takes either a room ID or room alias: if switching to a room the client is already // known to be in (eg. user clicks on a room in the recents panel), supply the ID // If the user is clicking on a room in the context of the alias being presented // to them, supply the room alias. If both are supplied, the room ID will be ignored. - this._viewRoom(payload); + const promise = this._viewRoom(payload); + if (payload.deferred_action) { + promise.then(() => { + dis.dispatch(payload.deferred_action); + }); + } break; + } case 'view_prev_room': this._viewNextRoom(-1); break; @@ -862,7 +868,7 @@ export default createReactClass({ waitFor = this.firstSyncPromise.promise; } - waitFor.then(() => { + return waitFor.then(() => { let presentedId = roomInfo.room_alias || roomInfo.room_id; const room = MatrixClientPeg.get().getRoom(roomInfo.room_id); if (room) { @@ -885,7 +891,7 @@ export default createReactClass({ presentedId += "/" + roomInfo.event_id; } newState.ready = true; - this.setState(newState, ()=>{ + this.setState(newState, () => { this.notifyNewScreen('room/' + presentedId); }); }); diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index edd916697a..36e30343e4 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -614,6 +614,22 @@ export default createReactClass({ this.onCancelSearchClick(); } break; + case 'quote': + if (this.state.searchResults) { + const roomId = payload.event.getRoomId(); + if (roomId === this.state.roomId) { + this.onCancelSearchClick(); + } + + setImmediate(() => { + dis.dispatch({ + action: 'view_room', + room_id: roomId, + deferred_action: payload, + }); + }); + } + break; } }, From 7cb514fccee44af497ef8a1e01a6f36339ae0a37 Mon Sep 17 00:00:00 2001 From: Szimszon Date: Fri, 28 Feb 2020 18:57:06 +0000 Subject: [PATCH 102/522] Translated using Weblate (Hungarian) Currently translated at 100.0% (2139 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 47f87967bb..4b9b6e3639 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2170,5 +2170,8 @@ "We recommend you change your password and recovery key in Settings immediately": "Javasoljuk, hogy a jelszavadat és a visszaállítási kulcsodat mihamarabb változtasd meg a Beállításokban", "Order rooms by name": "Szobák rendezése név szerint", "Show rooms with unread notifications first": "Olvasatlan üzeneteket tartalmazó szobák megjelenítése elől", - "Show shortcuts to recently viewed rooms above the room list": "Billentyűkombináció megjelenítése a nemrég meglátogatott szobákhoz a szoba lista felett" + "Show shortcuts to recently viewed rooms above the room list": "Billentyűkombináció megjelenítése a nemrég meglátogatott szobákhoz a szoba lista felett", + "Sign In or Create Account": "Belépés vagy Fiók Készítés", + "Use your account or create a new one to continue.": "A folytatáshoz használd a fiókodat vagy készíts egy újat.", + "Create Account": "Fiók létrehozása" } From 9ff053c5a9fd48c0516f21183f0621114f5ae062 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 29 Feb 2020 00:09:19 +0000 Subject: [PATCH 103/522] Fix MELS not breaking on day boundaries regression Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/MessagePanel.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/structures/MessagePanel.js b/src/components/structures/MessagePanel.js index d0e35e1c2b..dd47028f8e 100644 --- a/src/components/structures/MessagePanel.js +++ b/src/components/structures/MessagePanel.js @@ -955,6 +955,9 @@ class MemberGrouper { } shouldGroup(ev) { + if (this.panel._wantsDateSeparator(this.events[0], ev.getDate())) { + return false; + } return isMembershipChange(ev); } From 86a1327259da5c1ed573bd4a3fd29c3acb5ef018 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 29 Feb 2020 00:31:56 +0000 Subject: [PATCH 104/522] don't show "This alias is available to use" if an alias is not provided Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/elements/RoomAliasField.js | 1 + src/components/views/elements/Validation.js | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/views/elements/RoomAliasField.js b/src/components/views/elements/RoomAliasField.js index 007bd07a47..0139a9596b 100644 --- a/src/components/views/elements/RoomAliasField.js +++ b/src/components/views/elements/RoomAliasField.js @@ -92,6 +92,7 @@ export default class RoomAliasField extends React.PureComponent { invalid: () => _t("Please provide a room alias"), }, { key: "taken", + skip: ({value}) => !value, test: async ({value}) => { if (!value) { return true; diff --git a/src/components/views/elements/Validation.js b/src/components/views/elements/Validation.js index 31363b87c8..3454ab3aec 100644 --- a/src/components/views/elements/Validation.js +++ b/src/components/views/elements/Validation.js @@ -51,9 +51,16 @@ export default function withValidation({ description, rules }) { if (!rule.key || !rule.test) { continue; } + + const data = { value, allowEmpty }; + + if (rule.skip && rule.skip.call(this, data)) { + continue; + } + // We're setting `this` to whichever component holds the validation // function. That allows rules to access the state of the component. - const ruleValid = await rule.test.call(this, { value, allowEmpty }); + const ruleValid = await rule.test.call(this, data); valid = valid && ruleValid; if (ruleValid && rule.valid) { // If the rule's result is valid and has text to show for From 3e85f65d9e7a5b3a64091e061ff1137a9b58fcab Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 29 Feb 2020 00:36:01 +0000 Subject: [PATCH 105/522] Also skip alias availability check if alias looks invalid Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/elements/RoomAliasField.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/views/elements/RoomAliasField.js b/src/components/views/elements/RoomAliasField.js index 0139a9596b..06e608b14c 100644 --- a/src/components/views/elements/RoomAliasField.js +++ b/src/components/views/elements/RoomAliasField.js @@ -38,6 +38,13 @@ export default class RoomAliasField extends React.PureComponent { return `#${localpart}:${this.props.domain}`; } + _isValid(value) { + const fullAlias = this._asFullAlias(value); + // XXX: FIXME https://github.com/matrix-org/matrix-doc/issues/668 + return !value.includes("#") && !value.includes(":") && !value.includes(",") && + encodeURI(fullAlias) === fullAlias; + } + render() { const Field = sdk.getComponent('views.elements.Field'); const poundSign = (#); @@ -80,10 +87,7 @@ export default class RoomAliasField extends React.PureComponent { if (!value) { return true; } - const fullAlias = this._asFullAlias(value); - // XXX: FIXME https://github.com/matrix-org/matrix-doc/issues/668 - return !value.includes("#") && !value.includes(":") && !value.includes(",") && - encodeURI(fullAlias) === fullAlias; + return this._isValid(value); }, invalid: () => _t("Some characters not allowed"), }, { @@ -92,7 +96,7 @@ export default class RoomAliasField extends React.PureComponent { invalid: () => _t("Please provide a room alias"), }, { key: "taken", - skip: ({value}) => !value, + skip: ({value}) => !value || !this._isValid(value), test: async ({value}) => { if (!value) { return true; From 3a7454a52f4d39bea227be8184b16e15b68a4249 Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Fri, 28 Feb 2020 18:37:52 -0600 Subject: [PATCH 106/522] Use !== instead Signed-off-by: Aaron Raimist --- src/components/structures/LoggedInView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/LoggedInView.js b/src/components/structures/LoggedInView.js index 023272cef1..20217548b7 100644 --- a/src/components/structures/LoggedInView.js +++ b/src/components/structures/LoggedInView.js @@ -586,7 +586,7 @@ const LoggedInView = createReactClass({ />; } else if (this.props.showCookieBar && this.props.config.piwik && - navigator.doNotTrack != 1 + navigator.doNotTrack !== "1" ) { const policyUrl = this.props.config.piwik.policyUrl || null; topBar = ; From 8aaab0a3baa7efd812df05a401c1c7138fdd97ff Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 29 Feb 2020 01:00:57 +0000 Subject: [PATCH 107/522] refactor to add Validation::final Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/elements/RoomAliasField.js | 14 +++++--------- src/components/views/elements/Validation.js | 6 ++++++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/components/views/elements/RoomAliasField.js b/src/components/views/elements/RoomAliasField.js index 06e608b14c..b38047cd3b 100644 --- a/src/components/views/elements/RoomAliasField.js +++ b/src/components/views/elements/RoomAliasField.js @@ -38,13 +38,6 @@ export default class RoomAliasField extends React.PureComponent { return `#${localpart}:${this.props.domain}`; } - _isValid(value) { - const fullAlias = this._asFullAlias(value); - // XXX: FIXME https://github.com/matrix-org/matrix-doc/issues/668 - return !value.includes("#") && !value.includes(":") && !value.includes(",") && - encodeURI(fullAlias) === fullAlias; - } - render() { const Field = sdk.getComponent('views.elements.Field'); const poundSign = (#); @@ -87,7 +80,10 @@ export default class RoomAliasField extends React.PureComponent { if (!value) { return true; } - return this._isValid(value); + const fullAlias = this._asFullAlias(value); + // XXX: FIXME https://github.com/matrix-org/matrix-doc/issues/668 + return !value.includes("#") && !value.includes(":") && !value.includes(",") && + encodeURI(fullAlias) === fullAlias; }, invalid: () => _t("Some characters not allowed"), }, { @@ -96,7 +92,7 @@ export default class RoomAliasField extends React.PureComponent { invalid: () => _t("Please provide a room alias"), }, { key: "taken", - skip: ({value}) => !value || !this._isValid(value), + final: true, test: async ({value}) => { if (!value) { return true; diff --git a/src/components/views/elements/Validation.js b/src/components/views/elements/Validation.js index 3454ab3aec..2be526a3c3 100644 --- a/src/components/views/elements/Validation.js +++ b/src/components/views/elements/Validation.js @@ -28,9 +28,11 @@ import classNames from 'classnames'; * An array of rules describing how to check to input value. Each rule in an object * and may have the following properties: * - `key`: A unique ID for the rule. Required. + * - `skip`: A function used to determine whether the rule should even be evaluated. * - `test`: A function used to determine the rule's current validity. Required. * - `valid`: Function returning text to show when the rule is valid. Only shown if set. * - `invalid`: Function returning text to show when the rule is invalid. Only shown if set. + * - `final`: A Boolean if true states that this rule will only be considered if all rules before it returned valid. * @returns {Function} * A validation function that takes in the current input value and returns * the overall validity and a feedback UI that can be rendered for more detail. @@ -52,6 +54,10 @@ export default function withValidation({ description, rules }) { continue; } + if (!valid && rule.final) { + continue; + } + const data = { value, allowEmpty }; if (rule.skip && rule.skip.call(this, data)) { From a5e664410f9b45d727b2958c11ae4671564ea8a6 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 29 Feb 2020 01:29:52 +0000 Subject: [PATCH 108/522] Add /whois SlashCommand to open UserInfo Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/SlashCommands.js | 20 ++++++++++++++++++++ src/i18n/strings/en_EN.json | 1 + 2 files changed, 21 insertions(+) diff --git a/src/SlashCommands.js b/src/SlashCommands.js index b39b8fb9ac..d306978f78 100644 --- a/src/SlashCommands.js +++ b/src/SlashCommands.js @@ -893,6 +893,26 @@ export const CommandMap = { }, category: CommandCategories.advanced, }), + + whois: new Command({ + name: "whois", + description: _td("Displays information about a user"), + args: '', + runFn: function(roomId, userId) { + if (!userId || !userId.startsWith("@") || !userId.includes(":")) { + return reject(this.getUsage()); + } + + const member = MatrixClientPeg.get().getRoom(roomId).getMember(userId); + + dis.dispatch({ + action: 'view_user', + member: member || {userId}, + }); + return success(); + }, + category: CommandCategories.advanced, + }), }; /* eslint-enable babel/no-invalid-this */ diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index ba48f7cd37..ab18c58e90 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -204,6 +204,7 @@ "Sends the given message coloured as a rainbow": "Sends the given message coloured as a rainbow", "Sends the given emote coloured as a rainbow": "Sends the given emote coloured as a rainbow", "Displays list of commands with usages and descriptions": "Displays list of commands with usages and descriptions", + "Displays information about a user": "Displays information about a user", "Reason": "Reason", "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s accepted the invitation for %(displayName)s.", "%(targetName)s accepted an invitation.": "%(targetName)s accepted an invitation.", From 4996139b1a933cb4baf180ce05de106e907eef0a Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 29 Feb 2020 01:56:02 +0000 Subject: [PATCH 109/522] word-break in pills and wrap the background correctly Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/elements/_RichText.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/res/css/views/elements/_RichText.scss b/res/css/views/elements/_RichText.scss index 73f0be291f..5066ee10f3 100644 --- a/res/css/views/elements/_RichText.scss +++ b/res/css/views/elements/_RichText.scss @@ -13,6 +13,11 @@ padding-left: 5px; } +a.mx_Pill { + word-break: break-all; + display: inline; +} + /* More specific to override `.markdown-body a` text-decoration */ .mx_EventTile_content .markdown-body a.mx_Pill { text-decoration: none; From 1e260565c26068d4d69e577a7c7bd38eb4ebe154 Mon Sep 17 00:00:00 2001 From: Michal Stanke Date: Sat, 29 Feb 2020 21:49:33 +0000 Subject: [PATCH 110/522] Translated using Weblate (Czech) Currently translated at 99.1% (2120 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/cs/ --- src/i18n/strings/cs.json | 940 +++++++++++++++++++-------------------- 1 file changed, 470 insertions(+), 470 deletions(-) diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index 1ef1979a9e..3b1d7416b1 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -1,13 +1,13 @@ { "Close": "Zavřít", "Favourites": "Oblíbené", - "Filter room members": "Filtrovat členy místnosti", + "Filter room members": "Najít člena místnosti", "Historical": "Historické", "Home": "Úvod", "Jump to first unread message.": "Přeskočit na první nepřečtenou zprávu.", "Logout": "Odhlásit se", "Low priority": "Nízká priorita", - "Notifications": "Upozornění", + "Notifications": "Oznámení", "Rooms": "Místnosti", "Search": "Hledání", "Settings": "Nastavení", @@ -36,12 +36,12 @@ "There are no visible files in this room": "V této místnosti nejsou žádné viditelné soubory", "Create new room": "Založit novou místnost", "Room directory": "Adresář místností", - "Start chat": "Začít chat", + "Start chat": "Zahájit konverzaci", "Options": "Volby", "Register": "Zaregistrovat", "Cancel": "Storno", "Error": "Chyba", - "Favourite": "V oblíbených", + "Favourite": "Oblíbené", "Mute": "Ztlumit", "Continue": "Pokračovat", "Failed to change password. Is your password correct?": "Nepodařilo se změnit heslo. Zadáváte své heslo správně?", @@ -51,13 +51,13 @@ "OK": "OK", "Failed to forget room %(errCode)s": "Nepodařilo se zapomenout místnost %(errCode)s", "Dismiss": "Zahodit", - "powered by Matrix": "poháněno Matrixem", - "Custom Server Options": "Vlastní serverové volby", + "powered by Matrix": "používá protokol Matrix", + "Custom Server Options": "Vlastní nastavení serveru", "Add a widget": "Přidat widget", "Accept": "Přijmout", - "%(targetName)s accepted an invitation.": "%(targetName)s přijal/a pozvání.", + "%(targetName)s accepted an invitation.": "Uživatel %(targetName)s přijal pozvání.", "Account": "Účet", - "Access Token:": "Přístupový žeton:", + "Access Token:": "Přístupový token:", "Add": "Přidat", "Add a topic": "Přidat téma", "Admin": "Správce", @@ -67,7 +67,7 @@ "Default Device": "Výchozí zařízení", "Microphone": "Mikrofon", "Camera": "Kamera", - "Advanced": "Pokročilé", + "Advanced": "Rozšířené", "Algorithm": "Algoritmus", "Always show message timestamps": "Vždy zobrazovat časové značky zpráv", "Authentication": "Ověření", @@ -79,25 +79,25 @@ "Are you sure you want to reject the invitation?": "Určitě chcete odmítnout pozvání?", "Attachment": "Příloha", "Autoplay GIFs and videos": "Automaticky přehrávat GIFy a videa", - "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Nelze se připojit k domovskému serveru – zkontrolujte prosím své připojení, prověřte, zdali je SSL certifikát vašeho domovského serveru důvěryhodný, a že některé z rozšíření prohlížeče neblokuje komunikaci.", - "Anyone who knows the room's link, apart from guests": "Kdokoliv, kdo má odkaz na místnost, kromě hostů", - "Anyone who knows the room's link, including guests": "Kdokoliv, kdo má odkaz na místnost, a to i hosté", + "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Nelze se připojit k domovskému serveru – zkontrolujte prosím své připojení, prověřte, zda je SSL certifikát vašeho domovského serveru důvěryhodný, a že některé z rozšíření prohlížeče neblokuje komunikaci.", + "Anyone who knows the room's link, apart from guests": "Kdokoliv s odkazem na místnost, kromě hostů", + "Anyone who knows the room's link, including guests": "Kdokoliv s odkazem na místnost, včetně hostů", "Banned users": "Vykázaní uživatelé", "Ban": "Vykázat", "Bans user with given id": "Vykáže uživatele s daným id", "Cannot add any more widgets": "Nelze přidat žádné další widgety", "Change Password": "Změnit heslo", - "%(senderName)s changed their profile picture.": "%(senderName)s změnil/a svůj profilový obrázek.", - "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s změnil/a název místnosti na %(roomName)s.", - "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s odstranil/a název místnosti.", - "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s změnil/a téma na „%(topic)s“.", + "%(senderName)s changed their profile picture.": "Uživatel %(senderName)s změnil svůj profilový obrázek.", + "%(senderDisplayName)s changed the room name to %(roomName)s.": "Uživatel %(senderDisplayName)s změnil název místnosti na %(roomName)s.", + "%(senderDisplayName)s removed the room name.": "Uživatel %(senderDisplayName)s odstranil název místnosti.", + "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "Uživatel %(senderDisplayName)s změnil téma na „%(topic)s“.", "Changes your display nickname": "Změní vaši zobrazovanou přezdívku", "Command error": "Chyba příkazu", "Commands": "Příkazy", "Confirm password": "Potvrďte heslo", "Could not connect to the integration server": "Nepodařilo se spojit se začleňovacím serverem", "Create Room": "Vytvořit místnost", - "Cryptography": "Kryptografie", + "Cryptography": "Šifrování", "Current password": "Současné heslo", "Custom": "Vlastní", "Custom level": "Vlastní úroveň", @@ -110,18 +110,18 @@ "Default": "Výchozí", "Device ID": "ID zařízení", "device id: ": "id zařízení: ", - "Direct chats": "Přímé chaty", - "Disable Notifications": "Vypnout upozornění", + "Direct chats": "Přímé zprávy", + "Disable Notifications": "Vypnout oznámení", "Disinvite": "Odvolat pozvání", "Download %(text)s": "Stáhnout %(text)s", "Drop File Here": "Přetáhněte soubor sem", "Edit": "Upravit", "Email": "E-mail", "Email address": "E-mailová adresa", - "Emoji": "Emodži", - "Enable automatic language detection for syntax highlighting": "Zapnout kvůli zvýrazňování syntaxe automatické rozpoznávání jazyka", - "Enable Notifications": "Zapnout upozornění", - "%(senderName)s ended the call.": "%(senderName)s ukončil/a hovor.", + "Emoji": "Emoji", + "Enable automatic language detection for syntax highlighting": "Zapnout automatické rozpoznávání jazyků pro zvýrazňování syntaxe", + "Enable Notifications": "Zapnout oznámení", + "%(senderName)s ended the call.": "Uživatel %(senderName)s ukončil hovor.", "End-to-end encryption information": "Informace o end-to-end šifrování", "Enter passphrase": "Zadejte heslo", "Error decrypting attachment": "Chyba při dešifrování přílohy", @@ -129,7 +129,7 @@ "Event information": "Informace o události", "Existing Call": "Probíhající hovor", "Export": "Exportovat", - "Export E2E room keys": "Exportovat E2E klíče místnosti", + "Export E2E room keys": "Exportovat end-to-end klíče místnosti", "Failed to ban user": "Nepodařilo se vykázat uživatele", "Failed to join room": "Vstup do místnosti se nezdařil", "Failed to kick": "Vykopnutí se nezdařilo", @@ -147,39 +147,39 @@ "Forget room": "Zapomenout místnost", "For security, this session has been signed out. Please sign in again.": "Z bezpečnostních důvodů bylo toto přihlášení ukončeno. Přihlašte se prosím znovu.", "and %(count)s others...|other": "a %(count)s další...", - "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s widget upravil/a %(senderName)s", - "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget odstranil/a %(senderName)s", - "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s widget přidal/a %(senderName)s", - "Automatically replace plain text Emoji": "Automaticky nahrazovat textové emotikony", + "%(widgetName)s widget modified by %(senderName)s": "Uživatel %(senderName)s upravil widget %(widgetName)s", + "%(widgetName)s widget removed by %(senderName)s": "Uživatel %(senderName)s odstranil widget %(widgetName)s", + "%(widgetName)s widget added by %(senderName)s": "Uživatel %(senderName)s přidal widget %(widgetName)s", + "Automatically replace plain text Emoji": "Automaticky nahrazovat textové emoji", "Failed to upload image": "Obrázek se nepodařilo nahrát", - "%(senderName)s answered the call.": "%(senderName)s přijal/a hovor.", - "Click to mute audio": "Kliknutím ztlumíte zvuk", - "Failed to verify email address: make sure you clicked the link in the email": "E-mailovou adresu se nepodařilo ověřit. Přesvědčte se, že jste kliknul/a na zaslaný odkaz", + "%(senderName)s answered the call.": "Uživatel %(senderName)s přijal hovor.", + "Click to mute audio": "Klepněte pro vypnutí zvuku", + "Failed to verify email address: make sure you clicked the link in the email": "E-mailovou adresu se nepodařilo ověřit. Přesvědčte se, že jste klepli na odkaz v e-mailové zprávě", "Guests cannot join this room even if explicitly invited.": "Hosté nemohou vstoupit do této místnosti, i když jsou přímo pozváni.", "Homeserver is": "Domovský server je", "Identity Server is": "Server identity je", - "I have verified my email address": "Ověřil/a jsem svoji e-mailovou adresu", + "I have verified my email address": "Ověřil/a jsem svou e-mailovou adresu", "Import": "Importovat", - "Import E2E room keys": "Importovat E2E klíče místností", + "Import E2E room keys": "Importovat end-to-end klíče místností", "Incoming call from %(name)s": "Příchozí hovor od %(name)s", "Incoming video call from %(name)s": "Příchozí videohovor od %(name)s", "Incoming voice call from %(name)s": "Příchozí hlasový hovor od %(name)s", "Incorrect username and/or password.": "Nesprávné uživatelské jméno nebo heslo.", "Incorrect verification code": "Nesprávný ověřovací kód", "Invalid Email Address": "Neplatná e-mailová adresa", - "%(senderName)s invited %(targetName)s.": "%(senderName)s pozval/a %(targetName)s.", + "%(senderName)s invited %(targetName)s.": "Uživatel %(senderName)s pozval uživatele %(targetName)s.", "Invites": "Pozvánky", "Invites user with given id to current room": "Pozve do aktuální místnosti uživatele s daným id", "Join Room": "Vstoupit do místnosti", - "%(targetName)s joined the room.": "%(targetName)s vstoupil/a do místnosti.", - "%(senderName)s kicked %(targetName)s.": "%(senderName)s vykopnul/a %(targetName)s.", + "%(targetName)s joined the room.": "Uživatel %(targetName)s vstoupil do místnosti.", + "%(senderName)s kicked %(targetName)s.": "Uživatel %(senderName)s vykopl uživatele %(targetName)s.", "Kick": "Vykopnout", "Kicks user with given id": "Vykopne uživatele s daným id", - "Last seen": "Naposledy viděn/a", + "Last seen": "Naposledy aktivní", "Leave room": "Odejít z místnosti", "Local addresses for this room:": "Místní adresy této místnosti:", "Moderator": "Moderátor", - "Name": "Jméno", + "Name": "Název", "New address (e.g. #foo:%(localDomain)s)": "Nová adresa (např. #neco:%(localDomain)s)", "New passwords don't match": "Nová hesla se neshodují", "New passwords must match each other.": "Nová hesla se musí shodovat.", @@ -198,7 +198,7 @@ "Passwords can't be empty": "Hesla nemohou být prázdná", "Permissions": "Oprávnění", "Phone": "Telefon", - "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s změnil/a úroveň oprávnění o %(powerLevelDiffText)s.", + "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "Uživatel %(senderName)s změnil úroveň oprávnění o %(powerLevelDiffText)s.", "Define the power level of a user": "Stanovte úroveň oprávnění uživatele", "Failed to change power level": "Nepodařilo se změnit úroveň oprávnění", "Power level must be positive integer.": "Úroveň oprávnění musí být kladné celé číslo.", @@ -207,8 +207,8 @@ "Alias (optional)": "Alias (nepovinný)", "Results from DuckDuckGo": "Výsledky z DuckDuckGo", "Return to login screen": "Vrátit k přihlašovací obrazovce", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot není oprávněn posílat vám upozornění – zkontrolujte prosím nastavení svého prohlížeče", - "Riot was not given permission to send notifications - please try again": "Riot nebyl oprávněn k posílání upozornění – zkuste to prosím znovu", + "Riot does not have permission to send you notifications - please check your browser settings": "Riot není oprávněn posílat vám oznámení – zkontrolujte prosím nastavení svého prohlížeče", + "Riot was not given permission to send notifications - please try again": "Riot nebyl oprávněn k posílání oznámení – zkuste to prosím znovu", "riot-web version:": "verze riot-web:", "Room %(roomId)s not visible": "Místnost %(roomId)s není viditelná", "Room Colour": "Barva místnosti", @@ -218,32 +218,32 @@ "Scroll to bottom of page": "Přejít na konec stránky", "Send anyway": "Přesto poslat", "Send Reset Email": "Poslat resetovací e-mail", - "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s poslal/a obrázek.", - "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s poslal/a %(targetDisplayName)s pozvánku ke vstupu do místnosti.", + "%(senderDisplayName)s sent an image.": "Uživatel %(senderDisplayName)s poslal obrázek.", + "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "Uživatel %(senderName)s pozval uživatele %(targetDisplayName)s ke vstupu do místnosti.", "Server error": "Chyba serveru", "Server may be unavailable, overloaded, or search timed out :(": "Server může být nedostupný, přetížený nebo vyhledávání vypršelo :(", "Server may be unavailable, overloaded, or you hit a bug.": "Server může být nedostupný, přetížený nebo jste narazili na chybu.", "Server unavailable, overloaded, or something else went wrong.": "Server je nedostupný, přetížený nebo se něco pokazilo.", "Session ID": "ID sezení", - "%(senderName)s set a profile picture.": "%(senderName)s si nastavil/a profilový obrázek.", - "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s si změnil/a zobrazované jméno na %(displayName)s.", + "%(senderName)s set a profile picture.": "Uživatel %(senderName)s si nastavil profilový obrázek.", + "%(senderName)s set their display name to %(displayName)s.": "Uživatel %(senderName)s si změnil zobrazované jméno na %(displayName)s.", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Zobrazovat čas v 12hodinovém formátu (např. 2:30 odp.)", "Sign in": "Přihlásit", "Sign out": "Odhlásit", "%(count)s of your messages have not been sent.|other": "Některé z vašich zpráv nebyly odeslány.", "Someone": "Někdo", - "Start a chat": "Začít chat", + "Start a chat": "Zahájit konverzaci", "Start authentication": "Začít ověření", "Submit": "Odeslat", "Success": "Úspěch", "The phone number entered looks invalid": "Zadané telefonní číslo se zdá být neplatné", - "This email address is already in use": "Tato e-mailová adresa je již používaná", + "This email address is already in use": "Tato e-mailová adresa je již požívána", "This email address was not found": "Tato e-mailová adresa nebyla nalezena", "This room has no local addresses": "Tato místnost nemá žádné místní adresy", "This room is not recognised.": "Tato místnost nebyla rozpoznána.", "VoIP is unsupported": "VoIP není podporován", "Warning!": "Varování!", - "Who can access this room?": "Kdo má přístup k této místnosti?", + "Who can access this room?": "Kdo má přístup do této místnosti?", "Who can read history?": "Kdo může číst historii?", "You are not in this room.": "Nejste v této místnosti.", "You do not have permission to do that in this room.": "V této místnosti nemáte na toto právo.", @@ -253,33 +253,33 @@ "Online": "Online", "Offline": "Offline", "Check for update": "Zkontrolovat aktualizace", - "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s přijal/a pozvánku pro %(displayName)s.", + "%(targetName)s accepted the invitation for %(displayName)s.": "Uživatel %(targetName)s přijal pozvání pro %(displayName)s.", "Active call (%(roomName)s)": "Probíhající hovor (%(roomName)s)", - "%(senderName)s banned %(targetName)s.": "%(senderName)s vykázal/a %(targetName)s.", - "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Nelze se připojit k domovskému serveru přes HTTP, pokud je v adresním řádku HTTPS. Buď použijte HTTPS, nebo povolte nebezpečné scripty.", - "Click here to fix": "Klikněte zde pro opravu", - "Click to mute video": "Klikněte pro zakázání videa", - "click to reveal": "klikněte pro odhalení", - "Click to unmute video": "Klikněte pro povolení videa", - "Click to unmute audio": "Klikněte pro povolení zvuku", + "%(senderName)s banned %(targetName)s.": "Uživatel %(senderName)s vykázal uživatele %(targetName)s.", + "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Nelze se připojit k domovskému serveru přes HTTP, pokud je v adresním řádku HTTPS. Buď použijte HTTPS, nebo povolte nezabezpečené skripty.", + "Click here to fix": "Pro opravu klepněte zde", + "Click to mute video": "Klepněte pro zakázání videa", + "click to reveal": "pro odhlení klepněte", + "Click to unmute video": "Klepněte pro povolení videa", + "Click to unmute audio": "Klepněte pro povolení zvuku", "Displays action": "Zobrazí akci", "Ed25519 fingerprint": "Ed25519 otisk", "Fill screen": "Vyplnit obrazovku", "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s z %(fromPowerLevel)s na %(toPowerLevel)s", "This doesn't appear to be a valid email address": "Tato e-mailová adresa se zdá být neplatná", - "This phone number is already in use": "Toto číslo se již používá", + "This phone number is already in use": "Toto telefonní číslo je již používáno", "This room is not accessible by remote Matrix servers": "Tato místnost není přístupná vzdáleným Matrix serverům", "To use it, just wait for autocomplete results to load and tab through them.": "Použijte tak, že vyčkáte na načtení našeptávaných výsledků a ty pak projdete tabulátorem.", - "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Nemáte práva k zobrazení zprávy v daném časovém úseku.", - "Tried to load a specific point in this room's timeline, but was unable to find it.": "Zpráva v daném časovém úseku nenalezena.", + "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Pokusili jste se načíst bod v časové ose místnosti, ale pro zobrazení zpráv z daného časového úseku nemáte oprávnění.", + "Tried to load a specific point in this room's timeline, but was unable to find it.": "Pokusili jste se načíst bod v časové ose místnosti, ale nepodařilo se ho najít.", "Unable to add email address": "Nepodařilo se přidat e-mailovou adresu", "Unable to create widget.": "Nepodařilo se vytvořit widget.", "Unable to remove contact information": "Nepodařilo se smazat kontaktní údaje", "Unable to verify email address.": "Nepodařilo se ověřit e-mailovou adresu.", "Unban": "Přijmout zpět", - "%(senderName)s unbanned %(targetName)s.": "%(senderName)s přijal/a zpět %(targetName)s.", + "%(senderName)s unbanned %(targetName)s.": "Uživatel %(senderName)s přijal zpět uživatele %(targetName)s.", "Unable to capture screen": "Nepodařilo se zachytit obrazovku", - "Unable to enable Notifications": "Nepodařilo se povolit upozornění", + "Unable to enable Notifications": "Nepodařilo se povolit oznámení", "unencrypted": "nešifrované", "unknown caller": "neznámý volající", "unknown device": "neznámé zařízení", @@ -287,14 +287,14 @@ "Unmute": "Povolit", "Unnamed Room": "Nepojmenovaná místnost", "Unrecognised room alias:": "Nerozpoznaný alias místnosti:", - "Uploading %(filename)s and %(count)s others|zero": "Nahrávám %(filename)s", - "Uploading %(filename)s and %(count)s others|one": "Nahrávám %(filename)s a %(count)s další", - "Uploading %(filename)s and %(count)s others|other": "Nahrávám %(filename)s a %(count)s další", + "Uploading %(filename)s and %(count)s others|zero": "Nahrávání souboru %(filename)s", + "Uploading %(filename)s and %(count)s others|one": "Nahrávání souboru %(filename)s a %(count)s dalších", + "Uploading %(filename)s and %(count)s others|other": "Nahrávání souboru %(filename)s a %(count)s dalších", "Upload Failed": "Nahrávání selhalo", "Upload file": "Nahrát soubor", "Upload new:": "Nahrát nový:", "Usage": "Použití", - "Use compact timeline layout": "Použít kompaktní rozvržení timeline", + "Use compact timeline layout": "Použít kompaktní rozvržení časové osy", "User ID": "ID uživatele", "Username invalid: %(errMessage)s": "Neplatné uživatelské jméno: %(errMessage)s", "Users": "Uživatelé", @@ -323,7 +323,7 @@ "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Vaše e-mailová adresa zřejmě nepatří k žádnému Matrix ID na tomto domovském serveru.", "Failed to invite": "Pozvání se nezdařilo", "Failed to invite the following users to the %(roomName)s room:": "Do místnosti %(roomName)s se nepodařilo pozvat následující uživatele:", - "You need to be logged in.": "Musíte být přihlášen/a.", + "You need to be logged in.": "Musíte být přihlášeni.", "You are now ignoring %(userId)s": "Nyní ignorujete %(userId)s", "You are no longer ignoring %(userId)s": "Už neignorujete %(userId)s", "Add rooms to this community": "Přidat místnosti do této skupiny", @@ -333,11 +333,11 @@ "Reason": "Důvod", "VoIP conference started.": "VoIP konference započata.", "VoIP conference finished.": "VoIP konference ukončena.", - "%(targetName)s left the room.": "%(targetName)s opustil/a místnost.", + "%(targetName)s left the room.": "Uživatel %(targetName)s opustil místnost.", "You are already in a call.": "Již máte probíhající hovor.", - "%(senderName)s requested a VoIP conference.": "%(senderName)s požádal/a o VoIP konferenci.", - "%(senderName)s removed their profile picture.": "%(senderName)s odstranil/a svůj profilový obrázek.", - "%(targetName)s rejected the invitation.": "%(targetName)s odmítl/a pozvání.", + "%(senderName)s requested a VoIP conference.": "Uživatel %(senderName)s požádal o VoIP konferenci.", + "%(senderName)s removed their profile picture.": "Uživatel %(senderName)s odstranil svůj profilový obrázek.", + "%(targetName)s rejected the invitation.": "Uživatel %(targetName)s odmítl pozvání.", "Communities": "Skupiny", "Message Pinning": "Připíchnutí zprávy", "Your browser does not support the required cryptography extensions": "Váš prohlížeč nepodporuje požadovaná kryptografická rozšíření", @@ -348,29 +348,29 @@ "Admin Tools": "Nástroje pro správce", "No pinned messages.": "Žádné připíchnuté zprávy.", "Pinned Messages": "Připíchnuté zprávy", - "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s odstranil/a svoje zobrazované jméno (%(oldDisplayName)s).", - "%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s odvolal/a pozvánku pro %(targetName)s.", - "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s učinil/a budoucí historii místnosti viditelnou všem členům, a to od chvíle jejich pozvání.", - "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s učinil/a budoucí historii místnosti viditelnou všem členům, a to od chvíle jejich vstupu do místnosti.", - "%(senderName)s made future room history visible to all room members.": "%(senderName)s učinil/a budoucí historii místnosti viditelnou všem členům.", - "%(senderName)s made future room history visible to anyone.": "%(senderName)s učinil/a budoucí historii místnosti viditelnou komukoliv.", - "%(senderName)s changed the pinned messages for the room.": "%(senderName)s změnil/a připíchnuté zprávy této místnosti.", + "%(senderName)s removed their display name (%(oldDisplayName)s).": "Uživatel %(senderName)s odstranil své zobrazované jméno (%(oldDisplayName)s).", + "%(senderName)s withdrew %(targetName)s's invitation.": "Uživatel %(senderName)s zrušil pozvání pro uživatele %(targetName)s.", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "Uživatel %(senderName)s nastavil viditelnost budoucích zpráv v této místnosti pro všechny její členy, a to od chvíle jejich pozvání.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "Uživatel %(senderName)s nastavil viditelnost budoucích zpráv v této místnosti pro všechny její členy, a to od chvíle jejich vstupu.", + "%(senderName)s made future room history visible to all room members.": "Uživatel %(senderName)s nastavil viditelnost budoucích zpráv v této místnosti pro všechny její členy.", + "%(senderName)s made future room history visible to anyone.": "Uživatel %(senderName)s nastavil viditelnost budoucích zpráv pro kohokoliv.", + "%(senderName)s changed the pinned messages for the room.": "Uživatel %(senderName)s změnil připíchnuté zprávy této místnosti.", "Authentication check failed: incorrect password?": "Kontrola ověření selhala: špatné heslo?", "You need to be able to invite users to do that.": "Pro tuto akci musíte mít právo zvát uživatele.", "Delete Widget": "Smazat widget", "Error decrypting image": "Chyba při dešifrování obrázku", "Error decrypting video": "Chyba při dešifrování videa", - "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s odstranil/a avatar místnosti.", - "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s změnil/a avatar místnosti na ", + "%(senderDisplayName)s removed the room avatar.": "Uživatel %(senderDisplayName)s odstranil avatar místnosti.", + "%(senderDisplayName)s changed the room avatar to ": "Uživatel %(senderDisplayName)s změnil avatar místnosti na ", "Copied!": "Zkopírováno!", "Failed to copy": "Nepodařilo se zkopírovat", "Removed or unknown message type": "Zpráva odstraněna nebo neznámého typu", - "Message removed by %(userId)s": "Zprávu odstranil/a %(userId)s", - "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Smazáním widgetu jej odstraníte všem uživatelům v této místnosti. Určitě chcete tento widget smazat?", + "Message removed by %(userId)s": "Zprávu odstranil uživatel %(userId)s", + "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Smazáním widgetu ho odstraníte všem uživatelům v této místnosti. Opravdu chcete tento widget smazat?", "The maximum permitted number of widgets have already been added to this room.": "V této místnosti již bylo dosaženo limitu pro maximální počet widgetů.", "Drop file here to upload": "Přetažením sem nahrajete", "Example": "Příklad", - "Create Community": "Vytvořit komunitu", + "Create Community": "Vytvořit skupinu", "Community Name": "Název skupiny", "Community ID": "ID skupiny", "example": "příklad", @@ -407,12 +407,12 @@ "Failed to remove user from community": "Nepodařilo se odebrat uživatele ze skupiny", "Failed to remove room from community": "Nepodařilo se odebrat místnost ze skupiny", "Failed to remove '%(roomName)s' from %(groupId)s": "'%(roomName)s' se nepodařilo odebrat z %(groupId)s", - "Failed to update community": "Nepodařilo se aktualizovat komunitu", + "Failed to update community": "Skupinu se nepodařilo aktualizovat", "Failed to load %(groupId)s": "Nepodařilo se načíst %(groupId)s", "Search failed": "Vyhledávání selhalo", "Failed to fetch avatar URL": "Nepodařilo se získat adresu avataru", "Error decrypting audio": "Chyba při dešifrování zvuku", - "Banned by %(displayName)s": "Vykázán/a uživatelem %(displayName)s", + "Banned by %(displayName)s": "Vstup byl zakázán uživatelem %(displayName)s", "Privileged Users": "Privilegovaní uživatelé", "No users have specific privileges in this room": "Žádní uživatelé v této místnosti nemají zvláštní privilegia", "Publish this room to the public in %(domain)s's room directory?": "Zapsat tuto místnost do veřejného adresáře místností na %(domain)s?", @@ -420,21 +420,21 @@ "Invalid community ID": "Neplatné ID skupiny", "'%(groupId)s' is not a valid community ID": "'%(groupId)s' není platné ID skupiny", "New community ID (e.g. +foo:%(localDomain)s)": "Nové ID skupiny (např. +neco:%(localDomain)s)", - "%(senderName)s sent an image": "%(senderName)s poslal/a obrázek", - "%(senderName)s sent a video": "%(senderName)s poslal/a video", - "%(senderName)s uploaded a file": "%(senderName)s nahrál/a soubor", + "%(senderName)s sent an image": "Uživatel %(senderName)s poslal obrázek", + "%(senderName)s sent a video": "Uživatel %(senderName)s poslal video", + "%(senderName)s uploaded a file": "Uživatel %(senderName)s nahrál soubor", "Disinvite this user?": "Odvolat pozvání tohoto uživatele?", "Kick this user?": "Vykopnout tohoto uživatele?", "Unban this user?": "Přijmout zpět tohoto uživatele?", "Ban this user?": "Vykázat tohoto uživatele?", - "Community Invites": "Komunitní pozvánky", + "Community Invites": "Pozvánky do skupin", "Members only (since the point in time of selecting this option)": "Pouze členové (od chvíle vybrání této volby)", "Members only (since they were invited)": "Pouze členové (od chvíle jejich pozvání)", "Members only (since they joined)": "Pouze členové (od chvíle jejich vstupu)", - "You have disabled URL previews by default.": "Vypnul/a jste automatické náhledy webových adres.", - "You have enabled URL previews by default.": "Zapnul/a jste automatické náhledy webových adres.", + "You have disabled URL previews by default.": "Vypnuli jste automatické náhledy webových adres.", + "You have enabled URL previews by default.": "Zapnuli jste automatické náhledy webových adres.", "URL Previews": "Náhledy webových adres", - "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s změnil/a avatar místnosti %(roomName)s", + "%(senderDisplayName)s changed the avatar for %(roomName)s": "Uživatel %(senderDisplayName)s změnil avatar místnosti %(roomName)s", "Add an Integration": "Přidat začlenění", "Message removed": "Zpráva odstraněna", "An email has been sent to %(emailAddress)s": "Na adresu %(emailAddress)s jsme poslali e-mail", @@ -444,7 +444,7 @@ "Passphrase must not be empty": "Heslo nesmí být prázdné", "Export room keys": "Exportovat klíče místnosti", "This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Tento proces vám umožňuje exportovat do souboru klíče ke zprávám, které jste dostali v šifrovaných místnostech. Když pak tento soubor importujete do jiného Matrix klienta, všechny tyto zprávy bude možné opět dešifrovat.", - "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "Kdokoliv, kdo získá přístup k exportovanému souboru, bude moci dešifrovat všechny vaše přijaté zprávy, a proto je třeba dbát zvýšenou pozornost jeho zabezpečení. Z toho důvodu byste měl/a do kolonky níže zadat heslo, se kterým exportovaná data zašifrujeme. Import pak bude možný pouze se znalostí zadaného hesla.", + "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "Kdokoliv, kdo získá přístup k exportovanému souboru, bude moci dešifrovat všechny vaše přijaté zprávy, a proto je třeba dbát zvýšenou pozornost jeho zabezpečení. Z toho důvodu byste měli do kolonky níže zadat heslo, se kterým exportovaná data zašifrujeme. Import pak bude možný pouze se znalostí zadaného hesla.", "Confirm passphrase": "Potvrďte heslo", "Import room keys": "Importovat klíče místnosti", "Call Timeout": "Časový limit hovoru", @@ -470,25 +470,25 @@ "Idle for %(duration)s": "Nečinný po dobu %(duration)s", "Offline for %(duration)s": "Offline po dobu %(duration)s", "Unknown for %(duration)s": "Neznámý po dobu %(duration)s", - "Flair": "Vztah ke komunitě", - "Showing flair for these communities:": "Místnost má vztah k těmto komunitám:", - "This room is not showing flair for any communities": "Tato místnost nemá vztah k žádné komunitě", + "Flair": "Příslušnost ke skupině", + "Showing flair for these communities:": "Místnost přísluší do těchto skupin:", + "This room is not showing flair for any communities": "Tato místnost nemá příslušnost k žádné skupině", "URL previews are enabled by default for participants in this room.": "Ve výchozím nastavení jsou náhledy URL adres povolené pro členy této místnosti.", "URL previews are disabled by default for participants in this room.": "Ve výchozím nastavení jsou náhledy URL adres zakázané pro členy této místnosti.", "Invalid file%(extra)s": "Neplatný soubor%(extra)s", "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Budete přesměrováni na stránku třetí strany k ověření svého účtu pro používání s %(integrationsUrl)s. Chcete pokračovat?", "To continue, please enter your password.": "Aby jste mohli pokračovat, zadejte prosím své heslo.", - "Please check your email to continue registration.": "Prosím zkontrolujte své emaily, abyste mohli pokračovat v registraci.", + "Please check your email to continue registration.": "Pro pokračování v registraci prosím zkontrolujte své e-maily.", "Token incorrect": "Neplatný token", "A text message has been sent to %(msisdn)s": "Na číslo %(msisdn)s byla odeslána textová zpráva", "Please enter the code it contains:": "Prosím zadejte kód z této zprávy:", "Sign in with": "Přihlásit se pomocí", - "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Pokud nezadáte vaši emailovou adresu, nebude možné obnovit vaše heslo. Opravdu chcete pokračovat?", + "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Pokud nezadáte svou e-mailovou adresu, nebude možné obnovit vaše heslo. Opravdu chcete pokračovat?", "Remove from community": "Odstranit ze skupiny", "Disinvite this user from community?": "Zrušit pozvání tohoto uživatele?", "Remove this user from community?": "Odstranit tohoto uživatele ze skupiny?", "Failed to withdraw invitation": "Stažení pozvání selhalo", - "Filter community members": "Filtrovat členy skupiny", + "Filter community members": "Najít člena skupiny", "Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "Opravdu chcete odstranit místnost '%(roomName)s' z %(groupId)s?", "Removing a room from the community will also remove it from the community page.": "Pokud odstraníte místnost ze skupiny, odstraní se i odkaz do místnosti ze stránky skupiny.", "Something went wrong!": "Něco se nepodařilo!", @@ -496,9 +496,9 @@ "Visibility in Room List": "Zobrazení v Seznamu Místností", "Visible to everyone": "Zobrazení pro každého", "Only visible to community members": "Zobrazuje se pouze pro členy skupiny", - "Filter community rooms": "Filtrovat místnosti skupiny", + "Filter community rooms": "Najít místnost ve skupině", "Something went wrong when trying to get your communities.": "Při pokusu o nahrání vašich skupin se něco pokazilo.", - "Display your community flair in rooms configured to show it.": "Zobrazit vaše vztahy ke komunitám v místnostech.", + "Display your community flair in rooms configured to show it.": "Zobrazovat příslušnost ke skupině v místnostech, které to mají nastaveno.", "You're not currently a member of any communities.": "V současnosti nejste členem žádné skupiny.", "Unknown Address": "Neznámá adresa", "Unblacklist": "Odblokovat", @@ -546,10 +546,10 @@ "were kicked %(count)s times|one": "byli vyhozeni", "was kicked %(count)s times|other": "byl %(count)s krát vyhozen", "was kicked %(count)s times|one": "byl vyhozen", - "%(severalUsers)schanged their name %(count)s times|other": "%(severalUsers)ssi %(count)s krát změnili jméno", - "%(severalUsers)schanged their name %(count)s times|one": "%(severalUsers)ssi změnili jméno", - "%(oneUser)schanged their name %(count)s times|other": "%(oneUser)ssi %(count)s krát změnili jméno", - "%(oneUser)schanged their name %(count)s times|one": "%(oneUser)ssi změnili jméno", + "%(severalUsers)schanged their name %(count)s times|other": "Uživatelé %(severalUsers)s si %(count)s krát změnili jméno", + "%(severalUsers)schanged their name %(count)s times|one": "Uživatelé %(severalUsers)s si změnili jméno", + "%(oneUser)schanged their name %(count)s times|other": "Uživatel %(oneUser)s si %(count)s krát změnil jméno", + "%(oneUser)schanged their name %(count)s times|one": "Uživatel %(oneUser)s si změnil jméno", "%(severalUsers)schanged their avatar %(count)s times|other": "%(severalUsers)ssi %(count)s krát změnili avatary", "%(severalUsers)schanged their avatar %(count)s times|one": "%(severalUsers)ssi změnili avatary", "%(oneUser)schanged their avatar %(count)s times|other": "%(oneUser)ssi %(count)s krát změnil avatar", @@ -562,7 +562,7 @@ "Add User": "Přidat uživatele", "Matrix ID": "Matrix ID", "Matrix Room ID": "Identifikátor místnosti", - "email address": "emailová adresa", + "email address": "e-mailová adresa", "Try using one of the following valid address types: %(validTypesList)s.": "Zkuste použít jeden z následujících správných tvarů adres: %(validTypesList)s.", "You have entered an invalid address.": "Zadali jste neplatnou adresu.", "Confirm Removal": "Potvrdit odstranění", @@ -578,21 +578,21 @@ "Encryption key request": "Žádost o šifrovací klíč", "Unable to restore session": "Nelze obnovit relaci", "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Pokud jste se v minulosti již přihlásili s novější verzi programu Riot, vaše relace nemusí být kompatibilní s touto verzí. Zavřete prosím toto okno a přihlaste se znovu pomocí nové verze.", - "Please check your email and click on the link it contains. Once this is done, click continue.": "Prosím, zkontrolujte si email a klikněte na odkaz ve zprávě, kterou jsme vám zaslali. V případě, že jste tak již učinili, klikněte na tlačítko Pokračovat.", - "This will allow you to reset your password and receive notifications.": "Toto vám umožní obnovit si heslo a přijímat oznámení emailem.", + "Please check your email and click on the link it contains. Once this is done, click continue.": "Zkontrolujte svou e-mailovou schránku a klepněte na odkaz ve zprávě, kterou jsme vám poslali. V případě, že jste to už udělali, klepněte na tlačítko Pokračovat.", + "This will allow you to reset your password and receive notifications.": "Toto vám umožní obnovit si heslo a přijímat oznámení e-mailem.", "Skip": "Přeskočit", "Username not available": "Uživatelské jméno už není dostupné", "An error occurred: %(error_string)s": "Vyskytla se chyba: %(error_string)s", "Username available": "Dostupné uživatelské jméno", "To get started, please pick a username!": "Začněte tím, že si zvolíte uživatelské jméno!", - "This will be your account name on the homeserver, or you can pick a different server.": "Toto bude název vašeho účtu na domácím serveru , anebo si můžete zvolit jiný server.", - "If you already have a Matrix account you can log in instead.": "Pokud již účet Matrix máte, můžete se ihned Přihlásit.", + "This will be your account name on the homeserver, or you can pick a different server.": "Toto bude název vašeho účtu na domovském serveru , anebo si můžete zvolit jiný server.", + "If you already have a Matrix account you can log in instead.": "Pokud už účet v síti Matrix máte, můžete se ihned Přihlásit.", "%(oneUser)sjoined %(count)s times|other": "%(oneUser)s %(count)s krát vstoupil", - "Private Chat": "Soukromý chat", - "Public Chat": "Veřejný chat", - "You must register to use this functionality": "Musíte být zaregistrovaný pokud chcete využívat této funkce", - "You must join the room to see its files": "Musíte vstoupit do místnosti pokud chcete soubory zobrazit", - "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n": "

HTML kód vaší skupiny

\n

\n Pomocí dlouhého popisu představte skupinu novým členům anebo uvěďte \n nějaké důležité odkazy\n

\n

\n Můžete používat i HTML 'img' značky\n

\n", + "Private Chat": "Soukromá konverzace", + "Public Chat": "Veřejná konverzace", + "You must register to use this functionality": "Pro využívání této funkce se zaregistrujte", + "You must join the room to see its files": "Pro zobrazení souborů musíte do místnosti vstoupit", + "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n": "

HTML kód stránky vaší skupiny

\n

\n Pomocí dlouhého popisu nejprve představte skupinu novým členům nebo uvěďte \n nějaké důležité odkazy\n

\n

\n Pro vložení obrázků můžete používat i HTML značky 'img'\n

\n", "Add rooms to the community summary": "Přidat místnosti do přehledu skupiny", "Which rooms would you like to add to this summary?": "Které místnosti se přejete přidat do tohoto přehledu?", "Add to summary": "Přidat do přehledu", @@ -609,13 +609,13 @@ "Unable to accept invite": "Nelze přijmout pozvání", "Unable to reject invite": "Nelze odmítnout pozvání", "Community Settings": "Nastavení skupiny", - "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Tyto místnosti se zobrazují všem členům na stránce skupiny. Členové skupiny mohou vstoupit do místnosti kliknutím.", + "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Tyto místnosti se zobrazují všem členům na stránce skupiny. Členové skupiny mohou vstoupit do místnosti klepnutím.", "Featured Rooms:": "Hlavní místnosti:", "Featured Users:": "Významní uživatelé:", - "%(inviter)s has invited you to join this community": "%(inviter)s vás pozval ke vstupu do této místnosti", + "%(inviter)s has invited you to join this community": "Uživatel %(inviter)s vás pozval do této skupiny", "You are an administrator of this community": "Jste správcem této skupiny", "You are a member of this community": "Jste členem této skupiny", - "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "Vaše skupina nemá vyplněný dlouhý popis, který je součástí HTML stránky skupiny a která se zobrazuje jejím členům.
Kliknutím zde otevřete nastavení, kde ho můžete doplnit!", + "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "Vaše skupina nemá vyplněný dlouhý popis, který je součástí HTML stránky skupiny a která se zobrazuje jejím členům.
Klepnutím zde otevřete nastavení, kde ho můžete doplnit!", "Long Description (HTML)": "Dlouhý popis (HTML)", "Description": "Popis", "Community %(groupId)s not found": "Skupina %(groupId)s nenalezena", @@ -624,16 +624,16 @@ "Your Communities": "Vaše skupiny", "Error whilst fetching joined communities": "Při získávání vašich skupin se vyskytla chyba", "Create a new community": "Vytvořit novou skupinu", - "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Vytvořte skupinu s cílem seskupit uživatele a místnosti! Vytvořte si vlastní domovskou stránku a vymezte tak váš prostor ve světe Matrix.", + "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Vytvořte skupinu s cílem seskupit uživatele a místnosti! Vytvořte si vlastní domovskou stránku a vymezte tak svůj prostor ve světe Matrix.", "You have no visible notifications": "Nejsou dostupná žádná oznámení", "Connectivity to the server has been lost.": "Spojení se serverem bylo přerušeno.", "Sent messages will be stored until your connection has returned.": "Odeslané zprávy zůstanou uložené, dokud se spojení znovu neobnoví.", "Active call": "Aktivní hovor", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Kromě vás není v této místnosti nikdo jiný! Přejete si Pozvat další anebo Přestat upozorňovat na prázdnou místnost?", "Room": "Místnost", - "Failed to load timeline position": "Nepodařilo se načíst pozici na časové ose", - "Light theme": "Světlý motiv", - "Dark theme": "Tmavý motiv", + "Failed to load timeline position": "Bod v časové ose se nepodařilo načíst", + "Light theme": "Světlý vzhled", + "Dark theme": "Tmavý vzhled", "Analytics": "Analytické údaje", "Riot collects anonymous analytics to allow us to improve the application.": "Riot sbírá anonymní analytické údaje, které nám umožňují aplikaci dále zlepšovat.", "Labs": "Experimentální funkce", @@ -642,9 +642,9 @@ "No media permissions": "Žádná oprávnění k médiím", "You may need to manually permit Riot to access your microphone/webcam": "Je možné, že budete potřebovat manuálně povolit Riot přístup k mikrofonu/webkameře", "Profile": "Profil", - "The email address linked to your account must be entered.": "Musíte zadat emailovou adresu spojenou s vaším účtem.", - "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Na adresu %(emailAddress)s byla odeslána zpráva. Potom, co přejdete na odkaz z této zprávy, klikněte níže.", - "Please note you are logging into the %(hs)s server, not matrix.org.": "Upozornění: právě se přihlašujete na server %(hs)s, a nikoliv na server matrix.org.", + "The email address linked to your account must be entered.": "Musíte zadat e-mailovou adresu spojenou s vaším účtem.", + "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Na adresu %(emailAddress)s byla odeslána zpráva. Potom, co přejdete na odkaz z této zprávy, klepněte níže.", + "Please note you are logging into the %(hs)s server, not matrix.org.": "Právě se přihlašujete na server %(hs)s, a nikoliv na server matrix.org.", "This homeserver doesn't offer any login flows which are supported by this client.": "Tento domovský server nenabízí žádné přihlašovací toky podporované touto službou/klientem.", "Set a display name:": "Nastavit zobrazované jméno:", "Upload an avatar:": "Nahrát avatar:", @@ -669,21 +669,21 @@ "collapse": "sbalit", "expand": "rozbalit", "Old cryptography data detected": "Nalezeny starší šifrované datové zprávy", - "Data from an older version of Riot has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Nalezeny datové zprávy ze starší verze Riot. Důsledkem bude, že E2E šifrování nebude ve starší verzi Riot správně fungovat. Šifrované zprávy ze starší verze nemusí být čitelné v nové verzi. Může dojít i k selhání zasílaní zpráv s touto verzí Riot. Pokud zaznamenáte některý z uvedených problému, odhlaste se a přihlaste znovu. Pro zachování historie zpráv exportujte a znovu importujte vaše klíče.", - "Warning": "Upozornění", + "Data from an older version of Riot has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Byly nalezeny datové zprávy ze starší verze Riot. Důsledkem bude, že end-to-end šifrování nebude ve starší verzi Riot správně fungovat. Šifrované zprávy ze starší verze nemusí být čitelné v nové verzi. Může dojít i k selhání zasílaní zpráv s touto verzí Riotu. Pokud zaznamenáte některý z uvedených problému, odhlaste se a znovu přihlaste. Pro zachování historie zpráv exportujte a znovu importujte své klíče.", + "Warning": "Varování", "Fetching third party location failed": "Nepodařilo se zjistit umístění třetí strany", "A new version of Riot is available.": "Je dostupná nová verze Riotu.", "I understand the risks and wish to continue": "Rozumím rizikům a přeji si pokračovat", "Send Account Data": "Poslat data o účtu", - "Advanced notification settings": "Pokročilé nastavení upozornění", - "Uploading report": "Nahrávám hlášení", + "Advanced notification settings": "Rozšířená nastavení oznámení", + "Uploading report": "Nahrávání hlášení", "Sunday": "Neděle", "Messages sent by bot": "Zprávy poslané robotem", - "Notification targets": "Cíle upozornění", - "Failed to set direct chat tag": "Nepodařilo se nastavit štítek přímého chatu", + "Notification targets": "Cíle oznámení", + "Failed to set direct chat tag": "Nepodařilo se nastavit štítek přímé konverzace", "Today": "Dnes", "Files": "Soubory", - "You are not receiving desktop notifications": "Nedostáváte upozornění na desktopu", + "You are not receiving desktop notifications": "Nedostáváte oznámení na plochu", "Friday": "Pátek", "Update": "Aktualizace", "What's New": "Co je nového", @@ -691,7 +691,7 @@ "Changelog": "Seznam změn", "Waiting for response from server": "Čekám na odezvu ze serveru", "Send Custom Event": "Odeslat vlastní událost", - "All notifications are currently disabled for all targets.": "Veškeré notifikace jsou aktuálně pro všechny cíle vypnuty.", + "All notifications are currently disabled for all targets.": "Veškerá oznámení jsou aktuálně pro všechny cíle vypnuty.", "delete the alias.": "smazat alias.", "To return to your account in future you need to set a password": "Abyste se mohli ke svému účtu v budoucnu vrátit, musíte si nastavit heslo", "Forget": "Zapomenout", @@ -703,14 +703,14 @@ "Messages containing my display name": "Zprávy obsahující mé zobrazované jméno", "Remember, you can always set an email address in user settings if you change your mind.": "Vězte, že kdybyste si to rozmysleli, e-mailovou adresu můžete kdykoliv doplnit v uživatelském nastavení.", "Unavailable": "Nedostupné", - "Error saving email notification preferences": "Chyba při ukládání nastavení e-mailových upozornění", + "Error saving email notification preferences": "Chyba při ukládání nastavení e-mailových oznámení", "View Decrypted Source": "Zobrazit dešifrovaný zdroj", "Failed to update keywords": "Nepodařilo se aktualizovat klíčová slova", "remove %(name)s from the directory.": "odebrat %(name)s z adresáře.", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Upozornění na následující klíčová slova se řídí pravidly, která zde nelze zobrazit:", + "Notifications on the following keywords follow rules which can’t be displayed here:": "Oznámení na následující klíčová slova se řídí pravidly, která zde nelze zobrazit:", "Please set a password!": "Prosím nastavte si heslo!", "You have successfully set a password!": "Úspěšně jste si nastavili heslo!", - "Explore Room State": "Prohlížet stav místnosti", + "Explore Room State": "Zjistit stav místnosti", "Source URL": "Zdrojová URL", "Failed to add tag %(tagName)s to room": "Nepodařilo se přidat štítek %(tagName)s k místnosti", "Filter results": "Filtrovat výsledky", @@ -720,13 +720,13 @@ "Collecting app version information": "Sbírání informací o verzi aplikace", "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Smazat alias místnosti %(alias)s a odstranit %(name)s z adresáře?", "Keywords": "Klíčová slova", - "Enable notifications for this account": "Zapnout upozornění na tomto účtu", - "Invite to this community": "Pozvat do této komunity", + "Enable notifications for this account": "Zapnout oznámení na tomto účtu", + "Invite to this community": "Pozvat do této skupiny", "Messages containing keywords": "Zprávy obsahující klíčová slova", "View Source": "Zobrazit zdroj", "Tuesday": "Úterý", "Enter keywords separated by a comma:": "Vložte klíčová slova oddělená čárkou:", - "Forward Message": "Přeposlat zprávu", + "Forward Message": "Přeposlat", "You have successfully set a password and an email address!": "Úspěšně jste si nastavili heslo a e-mailovou adresu!", "Remove %(name)s from the directory?": "Odebrat %(name)s z adresáře?", "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot používá mnoho pokročilých funkcí, z nichž některé jsou ve vašem současném prohlížeči nedostupné nebo experimentální.", @@ -734,16 +734,16 @@ "Explore Account Data": "Prozkoumat data o účtu", "Remove from Directory": "Odebrat z adresáře", "Saturday": "Sobota", - "Messages in one-to-one chats": "Zprávy v individuálních chatech", - "Direct Chat": "Přímý chat", + "Messages in one-to-one chats": "Přímé zprávy", + "Direct Chat": "Přímá konverzace", "The server may be unavailable or overloaded": "Server může být nedostupný nebo přetížený", "Reject": "Odmítnout", "Failed to set Direct Message status of room": "Nepodařilo se přiřadit místnosti status Přímé zprávy", "Monday": "Pondělí", - "All messages (noisy)": "Všechny zprávy (hlasitě)", + "All messages (noisy)": "Všechny zprávy (hlučné)", "Enable them now": "Povolit nyní", "Toolbox": "Sada nástrojů", - "Collecting logs": "Sbírání logů", + "Collecting logs": "Sběr záznamů", "You must specify an event type!": "Musíte určit typ události!", "(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)", "Invite to this room": "Pozvat do této místnosti", @@ -755,8 +755,8 @@ "Failed to send custom event.": "Nepodařilo se odeslat vlastní událost.", "What's new?": "Co je nového?", "Notify me for anything else": "Upozorni mě na cokoliv jiného", - "When I'm invited to a room": "Pokud jsem pozván do místnosti", - "Can't update user notification settings": "Nelze aktualizovat uživatelské nastavení upozornění", + "When I'm invited to a room": "Pozvánka do místnosti", + "Can't update user notification settings": "Nelze aktualizovat uživatelské nastavení oznámení", "Notify for all other messages/rooms": "Upozorni na všechny ostatní zprávy/místnosti", "Unable to look up room ID from server": "Nelze získat ID místnosti ze serveru", "Couldn't find a matching Matrix room": "Odpovídající Matrix místost nenalezena", @@ -767,49 +767,49 @@ "Back": "Zpět", "Failed to change settings": "Nepodařilo se změnit nastavení", "Reply": "Odpovědět", - "Show message in desktop notification": "Zobrazovat zprávu v upozornění na ploše", + "Show message in desktop notification": "Zobrazovat zprávu v oznámení na ploše", "Unhide Preview": "Zobrazit náhled", "Unable to join network": "Nelze se připojit k síti", "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Snad jste je nastavili v jiném klientu než Riot. V Riotu je nemůžete upravit, ale přesto platí", - "Sorry, your browser is not able to run Riot.": "Omlouváme se, váš prohlížeč není schopný spustit Riot.", + "Sorry, your browser is not able to run Riot.": "Omlouváme se, váš prohlížeč není schopný Riot spustit.", "Uploaded on %(date)s by %(user)s": "Nahráno %(date)s uživatelem %(user)s", - "Messages in group chats": "Zprávy ve skupinových chatech", + "Messages in group chats": "Zprávy ve skupinách", "Yesterday": "Včera", "Error encountered (%(errorDetail)s).": "Nastala chyba (%(errorDetail)s).", "Low Priority": "Nízká priorita", "Riot does not know how to join a room on this network": "Riot neví, jak vstoupit do místosti na této síti", "Set Password": "Nastavit heslo", - "An error occurred whilst saving your email notification preferences.": "Při ukládání nastavení e-mailových upozornění nastala chyba.", + "An error occurred whilst saving your email notification preferences.": "Při ukládání nastavení e-mailových oznámení nastala chyba.", "Off": "Vypnout", "Mentions only": "Pouze zmínky", "Failed to remove tag %(tagName)s from room": "Nepodařilo se odstranit štítek %(tagName)s z místnosti", "Wednesday": "Středa", - "You can now return to your account after signing out, and sign in on other devices.": "Nyní se můžete ke svému účtu vrátit i po odhlášení a používat jej na ostatních zařízeních.", - "Enable email notifications": "Zapnout upozornění přes e-mail", + "You can now return to your account after signing out, and sign in on other devices.": "Nyní se můžete ke svému účtu vrátit i po odhlášení a používat ho na ostatních zařízeních.", + "Enable email notifications": "Zapnout oznámení přes e-mail", "Event Type": "Typ události", "Download this file": "Stáhnout tento soubor", "Pin Message": "Připíchnout zprávu", "Thank you!": "Děkujeme vám!", - "View Community": "Zobrazit Komunitu", + "View Community": "Zobrazit skupinu", "Event sent!": "Událost odeslána!", "Event Content": "Obsah události", - "Unable to fetch notification target list": "Nepodařilo se získat seznam cílů upozornění", + "Unable to fetch notification target list": "Nepodařilo se získat seznam cílů oznámení", "Quote": "Citovat", "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Vzhled a chování aplikace může být ve vašem aktuální prohlížeči nesprávné a některé nebo všechny funkce mohou být chybné. Chcete-li i přes to pokračovat, nebudeme vám bránit, ale se všemi problémy, na které narazíte, si musíte poradit sami!", "Checking for an update...": "Kontrola aktualizací...", - "There are advanced notifications which are not shown here": "Jsou k dispozici pokročilá upozornění, která zde nejsou zobrazena", - "The platform you're on": "Platforma na které jste", + "There are advanced notifications which are not shown here": "Jsou k dispozici pokročilá oznámení, která zde nejsou zobrazena", + "The platform you're on": "Vámi používaná platforma", "The version of Riot.im": "Verze Riot.im", - "Your language of choice": "Vaše jazyková volba", + "Your language of choice": "Váš jazyk", "Which officially provided instance you are using, if any": "Kterou oficiální instanci Riot.im používáte (a jestli vůbec)", - "Whether or not you're using the Richtext mode of the Rich Text Editor": "Jestli při psaní zpráv používáte rozbalenou lištu formátování textu", - "Your homeserver's URL": "URL vámi používaného domovského serveru", + "Whether or not you're using the Richtext mode of the Rich Text Editor": "Zda při psaní zpráv používáte rozbalenou lištu formátování textu", + "Your homeserver's URL": "URL vašeho domovského serveru", "Your identity server's URL": "URL Vámi používaného serveru identity", "e.g. %(exampleValue)s": "např. %(exampleValue)s", "Every page you use in the app": "Každou stránku v aplikaci, kterou navštívíte", "e.g. ": "např. ", "Your User Agent": "Řetězec User Agent Vašeho zařízení", - "Your device resolution": "Rozlišení obrazovky Vašeho zařízení", + "Your device resolution": "Rozlišení obrazovky vašeho zařízení", "The information being sent to us to help make Riot.im better includes:": "S cílem vylepšovat aplikaci Riot.im shromažďujeme následující údaje:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "V případě, že se na stránce vyskytují identifikační údaje, jako například název místnosti, ID uživatele, místnosti a nebo skupiny, jsou tyto údaje před odesláním na server odstraněny.", "Call in Progress": "Probíhající hovor", @@ -821,7 +821,7 @@ "Missing roomId.": "Chybějící ID místnosti.", "Opens the Developer Tools dialog": "Otevře dialog nástrojů pro vývojáře", "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s si změnil zobrazované jméno na %(displayName)s.", - "Always show encryption icons": "Vždy zobrazovat ikony stavu šifrovaní", + "Always show encryption icons": "Vždy zobrazovat ikonu stavu šifrovaní", "Send analytics data": "Odesílat analytická data", "Enable widget screenshots on supported widgets": "Povolit screenshot widgetu pro podporované widgety", "This event could not be displayed": "Tato událost nemohla být zobrazena", @@ -839,24 +839,24 @@ "Share room": "Sdílet místnost", "System Alerts": "Systémová varování", "Muted Users": "Umlčení uživatelé", - "Only room administrators will see this warning": "Jen administrátoři místnosti uvidí toto varování", + "Only room administrators will see this warning": "Toto varování uvidí jen správci místnosti", "You don't currently have any stickerpacks enabled": "Momentálně nemáte aktívní žádné balíčky s nálepkami", "Stickerpack": "Balíček s nálepkami", "Hide Stickers": "Skrýt nálepky", "Show Stickers": "Zobrazit nálepky", - "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "V šifrovaných místnostech, jako je tato, jsou URL náhledy ve výchozím nastavení zakázané, aby bylo možné zajistit, že váš domácí server nemůže shromažďovat informace o odkazech, které v této místnosti vidíte.", + "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "V šifrovaných místnostech, jako je tato, jsou URL náhledy ve výchozím nastavení vypnuté, aby bylo možné zajistit, že váš domovský server neshromažďuje informace o odkazech, které v této místnosti vidíte.", "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "Když někdo ve zprávě pošle URL adresu, může být zobrazen její náhled obsahující informace jako titulek, popis a obrázek z cílové stránky.", "Code": "Kód", "The email field must not be blank.": "E-mail nemůže být prázdný.", "The phone number field must not be blank.": "Telefonní číslo nemůže být prázdné.", "The password field must not be blank.": "Heslo nemůže být prázdné.", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Prosím pomozte nám vylepšovat Riot.im odesíláním anonymních údajů o používaní. Na tento účel použijeme cookie (přečtěte si jak cookies používáme).", + "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Prosím pomozte nám vylepšovat Riot.im odesíláním anonymních údajů o používaní. Použijeme k tomu cookies (přečtěte si jak cookies používáme).", "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Prosím pomozte nám vylepšovat Riot.im odesíláním anonymních údajů o používaní. Na tento účel použijeme cookie.", "Yes, I want to help!": "Ano, chci pomoci!", - "Please contact your service administrator to continue using the service.": "Please contact your service administrator to continue using the service.\nProsím kontaktujte Vašeho administratora aby jste mohli pokračovat v používání Vašeho zařízení.", + "Please contact your service administrator to continue using the service.": "Pro další používání vašeho zařízení prosím kontaktujte prosím správce vaší služby.", "This homeserver has hit its Monthly Active User limit.": "Tento domovský server dosáhl svého měsíčního limitu pro aktivní uživatele.", "This homeserver has exceeded one of its resource limits.": "Tento domovský server překročil některý z limitů.", - "Please contact your service administrator to get this limit increased.": "Prosím kontaktujte Vašeho administrátora pro zvýšení tohoto limitu.", + "Please contact your service administrator to get this limit increased.": "Pro zvýšení tohoto limitu prosím kontaktujte správce své služby.", "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Tento domovský server dosáhl svého měsíčního limitu pro aktivní uživatele, proto se někteří uživatelé nebudou moci přihlásit.", "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Tento domovský server překročil některý z limitů, proto se někteří uživatelé nebudou moci přihlásit.", "Failed to remove widget": "Nepovedlo se odstranit widget", @@ -869,15 +869,15 @@ "Logs sent": "Záznamy odeslány", "Failed to send logs: ": "Nepodařilo se odeslat záznamy: ", "Submit debug logs": "Odeslat ladící záznamy", - "Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Ladící záznamy obsahují data o používání aplikace včetně Vašeho uživatelského jména, ID nebo aliasy navštívených místností a skupin a uživatelská jména jiných uživatelů. Neobsahují zprávy.", - "Community IDs cannot be empty.": "ID komunity nemůže být prázdné.", + "Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Ladící záznamy obsahují data o používání aplikace včetně vašeho uživatelského jména, ID nebo aliasy navštívených místností a skupin a uživatelská jména jiných uživatelů. Neobsahují zprávy.", + "Community IDs cannot be empty.": "ID skupiny nemůže být prázdné.", "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Toto učiní účet permanentně nepoužitelný. Nebudete se moci přihlásit a nikdo se nebude moci se stejným uživatelskym ID znovu zaregistrovat. Účet bude odstraněn ze všech místnosti a bude vymazán ze serveru identity.Tato akce je nevratná.", "Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "Deaktivace účtu automaticky nesmaže zprávy, které jste poslali. Chcete-li je smazat, zaškrtněte prosím odpovídající pole níže.", - "Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "Viditelnost zpráv v Matrixu je podobná e-mailu. Výmaz Vašich zpráv znamené, že už nebudou sdíleny s žádným novým nebo neregistrovaným uživatelem, ale registrovaní uživatelé, kteří už přístup ke zprávám mají, budou stále mít přístup k jejich kopii.", + "Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "Viditelnost zpráv v Matrixu je podobná e-mailu. Smazání vašich zpráv znamená, že už nebudou sdíleny s žádným novým nebo neregistrovaným uživatelem, ale registrovaní uživatelé, kteří už přístup ke zprávám mají, budou stále mít přístup k jejich kopii.", "Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "S deaktivací účtu si přeji smazat všechny mnou odeslané zprávy (Pozor: způsobí, že noví uživatelé uvidí nekompletní konverzace)", - "To continue, please enter your password:": "Pro pokračování, zadejte Vaše heslo:", + "To continue, please enter your password:": "Pro pokračování, zadejte své heslo:", "Upgrade Room Version": "Upgradeovat verzi místnosti", - "Create a new room with the same name, description and avatar": "Vytvoříme místnost se stejným jménem, popisem a avatarem", + "Create a new room with the same name, description and avatar": "Vznikne místnost se stejným názvem, popisem a avatarem", "Update any local room aliases to point to the new room": "Aktualizujeme všechny lokální aliasy místnosti tak, aby ukazovaly na novou místnost", "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "Přerušíme konverzace ve staré verzi místnosti a pošleme uživatelům zprávu o přechodu do nové mistnosti", "Put a link back to the old room at the start of the new room so people can see old messages": "Na začátek nové místnosti umístíme odkaz na starou místnost tak, aby uživatelé mohli vidět staré zprávy", @@ -885,22 +885,22 @@ "Send Logs": "Odeslat záznamy", "Refresh": "Obnovit", "We encountered an error trying to restore your previous session.": "V průběhu obnovování Vaší minulé relace nastala chyba.", - "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Vymazání uložiště prohlížeče možna opraví Váš problem, zároveň se tím ale odhlásíte a historie Vašich šifrovaných konverzací se pro Vás může stát nečitelnou.", + "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Vymazání úložiště prohlížeče možná váš problém opraví, zároveň se tím ale odhlásíte a můžete přijít o historii svých šifrovaných konverzací.", "Share Room": "Sdílet místnost", "Link to most recent message": "Odkaz na nejnovější zprávu", "Share User": "Sdílet uživatele", - "Share Community": "Sdílet komunitu", + "Share Community": "Sdílet skupinu", "Share Room Message": "Sdílet zprávu z místnosti", "Link to selected message": "Odkaz na vybranou zprávu", "COPY": "Kopírovat", - "Share Message": "Sdílet zprávu", + "Share Message": "Sdílet", "Collapse Reply Thread": "Sbalit vlákno odpovědi", - "Unable to join community": "Není možné vstoupit do komunity", - "Unable to leave community": "Není možné opustit komunitu", - "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "Změny ve Vaší komunitě název a avatar možná nebudou viditelné pro ostatní uživatele po dobu až 30 minut.", - "Join this community": "Vstoupit do komunity", - "Leave this community": "Opustit komunitu", - "Who can join this community?": "Kdo může vstoupit do této komunity?", + "Unable to join community": "Není možné vstoupit do skupiny", + "Unable to leave community": "Není možné opustit skupinu", + "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "Změny názvu a avataru vaší skupiny možná nebudou viditelné pro ostatní uživatele po dobu až 30 minut.", + "Join this community": "Vstoupit do skupiny", + "Leave this community": "Opustit skupinu", + "Who can join this community?": "Kdo může vstoupit do této skupiny?", "Everyone": "Všichni", "This room is not public. You will not be able to rejoin without an invite.": "Tato místnost není veřejná. Bez pozvánky nebudete moci znovu vstoupit.", "Can't leave Server Notices room": "Z místnosti \"Server Notices\" nejde odejit", @@ -908,88 +908,88 @@ "Terms and Conditions": "Smluvní podmínky", "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Chcete-li nadále používat domovský server %(homeserverDomain)s, měli byste si přečíst a odsouhlasit naše smluvní podmínky.", "Review terms and conditions": "Přečíst smluvní podmínky", - "Did you know: you can use communities to filter your Riot.im experience!": "Věděli jste, že: práci s Riot.im si můžete zpříjemnit s použitím komunit!", - "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "Pro nastavení filtru přetáhněte avatar komunity na panel filtrování na levé straně obrazovky. Potom můžete kdykoliv kliknout na avatar komunity na tomto panelu a Riot Vám bude zobrazovat jen místnosti a lidi z dané komunity.", + "Did you know: you can use communities to filter your Riot.im experience!": "Věděli jste, že práci s Riot.im si můžete zpříjemnit používáním skupin!", + "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "Pro nastavení filtru přetáhněte avatar skupiny na panel filtrování na levé straně obrazovky. Potom můžete kdykoliv klepnout na avatar skupiny v tomto panelu a Riot vám bude zobrazovat jen místnosti a lidi z dané skupiny.", "You can't send any messages until you review and agree to our terms and conditions.": "Dokud si nepřečtete a neodsouhlasíte naše smluvní podmínky, nebudete moci posílat žádné zprávy.", - "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "Vaše zpráva nebyla odeslána, protože tento domácí server dosáhl svého měsíčního limitu pro aktivní uživatele. Prosím kontaktujte Vašeho administratora pro další využívání služby.", - "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Vaše zpráva nebyla odeslána, protože tento domácí server dosáhl limitu. Prosím kontaktujte Vašeho administratora pro další využívání služby.", + "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "Vaše zpráva nebyla odeslána, protože tento domovský server dosáhl svého měsíčního limitu pro aktivní uživatele. Pro další využívání služby prosím kontaktujte jejího správce.", + "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Vaše zpráva nebyla odeslána, protože tento domovský server dosáhl limitu svých zdrojů. Pro další využívání služby prosím kontaktujte jejího správce.", "%(count)s of your messages have not been sent.|one": "Vaše zpráva nebyla odeslána.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Znovu poslat všechny nebo zrušit všechny. Můžete též vybrat jednotlivé zprávy pro znovu odeslání nebo zrušení.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Znovu poslat zprávu nebo zrušit zprávu.", "Clear filter": "Zrušit filtr", - "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Jestli jste odeslali hlášení o chybě na GitHub, ladící záznamy nám pomohou problém najít. Ladicí záznamy obsahuji data o používání aplikate, která obsahují uživatelské jmeno, ID nebo aliasy navštívených místnosti a uživatelská jména dalších uživatelů. Neobsahují zprávy.", - "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Soukromí je pro nás důležité a proto neshromažďujeme osobní údaje ani údaje na základě, kterých by Vás bylo možne identifikovat.", + "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Jestli jste odeslali hlášení o chybě na GitHub, ladící záznamy nám pomohou problém najít. Ladicí záznamy obsahuji data o používání aplikace, která obsahují uživatelské jméno, ID nebo aliasy navštívených místnosti a uživatelská jména dalších uživatelů. Neobsahují zprávy.", + "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Soukromí je pro nás důležité a proto neshromažďujeme osobní údaje ani údaje na základě, kterých by vás bylo možné identifikovat.", "Learn more about how we use analytics.": "Dozvědět se více o tom, jak zpracováváme analytické údaje.", "No Audio Outputs detected": "Nebyly rozpoznány žádné zvukové výstupy", "Audio Output": "Zvukový výstup", - "Please contact your service administrator to continue using this service.": "Pro pokračování využívání této služby prosím kontaktujte Vašeho administrátora.", + "Please contact your service administrator to continue using this service.": "Pro pokračování využívání této služby prosím kontaktujte jejího správce.", "Manually export keys": "Export klíčů", "You'll lose access to your encrypted messages": "Přijdete o přístup k šifrovaným zprávám", "Are you sure you want to sign out?": "Opravdu se chcete odhlásit?", "Updating Riot": "Aktualizujeme Riot", "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Jestli máte nějakou zpětnou vazbu nebo máte s Riotem nějaký problém, dejte nám vědět na GitHubu.", - "To help avoid duplicate issues, please view existing issues first (and add a +1) or create a new issue if you can't find it.": "Abychom předešli řešení jednoho problému několikrát, podívejte se prosím nejdřív seznam existijících issue (a můžete jim dát 👍) nebo můžete vyrobit nové. Jenom nám prosím pište anglicky.", - "Report bugs & give feedback": "Hlášení chyb & zpětná vazba", + "To help avoid duplicate issues, please view existing issues first (and add a +1) or create a new issue if you can't find it.": "Abychom předešli řešení jednoho problému několikrát, podívejte se prosím nejdřív seznam existujících issue (a můžete jim dát 👍) nebo můžete vyrobit nové. Jenom nám prosím pište anglicky.", + "Report bugs & give feedback": "Hlášení chyb a zpětná vazba", "Go back": "Zpět", "Failed to upgrade room": "Nepovedlo se upgradeovat místnost", "The room upgrade could not be completed": "Upgrade místnosti se nepovedlo dokončit", "Upgrade this room to version %(version)s": "Upgradování místnosti na verzi %(version)s", - "Use Legacy Verification (for older clients)": "Použít starší verzi verifikace (funguje staršími klienty)", + "Use Legacy Verification (for older clients)": "Použít starší verzi ověření (funguje se staršími klienty)", "Verify by comparing a short text string.": "Verfikujete porovnáním krátkého textu.", - "Begin Verifying": "Zahájit verifikaci", + "Begin Verifying": "Zahájit ověření", "Waiting for partner to accept...": "Čekáme až partner přijme žádost...", - "Nothing appearing? Not all clients support interactive verification yet. .": "Nic se neděje? Ne všechny klienty podporují interaktivní verifikaci. .", + "Nothing appearing? Not all clients support interactive verification yet. .": "Nic se neděje? Ne všichni klienti klienti podporují interaktivní ověření. .", "Waiting for %(userId)s to confirm...": "Čekáme až to %(userId)s potvrdí...", - "Use two-way text verification": "Použít oboustrannou verifikaci", - "Security & Privacy": "Bezpečnost & Soukromí", + "Use two-way text verification": "Použít oboustranné ověření", + "Security & Privacy": "Bezpečnost a soukromí", "Encryption": "Šifrování", "Once enabled, encryption cannot be disabled.": "Když se šifrování zapne, už nepůjde vypnout.", "Encrypted": "Šifrování", "General": "Obecné", "General failure": "Nějaká chyba", - "This homeserver does not support login using email address.": "Tento homeserver neumožňuje přihlášní pomocí emailu.", + "This homeserver does not support login using email address.": "Tento domovský serveru neumožňuje přihlášení pomocí e-mailu.", "Set a new password": "Nastavit nové heslo", - "Room Name": "Jméno místnosti", + "Room Name": "Název místnosti", "Room Topic": "Téma místnosti", "Room avatar": "Avatar místnosti", - "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Změny toho kdo smí číst historické zprávy se aplikují jenom na další zprávy v této místosti. Viditelnost už poslaných zpráv zůstane jaká byla.", + "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Změny viditelnosti historie této místnosti ovlivní jenom nové zprávy. Viditelnost starších zpráv zůstane, jaká byla v době jejich odeslání.", "To link to this room, please add an alias.": "K vytvoření odkazu je potřeba vyrobit místnosti alias.", - "Roles & Permissions": "Funkce & Práva", + "Roles & Permissions": "Role a oprávnění", "Room information": "Informace o místnosti", "Internal room ID:": "Interní ID:", "Room version": "Verze místnosti", "Room version:": "Verze místnosti:", "Developer options": "Možnosti pro vývojáře", - "Help & About": "Pomoc & O Riotu", + "Help & About": "O aplikaci a pomoc", "Bug reporting": "Hlášení chyb", "FAQ": "Máte dotazy?", "Versions": "Verze", - "Legal": "Právní věci", - "Voice & Video": "Audio & Video", - "Missing media permissions, click the button below to request.": "Chybí nám práva na práci audiem/videem. Klikněte na tlačítko a my si o ně požádáme.", - "Request media permissions": "Požádat o práva k mikrofonu a kameře", + "Legal": "Právní informace", + "Voice & Video": "Zvuk a video", + "Missing media permissions, click the button below to request.": "Pro práci se zvukem a videem je potřeba oprávnění. Klepněte na tlačítko a my o ně požádáme.", + "Request media permissions": "Požádat o oprávnění k mikrofonu a kameře", "Allow Peer-to-Peer for 1:1 calls": "Povolit Peer-to-Peer hovory", - "Preferences": "Preference", + "Preferences": "Předvolby", "Composer": "Editor zpráv", - "Enable Emoji suggestions while typing": "Povolit napovídání emotikonů", - "Send typing notifications": "Posílat notifikace \"... právě píše...\"", + "Enable Emoji suggestions while typing": "Napovídat emoji", + "Send typing notifications": "Posílat oznámení, když píšete", "Room list": "Seznam místností", - "Timeline": "Zprávy v místnosti", + "Timeline": "Časová osa", "Autocomplete delay (ms)": "Zpožnění našeptávače (ms)", - "Enable big emoji in chat": "Povolit velké emotikony v chatu", - "Show avatars in user and room mentions": "Zobrazovat ikony uživatelů ve zmínkách o nich", - "Prompt before sending invites to potentially invalid matrix IDs": "Zeptat před odesláním pozvánky potenciálně neplatným Matrixovým identifikátorům", + "Enable big emoji in chat": "Povolit velké emoji", + "Show avatars in user and room mentions": "U zmínek uživatelů a místností zobrazovat jejich avatary", + "Prompt before sending invites to potentially invalid matrix IDs": "Potvrdit odeslání pozvánky potenciálně neplatným Matrix ID", "Show avatar changes": "Zobrazovat změny avatarů", - "Show join/leave messages (invites/kicks/bans unaffected)": "Zobrazovat zprávy o připojení/opuštění (netýká se pozvánek/vykopnutí/vykázání)", - "Show a placeholder for removed messages": "Zobrazovat zamazání místo smazané zprávy", - "Show display name changes": "Zobrazovat změny jména", + "Show join/leave messages (invites/kicks/bans unaffected)": "Zobrazovat zprávy o vstupu/opuštění (netýká se pozvánek/vykopnutí/vykázání)", + "Show a placeholder for removed messages": "Zobrazovat smazané zprávy jako zamazané", + "Show display name changes": "Zobrazovat změny zobrazovaného jména", "Messages containing my username": "Zprávy obsahující moje uživatelské jméno", "Messages containing @room": "Zprávy obsahující @room", - "Encrypted messages in one-to-one chats": "Zašifrované zprávy v přímých chatech", - "Email addresses": "Emailové adresy", + "Encrypted messages in one-to-one chats": "Šifrované přímé zprávy", + "Email addresses": "E-mailové adresy", "Set a new account password...": "Nastavit nové heslo...", "Language and region": "Jazyk a region", - "Theme": "Motiv", + "Theme": "Motiv vzhledu", "Account management": "Správa účtu", "Deactivating your account is a permanent action - be careful!": "Deaktivace účtu je nevratná - buďte opatrní!", "Phone numbers": "Telefonní čísla", @@ -999,19 +999,19 @@ "Profile picture": "Profilový obrázek", "Display Name": "Zobrazované jméno", "Room Addresses": "Adresy místnosti", - "For help with using Riot, click here.": "Pro pomoc s používáním Riotu, klikněte sem.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Pro pomoc s používáním Riotu, klikněte sem nebo následujícím tlačítkem zahajte konverzaci s robotem.", + "For help with using Riot, click here.": "Pro pomoc s používáním Riotu klepněte sem.", + "For help with using Riot, click here or start a chat with our bot using the button below.": "Pro pomoc s používáním Riotu klepněte sem nebo následujícím tlačítkem zahajte konverzaci s robotem.", "Chat with Riot Bot": "Konverzovat s Riot Botem", "Ignored users": "Ignorovaní uživatelé", "Bulk options": "Hromadná možnost", "Key backup": "Záloha klíčů", "This room has been replaced and is no longer active.": "Tato místnost byla nahrazena a už není používaná.", "The conversation continues here.": "Konverzace pokračuje zde.", - "We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "Poslali jsme Vám ověřovací email. Následujte prosím instrukce a pak klikněte na následující tlačítko.", - "Email Address": "Emailová adresa", + "We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "Poslali jsme vám ověřovací e-mail. Postupujte prosím podle instrukcí a pak klepněte na následující tlačítko.", + "Email Address": "E-mailová adresa", "Delete Backup": "Smazat zálohu", - "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Opravdu? Pokud klíče nejsou správně zálohované můžete přijít o zašifrované zprávy.", - "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Šifrované zprávy jsou zabezpečené end-to-end šifrováním. Jenom Vy a příjemci mají dešifrovací klíče.", + "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Opravdu? Pokud klíče nejsou správně zálohované můžete přijít o šifrované zprávy.", + "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Šifrované zprávy jsou zabezpečené end-to-end šifrováním. Klíče pro jejich dešifrování máte jen vy a příjemci zpráv.", "Unable to load key backup status": "Nepovedlo se načíst stav zálohy", "Restore from Backup": "Obnovit ze zálohy", "Back up your keys before signing out to avoid losing them.": "Před odhlášením si zazálohujte klíče abyste o ně nepřišli.", @@ -1020,37 +1020,37 @@ "Backup version: ": "Verze zálohy: ", "Algorithm: ": "Algoritmus: ", "Start using Key Backup": "Začít používat zálohu klíčů", - "Add an email address to configure email notifications": "Pro nastavení emailových upozornění je třeba přidat emailovou adresu", - "Whether or not you're logged in (we don't record your username)": "Jestli jste přihlášený/á (nezaznamenáváme ale Vaše jméno)", + "Add an email address to configure email notifications": "Pro nastavení e-mailových oznámení je třeba přidat e-mailovou adresu", + "Whether or not you're logged in (we don't record your username)": "Zda jste nebo nejste přihlášeni (vaše uživatelské jméno se nezaznamenává)", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Soubor '%(fileName)s' je větší než povoluje limit domovského serveru", - "Unable to load! Check your network connectivity and try again.": "Nepovedlo se načíst! Zkontrolujte si připojení k síti a zkuste to prosím znovu.", + "Unable to load! Check your network connectivity and try again.": "Stránku se nepovedlo načíst! Zkontrolujte prosím své připojení k internetu a zkuste to znovu.", "Registration Required": "Je vyžadována registrace", "You need to register to do this. Would you like to register now?": "Na toto potřebujete registraci. Chcete se zaregistrovat teď hned?", "Failed to invite users to the room:": "Nepovedlo se pozvat uživatele do místnosti:", "Upgrades a room to a new version": "Upgraduje místnost na novou verzi", "This room has no topic.": "Tato místnost nemá žádné specifické téma.", - "Sets the room name": "Nastaví jméno místnosti", - "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s upgradoval/a místnost.", - "%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s udělal/a místnost veřejnou pro všechny s odkazem.", - "%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s udělal/a místnost přístupnou pouze na pozvánky.", - "%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s změnil/a pravidlo k připojení na %(rule)s", - "%(senderDisplayName)s has allowed guests to join the room.": "%(senderDisplayName)s povolil/a hostům přístup.", - "%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s zakázal/a hostům přístup.", - "%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s změnil/a pravidlo pro přístup hostů na %(rule)s", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s přidal/a nové adresy místnosti: %(addedAddresses)s.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s přidal/a novou adresu místnosti: %(addedAddresses)s.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s odstranil/a adresy místnosti: %(removedAddresses)s.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s odstranil/a adresu místnosti: %(removedAddresses)s.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s přidal/a adresy místnosti %(addedAddresses)s a odebral %(removedAddresses)s.", - "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s nastavil/a hlavní addresu této místnosti na %(address)s.", + "Sets the room name": "Nastaví název místnosti", + "%(senderDisplayName)s upgraded this room.": "Uživatel %(senderDisplayName)s upgradoval místnost.", + "%(senderDisplayName)s made the room public to whoever knows the link.": "Uživatel %(senderDisplayName)s zveřejnil místnost pro všechny s odkazem.", + "%(senderDisplayName)s made the room invite only.": "Uživatel %(senderDisplayName)s zpřístupnil místnost pouze na pozvání.", + "%(senderDisplayName)s changed the join rule to %(rule)s": "Uživatel %(senderDisplayName)s změnil pravidlo k připojení na %(rule)s", + "%(senderDisplayName)s has allowed guests to join the room.": "Uživatel %(senderDisplayName)s povolil přístup hostům.", + "%(senderDisplayName)s has prevented guests from joining the room.": "Uživatel %(senderDisplayName)s zakázal přístup hostům.", + "%(senderDisplayName)s changed guest access to %(rule)s": "Uživatel %(senderDisplayName)s změnil pravidlo pro přístup hostů na %(rule)s", + "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "Uživatel %(senderName)s přidal této místnosti nové adresy %(addedAddresses)s.", + "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "Uživatel %(senderName)s přidal této místnosti novou adresu %(addedAddresses)s.", + "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "Uživatel %(senderName)s odstranil této místnosti adresy %(removedAddresses)s.", + "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "Uživatel %(senderName)s odstranil této místnosti adresu %(removedAddresses)s.", + "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "Uživatel %(senderName)s přidal této místnosti adresy %(addedAddresses)s a odebral %(removedAddresses)s.", + "%(senderName)s set the main address for this room to %(address)s.": "Uživatel %(senderName)s hlavní adresu této místnosti na %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s zrušil hlavní adresu této místnosti.", "%(displayName)s is typing …": "%(displayName)s píše …", "%(names)s and %(count)s others are typing …|other": "%(names)s a %(count)s dalších píše …", "%(names)s and %(count)s others are typing …|one": "%(names)s a jeden další píše …", "%(names)s and %(lastPerson)s are typing …": "%(names)s a %(lastPerson)s píšou …", - "Unable to connect to Homeserver. Retrying...": "Připojení k homeserveru se nezdařilo. Zkoušíme to znovu...", + "Unable to connect to Homeserver. Retrying...": "Připojení k domovskému serveru se nezdařilo. Zkoušíme to znovu...", "Unrecognised address": "Neznámá adresa", - "You do not have permission to invite people to this room.": "Nemáte práva na zvaní lidí do této místnosti.", + "You do not have permission to invite people to this room.": "Nemáte oprávnění zvát lidi do této místnosti.", "User %(user_id)s does not exist": "Uživatel %(user_id)s neexistuje", "User %(user_id)s may or may not exist": "Uživatel %(user_id)s možná neexistuje", "Unknown server error": "Neznámá chyba serveru", @@ -1060,8 +1060,8 @@ "Avoid repeated words and characters": "Vyvarujte se opakujících se slov a znaků", "Avoid sequences": "Vyvarujte se běžných posloupností", "Avoid recent years": "Nepoužívejte čísla roků", - "Avoid years that are associated with you": "Nepoužívejte roky které s Vámi nějak souvisí", - "Avoid dates and years that are associated with you": "Nepoužívejte data a roky která s Vámi nějak souvisí", + "Avoid years that are associated with you": "Nepoužívejte roky, které s vámi nějak souvisí", + "Avoid dates and years that are associated with you": "Nepoužívejte data ani roky, které s vámi nějak souvisí", "Capitalization doesn't help very much": "Zvětšení nějakých písmen zas tolik nepomůže", "All-uppercase is almost as easy to guess as all-lowercase": "Všechno velkými je skoro stejně jednoduché jako všechno malými písmeny", "Reversed words aren't much harder to guess": "Otočená slova nejsou moc těžká na uhodnutí", @@ -1077,19 +1077,19 @@ "This is a very common password": "Toto je velmi používané heslo", "This is similar to a commonly used password": "Toto je moc podobné běžně používanému heslu", "A word by itself is easy to guess": "Jenom jedno slovo je moc jednoduché uhodnout", - "Names and surnames by themselves are easy to guess": "Jména a příjmění je moc jednoduché uhodnout", - "Common names and surnames are easy to guess": "Běžná jména a příjmení je moc jednoduché uhodnout", + "Names and surnames by themselves are easy to guess": "Jména a příjmení je velmi jednoduché uhodnout", + "Common names and surnames are easy to guess": "Běžná jména a příjmení je velmi jednoduché uhodnout", "Straight rows of keys are easy to guess": "Řádky na klávesnici je moc jednoduché uhodnout", "Short keyboard patterns are easy to guess": "Krátké sekvence kláves je moc jednoduché uhodnout", - "There was an error joining the room": "Chyba při připojování k místnosti", - "Sorry, your homeserver is too old to participate in this room.": "Pardón, ale Váš domovský server je moc zastaralý aby se sem mohl připojit.", - "Please contact your homeserver administrator.": "Kontaktujte prosím administrátora domovského serveru.", - "The other party cancelled the verification.": "Druhá strana verifikaci zrušila.", + "There was an error joining the room": "Při vstupu do místnosti došlo k chybě", + "Sorry, your homeserver is too old to participate in this room.": "Jejda, váš domovský server je moc zastaralý abyste do této místnosti mohli vstoupit.", + "Please contact your homeserver administrator.": "Kontaktujte prosím správce domovského serveru.", + "The other party cancelled the verification.": "Druhá strana ověření zrušila.", "Verified!": "Ověřeno!", "You've successfully verified this user.": "Uživatel úspěšně ověřen.", "Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "Bezpečné zprávy s tímto uživatelem jsou end-to-end šifrované a nikdo další je nemůže číst.", "Got It": "OK", - "Verify this user by confirming the following emoji appear on their screen.": "Ověřte uživatele zkontrolováním, že se mu na obrazovce objevily stejné obrázky.", + "Verify this user by confirming the following emoji appear on their screen.": "Ověřte uživatele zkontrolováním, že se mu na obrazovce objevily stejné emoji.", "Verify this user by confirming the following number appears on their screen.": "Ověřte uživatele zkontrolováním, že se na obrazovce objevila stejná čísla.", "Unable to find a supported verification method.": "Nepovedlo se nám najít podporovanou metodu ověření.", "Dog": "Pes", @@ -1156,32 +1156,32 @@ "Pin": "Připínáček", "Yes": "Ano", "No": "Ne", - "Never lose encrypted messages": "Nikdy nepřijdete o zašifrované zprávy", - "Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Zprávy v této místnosti jsou zabezpečené end-to-end šifrováním. Jenom vy a příjemci je můžou číst.", + "Never lose encrypted messages": "Nikdy nepřijdete o šifrované zprávy", + "Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Zprávy v této místnosti jsou zabezpečené end-to-end šifrováním. Můžete je číst jen vy a jejich příjemci.", "Securely back up your keys to avoid losing them. Learn more.": "Bezpečně zazálohujte své klíče abyste o ně nepřišli. Více informací.", "Not now": "Teď ne", "Don't ask me again": "Už se mě na to nikdy neptejte", "Add some now": "Přidat nějaké", "Main address": "Hlavní adresa", "This room is a continuation of another conversation.": "Tato místost je pokračováním jiné konverzace.", - "Click here to see older messages.": "Kliknutím zobrazíte starší zprávy.", + "Click here to see older messages.": "Klepnutím zobrazíte starší zprávy.", "Failed to load group members": "Nepovedlo se načíst členy skupiny", - "Join": "Přidat se", - "That doesn't look like a valid email address": "To nevypadá jako platná emailová adresa", + "Join": "Vstoupit", + "That doesn't look like a valid email address": "To nevypadá jako platná e-mailová adresa", "The following users may not exist": "Následující uživatel možná neexistuje", "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Nepovedlo se najít profily následujících Matrix ID - chcete je stejně pozvat?", "Invite anyway and never warn me again": "Stejně je pozvat a nikdy mě nevarujte znovu", "Invite anyway": "Stejně je pozvat", - "Before submitting logs, you must create a GitHub issue to describe your problem.": "Na odeslání zápisu je potřeba vyrobit issue na GitHubu s popisem problému.", + "Before submitting logs, you must create a GitHub issue to describe your problem.": "Pro odeslání záznamů je potřeba vyrobit issue na GitHubu s popisem problému.", "Unable to load commit detail: %(msg)s": "Nepovedlo se načíst detaily revize: %(msg)s", "Incompatible Database": "Nekompatibilní databáze", "Continue With Encryption Disabled": "Pokračovat bez šifrování", - "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Po ověření bude uživatel označen jako důvěryhodný. Ověřování uživatelů Vám dává jistotu, že je komunikace důvěrná.", + "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Po ověření bude uživatel označen jako důvěryhodný. Ověřování uživatelů vám dává jistotu, že je komunikace důvěrná.", "Waiting for partner to confirm...": "Čekám až to partner potvrdí...", - "Incoming Verification Request": "Přišla Vám žádost o ověření", + "Incoming Verification Request": "Přišla vám žádost o ověření", "Incompatible local cache": "Nekompatibilní lokální vyrovnávací paměť", "Clear cache and resync": "Smazat paměť a sesynchronizovat", - "I don't want my encrypted messages": "Nechci svoje zašifrované zprávy", + "I don't want my encrypted messages": "Už své zašifrované zprávy nechci", "Checking...": "Kontroluji...", "Unable to load backup status": "Nepovedlo se načíst stav zálohy", "Recovery Key Mismatch": "Klíč zálohy neodpovídá", @@ -1195,9 +1195,9 @@ "Restored %(sessionCount)s session keys": "Obnovili jsme %(sessionCount)s klíčů", "Enter Recovery Passphrase": "Zadejte heslo k záloze", "Warning: you should only set up key backup from a trusted computer.": "Varování: záloha by měla být prováděna na důvěryhodném počítači.", - "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Zadáním hesla k záloze získáte zpět přístup k zašifrovaným zprávám a zabezpečené komunikaci.", + "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Zadáním hesla k záloze získáte zpět přístup k šifrovaným zprávám a zabezpečené komunikaci.", "Next": "Další", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Pokud jste zapomněl/a heslo k záloze, použijte obnovovací klíč nebo nastavte další možnosti obnovení", + "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Pokud jste zapomněli své obnovovací heslo, použijte obnovovací klíč nebo nastavte další možnosti obnovení", "Enter Recovery Key": "Zadejte obnovovací klíč", "This looks like a valid recovery key!": "To vypadá jako správný klíč!", "Not a valid recovery key": "To není správný klíč", @@ -1206,7 +1206,7 @@ "Go to Settings": "Přejít do nastavení", "Enter a passphrase...": "Zadejte silné heslo...", "For maximum security, this should be different from your account password.": "Z bezpečnostních důvodů by toto heslo mělo být jiné než přihlašovací heslo.", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Uložíme na našich serverech zašifrovanou zálohu Vašich klíčů. Zvolte si silné heslo (např. delší frázi) aby byla záloha v bezpečí.", + "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Na našich serverech uložíme šifrovanou zálohu vašich klíčů. Zvolte si silné heslo (např. delší frázi) aby byla záloha v bezpečí.", "Great! This passphrase looks strong enough.": "Super! Na první pohled to vypadá dostatečně silně.", "Keep going...": "Pokračujte...", "Set up with a Recovery Key": "Nastavit obnovovací klíč", @@ -1217,7 +1217,7 @@ "Repeat your passphrase...": "Zopakute heslo...", "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Tento klíč můžete použít jako záchranou síť k obnově zašifrované historie pokud byste zapomněl/a heslo k záloze.", "As a safety net, you can use it to restore your encrypted message history.": "Tento klíč můžete použít jako záchranou síť k obnově zašifrované historie.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Obnovovací klíč je záchraná síť - lze použít k obnově zašifrovaných zpráv když zapomenete heslo.", + "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Obnovovací klíč je záchranná síť - lze použít k obnově šifrovaných zpráv i když zapomenete heslo.", "Your Recovery Key": "Váš klíč pro obnovu zálohy", "Copy to clipboard": "Zkopírovat do schránky", "Download": "Stáhnout", @@ -1235,13 +1235,13 @@ "Unable to create key backup": "Nepovedlo se vyrobit zálohů klíčů", "Retry": "Zkusit znovu", "Set up Secure Messages": "Nastavit bezpečné obnovení zpráv", - "If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Pokud jste způsob obnovy neodstranili Vy, útočníci se můžou pokoušet dostat k vašemu účtu. Změňte si raději ihned heslo a nastavte nový způsob obnovy v Nastavení.", + "If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Pokud jste způsob obnovy neodstranili vy, mohou se pokoušet k vašemu účtu dostat útočníci. Změňte si raději ihned heslo a nastavte nový způsob obnovy v Nastavení.", "Set up": "Nastavit", "Don't ask again": "Už se neptat", "New Recovery Method": "Nový způsob obnovy", "If you don't want to set this up now, you can later in Settings.": "Pokud nechcete nastavení dokončit teď, můžete se k tomu vrátit později v nastavení.", "A new recovery passphrase and key for Secure Messages have been detected.": "Detekovali jsme nové heslo a klíč pro bezpečné obnovení.", - "If you didn't set the new recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Pokud jste nenastavili nový způsob obnovy Vy, útočníci se můžou pokoušet dostat k vašemu účtu. Změňte si raději ihned heslo a nastavte nový způsob obnovy v Nastavení.", + "If you didn't set the new recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Pokud jste nenastavili nový způsob obnovy vy, mohou se pokoušet k vašemu účtu dostat útočníci. Změňte si raději ihned heslo a nastavte nový způsob obnovy v Nastavení.", "Set up Secure Message Recovery": "Nastavit bezpečné obnovení zpráv", "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Bez nastavení bezpečného obnovení zpráv přijdete po odhlášení o historii šifrované komunikace.", "Show a reminder to enable Secure Message Recovery in encrypted rooms": "V šifrovaných konverzacích zobrazovat upozornění na možnost aktivovat bezpečné obnovení zpráv", @@ -1250,12 +1250,12 @@ "Custom user status messages": "Vlastní statusy", "Group & filter rooms by custom tags (refresh to apply changes)": "Skupinkování a filtování místností podle štítků (vyžaduje znovunačtení stránky)", "Render simple counters in room header": "Zobrazovat stavová počítadla v hlavičce místnosti", - "Enable Community Filter Panel": "Povolit panel Filtr komunity", - "Show developer tools": "Zobrazit nástoje pro vývojáře", + "Enable Community Filter Panel": "Povolit panel Filtr skupiny", + "Show developer tools": "Zobrazit nástroje pro vývojáře", "Encrypted messages in group chats": "Šifrované zprávy ve skupinových konverzacích", "Open Devtools": "Otevřít nástroje pro vývojáře", "Credits": "Poděkování", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Už jste na adrese %(host)s použili novější verzi Riotu. Jestli chcete znovu používat tuto verzi i s E2E šifrováním, je potřeba se odhlásit a znovu přihlásit. ", + "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Už jste na adrese %(host)s použili novější verzi Riotu. Jestli chcete znovu používat tuto verzi i s end-to-end šifrováním, je potřeba se odhlásit a znovu přihlásit. ", "You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "Na adrese %(host)s už jste použili Riot se zapnutou volbou načítání členů místností až při prvním zobrazení. V této verzi je načítání členů až při prvním zobrazení vypnuté. Protože je s tímto nastavením lokální vyrovnávací paměť nekompatibilní, Riot potřebuje znovu synchronizovat údaje z vašeho účtu.", "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Pokud v jiné karťe otevřený jiný Riot, prosím zavřete ji, protože si dvě různé verze můžou navzájem působit problémy.", "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot teď používá 3-5× méně paměti, protože si informace o ostatních uživatelích načítá až když je potřebuje. Prosím počkejte na dokončení synchronizace se serverem!", @@ -1265,25 +1265,25 @@ "Set a new status...": "Nastavit status...", "Hide": "Skrýt", "This homeserver would like to make sure you are not a robot.": "Domovský server se potřebuje přesvědčit, že nejste robot.", - "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Ve vlastních serverových volbách si můžete nastavit použití vlastního domovského serveru. To Vám umožní používat tuto aplikaci s existujícím Matrix účtem na jiném serveru.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Ve vlastním nastavení serveru můžete nastavit použití vlastního domovského serveru. To vám umožní používat tuto aplikaci s existujícím Matrix účtem na jiném serveru.", "Please review and accept all of the homeserver's policies": "Pročtěte si a odsouhlaste prosím všechna pravidla domovského serveru", "Please review and accept the policies of this homeserver:": "Pročtěte si a odsouhlaste prosím pravidla domovského serveru:", - "Enter the location of your Modular homeserver. It may use your own domain name or be a subdomain of modular.im.": "Vložte adresu serveru Modular. Může používat Vaši vlastní doménu a nebo poddoménu modular.im.", + "Enter the location of your Modular homeserver. It may use your own domain name or be a subdomain of modular.im.": "Zadejte adresu serveru Modular. Můžete použít svou vlastní doménu a nebo subdoménu modular.im.", "Homeserver URL": "URL domovského serveru", - "This homeserver does not support communities": "Tento domovský server nepodporuje komunity", + "This homeserver does not support communities": "Tento domovský server nepodporuje skupiny", "Invalid homeserver discovery response": "Neplatná odpověd při hledání domovského serveru", "Failed to perform homeserver discovery": "Nepovedlo se zjisit adresu domovského serveru", "Registration has been disabled on this homeserver.": "Tento domovský server nepovoluje registraci.", "Identity Server URL": "URL serveru identity", "Invalid identity server discovery response": "Neplatná odpověď při hledání serveru identity", "Your Modular server": "Váš server Modular", - "Server Name": "Jméno serveru", + "Server Name": "Název serveru", "The username field must not be blank.": "Je potřeba vyplnit uživatelské jméno.", "Username": "Uživatelské jméno", - "Not sure of your password? Set a new one": "Napamatujete si heslo? Nastavte si nové", + "Not sure of your password? Set a new one": "Nepamatujete si heslo? Nastavte si nové", "Change": "Změnit", "Create your account": "Vytvořte si účet", - "Email (optional)": "Email (nepovinné)", + "Email (optional)": "E-mail (nepovinné)", "Phone (optional)": "Telefonní číslo (nepovinné)", "Confirm": "Potvrdit", "Other servers": "Další servery", @@ -1294,9 +1294,9 @@ "Other": "Další možnosti", "Find other public servers or use a custom server": "Najděte si jiný veřejný server a nebo používejte svůj vlastní", "Couldn't load page": "Nepovedlo se načíst stránku", - "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Jste administrátor této komunity. Bez pozvání od jiného administrátora nebudete mít možnost se připojit zpět.", + "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Jste správcem této skupiny. Bez pozvání od jiného správce nebudete mít možnost se připojit zpět.", "Guest": "Host", - "A verification email will be sent to your inbox to confirm setting your new password.": "Nastavení nového hesla je potřeba potvrdit. Bude Vám odeslán ověřovací email.", + "A verification email will be sent to your inbox to confirm setting your new password.": "Nastavení nového hesla je potřeba potvrdit. Bude vám odeslán ověřovací e-mail.", "Sign in instead": "Přihlásit se", "Your password has been reset.": "Heslo bylo resetováno.", "Sign in with single sign-on": "Přihlásit se přes jednotné přihlašování", @@ -1305,27 +1305,27 @@ "Prepends ¯\\_(ツ)_/¯ to a plain-text message": "Vloží ¯\\_(ツ)_/¯ na začátek zprávy", "Changes your display nickname in the current room only": "Pro tuto místnost změní vaší přezdívku", "User %(userId)s is already in the room": "Uživatel %(userId)s už je v této místnosti", - "The user must be unbanned before they can be invited.": "Uživatel je vykázán, nelze jej pozvat.", + "The user must be unbanned before they can be invited.": "Uživatel je vykázán, nelze ho pozvat.", "Show read receipts sent by other users": "Zobrazovat potvrzení o přijetí", "Order rooms in the room list by most important first instead of most recent": "Seřadit místosti v seznamu podle důležitosti místo podle posledního použití", "Scissors": "Nůžky", - "Accept all %(invitedRooms)s invites": "Přijmout všechny pozvánky: %(invitedRooms)s", + "Accept all %(invitedRooms)s invites": "Přijmout pozvání do všech těchto místností: %(invitedRooms)s", "Change room avatar": "Změnit avatar místnosti", - "Change room name": "Změnit jméno místnosti", + "Change room name": "Změnit název místnosti", "Change main address for the room": "Změnit hlavní adresu místnosti", "Change history visibility": "Změnit viditelnost historie", "Change permissions": "Změnit oprávnění", "Change topic": "Změnit téma", - "Modify widgets": "Pozměnit widgety", - "Send messages": "Poslat zprávy", - "Invite users": "Pozvat uživatele", - "Change settings": "Změnit nastavení", + "Modify widgets": "Spravovat widgety", + "Send messages": "Posílat zprávy", + "Invite users": "Zvát uživatele", + "Change settings": "Měnit nastavení", "Kick users": "Vykopnout uživatele", "Ban users": "Vykázat uživatele", - "Remove messages": "Odstranit zprávy", - "Notify everyone": "Upozornění pro celou místnost", + "Remove messages": "Mazat zprávy", + "Notify everyone": "Oznámení pro celou místnost", "Enable encryption?": "Povolit šifrování?", - "Once enabled, encryption for a room cannot be disabled. Messages sent in an encrypted room cannot be seen by the server, only by the participants of the room. Enabling encryption may prevent many bots and bridges from working correctly. Learn more about encryption.": "Po zapnutí už nelze šifrování v této místnosti zakázat. Zprávy v šifrovaných místostech můžou číst jenom členové místnosti, server se k obsahu nedostane. Šifrování místností nepodporuje většina botů a propojení. Více informací o šifrování.", + "Once enabled, encryption for a room cannot be disabled. Messages sent in an encrypted room cannot be seen by the server, only by the participants of the room. Enabling encryption may prevent many bots and bridges from working correctly. Learn more about encryption.": "Po zapnutí už nelze šifrování v této místnosti vypnout. Zprávy v šifrovaných místnostech mohou číst jenom členové místnosti, server se k obsahu nedostane. Šifrování místností nepodporuje většina botů a propojení. Více informací o šifrování.", "Error updating main address": "Nepovedlo se změnit hlavní adresu", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Nastala chyba při pokusu o nastavení hlavní adresy místnosti. Mohl to zakázat server, nebo to může být dočasná chyba.", "Error creating alias": "Nepovedlo se vyrobit alias", @@ -1340,15 +1340,15 @@ "Sign in to your Matrix account on %(serverName)s": "Přihlašte se k účtu Matrix na %(serverName)s", "Create your Matrix account on %(serverName)s": "Vytvořte si účet Matrix na %(serverName)s", "Could not load user profile": "Nepovedlo se načíst profil uživatele", - "Your Matrix account on %(serverName)s": "Váš účet Matrix na %(serverName)s", - "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Jestli používáte funkci \"breadcrumb\" (ikony nad seznamem místností)", + "Your Matrix account on %(serverName)s": "Váš účet Matrix na serveru %(serverName)s", + "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Zda používáte funkci \"breadcrumb\" (ikony nad seznamem místností)", "A conference call could not be started because the integrations server is not available": "Nelze spustit konferenční hovor, protože začleňovací server není dostupný", "Replying With Files": "Odpovídání souborem", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Aktuálně nelze odpovědět souborem. Chcete soubor nahrát a poslat bez odpovídání?", "The file '%(fileName)s' failed to upload.": "Soubor '%(fileName)s' se nepodařilo nahrát.", "The server does not support the room version specified.": "Server nepodporuje určenou verzi místnosti.", "Name or Matrix ID": "Jméno nebo Matrix ID", - "Warning: Upgrading a room will not automatically migrate room members to the new version of the room. We'll post a link to the new room in the old version of the room - room members will have to click this link to join the new room.": "Varování: Upgrade místnosti automaticky převede všechny členy na novou verzi místnosti. Do staré místnosti pošleme odkaz na novou místnost - všichni členové na něj budou muset kliknout, aby se přidali do nové místnosti.", + "Warning: Upgrading a room will not automatically migrate room members to the new version of the room. We'll post a link to the new room in the old version of the room - room members will have to click this link to join the new room.": "Varování: Upgrade místnosti automaticky převede všechny členy na novou verzi místnosti. Do staré místnosti pošleme odkaz na novou místnost - všichni členové na něj budou muset klepnout, aby se přidali do nové místnosti.", "Changes your avatar in this current room only": "Změní váš avatar jen v této místnosti", "Unbans user with given ID": "Přijmout zpět uživatele s daným identifikátorem", "Adds a custom widget by URL to the room": "Přidá do místnosti vlastní widget podle adresy URL", @@ -1356,15 +1356,15 @@ "You cannot modify widgets in this room.": "V této místnosti nemůžete manipulovat s widgety.", "Sends the given message coloured as a rainbow": "Pošle zprávu v barvách duhy", "Sends the given emote coloured as a rainbow": "Pošle reakci v barvách duhy", - "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s přidal této místnosti vztah s komunitou %(groups)s.", - "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s odebral této místnosti vztah s komunitou %(groups)s.", - "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s přidal této místnosti vztah s komunitou %(newGroups)s a odebral vztah s %(oldGroups)s.", + "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "Uživatel %(senderDisplayName)s přidal této místnosti příslušnost ke skupině %(groups)s.", + "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "Uživatel %(senderDisplayName)s odebral této místnosti příslušnost ke skupině %(groups)s.", + "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "Uživatel %(senderDisplayName)s přidal této místnosti příslušnost ke skupině %(newGroups)s a odebral k %(oldGroups)s.", "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s zrušil pozvání do této místnosti pro uživatele %(targetDisplayName)s.", "No homeserver URL provided": "Nebyla zadána URL adresa domovského server", "Unexpected error resolving homeserver configuration": "Chyba při zjišťování konfigurace domovského serveru", "The user's homeserver does not support the version of the room.": "Uživatelův domovský server nepodporuje verzi této místnosti.", - "Show hidden events in timeline": "Zobrazovat skryté události", - "When rooms are upgraded": "Když je proveden upgrade místnosti", + "Show hidden events in timeline": "Zobrazovat v časové ose skryté události", + "When rooms are upgraded": "Upgrade místnosti", "Upgrade to your own domain": "Přejít na vlastní doménu", "Upgrade this room to the recommended room version": "Provést upgrade místnosti na doporučenou verzi", "this room": "tato místnost", @@ -1372,55 +1372,55 @@ "Default role": "Výchozí role", "Send %(eventType)s events": "Poslat událost %(eventType)s", "Select the roles required to change various parts of the room": "Vyberte role potřebné k provedení různých změn v této místnosti", - "Joining room …": "Připojování se k místnosti …", + "Joining room …": "Vstupování do místnosti…", "Loading …": "Načítání …", - "Rejecting invite …": "Odmítání pozvánky …", + "Rejecting invite …": "Odmítání pozvánky…", "Join the conversation with an account": "Připojte se ke konverzaci s účtem", "Sign Up": "Zaregistrovat se", "Sign In": "Přihlásit se", - "You were kicked from %(roomName)s by %(memberName)s": "%(memberName)s vás vykopl z místnosti %(roomName)s", + "You were kicked from %(roomName)s by %(memberName)s": "Uživatel %(memberName)s vás vykopl z místnosti %(roomName)s", "Reason: %(reason)s": "Důvod: %(reason)s", "Forget this room": "Zapomenout na tuto místnost", - "Re-join": "Znovu se přidat", - "You were banned from %(roomName)s by %(memberName)s": "%(memberName)s vás vykázal z místnosti %(roomName)s", - "Something went wrong with your invite to %(roomName)s": "Něco se pokazilo s vaší pozvánkou do místnosti %(roomName)s", - "You can only join it with a working invite.": "Můžete se připojit jen s funkční pozvánkou.", - "You can still join it because this is a public room.": "Můžete se stejně připojit, tato místnost je veřejná.", - "Join the discussion": "Připojit se k diskuzi", - "Try to join anyway": "Stejně se zkusit připojit", + "Re-join": "Znovu vstoupit", + "You were banned from %(roomName)s by %(memberName)s": "Uživatel %(memberName)s vás vykázal z místnosti %(roomName)s", + "Something went wrong with your invite to %(roomName)s": "S vaší pozvánkou do místnosti %(roomName)s se něco pokazilo", + "You can only join it with a working invite.": "Vstoupit můžete jen s funkční pozvánkou.", + "You can still join it because this is a public room.": "I přesto můžete vstoupit, protože tato místnost je veřejná.", + "Join the discussion": "Zapojit se do diskuze", + "Try to join anyway": "Stejně se pokusit vstoupit", "Do you want to chat with %(user)s?": "Chcete si povídat s uživatelem %(user)s?", - "Do you want to join %(roomName)s?": "Chcete se přidat do místnosti %(roomName)s?", - " invited you": " vás pozval", - "You're previewing %(roomName)s. Want to join it?": "Prohlížíte si místnost %(roomName)s. Chcete se do ní přidat?", - "%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s si nelze jen tak prohlížet. Chcete se do ní přidat?", + "Do you want to join %(roomName)s?": "Chcete vstoupit do místnosti %(roomName)s?", + " invited you": "Uživatel vás pozval", + "You're previewing %(roomName)s. Want to join it?": "Nahlížíte do místnosti %(roomName)s. Chcete do ní vstoupit?", + "%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s si nelze jen tak prohlížet. Chcete do ní vstoupit?", "This room doesn't exist. Are you sure you're at the right place?": "Tato místnost neexistuje. Jste si jistí, že jste na správném místě?", - "Try again later, or ask a room admin to check if you have access.": "Zkuste to znovu nebo se zeptejte administrátora aby zkontrolovat jestli máte přístup.", - "%(errcode)s was returned while trying to access the room. If you think you're seeing this message in error, please submit a bug report.": "Při pokusu o připojení došlo k chybě: %(errcode)s. Pokud si myslíte, že je to bug, můžete ho nahlásit.", - "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "Upgrade místnosti vypne její aktuální verzi a vyrobí novou místnost se stejným jménem a novou verzí.", + "Try again later, or ask a room admin to check if you have access.": "Zkuste to znovu nebo se zeptejte správce, zda může zkontrolovat váš přístup.", + "%(errcode)s was returned while trying to access the room. If you think you're seeing this message in error, please submit a bug report.": "Při pokusu o vstup do místnosti došlo k chybě: %(errcode)s. Pokud si myslíte, že je to chyba, nahlaste ji.", + "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "Upgrade místnosti vypne její aktuální verzi a vyrobí novou místnost se stejným názvem a novou verzí.", "This room has already been upgraded.": "V této místnostu už byl proveden upgrade.", "This room is running room version , which this homeserver has marked as unstable.": "Tato místnost běží na verzi , což domovský server označuje za nestabilní.", - "Failed to revoke invite": "Nepovedlo se stáhnout pozvánku", - "Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "Nepovedlo se stáhnout pozvánku. Mohlo dojít k dočasnému problému nebo na to nemáte dostatečná práva.", - "Revoke invite": "Stáhnout pozvánku", + "Failed to revoke invite": "Pozvání se nepovedlo zrušit", + "Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "Pozvání se nepovedlo zrušit. Mohlo dojít k dočasnému problému nebo na to nemáte dostatečná práva.", + "Revoke invite": "Zrušit pozvání", "Invited by %(sender)s": "Pozván od uživatele %(sender)s", - "Error updating flair": "Nepovedlo se změnit vztah s komunitou", - "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Pro tutu místnost se nepovedlo změnit vztah s komunitou. Možná to server neumožňuje, nebo došlo k dočasné chybě.", - "reacted with %(shortName)s": "regoval/a %(shortName)s", + "Error updating flair": "Nepovedlo se změnit příslušnost ke skupině", + "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Pro tuto místnost se nepovedlo změnit příslušnost ke skupině. Možná to server neumožňuje, nebo došlo k dočasné chybě.", + "reacted with %(shortName)s": "Uživatel reagoval s %(shortName)s", "edited": "pozměněno", "Maximize apps": "Maximalizovat aplikace", "Rotate Left": "Otočit doleva", "Rotate counter-clockwise": "Otočit proti směru hodinových ručiček", "Rotate Right": "Otočit doprava", "Rotate clockwise": "Otočit po směru hodinových ručiček", - "Edit message": "Pozměnit zprávu", + "Edit message": "Upravit zprávu", "GitHub issue": "issue na GitHubu", "Notes": "Poznámky", "If there is additional context that would help in analysing the issue, such as what you were doing at the time, room IDs, user IDs, etc., please include those things here.": "Pokud máte libovolné další informace, které by nám pomohly najít problém, tak nám je taky napište. Může pomoct kdy k problému došlo, identifikátory místnost a uživatele, ...", "View Servers in Room": "Zobrazit servery v místnosti", "Sign out and remove encryption keys?": "Odhlásit a odstranit šifrovací klíče?", - "To help us prevent this in future, please send us logs.": "Abychom tomu mohli pro příště předejít, pošlete nám prosím logy.", + "To help us prevent this in future, please send us logs.": "Abychom tomu mohli pro příště předejít, pošlete nám prosím záznamy.", "Missing session data": "Chybějící data relace", - "Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Některá data sezení, například klíče od šifrovaných zpráv, nám chybí. Přihlašte se prosím znovu a obnovte si klíče ze zálohy.", + "Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Některá data sezení, například klíče od šifrovaných zpráv, nám chybí. Přihlaste se prosím znovu a obnovte si klíče ze zálohy.", "Your browser likely removed this data when running low on disk space.": "Prohlížeč data možná smazal aby ušetřil místo na disku.", "Upload files (%(current)s of %(total)s)": "Nahrát soubory (%(current)s z %(total)s)", "Upload files": "Nahrát soubory", @@ -1433,20 +1433,20 @@ "Cancel All": "Zrušit vše", "Upload Error": "Chyba při nahrávání", "A widget would like to verify your identity": "Widget by chtěl ověřit vaší identitu", - "A widget located at %(widgetUrl)s would like to verify your identity. By allowing this, the widget will be able to verify your user ID, but not perform actions as you.": "Widget z adresy %(widgetUrl)s by chtěl ověřit vaší identitu. Povolením umožnítě widgetu ověřit vaše uživatelské ID, ale neumožníte mu provádět vaším jménem žádné operace.", + "A widget located at %(widgetUrl)s would like to verify your identity. By allowing this, the widget will be able to verify your user ID, but not perform actions as you.": "Widget z adresy %(widgetUrl)s by chtěl ověřit vaší identitu. Povolením umožníte widgetu ověřit vaše uživatelské ID, ale neumožníte mu provádět vaším jménem žádné operace.", "Remember my selection for this widget": "Zapamatovat si volbu pro tento widget", "Deny": "Zakázat", "Unable to validate homeserver/identity server": "Nepovedlo se ověřit domovský server nebo server identity", "Sign in to your Matrix account on ": "Přihlašte se k Matrix účtu na serveru ", - "Use an email address to recover your account": "Použít emailovou adresu k obnovení přístupu k účtu", - "Enter email address (required on this homeserver)": "Zadejte emailovou adresu (vyžaduje jí tento domovský server)", - "Doesn't look like a valid email address": "To nevypadá jako emailová adresa", + "Use an email address to recover your account": "Použít e-mailovou adresu k obnovení přístupu k účtu", + "Enter email address (required on this homeserver)": "Zadejte e-mailovou adresu (tento domovský server ji vyžaduje)", + "Doesn't look like a valid email address": "To nevypadá jako e-mailová adresa", "Enter password": "Zadejte heslo", "Password is allowed, but unsafe": "Heslo můžete použít, ale není bezpečné", "Nice, strong password!": "Super, to vypadá jako rozumné heslo!", "Passwords don't match": "Hesla nejsou stejná", - "Other users can invite you to rooms using your contact details": "Ostatní uživatelá vás můžou pozvat do místností podle kontaktních údajů", - "Enter phone number (required on this homeserver)": "Zadejte telefonní číslo (domovský server jej vyžaduje)", + "Other users can invite you to rooms using your contact details": "Ostatní uživatelé vás můžou pozvat do místností podle kontaktních údajů", + "Enter phone number (required on this homeserver)": "Zadejte telefonní číslo (domovský server ho vyžaduje)", "Doesn't look like a valid phone number": "To nevypadá jako telefonní číslo", "Enter username": "Zadejte uživatelské jméno", "Some characters not allowed": "Nějaké znaky jsou zakázané", @@ -1457,10 +1457,10 @@ "Riot failed to get the public room list.": "Riot nemohl načíst seznam veřejných místností.", "The homeserver may be unavailable or overloaded.": "Domovský server je nedostupný nebo přetížený.", "Add room": "Přidat místnost", - "You have %(count)s unread notifications in a prior version of this room.|other": "Máte %(count)s nepřečtených notifikací v předchozí verzi této místnosti.", - "You have %(count)s unread notifications in a prior version of this room.|one": "Máte %(count)s nepřečtenou notifikaci v předchozí verzi této místnosti.", + "You have %(count)s unread notifications in a prior version of this room.|other": "Máte %(count)s nepřečtených oznámení v předchozí verzi této místnosti.", + "You have %(count)s unread notifications in a prior version of this room.|one": "Máte jedno nepřečtené oznámení v předchozí verzi této místnosti.", "Your profile": "Váš profil", - "Your Matrix account on ": "Váš Matrix účet na serveru ", + "Your Matrix account on ": "Váš účet Matrix na serveru ", "Failed to get autodiscovery configuration from server": "Nepovedlo se automaticky načíst konfiguraci ze serveru", "Invalid base_url for m.homeserver": "Neplatná base_url pro m.homeserver", "Homeserver URL does not appear to be a valid Matrix homeserver": "Na URL domovského serveru asi není funkční Matrix server", @@ -1470,36 +1470,36 @@ "Low bandwidth mode": "Mód nízké spotřeby dat", "Uploaded sound": "Zvuk nahrán", "Sounds": "Zvuky", - "Notification sound": "Zvuk notifikace", - "Reset": "Resetovat", + "Notification sound": "Zvuk oznámení", + "Reset": "Obnovit výchozí", "Set a new custom sound": "Nastavit vlastní zvuk", - "Browse": "Prohlížet", + "Browse": "Procházet", "Cannot reach homeserver": "Nelze se připojit k domovskému serveru", - "Ensure you have a stable internet connection, or get in touch with the server admin": "Ujistěte se, že máte stabilní internetové připojení. Případně problém řešte s administrátorem serveru", + "Ensure you have a stable internet connection, or get in touch with the server admin": "Ujistěte se, že máte stabilní internetové připojení. Případně problém řešte se správcem serveru", "Your Riot is misconfigured": "Riot je špatně nakonfigurován", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Zeptejte se svého administrátora, jestli by vám nezkontrolovat konfiguraci Riotu, asi obsahuje chyby nebo duplicity.", + "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Požádejte správce vašeho Riotu, aby zkontroloval vaši konfiguraci. Pravděpodobně obsahuje chyby nebo duplicity.", "Unexpected error resolving identity server configuration": "Chyba při hledání konfigurace serveru identity", "Use lowercase letters, numbers, dashes and underscores only": "Používejte pouze malá písmena, čísla, pomlčky a podtržítka", "Cannot reach identity server": "Nelze se připojit k serveru identity", - "You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Můžete se zaregistrovat, ale některé funkce nebudou dostupné dokud nezačne server identity fungovat. Pokud se vám toto varování zobrazuje pořád, tak zkontrolujte svojí konfiguraci a nebo kontaktujte administrátora serveru.", - "You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Můžete si změnit heslo, ale některé funkce nebudou dostupné dokud nezačne server identity fungovat. Pokud se vám toto varování zobrazuje pořád, tak zkontrolujte svojí konfiguraci a nebo kontaktujte administrátora serveru.", - "You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Můžete se přihlásit, ale některé funkce nebudou dostupné dokud nezačne server identity fungovat. Pokud se vám toto varování zobrazuje pořád, tak zkontrolujte svojí konfiguraci a nebo kontaktujte administrátora serveru.", + "You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Můžete se zaregistrovat, ale některé funkce nebudou dostupné dokud nezačne server identity fungovat. Pokud se vám toto varování zobrazuje pořád, tak zkontrolujte svojí konfiguraci a nebo kontaktujte správce serveru.", + "You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Můžete si změnit heslo, ale některé funkce nebudou dostupné dokud nezačne server identity fungovat. Pokud se vám toto varování zobrazuje pořád, tak zkontrolujte svojí konfiguraci a nebo kontaktujte správce serveru.", + "You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Můžete se přihlásit, ale některé funkce nebudou dostupné dokud nezačne server identity fungovat. Pokud se vám toto varování zobrazuje pořád, tak zkontrolujte svojí konfiguraci a nebo kontaktujte správce serveru.", "Call failed due to misconfigured server": "Volání selhalo, protože je rozbitá konfigurace serveru", - "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Zeptejte se administrátora (%(homeserverDomain)s) jestli by nemohl nakonfigurovat server TURN, aby začalo fungoval volání.", + "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Zeptejte se správce (%(homeserverDomain)s) jestli by nemohl nakonfigurovat server TURN, aby začalo fungoval volání.", "Alternatively, you can try to use the public server at turn.matrix.org, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "Případně můžete zkusit použít veřejný server turn.matrix.org, což nemusí fungovat tak spolehlivě a řekne to tomu cizímu serveru vaší IP adresu. Můžete to udělat v Nastavení.", "Try using turn.matrix.org": "Zkuste použít turn.matrix.org", "Messages": "Zprávy", "Actions": "Akce", "Sends a message as plain text, without interpreting it as markdown": "Pošle zprávu jako prostý text, neinterpretuje jí jako Markdown", "You do not have the required permissions to use this command.": "Na provedení tohoto příkazu nemáte dostatečná oprávnění.", - "Changes the avatar of the current room": "Změní váš avatar pro tuto místnost", + "Changes the avatar of the current room": "Změní avatar této místnosti", "Changes your avatar in all rooms": "Změní váš avatar pro všechny místnosti", "Use an identity server": "Používat server identit", - "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Použít server identit na odeslání emailové pozvánky. Pokračováním použijete výchozí server identit (%(defaultIdentityServerName)s) nebo ho můžete změnit v Nastavení.", - "Use an identity server to invite by email. Manage in Settings.": "Použít server identit na odeslání emailové pozvánky. Můžete spravovat v Nastavení.", + "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Použít server identit k odeslání e-mailové pozvánky. Pokračováním použijete výchozí server identit (%(defaultIdentityServerName)s) nebo ho můžete změnit v Nastavení.", + "Use an identity server to invite by email. Manage in Settings.": "Použít server identit na odeslání e-mailové pozvánky. Můžete spravovat v Nastavení.", "Displays list of commands with usages and descriptions": "Zobrazuje seznam příkazu s popiskem", "%(senderName)s made no change.": "%(senderName)s neudělal žádnou změnu.", - "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Povolit použití serveru turn.matrix.org na spojení hlasového hovoru pokud váš domovský server tuto služby neposkytuje (sdělí to serveru vaší IP adresu)", + "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Povolit použití serveru turn.matrix.org pro hlasové hovory pokud váš domovský server tuto službu neposkytuje (vaše IP adresu bude během hovoru viditelná)", "Send read receipts for messages (requires compatible homeserver to disable)": "Odesílat potvrzení o přijetí (vypnutá volba vyžaduje kompatibilní domovský server)", "Accept to continue:": "Pro pokračování odsouhlaste :", "ID": "ID", @@ -1518,20 +1518,20 @@ "Disconnect from the identity server ?": "Odpojit se ze serveru identit ?", "Disconnect": "Odpojit", "You are still sharing your personal data on the identity server .": "Pořád sdílíte osobní údaje se serverem identit .", - "We recommend that you remove your email addresses and phone numbers from the identity server before disconnecting.": "Předtím než se odpojíte doporučujeme odstranit emailovou adresu a telefonní číslo ze serveru identit.", + "We recommend that you remove your email addresses and phone numbers from the identity server before disconnecting.": "Než se odpojíte, doporučujeme odstranit e-mailovou adresu a telefonní číslo ze serveru identit.", "Disconnect anyway": "Stejně se odpojit", "Identity Server (%(server)s)": "Server identit (%(server)s)", - "You are currently using to discover and be discoverable by existing contacts you know. You can change your identity server below.": "Aktuálně používáte server na hledání existujících kontaktů. Níže můžete server identit změnit.", + "You are currently using to discover and be discoverable by existing contacts you know. You can change your identity server below.": "Pro hledání existujících kontaktů používáte server identit . Níže ho můžete změnit.", "If you don't want to use to discover and be discoverable by existing contacts you know, enter another identity server below.": "Pokud nechcete na hledání existujících kontaktů používat server , zvolte si jiný server.", "Identity Server": "Server identit", - "You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Aktuálně nepoužíváte žádný server identit. Na hledání existujících kontaktů a přidání se do registru kontatů přidejte server identit níže.", - "Disconnecting from your identity server will mean you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Odpojení ze serveru identit znamená, že vás nepůjde najít podle emailové adresy ani telefonního čísla and vy také nebudete moct hledat ostatní.", - "Using an identity server is optional. If you choose not to use an identity server, you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Použití serveru identit je volitelné. Nemusíte server identit používat, ale nepůjde vás pak najít podle emailové adresy ani telefonního čísla a vy také nebudete moct hledat ostatní.", + "You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Pro hledání existujících kontaktů nepoužíváte žádný server identit . Abyste mohli hledat kontakty, nějaký níže nastavte.", + "Disconnecting from your identity server will mean you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Po odpojení od serveru identit nebude možné vás najít podle e-mailové adresy ani telefonního čísla, a zároveň podle nich ani vy nebudete moci hledat ostatní kontakty.", + "Using an identity server is optional. If you choose not to use an identity server, you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Použití serveru identit je volitelné. Nemusíte server identit používat, ale nepůjde vás pak najít podle e-mailové adresy ani telefonního čísla a vy také nebudete moci hledat ostatní.", "Do not use an identity server": "Nepoužívat server identit", "Enter a new identity server": "Zadejte nový server identit", "Integration Manager": "Správce integrací", - "Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Musíte odsouhlasit podmínky použití serveru (%(serverName)s) abyste se mohli zapsat do registru emailových adres a telefonních čísel.", - "Deactivate account": "Deaktivovat účet", + "Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Pro zapsáním do registru e-mailových adres a telefonních čísel odsouhlaste podmínky používání serveru (%(serverName)s).", + "Deactivate account": "Deaktivace účtu", "Always show the window menu bar": "Vždy zobrazovat horní lištu okna", "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Odeslat pozvánku pomocí serveru identit. Použít výchozí (%(defaultIdentityServerName)s) nebo přenastavit Nastavení.", "Use an identity server to invite by email. Manage in Settings.": "Odeslat pozvánku pomocí serveru identit. Přenastavit v Nastavení.", @@ -1539,67 +1539,67 @@ "Please tell us what went wrong or, better, create a GitHub issue that describes the problem.": "Napište nám prosím co se pokazilo a nebo nám napište issue na GitHub, kde popíšete problém.", "Removing…": "Odstaňování…", "Clear all data": "Smazat všechna data", - "Please enter a name for the room": "Zadejte prosím jméno místnosti", + "Please enter a name for the room": "Zadejte prosím název místnosti", "Set a room alias to easily share your room with other people.": "Nastavte alias místnosti, abyste mohli místnost snadno sdílet s ostatními.", - "This room is private, and can only be joined by invitation.": "Tato místnost je neveřejná a lze se připojit pouze s pozvánkou.", + "This room is private, and can only be joined by invitation.": "Tato místnost je neveřejná a lze do ní vstoupit jen s pozvánkou.", "Create a public room": "Vytvořit veřejnou místnost", "Create a private room": "Vytvořit neveřejnou místnost", "Topic (optional)": "Téma (volitelné)", "Make this room public": "Zveřejnit místnost", "Hide advanced": "Skrýt pokročilé", "Show advanced": "Zobrazit pokročilé", - "Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Zamezit uživatelům jiných domovských serverů, aby se připojili do místnosti (Toto nelze později změnit!)", + "Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Zamezit uživatelům jiných domovských serverů, aby do místnosti vstoupili (nelze později změnit!)", "Your homeserver doesn't seem to support this feature.": "Váš domovský server asi tuto funkci nepodporuje.", "Message edits": "Editování zpráv", "Please fill why you're reporting.": "Vyplňte prosím co chcete nahlásit.", - "Report Content to Your Homeserver Administrator": "Nahlásit obsah administrátorovi vašeho domovského serveru", - "Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "Nahlášení této zprávy pošle její jedinečné 'event ID' administrátorovi vašeho domovského serveru. Pokud jsou zprávy šifrované, administrátor nebude mít možnost přečíst text zprávy ani se podívat na soubory nebo obrázky.", + "Report Content to Your Homeserver Administrator": "Nahlásit obsah správci vašeho domovského serveru", + "Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "Nahlášení této zprávy pošle její jedinečné 'event ID' správci vašeho domovského serveru. Pokud jsou zprávy šifrované, správce nebude mít možnost přečíst text zprávy ani se podívat na soubory nebo obrázky.", "Send report": "Nahlásit", "Upgrading this room requires closing down the current instance of the room and creating a new room in its place. To give room members the best possible experience, we will:": "Upgrade vyžaduje zrušení této místnosti a vyrobení nové, která jí nahradí. Pro usnadnění procesu pro členy místnosti, provedeme:", "Command Help": "Nápověda příkazu", - "Find others by phone or email": "Hledat ostatní pomocí emailu nebo telefonu", - "Be found by phone or email": "Umožnit ostatním mě nalézt pomocí emailu nebo telefonu", - "Add Email Address": "Přidat emailovou adresu", + "Find others by phone or email": "Najít ostatní pomocí e-mailu nebo telefonu", + "Be found by phone or email": "Umožnit ostatním mě nalézt pomocí e-mailu nebo telefonu", + "Add Email Address": "Přidat e-mailovou adresu", "Add Phone Number": "Přidat telefonní číslo", - "This action requires accessing the default identity server to validate an email address or phone number, but the server does not have any terms of service.": "Tato akce vyžaduje přístup k výchozímu serveru identity aby šlo ověřit email a telefon, ale server nemá podmínky použití.", + "This action requires accessing the default identity server to validate an email address or phone number, but the server does not have any terms of service.": "Tato akce vyžaduje přístup k výchozímu serveru identity aby šlo ověřit e-mail a telefon, ale server nemá podmínky použití.", "Trust": "Důvěra", "%(name)s (%(userId)s)": "%(name)s (%(userId)s)", "Multiple integration managers": "Více správců integrací", "Show previews/thumbnails for images": "Zobrazovat náhledy obrázků", "You should remove your personal data from identity server before disconnecting. Unfortunately, identity server is currently offline or cannot be reached.": "Před odpojením byste měli smazat osobní údaje ze serveru identit . Bohužel, server je offline nebo neodpovídá.", "You should:": "Měli byste:", - "check your browser plugins for anything that might block the identity server (such as Privacy Badger)": "zkontrolujte, jestli nemáte v prohlížeči nějaký doplněk blokující server identit (například Privacy Badger)", - "contact the administrators of identity server ": "konaktujte administrátora serveru identit ", + "check your browser plugins for anything that might block the identity server (such as Privacy Badger)": "zkontrolujte, jestli nemáte v prohlížeči nějaký doplněk blokující server identit (např. Privacy Badger)", + "contact the administrators of identity server ": "kontaktujte správce serveru identit ", "wait and try again later": "počkejte z zkuste to znovu později", - "Discovery": "Nalezitelnost", + "Discovery": "Veřejné", "Clear cache and reload": "Smazat mezipaměť a načíst znovu", "Show tray icon and minimize window to it on close": "Zobrazovat systémovou ikonu a minimalizovat při zavření", - "Read Marker lifetime (ms)": "životnost značky přečteno (ms)", - "Read Marker off-screen lifetime (ms)": "životnost značky přečteno mimo obrazovku (ms)", + "Read Marker lifetime (ms)": "Platnost značky přečteno (ms)", + "Read Marker off-screen lifetime (ms)": "Platnost značky přečteno mimo obrazovku (ms)", "Upgrade the room": "Upgradovat místnost", "Enable room encryption": "Povolit v místnosti šifrování", "Error changing power level requirement": "Chyba změny požadavku na úroveň oprávnění", - "An error occurred changing the room's power level requirements. Ensure you have sufficient permissions and try again.": "Došlo k chybě při změně požadované úrovně oprávnění v místnosti. Ubezpečte se, že na to máte dostatečná práva a zkuste to znovu.", + "An error occurred changing the room's power level requirements. Ensure you have sufficient permissions and try again.": "Došlo k chybě při změně požadované úrovně oprávnění v místnosti. Ubezpečte se, že na to máte dostatečná práva, a zkuste to znovu.", "Error changing power level": "Chyba při změně úrovně oprávnění", - "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "Došlo k chybě při změně úrovně oprávnění uživatele. Ubezpečte se, že na to máte dostatečná práva a zkuste to znovu.", - "Unable to revoke sharing for email address": "Nepovedlo se zrušit sdílení emailové adresy", - "Unable to share email address": "Nepovedlo se nasdílet emailovou adresu", - "Your email address hasn't been verified yet": "Vaše emailová adresa nebyla zatím verifikována", - "Click the link in the email you received to verify and then click continue again.": "Pro verifikaci a pokračování klikněte na odkaz v emailu, který vím přišel.", - "Verify the link in your inbox": "Ověřte odkaz v emailové schánce", + "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "Došlo k chybě při změně úrovně oprávnění uživatele. Ubezpečte se, že na to máte dostatečná práva, a zkuste to znovu.", + "Unable to revoke sharing for email address": "Nepovedlo se zrušit sdílení e-mailové adresy", + "Unable to share email address": "Nepovedlo se nasdílet e-mailovou adresu", + "Your email address hasn't been verified yet": "Vaše e-mailová adresa ještě nebyla ověřena", + "Click the link in the email you received to verify and then click continue again.": "Pro ověření a pokračování klepněte na odkaz v e-mailu, který vím přišel.", + "Verify the link in your inbox": "Ověřte odkaz v e-mailové schránce", "Complete": "Dokončit", "Revoke": "Zneplatnit", "Share": "Sdílet", - "Discovery options will appear once you have added an email above.": "Možnosti nalezitelnosti se objeví až výše přidáte svou emailovou adresu.", + "Discovery options will appear once you have added an email above.": "Možnosti nastavení veřejného profilu se objeví po přidání e-mailové adresy výše.", "Unable to revoke sharing for phone number": "Nepovedlo se zrušit sdílení telefonního čísla", "Unable to share phone number": "Nepovedlo se nasdílet telefonní číslo", "Please enter verification code sent via text.": "Zadejte prosím ověřovací SMS kód.", - "Discovery options will appear once you have added a phone number above.": "Možnosti nalezitelnosti se objeví až zadáte telefonní číslo výše.", - "Remove %(email)s?": "Odstranit %(email)s?", + "Discovery options will appear once you have added a phone number above.": "Možnosti nastavení veřejného profilu se objeví po přidání telefonního čísla výše.", + "Remove %(email)s?": "Odstranit adresu %(email)s?", "Remove %(phone)s?": "Odstranit %(phone)s?", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains.": "SMS zpráva byla odeslána na +%(msisdn)s. Zadejte prosím ověřovací kód, který obsahuje.", "No recent messages by %(user)s found": "Nebyly nalezeny žádné nedávné zprávy od uživatele %(user)s", - "Try scrolling up in the timeline to see if there are any earlier ones.": "Zkuste zascrollovat nahoru, jestli tam nejsou nějaké dřívější.", + "Try scrolling up in the timeline to see if there are any earlier ones.": "Zkuste posunout časovou osu nahoru, jestli tam nejsou nějaké dřívější.", "Remove recent messages by %(user)s": "Odstranit nedávné zprávy od uživatele %(user)s", "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|other": "Odstraňujeme %(count)s zpráv od %(user)s. Nelze to vzít zpět. Chcete pokračovat?", "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "Odstraňujeme jednu zprávu od %(user)s. Nelze to vzít zpět. Chcete pokračovat?", @@ -1607,7 +1607,7 @@ "Remove %(count)s messages|other": "Odstranit %(count)s zpráv", "Remove %(count)s messages|one": "Odstranit zprávu", "Deactivate user?": "Deaktivovat uživatele?", - "Deactivating this user will log them out and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?": "Deaktivování uživatele ho odhlásí a zabrání mu v opětovném přihlášení. Navíc bude ostraněn ze všech místností. Akci nelze vzít zpět. Jste si jistí, že chcete uživatele deaktivovat?", + "Deactivating this user will log them out and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?": "Deaktivování uživatele ho odhlásí a zabrání mu v opětovném přihlášení. Navíc bude odstraněn ze všech místností. Akci nelze vzít zpět. Opravdu chcete uživatele deaktivovat?", "Deactivate user": "Deaktivovat uživatele", "Remove recent messages": "Odstranit nedávné zprávy", "Bold": "Tučně", @@ -1617,12 +1617,12 @@ "Room %(name)s": "Místnost %(name)s", "Recent rooms": "Nedávné místnosti", "Loading room preview": "Načítání náhdledu místnosti", - "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Při ověřování pozvánky jsme dostali chybu (%(errcode)s). Můžete zkusit tuto informaci předat administrátorovi místnosti.", - "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Pozvánka do místnosti %(roomName)s byla poslána na %(email)s, který není přidaný k tomuto účtu", - "Link this email with your account in Settings to receive invites directly in Riot.": "Přidejte si tento email k účtu v Nastavení, abyste dostávali pozvání přímo v Riotu.", - "This invite to %(roomName)s was sent to %(email)s": "Pozvánka do %(roomName)s byla odeslána na %(email)s", + "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Při ověřování pozvánky došlo k chybě (%(errcode)s). Předejte tuto informaci správci místnosti.", + "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Pozvánka do místnosti %(roomName)s byla poslána na adresu %(email)s, která není k tomuto účtu přidána", + "Link this email with your account in Settings to receive invites directly in Riot.": "Přidejte si tento e-mail k účtu v Nastavení, abyste dostávali pozvání přímo v Riotu.", + "This invite to %(roomName)s was sent to %(email)s": "Pozvánka do %(roomName)s byla odeslána na adresu %(email)s", "Use an identity server in Settings to receive invites directly in Riot.": "Používat server identit z nastavení k přijímání pozvánek přímo v Riotu.", - "Share this email in Settings to receive invites directly in Riot.": "Sdílet tento email v nastavení, abyste mohli dostávat pozvánky přímo v Riotu.", + "Share this email in Settings to receive invites directly in Riot.": "Sdílet tento e-mail v nastavení, abyste mohli dostávat pozvánky přímo v Riotu.", "%(count)s unread messages including mentions.|other": "%(count)s nepřečtených zpráv a zmínek.", "%(count)s unread messages including mentions.|one": "Nepřečtená zmínka.", "%(count)s unread messages.|other": "%(count)s nepřečtených zpráv.", @@ -1637,11 +1637,11 @@ "Show image": "Zobrazit obrázek", "You verified %(name)s": "Ověřili jste %(name)s", "You cancelled verifying %(name)s": "Zrušili jste ověření %(name)s", - "%(name)s cancelled verifying": "%(name)s zrušil/a ověření", + "%(name)s cancelled verifying": "Uživatel %(name)s zrušil ověření", "You accepted": "Přijali jste", - "%(name)s accepted": "%(name)s přijal/a", + "%(name)s accepted": "Uživatel %(name)s přijal", "You cancelled": "Zrušili jste", - "%(name)s cancelled": "%(name)s zrušil/a", + "%(name)s cancelled": "Uživatel %(name)s zrušil", "%(name)s wants to verify": "%(name)s chce ověřit", "You sent a verification request": "Poslali jste požadavek na ověření", "Show all": "Zobrazit vše", @@ -1658,12 +1658,12 @@ "Quick Reactions": "Rychlé reakce", "Cancel search": "Zrušit hledání", "Please create a new issue on GitHub so that we can investigate this bug.": "Vyrobte prosím nové issue na GitHubu abychom mohli chybu opravit.", - "%(severalUsers)smade no changes %(count)s times|other": "%(severalUsers)s neudělali %(count)s krát žádnou změnu", - "%(severalUsers)smade no changes %(count)s times|one": "%(severalUsers)sneudělali žádnou změnu", - "%(oneUser)smade no changes %(count)s times|other": "%(oneUser)sneudělal %(count)s krát žádnou změnu", - "%(oneUser)smade no changes %(count)s times|one": "%(oneUser)sneudělal žádnou změnu", + "%(severalUsers)smade no changes %(count)s times|other": "Uživatelé %(severalUsers)s neudělali %(count)s krát žádnou změnu", + "%(severalUsers)smade no changes %(count)s times|one": "Uživatelé %(severalUsers)s neudělali žádnou změnu", + "%(oneUser)smade no changes %(count)s times|other": "Uživatel %(oneUser)s neudělal %(count)s krát žádnou změnu", + "%(oneUser)smade no changes %(count)s times|one": "Uživatel %(oneUser)s neudělal žádnou změnu", "Room alias": "Alias místnosti", - "e.g. my-room": "například moje-mistost", + "e.g. my-room": "např. moje-mistnost", "Please provide a room alias": "Zadejte prosím alias místnosti", "This alias is available to use": "Tento alias je volný", "This alias is already in use": "Tento alias už je používán", @@ -1678,22 +1678,22 @@ "Resend %(unsentCount)s reaction(s)": "Poslat %(unsentCount)s reakcí znovu", "Resend removal": "Odeslat smazání znovu", "Report Content": "Nahlásit obsah", - "Missing captcha public key in homeserver configuration. Please report this to your homeserver administrator.": "Na domovském serveru chybí veřejný klíč pro captcha. Nahlaste to prosím administrátorovi serveru.", - "No identity server is configured so you cannot add an email address in order to reset your password in the future.": "Žádný server identit není nakonfigurován, takže nemůžete přidat emailovou adresu pro obnovení hesla.", - "Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Nastavit emailovou adresu pro obnovení hesla. Také můžete použít email nebo telefon, aby vás vaši přátelé snadno nalezli.", - "Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Nastavit emailovou adresu pro obnovení hesla. Také můžete použít email, aby vás vaši přátelé snadno nalezli.", - "Enter your custom homeserver URL What does this mean?": "Zadejte adresu domovského serveru Co to znamená?", - "Enter your custom identity server URL What does this mean?": "Zadejte adresu serveru identit Co to znamená?", - "Explore": "Prohlížet", - "Filter": "Filtrovat", - "Filter rooms…": "Filtrovat místnosti…", + "Missing captcha public key in homeserver configuration. Please report this to your homeserver administrator.": "Na domovském serveru chybí veřejný klíč pro captcha. Nahlaste to prosím správci serveru.", + "No identity server is configured so you cannot add an email address in order to reset your password in the future.": "Žádný server identit není nakonfigurován, takže nemůžete přidat e-mailovou adresu pro obnovení hesla.", + "Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Nastavte si e-mailovou adresu pro obnovení hesla. E-mail nebo telefon můžete také použít, aby vás vaši přátelé snadno našli.", + "Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Nastavte si e-mailovou adresu pro obnovení hesla. E-mail můžete také použít, aby vás vaši přátelé snadno našli.", + "Enter your custom homeserver URL What does this mean?": "Zadejte adresu domovského serveru. Co to znamená?", + "Enter your custom identity server URL What does this mean?": "Zadejte adresu serveru identit. Co to znamená?", + "Explore": "Procházet", + "Filter": "Filtr místností", + "Filter rooms…": "Najít místnost…", "%(creator)s created and configured the room.": "%(creator)s vytvořil a nakonfiguroval místnost.", "Preview": "Náhled", "View": "Zobrazit", "Find a room…": "Najít místnost…", - "Find a room… (e.g. %(exampleRoom)s)": "Najít místnost… (například %(exampleRoom)s)", - "If you can't find the room you're looking for, ask for an invite or Create a new room.": "Pokud nemůžete nelézt místnost, kterou hledáte, napište si o pozvánku nebo Vytvořte novou.", - "Explore rooms": "Prohlížet místnosti", + "Find a room… (e.g. %(exampleRoom)s)": "Najít místnost… (např. %(exampleRoom)s)", + "If you can't find the room you're looking for, ask for an invite or Create a new room.": "Pokud nemůžete nějakou místnost najít, požádejte stávající členy o pozvánku nebo si Vytvořte novou místnost.", + "Explore rooms": "Procházet místnosti", "Jump to first unread room.": "Skočit na první nepřečtenou místnost.", "Jump to first invite.": "Skočit na první pozvánku.", "No identity server is configured: add one in server settings to reset your password.": "Žádný server identit není nakonfigurován: přidejte si ho v nastavení, abyste mohli obnovit heslo.", @@ -1708,14 +1708,14 @@ "Enter your password to sign in and regain access to your account.": "Zadejte heslo pro přihlášení a obnovte si přístup k účtu.", "Forgotten your password?": "Zapomněli jste heslo?", "Sign in and regain access to your account.": "Přihlaste se a získejte přístup ke svému účtu.", - "You cannot sign in to your account. Please contact your homeserver admin for more information.": "Nemůžete se přihlásit do svého účtu. Kontaktujte administrátora domovského serveru pro více informací.", + "You cannot sign in to your account. Please contact your homeserver admin for more information.": "Nemůžete se přihlásit do svého účtu. Kontaktujte správce domovského serveru pro více informací.", "You're signed out": "Jste odhlášeni", "Clear personal data": "Smazat osobní data", "Command Autocomplete": "Automatické doplňování příkazů", - "Community Autocomplete": "Automatické doplňování komunit", + "Community Autocomplete": "Automatické doplňování skupin", "DuckDuckGo Results": "Výsledky hledání DuckDuckGo", - "Emoji Autocomplete": "Automatické doplňování Emodži", - "Notification Autocomplete": "Automatické doplňování upozornění", + "Emoji Autocomplete": "Automatické doplňování emoji", + "Notification Autocomplete": "Automatické doplňování oznámení", "Room Autocomplete": "Automatické doplňování místností", "User Autocomplete": "Automatické doplňování uživatelů", "Custom (%(level)s)": "Vlastní (%(level)s)", @@ -1743,18 +1743,18 @@ "%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil pravidlo blokující servery odpovídající %(oldGlob)s na servery odpovídající %(newGlob)s z důvodu %(reason)s", "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil blokovací pravidlo odpovídající %(oldGlob)s na odpovídající %(newGlob)s z důvodu %(reason)s", "Try out new ways to ignore people (experimental)": "Vyzkošejte nové metody ignorování lidí (experimentální)", - "Enable local event indexing and E2EE search (requires restart)": "Povolit lokální indexování a vyhledávání v E2E šifrovaných zprávách (vyžaduje restart)", - "Match system theme": "Přizpůsobit se systémovému vzhledu", + "Enable local event indexing and E2EE search (requires restart)": "Povolit lokální indexování a vyhledávání v end-to-end šifrovaných zprávách (vyžaduje restart)", + "Match system theme": "Nastavit podle vzhledu systému", "My Ban List": "Můj seznam zablokovaných", "This is your list of users/servers you have blocked - don't leave the room!": "Toto je váš seznam blokovaných uživatelů/serverů - neopouštějte tuto místnost!", "Decline (%(counter)s)": "Odmítnout (%(counter)s)", - "Connecting to integration manager...": "Připojuji se ke správci integrací...", + "Connecting to integration manager...": "Připojování se ke správci integrací...", "Cannot connect to integration manager": "Nepovedlo se připojení ke správci integrací", "The integration manager is offline or it cannot reach your homeserver.": "Správce integrací neběží nebo se nemůže připojit k vašemu domovskému serveru.", - "Clear notifications": "Odstranit notifikace", + "Clear notifications": "Odstranit oznámení", "Use an Integration Manager (%(serverName)s) to manage bots, widgets, and sticker packs.": "Použít správce integrací (%(serverName)s) na správu botů, widgetů a samolepek.", "Use an Integration Manager to manage bots, widgets, and sticker packs.": "Použít správce integrací na správu botů, widgetů a samolepek.", - "Manage integrations": "Spravovat integrace", + "Manage integrations": "Správa integrací", "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Správce integrací dostává konfigurační data a může za vás modifikovat widgety, posílat pozvánky a nastavovat úrovně oprávnění.", "Customise your experience with experimental labs features. Learn more.": "Přizpůsobte si aplikaci s experimentálními funkcemi. Více informací.", "Ignored/Blocked": "Ignorováno/Blokováno", @@ -1776,10 +1776,10 @@ "View rules": "Zobrazit pravidla", "You are currently subscribed to:": "Odebíráte:", "⚠ These settings are meant for advanced users.": "⚠ Tato nastavení jsou pro pokročilé uživatele.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Sem přidejte uživatele a servery, které chcete ignorovat. Můžete použít hvězdičku místo libovolných znaků. Například pravidlo @bot:* bude blokovat všechny uživatele se jménem 'bot' na libovolném serveru.", + "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Sem přidejte uživatele a servery, které chcete ignorovat. Můžete použít hvězdičku místo libovolných znaků. Například pravidlo @bot:* zablokuje všechny uživatele se jménem 'bot' na libovolném serveru.", "Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.": "Lidé a servery jsou blokováni pomocí seznamů obsahující pravidla koho blokovat. Odebírání blokovacího seznamu znamená, že neuvidíte uživatele a servery na něm uvedené.", "Personal ban list": "Osobní seznam blokací", - "Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Váš osobní seznam blokací obsahuje všechny uživatele a server, které nechcete vidět. Po ignorování prvního uživatele/server se vytvoří nová místnost 'Můj seznam blokací' - zůstaňte v ní aby seznam platil.", + "Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Váš osobní seznam blokací obsahuje všechny uživatele a servery, které nechcete vidět. Po ignorování prvního uživatele/serveru se vytvoří nová místnost 'Můj seznam blokací' - zůstaňte v ní, aby seznam platil.", "Server or user ID to ignore": "Server nebo ID uživatele", "eg: @bot:* or example.org": "např.: @bot:* nebo example.org", "Subscribed lists": "Odebírané seznamy", @@ -1787,24 +1787,24 @@ "Subscribe": "Odebírat", "This message cannot be decrypted": "Zprávu nelze rozšifrovat", "Unencrypted": "Nešifrované", - " wants to chat": " chce chatovat", - "Start chatting": "Začít chatovat", + " wants to chat": " si chce psát", + "Start chatting": "Zahájit konverzaci", "Failed to connect to integration manager": "Nepovedlo se připojit ke správci integrací", "Trusted": "Důvěryhodné", "Not trusted": "Nedůvěryhodné", "Direct message": "Přímá zpráva", "%(role)s in %(roomName)s": "%(role)s v %(roomName)s", - "Messages in this room are end-to-end encrypted.": "V této místosti jsou zprávy E2E šifrované.", + "Messages in this room are end-to-end encrypted.": "V této místnosti jsou zprávy šifrované end-to-end.", "Security": "Bezpečnost", "Verify": "Ověřit", - "You have ignored this user, so their message is hidden. Show anyways.": "Tohoto uživatele ignorujete, takže jsou jeho/její zprávy skryté. Přesto zobrazit.", + "You have ignored this user, so their message is hidden. Show anyways.": "Tohoto uživatele ignorujete, takže jsou jeho zprávy skryté. Přesto zobrazit.", "Reactions": "Reakce", " reacted with %(content)s": " reagoval %(content)s", "Any of the following data may be shared:": "Následující data můžou být sdílena:", "Your display name": "Vaše zobrazované jméno", "Your avatar URL": "URL vašeho avataru", "Your user ID": "Vaše ID", - "Your theme": "Váš motiv", + "Your theme": "Váš motiv vzhledu", "Riot URL": "URL Riotu", "Room ID": "ID místnosti", "Widget ID": "ID widgetu", @@ -1815,26 +1815,26 @@ "This widget may use cookies.": "Widget může používat cookies.", "More options": "Více možností", "Integrations are disabled": "Integrace jsou zakázané", - "Enable 'Manage Integrations' in Settings to do this.": "Abyste mohli akci provést, povolte 'Spravovat integrace' v Nastavení.", + "Enable 'Manage Integrations' in Settings to do this.": "Pro provedení této akce povolte v nastavení správu integrací.", "Integrations not allowed": "Integrace nejsou povolené", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Váš Riot neumožňuje použít správce integrací. Kontaktujte prosím administrátora.", + "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Váš Riot neumožňuje použít správce integrací. Kontaktujte prosím správce.", "Automatically invite users": "Automaticky zvát uživatele", "Upgrade private room": "Upgradovat soukromou místnost", "Upgrade public room": "Upgradovat veřejnou místnost", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Upgradování místnosti je pokročilá operace a je doporučeno jí provést pokud je místnost nestabilní kvůli chybám, chybějícím funkcím nebo zranitelnostem.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Toto běžně ovlivňuje jak je místnost zpracovávána na serveru. Pokud máte problém s Riotem, nahlaste nám prosím bug.", + "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Toto běžně ovlivňuje pouze zpracovávání místnosti na serveru. Pokud máte problém s Riotem, nahlaste nám ho prosím.", "You'll upgrade this room from to .": "Upgradujeme tuto místnost z na .", "Upgrade": "Upgradovat", "Enter secret storage passphrase": "Zadejte tajné heslo k bezpečnému úložišti", "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Nepovedlo se přistoupit k bezpečnému úložišti. Zkontrolujte prosím, že je zadané správné heslo.", "Warning: You should only access secret storage from a trusted computer.": "Varování: Přistupujte k bezpečnému úložišti pouze z důvěryhodných počítačů.", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Pokud si nepamatujete heslo, můžete použít váš obnovovací klíč nebo si nastavte nové možnosti obnovení.", + "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Pokud si nepamatujete heslo, můžete použít svůj obnovovací klíč nebo si nastavte nové možnosti obnovení.", "Enter secret storage recovery key": "Zadejte klíč k bezpečnému úložišti", "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Nepovedlo se dostat k bezpečnému úložišti. Ověřte prosím, že je zadaný správný klíč.", "If you've forgotten your recovery key you can .": "Pokud si nepamatujete obnovovací klíč, můžete si .", "Warning: You should only set up key backup from a trusted computer.": "Varování: Nastavujte zálohu jen z důvěryhodných počítačů.", "If you've forgotten your recovery key you can ": "Pokud si nepamatujete obnovovací klíč, můžete si ", - "Notification settings": "Nastavení notifikací", + "Notification settings": "Nastavení oznámení", "Reload": "Načíst znovu", "Take picture": "Udělat fotku", "Remove for everyone": "Odstranit pro všechny", @@ -1847,7 +1847,7 @@ "As a safety net, you can use it to restore your access to encrypted messages.": "Můžete jej použít jako záchranou síť na obnovení šifrovaných zpráv.", "Keep your recovery key somewhere very secure, like a password manager (or a safe).": "Uschovejte svůj klíč na velmi bezpečném místě, například ve správci hesel (nebo v trezoru).", "Your recovery key has been copied to your clipboard, paste it to:": "Váš obnovovací klíč byl zkopírován do schránky, vložte jej:", - "Your recovery key is in your Downloads folder.": "Váš obnovací klíč je ve složce Stažené.", + "Your recovery key is in your Downloads folder.": "Váš obnovovací klíč je ve složce Stažené.", "Storing secrets...": "Ukládám tajná data...", "Unable to set up secret storage": "Nepovedlo se nastavit bezpečné úložiště", "The message you are trying to send is too large.": "Zpráva kterou se snažíte odeslat je příliš velká.", @@ -1865,7 +1865,7 @@ "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "V místnosti jsou neověřené relace: pokud budete pokračovat bez ověření, bude možné váš hovor odposlouchávat.", "Verify this session": "Ověřit tuto relaci", "Encryption upgrade available": "Je dostupná aktualizace šifrování", - "Set up encryption": "Připravit šifrování", + "Set up encryption": "Nastavit šifrování", "Unverified session": "Neověřená relace", "Verifies a user, session, and pubkey tuple": "Ověří uživatele, relaci a veřejné klíče", "Unknown (user, session) pair:": "Neznámý pár (uživatel, relace):", @@ -1873,9 +1873,9 @@ "WARNING: Session already verified, but keys do NOT MATCH!": "VAROVÁNÍ: Relace je už ověřená, ale klíče NEODPOVÍDAJÍ!", "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "VAROVÁNÍ: OVĚŘENÍ KLÍČŮ SELHALO! Podpisový klíč pro uživatele %(userId)s a relaci %(deviceId)s je \"%(fprint)s\", což neodpovídá klíči \"%(fingerprint)s\". Může to znamenat, že je vaše komunikace rušena!", "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Zadaný podpisový klíč odpovídá klíči relace %(deviceId)s od uživatele %(userId)s. Relace byla označena za platnou.", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s přidal/a této místnosti %(addedAddresses)s a dalších %(count)s adres", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s odstranil/a této místnosti %(removedAddresses)s a dalších %(count)s adres", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s odstranil/a této místnosti %(countRemoved)s adres a přidal/a %(countAdded)s adres", + "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "Uživatel %(senderName)s přidal této místnosti adresu %(addedAddresses)s a %(count)s dalších", + "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "Uživatel %(senderName)s odstranil této místnosti adresu %(removedAddresses)s a %(count)s dalších", + "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "Uživatel %(senderName)s odstranil této místnosti %(countRemoved)s adres a přidal %(countAdded)s adres", "a few seconds ago": "před pár vteřinami", "about a minute ago": "před minutou", "%(num)s minutes ago": "před %(num)s minutami", @@ -1891,15 +1891,15 @@ "about a day from now": "asi za den", "%(num)s days from now": "za %(num)s dní", "Show a presence dot next to DMs in the room list": "V seznamu místností zobrazovat informaci o přítomnosti", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Povolit cross-signing pro verifikaci uživatelů místo zařízení (experimentální)", + "Enable cross-signing to verify per-user instead of per-session (in development)": "Povolit cross-signing pro ověření uživatelů místo zařízení (experimentální)", "Show info about bridges in room settings": "Zobrazovat v nastavení místnosti informace o propojeních", "Show padlocks on invite only rooms": "Zobrazovat zámek u místností vyžadujících pozvání", "Never send encrypted messages to unverified sessions from this session": "Nikdy neposílat šifrované zprávy neověřených zařízením", "Never send encrypted messages to unverified sessions in this room from this session": "Nikdy v této místnosti neposílat šifrované zprávy neověřeným relacím", - "Enable message search in encrypted rooms": "Povolit vyhledávání v zašifrovaných místnostech", + "Enable message search in encrypted rooms": "Povolit vyhledávání v šifrovaných místnostech", "Keep secret storage passphrase in memory for this session": "Pro toto přihlášení si uchovat heslo k bezpečnému úložišti", "How fast should messages be downloaded.": "Jak rychle se mají zprávy stahovat.", - "Confirm the emoji below are displayed on both devices, in the same order:": "Ověřte, že následující emotikony jsou zobrazeny na obou zařízeních ve stejném pořadí:", + "Confirm the emoji below are displayed on both devices, in the same order:": "Ověřte, že jsou následující emoji zobrazeny na obou zařízeních ve stejném pořadí:", "Verify this device by confirming the following number appears on its screen.": "Ověřit zařízení potvrzením, že jsou následující čísla zobrazena na jeho obrazovce.", "Waiting for %(displayName)s to verify…": "Čekám až nás %(displayName)s ověří…", "They match": "Odpovídají", @@ -1915,7 +1915,7 @@ "Workspace: %(networkName)s": "Workspace: %(networkName)s", "Channel: %(channelName)s": "Kanál: %(channelName)s", "Show less": "Skrýt detaily", - "Show more": "Zobrazit víc", + "Show more": "Více", "Changing password will currently reset any end-to-end encryption keys on all sessions, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Změna hesla resetuje šifrovací klíče pro všechny vaše relace. Pokud si nejdřív nevyexportujete klíče místností a po změně je znovu neimportujete, nedostanete se k historickým zprávám. V budoucnu se toto zjednoduší.", "Cross-signing and secret storage are enabled.": "Cross-signing a bezpečné úložiště jsou zapnuté.", "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Váš účet má v bezpečném úložišti identitu pro cross-signing, ale v této relaci jí zatím nevěříte.", @@ -1940,7 +1940,7 @@ "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot neumí bezpečně uchovávat zprávy když běží v prohlížeči. Pokud chcete vyhledávat v šifrovaných zprávách, použijte Riot Desktop.", "This session is backing up your keys. ": "Tato relace zálohuje vaše klíče. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Tato relace nezálohuje vaše klíče, ale už máte zálohu ze které je můžete obnovit.", - "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Než se odhlásíce, připojte tuto relaci k záloze klíčů abyste nepřišli o klíče, které můžou být jen v této relaci.", + "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Než se odhlásíte, připojte tuto relaci k záloze klíčů, abyste nepřišli o klíče, které mohou být jen v této relaci.", "Connect this session to Key Backup": "Připojit k zálohování klíčů", "not stored": "není uložen", "Backup has a signature from unknown session with ID %(deviceId)s": "Záloha je podepsaná z neznámé relace s ID %(deviceId)s", @@ -1955,15 +1955,15 @@ "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Zálohovací klíč je uložen v bezpečném úložišti, ale jeho načtení není v této relaci povolené. Zapněte prosím cross-signing v Experimentálních funkcích abyste mohli modifikovat stav zálohy.", "Backup key stored: ": "Zálohovací klíč je uložen: ", "Your keys are not being backed up from this session.": "Vaše klíče nejsou z této relace zálohovány.", - "Enable desktop notifications for this session": "Povolit v této relaci notifikace", - "Enable audible notifications for this session": "Povolit v této relaci hlasové notifikace", - "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Heslo bylo změněno. Dokud se znovu nepřihlásíte na ostatních zařízeních, nebudete na nich dostávat notifikace", + "Enable desktop notifications for this session": "Povolit v této relaci oznámení", + "Enable audible notifications for this session": "Povolit v této relaci zvuková oznámení", + "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Heslo bylo změněno. Dokud se znovu nepřihlásíte na ostatních zařízeních, nebudete na nich dostávat žádná oznámení", "Session ID:": "ID relace:", "Session key:": "Klíč relace:", "Message search": "Vyhledávání ve zprávách", "Cross-signing": "Cross-signing", "Sessions": "Relace", - "A session's public name is visible to people you communicate with": "Lidé se kterými komunikujete si můžou jméno relace zobrazit", + "A session's public name is visible to people you communicate with": "Lidé, se kterými komunikujete, mohou veřejný název zobrazit", "This room is bridging messages to the following platforms. Learn more.": "Tato místnost je propojena s následujícími platformami. Více informací", "This room isn’t bridging messages to any platforms. Learn more.": "Tato místnost není propojená s žádnými dalšími platformami. Více informací.", "Bridges": "Propojení", @@ -1971,19 +1971,19 @@ "You have not verified this user.": "Tohoto uživatele jste neověřil.", "You have verified this user. This user has verified all of their sessions.": "Tohoto uživatele jste ověřili a on ověřil všechny své relace.", "Someone is using an unknown session": "Někdo používá neznámou relaci", - "This room is end-to-end encrypted": "Místnost je E2E šifrovaná", + "This room is end-to-end encrypted": "Místnost je šifrovaná end-to-end", "Everyone in this room is verified": "V této místnosti jsou všichni ověřeni", "Some sessions for this user are not trusted": "Některé relace tohoto uživatele jsou nedůvěryhodné", "All sessions for this user are trusted": "Všem relacím tohoto uživatele věříme", "Some sessions in this encrypted room are not trusted": "Některé relace v této místnosti jsou nedůvěryhodné", "All sessions in this encrypted room are trusted": "Všem relacím v této místosti věříme", "Mod": "Moderátor", - "Your key share request has been sent - please check your other sessions for key share requests.": "Požadavek k nasdílení klíčů byl odeslán - podívejte se prosím na své ostatní relace, jestli vám přišel.", - "Key share requests are sent to your other sessions automatically. If you rejected or dismissed the key share request on your other sessions, click here to request the keys for this session again.": "Požadavek se sdílení klíčů se vaše ostatní relace odesílá automaticky. Pokud jste ho zamítli nebo ignorovali, tímto tlačítkem si jej můžete poslat znovu.", + "Your key share request has been sent - please check your other sessions for key share requests.": "Požadavek na sdílení klíčů byl odeslán - podívejte se prosím na své ostatní relace, jestli vám přišel.", + "Key share requests are sent to your other sessions automatically. If you rejected or dismissed the key share request on your other sessions, click here to request the keys for this session again.": "Požadavky na sdílení klíčů jsou vašim ostatním relacím odesílány automaticky. Pokud jste nějaký zamítli nebo ignorovali, tímto tlačítkem si ho můžete poslat znovu.", "If your other sessions do not have the key for this message you will not be able to decrypt them.": "Pokud vaše ostatní relace nemají klíč pro tuto zprávu, nebudete mít možnost jí dešifrovat.", "Re-request encryption keys from your other sessions.": "Znovu zažádat o šifrovací klíče z vašich ostatních relací.", - "Encrypted by an unverified session": "Zašifrované v neověřené relaci", - "Encrypted by a deleted session": "Zašifrované smazanou relací", + "Encrypted by an unverified session": "Šifrované neověřenou relací", + "Encrypted by a deleted session": "Šifrované smazanou relací", "Invite only": "Pouze na pozvání", "No sessions with registered encryption keys": "Žádné relace se šifrovacími klíči", "Send a reply…": "Odpovědět…", @@ -1996,8 +1996,8 @@ "Hint: Begin your message with // to start it with a slash.": "Tip: Zprávu můžete začít //, pokud chcete aby začínala lomítkem.", "Send as message": "Odeslat jako zprávu", "Waiting for %(displayName)s to accept…": "Čekáme, než %(displayName)s přijme…", - "Start Verification": "Začít s verifikací", - "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Vaše zprávy jsou zabezpečené - pouze Vy a příjemce mají klíče k jejich přečtení.", + "Start Verification": "Začít s ověřením", + "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Vaše zprávy jsou zabezpečené - pouze vy a jejich příjemci máte klíče potřebné k jejich přečtení.", "Verify User": "Ověřit uživatele", "For extra security, verify this user by checking a one-time code on both of your devices.": "Pro lepší bezpečnost, ověřte uživatele zkontrolováním jednorázového kódu na vašich zařízeních.", "Your messages are not secure": "Vaše zprávy nejsou zabezpečené", @@ -2009,16 +2009,16 @@ "%(count)s sessions|other": "%(count)s relací", "%(count)s sessions|one": "%(count)s relace", "Hide sessions": "Skrýt relace", - "Verify by emoji": "Ověřit emotikonami", - "Verify by comparing unique emoji.": "Oveření porovnáním několika emotikon.", - "Ask %(displayName)s to scan your code:": "Ověříte se, když %(displayName)s naskenuje váš kód:", - "If you can't scan the code above, verify by comparing unique emoji.": "Pokud vám skenování kódů nefunguje, ověřte se porovnáním emotikon.", - "You've successfully verified %(displayName)s!": "%(displayName)s je úspěšně ověřen/a!", + "Verify by emoji": "Ověřit pomocí emoji", + "Verify by comparing unique emoji.": "Ověření porovnáním několika emoji.", + "Ask %(displayName)s to scan your code:": "Požádejte uživatele %(displayName)s o naskenování tohoto kódu pro vaše ověření:", + "If you can't scan the code above, verify by comparing unique emoji.": "Pokud vám skenování kódů nefunguje, ověřte se porovnáním emoji.", + "You've successfully verified %(displayName)s!": "Úspěšně jste ověřili uživatele %(displayName)s!", "Got it": "Dobře", - "Verification timed out. Start verification again from their profile.": "Čas na verifikaci vypršel. Začněte s verifikací znovu z druhého profilu.", - "%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s zrušil/a verifikaci. Začněte s verifikací znovu z druhého profilu.", + "Verification timed out. Start verification again from their profile.": "Čas na ověření vypršel. Začněte znovu z druhého profilu.", + "%(displayName)s cancelled verification. Start verification again from their profile.": "Uživatel %(displayName)s zrušil ověření. Spustit ho můžete znovu z jeho profilu.", "Encryption enabled": "Šifrování je zapnuté", - "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Zprávy v této místnosti jsou E2E šifrované. Více informací & verifikace uživatele je v jeho profilu.", + "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Zprávy v této místnosti jsou šifrované end-to-end. Více informací a možnost ověření uživatele najdete v jeho profilu.", "Encryption not enabled": "Šifrování je vypnuté", "The encryption used by this room isn't supported.": "Šifrování používané v této místnosti není podporované.", "Clear all data in this session?": "Smazat všechna data v této relaci?", @@ -2026,13 +2026,13 @@ "Verify session": "Ověřit relaci", "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Abychom ověřili, že je relace důvěryhodná, zkontrolujte prosím, že klíč v uživatelském nastavení na tom zařízení odpovídá následujícímu klíči:", "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Abychom ověřili, že tato relace je důvěryhodná, kontaktujte prosím jejího vlastníka nějakým dalším způsobem (osobně, telefonicky, apod.). Zkontrolujte spolu, že klíč v uživatelském nastavení na druhém zařízení odpovídá následujícímu klíči:", - "Session name": "Jméno relace", + "Session name": "Název relace", "Session key": "Klíč relace", "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Pokud odpovídá, zmáčkněte tlačítko ověřit. Pokud ne, druhé zařízení je pravděpodobně falešné a chcete ho zablokovat.", - "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Ověření uživatele označí jeho relace za důvěryhodné a Vaše relace budou důvěryhodné pro něj.", + "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Ověření uživatele označí jeho relace za důvěryhodné a vaše relace budou důvěryhodné pro něj.", "Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.": "Ověření zařízení ho označí za důvěryhodné. Ověření konkrétního zařízení vám dát trochu klidu mysli navíc při používání šifrovaných zpráv.", "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Ověření zařízení ho označí za důvěryhodné a uživatelé, kteří věří vám budou také tomuto zařízení důvěřovat.", - "Failed to invite the following users to chat: %(csvUsers)s": "Následující uživatele se nepovedlo pozvat do chatu: %(csvUsers)s", + "Failed to invite the following users to chat: %(csvUsers)s": "Následující uživatele se nepovedlo do konverzace pozvat: %(csvUsers)s", "We couldn't create your DM. Please check the users you want to invite and try again.": "Nepovedlo se nám vyrobit soukromou konverzaci. Zkontrolujte prosím, že pozvaný uživatel opravdu existuje a pak to zkuste znovu.", "Something went wrong trying to invite the users.": "Při odesílání pozvánek se něco pokazilo.", "We couldn't invite those users. Please check the users you want to invite and try again.": "Nemůžeme pozvat tyto uživatele. Zkontrolujte prosím, že opravdu existují a zkuste to znovu.", @@ -2041,17 +2041,17 @@ "Recent Conversations": "Nedávné konverzace", "Suggestions": "Návrhy", "Recently Direct Messaged": "Nedávno kontaktovaní", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Pokud někoho nemůžete nalézt, zeptejte se na username, pošlete jim svůj (%(userId)s) a nebo pošlete odkaz na svůj profil.", + "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Pokud nemůžete někoho najít, zeptejte se na uživatelské jméno, pošlete jim svoje (%(userId)s) a nebo pošlete odkaz na svůj profil.", "Go": "Ok", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Pokud někoho nemůžete nalézt, zeptejte se na username (například @user:server.com) a nebo pošlete odkaz na tuto místnost.", + "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Pokud nemůžete někoho najít, zeptejte se na uživatelské jméno (např. @uzivatel:example.com) a nebo pošlete odkaz na tuto místnost.", "You added a new session '%(displayName)s', which is requesting encryption keys.": "Přidali jste novou relaci '%(displayName)s', která požaduje šifrovací klíče.", "Your unverified session '%(displayName)s' is requesting encryption keys.": "Vaše neověřená relace '%(displayName)s' požaduje šifrovací klíče.", "Loading session info...": "Načítám informace o relaci...", "New session": "Nová relace", - "Use this session to verify your new one, granting it access to encrypted messages:": "Použijte tuto relaci abyste ověřili novou a dali jí přístup ke svým šifrovaným zprávám:", + "Use this session to verify your new one, granting it access to encrypted messages:": "Použijte tuto relaci pro ověření nové a udělení jí přístupu k vašim šifrovaným zprávám:", "If you didn’t sign in to this session, your account may be compromised.": "Pokud jste se do této nové relace nepřihlásili, váš účet může být kompromitován.", - "This wasn't me": "Nebyl/a jsem to já", - "This will allow you to return to your account after signing out, and sign in on other sessions.": "Umožní vám to se přihlásit do dalších relací a vrátit se ke svému účtu poté co se odhlásíte.", + "This wasn't me": "To jsem nebyl/a já", + "This will allow you to return to your account after signing out, and sign in on other sessions.": "Toto vám umožní se přihlásit do dalších relací a vrátit se ke svému účtu poté, co se odhlásíte.", "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Máte zakázané posílání zpráv neověřeným relacím; abyste mohli zprávu odeslat, musíte je ověřit.", "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Doporučujeme si projít ověřovací proces pro každou relaci abyste ověřili, že patří tomu, komu očekáváte. Můžete ale poslat zprávu i bez ověření, pokud chcete.", "Room contains unknown sessions": "V místnosti jsou neověřené relace", @@ -2067,7 +2067,7 @@ "Confirm your identity by entering your account password below.": "Potvrďte svou identitu zadáním hesla ke svému účtu.", "Message not sent due to unknown sessions being present": "Zpráva nebyla odeslána, protože jsou v místnosti neznámé relace", "Show sessions, send anyway or cancel.": "Zobrazit relace, i tak odeslat, a nebo zrušit.", - "Verify this session to grant it access to encrypted messages.": "Ověřte relaci aby získala přístup k šifrovaným zprávám.", + "Verify this session to grant it access to encrypted messages.": "Ověřte relaci, aby získala přístup k šifrovaným zprávám.", "Start": "Začít", "Session verified": "Relace je ověřena", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Vaše nová relace je teď ověřená. Má přístup k šifrovaným zprávám a ostatní uživatelé jí budou věřit.", @@ -2076,9 +2076,9 @@ "Without completing security on this session, it won’t have access to encrypted messages.": "Bez dokončení ověření nebude mít nová relace přístup k šifrovaným zprávám.", "Go Back": "Zpět", "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Změna hesla resetuje šifrovací klíče ve všech vašich přihlášených relacích a přijdete tak o přístup k historickým zprávám. Před změnou hesla si nastavte zálohu klíčů nebo si klíče pro místnosti exportujte.", - "You have been logged out of all sessions and will no longer receive push notifications. To re-enable notifications, sign in again on each device.": "Všude jsme Vás odhlásili, takže nedostáváte žádné upozornění. Můžete je znovu povolit tím, že se na všech svych zařízeních znovu přihlásíte.", + "You have been logged out of all sessions and will no longer receive push notifications. To re-enable notifications, sign in again on each device.": "Všude jsme vás odhlásili, takže nedostáváte žádná oznámení. Můžete je znovu povolit tím, že se na všech svých zařízeních znovu přihlásíte.", "Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Získejte znovu přístup k účtu a obnovte si šifrovací klíče uložené v této relaci. Bez nich nebudete schopni číst zabezpečené zprávy na některých zařízeních.", - "Warning: Your personal data (including encryption keys) is still stored in this session. Clear it if you're finished using this session, or want to sign in to another account.": "Varování: Vaše osobní data (včetně šifrovacích klíčů) jsou tu pořád uložena. Smažte je, pokud chcete tuto relaci zahodit nebo se přihlašte pod jiný účet.", + "Warning: Your personal data (including encryption keys) is still stored in this session. Clear it if you're finished using this session, or want to sign in to another account.": "Varování: Vaše osobní data (včetně šifrovacích klíčů) jsou tu pořád uložena. Smažte je, pokud chcete tuto relaci zahodit, nebo se přihlaste pod jiný účet.", "Sender session information": "Informace o relaci odesílatele", "If you cancel now, you won't complete verifying the other user.": "Pokud teď proces zrušíte, tak nebude druhý uživatel ověřen.", "If you cancel now, you won't complete verifying your other session.": "Pokud teď proces zrušíte, tak nebude druhá relace ověřena.", @@ -2088,7 +2088,7 @@ "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riotu chybí nějaké komponenty, které jsou potřeba pro vyhledávání v zabezpečených místnostech. Pokud chcete s touto funkcí experimentovat, tak si pořiďte vlastní Riot Desktop s přidanými komponentami.", "Subscribing to a ban list will cause you to join it!": "Odebíráním seznamu zablokovaných uživatelů se přidáte do jeho místnosti!", "If this isn't what you want, please use a different tool to ignore users.": "Pokud to nechcete, tak prosím použijte jiný nástroj na blokování uživatelů.", - "You cancelled verification. Start verification again from their profile.": "Zrušili jste verifikaci. Můžete jí začít znovu z druhého profilu.", + "You cancelled verification. Start verification again from their profile.": "Zrušili jste ověření. Můžete začít znovu z druhého profilu.", "Complete security": "Dokončení ověření", "Restore your key backup to upgrade your encryption": "Pro aktualizaci šifrování obnovte klíče ze zálohy", "Restore": "Obnovit", @@ -2096,31 +2096,31 @@ "You'll need to authenticate with the server to confirm the upgrade.": "Server si vás potřebuje ověřit, abychom mohli provést aktualizaci.", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Aktualizujte tuto přihlášenou relaci abyste mohli ověřovat ostatní relace. Tím jim dáte přístup k šifrovaným konverzacím a ostatní uživatelé je jim budou automaticky věřit.", "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Zapněte v této přihlášené relaci šifrování abyste mohli ověřovat ostatní relace. Tím jim dáte přístup k šifrovaným konverzacím a ostatní uživatelé je jim budou automaticky věřit.", - "Show typing notifications": "Zobrazovat notifikace \"... právě píše...\"", - "Reset cross-signing and secret storage": "Resetovat bezpečné úložiště a cross-signing", + "Show typing notifications": "Zobrazovat oznámení \"... právě píše...\"", + "Reset cross-signing and secret storage": "Obnovit bezpečné úložiště a cross-signing", "Destroy cross-signing keys?": "Nenávratně smazat klíče pro cross-signing?", - "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Smazání klíčů pro cross-signing je definitivní. Každý kdo vás ověřil teď uvidí bezpečnostní varování. Pokud jste zrovna neztratili všechna zařízení ze kterých se můžete ověřit, tak to asi nechcete udělat.", + "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Smazání klíčů pro cross-signing je definitivní. Každý, kdo vás ověřil, teď uvidí bezpečnostní varování. Pokud jste zrovna neztratili všechna zařízení, ze kterých se můžete ověřit, tak to asi nechcete udělat.", "Clear cross-signing keys": "Smazat klíče pro cross-signing", "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Zabezpečte si šifrovací klíče silným heslem. Pro lepší bezpečnost by mělo být jiné než vaše heslo k přihlášení:", "Enter a passphrase": "Zadejte heslo", "The version of Riot": "Verze Riotu", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Jestli používáte Riot na dotykovém zařízení", - "Whether you're using Riot as an installed Progressive Web App": "Jestli používáte Riot jako nainstalovanou Progresivní Webovou Aplikaci", + "Whether you're using Riot on a device where touch is the primary input mechanism": "Zda používáte Riot na dotykovém zařízení", + "Whether you're using Riot as an installed Progressive Web App": "Zda používáte Riot jako nainstalovanou Progresivní Webovou Aplikaci", "Your user agent": "Identifikace vašeho prohlížeče", - "The information being sent to us to help make Riot better includes:": "Abychom mohli Riot zlepšovat si posíláme následující informace:", + "The information being sent to us to help make Riot better includes:": "Abychom mohli Riot zlepšovat, posíláme si následující informace:", "Verify this session by completing one of the following:": "Ověřte tuto relaci dokončením jednoho z následujících:", "Scan this unique code": "Naskenujte tento jedinečný kód", "or": "nebo", "Compare unique emoji": "Porovnejte jedinečnou kombinaci emoji", - "Compare a unique set of emoji if you don't have a camera on either device": "Porovnejte jedinečnou kombinaci emoji pokud na žádném zařízení nemáte kameru", + "Compare a unique set of emoji if you don't have a camera on either device": "Pokud na žádném zařízení nemáte kameru, porovnejte jedinečnou kombinaci emoji", "Not Trusted": "Nedůvěryhodné", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) se přihlásil do nové relace a neověřil ji:", "Ask this user to verify their session, or manually verify it below.": "Poproste tohoto uživatele aby svojí relaci ověřil a nebo jí níže můžete ověřit manuálně.", "Manually Verify": "Ověřit manuálně", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Relace, kterou se snažíte ověřit neumožňuje ověření QR kódem ani pomocí emoji, což je to co Riot podporuje. Zkuste použít jiného klienta.", + "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Relace, kterou se snažíte ověřit, neumožňuje ověření QR kódem ani pomocí emoji, což je to, co Riot podporuje. Zkuste použít jiného klienta.", "Verify by scanning": "Ověřte naskenováním", "You declined": "Odmítli jste", - "%(name)s declined": "%(name)s odmítl/a", + "%(name)s declined": "Uživatel %(name)s odmítl", "accepting …": "přijímání …", "declining …": "odmítání …", "Back up my encryption keys, securing them with the same passphrase": "Zazálohovat šifrovací klíče zabezpečené tím stejným heslem", @@ -2136,7 +2136,7 @@ "Create key backup": "Vytvořit zálohu klíčů", "This session is encrypting history using the new recovery method.": "Tato relace šifruje historii zpráv s podporou nového způsobu obnovení.", "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Tato relace zjistila, že klíč a heslo k obnovení zpráv byly odstraněny.", - "If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "Pokud se vám to stalo neůmyslně, můžete znovu nastavit zálohu zpráv pro tuto relaci. To znovu zašifruje historii zpráv novým způsobem.", + "If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "Pokud se vám to stalo neúmyslně, můžete znovu nastavit zálohu zpráv pro tuto relaci. To znovu zašifruje historii zpráv novým způsobem.", "If disabled, messages from encrypted rooms won't appear in search results.": "Když je to zakázané, zprávy v šifrovaných místnostech se nebudou objevovat ve výsledcích vyhledávání.", "Disable": "Zakázat", "Not currently downloading messages for any room.": "Aktuálně se nestahují žádné zprávy.", From 513a715989396dd6cae902c17d300973c58bbf68 Mon Sep 17 00:00:00 2001 From: Jakub Kalousek Date: Sun, 1 Mar 2020 09:55:52 +0000 Subject: [PATCH 111/522] Translated using Weblate (Czech) Currently translated at 99.1% (2120 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/cs/ --- src/i18n/strings/cs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index 3b1d7416b1..34f43d7cd5 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -1303,7 +1303,7 @@ "Create account": "Vytvořit účet", "Unable to query for supported registration methods.": "Nepovedlo se načíst podporované způsoby přihlášení.", "Prepends ¯\\_(ツ)_/¯ to a plain-text message": "Vloží ¯\\_(ツ)_/¯ na začátek zprávy", - "Changes your display nickname in the current room only": "Pro tuto místnost změní vaší přezdívku", + "Changes your display nickname in the current room only": "Změní vaši zobrazovanou přezdívku pouze v současné místnosti", "User %(userId)s is already in the room": "Uživatel %(userId)s už je v této místnosti", "The user must be unbanned before they can be invited.": "Uživatel je vykázán, nelze ho pozvat.", "Show read receipts sent by other users": "Zobrazovat potvrzení o přijetí", From 326045c57d133986a640fb158e7fca55b466d5a0 Mon Sep 17 00:00:00 2001 From: Osoitz Date: Sat, 29 Feb 2020 09:38:18 +0000 Subject: [PATCH 112/522] Translated using Weblate (Basque) Currently translated at 100.0% (2139 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eu/ --- src/i18n/strings/eu.json | 105 +++++++++++++++++++++++++++++++-------- 1 file changed, 83 insertions(+), 22 deletions(-) diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index 91c94865b3..8b781c2119 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -393,7 +393,7 @@ "Unable to restore session": "Ezin izan da saioa berreskuratu", "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Aurretik Riot bertsio berriago bat erabili baduzu, zure saioa bertsio honekin bateraezina izan daiteke. Itxi leiho hau eta itzuli bertsio berriagora.", "Unknown Address": "Helbide ezezaguna", - "Verify...": "Egiaztatu...", + "Verify...": "Egiaztatu…", "ex. @bob:example.com": "adib. @urko:adibidea.eus", "Add User": "Gehitu erabiltzailea", "Please check your email to continue registration.": "Egiaztatu zure e-maila erregistroarekin jarraitzeko.", @@ -431,8 +431,8 @@ "Deops user with given id": "Emandako ID-a duen erabiltzailea mailaz jaisten du", "Add a widget": "Gehitu trepeta bat", "Allow": "Baimendu", - "and %(count)s others...|other": "eta beste %(count)s...", - "and %(count)s others...|one": "eta beste bat...", + "and %(count)s others...|other": "eta beste %(count)s…", + "and %(count)s others...|one": "eta beste bat…", "Cannot add any more widgets": "Ezin dira trepeta gehiago gehitu", "Delete widget": "Ezabatu trepeta", "Define the power level of a user": "Zehaztu erabiltzaile baten botere maila", @@ -509,7 +509,7 @@ "Invite": "Gonbidatu", "Jump to message": "Saltatu mezura", "No pinned messages.": "Finkatutako mezurik ez.", - "Loading...": "Kargatzen...", + "Loading...": "Kargatzen…", "Pinned Messages": "Finkatutako mezuak", "%(duration)ss": "%(duration)s s", "%(duration)sm": "%(duration)s m", @@ -599,7 +599,7 @@ "%(oneUser)schanged their name %(count)s times|one": "%(oneUser)s erabiltzaileak bere izena aldatu du", "collapse": "tolestu", "expand": "hedatu", - "And %(count)s more...|other": "Eta %(count)s gehiago...", + "And %(count)s more...|other": "Eta %(count)s gehiago…", "Matrix ID": "Matrix IDa", "Matrix Room ID": "Matrix gela IDa", "email address": "e-mail helbidea", @@ -802,7 +802,7 @@ "Send logs": "Bidali egunkariak", "All messages": "Mezu guztiak", "Call invitation": "Dei gonbidapena", - "Downloading update...": "Eguneraketa deskargatzen...", + "Downloading update...": "Eguneraketa deskargatzen…", "State Key": "Egoera gakoa", "Failed to send custom event.": "Huts egin du gertaera pertsonalizatua bidaltzean.", "What's new?": "Zer dago berri?", @@ -846,7 +846,7 @@ "Event Content": "Gertaeraren edukia", "Thank you!": "Eskerrik asko!", "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Zure oraingo nabigatzailearekin aplikazioaren itxura eta portaera guztiz okerra izan daiteke, eta funtzio batzuk ez dira ibiliko. Hala ere aurrera jarraitu dezakezu saiatu nahi baduzu, baina zure erantzukizunaren menpe geratzen dira aurkitu ditzakezun arazoak!", - "Checking for an update...": "Eguneraketarik dagoen egiaztatzen...", + "Checking for an update...": "Eguneraketarik dagoen egiaztatzen…", "There are advanced notifications which are not shown here": "Hemen erakusten ez diren jakinarazpen aurreratuak daude", "Missing roomId.": "Gelaren ID-a falta da.", "Every page you use in the app": "Aplikazioan erabilitako orri oro", @@ -936,7 +936,7 @@ "Forces the current outbound group session in an encrypted room to be discarded": "Uneko irteerako talde saioa zifratutako gela batean baztertzera behartzen du", "Registration Required": "Erregistratzea ezinbestekoa da", "You need to register to do this. Would you like to register now?": "Hau egiteko erregistratu egin behar zara. Orain erregistratu nahi duzu?", - "Unable to connect to Homeserver. Retrying...": "Ezin izan da hasiera zerbitzarira konektatu. Berriro saiatzen...", + "Unable to connect to Homeserver. Retrying...": "Ezin izan da hasiera zerbitzarira konektatu. Berriro saiatzen…", "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s erabiltzaileak %(addedAddresses)s gehitu du gelako helbide gisa.", "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s erabiltzaileak %(addedAddresses)s helbideak gehitu dizkio gela honi.", "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s erabiltzileak %(removedAddresses)s helbideak kendu ditu gela honetatik.", @@ -1045,8 +1045,8 @@ "Straight rows of keys are easy to guess": "Teklatuko errenkadak asmatzeko errazak dira", "Short keyboard patterns are easy to guess": "Teklatuko eredu laburrak asmatzeko errazak dira", "Custom user status messages": "Erabiltzailearen egoera mezu pertsonalizatuak", - "Checking...": "Egiaztatzen...", - "Set a new status...": "Ezarri egoera berri bat...", + "Checking...": "Egiaztatzen…", + "Set a new status...": "Ezarri egoera berri bat…", "Clear status": "Garbitu egoera", "General failure": "Hutsegite orokorra", "New Recovery Method": "Berreskuratze metodo berria", @@ -1055,7 +1055,7 @@ "Unable to load commit detail: %(msg)s": "Ezin izan dira xehetasunak kargatu: %(msg)s", "Invalid identity server discovery response": "Baliogabeko erantzuna identitate zerbitzariaren bilaketan", "If you didn't set the new recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Ez baduzu berreskuratze sistema berria ezarri, erasotzaile bat zure kontua atzitzen saiatzen egon daiteke. Aldatu zure kontuaren pasahitza eta ezarri berreskuratze metodo berria berehala ezarpenetan.", - "Waiting for %(userId)s to confirm...": "%(userId)s erabiltzaileak berretsi dezan itxaroten...", + "Waiting for %(userId)s to confirm...": "%(userId)s erabiltzaileak berretsi dezan itxaroten…", "User %(user_id)s may or may not exist": "%(user_id)s erabiltzailea existitu daiteke edo ez", "Unrecognised address": "Helbide ezezaguna", "Prompt before sending invites to potentially invalid matrix IDs": "Galdetu baliogabeak izan daitezkeen matrix ID-eetara gonbidapenak bidali aurretik", @@ -1170,7 +1170,7 @@ "Guest": "Gonbidatua", "General": "Orokorra", "Room Addresses": "Gelaren helbideak", - "Set a new account password...": "Ezarri kontuaren pasahitz berria...", + "Set a new account password...": "Ezarri kontuaren pasahitz berria…", "Email addresses": "E-mail helbideak", "Phone numbers": "Telefono zenbakiak", "Language and region": "Hizkuntza eta eskualdea", @@ -1206,7 +1206,7 @@ "Your password has been reset.": "Zure pasahitza berrezarri da.", "Set a new password": "Ezarri pasahitz berria", "Create account": "Sortu kontua", - "Keep going...": "Jarraitu...", + "Keep going...": "Jarraitu…", "Starting backup...": "Babes-kopia hasten...", "Recovery Method Removed": "Berreskuratze metodoa kendu da", "Missing media permissions, click the button below to request.": "Multimedia baimenak falda dira, sakatu beheko botoia baimenak eskatzeko.", @@ -1215,7 +1215,7 @@ "Start using Key Backup": "Hasi gakoen babes-kopia egiten", "Restore from Backup": "Berrezarri babes-kopia", "Back up your keys before signing out to avoid losing them.": "Egin gakoen babes-kopia bat saioa amaitu aurretik, galdu nahi ez badituzu.", - "Backing up %(sessionsRemaining)s keys...": "%(sessionsRemaining)s gakoen babes-kopia egiten...", + "Backing up %(sessionsRemaining)s keys...": "%(sessionsRemaining)s gakoen babes-kopia egiten…", "All keys backed up": "Gako guztien babes.kopia egin da", "Headphones": "Aurikularrak", "Folder": "Karpeta", @@ -1271,12 +1271,12 @@ "Securely back up your keys to avoid losing them. Learn more.": "Egin zure gakoen babes-kopia segurua hauek ez galtzeko. Ikasi gehiago.", "Not now": "Orain ez", "Don't ask me again": "Ez galdetu berriro", - "Use Legacy Verification (for older clients)": "Erabili egiaztaketa zaharra (bezero zaharrekin)", - "Waiting for partner to accept...": "Kideak onartu bitartean zain...", - "Nothing appearing? Not all clients support interactive verification yet. .": "Ez da ezer agertzen? Bezero guztiek ez dute egiaztaketa interaktiborako euskarria. .", + "Use Legacy Verification (for older clients)": "Erabili egiaztaketa zaharra (bezero zaharrentzat)", + "Waiting for partner to accept...": "Kideak onartu bitartean zain…", + "Nothing appearing? Not all clients support interactive verification yet. .": "Ez da ezer agertzen? Bezero guztiek ez dute egiaztaketa interaktiborako euskarria. .", "Use two-way text verification": "Erabili bi zentzutako testu egiaztaketa", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Egiaztatu erabiltzaile hau fidagarritzat markatzeko. Honek bakea ematen dizu muturretik muturrerako zifratutako mezuak erabiltzean.", - "Waiting for partner to confirm...": "Kideak baieztatzearen zain...", + "Waiting for partner to confirm...": "Kideak baieztatzearen zain…", "Incoming Verification Request": "Jasotako egiaztaketa eskaria", "I don't want my encrypted messages": "Ez ditut nire zifratutako mezuak nahi", "Manually export keys": "Esportatu gakoak eskuz", @@ -1729,7 +1729,7 @@ "My Ban List": "Nire debeku-zerrenda", "This is your list of users/servers you have blocked - don't leave the room!": "Hau blokeatu dituzun erabiltzaile edo zerbitzarien zerrenda da, ez atera gelatik!", "Decline (%(counter)s)": "Ukatu (%(counter)s)", - "Connecting to integration manager...": "Integrazio kudeatzailera konektatzen...", + "Connecting to integration manager...": "Integrazio kudeatzailera konektatzen…", "Cannot connect to integration manager": "Ezin da integrazio kudeatzailearekin konektatu", "The integration manager is offline or it cannot reach your homeserver.": "Integrazio kudeatzailea lineaz kanpo dago edo ezin du zure hasiera-zerbitzaria atzitu.", "Clear notifications": "Garbitu jakinarazpenak", @@ -2049,7 +2049,7 @@ "Session key": "Saioaren gakoa", "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Bat badator, sakatu beheko egiaztatu botoia. Ez badator bat, beste inor saioa antzematen ari da eta zerrenda beltzean sartu beharko zenuke.", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Erabiltzaile hau egiaztatzean bere saioa fidagarritzat joko da, eta zure saioak beretzat fidagarritzat ere.", - "Loading session info...": "Saioaren informazioa kargatzen...", + "Loading session info...": "Saioaren informazioa kargatzen…", "New session": "Saio berria", "Use this session to verify your new one, granting it access to encrypted messages:": "Erabili saio hau berria egiaztatzeko, honela mezu zifratuetara sarbidea emanez:", "If you didn’t sign in to this session, your account may be compromised.": "Ez baduzu saio hau zuk hasi, agian baten bat zure kontuan sartu da.", @@ -2073,7 +2073,7 @@ "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Gorde kopia bat toki seguruan, esaterako pasahitz kudeatzaile batean edo gordailu kutxan.", "Your recovery key": "Zure berreskuratze gakoa", "Copy": "Kopiatu", - "You can now verify your other devices, and other users to keep your chats safe.": "Orain zure beste gailuak eta beste erabiltzaileak egiaztatu ditzakezu txatak seguru mantentzeko", + "You can now verify your other devices, and other users to keep your chats safe.": "Orain zure beste gailuak eta beste erabiltzaileak egiaztatu ditzakezu txatak seguru mantentzeko.", "Make a copy of your recovery key": "Egin zure berreskuratze gakoaren kopia", "You're done!": "Bukatu duzu!", "If you cancel now, you won't complete verifying the other user.": "Orain ezeztatzen baduzu, ez duzu beste erabiltzailearen egiaztaketa burutuko.", @@ -2108,5 +2108,66 @@ "Show typing notifications": "Erakutsi idazketa jakinarazpenak", "Scan this unique code": "Eskaneatu kode bakan hau", "Compare unique emoji": "Konparatu emoji bakana", - "Compare a unique set of emoji if you don't have a camera on either device": "Konparatu emoji sorta bakana gailuek kamerarik ez badute" + "Compare a unique set of emoji if you don't have a camera on either device": "Konparatu emoji sorta bakana gailuek kamerarik ez badute", + "Sign In or Create Account": "Hasi saioa edo sortu kontua", + "Use your account or create a new one to continue.": "Erabili zure kontua edo sortu berri bat jarraitzeko.", + "Create Account": "Sortu kontua", + "Order rooms by name": "Ordenatu gelak izenez", + "Show rooms with unread notifications first": "Erakutsi irakurri gabeko jakinarazpenak dituztenak aurretik", + "Show shortcuts to recently viewed rooms above the room list": "Erakutsi ikusitako azken geletara lasterbideak gelen zerrendaren goialdean", + "Cancelling…": "Ezeztatzen…", + "Your homeserver does not support cross-signing.": "Zure hasiera-zerbitzariak ez du zeharkako sinatzea onartzen.", + "Reset cross-signing and secret storage": "Berrezarri zeharkako sinadura eta biltegi sekretua", + "Homeserver feature support:": "Hasiera-zerbitzariaren ezaugarrien euskarria:", + "exists": "badago", + "Securely cache encrypted messages locally for them to appear in search results, using ": "Gorde zifratutako mezuak cachean modu seguruan bilaketen emaitzetan agertu daitezen, hau erabiliz ", + " to store messages from ": " hemengo mezuak gordetzeko ", + "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riot-ek zifratutako mezuak cache lokalean modu seguruan gordetzeko elementu batzuk faltan ditu. Ezaugarri honekin esperimentatu nahi baduzu, konpilatu pertsonalizatutako Riot Desktop bilaketa osagaiekin.", + "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot-ek ezin ditu zifratutako mezuak cache lokalean gorde web nabigatzaile batetik badabil. Erabili Riot Desktop zifratutako mezuak bilaketen emaitzetan agertzeko.", + "Backup has a signature from unknown session with ID %(deviceId)s": "Babes-kopiak %(deviceId)s ID-a duen erabiltzaile ezezagun baten sinadura du", + "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Babes-kopiaren gakoa biltegi sekretuan gorde da, baina ezaugarri hau ez dago saio honetan aktibatuta. Gaitu zeharkako sinatzea Laborategia atalean gakoen babes-kopiaren egoera aldatzeko.", + "Accepting…": "Onartzen…", + "Not Trusted": "Ez konfiantzazkoa", + "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) erabiltzaileak saio berria hasi du hau egiaztatu gabe:", + "Ask this user to verify their session, or manually verify it below.": "Eskatu erabiltzaile honi saioa egiaztatu dezala, edo egiaztatu eskuz azpian.", + "Manually Verify": "Eskuzko egiaztaketa", + "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Egiaztatu nahi duzun saioak ez du QR kodea eskaneatzea onartzen, ezta emoji egiaztaketa, eta hau da Riot-ek onartzen duena. Saiatu beste bezero batekin.", + "Verify by scanning": "Egiaztatu eskaneatuz", + "You declined": "Ukatu egin duzu", + "%(name)s declined": "%(name)s erabiltzaileak ukatu du", + "Accepting …": "Onartzen…", + "Declining …": "Ukatzen…", + "Destroy cross-signing keys?": "Suntsitu zeharkako sinatzerako gakoak?", + "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Zeharkako sinatzerako gakoak ezabatzea behin betiko da. Egiaztatu dituzunak segurtasun abisu bat jasoko dute. Ziur aski ez duzu hau egin nahi, zeharkako sinatzea ahalbidetzen dizun gailu oro galdu ez baduzu.", + "Clear cross-signing keys": "Garbitu zeharkako sinatzerako gakoak", + "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Saio hau fidagarritzat jo daitekeela egiaztatzeko, jarri jabearekin kontaktuan beste bide batetik (adib. aurrez aurre edo telefonoz deituz) eta galdetu saio honentzat erabiltzaile ezarpenetan ikusten duten gakoa beheko honekin bat datorren:", + "Verification Requests": "Egiaztatze eskaerak", + "Your account is not secure": "Zure kontua ez da segurua", + "Your password": "Zure pasahitza", + "This session, or the other session": "Saio hau, edo beste saioa", + "The internet connection either session is using": "Saioetako batek darabilen internet konexioa", + "We recommend you change your password and recovery key in Settings immediately": "Pasahitza eta ezarpenetako berreskuratze gakoa berehala aldatzea aholkatzen dizugu", + "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Atzitu zure mezu seguruen historiala eta zeharkako sinatzerako identitatea beste saioak egiaztatzeko zure berreskuratze gakoa sartuz.", + "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Zure pasahitza aldatzeak zure saio guztietako muturretik-muturrerako zifratzerako gakoak berrezarriko ditu, eta aurretik zifratutako mezuen historiala ezin izango da irakurri. Ezarri gakoen babes-kopia edo esportatu zure geletako gakoak beste saio batetik pasahitza aldatu aurretik.", + "You have been logged out of all sessions and will no longer receive push notifications. To re-enable notifications, sign in again on each device.": "Saio guztiak amaitu dituzu eta ez duzu push jakinarazpenik jasoko. Jakinarazpenak berriro aktibatzeko, hasi saioa gailuetan.", + "Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Berreskuratu zure kontura sarbidea eta saio honetan gordetako zifratze gakoak. Horiek gabe, ezin izango dituzu zure mezu seguruak beste saioetan irakurri.", + "Warning: Your personal data (including encryption keys) is still stored in this session. Clear it if you're finished using this session, or want to sign in to another account.": "Abisua: Zure datu pertsonalak (zure zifratze gakoak barne) saio honetan daude oraindik. Garbitu ezazu saio hau erabiltzen bukatu duzunean, edo beste kontu batekin saioa hasi nahi duzunean.", + "Restore your key backup to upgrade your encryption": "Berreskuratu zure gakoen babes-kopia zure zifratzea eguneratzeko", + "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Eguneratu saio hau beste saioak egiaztatu ahal ditzan, zifratutako mezuetara sarbidea emanez eta beste erabiltzaileei fidagarri gisa agertu daitezen.", + "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Ezarri zifratzea saio honetan beste saioak egiaztatu ahal ditzan, zifratutako mezuetara sarbidea emanez eta beste erabiltzaileei fidagarri gisa agertu daitezen.", + "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another session.": "Mezuen berreskuratze segurua ezartzen ez baduzu, ezin izango duzu zifratutako mezuen historiala berreskuratu saioa amaitzen baduzu edo beste saio bat erabiltzen baduzu.", + "Create key backup": "Sortu gakoen babes-kopia", + "This session is encrypting history using the new recovery method.": "Saio honek historiala zifratzen du berreskuratze metodo berria erabiliz.", + "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Saio honek zure berreskuratze pasa-esaldia eta mezu seguruen gakoa kendu direla antzeman du.", + "If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "Nahi gabe egin baduzu hau, Mezu seguruak ezarri ditzakezu saio honetan eta saioaren mezuen historiala berriro zifratuko da berreskuratze metodo berriarekin.", + "If disabled, messages from encrypted rooms won't appear in search results.": "Desgaituz gero, zifratutako geletako mezuak ez dira bilaketen emaitzetan agertuko.", + "Disable": "Desgaitu", + "Not currently downloading messages for any room.": "Orain ez da inolako gelatik mezurik deskargatzen ari.", + "Downloading mesages for %(currentRoom)s.": "%(currentRoom)s gelako mezuak deskargatzen.", + "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot-ek zifratutako mezuak cache lokalean gordetzen ditu modu seguruan bilaketen emaitzen ager daitezen:", + "Space used:": "Erabilitako espazioa:", + "Indexed messages:": "Indexatutako mezuak:", + "Indexed rooms:": "Indexatutako gelak:", + "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s / %(totalRooms)s", + "Message downloading sleep time(ms)": "Mezuen deskargaren itxarote tartea (ms)" } From 0968f119c3ca4fcf30c5ce8ee180b92f313c9606 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Sun, 1 Mar 2020 04:06:59 +0000 Subject: [PATCH 113/522] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2139 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 0551f2f3ec..f57ef0e28d 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2170,5 +2170,11 @@ "Your password": "您的密碼", "This session, or the other session": "此工作階段或其他工作階段", "The internet connection either session is using": "任何一個工作階段正在使用的網際網路連線", - "We recommend you change your password and recovery key in Settings immediately": "我們建議您立刻在設定中變更您的密碼與復原金鑰" + "We recommend you change your password and recovery key in Settings immediately": "我們建議您立刻在設定中變更您的密碼與復原金鑰", + "Sign In or Create Account": "登入或建立帳號", + "Use your account or create a new one to continue.": "使用您的帳號或建立新的以繼續。", + "Create Account": "建立帳號", + "Order rooms by name": "以名稱排序聊天室", + "Show rooms with unread notifications first": "先顯示有未讀通知的聊天室", + "Show shortcuts to recently viewed rooms above the room list": "在聊天室清單上方顯示最近看過的聊天室的捷徑" } From 3571690e7478055e73afcc71c6309e0cf17d362a Mon Sep 17 00:00:00 2001 From: Michal Stanke Date: Sun, 1 Mar 2020 09:56:26 +0000 Subject: [PATCH 114/522] Translated using Weblate (Czech) Currently translated at 100.0% (2139 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/cs/ --- src/i18n/strings/cs.json | 61 +++++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index 34f43d7cd5..3b8beeddfb 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -74,9 +74,9 @@ "A new password must be entered.": "Musíte zadat nové heslo.", "An error has occurred.": "Nastala chyba.", "Anyone": "Kdokoliv", - "Are you sure?": "Určitě?", - "Are you sure you want to leave the room '%(roomName)s'?": "Určitě chcete odejít z místnosti '%(roomName)s'?", - "Are you sure you want to reject the invitation?": "Určitě chcete odmítnout pozvání?", + "Are you sure?": "Opravdu?", + "Are you sure you want to leave the room '%(roomName)s'?": "Opravdu chcete opustit místnost '%(roomName)s'?", + "Are you sure you want to reject the invitation?": "Opravdu chcete odmítnout pozvání?", "Attachment": "Příloha", "Autoplay GIFs and videos": "Automaticky přehrávat GIFy a videa", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Nelze se připojit k domovskému serveru – zkontrolujte prosím své připojení, prověřte, zda je SSL certifikát vašeho domovského serveru důvěryhodný, a že některé z rozšíření prohlížeče neblokuje komunikaci.", @@ -133,7 +133,7 @@ "Failed to ban user": "Nepodařilo se vykázat uživatele", "Failed to join room": "Vstup do místnosti se nezdařil", "Failed to kick": "Vykopnutí se nezdařilo", - "Failed to leave room": "Odejití z místnosti se nezdařilo", + "Failed to leave room": "Opuštění místnosti se nezdařilo", "Failed to mute user": "Ztlumení uživatele se nezdařilo", "Failed to send email": "Odeslání e-mailu se nezdařilo", "Failed to reject invitation": "Nepodařilo se odmítnout pozvání", @@ -176,7 +176,7 @@ "Kick": "Vykopnout", "Kicks user with given id": "Vykopne uživatele s daným id", "Last seen": "Naposledy aktivní", - "Leave room": "Odejít z místnosti", + "Leave room": "Opustit místnost", "Local addresses for this room:": "Místní adresy této místnosti:", "Moderator": "Moderátor", "Name": "Název", @@ -401,9 +401,9 @@ "Blacklisted": "Na černé listině", "Invited": "Pozvaní", "Joins room with given alias": "Vstoupí do místnosti s daným aliasem", - "Leave Community": "Odejít ze skupiny", - "Leave %(groupName)s?": "Odejít z %(groupName)s?", - "Leave": "Odejít", + "Leave Community": "Opustit skupinu", + "Leave %(groupName)s?": "Opustit %(groupName)s?", + "Leave": "Opustit", "Failed to remove user from community": "Nepodařilo se odebrat uživatele ze skupiny", "Failed to remove room from community": "Nepodařilo se odebrat místnost ze skupiny", "Failed to remove '%(roomName)s' from %(groupId)s": "'%(roomName)s' se nepodařilo odebrat z %(groupId)s", @@ -453,7 +453,7 @@ "Missing room_id in request": "V zadání chybí room_id", "Missing user_id in request": "V zadání chybí user_id", "(could not connect media)": "(média se nepodařilo spojit)", - "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s zpřístupnil budoucí historii místnosti neznámým (%(visibility)s).", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s nastavil viditelnost budoucí zpráv v místnosti neznámým (%(visibility)s).", "Not a valid Riot keyfile": "Neplatný soubor s klíčem Riot", "Mirror local video feed": "Zrcadlit lokání video", "Enable inline URL previews by default": "Nastavit povolení náhledů URL adres jako výchozí", @@ -903,8 +903,8 @@ "Who can join this community?": "Kdo může vstoupit do této skupiny?", "Everyone": "Všichni", "This room is not public. You will not be able to rejoin without an invite.": "Tato místnost není veřejná. Bez pozvánky nebudete moci znovu vstoupit.", - "Can't leave Server Notices room": "Z místnosti \"Server Notices\" nejde odejit", - "This room is used for important messages from the Homeserver, so you cannot leave it.": "Tato místnost je určena pro důležité zprávy od domovský serveru, a proto z ní nemůžete odejít.", + "Can't leave Server Notices room": "Místnost \"Server Notices\" nelze opustit", + "This room is used for important messages from the Homeserver, so you cannot leave it.": "Tato místnost je určena pro důležité zprávy od domovského serveru, a proto ji nelze opustit.", "Terms and Conditions": "Smluvní podmínky", "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Chcete-li nadále používat domovský server %(homeserverDomain)s, měli byste si přečíst a odsouhlasit naše smluvní podmínky.", "Review terms and conditions": "Přečíst smluvní podmínky", @@ -962,7 +962,7 @@ "Developer options": "Možnosti pro vývojáře", "Help & About": "O aplikaci a pomoc", "Bug reporting": "Hlášení chyb", - "FAQ": "Máte dotazy?", + "FAQ": "Často kladené dotazy (FAQ)", "Versions": "Verze", "Legal": "Právní informace", "Voice & Video": "Zvuk a video", @@ -1126,8 +1126,8 @@ "Robot": "Robot", "Hat": "Klobouk", "Glasses": "Brýle", - "Spanner": "Utahovací klíč", - "Santa": "Santa", + "Spanner": "Maticový klíč", + "Santa": "Santa Klaus", "Thumbs up": "Palec nahoru", "Umbrella": "Deštník", "Hourglass": "Přesýpací hodiny", @@ -1142,14 +1142,14 @@ "Telephone": "Telefon", "Flag": "Vlajka", "Train": "Vlak", - "Bicycle": "Jízní kolo", + "Bicycle": "Jízdní kolo", "Aeroplane": "Letadlo", "Rocket": "Raketa", "Trophy": "Trofej", "Ball": "Míč", "Guitar": "Kytara", "Trumpet": "Trumpeta", - "Bell": "Zvonek", + "Bell": "Zvon", "Anchor": "Kotva", "Headphones": "Sluchátka", "Folder": "Desky", @@ -1303,7 +1303,7 @@ "Create account": "Vytvořit účet", "Unable to query for supported registration methods.": "Nepovedlo se načíst podporované způsoby přihlášení.", "Prepends ¯\\_(ツ)_/¯ to a plain-text message": "Vloží ¯\\_(ツ)_/¯ na začátek zprávy", - "Changes your display nickname in the current room only": "Změní vaši zobrazovanou přezdívku pouze v současné místnosti", + "Changes your display nickname in the current room only": "Změní vaši zobrazovanou přezdívku pouze v této místnosti", "User %(userId)s is already in the room": "Uživatel %(userId)s už je v této místnosti", "The user must be unbanned before they can be invited.": "Uživatel je vykázán, nelze ho pozvat.", "Show read receipts sent by other users": "Zobrazovat potvrzení o přijetí", @@ -1738,7 +1738,7 @@ "%(senderName)s created a rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s vytvořil pravidlo blokující místnosti odpovídající %(glob)s z důvodu %(reason)s", "%(senderName)s created a rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s vytvořil pravidlo blokující servery odpovídající %(glob)s z důvodu %(reason)s", "%(senderName)s created a ban rule matching %(glob)s for %(reason)s": "%(senderName)s vytvořil blokovací pravidlo odpovídající %(glob)s z důvodu %(reason)s", - "%(senderName)s changed a rule that was banning users matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil pravidlo blokující uživatele odpovídající %(oldGlob)s na uživatele odpovídající %(newGlob)s z důvodu %(reason)s.", + "%(senderName)s changed a rule that was banning users matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil pravidlo blokující uživatele odpovídající %(oldGlob)s na uživatele odpovídající %(newGlob)s z důvodu %(reason)s", "%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil pravidlo blokující místnosti odpovídající %(oldGlob)s na místnosti odpovídající %(newGlob)s z důvodu %(reason)s", "%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil pravidlo blokující servery odpovídající %(oldGlob)s na servery odpovídající %(newGlob)s z důvodu %(reason)s", "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil blokovací pravidlo odpovídající %(oldGlob)s na odpovídající %(newGlob)s z důvodu %(reason)s", @@ -1838,7 +1838,7 @@ "Reload": "Načíst znovu", "Take picture": "Udělat fotku", "Remove for everyone": "Odstranit pro všechny", - "Remove for me": "Odstranit pro mě", + "Remove for me": "Odstranit (jen pro mě)", "User Status": "Stav uživatele", "Verification Request": "Požadavek na ověření", " (1/%(totalCount)s)": " (1/%(totalCount)s)", @@ -1905,7 +1905,7 @@ "They match": "Odpovídají", "They don't match": "Neodpovídají", "To be secure, do this in person or use a trusted way to communicate.": "Aby to bylo bezpečné, udělejte to osobně nebo použijte důvěryhodný komunikační prostředek.", - "Lock": "Zamknout", + "Lock": "Zámek", "Verify yourself & others to keep your chats safe": "Ověřte sebe a ostatní, aby byla vaše komunikace bezpečná", "Other users may not trust it": "Ostatní uživatelé této relaci nemusí věřit", "Later": "Později", @@ -2053,7 +2053,7 @@ "This wasn't me": "To jsem nebyl/a já", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Toto vám umožní se přihlásit do dalších relací a vrátit se ke svému účtu poté, co se odhlásíte.", "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Máte zakázané posílání zpráv neověřeným relacím; abyste mohli zprávu odeslat, musíte je ověřit.", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Doporučujeme si projít ověřovací proces pro každou relaci abyste ověřili, že patří tomu, komu očekáváte. Můžete ale poslat zprávu i bez ověření, pokud chcete.", + "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Doporučujeme projít ověřovací proces pro každou relaci abyste ověřili, že patří tomu, komu očekáváte. Můžete ale poslat zprávu i bez ověření, pokud chcete.", "Room contains unknown sessions": "V místnosti jsou neověřené relace", "\"%(RoomName)s\" contains sessions that you haven't seen before.": "V místnosti \"%(RoomName)s\" jsou relace, které jste ještě nikdy neviděli.", "Unknown sessions": "Neznámá relace", @@ -2146,5 +2146,22 @@ "Indexed messages:": "Indexované zprávy:", "Indexed rooms:": "Indexované místnosti:", "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s z %(totalRooms)s", - "Message downloading sleep time(ms)": "Čas na stažení zprávy (ms)" + "Message downloading sleep time(ms)": "Čas na stažení zprávy (ms)", + "Sign In or Create Account": "Přihlásit nebo vytvořit nový účet", + "Use your account or create a new one to continue.": "Pro pokračování se přihlaste existujícím účtem, nebo si vytvořte nový.", + "Create Account": "Vytvořit účet", + "Order rooms by name": "Seřadit místnosti podle názvz", + "Show rooms with unread notifications first": "Zobrazovat místnosti s nepřečtenými oznámeními navrchu", + "Show shortcuts to recently viewed rooms above the room list": "Zobrazovat zkratky do nedávno zobrazených místností navrchu", + "Cancelling…": "Rušení…", + "Your homeserver does not support cross-signing.": "Váš domovský server nepodporuje cross-signing.", + "Homeserver feature support:": "Funkce podporované domovským serverem:", + "Accepting…": "Přijímání…", + "Accepting …": "Přijímání…", + "Declining …": "Odmítání…", + "Verification Requests": "Požadavky na ověření", + "Your account is not secure": "Váš účet není zabezpečený", + "Your password": "Vaše heslo", + "This session, or the other session": "Tato relace, nebo jiná", + "We recommend you change your password and recovery key in Settings immediately": "Doporučujeme vám si v nastavení okamžitě změnit své heslo a obnovovací klíče" } From 0a2df38ea3c2b6333d0c0508fa260e663352f238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanislav=20Luke=C5=A1?= Date: Sun, 1 Mar 2020 14:25:32 +0000 Subject: [PATCH 115/522] Translated using Weblate (Czech) Currently translated at 100.0% (2139 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/cs/ --- src/i18n/strings/cs.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index 3b8beeddfb..e5c4cea2ff 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -2163,5 +2163,7 @@ "Your account is not secure": "Váš účet není zabezpečený", "Your password": "Vaše heslo", "This session, or the other session": "Tato relace, nebo jiná", - "We recommend you change your password and recovery key in Settings immediately": "Doporučujeme vám si v nastavení okamžitě změnit své heslo a obnovovací klíče" + "We recommend you change your password and recovery key in Settings immediately": "Doporučujeme vám si v nastavení okamžitě změnit své heslo a obnovovací klíče", + "exists": "existuje", + "The internet connection either session is using": "Internetové připojení používané jednou z relací" } From 6c77b563f2f60170e3aca04ea7c75484b618efa3 Mon Sep 17 00:00:00 2001 From: axel simon Date: Sat, 29 Feb 2020 12:29:00 +0000 Subject: [PATCH 116/522] Translated using Weblate (French) Currently translated at 100.0% (2139 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 32b6819533..bbc1d47c93 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -1374,7 +1374,7 @@ "The homeserver may be unavailable or overloaded.": "Le serveur d’accueil est peut-être indisponible ou surchargé.", "You have %(count)s unread notifications in a prior version of this room.|other": "Vous avez %(count)s notifications non lues dans une version précédente de ce salon.", "You have %(count)s unread notifications in a prior version of this room.|one": "Vous avez %(count)s notification non lue dans une version précédente de ce salon.", - "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Si vous utilisez ou non la fonction « fil d’ariane » (les avatars au-dessus de la liste des salons)", + "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Si vous utilisez ou non la fonction « fil d’Ariane » (avatars au-dessus de la liste des salons)", "Replying With Files": "Répondre avec des fichiers", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Pour le moment, il n’est pas possible de répondre avec un fichier. Souhaitez-vous envoyer ce fichier sans répondre ?", "The file '%(fileName)s' failed to upload.": "Le fichier « %(fileName)s » n’a pas pu être envoyé.", From ef017fe8f2728468761355c0172d2eb688b2c54a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Sat, 29 Feb 2020 12:29:18 +0000 Subject: [PATCH 117/522] Translated using Weblate (French) Currently translated at 100.0% (2139 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index bbc1d47c93..f9e575291e 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2171,5 +2171,11 @@ "Your password": "Votre mot de passe", "This session, or the other session": "Cette session, ou l'autre session", "The internet connection either session is using": "La connection internet de l'une des sessions", - "We recommend you change your password and recovery key in Settings immediately": "Nous vous recommandons de changer votre mot de passe et la clé de récupération dans Paramètres dès que possible" + "We recommend you change your password and recovery key in Settings immediately": "Nous vous recommandons de changer votre mot de passe et la clé de récupération dans Paramètres dès que possible", + "Sign In or Create Account": "Se connecter ou créer un compte", + "Use your account or create a new one to continue.": "Utilisez votre compte ou créez un nouveau compte pour continuer.", + "Create Account": "Créer un compte", + "Order rooms by name": "Trier les salons par nom", + "Show rooms with unread notifications first": "Afficher en premier les salons avec des notifications non lues", + "Show shortcuts to recently viewed rooms above the room list": "Afficher les raccourcis vers les salons vus récemment au-dessus de la liste des salons" } From 4d07480ccee966932b573e912b41e85aff6a78ec Mon Sep 17 00:00:00 2001 From: Tentarial Date: Sat, 29 Feb 2020 10:24:00 +0000 Subject: [PATCH 118/522] Translated using Weblate (German) Currently translated at 75.7% (1619 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 1d9a96ece0..9a655b041c 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1646,5 +1646,15 @@ "Sign in to your Matrix account on ": "Melde dich bei deinem Matrix-Konto auf an", "Enter your password to sign in and regain access to your account.": "Gib dein Passwort ein, um dich anzumelden und wieder Zugang zu deinem Konto zu erhalten.", "Sign in and regain access to your account.": "Melden dich an und erhalte wieder Zugang zu deinem Konto.", - "You cannot sign in to your account. Please contact your homeserver admin for more information.": "Du kannst dich nicht bei deinem Konto anmelden. Bitte kontaktiere deinen Homeserver-Administrator für weitere Informationen." + "You cannot sign in to your account. Please contact your homeserver admin for more information.": "Du kannst dich nicht bei deinem Konto anmelden. Bitte kontaktiere deinen Homeserver-Administrator für weitere Informationen.", + "Sign In or Create Account": "Anmelden oder Account erstellen", + "Use your account or create a new one to continue.": "Benutze deinen Account oder erstellen einen neuen, um fortzufahren.", + "Create Account": "Account erstellen", + "Show typing notifications": "Zeige Tipp-Benachrichtigungen", + "Order rooms by name": "Sortiere Räume nach Name", + "When rooms are upgraded": "Wenn Räume verbessert werden", + "Scan this unique code": "Scanne diesen einzigartigen Code", + "or": "oder", + "Compare unique emoji": "Vergleiche einzigartige Emojis", + "Start": "Starte" } From 270d31d4a991b8ba031f19226a08a0a19e30eddb Mon Sep 17 00:00:00 2001 From: Szimszon Date: Sat, 29 Feb 2020 19:11:50 +0000 Subject: [PATCH 119/522] Translated using Weblate (Hungarian) Currently translated at 100.0% (2139 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 4b9b6e3639..672101059e 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2067,7 +2067,7 @@ "Verification timed out. Start verification again from their profile.": "Ellenőrzés időtúllépés. Kezd újra az ellenőrzést a másik felhasználó profiljából.", "%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s törölte az ellenőrzést. Kezd újra az ellenőrzést a felhasználó profiljából.", "You cancelled verification. Start verification again from their profile.": "Törölted az ellenőrzést. Kezd újra az ellenőrzést a felhasználó profiljából.", - "Encryption enabled": "Titkosítás engedélyezve", + "Encryption enabled": "Titkosítás bekapcsolva", "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Ebben a szobában az üzenetek végpontok között titkosítottak. További információkért és ellenőrzéshez nyisd meg a felhasználó profilját.", "Encryption not enabled": "Titkosítás nincs engedélyezve", "The encryption used by this room isn't supported.": "A szobában használt titkosítás nem támogatott.", From f589277bb8852f120739f42cb39e3bd040954265 Mon Sep 17 00:00:00 2001 From: call_xz Date: Sat, 29 Feb 2020 16:34:03 +0000 Subject: [PATCH 120/522] Translated using Weblate (Japanese) Currently translated at 54.7% (1169 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ja/ --- src/i18n/strings/ja.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index 43e4d5544a..c142cc2a0e 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -1179,5 +1179,11 @@ "Confirm your passphrase": "パスワードを確認", "Recovery key": "リカバリキー", "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "キーの暗号化されたコピーがサーバーに保存されます。バックアップを保護するために、パスワードを設定してください。", - "Secure your backup with a passphrase": "バックアップをパスワードで保護" + "Secure your backup with a passphrase": "バックアップをパスワードで保護", + "Display Name": "表示名", + "Profile picture": "プロフィール画像", + "Encryption enabled": "暗号化が有効です", + "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "この部屋内のメッセージはエンドツーエンドで暗号化されます。詳細およびユーザーの検証に関しては各ユーザーのプロフィールをご確認ください。", + "Encryption not enabled": "暗号化が無効です", + "The encryption used by this room isn't supported.": "この部屋では暗号化の使用がサポートされていません。" } From 72ad0a8dbcff3fe2979edcea5b6cc5f99684edb5 Mon Sep 17 00:00:00 2001 From: tctovsli Date: Sun, 1 Mar 2020 20:18:00 +0000 Subject: [PATCH 121/522] Translated using Weblate (Norwegian Nynorsk) Currently translated at 50.9% (1089 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nn/ --- src/i18n/strings/nn.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json index c9b98f9a26..f8e647a20e 100644 --- a/src/i18n/strings/nn.json +++ b/src/i18n/strings/nn.json @@ -1100,5 +1100,8 @@ "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s starta ein videosamtale. (ikkje støtta av denne nettlesaren)", "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s trekte tilbake invitasjonen for at %(targetDisplayName)s kan bli medlem i rommet.", "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Du er administrator for dette fellesskapet. Du kan ikkje melde deg inn igjen utan at du har invitasjon frå ein annan administrator.", - "Want more than a community? Get your own server": "Treng du meir enn eit fellesskap? Skaff din eigen server" + "Want more than a community? Get your own server": "Treng du meir enn eit fellesskap? Skaff din eigen server", + "Sign In or Create Account": "Logg inn eller opprett konto", + "Create Account": "Opprett konto", + "Sends the given emote coloured as a rainbow": "Sendar emojien med regnbogefargar" } From c6eef5fe5bbe2b5cb49ea72486ef50127137e183 Mon Sep 17 00:00:00 2001 From: catborise Date: Sat, 29 Feb 2020 19:43:59 +0000 Subject: [PATCH 122/522] Translated using Weblate (Turkish) Currently translated at 75.3% (1610 of 2139 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/tr/ --- src/i18n/strings/tr.json | 66 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index b8926b85cb..bcf7fbbc35 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -1564,5 +1564,69 @@ "Failed to update community": "Toluluğu güncelleme başarısız", "Downloading mesages for %(currentRoom)s.": "%(currentRoom)s için mesajlar indiriliyor.", "Indexed rooms:": "İndekslenmiş odalar:", - "%(crawlingRooms)s out of %(totalRooms)s": "%(totalRooms)s odadan %(crawlingRooms)s tanesi" + "%(crawlingRooms)s out of %(totalRooms)s": "%(totalRooms)s odadan %(crawlingRooms)s tanesi", + "Bridges": "Köprüler", + "Send a reply…": "Bir cevap gönder…", + "Send a message…": "Bir mesaj gönder…", + "Direct Messages": "Doğrudan Mesajlar", + "Unknown Command": "Bilinmeyen Komut", + "Unrecognised command: %(commandText)s": "Tanınmayan komut: %(commandText)s", + "Send as message": "Mesaj olarak gönder", + "Start Verification": "Doğrulamayı Başlat", + "Verify User": "Kullanıcı Doğrula", + "Your messages are not secure": "Mesajlarınız korunmuyor", + "Your homeserver": "Ana sunucunuz", + "Not Trusted": "Güvenilmiyor", + "%(count)s sessions|other": "%(count)s oturum", + "%(count)s sessions|one": "%(count)s oturum", + "%(name)s cancelled verifying": "%(name)s doğrulama iptal edildi", + "Message removed": "Mesaj silindi", + "Filter community members": "Topluluk üyeleri filtrelendi", + "Invite to this community": "Bu topluluğa davet et", + "Failed to remove room from community": "Topluluktan oda silinmesi başarısız", + "Visible to everyone": "Herkese görünür", + "Only visible to community members": "Sadece topluluk üyelerine görünür", + "Add rooms to this community": "Bu topluluğa odaları ekle", + "Filter community rooms": "Topluluk odalarını filtrele", + "You're not currently a member of any communities.": "Şu anda hiç bir topluluğun bir üyesi değilsiniz.", + "Yes, I want to help!": "Evet, Yardım istiyorum!", + "Set Password": "Şifre oluştur", + "Error encountered (%(errorDetail)s).": "Hata oluştu (%(errorDetail)s).", + "Checking for an update...": "Güncelleme kontrolü...", + "No update available.": "Güncelleme yok.", + "Downloading update...": "Güncelleme indiriliyor...", + "Frequently Used": "Sıklıkla Kullanılan", + "Animals & Nature": "Hayvanlar & Doğa", + "Food & Drink": "Yiyecek & İçecek", + "Activities": "Aktiviteler", + "Travel & Places": "Seyahat & Yerler", + "Objects": "Nesneler", + "Symbols": "Semboller", + "Flags": "Bayraklar", + "Cancel search": "Aramayı iptal et", + "Your display name": "Ekran adınız", + "Your user ID": "Kullanıcı ID", + "Your theme": "Temanız", + "Widget ID": "Görsel Bileşen ID si", + "Delete Widget": "Görsel Bileşen Sil", + "Delete widget": "Görsel bileşen sil", + "Failed to remove widget": "Görsel bileşen silme başarısız", + "Destroy cross-signing keys?": "Çarpraz-imzalama anahtarlarını imha et?", + "Clear cross-signing keys": "Çapraz-imzalama anahtarlarını temizle", + "Clear all data in this session?": "Bu oturumdaki tüm verileri temizle?", + "Verify session": "Oturum doğrula", + "Use Legacy Verification (for older clients)": "Eski Doğrulamayı Kullan (eski istemciler için)", + "Session name": "Oturum adı", + "Session key": "Oturum anahtarı", + "Verification Requests": "Doğrulama İstekleri", + "Recent Conversations": "Güncel Sohbetler", + "Suggestions": "Öneriler", + "Recently Direct Messaged": "Güncel Doğrudan Mesajlar", + "Go": "Git", + "Loading session info...": "Oturum bilgisi yükleniyor...", + "Your account is not secure": "Hesabınız güvende değil", + "Your password": "Parolanız", + "This session, or the other session": "Bu oturum veya diğer oturum", + "New session": "Yeni oturum", + "This wasn't me": "Bu ben değildim" } From 8ec83d4a7711452c1c9857b6f9fad1f5343e10ae Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 2 Mar 2020 11:20:28 +0000 Subject: [PATCH 123/522] Revert to manual sorting for custom tag rooms --- src/stores/RoomListStore.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/stores/RoomListStore.js b/src/stores/RoomListStore.js index 30b523d35d..561d865b66 100644 --- a/src/stores/RoomListStore.js +++ b/src/stores/RoomListStore.js @@ -62,15 +62,16 @@ const getListAlgorithm = (listKey, settingAlgorithm) => { // apply manual sorting only to m.favourite, otherwise respect the global setting // all the known tags are listed explicitly here to simplify future changes switch (listKey) { - case "m.favourite": - return ALGO_MANUAL; case "im.vector.fake.invite": case "im.vector.fake.recent": case "im.vector.fake.archived": case "m.lowpriority": case TAG_DM: - default: return settingAlgorithm; + + case "m.favourite": + default: // custom-tags + return ALGO_MANUAL; } }; From f8045e428bad7a1dde1df56fab1e4a3a62ea021d Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 2 Mar 2020 14:59:54 +0000 Subject: [PATCH 124/522] riot-desktop open SSO in browser so user doesn't have to auth twice --- src/BasePlatform.js | 24 ++++++++++++ src/Login.js | 28 ++++--------- src/components/structures/auth/Login.js | 12 ++++-- src/components/structures/auth/SoftLogout.js | 31 ++------------- src/components/views/elements/SSOButton.js | 41 ++++++++++++++++++++ src/i18n/strings/en_EN.json | 2 +- 6 files changed, 86 insertions(+), 52 deletions(-) create mode 100644 src/components/views/elements/SSOButton.js diff --git a/src/BasePlatform.js b/src/BasePlatform.js index a935f4a767..809fe198d6 100644 --- a/src/BasePlatform.js +++ b/src/BasePlatform.js @@ -4,6 +4,7 @@ Copyright 2016 Aviral Dasgupta Copyright 2016 OpenMarket Ltd Copyright 2018 New Vector Ltd +Copyright 2020 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,6 +19,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +import {MatrixClient} from "matrix-js-sdk"; import dis from './dispatcher'; import BaseEventIndexManager from './indexing/BaseEventIndexManager'; @@ -164,4 +166,26 @@ export default class BasePlatform { } setLanguage(preferredLangs: string[]) {} + + getSSOCallbackUrl(hsUrl: string, isUrl: string): URL { + const url = new URL(window.location.href); + // XXX: at this point, the fragment will always be #/login, which is no + // use to anyone. Ideally, we would get the intended fragment from + // MatrixChat.screenAfterLogin so that you could follow #/room links etc + // through an SSO login. + url.hash = ""; + url.searchParams.set("homeserver", hsUrl); + url.searchParams.set("identityServer", isUrl); + return url; + } + + /** + * Begin Single Sign On flows. + * @param mxClient the matrix client using which we should start the flow + * @param loginType the type of SSO it is, CAS/SSO. + */ + startSingleSignOn(mxClient: MatrixClient, loginType: "sso"|"cas") { + const callbackUrl = this.getSSOCallbackUrl(mxClient.getHomeserverUrl(), mxClient.getIdentityServerUrl()); + window.location.href = mxClient.getSsoLoginUrl(callbackUrl.toString(), loginType); // redirect to SSO + } } diff --git a/src/Login.js b/src/Login.js index d9ce8adaaa..1590e5ac28 100644 --- a/src/Login.js +++ b/src/Login.js @@ -3,6 +3,7 @@ Copyright 2015, 2016 OpenMarket Ltd Copyright 2017 Vector Creations Ltd Copyright 2018 New Vector Ltd Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2020 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,8 +20,6 @@ limitations under the License. import Matrix from "matrix-js-sdk"; -import url from 'url'; - export default class Login { constructor(hsUrl, isUrl, fallbackHsUrl, opts) { this._hsUrl = hsUrl; @@ -29,6 +28,7 @@ export default class Login { this._currentFlowIndex = 0; this._flows = []; this._defaultDeviceDisplayName = opts.defaultDeviceDisplayName; + this._tempClient = null; // memoize } getHomeserverUrl() { @@ -40,10 +40,12 @@ export default class Login { } setHomeserverUrl(hsUrl) { + this._tempClient = null; // clear memoization this._hsUrl = hsUrl; } setIdentityServerUrl(isUrl) { + this._tempClient = null; // clear memoization this._isUrl = isUrl; } @@ -52,8 +54,9 @@ export default class Login { * requests. * @returns {MatrixClient} */ - _createTemporaryClient() { - return Matrix.createClient({ + createTemporaryClient() { + if (this._tempClient) return this._tempClient; // use memoization + return this._tempClient = Matrix.createClient({ baseUrl: this._hsUrl, idBaseUrl: this._isUrl, }); @@ -61,7 +64,7 @@ export default class Login { getFlows() { const self = this; - const client = this._createTemporaryClient(); + const client = this.createTemporaryClient(); return client.loginFlows().then(function(result) { self._flows = result.flows; self._currentFlowIndex = 0; @@ -139,21 +142,6 @@ export default class Login { throw error; }); } - - getSsoLoginUrl(loginType) { - const client = this._createTemporaryClient(); - const parsedUrl = url.parse(window.location.href, true); - - // XXX: at this point, the fragment will always be #/login, which is no - // use to anyone. Ideally, we would get the intended fragment from - // MatrixChat.screenAfterLogin so that you could follow #/room links etc - // through an SSO login. - parsedUrl.hash = ""; - - parsedUrl.query["homeserver"] = client.getHomeserverUrl(); - parsedUrl.query["identityServer"] = client.getIdentityServerUrl(); - return client.getSsoLoginUrl(url.format(parsedUrl), loginType); - } } diff --git a/src/components/structures/auth/Login.js b/src/components/structures/auth/Login.js index 24e4726416..3813146b5e 100644 --- a/src/components/structures/auth/Login.js +++ b/src/components/structures/auth/Login.js @@ -27,6 +27,7 @@ import { messageForResourceLimitError } from '../../../utils/ErrorUtils'; import AutoDiscoveryUtils, {ValidatedServerConfig} from "../../../utils/AutoDiscoveryUtils"; import classNames from "classnames"; import AuthPage from "../../views/auth/AuthPage"; +import SSOButton from "../../views/elements/SSOButton"; // For validating phone numbers without country codes const PHONE_NUMBER_REGEX = /^[0-9()\-\s]*$/; @@ -120,8 +121,8 @@ export default createReactClass({ 'm.login.password': this._renderPasswordStep, // CAS and SSO are the same thing, modulo the url we link to - 'm.login.cas': () => this._renderSsoStep(this._loginLogic.getSsoLoginUrl("cas")), - 'm.login.sso': () => this._renderSsoStep(this._loginLogic.getSsoLoginUrl("sso")), + 'm.login.cas': () => this._renderSsoStep("cas"), + 'm.login.sso': () => this._renderSsoStep("sso"), }; this._initLoginLogic(); @@ -585,7 +586,7 @@ export default createReactClass({ ); }, - _renderSsoStep: function(url) { + _renderSsoStep: function(loginType) { const SignInToText = sdk.getComponent('views.auth.SignInToText'); let onEditServerDetailsClick = null; @@ -606,7 +607,10 @@ export default createReactClass({ - { _t('Sign in with single sign-on') } +
); }, diff --git a/src/components/structures/auth/SoftLogout.js b/src/components/structures/auth/SoftLogout.js index 8481b3fc43..d38fcf3883 100644 --- a/src/components/structures/auth/SoftLogout.js +++ b/src/components/structures/auth/SoftLogout.js @@ -23,8 +23,8 @@ import * as Lifecycle from '../../../Lifecycle'; import Modal from '../../../Modal'; import {MatrixClientPeg} from "../../../MatrixClientPeg"; import {sendLoginRequest} from "../../../Login"; -import url from 'url'; import AuthPage from "../../views/auth/AuthPage"; +import SSOButton from "../../views/elements/SSOButton"; const LOGIN_VIEW = { LOADING: 1, @@ -55,7 +55,6 @@ export default class SoftLogout extends React.Component { this.state = { loginView: LOGIN_VIEW.LOADING, keyBackupNeeded: true, // assume we do while we figure it out (see componentWillMount) - ssoUrl: null, busy: false, password: "", @@ -105,18 +104,6 @@ export default class SoftLogout extends React.Component { const chosenView = loginViews.filter(f => !!f)[0] || LOGIN_VIEW.UNSUPPORTED; this.setState({loginView: chosenView}); - - if (chosenView === LOGIN_VIEW.CAS || chosenView === LOGIN_VIEW.SSO) { - const client = MatrixClientPeg.get(); - - const appUrl = url.parse(window.location.href, true); - appUrl.hash = ""; // Clear #/soft_logout off the URL - appUrl.query["homeserver"] = client.getHomeserverUrl(); - appUrl.query["identityServer"] = client.getIdentityServerUrl(); - - const ssoUrl = client.getSsoLoginUrl(url.format(appUrl), chosenView === LOGIN_VIEW.CAS ? "cas" : "sso"); - this.setState({ssoUrl}); - } } onPasswordChange = (ev) => { @@ -195,14 +182,6 @@ export default class SoftLogout extends React.Component { }); } - onSsoLogin = async (ev) => { - ev.preventDefault(); - ev.stopPropagation(); - - this.setState({busy: true}); - window.location.href = this.state.ssoUrl; - }; - _renderSignInSection() { if (this.state.loginView === LOGIN_VIEW.LOADING) { const Spinner = sdk.getComponent("elements.Spinner"); @@ -257,8 +236,6 @@ export default class SoftLogout extends React.Component { } if (this.state.loginView === LOGIN_VIEW.SSO || this.state.loginView === LOGIN_VIEW.CAS) { - const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); - if (!introText) { introText = _t("Sign in and regain access to your account."); } // else we already have a message and should use it (key backup warning) @@ -266,9 +243,9 @@ export default class SoftLogout extends React.Component { return (

{introText}

- - {_t('Sign in with single sign-on')} - +
); } diff --git a/src/components/views/elements/SSOButton.js b/src/components/views/elements/SSOButton.js new file mode 100644 index 0000000000..3e0757924b --- /dev/null +++ b/src/components/views/elements/SSOButton.js @@ -0,0 +1,41 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React from 'react'; +import PropTypes from 'prop-types'; + +import PlatformPeg from "../../../PlatformPeg"; +import AccessibleButton from "./AccessibleButton"; +import {_t} from "../../../languageHandler"; + +const SSOButton = ({matrixClient, loginType, ...props}) => { + const onClick = () => { + PlatformPeg.get().startSingleSignOn(matrixClient, loginType); + }; + + return ( + + {_t("Sign in with single sign-on")} + + ); +}; + +SSOButton.propTypes = { + matrixClient: PropTypes.object.isRequired, // does not use context as may use a temporary client + loginType: PropTypes.oneOf(["sso", "cas"]), // defaults to "sso" in base-apis +}; + +export default SSOButton; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index ba48f7cd37..9471b62c59 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1429,6 +1429,7 @@ "This alias is available to use": "This alias is available to use", "This alias is already in use": "This alias is already in use", "Room directory": "Room directory", + "Sign in with single sign-on": "Sign in with single sign-on", "And %(count)s more...|other": "And %(count)s more...", "ex. @bob:example.com": "ex. @bob:example.com", "Add User": "Add User", @@ -2001,7 +2002,6 @@ "Error: Problem communicating with the given homeserver.": "Error: Problem communicating with the given homeserver.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.", - "Sign in with single sign-on": "Sign in with single sign-on", "Create account": "Create account", "Failed to fetch avatar URL": "Failed to fetch avatar URL", "Set a display name:": "Set a display name:", From 4d9d5a1ab7954b1e01be14cbd58754015b990b25 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 2 Mar 2020 15:05:56 +0000 Subject: [PATCH 125/522] improve comments --- src/BasePlatform.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BasePlatform.js b/src/BasePlatform.js index 809fe198d6..5d809eb28f 100644 --- a/src/BasePlatform.js +++ b/src/BasePlatform.js @@ -181,8 +181,8 @@ export default class BasePlatform { /** * Begin Single Sign On flows. - * @param mxClient the matrix client using which we should start the flow - * @param loginType the type of SSO it is, CAS/SSO. + * @param {MatrixClient} mxClient the matrix client using which we should start the flow + * @param {"sso"|"cas"} loginType the type of SSO it is, CAS/SSO. */ startSingleSignOn(mxClient: MatrixClient, loginType: "sso"|"cas") { const callbackUrl = this.getSSOCallbackUrl(mxClient.getHomeserverUrl(), mxClient.getIdentityServerUrl()); From 7fcad8c82c1b56736dfb589edce9893f64392f25 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Mon, 2 Mar 2020 17:29:36 +0000 Subject: [PATCH 126/522] Upgrade matrix-js-sdk to 5.1.0 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index db877edc8c..188db47416 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "is-ip": "^2.0.0", "linkifyjs": "^2.1.6", "lodash": "^4.17.14", - "matrix-js-sdk": "5.1.0-rc.1", + "matrix-js-sdk": "5.1.0", "minimist": "^1.2.0", "pako": "^1.0.5", "png-chunks-extract": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index b01b64a8b3..8770bf39e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5791,10 +5791,10 @@ mathml-tag-names@^2.0.1: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz#6dff66c99d55ecf739ca53c492e626f1d12a33cc" integrity sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw== -matrix-js-sdk@5.1.0-rc.1: - version "5.1.0-rc.1" - resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-5.1.0-rc.1.tgz#48154133f1c8bc19557164a24535d6d45d1cf482" - integrity sha512-3pf8NOziyaldtJkYsas9Cq/b8TloGMY89KRA4tJLRDCdMrlBEJoQ4qb9MCmhS53Yb8N4ysI7qUUC21FtBryAVQ== +matrix-js-sdk@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-5.1.0.tgz#9b3b02af227ecc2d0cc35fb7312c92b8a6754293" + integrity sha512-IGRq5iACiKp3iIxAghwtdBPrbdgORowc0i8YuIMkZZMpRJDXnNaudt2BFwyQdukV7gvzz7F0sfxBUerySfOnKA== dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" From 51b10702f07dd2862fc7b6362f1414bff44cf462 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Mon, 2 Mar 2020 17:33:23 +0000 Subject: [PATCH 127/522] Prepare changelog for v2.2.0 --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4b86317c8..88d1895691 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +Changes in [2.2.0](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.2.0) (2020-03-02) +=================================================================================================== +[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.2.0-rc.1...v2.2.0) + + * Upgrade JS SDK to 5.1.0 + * Ignore cursor jumping shortcuts with shift + [\#4142](https://github.com/matrix-org/matrix-react-sdk/pull/4142) + Changes in [2.2.0-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.2.0-rc.1) (2020-02-26) ============================================================================================================= [Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.1.1...v2.2.0-rc.1) From 134ca31b25b14bcd3e290029311d2127e3a522d6 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Mon, 2 Mar 2020 17:33:23 +0000 Subject: [PATCH 128/522] v2.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 188db47416..f5bd9ec19f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-react-sdk", - "version": "2.2.0-rc.1", + "version": "2.2.0", "description": "SDK for matrix.org using React", "author": "matrix.org", "repository": { From 00dc187f7165a0659ce1ae5bbd3fd491ba5650db Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Mon, 2 Mar 2020 17:43:21 +0000 Subject: [PATCH 129/522] Reset matrix-js-sdk back to develop --- package.json | 2 +- yarn.lock | 200 ++++----------------------------------------------- 2 files changed, 14 insertions(+), 188 deletions(-) diff --git a/package.json b/package.json index f5bd9ec19f..e453b63a4d 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "is-ip": "^2.0.0", "linkifyjs": "^2.1.6", "lodash": "^4.17.14", - "matrix-js-sdk": "5.1.0", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop", "minimist": "^1.2.0", "pako": "^1.0.5", "png-chunks-extract": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index 7417fa2a78..87aeccd140 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1438,11 +1438,6 @@ abab@^2.0.0: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - acorn-globals@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" @@ -1576,19 +1571,11 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2494,11 +2481,6 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -2734,7 +2716,7 @@ debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.2.6: +debug@^3.1.0: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -2810,11 +2792,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -2828,11 +2805,6 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -3833,13 +3805,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -3902,20 +3867,6 @@ fuse.js@^2.2.0: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-2.7.4.tgz#96e420fde7ef011ac49c258a621314fe576536f9" integrity sha1-luQg/efvARrEnCWKYhMU/ldlNvk= -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - "gemini-scrollbar@github:matrix-org/gemini-scrollbar#91e1e566", gemini-scrollbar@matrix-org/gemini-scrollbar#91e1e566: version "1.4.3" resolved "https://codeload.github.com/matrix-org/gemini-scrollbar/tar.gz/91e1e566fa33324188f278801baf4a79f9f554ab" @@ -4117,11 +4068,6 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -4309,7 +4255,7 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4326,13 +4272,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -5714,10 +5653,9 @@ mathml-tag-names@^2.0.1: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== -matrix-js-sdk@5.1.0: +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": version "5.1.0" - resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-5.1.0.tgz#9b3b02af227ecc2d0cc35fb7312c92b8a6754293" - integrity sha512-IGRq5iACiKp3iIxAghwtdBPrbdgORowc0i8YuIMkZZMpRJDXnNaudt2BFwyQdukV7gvzz7F0sfxBUerySfOnKA== + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/da96765020b632deb5b433077827a4f4a64e16e9" dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" @@ -5907,21 +5845,6 @@ minimist@1.2.0, minimist@^1.1.1, minimist@^1.2.0, "minimist@~ 1.2.0": resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -5946,7 +5869,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -6023,15 +5946,6 @@ nearley@^2.7.10: randexp "0.4.6" semver "^5.4.1" -needle@^2.2.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.2.tgz#3342dea100b7160960a450dc8c22160ac712a528" - integrity sha512-DUzITvPVDUy6vczKKYTnWc/pBZ0EnjMJnQ3y+Jo5zfKFimJs7S3HFCxCRZYB9FUZcrzUQr3WsmvZgddMEIZv6w== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" @@ -6109,22 +6023,6 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-releases@^1.1.49: version "1.1.50" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.50.tgz#803c40d2c45db172d0410e4efec83aa8c6ad0592" @@ -6132,14 +6030,6 @@ node-releases@^1.1.49: dependencies: semver "^6.3.0" -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -6172,27 +6062,6 @@ normalize-selector@^0.2.0: resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -6200,16 +6069,6 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -6359,11 +6218,6 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -6373,19 +6227,11 @@ os-locale@^3.0.0, os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -7015,7 +6861,7 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -rc@1.2.8, rc@^1.2.7, rc@^1.2.8: +rc@1.2.8, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -7179,7 +7025,7 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -7538,7 +7384,7 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.4.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@^2.4.3, rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -7700,7 +7546,7 @@ serialize-javascript@^2.1.2: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -8036,7 +7882,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -8299,19 +8145,6 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^4.4.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -9031,13 +8864,6 @@ which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -9115,7 +8941,7 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From 677dce75c5fe4827ff24ab742686a6193441cdf1 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Mon, 2 Mar 2020 17:48:38 +0000 Subject: [PATCH 130/522] Use bash for release script This fixes this repo to use bash for this script, matching the other repos. --- release.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release.sh b/release.sh index 3c28084bb7..1b99e870ac 100755 --- a/release.sh +++ b/release.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # Script to perform a release of matrix-react-sdk. # From 07348a65ad66b733c6de899ade6ba47c71c0e710 Mon Sep 17 00:00:00 2001 From: Mark Striemer Date: Mon, 2 Mar 2020 13:59:14 -0600 Subject: [PATCH 131/522] Include a mark as read X under the scroll to unread button --- res/css/views/rooms/_TopUnreadMessagesBar.scss | 14 ++++++++++++++ src/components/views/rooms/TopUnreadMessagesBar.js | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/res/css/views/rooms/_TopUnreadMessagesBar.scss b/res/css/views/rooms/_TopUnreadMessagesBar.scss index a3916f321a..5f6f869877 100644 --- a/res/css/views/rooms/_TopUnreadMessagesBar.scss +++ b/res/css/views/rooms/_TopUnreadMessagesBar.scss @@ -56,3 +56,17 @@ limitations under the License. mask-position: 9px 13px; background: $roomtile-name-color; } + +.mx_TopUnreadMessagesBar_markAsRead { + display: block; + width: 18px; + height: 18px; + background-image: url('$(res)/img/cancel.svg'); + background-position: center; + background-size: 10px; + background-repeat: no-repeat; + background-color: $primary-bg-color; + border: 1.3px solid $roomtile-name-color; + border-radius: 99px; + margin: 5px auto; +} diff --git a/src/components/views/rooms/TopUnreadMessagesBar.js b/src/components/views/rooms/TopUnreadMessagesBar.js index 04805c799f..23d41059c4 100644 --- a/src/components/views/rooms/TopUnreadMessagesBar.js +++ b/src/components/views/rooms/TopUnreadMessagesBar.js @@ -27,6 +27,7 @@ export default createReactClass({ propTypes: { onScrollUpClick: PropTypes.func, + onCloseClick: PropTypes.func, }, render: function() { @@ -36,6 +37,10 @@ export default createReactClass({ title={_t('Jump to first unread message.')} onClick={this.props.onScrollUpClick}> + + ); }, From df9710907c833aad6275feb191f6d88c0bc8e58f Mon Sep 17 00:00:00 2001 From: Mark Striemer Date: Mon, 2 Mar 2020 15:45:16 -0600 Subject: [PATCH 132/522] Add en_US string --- 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 ab18c58e90..58f42ebe34 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1139,6 +1139,7 @@ "Revoke invite": "Revoke invite", "Invited by %(sender)s": "Invited by %(sender)s", "Jump to first unread message.": "Jump to first unread message.", + "Mark all as read": "Mark all as read", "Error updating main address": "Error updating main address", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.", "Error creating alias": "Error creating alias", From d95f843cd0bf16adf17ba1c25c530c124b84241c Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 2 Mar 2020 17:52:20 -0700 Subject: [PATCH 133/522] Don't group blank membership changes We already drop noop membership changes when they don't make it into a MELS, so we just need to make the MELS aware enough to drop messages early that are noops. Fixes https://github.com/vector-im/riot-web/issues/12575 --- src/components/structures/MessagePanel.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/components/structures/MessagePanel.js b/src/components/structures/MessagePanel.js index dd47028f8e..0029090a94 100644 --- a/src/components/structures/MessagePanel.js +++ b/src/components/structures/MessagePanel.js @@ -962,6 +962,17 @@ class MemberGrouper { } add(ev) { + if (ev.getType() === 'm.room.member') { + // We'll just double check that it's worth our time to do so... + if (ev.getPrevContent()) { + const membershipChange = ev.getPrevContent()['membership'] !== ev.getContent()['membership']; + const displayNameChange = ev.getPrevContent()['displayname'] !== ev.getContent()['displayname']; + const avatarChange = ev.getPrevContent()['avatar_url'] !== ev.getContent()['avatar_url']; + if (!membershipChange && !displayNameChange && !avatarChange) { + return; // Not a substantial change - quietly ignore + } + } + } this.readMarker = this.readMarker || this.panel._readMarkerForEvent(ev.getId()); this.events.push(ev); } From 96f125ebdcac2ec6b3849a0cec7ff4802ae9bac4 Mon Sep 17 00:00:00 2001 From: Karol Kosek Date: Mon, 2 Mar 2020 20:44:01 +0000 Subject: [PATCH 134/522] Translated using Weblate (Polish) Currently translated at 63.3% (1355 of 2140 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/pl/ --- src/i18n/strings/pl.json | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index aed7f01170..1eaa11409a 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -631,7 +631,7 @@ "Unable to join network": "Nie można dołączyć do sieci", "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Możliwe, że skofigurowałeś je w innym kliencie, niż Riot. Nie możesz ich zmieniać w Riot, ale nadal mają zastosowanie", "Sorry, your browser is not able to run Riot.": "Przepraszamy, Twoja przeglądarka nie jest w stanie uruchomić Riot.", - "Uploaded on %(date)s by %(user)s": "Wysłane %(date)s przez %(user)s", + "Uploaded on %(date)s by %(user)s": "Wysłano %(date)s przez %(user)s", "Messages in group chats": "Wiadomości w czatach grupowych", "Yesterday": "Wczoraj", "Error encountered (%(errorDetail)s).": "Wystąpił błąd (%(errorDetail)s).", @@ -1356,5 +1356,17 @@ "Filter rooms…": "Filtruj pokoje…", "Find a room…": "Znajdź pokój…", "Find a room… (e.g. %(exampleRoom)s)": "Znajdź pokój… (np. %(exampleRoom)s)", - "If you can't find the room you're looking for, ask for an invite or Create a new room.": "Jeżeli nie możesz znaleźć szukanego pokoju, poproś o zaproszenie albo Stwórz nowy pokój." + "If you can't find the room you're looking for, ask for an invite or Create a new room.": "Jeżeli nie możesz znaleźć szukanego pokoju, poproś o zaproszenie albo stwórz nowy pokój.", + "Show typing notifications": "Pokazuj powiadomienia o pisaniu", + "Match system theme": "Dopasuj do motywu systemego", + "They match": "Pasują do siebie", + "They don't match": "Nie pasują do siebie", + "Upload": "Prześlij", + "Remove recent messages": "Usuń ostatnie wiadomości", + "Rotate Left": "Obróć w lewo", + "Rotate counter-clockwise": "Obróć w kierunku przeciwnym do ruchu wskazówek zegara", + "Rotate Right": "Obróć w prawo", + "Rotate clockwise": "Obróć zgodnie z ruchem wskazówek zegara", + "Help": "Pomoc", + "Passwords don't match": "Hasła nie zgadzają się" } From 88f351d5ca8e113b38f1b126d4b7e2ad5d544e3a Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Tue, 3 Mar 2020 10:40:58 +0000 Subject: [PATCH 135/522] Keep sign in button disabled on success This changes password login to keep the sign in button locked when proceeding successfully to avoid the possibility of double device sign in. Part of https://github.com/vector-im/riot-web/issues/12546 --- src/components/structures/auth/Login.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/components/structures/auth/Login.js b/src/components/structures/auth/Login.js index 24e4726416..589accacc3 100644 --- a/src/components/structures/auth/Login.js +++ b/src/components/structures/auth/Login.js @@ -245,6 +245,7 @@ export default createReactClass({ } this.setState({ + busy: false, errorText: errorText, // 401 would be the sensible status code for 'incorrect password' // but the login API gives a 403 https://matrix.org/jira/browse/SYN-744 @@ -252,13 +253,6 @@ export default createReactClass({ // We treat both as an incorrect password loginIncorrect: error.httpStatus === 401 || error.httpStatus === 403, }); - }).finally(() => { - if (this._unmounted) { - return; - } - this.setState({ - busy: false, - }); }); }, From 0e65d54af298399bb1a2b70a0c1211e3648391b2 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 3 Mar 2020 11:03:40 +0000 Subject: [PATCH 136/522] Fix having to decrypt & download in two steps --- src/components/views/messages/MFileBody.js | 4 +++- src/usercontent/index.js | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/views/messages/MFileBody.js b/src/components/views/messages/MFileBody.js index 886afbb666..312346f412 100644 --- a/src/components/views/messages/MFileBody.js +++ b/src/components/views/messages/MFileBody.js @@ -247,6 +247,8 @@ export default createReactClass({ }); }; + // This button should actually Download because usercontent/ will try to click itself + // but it is not guaranteed between various browsers' settings. return (
@@ -290,7 +292,7 @@ export default createReactClass({ src={`${url}?origin=${encodeURIComponent(window.location.origin)}`} onLoad={onIframeLoad} ref={this._iframe} - sandbox="allow-scripts allow-downloads" /> + sandbox="allow-scripts allow-downloads allow-downloads-without-user-activation" />
); diff --git a/src/usercontent/index.js b/src/usercontent/index.js index 08769d6bd1..47eb83964f 100644 --- a/src/usercontent/index.js +++ b/src/usercontent/index.js @@ -27,6 +27,7 @@ function remoteRender(event) { // Don't display scrollbars if the link takes more than one line to display. body.style = "margin: 0px; overflow: hidden"; body.appendChild(a); + a.click(); // try to trigger download automatically } function remoteSetTint(event) { From 7430277e1312734ff4d27f9c400954ac3a950cd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Tue, 3 Mar 2020 11:20:43 +0000 Subject: [PATCH 137/522] Translated using Weblate (French) Currently translated at 100.0% (2140 of 2140 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index f9e575291e..d3fea73891 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2177,5 +2177,6 @@ "Create Account": "Créer un compte", "Order rooms by name": "Trier les salons par nom", "Show rooms with unread notifications first": "Afficher en premier les salons avec des notifications non lues", - "Show shortcuts to recently viewed rooms above the room list": "Afficher les raccourcis vers les salons vus récemment au-dessus de la liste des salons" + "Show shortcuts to recently viewed rooms above the room list": "Afficher les raccourcis vers les salons vus récemment au-dessus de la liste des salons", + "Displays information about a user": "Affiche des informations à propos de l’utilisateur" } From c0b68ccd53e7c718fd6197f85f885c1e182a421a Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 3 Mar 2020 13:23:33 +0000 Subject: [PATCH 138/522] only automatically download in usercontent if user requested it --- src/components/views/messages/MFileBody.js | 2 ++ src/usercontent/index.js | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/views/messages/MFileBody.js b/src/components/views/messages/MFileBody.js index 312346f412..125c538f82 100644 --- a/src/components/views/messages/MFileBody.js +++ b/src/components/views/messages/MFileBody.js @@ -271,6 +271,8 @@ export default createReactClass({ // We can't provide a Content-Disposition header like we would for HTTP. download: fileName, textContent: _t("Download %(text)s", { text: text }), + // only auto-download if a user triggered this iframe explicitly + auto: !this.props.decryptedBlob, }, "*"); }; diff --git a/src/usercontent/index.js b/src/usercontent/index.js index 47eb83964f..2e87e182af 100644 --- a/src/usercontent/index.js +++ b/src/usercontent/index.js @@ -27,7 +27,10 @@ function remoteRender(event) { // Don't display scrollbars if the link takes more than one line to display. body.style = "margin: 0px; overflow: hidden"; body.appendChild(a); - a.click(); // try to trigger download automatically + + if (event.data.auto) { + a.click(); // try to trigger download automatically + } } function remoteSetTint(event) { From 357ebb528918b346a085e8aeafe210620b326637 Mon Sep 17 00:00:00 2001 From: Szimszon Date: Tue, 3 Mar 2020 13:13:45 +0000 Subject: [PATCH 139/522] Translated using Weblate (Hungarian) Currently translated at 100.0% (2140 of 2140 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 672101059e..971fef5ab3 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2173,5 +2173,6 @@ "Show shortcuts to recently viewed rooms above the room list": "Billentyűkombináció megjelenítése a nemrég meglátogatott szobákhoz a szoba lista felett", "Sign In or Create Account": "Belépés vagy Fiók Készítés", "Use your account or create a new one to continue.": "A folytatáshoz használd a fiókodat vagy készíts egy újat.", - "Create Account": "Fiók létrehozása" + "Create Account": "Fiók létrehozása", + "Displays information about a user": "A felhasználóról információ megjelenítése" } From 59c4e36ba884b7b32cf6d1b0e170092df1abd91d Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Tue, 3 Mar 2020 14:40:21 +0000 Subject: [PATCH 140/522] Lock interactive auth as busy until state change This keeps interactive auth locked as busy until a state change so that e.g. accepting a terms step will remain "busy looking" until the next step of the process appears. Fixes https://github.com/vector-im/riot-web/issues/12546 --- src/components/structures/InteractiveAuth.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/components/structures/InteractiveAuth.js b/src/components/structures/InteractiveAuth.js index 3d63029b06..9521dd76ec 100644 --- a/src/components/structures/InteractiveAuth.js +++ b/src/components/structures/InteractiveAuth.js @@ -161,6 +161,7 @@ export default createReactClass({ _authStateUpdated: function(stageType, stageState) { const oldStage = this.state.authStage; this.setState({ + busy: false, authStage: stageType, stageState: stageState, errorText: stageState.error, @@ -184,10 +185,6 @@ export default createReactClass({ errorText: null, stageErrorText: null, }); - } else { - this.setState({ - busy: false, - }); } }, From f9d2d45b242c1035a68ec3961ca05eafdad39aa2 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 3 Mar 2020 15:42:22 +0100 Subject: [PATCH 141/522] use relative scrolling to compensate when changing height --- src/components/structures/ScrollPanel.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index 5121dd3f9d..72d5330451 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -705,17 +705,15 @@ export default createReactClass({ // the currently filled piece of the timeline if (trackedNode) { const oldTop = trackedNode.offsetTop; - // changing the height might change the scrollTop - // if the new height is smaller than the scrollTop. - // We calculate the diff that needs to be applied - // ourselves, so be sure to measure the - // scrollTop before changing the height. - const preexistingScrollTop = sn.scrollTop; itemlist.style.height = `${newHeight}px`; const newTop = trackedNode.offsetTop; const topDiff = newTop - oldTop; - sn.scrollTop = preexistingScrollTop + topDiff; - debuglog("updateHeight to", {newHeight, topDiff, preexistingScrollTop}); + // important to scroll by a relative amount as + // reading scrollTop and then setting it might + // yield out of date values and cause a jump + // when setting it + sn.scrollBy(0, topDiff); + debuglog("updateHeight to", {newHeight, topDiff}); } } }, From 223956a206f217e4d6ed5e2abfb1b0558b336414 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 3 Mar 2020 15:42:44 +0100 Subject: [PATCH 142/522] add comment how offset from bottom is calculated --- src/components/structures/ScrollPanel.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index 72d5330451..548dd70748 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -765,6 +765,7 @@ export default createReactClass({ }, _topFromBottom(node) { + // current capped height - distance from top = distance from bottom of container to top of tracked element return this._itemlist.current.clientHeight - node.offsetTop; }, From 3e39cebb8f18006a5e20a44a45f3e21aaf59b17c Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 3 Mar 2020 15:44:59 +0100 Subject: [PATCH 143/522] also use relative scrolling when eh ... doing relative scrolling --- src/components/structures/ScrollPanel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index 548dd70748..b81b3ebede 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -523,7 +523,7 @@ export default createReactClass({ scrollRelative: function(mult) { const scrollNode = this._getScrollNode(); const delta = mult * scrollNode.clientHeight * 0.5; - scrollNode.scrollTop = scrollNode.scrollTop + delta; + scrollNode.scrollBy(0, delta); this._saveScrollState(); }, From 5d6690f74bdcb4f543996e21c733c7c4d4db7905 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 3 Mar 2020 17:59:02 +0100 Subject: [PATCH 144/522] document scrollpanel and bacat scrolling --- docs/scrolling.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 docs/scrolling.md diff --git a/docs/scrolling.md b/docs/scrolling.md new file mode 100644 index 0000000000..71329e5c32 --- /dev/null +++ b/docs/scrolling.md @@ -0,0 +1,28 @@ +# ScrollPanel + +## Updates + +During an onscroll event, we check whether we're getting close to the top or bottom edge of the loaded content. If close enough, we fire a request to load more through the callback passed in the `onFillRequest` prop. This returns a promise is passed down from `TimelinePanel`, where it will call paginate on the `TimelineWindow` and once the events are received back, update its state with the new events. This update trickles down to the `MessagePanel`, which rerenders all tiles and passed that to `ScrollPanel`. ScrollPanels `componentDidUpdate` method gets called, and we do the scroll housekeeping there (read below). Once the rerender has completed, the `setState` callback is called and we resolve the promise returned by `onFillRequest`. Now we check the DOM to see if we need more fill requests. + +## Prevent Shrinking + +ScrollPanel supports a mode to prevent it shrinking. This is used to prevent a jump when at the bottom of the timeline and people start and stop typing. It gets cleared automatically when 200px above the bottom of the timeline. + + +## BACAT (Bottom-Aligned, Clipped-At-Top) scrolling + +BACAT scrolling implements a different way of restoring the scroll position in the timeline while tiles out of view are changing height or tiles are being added or removed. It was added in https://github.com/matrix-org/matrix-react-sdk/pull/2842. + +The motivation for the changes is having noticed that setting scrollTop while scrolling tends to not work well, with it interrupting ongoing scrolling and also querying scrollTop reporting outdated values and consecutive scroll adjustments cancelling each out previous ones. This seems to be worse on macOS than other platforms, presumably because of a higher resolution in scroll events there. Also see https://github.com/vector-im/riot-web/issues/528. The BACAT approach allows to only have to change the scroll offset when adding or removing tiles. + +The approach taken instead is to vertically align the timeline tiles to the bottom of the scroll container (using flexbox) and give the timeline inside the scroll container an explicit height, initially set to a multiple of the PAGE_SIZE (400px at time of writing) as needed by the content. When scrolled up, we can compensate for anything that grew below the viewport by changing the height of the timeline to maintain what's currently visible in the viewport without adjusting the scrollTop and hence without jumping. + +For anything above the viewport growing or shrinking, we don't need to do anything as the timeline is bottom-aligned. We do need to update the height manually to keep all content visible as more is loaded. To maintain scroll position after the portion above the viewport changes height, we need to set the scrollTop, as we cannot balance it out with more height changes. We do this 100ms after the user has stopped scrolling, so setting scrollTop has not nasty side-effects. + +As of https://github.com/matrix-org/matrix-react-sdk/pull/4166, we are scrolling to compensate for height changes by calling `scrollBy(0, x)` rather than reading and than setting `scrollTop`, as reading `scrollTop` can (again, especially on macOS) easily return values that are out of sync with what is on the screen, probably because scrolling can be done [off the main thread](https://wiki.mozilla.org/Platform/GFX/APZ) in some circumstances. This seems to further prevent jumps. + +### How does it work? + +`componentDidUpdate` is called when a tile in the timeline is updated (as we rerender the whole timeline) or tiles are added or removed (see Updates section before). From here, `checkScroll` is called, which calls `_restoreSavedScrollState`. Now, we increase the timeline height if something below the viewport grew by adjusting `this._bottomGrowth`. `bottomGrowth` is the height added to the timeline (on top of the height from the number of pages calculated at the last `_updateHeight` run) to compensate for growth below the viewport. This is cleared during the next run of `_updateHeight`. Remember that the tiles in the timeline are aligned to the bottom. + +From `_restoreSavedScrollState` we also call `_updateHeight` which waits until the user stops scrolling for 100ms and then recalculates the amount of pages of 400px the timeline should be sized to, to be able to show all of its (newly added) content. We have to adjust the scroll offset (which is why we wait until scrolling has stopped) now because the space above the viewport has likely changed. From 13b4ffb94a57affcfefa621e6a2b2ad4e40d8c6f Mon Sep 17 00:00:00 2001 From: Remi Reuvekamp <20200217translateriot@remi.im> Date: Tue, 3 Mar 2020 16:25:48 +0000 Subject: [PATCH 145/522] Translated using Weblate (Dutch) Currently translated at 87.9% (1881 of 2140 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nl/ --- src/i18n/strings/nl.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index fce04510d4..adb13f5e0f 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -1896,5 +1896,10 @@ "You should remove your personal data from identity server before disconnecting. Unfortunately, identity server is currently offline or cannot be reached.": "U moet uw persoonlijke informatie van de identiteitsserver verwijderen voordat u zich ontkoppelt. Helaas kan de identiteitsserver op dit moment niet worden bereikt. Mogelijk is hij offline.", "Your homeserver does not support cross-signing.": "Uw thuisserver biedt geen ondersteuning voor kruiselings ondertekenen.", "Homeserver feature support:": "Functies ondersteund door thuisserver:", - "exists": "bestaat" + "exists": "bestaat", + "Sign In or Create Account": "Aanmelden of Account Aanmaken", + "Use your account or create a new one to continue.": "Gebruik uw account of maak een nieuwe om door te gaan.", + "Create Account": "Account aanmaken", + "Displays information about a user": "Geef informatie weer over deze gebruiker", + "Order rooms by name": "Sorteer gesprekken op naam" } From 191dcaab82b41d5659dfa3ba74f74205fec37fc9 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Tue, 3 Mar 2020 17:41:28 +0000 Subject: [PATCH 146/522] Explain why not busy is ignored --- src/components/structures/InteractiveAuth.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/components/structures/InteractiveAuth.js b/src/components/structures/InteractiveAuth.js index 9521dd76ec..f4adb5751f 100644 --- a/src/components/structures/InteractiveAuth.js +++ b/src/components/structures/InteractiveAuth.js @@ -186,6 +186,12 @@ export default createReactClass({ stageErrorText: null, }); } + // The JS SDK eagerly reports itself as "not busy" right after any + // immediate work has completed, but that's not really what we want at + // the UI layer, so we ignore this signal and show a spinner until + // there's a new screen to show the user. This is implemented by setting + // `busy: false` in `_authStateUpdated`. + // See also https://github.com/vector-im/riot-web/issues/12546 }, _setFocus: function() { From 846170b3718a8748d57158b0b8842fc1a8b53493 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 3 Mar 2020 13:33:07 -0700 Subject: [PATCH 147/522] Revert "Fix downloading files in electron not being sent into browser" This reverts commit d89b8b51484c68c6fe0b1325b5d59ee809cc2196. --- src/components/views/elements/ImageView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/elements/ImageView.js b/src/components/views/elements/ImageView.js index f75b735043..e675e6b73f 100644 --- a/src/components/views/elements/ImageView.js +++ b/src/components/views/elements/ImageView.js @@ -216,7 +216,7 @@ export default class ImageView extends React.Component { { this.getName() } { eventMeta } - +
{ _t('Download this file') }
{ sizeRes } From 8234b4d656c9afce2c3211bddfbbd8ea9d6a3318 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 3 Mar 2020 23:11:29 -0700 Subject: [PATCH 148/522] Wire up 'create account' to the SSO button when SSO is used For https://github.com/vector-im/riot-web/issues/12362 --- src/components/structures/auth/Login.js | 31 ++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/components/structures/auth/Login.js b/src/components/structures/auth/Login.js index 24e4726416..0e3792baf5 100644 --- a/src/components/structures/auth/Login.js +++ b/src/components/structures/auth/Login.js @@ -120,8 +120,8 @@ export default createReactClass({ 'm.login.password': this._renderPasswordStep, // CAS and SSO are the same thing, modulo the url we link to - 'm.login.cas': () => this._renderSsoStep(this._loginLogic.getSsoLoginUrl("cas")), - 'm.login.sso': () => this._renderSsoStep(this._loginLogic.getSsoLoginUrl("sso")), + 'm.login.cas': () => this._renderSsoStep(this._getSsoUrl('m.login.cas')), + 'm.login.sso': () => this._renderSsoStep(this._getSsoUrl('m.login.sso')), }; this._initLoginLogic(); @@ -150,6 +150,18 @@ export default createReactClass({ return this.state.busy || this.props.busy; }, + _isSsoStep: function() { + return this._getCurrentFlowStep() === 'm.login.sso' || this._getCurrentFlowStep() === 'm.login.cas'; + }, + + _getSsoUrl: function(kind) { + if (kind === 'm.login.cas') { + return this._loginLogic.getSsoLoginUrl("cas") + } else { + return this._loginLogic.getSsoLoginUrl("sso"); + } + }, + onPasswordLogin: async function(username, phoneCountry, phoneNumber, password) { if (!this.state.serverIsAlive) { this.setState({busy: true}); @@ -344,6 +356,19 @@ export default createReactClass({ this.props.onRegisterClick(); }, + onTryRegisterClick: function(ev) { + if (this._isSsoStep()) { + // If we're showing SSO it means that registration is also probably disabled, + // so intercept the click and instead pretend the user clicked 'Sign in with SSO'. + ev.preventDefault(); + ev.stopPropagation(); + window.location = this._getSsoUrl(this._getCurrentFlowStep()); + } else { + // Don't intercept - just go through to the register page + this.onRegisterClick(ev); + } + }, + async onServerDetailsNextPhaseClick() { this.setState({ phase: PHASE_LOGIN, @@ -654,7 +679,7 @@ export default createReactClass({ { serverDeadSection } { this.renderServerComponent() } { this.renderLoginComponentForStep() } -
+ { _t('Create account') } From 04c54dc5a0444266707a1883ca5722734337be84 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 3 Mar 2020 23:19:36 -0700 Subject: [PATCH 149/522] Redirect registration requests to Login when the server supports SSO For https://github.com/vector-im/riot-web/issues/12362 --- .../structures/auth/Registration.js | 43 ++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/src/components/structures/auth/Registration.js b/src/components/structures/auth/Registration.js index 8593a4b1e2..7c6a3ea56f 100644 --- a/src/components/structures/auth/Registration.js +++ b/src/components/structures/auth/Registration.js @@ -31,6 +31,8 @@ import classNames from "classnames"; import * as Lifecycle from '../../../Lifecycle'; import {MatrixClientPeg} from "../../../MatrixClientPeg"; import AuthPage from "../../views/auth/AuthPage"; +import Login from "../../../Login"; +import dis from "../../../dispatcher"; // Phases // Show controls to configure server details @@ -232,6 +234,13 @@ export default createReactClass({ serverRequiresIdServer, busy: false, }); + const showGenericError = (e) => { + this.setState({ + errorText: _t("Unable to query for supported registration methods."), + // add empty flows array to get rid of spinner + flows: [], + }); + }; try { await this._makeRegisterRequest({}); // This should never succeed since we specified an empty @@ -243,18 +252,32 @@ export default createReactClass({ flows: e.data.flows, }); } else if (e.httpStatus === 403 && e.errcode === "M_UNKNOWN") { - this.setState({ - errorText: _t("Registration has been disabled on this homeserver."), - // add empty flows array to get rid of spinner - flows: [], - }); + // At this point registration is pretty much disabled, but before we do that let's + // quickly check to see if the server supports SSO instead. If it does, we'll send + // the user off to the login page to figure their account out. + try { + const loginLogic = new Login(hsUrl, isUrl, null, { + defaultDeviceDisplayName: "riot login check", // We shouldn't ever be used + }); + const flows = await loginLogic.getFlows(); + const hasSsoFlow = flows.find(f => f.type === 'm.login.sso' || f.type === 'm.login.cas'); + if (hasSsoFlow) { + // Redirect to login page - server probably expects SSO only + dis.dispatch({action: 'start_login'}); + } else { + this.setState({ + errorText: _t("Registration has been disabled on this homeserver."), + // add empty flows array to get rid of spinner + flows: [], + }); + } + } catch (e) { + console.error("Failed to get login flows to check for SSO support", e); + showGenericError(e); + } } else { console.log("Unable to query for supported registration methods.", e); - this.setState({ - errorText: _t("Unable to query for supported registration methods."), - // add empty flows array to get rid of spinner - flows: [], - }); + showGenericError(e); } } }, From a12786c1711d2e61671b2b5b1769fd5a35530307 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 3 Mar 2020 23:23:12 -0700 Subject: [PATCH 150/522] i18n --- src/i18n/strings/en_EN.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 79b045dd34..67a43ae14f 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2004,8 +2004,8 @@ "Failed to fetch avatar URL": "Failed to fetch avatar URL", "Set a display name:": "Set a display name:", "Upload an avatar:": "Upload an avatar:", - "Registration has been disabled on this homeserver.": "Registration has been disabled on this homeserver.", "Unable to query for supported registration methods.": "Unable to query for supported registration methods.", + "Registration has been disabled on this homeserver.": "Registration has been disabled on this homeserver.", "This server does not support authentication with a phone number.": "This server does not support authentication with a phone number.", "Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).": "Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).", "Continue with previous account": "Continue with previous account", From bcfe1fcac521378ecfaabd1273259eaca83f5f3b Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 3 Mar 2020 23:23:53 -0700 Subject: [PATCH 151/522] Wire up 'create account' to the SSO button when SSO is used For https://github.com/vector-im/riot-web/issues/12362 --- src/components/structures/auth/Login.js | 27 ++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/components/structures/auth/Login.js b/src/components/structures/auth/Login.js index b918334d79..873c9e0c35 100644 --- a/src/components/structures/auth/Login.js +++ b/src/components/structures/auth/Login.js @@ -151,6 +151,18 @@ export default createReactClass({ return this.state.busy || this.props.busy; }, + _isSsoStep: function() { + return this._getCurrentFlowStep() === 'm.login.sso' || this._getCurrentFlowStep() === 'm.login.cas'; + }, + + _getSsoUrl: function(kind) { + if (kind === 'm.login.cas') { + return this._loginLogic.getSsoLoginUrl("cas") + } else { + return this._loginLogic.getSsoLoginUrl("sso"); + } + }, + onPasswordLogin: async function(username, phoneCountry, phoneNumber, password) { if (!this.state.serverIsAlive) { this.setState({busy: true}); @@ -339,6 +351,19 @@ export default createReactClass({ this.props.onRegisterClick(); }, + onTryRegisterClick: function(ev) { + if (this._isSsoStep()) { + // If we're showing SSO it means that registration is also probably disabled, + // so intercept the click and instead pretend the user clicked 'Sign in with SSO'. + ev.preventDefault(); + ev.stopPropagation(); + window.location = this._getSsoUrl(this._getCurrentFlowStep()); + } else { + // Don't intercept - just go through to the register page + this.onRegisterClick(ev); + } + }, + async onServerDetailsNextPhaseClick() { this.setState({ phase: PHASE_LOGIN, @@ -652,7 +677,7 @@ export default createReactClass({ { serverDeadSection } { this.renderServerComponent() } { this.renderLoginComponentForStep() } - + { _t('Create account') } From e265c92b6e87a434a0633e7ca62624fd0faa5fb2 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 3 Mar 2020 23:19:36 -0700 Subject: [PATCH 152/522] Redirect registration requests to Login when the server supports SSO For https://github.com/vector-im/riot-web/issues/12362 --- .../structures/auth/Registration.js | 43 ++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/src/components/structures/auth/Registration.js b/src/components/structures/auth/Registration.js index 8593a4b1e2..7c6a3ea56f 100644 --- a/src/components/structures/auth/Registration.js +++ b/src/components/structures/auth/Registration.js @@ -31,6 +31,8 @@ import classNames from "classnames"; import * as Lifecycle from '../../../Lifecycle'; import {MatrixClientPeg} from "../../../MatrixClientPeg"; import AuthPage from "../../views/auth/AuthPage"; +import Login from "../../../Login"; +import dis from "../../../dispatcher"; // Phases // Show controls to configure server details @@ -232,6 +234,13 @@ export default createReactClass({ serverRequiresIdServer, busy: false, }); + const showGenericError = (e) => { + this.setState({ + errorText: _t("Unable to query for supported registration methods."), + // add empty flows array to get rid of spinner + flows: [], + }); + }; try { await this._makeRegisterRequest({}); // This should never succeed since we specified an empty @@ -243,18 +252,32 @@ export default createReactClass({ flows: e.data.flows, }); } else if (e.httpStatus === 403 && e.errcode === "M_UNKNOWN") { - this.setState({ - errorText: _t("Registration has been disabled on this homeserver."), - // add empty flows array to get rid of spinner - flows: [], - }); + // At this point registration is pretty much disabled, but before we do that let's + // quickly check to see if the server supports SSO instead. If it does, we'll send + // the user off to the login page to figure their account out. + try { + const loginLogic = new Login(hsUrl, isUrl, null, { + defaultDeviceDisplayName: "riot login check", // We shouldn't ever be used + }); + const flows = await loginLogic.getFlows(); + const hasSsoFlow = flows.find(f => f.type === 'm.login.sso' || f.type === 'm.login.cas'); + if (hasSsoFlow) { + // Redirect to login page - server probably expects SSO only + dis.dispatch({action: 'start_login'}); + } else { + this.setState({ + errorText: _t("Registration has been disabled on this homeserver."), + // add empty flows array to get rid of spinner + flows: [], + }); + } + } catch (e) { + console.error("Failed to get login flows to check for SSO support", e); + showGenericError(e); + } } else { console.log("Unable to query for supported registration methods.", e); - this.setState({ - errorText: _t("Unable to query for supported registration methods."), - // add empty flows array to get rid of spinner - flows: [], - }); + showGenericError(e); } } }, From e83a4ddbe5a0b23a5f0dbd10ff8ae72d2d18059c Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 3 Mar 2020 23:23:12 -0700 Subject: [PATCH 153/522] i18n --- src/i18n/strings/en_EN.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 4ec9c1e281..2b1d44bbcd 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2007,8 +2007,8 @@ "Failed to fetch avatar URL": "Failed to fetch avatar URL", "Set a display name:": "Set a display name:", "Upload an avatar:": "Upload an avatar:", - "Registration has been disabled on this homeserver.": "Registration has been disabled on this homeserver.", "Unable to query for supported registration methods.": "Unable to query for supported registration methods.", + "Registration has been disabled on this homeserver.": "Registration has been disabled on this homeserver.", "This server does not support authentication with a phone number.": "This server does not support authentication with a phone number.", "Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).": "Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).", "Continue with previous account": "Continue with previous account", From 3cff6d72394efe8c942841c49c0473459480f6bb Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 3 Mar 2020 23:26:20 -0700 Subject: [PATCH 154/522] Appease the linter --- src/components/structures/auth/Login.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/auth/Login.js b/src/components/structures/auth/Login.js index 873c9e0c35..cf80c99535 100644 --- a/src/components/structures/auth/Login.js +++ b/src/components/structures/auth/Login.js @@ -157,7 +157,7 @@ export default createReactClass({ _getSsoUrl: function(kind) { if (kind === 'm.login.cas') { - return this._loginLogic.getSsoLoginUrl("cas") + return this._loginLogic.getSsoLoginUrl("cas"); } else { return this._loginLogic.getSsoLoginUrl("sso"); } From 93c696f15e61ff75bceafaaf9cd841db45020961 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 3 Mar 2020 23:26:20 -0700 Subject: [PATCH 155/522] Appease the linter --- src/components/structures/auth/Login.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/auth/Login.js b/src/components/structures/auth/Login.js index 0e3792baf5..e04d311b62 100644 --- a/src/components/structures/auth/Login.js +++ b/src/components/structures/auth/Login.js @@ -156,7 +156,7 @@ export default createReactClass({ _getSsoUrl: function(kind) { if (kind === 'm.login.cas') { - return this._loginLogic.getSsoLoginUrl("cas") + return this._loginLogic.getSsoLoginUrl("cas"); } else { return this._loginLogic.getSsoLoginUrl("sso"); } From 91aa8d4a3afa1bb538b00891da8b4a2c9f35bb47 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 3 Mar 2020 15:42:22 +0100 Subject: [PATCH 156/522] use relative scrolling to compensate when changing height --- src/components/structures/ScrollPanel.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index 5121dd3f9d..72d5330451 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -705,17 +705,15 @@ export default createReactClass({ // the currently filled piece of the timeline if (trackedNode) { const oldTop = trackedNode.offsetTop; - // changing the height might change the scrollTop - // if the new height is smaller than the scrollTop. - // We calculate the diff that needs to be applied - // ourselves, so be sure to measure the - // scrollTop before changing the height. - const preexistingScrollTop = sn.scrollTop; itemlist.style.height = `${newHeight}px`; const newTop = trackedNode.offsetTop; const topDiff = newTop - oldTop; - sn.scrollTop = preexistingScrollTop + topDiff; - debuglog("updateHeight to", {newHeight, topDiff, preexistingScrollTop}); + // important to scroll by a relative amount as + // reading scrollTop and then setting it might + // yield out of date values and cause a jump + // when setting it + sn.scrollBy(0, topDiff); + debuglog("updateHeight to", {newHeight, topDiff}); } } }, From 462c3411b296cbde217247ac5914c76528e24163 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 3 Mar 2020 15:42:44 +0100 Subject: [PATCH 157/522] add comment how offset from bottom is calculated --- src/components/structures/ScrollPanel.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index 72d5330451..548dd70748 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -765,6 +765,7 @@ export default createReactClass({ }, _topFromBottom(node) { + // current capped height - distance from top = distance from bottom of container to top of tracked element return this._itemlist.current.clientHeight - node.offsetTop; }, From 070b43070205914430267e87aeab91aaf702d6db Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 3 Mar 2020 15:44:59 +0100 Subject: [PATCH 158/522] also use relative scrolling when eh ... doing relative scrolling --- src/components/structures/ScrollPanel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index 548dd70748..b81b3ebede 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -523,7 +523,7 @@ export default createReactClass({ scrollRelative: function(mult) { const scrollNode = this._getScrollNode(); const delta = mult * scrollNode.clientHeight * 0.5; - scrollNode.scrollTop = scrollNode.scrollTop + delta; + scrollNode.scrollBy(0, delta); this._saveScrollState(); }, From fa79bc93cee5fea5a0cbe2a58b3c64c0c762d1fd Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Mon, 2 Mar 2020 17:48:38 +0000 Subject: [PATCH 159/522] Use bash for release script This fixes this repo to use bash for this script, matching the other repos. --- release.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release.sh b/release.sh index 3c28084bb7..1b99e870ac 100755 --- a/release.sh +++ b/release.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # Script to perform a release of matrix-react-sdk. # From cdcf042f6b5ebb5c28614c0d8cf102b1fe0bf5bf Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 4 Mar 2020 11:30:35 +0000 Subject: [PATCH 160/522] Prepare changelog for v2.2.1 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88d1895691..8d436ca690 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +Changes in [2.2.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.2.1) (2020-03-04) +=================================================================================================== +[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.2.0...v2.2.1) + + * Adjust scroll offset with relative scrolling + [\#4171](https://github.com/matrix-org/matrix-react-sdk/pull/4171) + * Disable registration flows on SSO servers + [\#4169](https://github.com/matrix-org/matrix-react-sdk/pull/4169) + Changes in [2.2.0](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.2.0) (2020-03-02) =================================================================================================== [Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.2.0-rc.1...v2.2.0) From ce879b95cfe27dc9282fc202ffb5eab091550d22 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 4 Mar 2020 11:30:35 +0000 Subject: [PATCH 161/522] v2.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f5bd9ec19f..a450cb60f0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-react-sdk", - "version": "2.2.0", + "version": "2.2.1", "description": "SDK for matrix.org using React", "author": "matrix.org", "repository": { From 141989a51f94300b7a0702be18827e1aa4b7b3c5 Mon Sep 17 00:00:00 2001 From: Nathan Follens Date: Tue, 3 Mar 2020 23:18:29 +0000 Subject: [PATCH 162/522] Translated using Weblate (Dutch) Currently translated at 100.0% (2140 of 2140 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nl/ --- src/i18n/strings/nl.json | 267 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 263 insertions(+), 4 deletions(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index adb13f5e0f..3f85b7478f 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -1897,9 +1897,268 @@ "Your homeserver does not support cross-signing.": "Uw thuisserver biedt geen ondersteuning voor kruiselings ondertekenen.", "Homeserver feature support:": "Functies ondersteund door thuisserver:", "exists": "bestaat", - "Sign In or Create Account": "Aanmelden of Account Aanmaken", - "Use your account or create a new one to continue.": "Gebruik uw account of maak een nieuwe om door te gaan.", + "Sign In or Create Account": "Meld u aan of maak een account aan", + "Use your account or create a new one to continue.": "Gebruik uw bestaande account of maak er een nieuwe aan om verder te gaan.", "Create Account": "Account aanmaken", - "Displays information about a user": "Geef informatie weer over deze gebruiker", - "Order rooms by name": "Sorteer gesprekken op naam" + "Displays information about a user": "Geeft informatie weer over een gebruiker", + "Order rooms by name": "Gesprekken sorteren op naam", + "Show rooms with unread notifications first": "Gesprekken met ongelezen meldingen eerst tonen", + "Show shortcuts to recently viewed rooms above the room list": "Snelkoppelingen naar de gesprekken die u recent heeft bekeken bovenaan de gesprekslijst weergeven", + "Cancelling…": "Bezig met annuleren…", + "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riot beschikt niet over alle onderdelen die nodig zijn om versleutelde berichten veilig in het lokale cachegeheugen te bewaren. Als u deze functie wilt uittesten, kunt u een aangepaste versie van Riot Desktop compileren, waarbij de zoekonderdelen toegevoegd zijn.", + "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot kan versleutelde berichten niet veilig bewaren in het lokale cachegeheugen wanneer het uitgevoerd wordt in een webbrowser. Gebruik Riot Desktop om versleutelde berichten in de zoekresultaten te laten verschijnen.", + "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Deze sessie maakt geen back-ups van uw sleutels, maar u beschikt over een reeds bestaande back-up waaruit u kunt herstellen en waaraan u nieuwe sleutels vanaf nu kunt toevoegen.", + "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Er is een back-upsleutel opgeslagen in de geheime opslag, maar deze functie is niet ingeschakeld voor deze sessie. Schakel kruiselings ondertekenen in in de experimentele instellingen om de sleutelback-upstatus te wijzigen.", + "Customise your experience with experimental labs features. Learn more.": "Personaliseer uw ervaring met experimentele functies. Klik hier voor meer informatie.", + "Cross-signing": "Kruiselings ondertekenen", + "Your key share request has been sent - please check your other sessions for key share requests.": "Uw sleuteldeelverzoek is verstuurd - controleer de sleuteldeelverzoeken op uw andere sessies.", + "Key share requests are sent to your other sessions automatically. If you rejected or dismissed the key share request on your other sessions, click here to request the keys for this session again.": "Sleuteldeelverzoeken worden automatisch naar andere sessies verstuurd. Als u op uw andere sessies het sleuteldeelverzoek geweigerd of genegeerd hebt, kunt u hier klikken op de sleutels voor deze sessie opnieuw aan te vragen.", + "If your other sessions do not have the key for this message you will not be able to decrypt them.": "Als uw andere sessies geen sleutel voor dit bericht hebben, zult u het niet kunnen ontsleutelen.", + "Re-request encryption keys from your other sessions.": "Versleutelingssleutels opnieuw aanvragen van uw andere sessies.", + "This message cannot be decrypted": "Dit bericht kan niet ontsleuteld worden", + "Encrypted by an unverified session": "Versleuteld door een niet-geverifieerde sessie", + "Unencrypted": "Onversleuteld", + "Encrypted by a deleted session": "Versleuteld door een verwijderde sessie", + "Invite only": "Enkel op uitnodiging", + "Close preview": "Voorbeeld sluiten", + "Failed to deactivate user": "Deactiveren van gebruiker is mislukt", + "No sessions with registered encryption keys": "Geen sessies met geregistreerde versleutelingssleutels", + "Send a reply…": "Verstuur een antwoord…", + "Send a message…": "Verstuur een bericht…", + "Room %(name)s": "Gesprek %(name)s", + " wants to chat": " wil een gesprek met u beginnen", + "Start chatting": "Gesprek beginnen", + "Reject & Ignore user": "Weigeren en gebruiker negeren", + "%(count)s unread messages including mentions.|one": "1 ongelezen vermelding.", + "%(count)s unread messages.|one": "1 ongelezen bericht.", + "Unread messages.": "Ongelezen berichten.", + "Unknown Command": "Onbekende opdracht", + "Unrecognised command: %(commandText)s": "Onbekende opdracht: %(commandText)s", + "Hint: Begin your message with // to start it with a slash.": "Tip: begin uw bericht met // om het te laten voorafgaan door een schuine streep.", + "Send as message": "Versturen als bericht", + "Failed to connect to integration manager": "Verbinding met integratiebeheerder is mislukt", + "Waiting for %(displayName)s to accept…": "Wachten tot %(displayName)s aanvaardt…", + "Accepting…": "Aanvaarden…", + "Start Verification": "Verificatie beginnen", + "Messages in this room are end-to-end encrypted.": "De berichten in dit gesprek worden eind-tot-eind-versleuteld.", + "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Uw berichten zijn beveiligd, en enkel de ontvanger en u hebben de unieke sleutels om ze te ontsleutelen.", + "Verify User": "Gebruiker verifiëren", + "For extra security, verify this user by checking a one-time code on both of your devices.": "Als extra beveiliging kunt u deze gebruiker verifiëren door een eenmalige code op uw toestellen te controleren.", + "Your messages are not secure": "Uw berichten zijn niet veilig", + "One of the following may be compromised:": "Eén van volgende onderdelen kan gecompromitteerd zijn:", + "Your homeserver": "Uw thuisserver", + "The homeserver the user you’re verifying is connected to": "De thuisserver waarmee de gebruiker die u tracht te verifiëren verbonden is", + "Yours, or the other users’ internet connection": "De internetverbinding van uzelf of de andere gebruiker", + "Yours, or the other users’ session": "De sessie van uzelf of de andere gebruiker", + "Not Trusted": "Niet vertrouwd", + "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s%(userId)s heeft zich aangemeld bij een nieuwe sessie zonder deze te verifiëren:", + "Ask this user to verify their session, or manually verify it below.": "Vraag deze gebruiker om zijn/haar sessie te verifiëren, of verifieer deze hieronder handmatig.", + "Done": "Klaar", + "Manually Verify": "Handmatig verifiëren", + "Trusted": "Vertrouwd", + "Not trusted": "Niet vertrouwd", + "%(count)s verified sessions|other": "%(count)s geverifieerde sessies", + "%(count)s verified sessions|one": "1 geverifieerde sessie", + "Hide verified sessions": "Geverifieerde sessies verbergen", + "%(count)s sessions|other": "%(count)s sessies", + "%(count)s sessions|one": "%(count)s sessie", + "Hide sessions": "Sessies verbergen", + "Direct message": "Tweegesprek", + "%(role)s in %(roomName)s": "%(role)s in %(roomName)s", + "This client does not support end-to-end encryption.": "Deze cliënt biedt geen ondersteuning voor eind-tot-eind-versleuteling.", + "Messages in this room are not end-to-end encrypted.": "De berichten in dit gesprek worden niet eind-tot-eind-versleuteld.", + "Security": "Beveiliging", + "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "De sessie die u probeert te verifiëren biedt geen ondersteuning voor de door Riot ondersteunde verificatiemethodes, nl. het scannen van QR-codes of het vergelijken van emoji. Probeer met een andere cliënt te verifiëren.", + "Verify by scanning": "Verifiëren met scan", + "Ask %(displayName)s to scan your code:": "Vraag %(displayName)s om uw code te scannen:", + "Verify by emoji": "Verifiëren met emoji", + "If you can't scan the code above, verify by comparing unique emoji.": "Als u bovenstaande code niet kunt scannen, verifieer dan door unieke emoji te vergelijken.", + "Verify by comparing unique emoji.": "Verifieer door unieke emoji te vergelijken.", + "You've successfully verified %(displayName)s!": "U heeft %(displayName)s geverifieerd!", + "Got it": "Ik snap het", + "Verification timed out. Start verification again from their profile.": "De verificatie is verlopen. Begin het verificatieproces opnieuw via het profiel van de gebruiker.", + "%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s heeft de verificatie geannuleerd. Begin het verificatieproces opnieuw via het profiel van de gebruiker.", + "You cancelled verification. Start verification again from their profile.": "U heeft de verificatie geannuleerd. Begin het verificatieproces opnieuw via het profiel van de gebruiker.", + "Encryption enabled": "Versleuteling ingeschakeld", + "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "De berichten in dit gesprek worden eind-tot-eind-versleuteld. Kom hier meer over te weten en verifieer de gebruiker via zijn/haar gebruikersprofiel.", + "Encryption not enabled": "Versleuteling niet ingeschakeld", + "The encryption used by this room isn't supported.": "De versleuteling gebruikt in dit gesprek wordt niet ondersteund.", + "React": "Reageren", + "Message Actions": "Berichtacties", + "You have ignored this user, so their message is hidden. Show anyways.": "U heeft deze gebruiker genegeerd, dus zijn/haar berichten worden verborgen. Toch tonen?", + "You verified %(name)s": "U heeft %(name)s geverifieerd", + "You cancelled verifying %(name)s": "U heeft de verificatie van %(name)s geannuleerd", + "%(name)s cancelled verifying": "%(name)s heeft de verificatie geannuleerd", + "You accepted": "U heeft aanvaard", + "%(name)s accepted": "%(name)s heeft aanvaard", + "You declined": "U heeft geweigerd", + "You cancelled": "U heeft geannuleerd", + "%(name)s declined": "%(name)s heeft geweigerd", + "%(name)s cancelled": "%(name)s heeft geannuleerd", + "Accepting …": "Aanvaarden…", + "Declining …": "Weigeren…", + "%(name)s wants to verify": "%(name)s wil verifiëren", + "You sent a verification request": "U heeft een verificatieverzoek verstuurd", + "Reactions": "Reacties", + " reacted with %(content)s": " heeft gereageerd met %(content)s", + "Frequently Used": "Vaak gebruikt", + "Smileys & People": "Smileys en personen", + "Animals & Nature": "Dieren en natuur", + "Food & Drink": "Eten en drinken", + "Activities": "Activiteiten", + "Travel & Places": "Reizen en plaatsen", + "Objects": "Objecten", + "Symbols": "Symbolen", + "Flags": "Vlaggen", + "Quick Reactions": "Snelle reacties", + "Cancel search": "Zoeken annuleren", + "Any of the following data may be shared:": "De volgende gegevens worden mogelijk gedeeld:", + "Your display name": "Uw weergavenaam", + "Your avatar URL": "De URL van uw profielfoto", + "Your user ID": "Uw gebruikers-ID", + "Your theme": "Uw thema", + "Riot URL": "Riot-URL", + "Room ID": "Gespreks-ID", + "Widget ID": "Widget-ID", + "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Deze widget gebruiken deelt mogelijk gegevens met %(widgetDomain)s en uw integratiebeheerder.", + "Using this widget may share data with %(widgetDomain)s.": "Deze widget gebruiken deelt mogelijk gegevens met %(widgetDomain)s.", + "Widgets do not use message encryption.": "Widgets gebruiken geen berichtversleuteling.", + "Widget added by": "Widget toegevoegd door", + "This widget may use cookies.": "Deze widget kan cookies gebruiken.", + "More options": "Meer opties", + "Language Dropdown": "Taalselectie", + "Destroy cross-signing keys?": "Sleutels voor kruiselings ondertekenen verwijderen?", + "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Het verwijderen van sleutels voor kruiselings ondertekenen kan niet ongedaan gemaakt worden. Iedereen waarmee u geverifieerd heeft zal beveiligingswaarschuwingen te zien krijgen. U wilt dit hoogstwaarschijnlijk niet doen, tenzij u alle apparaten heeft verloren waarmee u kruiselings kon ondertekenen.", + "Clear cross-signing keys": "Sleutels voor kruiselings ondertekenen wissen", + "Clear all data in this session?": "Alle gegevens in deze sessie verwijderen?", + "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Het verwijderen van alle gegevens in deze sessie kan niet ongedaan gemaakt worden. Versleutelde berichten zullen verloren gaan, tenzij u een back-up van hun sleutels heeft.", + "Verify session": "Sessie verifiëren", + "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Controleer of de sleutel in de gebruikersinstellingen op het apparaat overeenkomt met onderstaande sleutel om te verifiëren dat de sessie vertrouwd kan worden:", + "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Neem contact op met de eigenaar op een andere manier (bv. onder vier ogen of met een telefoongesprek) en vraag of de sleutel in zijn/haar gebruikersinstellingen overeenkomt met onderstaande sleutel om te verifiëren dat de sessie vertrouwd kan worden:", + "Session name": "Sessienaam", + "Session key": "Sessiesleutel", + "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Als hij overeenkomt, klik dan op de knop ‘Verifiëren’. Zo niet is het mogelijk dat iemand deze sessie onderschept, en wilt u waarschijnlijk op de knop ‘Blokkeren’ klikken.", + "Verification Requests": "Verificatieverzoeken", + "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Deze gebruiker verifiëren zal de sessie als vertrouwd markeren voor u en voor hem/haar.", + "Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.": "Verifieer dit apparaat om het als vertrouwd te markeren. Door dit apparaat te vertrouwen geeft u extra gemoedsrust aan uzelf en andere gebruikers bij het gebruik van eind-tot-eind-versleutelde berichten.", + "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Dit apparaat verifiëren zal het als vertrouwd markeren, en gebruikers die met u geverifieerd hebben zullen het vertrouwen.", + "Integrations are disabled": "Integraties zijn uitgeschakeld", + "Enable 'Manage Integrations' in Settings to do this.": "Schakel ‘Beheer integraties’ in in de instellingen om dit te doen.", + "Integrations not allowed": "Integraties niet toegestaan", + "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Uw Riot laat u geen integratiebeheerder gebruiken om dit te doen. Neem contact op met een beheerder.", + "Failed to invite the following users to chat: %(csvUsers)s": "Het uitnodigen van volgende gebruikers voor gesprek is mislukt: %(csvUsers)s", + "We couldn't create your DM. Please check the users you want to invite and try again.": "Uw tweegesprek kon niet aangemaakt worden. Controleer de gebruikers die u wilt uitnodigen en probeer het opnieuw.", + "Something went wrong trying to invite the users.": "Er is een fout opgetreden bij het uitnodigen van de gebruikers.", + "We couldn't invite those users. Please check the users you want to invite and try again.": "Deze gebruikers konden niet uitgenodigd worden. Controleer de gebruikers die u wilt uitnodigen en probeer het opnieuw.", + "Failed to find the following users": "Kon volgende gebruikers niet vinden", + "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Volgende gebruikers bestaan mogelijk niet of zijn ongeldig, en kunnen dan ook niet uitgenodigd worden: %(csvNames)s", + "Recent Conversations": "Recente gesprekken", + "Suggestions": "Suggesties", + "Recently Direct Messaged": "Recente tweegesprekken", + "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Als u iemand niet kunt vinden, vraag dan zijn/haar gebruikersnaam, deel uw eigen gebruikersnaam (%(userId)s) of profielkoppeling.", + "Go": "Start", + "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Als u iemand niet kunt vinden, vraag dan zijn/haar gebruikersnaam (bv. @user:server.com) of deel dit gesprek.", + "You added a new session '%(displayName)s', which is requesting encryption keys.": "U heeft een nieuwe sessie ‘%(displayName)s’ toegevoegd, die om versleutelingssleutels vraagt.", + "Your unverified session '%(displayName)s' is requesting encryption keys.": "Uw ongeverifieerde sessie ‘%(displayName)s’ vraagt om versleutelingssleutels.", + "Loading session info...": "Sessie-info wordt geladen…", + "Your account is not secure": "Uw account is niet veilig", + "Your password": "Uw wachtwoord", + "This session, or the other session": "Deze sessie, of de andere sessie", + "The internet connection either session is using": "De internetverbinding gebruikt door een van de sessies", + "We recommend you change your password and recovery key in Settings immediately": "We raden u aan onmiddellijk uw wachtwoord en herstelsleutel te wijzigen in de instellingen", + "New session": "Nieuwe sessie", + "Use this session to verify your new one, granting it access to encrypted messages:": "Gebruik deze sessie om uw nieuwe sessie te verifiëren, waardoor deze laatste toegang verkrijgt tot versleutelde berichten:", + "If you didn’t sign in to this session, your account may be compromised.": "Als u zich niet heeft aangemeld bij deze sessie, is uw account mogelijk gecompromitteerd.", + "This wasn't me": "Dat was ik niet", + "Automatically invite users": "Gebruikers automatisch uitnodigen", + "Upgrade private room": "Privégesprek bijwerken", + "Upgrade public room": "Openbaar gesprek bijwerken", + "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Het bijwerken van een gesprek is een gevorderde actie en wordt meestal aanbevolen wanneer een gesprek onstabiel is door fouten, ontbrekende functies of problemen met de beveiliging.", + "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Dit heeft meestal enkel een invloed op de manier waarop het gesprek door de server verwerkt wordt. Als u problemen met uw Riot ondervindt, dien dan een foutmelding in.", + "You'll upgrade this room from to .": "U werkt dit gesprek bij van naar .", + "This will allow you to return to your account after signing out, and sign in on other sessions.": "Dit biedt u de mogelijkheid om terug te keren naar uw account nadat u zich heeft afgemeld, en om u aan te melden bij andere sessies.", + "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "U blokkeert momenteel niet-geverifieerde sessies; om berichten te sturen naar deze sessies moet u ze verifiëren.", + "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "We raden u aan om het verificatieproces voor elke sessie te doorlopen om te bevestigen dat ze aan hun rechtmatige eigenaar toebehoren, maar u kunt het bericht ook opnieuw versturen zonder verificatie indien u dit wenst.", + "Room contains unknown sessions": "Gesprek bevat onbekende sessies", + "\"%(RoomName)s\" contains sessions that you haven't seen before.": "‘%(RoomName)s’ bevat sessies die u nog niet eerder gezien heeft.", + "Unknown sessions": "Onbekende sessies", + "Verification Request": "Verificatieverzoek", + "Enter secret storage passphrase": "Voer het wachtwoord voor de geheime opslag in", + "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Kan geen toegang verkrijgen tot geheime opslag. Controleer of u het juiste wachtwoord heeft ingevoerd.", + "Warning: You should only access secret storage from a trusted computer.": "Let op: open de geheime opslag enkel op een computer die u vertrouwt.", + "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Verkrijg de toegang tot uw beveiligde berichtgeschiedenis en uw identiteit voor kruiselings ondertekenen voor het verifiëren van andere sessies door uw wachtwoord in te voeren.", + "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Als u uw wachtwoord vergeten bent, kunt u uw herstelsleutel gebruiken of nieuwe herstelopties instellen.", + "Enter secret storage recovery key": "Voer de herstelsleutel voor de geheime opslag in", + "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Kan geen toegang verkrijgen tot geheime opslag. Controleer of u de juiste herstelsleutel heeft ingevoerd.", + "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Verkrijg de toegang tot uw beveiligde berichtgeschiedenis en uw identiteit voor kruiselings ondertekenen voor het verifiëren van andere sessies door uw herstelsleutel in te voeren.", + "If you've forgotten your recovery key you can .": "Als u uw herstelsleutel vergeten bent, kunt u .", + "Recovery key mismatch": "Herstelsleutel komt niet overeen", + "Incorrect recovery passphrase": "Onjuist herstelwachtwoord", + "Backup restored": "Back-up teruggezet", + "Enter recovery passphrase": "Voer het herstelwachtwoord in", + "Enter recovery key": "Voer de herstelsleutel in", + "Warning: You should only set up key backup from a trusted computer.": "Let op: stel sleutelback-up enkel in op een vertrouwde computer.", + "If you've forgotten your recovery key you can ": "Als u uw herstelsleutel vergeten bent, kunt u ", + "Notification settings": "Meldingsinstellingen", + "Reload": "Herladen", + "Take picture": "Neem een foto", + "Remove for everyone": "Verwijderen voor iedereen", + "Remove for me": "Verwijderen voor mezelf", + "User Status": "Gebruikersstatus", + "Country Dropdown": "Landselectie", + "Confirm your identity by entering your account password below.": "Bevestig uw identiteit door hieronder uw accountwachtwoord in te voeren.", + "No identity server is configured so you cannot add an email address in order to reset your password in the future.": "Er is geen identiteitsserver geconfigureerd, dus u kunt geen e-mailadres toevoegen om in de toekomst een nieuw wachtwoord in te stellen.", + "Message not sent due to unknown sessions being present": "Bericht niet verstuurd, er zijn onbekende sessies aanwezig", + "Show sessions, send anyway or cancel.": "Sessies tonen, toch versturen of annuleren.", + "Jump to first unread room.": "Ga naar het eerste ongelezen gesprek.", + "Jump to first invite.": "Ga naar de eerste uitnodiging.", + " (1/%(totalCount)s)": " (1/%(totalCount)s)", + "Complete security": "Vervolledig de beveiliging", + "Verify this session to grant it access to encrypted messages.": "Verifieer deze sessie om toegang te verkrijgen tot uw versleutelde berichten.", + "Session verified": "Sessie geverifieerd", + "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Uw nieuwe sessie is nu geverifieerd. Ze heeft nu toegang tot uw versleutelde berichten, en de sessie zal voor andere gebruikers als vertrouwd gemarkeerd worden.", + "Your new session is now verified. Other users will see it as trusted.": "Uw nieuwe sessie is nu geverifieerd. Ze zal voor andere gebruikers als vertrouwd gemarkeerd worden.", + "Without completing security on this session, it won’t have access to encrypted messages.": "Als u de beveiliging van deze sessie niet vervolledigt, zal ze geen toegang hebben tot uw versleutelde berichten.", + "Go Back": "Terugkeren", + "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Door uw wachtwoord te wijzigen stelt u alle eind-tot-eind-versleutelingssleutels op al uw sessies opnieuw in, waardoor uw versleutelde gespreksgeschiedenis onleesbaar wordt. Stel sleutelback-up in of schrijf uw gesprekssleutels van een andere sessie weg vooraleer u een nieuw wachtwoord instelt.", + "You have been logged out of all sessions and will no longer receive push notifications. To re-enable notifications, sign in again on each device.": "U bent afgemeld bij al uw sessies en zult geen pushberichten meer ontvangen. Meld u op elk apparaat opnieuw aan om meldingen opnieuw in te schakelen.", + "Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Verkrijg opnieuw de toegang tot uw account en herstel de versleutelingssleutels die in deze sessie opgeslagen zijn. Hierzonder zult u niet al uw beveiligde berichten in al uw sessies kunnen lezen.", + "Warning: Your personal data (including encryption keys) is still stored in this session. Clear it if you're finished using this session, or want to sign in to another account.": "Let op: uw persoonlijke gegevens (versleutelingssleutels inbegrepen) worden nog steeds opgeslagen in deze sessie. Wis ze wanneer u klaar bent met deze sessie, of wanneer u zich wilt aanmelden met een andere account.", + "Command Autocomplete": "Opdrachten automatisch aanvullen", + "DuckDuckGo Results": "DuckDuckGo-resultaten", + "Sender session information": "Sessie-informatie van afzender", + "Enter your account password to confirm the upgrade:": "Voer uw accountwachtwoord in om het bijwerken te bevestigen:", + "Restore your key backup to upgrade your encryption": "Herstel uw sleutelback-up om uw versleuteling bij te werken", + "Restore": "Herstellen", + "You'll need to authenticate with the server to confirm the upgrade.": "U zult zich moeten aanmelden bij de server om het bijwerken te bevestigen.", + "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Werk deze sessie bij om er andere sessies mee te verifiëren, waardoor deze ook de toegang verkrijgen tot uw versleutelde berichten en voor andere gebruikers als vertrouwd gemarkeerd worden.", + "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Stel versleuteling in voor deze sessie om er andere sessies mee te verifiëren, waardoor deze ook de toegang verkrijgen tot uw versleutelde berichten en voor andere gebruikers als vertrouwd gemarkeerd worden.", + "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Beveilig uw versleutelingssleutels met een wachtwoord. Voor een optimale beveiliging moet dit verschillen van uw accountwachtwoord:", + "Enter a passphrase": "Voer een wachtwoord in", + "Back up my encryption keys, securing them with the same passphrase": "Maak een back-up van mijn versleutelingssleutels, en beveilig ze met hetzelfde wachtwoord", + "Set up with a recovery key": "Instellen met een herstelsleutel", + "Enter your passphrase a second time to confirm it.": "Voer uw wachtwoord nogmaals in ter bevestiging.", + "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Bewaar een kopie op een veilige plaats, zoals in een wachtwoordbeheerder of een kluis.", + "Your recovery key": "Uw herstelsleutel", + "Copy": "Kopiëren", + "Your recovery key has been copied to your clipboard, paste it to:": "Uw herstelsleutel is gekopieerd naar uw klembord, plak hem en:", + "Your recovery key is in your Downloads folder.": "Uw herstelsleutel bevindt zich in uw Downloads-map.", + "You can now verify your other devices, and other users to keep your chats safe.": "U kunt nu uw andere apparaten evenals andere gebruikers verifiëren om uw gesprekken te beveiligen.", + "Upgrade your encryption": "Werk uw versleuteling bij", + "Make a copy of your recovery key": "Maak een kopie van uw herstelsleutel", + "You're done!": "Klaar!", + "Unable to set up secret storage": "Kan geheime opslag niet instellen", + "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another session.": "Zonder veilig berichtherstel in te stellen zult u uw versleutelde berichtgeschiedenis niet kunnen herstellen als u zich afmeldt of een andere sessie gebruikt.", + "Create key backup": "Sleutelback-up aanmaken", + "This session is encrypting history using the new recovery method.": "Deze sessie versleutelt uw geschiedenis aan de hand van de nieuwe herstelmethode.", + "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Deze sessie heeft gedetecteerd dat uw herstelwachtwoord en -sleutel voor beveiligde berichten verwijderd zijn.", + "If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "Als u dit per ongeluk heeft gedaan, kunt u beveiligde berichten op deze sessie instellen, waarmee de berichtgeschiedenis van deze sessie opnieuw zal versleuteld worden aan de hand van een nieuwe herstelmethode.", + "Disable": "Uitschakelen", + "Not currently downloading messages for any room.": "Er worden momenteel geen berichten gedownload.", + "Downloading mesages for %(currentRoom)s.": "Er worden berichten gedownload voor %(currentRoom)s.", + "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot bewaart versleutelde berichten veilig in het lokale cachegeheugen om ze in uw zoekresultaten te laten verschijnen:", + "Space used:": "Gebruikte ruimte:", + "Indexed messages:": "Geïndexeerde berichten:", + "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s van %(totalRooms)s", + "Message downloading sleep time(ms)": "Wachttijd voor downloaden van berichten (ms)" } From b7d9f24625621f8e232371ae2b1990f59aa6c586 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 4 Mar 2020 11:53:01 +0000 Subject: [PATCH 163/522] Log packages when checking version --- release.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/release.sh b/release.sh index 1b99e870ac..23b8822041 100755 --- a/release.sh +++ b/release.sh @@ -11,6 +11,7 @@ cd `dirname $0` for i in matrix-js-sdk do + echo "Checking version of $i..." depver=`cat package.json | jq -r .dependencies[\"$i\"]` latestver=`yarn info -s $i dist-tags.next` if [ "$depver" != "$latestver" ] From 845656064e802054b3857c2a240aaaf88f94f740 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 4 Mar 2020 11:58:00 +0000 Subject: [PATCH 164/522] Reset matrix-js-sdk back to develop branch --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 87aeccd140..20580f26f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5655,7 +5655,7 @@ mathml-tag-names@^2.0.1: "matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": version "5.1.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/da96765020b632deb5b433077827a4f4a64e16e9" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/bc53f8fdec7222b6ca44a63cafbc7ae8c4cc396f" dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" From 7ad8eeb906ee53184d5c9b1a96642a09d47a2ba3 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Wed, 4 Mar 2020 14:35:01 +0000 Subject: [PATCH 165/522] Fix composer touch bar flickering on keypress in Chrome This changes our selection state handling to leave things alone if the browser's state already matches what we want. This avoids strange side effects like the touch bar flickering on each key press in Chrome. Fixes https://github.com/vector-im/riot-web/issues/9299 --- src/editor/caret.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/editor/caret.js b/src/editor/caret.js index ed4f1b2a2e..8c0090a6f1 100644 --- a/src/editor/caret.js +++ b/src/editor/caret.js @@ -38,12 +38,27 @@ function setDocumentRangeSelection(editor, model, range) { } export function setCaretPosition(editor, model, caretPosition) { - const sel = document.getSelection(); - sel.removeAllRanges(); const range = document.createRange(); const {node, offset} = getNodeAndOffsetForPosition(editor, model, caretPosition); range.setStart(node, offset); range.collapse(true); + + const sel = document.getSelection(); + if (sel.rangeCount === 1) { + const existingRange = sel.getRangeAt(0); + if ( + existingRange.startContainer === range.startContainer && + existingRange.startOffset === range.startOffset && + existingRange.collapsed === range.collapsed + ) { + // If the selection matches, it's important to leave it alone. + // Recreating the selection state in at least Chrome can cause + // strange side effects, like touch bar flickering on every key. + // See https://github.com/vector-im/riot-web/issues/9299 + return; + } + } + sel.removeAllRanges(); sel.addRange(range); } From c8cd9b4437fdf5fb16c7c32403d46693a10e6657 Mon Sep 17 00:00:00 2001 From: "J. A. Durieux" Date: Wed, 4 Mar 2020 14:07:04 +0000 Subject: [PATCH 166/522] Translated using Weblate (Dutch) Currently translated at 100.0% (2140 of 2140 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nl/ --- src/i18n/strings/nl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 3f85b7478f..889a8f572f 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -1196,7 +1196,7 @@ "Invite anyway": "Alsnog uitnodigen", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Vooraleer u logboeken indient, dient u uw probleem te melden op GitHub.", "Unable to load commit detail: %(msg)s": "Kan commitdetail niet laden: %(msg)s", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Om uw gespreksgeschiedenis niet te verliezen, moet u vóór het afmelden uw gesprekssleutels wegschrijven. Dat moet vanuit de nieuwere versie van Riot", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Schrijf om uw gespreksgeschiedenis niet te verliezen vóór het afmelden uw gesprekssleutels weg. Dat moet vanuit de nieuwere versie van Riot", "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "U heeft eerder een nieuwere versie van Riot op %(host)s gebruikt. Om deze versie opnieuw met eind-tot-eind-versleuteling te gebruiken, zult u zich moeten afmelden en opnieuw aanmelden. ", "Incompatible Database": "Incompatibele database", "Continue With Encryption Disabled": "Verdergaan met versleuteling uitgeschakeld", From 4396d85d1f8bf0f6c4f5ed9a2abfa7865d45a5e7 Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 2 Mar 2020 16:28:10 +0000 Subject: [PATCH 167/522] Share secrets with another device on request --- src/CrossSigningManager.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/CrossSigningManager.js b/src/CrossSigningManager.js index f19be03574..8549742c05 100644 --- a/src/CrossSigningManager.js +++ b/src/CrossSigningManager.js @@ -21,6 +21,7 @@ import { deriveKey } from 'matrix-js-sdk/src/crypto/key_passphrase'; import { decodeRecoveryKey } from 'matrix-js-sdk/src/crypto/recoverykey'; import { _t } from './languageHandler'; import SettingsStore from './settings/SettingsStore'; +import {encodeBase64} from "matrix-js-sdk/src/crypto/olmlib"; // This stores the secret storage private keys in memory for the JS SDK. This is // only meant to act as a cache to avoid prompting the user multiple times @@ -125,8 +126,37 @@ async function getSecretStorageKey({ keys: keyInfos }, ssssItemName) { return [name, key]; } +const onSecretRequested = async function({ + user_id: userId, + device_id: deviceId, + request_id: requestId, + name, + device_trust: deviceTrust, +}) { + console.log("onSecretRequested", userId, deviceId, requestId, name, deviceTrust); + const client = MatrixClientPeg.get(); + if (userId !== client.getUserId()) { + return; + } + if (!deviceTrust || !deviceTrust.isVerified()) { + console.log(`CrossSigningManager: Ignoring request from untrusted device ${deviceId}`); + return; + } + const crossSigning = client._crypto._crossSigningInfo; + if (!crossSigning._cacheCallbacks.getCrossSigningKeyCache) return; + if (name === "m.key.self_signing") { + const key = await crossSigning._cacheCallbacks.getCrossSigningKeyCache("self_signing"); + return key && encodeBase64(key); + } else if (name === "m.key.user_signing") { + const key = await crossSigning._cacheCallbacks.getCrossSigningKeyCache("user_signing"); + return key && encodeBase64(key); + } + console.warn("onSecretRequested didn't recognise the secret named ", name); +}; + export const crossSigningCallbacks = { getSecretStorageKey, + onSecretRequested, }; /** From 29af8add5d5fbfa607be40e74944b64cc4e46f35 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 4 Mar 2020 16:10:06 +0100 Subject: [PATCH 168/522] only show verify button if user has uploaded cross-signing keys --- src/components/views/right_panel/UserInfo.js | 44 ++++++++++++++++---- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/src/components/views/right_panel/UserInfo.js b/src/components/views/right_panel/UserInfo.js index 44770d9ccc..f5b6548a83 100644 --- a/src/components/views/right_panel/UserInfo.js +++ b/src/components/views/right_panel/UserInfo.js @@ -136,6 +136,27 @@ function useIsEncrypted(cli, room) { return isEncrypted; } +function useHasCrossSigningKeys(cli, member, canVerify) { + const [waitingForCrossSigningKeys, setWaitingForCrossSigningKeys] = useState(false); + const [hasCrossSigningKeys, setHasCrossSigningKeys] = useState(false); + useEffect(() => { + if (canVerify) { + setWaitingForCrossSigningKeys(true); + (async () => { + try { + await cli.downloadKeys([member.userId]); + const xsi = cli.getStoredCrossSigningForUser(member.userId); + const key = xsi && xsi.getId(); + setHasCrossSigningKeys(!!key); + } finally { + setWaitingForCrossSigningKeys(false); + } + })(); + } + }, [canVerify, cli, member]); + return {waitingForCrossSigningKeys, hasCrossSigningKeys}; +} + async function verifyDevice(userId, device) { const cli = MatrixClientPeg.get(); const member = cli.getUser(userId); @@ -1324,20 +1345,27 @@ const BasicUserInfo = ({room, member, groupId, devices, isRoomEncrypted}) => { let verifyButton; const homeserverSupportsCrossSigning = useHomeserverSupportsCrossSigning(cli); - if ( - SettingsStore.isFeatureEnabled("feature_cross_signing") && - homeserverSupportsCrossSigning - ) { - const userTrust = cli.checkUserTrust(member.userId); - const userVerified = userTrust.isCrossSigningVerified(); - const isMe = member.userId === cli.getUserId(); - if (isRoomEncrypted && !userVerified && !isMe) { + const userTrust = cli.checkUserTrust(member.userId); + const userVerified = userTrust.isCrossSigningVerified(); + const isMe = member.userId === cli.getUserId(); + const canVerify = SettingsStore.isFeatureEnabled("feature_cross_signing") && + homeserverSupportsCrossSigning && + isRoomEncrypted && !userVerified && !isMe; + + const {hasCrossSigningKeys, waitingForCrossSigningKeys} = + useHasCrossSigningKeys(cli, member, canVerify); + + if (canVerify) { + if (hasCrossSigningKeys) { verifyButton = ( verifyUser(member)}> {_t("Verify")} ); + } else if (waitingForCrossSigningKeys) { + const Spinner = sdk.getComponent("elements.Spinner"); + verifyButton = ; } } From afc7273d1002fb69380299b392bd474cc2460644 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 4 Mar 2020 16:58:04 +0100 Subject: [PATCH 169/522] use pendingUpdateCount rather, so we don't show multiple spinners --- src/components/views/right_panel/UserInfo.js | 63 ++++++++++---------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/src/components/views/right_panel/UserInfo.js b/src/components/views/right_panel/UserInfo.js index f5b6548a83..07b2248644 100644 --- a/src/components/views/right_panel/UserInfo.js +++ b/src/components/views/right_panel/UserInfo.js @@ -17,7 +17,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React, {useCallback, useMemo, useState, useEffect, useContext} from 'react'; +import React, {useCallback, useMemo, useState, useEffect, useContext, useRef} from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import {Group, RoomMember, User} from 'matrix-js-sdk'; @@ -136,25 +136,28 @@ function useIsEncrypted(cli, room) { return isEncrypted; } -function useHasCrossSigningKeys(cli, member, canVerify) { - const [waitingForCrossSigningKeys, setWaitingForCrossSigningKeys] = useState(false); - const [hasCrossSigningKeys, setHasCrossSigningKeys] = useState(false); +function useHasCrossSigningKeys(cli, member, canVerify, setUpdating) { + // use a ref to setUpdating because we don't want to rerun + // the useAsyncMemo hook when it changes. + const updatingRef = useRef(); useEffect(() => { - if (canVerify) { - setWaitingForCrossSigningKeys(true); - (async () => { - try { - await cli.downloadKeys([member.userId]); - const xsi = cli.getStoredCrossSigningForUser(member.userId); - const key = xsi && xsi.getId(); - setHasCrossSigningKeys(!!key); - } finally { - setWaitingForCrossSigningKeys(false); - } - })(); + updatingRef.current = setUpdating; + }, [setUpdating]); + + return useAsyncMemo(async () => { + if (!canVerify) { + return false; } - }, [canVerify, cli, member]); - return {waitingForCrossSigningKeys, hasCrossSigningKeys}; + updatingRef.current(true); + try { + await cli.downloadKeys([member.userId]); + const xsi = cli.getStoredCrossSigningForUser(member.userId); + const key = xsi && xsi.getId(); + return !!key; + } finally { + updatingRef.current(false); + } + }, [cli, member, canVerify], false); } async function verifyDevice(userId, device) { @@ -1353,20 +1356,18 @@ const BasicUserInfo = ({room, member, groupId, devices, isRoomEncrypted}) => { homeserverSupportsCrossSigning && isRoomEncrypted && !userVerified && !isMe; - const {hasCrossSigningKeys, waitingForCrossSigningKeys} = - useHasCrossSigningKeys(cli, member, canVerify); + const setUpdating = useCallback((updating) => { + setPendingUpdateCount(pendingUpdateCount + (updating ? 1 : -1)); + }, [setPendingUpdateCount, pendingUpdateCount]); + const hasCrossSigningKeys = + useHasCrossSigningKeys(cli, member, canVerify, setUpdating ); - if (canVerify) { - if (hasCrossSigningKeys) { - verifyButton = ( - verifyUser(member)}> - {_t("Verify")} - - ); - } else if (waitingForCrossSigningKeys) { - const Spinner = sdk.getComponent("elements.Spinner"); - verifyButton = ; - } + if (canVerify && hasCrossSigningKeys) { + verifyButton = ( + verifyUser(member)}> + {_t("Verify")} + + ); } let devicesSection; From 8a964dbff0c789dc511bf8c445752ea632c1520e Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 4 Mar 2020 17:19:06 +0100 Subject: [PATCH 170/522] avoid ref by getting count in setter callback --- src/components/views/right_panel/UserInfo.js | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/components/views/right_panel/UserInfo.js b/src/components/views/right_panel/UserInfo.js index 07b2248644..e844018527 100644 --- a/src/components/views/right_panel/UserInfo.js +++ b/src/components/views/right_panel/UserInfo.js @@ -17,7 +17,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React, {useCallback, useMemo, useState, useEffect, useContext, useRef} from 'react'; +import React, {useCallback, useMemo, useState, useEffect, useContext} from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import {Group, RoomMember, User} from 'matrix-js-sdk'; @@ -137,25 +137,18 @@ function useIsEncrypted(cli, room) { } function useHasCrossSigningKeys(cli, member, canVerify, setUpdating) { - // use a ref to setUpdating because we don't want to rerun - // the useAsyncMemo hook when it changes. - const updatingRef = useRef(); - useEffect(() => { - updatingRef.current = setUpdating; - }, [setUpdating]); - return useAsyncMemo(async () => { if (!canVerify) { return false; } - updatingRef.current(true); + setUpdating(true); try { await cli.downloadKeys([member.userId]); const xsi = cli.getStoredCrossSigningForUser(member.userId); const key = xsi && xsi.getId(); return !!key; } finally { - updatingRef.current(false); + setUpdating(false); } }, [cli, member, canVerify], false); } @@ -1356,9 +1349,9 @@ const BasicUserInfo = ({room, member, groupId, devices, isRoomEncrypted}) => { homeserverSupportsCrossSigning && isRoomEncrypted && !userVerified && !isMe; - const setUpdating = useCallback((updating) => { - setPendingUpdateCount(pendingUpdateCount + (updating ? 1 : -1)); - }, [setPendingUpdateCount, pendingUpdateCount]); + const setUpdating = (updating) => { + setPendingUpdateCount(count => count + (updating ? 1 : -1)); + }; const hasCrossSigningKeys = useHasCrossSigningKeys(cli, member, canVerify, setUpdating ); From 3842bce74dc25f242b0cf710efd6d5d6d61ec3f9 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 4 Mar 2020 11:41:16 -0700 Subject: [PATCH 171/522] Fix SSO for new approach --- src/components/structures/auth/Login.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/components/structures/auth/Login.js b/src/components/structures/auth/Login.js index cf80c99535..6cce8f4444 100644 --- a/src/components/structures/auth/Login.js +++ b/src/components/structures/auth/Login.js @@ -28,6 +28,7 @@ import AutoDiscoveryUtils, {ValidatedServerConfig} from "../../../utils/AutoDisc import classNames from "classnames"; import AuthPage from "../../views/auth/AuthPage"; import SSOButton from "../../views/elements/SSOButton"; +import PlatformPeg from '../../../PlatformPeg'; // For validating phone numbers without country codes const PHONE_NUMBER_REGEX = /^[0-9()\-\s]*$/; @@ -155,14 +156,6 @@ export default createReactClass({ return this._getCurrentFlowStep() === 'm.login.sso' || this._getCurrentFlowStep() === 'm.login.cas'; }, - _getSsoUrl: function(kind) { - if (kind === 'm.login.cas') { - return this._loginLogic.getSsoLoginUrl("cas"); - } else { - return this._loginLogic.getSsoLoginUrl("sso"); - } - }, - onPasswordLogin: async function(username, phoneCountry, phoneNumber, password) { if (!this.state.serverIsAlive) { this.setState({busy: true}); @@ -357,7 +350,8 @@ export default createReactClass({ // so intercept the click and instead pretend the user clicked 'Sign in with SSO'. ev.preventDefault(); ev.stopPropagation(); - window.location = this._getSsoUrl(this._getCurrentFlowStep()); + const ssoKind = this._getCurrentFlowStep() === 'm.login.sso' ? 'sso' : 'cas'; + PlatformPeg.get().startSingleSignOn(this._loginLogic.createTemporaryClient(), ssoKind); } else { // Don't intercept - just go through to the register page this.onRegisterClick(ev); From b06a82ee80b2aa656f1a0114c7fa2fab7fccc8dd Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 4 Mar 2020 11:44:12 -0700 Subject: [PATCH 172/522] Use textForEvent to determine if an event is worth rendering --- src/components/structures/MessagePanel.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/components/structures/MessagePanel.js b/src/components/structures/MessagePanel.js index 0029090a94..a2ac93d282 100644 --- a/src/components/structures/MessagePanel.js +++ b/src/components/structures/MessagePanel.js @@ -28,6 +28,7 @@ import {MatrixClientPeg} from '../../MatrixClientPeg'; import SettingsStore from '../../settings/SettingsStore'; import {_t} from "../../languageHandler"; import {haveTileForEvent} from "../views/rooms/EventTile"; +import {textForEvent} from "../../TextForEvent"; const CONTINUATION_MAX_INTERVAL = 5 * 60 * 1000; // 5 minutes const continuedTypes = ['m.sticker', 'm.room.message']; @@ -963,15 +964,11 @@ class MemberGrouper { add(ev) { if (ev.getType() === 'm.room.member') { - // We'll just double check that it's worth our time to do so... - if (ev.getPrevContent()) { - const membershipChange = ev.getPrevContent()['membership'] !== ev.getContent()['membership']; - const displayNameChange = ev.getPrevContent()['displayname'] !== ev.getContent()['displayname']; - const avatarChange = ev.getPrevContent()['avatar_url'] !== ev.getContent()['avatar_url']; - if (!membershipChange && !displayNameChange && !avatarChange) { - return; // Not a substantial change - quietly ignore - } - } + // We'll just double check that it's worth our time to do so, through an + // ugly hack. If textForEvent returns something, we should group it for + // rendering but if it doesn't then we'll exclude it. + const renderText = textForEvent(ev); + if (!renderText || renderText.trim().length === 0) return; // quietly ignore } this.readMarker = this.readMarker || this.panel._readMarkerForEvent(ev.getId()); this.events.push(ev); From 80b44f0292ff36b87389c7b72a6b498de8c9b5bc Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 4 Mar 2020 12:05:47 -0700 Subject: [PATCH 173/522] Always calculate the category of a room All the update triggers for the RoomListStore go through the `setRoomCategory` function, so by returning early we're not actually calculating where a room should be in the list. --- src/stores/RoomListStore.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/stores/RoomListStore.js b/src/stores/RoomListStore.js index 561d865b66..aec307d28e 100644 --- a/src/stores/RoomListStore.js +++ b/src/stores/RoomListStore.js @@ -479,12 +479,6 @@ class RoomListStore extends Store { _setRoomCategory(room, category) { if (!room) return; // This should only happen in tests - if (!this._state.orderImportantFirst) { - // XXX bail here early to avoid https://github.com/vector-im/riot-web/issues/9216 - // this may mean that category updates are missed whilst not ordering by importance first - return; - } - const listsClone = {}; // Micro optimization: Support lazily loading the last timestamp in a room From 8e3fea9d0fb1a6b097754b656c2c5e8d1dcdb7ae Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 4 Mar 2020 12:09:05 -0700 Subject: [PATCH 174/522] Use an algorithmic comparator for room list ops Not all algorithms are timestamp based. --- src/stores/RoomListStore.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/stores/RoomListStore.js b/src/stores/RoomListStore.js index aec307d28e..89edc9a8ef 100644 --- a/src/stores/RoomListStore.js +++ b/src/stores/RoomListStore.js @@ -372,6 +372,14 @@ class RoomListStore extends Store { _slotRoomIntoList(room, category, tag, existingEntries, newList, lastTimestampFn) { const targetCategoryIndex = CATEGORY_ORDER.indexOf(category); + let categoryComparator = (a, b) => lastTimestampFn(a.room) >= lastTimestampFn(b.room); + const sortAlgorithm = getListAlgorithm(tag, this._state.algorithm); + if (sortAlgorithm === ALGO_RECENT) { + categoryComparator = (a, b) => this._recentsComparator(a, b, lastTimestampFn); + } else if (sortAlgorithm === ALGO_ALPHABETIC) { + categoryComparator = (a, b) => this._lexicographicalComparator(a, b); + } + // The slotting algorithm works by trying to position the room in the most relevant // category of the list (red > grey > etc). To accomplish this, we need to consider // a couple cases: the category existing in the list but having other rooms in it and @@ -449,7 +457,7 @@ class RoomListStore extends Store { // based on most recent timestamp. const changedBoundary = entryCategoryIndex > targetCategoryIndex; const currentCategory = entryCategoryIndex === targetCategoryIndex; - if (changedBoundary || (currentCategory && lastTimestampFn(room) >= lastTimestampFn(entry.room))) { + if (changedBoundary || (currentCategory && categoryComparator({room}, entry) <= 0)) { if (changedBoundary) { // If we changed a boundary, then we've gone too far - go to the top of the last // section instead. From 830c6e7cc819046db0670e3af419ccf6a5a9c1b8 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Wed, 4 Mar 2020 17:13:43 +0000 Subject: [PATCH 175/522] Translated using Weblate (Albanian) Currently translated at 99.5% (2129 of 2140 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 9cb7191288..97cf2f820e 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -888,7 +888,7 @@ "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Krijoni një bashkësi që bëni tok përdorues dhe dhoma! Krijoni një faqe hyrëse vetjake, që të ravijëzoni hapësirën tuaj në universin Matrix.", "Sent messages will be stored until your connection has returned.": "Mesazhet e dërguar do të depozitohen deri sa lidhja juaj të jetë rikthyer.", "Server may be unavailable, overloaded, or search timed out :(": "Shërbyesi mund të jetë i pakapshëm, i mbingarkuar, ose kërkimit i mbaroi koha :(", - "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Nëse parashtruar një të metë përmes GitHub-it, regjistrat e diagnostikimit mund të na ndihmojnë të ndjekim problemin. Regjistrat e diagnostikimit përmbajnë të dhëna përdorimi, përfshi emrin tuaj të përdoruesit, ID-të ose aliaset e dhomave apo grupeve që keni vizituar dhe emrat e përdoruesve të përdoruesve të tjerë. Në to nuk përmbahen mesazhet.", + "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Nëse parashtruat një të metë përmes GitHub-it, regjistrat e diagnostikimit mund të na ndihmojnë të ndjekim problemin. Regjistrat e diagnostikimit përmbajnë të dhëna përdorimi, përfshi emrin tuaj të përdoruesit, ID-të ose aliaset e dhomave apo grupeve që keni vizituar dhe emrat e përdoruesve të përdoruesve të tjerë. Në to nuk përmbahen mesazhet.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privatësia është e rëndësishme për ne, ndaj nuk grumbullojmë ndonjë të dhënë personale apo të identifikueshme për analizat tona.", "Learn more about how we use analytics.": "Mësoni më tepër se si i përdorim analizat.", "Reject all %(invitedRooms)s invites": "Mos prano asnjë ftesë për në %(invitedRooms)s", From 2204785026ceaf504ef29c4f0fe0f4c11979aa90 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 4 Mar 2020 12:26:08 -0700 Subject: [PATCH 176/522] Simplify SSO step checking --- src/components/structures/auth/Login.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/components/structures/auth/Login.js b/src/components/structures/auth/Login.js index 6cce8f4444..bfabc34a62 100644 --- a/src/components/structures/auth/Login.js +++ b/src/components/structures/auth/Login.js @@ -152,10 +152,6 @@ export default createReactClass({ return this.state.busy || this.props.busy; }, - _isSsoStep: function() { - return this._getCurrentFlowStep() === 'm.login.sso' || this._getCurrentFlowStep() === 'm.login.cas'; - }, - onPasswordLogin: async function(username, phoneCountry, phoneNumber, password) { if (!this.state.serverIsAlive) { this.setState({busy: true}); @@ -345,12 +341,13 @@ export default createReactClass({ }, onTryRegisterClick: function(ev) { - if (this._isSsoStep()) { + const step = this._getCurrentFlowStep(); + if (step === 'm.login.sso' || step === 'm.login.cas') { // If we're showing SSO it means that registration is also probably disabled, // so intercept the click and instead pretend the user clicked 'Sign in with SSO'. ev.preventDefault(); ev.stopPropagation(); - const ssoKind = this._getCurrentFlowStep() === 'm.login.sso' ? 'sso' : 'cas'; + const ssoKind = step === 'm.login.sso' ? 'sso' : 'cas'; PlatformPeg.get().startSingleSignOn(this._loginLogic.createTemporaryClient(), ssoKind); } else { // Don't intercept - just go through to the register page From d820356990fc836bcdbfb65bc33d203f94f09e3a Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 4 Mar 2020 13:56:58 -0700 Subject: [PATCH 177/522] Convert alias links in room header topics to local permalinks Fixes https://github.com/vector-im/riot-web/issues/12605 --- src/linkify-matrix.js | 4 ++-- src/utils/permalinks/Permalinks.js | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/linkify-matrix.js b/src/linkify-matrix.js index 8870b2d431..2d2b9c62a5 100644 --- a/src/linkify-matrix.js +++ b/src/linkify-matrix.js @@ -16,7 +16,7 @@ limitations under the License. */ import {baseUrl} from "./utils/permalinks/SpecPermalinkConstructor"; -import {tryTransformPermalinkToLocalHref} from "./utils/permalinks/Permalinks"; +import {tryTransformEntityToPermalink, tryTransformPermalinkToLocalHref} from "./utils/permalinks/Permalinks"; function matrixLinkify(linkify) { // Text tokens @@ -221,7 +221,7 @@ matrixLinkify.options = { case 'userid': case 'groupid': default: { - return tryTransformPermalinkToLocalHref(href); + return tryTransformEntityToPermalink(href); } } }, diff --git a/src/utils/permalinks/Permalinks.js b/src/utils/permalinks/Permalinks.js index 1174e59da6..466d1ed57d 100644 --- a/src/utils/permalinks/Permalinks.js +++ b/src/utils/permalinks/Permalinks.js @@ -290,6 +290,25 @@ export function isPermalinkHost(host: string): boolean { return getPermalinkConstructor().isPermalinkHost(host); } +/** + * Transforms an entity (permalink, room alias, user ID, etc) into a local URL + * if possible. If the given entity is not found to be valid enough to be converted + * then a null value will be returned. + * @param {string} entity The entity to transform. + * @returns {string|null} The transformed permalink or null if unable. + */ +export function tryTransformEntityToPermalink(entity: string): string { + if (!entity) return null; + + // Check to see if it is a bare entity for starters + if (entity[0] === '#' || entity[0] === '!') return makeRoomPermalink(entity); + if (entity[0] === '@') return makeUserPermalink(entity); + if (entity[0] === '+') return makeGroupPermalink(entity); + + // Then try and merge it into a permalink + return tryTransformPermalinkToLocalHref(entity); +} + /** * Transforms a permalink (or possible permalink) into a local URL if possible. If * the given permalink is found to not be a permalink, it'll be returned unaltered. From c6af591c6e2aa49a9fadd765316226688706210b Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 4 Mar 2020 14:14:03 -0700 Subject: [PATCH 178/522] Ensure linkified topics in the room directory also work We weren't passing the options object down to linkifyString. Fixes https://github.com/vector-im/riot-web/issues/12606 --- src/HtmlUtils.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/HtmlUtils.js b/src/HtmlUtils.js index 7dd68e5c61..a58ea25c8a 100644 --- a/src/HtmlUtils.js +++ b/src/HtmlUtils.js @@ -23,7 +23,6 @@ import ReplyThread from "./components/views/elements/ReplyThread"; import React from 'react'; import sanitizeHtml from 'sanitize-html'; -import highlight from 'highlight.js'; import * as linkify from 'linkifyjs'; import linkifyMatrix from './linkify-matrix'; import _linkifyElement from 'linkifyjs/element'; @@ -467,11 +466,12 @@ export function bodyToHtml(content, highlights, opts={}) { /** * Linkifies the given string. This is a wrapper around 'linkifyjs/string'. * - * @param {string} str - * @returns {string} + * @param {string} str string to linkify + * @param {object} [options] Options for linkifyString. Default: linkifyMatrix.options + * @returns {string} Linkified string */ -export function linkifyString(str) { - return _linkifyString(str); +export function linkifyString(str, options = linkifyMatrix.options) { + return _linkifyString(str, options); } /** @@ -489,10 +489,11 @@ export function linkifyElement(element, options = linkifyMatrix.options) { * Linkify the given string and sanitize the HTML afterwards. * * @param {string} dirtyHtml The HTML string to sanitize and linkify + * @param {object} [options] Options for linkifyString. Default: linkifyMatrix.options * @returns {string} */ -export function linkifyAndSanitizeHtml(dirtyHtml) { - return sanitizeHtml(linkifyString(dirtyHtml), sanitizeHtmlParams); +export function linkifyAndSanitizeHtml(dirtyHtml, options = linkifyMatrix.options) { + return sanitizeHtml(linkifyString(dirtyHtml, options), sanitizeHtmlParams); } /** From 4a976acb84ff828f2ff5745a26b6841093290f54 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 4 Mar 2020 14:18:56 -0700 Subject: [PATCH 179/522] Add a null check to getUniqueRoomsWithIndividuals Fixes https://github.com/vector-im/riot-web/issues/12611 --- src/utils/DMRoomMap.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/utils/DMRoomMap.js b/src/utils/DMRoomMap.js index 43ef0035fc..6ce92a0458 100644 --- a/src/utils/DMRoomMap.js +++ b/src/utils/DMRoomMap.js @@ -168,6 +168,7 @@ export default class DMRoomMap { } getUniqueRoomsWithIndividuals(): {[userId: string]: Room} { + if (!this.roomToUser) return {}; // No rooms means no map. return Object.keys(this.roomToUser) .map(r => ({userId: this.getUserIdForRoomId(r), room: this.matrixClient.getRoom(r)})) .filter(r => r.userId && r.room && r.room.getInvitedAndJoinedMemberCount() === 2) From 98f0a2ab679d4d08c298a0148e3de09b4b9ea790 Mon Sep 17 00:00:00 2001 From: Simeon Keske Date: Wed, 4 Mar 2020 22:30:24 +0100 Subject: [PATCH 180/522] show the room presence indicator, even when cross-singing is enabled --- src/components/views/rooms/RoomTile.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/components/views/rooms/RoomTile.js b/src/components/views/rooms/RoomTile.js index a07c81eb21..3245cdb779 100644 --- a/src/components/views/rooms/RoomTile.js +++ b/src/components/views/rooms/RoomTile.js @@ -491,15 +491,15 @@ export default createReactClass({ alt="dm" />; - const { room } = this.props; - const member = room.getMember(dmUserId); - if ( - member && member.membership === "join" && room.getJoinedMemberCount() === 2 && - SettingsStore.isFeatureEnabled("feature_presence_in_room_list") - ) { - const UserOnlineDot = sdk.getComponent('rooms.UserOnlineDot'); - dmOnline = ; - } + } + const { room } = this.props; + const member = room.getMember(dmUserId); + if ( + member && member.membership === "join" && room.getJoinedMemberCount() === 2 && + SettingsStore.isFeatureEnabled("feature_presence_in_room_list") + ) { + const UserOnlineDot = sdk.getComponent('rooms.UserOnlineDot'); + dmOnline = ; } // The following labels are written in such a fashion to increase screen reader efficiency (speed). From cf1d9cc8b5ff65cc127510a310ad0585c1c1dfba Mon Sep 17 00:00:00 2001 From: Simeon Keske Date: Wed, 4 Mar 2020 22:46:07 +0100 Subject: [PATCH 181/522] make the linter happy --- src/components/views/rooms/RoomTile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomTile.js b/src/components/views/rooms/RoomTile.js index 3245cdb779..e1624602f1 100644 --- a/src/components/views/rooms/RoomTile.js +++ b/src/components/views/rooms/RoomTile.js @@ -490,8 +490,8 @@ export default createReactClass({ height="13" alt="dm" />; - } + const { room } = this.props; const member = room.getMember(dmUserId); if ( From a5cd0a7d5f120696277974a4e3ba64e7ce4419b5 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 5 Mar 2020 11:09:45 +0100 Subject: [PATCH 182/522] indent by 4 spaces --- src/components/views/right_panel/UserInfo.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/right_panel/UserInfo.js b/src/components/views/right_panel/UserInfo.js index e844018527..b8ba6968a4 100644 --- a/src/components/views/right_panel/UserInfo.js +++ b/src/components/views/right_panel/UserInfo.js @@ -1346,8 +1346,8 @@ const BasicUserInfo = ({room, member, groupId, devices, isRoomEncrypted}) => { const userVerified = userTrust.isCrossSigningVerified(); const isMe = member.userId === cli.getUserId(); const canVerify = SettingsStore.isFeatureEnabled("feature_cross_signing") && - homeserverSupportsCrossSigning && - isRoomEncrypted && !userVerified && !isMe; + homeserverSupportsCrossSigning && + isRoomEncrypted && !userVerified && !isMe; const setUpdating = (updating) => { setPendingUpdateCount(count => count + (updating ? 1 : -1)); From cc26dc157b4a945b7f1c1d5265ab129b3802a0a6 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Thu, 5 Mar 2020 03:11:47 +0000 Subject: [PATCH 183/522] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2140 of 2140 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index f57ef0e28d..acf3f4feb3 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2176,5 +2176,6 @@ "Create Account": "建立帳號", "Order rooms by name": "以名稱排序聊天室", "Show rooms with unread notifications first": "先顯示有未讀通知的聊天室", - "Show shortcuts to recently viewed rooms above the room list": "在聊天室清單上方顯示最近看過的聊天室的捷徑" + "Show shortcuts to recently viewed rooms above the room list": "在聊天室清單上方顯示最近看過的聊天室的捷徑", + "Displays information about a user": "顯示關於使用者的資訊" } From 26177a19d5406739d067b9ccc3bf42bc4b8d5d46 Mon Sep 17 00:00:00 2001 From: Zoe Date: Thu, 5 Mar 2020 10:45:37 +0000 Subject: [PATCH 184/522] access cross-signing callbacks via method --- src/CrossSigningManager.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/CrossSigningManager.js b/src/CrossSigningManager.js index 8549742c05..0cf2c9e2ac 100644 --- a/src/CrossSigningManager.js +++ b/src/CrossSigningManager.js @@ -142,13 +142,13 @@ const onSecretRequested = async function({ console.log(`CrossSigningManager: Ignoring request from untrusted device ${deviceId}`); return; } - const crossSigning = client._crypto._crossSigningInfo; - if (!crossSigning._cacheCallbacks.getCrossSigningKeyCache) return; + const callbacks = client.getCrossSigningCacheCallbacks(); + if (!callbacks.getCrossSigningKeyCache) return; if (name === "m.key.self_signing") { - const key = await crossSigning._cacheCallbacks.getCrossSigningKeyCache("self_signing"); + const key = await callbacks.getCrossSigningKeyCache("self_signing"); return key && encodeBase64(key); } else if (name === "m.key.user_signing") { - const key = await crossSigning._cacheCallbacks.getCrossSigningKeyCache("user_signing"); + const key = await callbacks.getCrossSigningKeyCache("user_signing"); return key && encodeBase64(key); } console.warn("onSecretRequested didn't recognise the secret named ", name); From a6882cece188c95b988c1d815771088e36b946bd Mon Sep 17 00:00:00 2001 From: Ben Parsons Date: Thu, 5 Mar 2020 14:10:44 +0000 Subject: [PATCH 185/522] increase margin between Settings sections --- res/css/views/settings/tabs/_SettingsTab.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/css/views/settings/tabs/_SettingsTab.scss b/res/css/views/settings/tabs/_SettingsTab.scss index 794c8106be..9727946893 100644 --- a/res/css/views/settings/tabs/_SettingsTab.scss +++ b/res/css/views/settings/tabs/_SettingsTab.scss @@ -45,6 +45,10 @@ limitations under the License. margin: 10px 100px 10px 0; // Align with the rest of the view } +.mx_SettingsTab_section { + margin-bottom: 24px; +} + .mx_SettingsTab_section .mx_SettingsFlag { margin-right: 100px; margin-bottom: 10px; From ce849672257e395ee0cd21a7e05db86fcebc6ea6 Mon Sep 17 00:00:00 2001 From: Ben Parsons Date: Thu, 5 Mar 2020 14:18:12 +0000 Subject: [PATCH 186/522] update Security Disclosure Policy link text --- src/components/views/settings/tabs/user/HelpUserSettingsTab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/settings/tabs/user/HelpUserSettingsTab.js b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js index 84403fe76e..8e7983970a 100644 --- a/src/components/views/settings/tabs/user/HelpUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js @@ -226,7 +226,7 @@ export default class HelpUserSettingsTab extends React.Component {
{ - _t( "To submit a security-related bug report, please read the Matrix.org " + + _t( "To report a Matrix-related security issue, please read the Matrix.org " + "Security Disclosure Policy.", {}, { 'a': (sub) => From d28d330b330dce39857678f033315f3814eb9dc0 Mon Sep 17 00:00:00 2001 From: Ben Parsons Date: Thu, 5 Mar 2020 14:33:40 +0000 Subject: [PATCH 187/522] run yarn i18n --- src/i18n/strings/en_EN.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index c0470af357..d3dc1f0652 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -725,7 +725,7 @@ "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.", "Submit debug logs": "Submit debug logs", "Clear cache and reload": "Clear cache and reload", - "To submit a security-related bug report, please read the Matrix.org Security Disclosure Policy.": "To submit a security-related bug report, please read the Matrix.org Security Disclosure Policy.", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.", "FAQ": "FAQ", "Versions": "Versions", "riot-web version:": "riot-web version:", From 7d051d6a1d0d927732adf44ea79534c64ccc326d Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 5 Mar 2020 17:44:35 +0100 Subject: [PATCH 188/522] await request promise inside encryption panel to show spinner --- src/components/structures/RightPanel.js | 2 ++ .../views/right_panel/EncryptionPanel.js | 15 ++++++++++++++- src/components/views/right_panel/UserInfo.js | 4 ++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/components/structures/RightPanel.js b/src/components/structures/RightPanel.js index 20df323c10..8d25116827 100644 --- a/src/components/structures/RightPanel.js +++ b/src/components/structures/RightPanel.js @@ -182,6 +182,7 @@ export default class RightPanel extends React.Component { member: payload.member, event: payload.event, verificationRequest: payload.verificationRequest, + verificationRequestPromise: payload.verificationRequestPromise, }); } } @@ -231,6 +232,7 @@ export default class RightPanel extends React.Component { onClose={onClose} phase={this.state.phase} verificationRequest={this.state.verificationRequest} + verificationRequestPromise={this.state.verificationRequestPromise} />; } else { panel = { +const EncryptionPanel = ({verificationRequest, verificationRequestPromise, member, onClose, layout}) => { const [request, setRequest] = useState(verificationRequest); // state to show a spinner immediately after clicking "start verification", // before we have a request @@ -43,6 +43,19 @@ const EncryptionPanel = ({verificationRequest, member, onClose, layout}) => { setPhase(verificationRequest.phase); } }, [verificationRequest]); + + useEffect(() => { + async function awaitPromise() { + setRequesting(true); + const request = await verificationRequestPromise; + setRequesting(false); + setRequest(request); + setPhase(request.phase); + } + if (verificationRequestPromise) { + awaitPromise(); + } + }, [verificationRequestPromise]); const changeHandler = useCallback(() => { // handle transitions -> cancelled for mismatches which fire a modal instead of showing a card if (request && request.cancelled && MISMATCHES.includes(request.cancellationCode)) { diff --git a/src/components/views/right_panel/UserInfo.js b/src/components/views/right_panel/UserInfo.js index b8ba6968a4..17cb80492e 100644 --- a/src/components/views/right_panel/UserInfo.js +++ b/src/components/views/right_panel/UserInfo.js @@ -171,14 +171,14 @@ async function verifyDevice(userId, device) { return; } const cli = MatrixClientPeg.get(); - const verificationRequest = await cli.requestVerification( + const verificationRequestPromise = cli.requestVerification( userId, [device.deviceId], ); dis.dispatch({ action: "set_right_panel_phase", phase: RIGHT_PANEL_PHASES.EncryptionPanel, - refireParams: {member, verificationRequest}, + refireParams: {member, verificationRequestPromise}, }); }, primaryButton: _t("Done"), From 597343018d0810b1dfe9771013e337c4b44d210a Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Thu, 5 Mar 2020 15:32:14 +0000 Subject: [PATCH 189/522] Translated using Weblate (Albanian) Currently translated at 99.7% (2134 of 2141 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 97cf2f820e..2389b430b0 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2003,7 +2003,7 @@ "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Ky sesion nuk po bën kopjeruajtje të kyçeve tuaja, por keni një kopjeruajtje ekzistuese që mund ta përdorni për rimarrje dhe ta shtoni më tej.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Lidheni këtë sesion kopjeruajtje kyçesh, përpara se të dilni, që të shmangni humbje të çfarëdo kyçi që mund të gjendet vetëm në këtë pajisje.", "Connect this session to Key Backup": "Lidhe këtë sesion me Kopjeruajtje Kyçesh", - "Backup has a signature from unknown session with ID %(deviceId)s": "Kopjeruajtja ka nënshkrim nga sesion i panjohur me ID %(deviceId)s.", + "Backup has a signature from unknown session with ID %(deviceId)s": "Kopjeruajtja ka nënshkrim nga sesion i panjohur me ID %(deviceId)s", "Backup has a valid signature from this session": "Kopjeruajtja ka një nënshkrim të vlefshëm prej këtij sesioni", "Backup has an invalid signature from this session": "Kopjeruajtja ka një nënshkrim të pavlefshëm prej këtij sesioni", "Backup has a valid signature from verified session ": "Kopjeruajtja ka një nënshkrim të vlefshëm prej sesioni të verifikuar ", @@ -2162,5 +2162,10 @@ "Your password": "Fjalëkalimi juaj", "This session, or the other session": "Ky sesion, ose sesioni tjetër", "The internet connection either session is using": "Lidhja internet që përdor cilido nga dy sesionet", - "We recommend you change your password and recovery key in Settings immediately": "Këshillojmë të ndryshoni menjëherë te Rregullimet fjalëkalimin tuaj dhe kyçin e rimarrjeve" + "We recommend you change your password and recovery key in Settings immediately": "Këshillojmë të ndryshoni menjëherë te Rregullimet fjalëkalimin tuaj dhe kyçin e rimarrjeve", + "Sign In or Create Account": "Hyni ose Krijoni një Llogari", + "Use your account or create a new one to continue.": "Që të vazhdohet, përdorni llogarinë tuaj të përdoruesit ose krijoni një të re.", + "Create Account": "Krijoni Llogari", + "Displays information about a user": "Shfaq të dhëna rreth një përdoruesi", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Që të njoftoni një problem sigurie lidhur me Matrix-in, ju lutemi, lexoni Rregulla Tregimi Çështjes Sigurie te Matrix.org." } From 74fcb103b1d11a408a44a144c1850624904f0f2f Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 5 Mar 2020 11:04:33 -0700 Subject: [PATCH 190/522] Link to the right contributing guidelines --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0fbed22030..d6fd6db1b7 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ All code lands on the `develop` branch - `master` is only used for stable releas **Please file PRs against `develop`!!** Please follow the standard Matrix contributor's guide: -https://github.com/matrix-org/synapse/tree/master/CONTRIBUTING.rst +https://github.com/matrix-org/matrix-js-sdk/blob/develop/CONTRIBUTING.rst Please follow the Matrix JS/React code style as per: https://github.com/matrix-org/matrix-react-sdk/blob/master/code_style.md From a275d296fe389eb2778ce9cb929f9754e9b82ec0 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Thu, 5 Mar 2020 18:59:37 +0000 Subject: [PATCH 191/522] Translated using Weblate (Albanian) Currently translated at 99.7% (2135 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 2389b430b0..974acb90c5 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2167,5 +2167,6 @@ "Use your account or create a new one to continue.": "Që të vazhdohet, përdorni llogarinë tuaj të përdoruesit ose krijoni një të re.", "Create Account": "Krijoni Llogari", "Displays information about a user": "Shfaq të dhëna rreth një përdoruesi", - "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Që të njoftoni një problem sigurie lidhur me Matrix-in, ju lutemi, lexoni Rregulla Tregimi Çështjes Sigurie te Matrix.org." + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Që të njoftoni një problem sigurie lidhur me Matrix-in, ju lutemi, lexoni Rregulla Tregimi Çështjes Sigurie te Matrix.org.", + "Mark all as read": "Vëru të tërave shenjë si të lexuara" } From e900fe04e87b2ff9047800143cb46ff9d4b5388d Mon Sep 17 00:00:00 2001 From: Szimszon Date: Thu, 5 Mar 2020 18:37:44 +0000 Subject: [PATCH 192/522] Translated using Weblate (Hungarian) Currently translated at 100.0% (2142 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 971fef5ab3..65019b7b6f 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2174,5 +2174,7 @@ "Sign In or Create Account": "Belépés vagy Fiók Készítés", "Use your account or create a new one to continue.": "A folytatáshoz használd a fiókodat vagy készíts egy újat.", "Create Account": "Fiók létrehozása", - "Displays information about a user": "A felhasználóról információ megjelenítése" + "Displays information about a user": "A felhasználóról információ megjelenítése", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Matrix-szal kapcsolatos biztonsági hibák jelentésével kapcsolatban kérlek olvasd el a Matrix.org Biztonsági hiba közzétételi szabályzatot.", + "Mark all as read": "Mindent olvasottnak jelöl" } From 8fe54e5dca8d4293746f15f3a06ce6279651494f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Tue, 18 Feb 2020 10:59:42 +0100 Subject: [PATCH 193/522] ManageEventIndexDialog: Reword the status for the currently indexing rooms. --- .../views/dialogs/eventindex/ManageEventIndexDialog.js | 6 ++++-- src/i18n/strings/en_EN.json | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js b/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js index f3ea3beb1c..9f00136b89 100644 --- a/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js +++ b/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js @@ -160,10 +160,12 @@ export default class ManageEventIndexDialog extends React.Component {
{_t("Space used:")} {formatBytes(this.state.eventIndexSize, 0)}
{_t("Indexed messages:")} {formatCountLong(this.state.eventCount)}
- {_t("Indexed rooms:")} {_t("%(crawlingRooms)s out of %(totalRooms)s", { - crawlingRooms: formatCountLong(this.state.crawlingRoomsCount), + {_t("Monitoring %(totalRooms)s rooms in total.", { totalRooms: formatCountLong(this.state.roomCount), })}
+ {_t("Currently working in %(crawlingRooms)s rooms.", { + crawlingRooms: formatCountLong(this.state.crawlingRoomsCount), + })}
{crawlerState}
Date: Fri, 6 Mar 2020 15:34:19 +0100 Subject: [PATCH 194/522] Revert "ManageEventIndexDialog: Reword the status for the currently indexing rooms." This reverts commit 7d6569a0b87c48733dbddec3c2662325977d0234. --- .../views/dialogs/eventindex/ManageEventIndexDialog.js | 6 ++---- src/i18n/strings/en_EN.json | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js b/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js index 9f00136b89..f3ea3beb1c 100644 --- a/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js +++ b/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js @@ -160,11 +160,9 @@ export default class ManageEventIndexDialog extends React.Component {
{_t("Space used:")} {formatBytes(this.state.eventIndexSize, 0)}
{_t("Indexed messages:")} {formatCountLong(this.state.eventCount)}
- {_t("Monitoring %(totalRooms)s rooms in total.", { - totalRooms: formatCountLong(this.state.roomCount), - })}
- {_t("Currently working in %(crawlingRooms)s rooms.", { + {_t("Indexed rooms:")} {_t("%(crawlingRooms)s out of %(totalRooms)s", { crawlingRooms: formatCountLong(this.state.crawlingRoomsCount), + totalRooms: formatCountLong(this.state.roomCount), })}
{crawlerState}
Date: Fri, 6 Mar 2020 15:43:17 +0100 Subject: [PATCH 195/522] ManageEventIndexDialog: Show how many rooms are done instead being processed. --- .../views/dialogs/eventindex/ManageEventIndexDialog.js | 6 ++++-- src/i18n/strings/en_EN.json | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js b/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js index f3ea3beb1c..8a5a0a3607 100644 --- a/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js +++ b/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js @@ -150,6 +150,8 @@ export default class ManageEventIndexDialog extends React.Component { const Field = sdk.getComponent('views.elements.Field'); + const doneRooms = Math.max(0, (this.state.roomCount - this.state.crawlingRoomsCount)); + const eventIndexingSettings = (
{ @@ -160,8 +162,8 @@ export default class ManageEventIndexDialog extends React.Component {
{_t("Space used:")} {formatBytes(this.state.eventIndexSize, 0)}
{_t("Indexed messages:")} {formatCountLong(this.state.eventCount)}
- {_t("Indexed rooms:")} {_t("%(crawlingRooms)s out of %(totalRooms)s", { - crawlingRooms: formatCountLong(this.state.crawlingRoomsCount), + {_t("Indexed rooms:")} {_t("%(doneRooms)s out of %(totalRooms)s", { + doneRooms: formatCountLong(doneRooms), totalRooms: formatCountLong(this.state.roomCount), })}
{crawlerState}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 35c3144241..f6f850d627 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2136,7 +2136,7 @@ "Space used:": "Space used:", "Indexed messages:": "Indexed messages:", "Indexed rooms:": "Indexed rooms:", - "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s out of %(totalRooms)s", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s out of %(totalRooms)s", "Message downloading sleep time(ms)": "Message downloading sleep time(ms)", "Failed to set direct chat tag": "Failed to set direct chat tag", "Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room", From 69389823f7fa8da68b3e8c7fa1ecaf9fc553ccf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Fri, 6 Mar 2020 16:07:10 +0100 Subject: [PATCH 196/522] ManageEventIndexDialog: Reword and move the crawler state around a bit. This reflects now the latests design on Figma. --- .../views/dialogs/eventindex/ManageEventIndexDialog.js | 6 +++--- src/i18n/strings/en_EN.json | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js b/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js index 8a5a0a3607..371fdcaf64 100644 --- a/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js +++ b/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js @@ -141,10 +141,10 @@ export default class ManageEventIndexDialog extends React.Component { let crawlerState; if (this.state.currentRoom === null) { - crawlerState = _t("Not currently downloading messages for any room."); + crawlerState = _t("Not currently indexing messages for any room."); } else { crawlerState = ( - _t("Downloading mesages for %(currentRoom)s.", { currentRoom: this.state.currentRoom }) + _t("Currently indexing: %(currentRoom)s.", { currentRoom: this.state.currentRoom }) ); } @@ -160,13 +160,13 @@ export default class ManageEventIndexDialog extends React.Component { ) }
+ {crawlerState}
{_t("Space used:")} {formatBytes(this.state.eventIndexSize, 0)}
{_t("Indexed messages:")} {formatCountLong(this.state.eventCount)}
{_t("Indexed rooms:")} {_t("%(doneRooms)s out of %(totalRooms)s", { doneRooms: formatCountLong(doneRooms), totalRooms: formatCountLong(this.state.roomCount), })}
- {crawlerState}
Date: Fri, 6 Mar 2020 01:28:21 +0000 Subject: [PATCH 197/522] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2142 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index acf3f4feb3..83458cfa37 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2177,5 +2177,7 @@ "Order rooms by name": "以名稱排序聊天室", "Show rooms with unread notifications first": "先顯示有未讀通知的聊天室", "Show shortcuts to recently viewed rooms above the room list": "在聊天室清單上方顯示最近看過的聊天室的捷徑", - "Displays information about a user": "顯示關於使用者的資訊" + "Displays information about a user": "顯示關於使用者的資訊", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "要回報與 Matrix 有關的安全性問題,請閱讀 Matrix.org 安全性揭露政策。", + "Mark all as read": "全部標示為已讀" } From 38ee5c09e4c40f4e37f5486fbbfb39b89d261fc7 Mon Sep 17 00:00:00 2001 From: Nathan Follens Date: Fri, 6 Mar 2020 00:26:17 +0000 Subject: [PATCH 198/522] Translated using Weblate (Dutch) Currently translated at 99.9% (2141 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nl/ --- src/i18n/strings/nl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 889a8f572f..d4c8345392 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -2160,5 +2160,6 @@ "Space used:": "Gebruikte ruimte:", "Indexed messages:": "Geïndexeerde berichten:", "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s van %(totalRooms)s", - "Message downloading sleep time(ms)": "Wachttijd voor downloaden van berichten (ms)" + "Message downloading sleep time(ms)": "Wachttijd voor downloaden van berichten (ms)", + "Mark all as read": "Alles markeren als gelezen" } From 778251680d71f693a9350d1fe83457790dccc6a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Fri, 6 Mar 2020 09:14:03 +0000 Subject: [PATCH 199/522] Translated using Weblate (French) Currently translated at 100.0% (2142 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index d3fea73891..5a97f54218 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2178,5 +2178,7 @@ "Order rooms by name": "Trier les salons par nom", "Show rooms with unread notifications first": "Afficher en premier les salons avec des notifications non lues", "Show shortcuts to recently viewed rooms above the room list": "Afficher les raccourcis vers les salons vus récemment au-dessus de la liste des salons", - "Displays information about a user": "Affiche des informations à propos de l’utilisateur" + "Displays information about a user": "Affiche des informations à propos de l’utilisateur", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Pour signaler un problème de sécurité lié à Matrix, consultez la politique de divulgation de sécurité de Matrix.org.", + "Mark all as read": "Tout marquer comme lu" } From a7de5753160ecf1cc657a963493131f386e655d3 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 6 Mar 2020 16:50:39 +0100 Subject: [PATCH 200/522] use crypto.verification.request even when xsign is disabled --- src/components/structures/MatrixChat.js | 41 +++++++++++++------------ 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index bc11e66d2c..e4af503b46 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -1495,26 +1495,29 @@ export default createReactClass({ } }); - if (SettingsStore.isFeatureEnabled("feature_cross_signing")) { - cli.on("crypto.verification.request", request => { - if (request.pending) { - ToastStore.sharedInstance().addOrReplaceToast({ - key: 'verifreq_' + request.channel.transactionId, - title: _t("Verification Request"), - icon: "verification", - props: {request}, - component: sdk.getComponent("toasts.VerificationRequestToast"), - }); - } - }); - } else { - cli.on("crypto.verification.start", (verifier) => { - const IncomingSasDialog = sdk.getComponent("views.dialogs.IncomingSasDialog"); - Modal.createTrackedDialog('Incoming Verification', '', IncomingSasDialog, { - verifier, + cli.on("crypto.verification.request", request => { + const isFlagOn = SettingsStore.isFeatureEnabled("feature_cross_signing"); + + if (!isFlagOn && !request.channel.deviceId) { + request.cancel({code: "m.invalid_message", reason: "This client has cross-signing disabled"}); + return; + } + + if (request.pending) { + ToastStore.sharedInstance().addOrReplaceToast({ + key: 'verifreq_' + request.channel.transactionId, + title: _t("Verification Request"), + icon: "verification", + props: {request}, + component: sdk.getComponent("toasts.VerificationRequestToast"), + }); + } else if (request.started) { + const VerificationRequestDialog = sdk.getComponent("views.dialogs.VerificationRequestDialog"); + Modal.createTrackedDialog('Incoming Verification', '', VerificationRequestDialog, { + verificationRequest: request, }, null, /* priority = */ false, /* static = */ true); - }); - } + } + }); // Fire the tinter right on startup to ensure the default theme is applied // A later sync can/will correct the tint to be the right value for the user const colorScheme = SettingsStore.getValue("roomColor"); From f8ef5bb6a58a95969dfd181a6e997f882ce28514 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 6 Mar 2020 17:20:08 +0100 Subject: [PATCH 201/522] check .started first as it can be both .started and pending --- src/components/structures/MatrixChat.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index e4af503b46..87b0f6773f 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -1503,7 +1503,12 @@ export default createReactClass({ return; } - if (request.pending) { + if (request.started) { + const VerificationRequestDialog = sdk.getComponent("views.dialogs.VerificationRequestDialog"); + Modal.createTrackedDialog('Incoming Verification', '', VerificationRequestDialog, { + verificationRequest: request, + }, null, /* priority = */ false, /* static = */ true); + } else if (request.pending) { ToastStore.sharedInstance().addOrReplaceToast({ key: 'verifreq_' + request.channel.transactionId, title: _t("Verification Request"), @@ -1511,11 +1516,6 @@ export default createReactClass({ props: {request}, component: sdk.getComponent("toasts.VerificationRequestToast"), }); - } else if (request.started) { - const VerificationRequestDialog = sdk.getComponent("views.dialogs.VerificationRequestDialog"); - Modal.createTrackedDialog('Incoming Verification', '', VerificationRequestDialog, { - verificationRequest: request, - }, null, /* priority = */ false, /* static = */ true); } }); // Fire the tinter right on startup to ensure the default theme is applied From b0617f10e82a5c60258846e69b97abb877c49e63 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 6 Mar 2020 17:22:56 +0100 Subject: [PATCH 202/522] stick to IncomingSasDialog as VerificationRequestDialog doesn't show sender yet, makes e2e tests fail --- src/components/structures/MatrixChat.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index 87b0f6773f..a0b9a8fe57 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -1503,10 +1503,10 @@ export default createReactClass({ return; } - if (request.started) { - const VerificationRequestDialog = sdk.getComponent("views.dialogs.VerificationRequestDialog"); - Modal.createTrackedDialog('Incoming Verification', '', VerificationRequestDialog, { - verificationRequest: request, + if (request.verifier) { + const IncomingSasDialog = sdk.getComponent("views.dialogs.IncomingSasDialog"); + Modal.createTrackedDialog('Incoming Verification', '', IncomingSasDialog, { + verifier: request.verifier, }, null, /* priority = */ false, /* static = */ true); } else if (request.pending) { ToastStore.sharedInstance().addOrReplaceToast({ From 1f9bd55f3b8dfeb426cec63b4eb8f2a6fbc550d0 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 6 Mar 2020 17:37:01 +0100 Subject: [PATCH 203/522] revert to legacy user verification (over to_device) without xsign keys --- src/components/views/right_panel/UserInfo.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/components/views/right_panel/UserInfo.js b/src/components/views/right_panel/UserInfo.js index 17cb80492e..24c5489c4f 100644 --- a/src/components/views/right_panel/UserInfo.js +++ b/src/components/views/right_panel/UserInfo.js @@ -186,6 +186,16 @@ async function verifyDevice(userId, device) { }); } +async function legacyVerifyUser(member) { + const cli = MatrixClientPeg.get(); + const verificationRequestPromise = cli.requestVerification(member.userId); + dis.dispatch({ + action: "set_right_panel_phase", + phase: RIGHT_PANEL_PHASES.EncryptionPanel, + refireParams: {member, verificationRequestPromise}, + }); +} + function verifyUser(user) { const cli = MatrixClientPeg.get(); const dmRoom = findDMForUser(cli, user.userId); @@ -1355,9 +1365,15 @@ const BasicUserInfo = ({room, member, groupId, devices, isRoomEncrypted}) => { const hasCrossSigningKeys = useHasCrossSigningKeys(cli, member, canVerify, setUpdating ); - if (canVerify && hasCrossSigningKeys) { + if (canVerify) { verifyButton = ( - verifyUser(member)}> + { + if (hasCrossSigningKeys) { + verifyUser(member); + } else { + legacyVerifyUser(member); + } + }}> {_t("Verify")} ); From a8a499ce7d4c02c82faae74032b3a0395ac4cd64 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Fri, 6 Mar 2020 16:30:07 +0000 Subject: [PATCH 204/522] Translated using Weblate (Albanian) Currently translated at 99.7% (2135 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 974acb90c5..29a4aceec7 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2168,5 +2168,8 @@ "Create Account": "Krijoni Llogari", "Displays information about a user": "Shfaq të dhëna rreth një përdoruesi", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Që të njoftoni një problem sigurie lidhur me Matrix-in, ju lutemi, lexoni Rregulla Tregimi Çështjes Sigurie te Matrix.org.", - "Mark all as read": "Vëru të tërave shenjë si të lexuara" + "Mark all as read": "Vëru të tërave shenjë si të lexuara", + "Not currently indexing messages for any room.": "Pa indeksuar aktualisht mesazhe nga ndonjë dhomë.", + "Currently indexing: %(currentRoom)s.": "Aktualisht nën indeksim: %(currentRoom)s.", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s nga %(totalRooms)s" } From e4d323d2f29ff61c24fb85784a038791da67a4f6 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 6 Mar 2020 14:23:20 -0700 Subject: [PATCH 205/522] Disable edits on redacted events Fixes https://github.com/vector-im/riot-web/issues/12633 --- src/components/views/messages/MessageActionBar.js | 7 +++++++ src/utils/EventUtils.js | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/views/messages/MessageActionBar.js b/src/components/views/messages/MessageActionBar.js index e07e39b971..fbc864caf2 100644 --- a/src/components/views/messages/MessageActionBar.js +++ b/src/components/views/messages/MessageActionBar.js @@ -121,10 +121,12 @@ export default class MessageActionBar extends React.PureComponent { componentDidMount() { this.props.mxEvent.on("Event.decrypted", this.onDecrypted); + this.props.mxEvent.on("Event.beforeRedaction", this.onBeforeRedaction); } componentWillUnmount() { this.props.mxEvent.removeListener("Event.decrypted", this.onDecrypted); + this.props.mxEvent.removeListener("Event.beforeRedaction", this.onBeforeRedaction); } onDecrypted = () => { @@ -133,6 +135,11 @@ export default class MessageActionBar extends React.PureComponent { this.forceUpdate(); }; + onBeforeRedaction = () => { + // When an event is redacted, we can't edit it so update the available actions. + this.forceUpdate(); + }; + onFocusChange = (focused) => { if (!this.props.onFocusChange) { return; diff --git a/src/utils/EventUtils.js b/src/utils/EventUtils.js index 8acf5ae396..7e33aaed81 100644 --- a/src/utils/EventUtils.js +++ b/src/utils/EventUtils.js @@ -46,7 +46,7 @@ export function isContentActionable(mxEvent) { } export function canEditContent(mxEvent) { - if (mxEvent.status === EventStatus.CANCELLED || mxEvent.getType() !== "m.room.message") { + if (mxEvent.status === EventStatus.CANCELLED || mxEvent.getType() !== "m.room.message" || mxEvent.isRedacted()) { return false; } const content = mxEvent.getOriginalContent(); From 7a640522feb5e9e1acd4ad3559a4d1cfcfbd1cb2 Mon Sep 17 00:00:00 2001 From: Osoitz Date: Fri, 6 Mar 2020 17:33:11 +0000 Subject: [PATCH 206/522] Translated using Weblate (Basque) Currently translated at 100.0% (2142 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eu/ --- src/i18n/strings/eu.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index 8b781c2119..f326faa3f7 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -2169,5 +2169,11 @@ "Indexed messages:": "Indexatutako mezuak:", "Indexed rooms:": "Indexatutako gelak:", "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s / %(totalRooms)s", - "Message downloading sleep time(ms)": "Mezuen deskargaren itxarote tartea (ms)" + "Message downloading sleep time(ms)": "Mezuen deskargaren itxarote tartea (ms)", + "Displays information about a user": "Erabiltzaileari buruzko informazioa erakusten du", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Matrix-ekin lotutako segurtasun arazo baten berri emateko, irakurri Segurtasun ezagutarazte gidalerroak.", + "Mark all as read": "Markatu denak irakurrita gisa", + "Not currently indexing messages for any room.": "Orain ez da inolako gelako mezurik indexatzen.", + "Currently indexing: %(currentRoom)s.": "Orain indexatzen: %(currentRoom)s.", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s / %(totalRooms)s" } From b138f1921fbbdbb48ab082798caf16aebace08fb Mon Sep 17 00:00:00 2001 From: Szimszon Date: Fri, 6 Mar 2020 17:05:55 +0000 Subject: [PATCH 207/522] Translated using Weblate (Hungarian) Currently translated at 100.0% (2142 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 65019b7b6f..18aa375944 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2176,5 +2176,8 @@ "Create Account": "Fiók létrehozása", "Displays information about a user": "A felhasználóról információ megjelenítése", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Matrix-szal kapcsolatos biztonsági hibák jelentésével kapcsolatban kérlek olvasd el a Matrix.org Biztonsági hiba közzétételi szabályzatot.", - "Mark all as read": "Mindent olvasottnak jelöl" + "Mark all as read": "Mindent olvasottnak jelöl", + "Not currently indexing messages for any room.": "Jelenleg egyik szoba indexelése sem történik.", + "Currently indexing: %(currentRoom)s.": "Indexelés alatt jelenleg: %(currentRoom)s.", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s / %(totalRooms)s" } From 0be4a15bb2ff7453525624f73eda1c294cee1828 Mon Sep 17 00:00:00 2001 From: MamasLT Date: Fri, 6 Mar 2020 17:26:47 +0000 Subject: [PATCH 208/522] Translated using Weblate (Lithuanian) Currently translated at 43.5% (932 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/lt/ --- src/i18n/strings/lt.json | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json index cf563c29f3..4476c21609 100644 --- a/src/i18n/strings/lt.json +++ b/src/i18n/strings/lt.json @@ -89,7 +89,7 @@ "Remove from Directory": "Šalinti iš katalogo", "Download this file": "Atsisiųsti šį failą", "Saturday": "Šeštadienis", - "Remember, you can always set an email address in user settings if you change your mind.": "Nepamirškite, kad galite, bet kada įrašyti savo el. pašto adresą paskyros nustatymuose.", + "Remember, you can always set an email address in user settings if you change your mind.": "Nepamirškite, kad jei persigalvosite, tai bet kada galite nustatyti el. pašto adresą vartotojo nustatymuose.", "Direct Chat": "Tiesioginis pokalbis", "The server may be unavailable or overloaded": "Gali būti, kad serveris yra neprieinamas arba perkrautas", "Online": "Prisijungęs", @@ -751,7 +751,7 @@ "Add Email Address": "Pridėti el. pašto adresą", "Add Phone Number": "Pridėti telefono numerį", "Whether or not you're logged in (we don't record your username)": "Nepriklausomai nuo to ar jūs prisijungę (mes neįrašome jūsų vartotojo vardo)", - "Chat with Riot Bot": "Kalbėtis su Riot botu", + "Chat with Riot Bot": "Kalbėtis su Riot Botu", "Sign In": "Prisijungti", "Explore rooms": "Žvalgyti kambarius", "Your Riot is misconfigured": "Jūsų Riot yra neteisingai sukonfigūruotas", @@ -922,5 +922,23 @@ "A verification email will be sent to your inbox to confirm setting your new password.": "Patvirtinimo laiškas bus išsiųstas į jūsų pašto dėžutę tam, kad patvirtintumėte naujo slaptažodžio nustatymą.", "Set a new password": "Nustatykite naują slaptažodį", "Create account": "Sukurti paskyrą", - "Create your account": "Sukurkite savo paskyrą" + "Create your account": "Sukurkite savo paskyrą", + "Change identity server": "Pakeisti tapatybės serverį", + "Change": "Keisti", + "Change room avatar": "Keisti kambario avatarą", + "Change room name": "Keisti kambario pavadinimą", + "Change main address for the room": "Keisti pagrindinį kambario adresą", + "Change history visibility": "Keisti istorijos matomumą", + "Change permissions": "Keisti leidimus", + "Change topic": "Keisti temą", + "Change settings": "Keisti nustatymus", + "Select the roles required to change various parts of the room": "Pasirinkite įvairių kambario dalių keitimui reikalingas roles", + "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Jūs neturėsite galimybės atšaukti šio keitimo, kadangi jūs žeminate savo privilegijas kambaryje. Jei jūs esate paskutinis privilegijuotas vartotojas kambaryje, atgauti privilegijas bus neįmanoma.", + "Failed to change power level": "Nepavyko pakeisti galios lygio", + "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Jūs neturėsite galimybės atšaukti šio keitimo, kadangi jūs paaukštinate vartotoją, suteikdami tokį patį galios lygį, kokį turite jūs.", + "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Ar tikrai norite pašalinti (ištrinti) šį įvykį? Atkreipkite dėmesį į tai, kad jei jūs ištrinsite kambario pavadinimo arba temos keitimo įvykį, tai gali atšaukti patį pakeitimą.", + "We recommend you change your password and recovery key in Settings immediately": "Mes rekomenduojame nedelsiant Nustatymuose pasikeisti jūsų slaptažodį ir atgavimo raktą", + "Email (optional)": "El. paštas (neprivaloma)", + "If you didn't set the new recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Jei jūs nenustatėte naujo paskyros atgavimo metodo, tada gali būti, kad užpuolikas bando patekti į jūsų paskyrą. Nedelsiant Nustatymuose pakeiskite savo paskyros slaptažodį ir nustatykite naują paskyros atgavimo metodą.", + "If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Jei jūs nepašalinote paskyros atgavimo metodo, tada gali būti, kad užpuolikas bando patekti į jūsų paskyrą. Nedelsiant Nustatymuose pakeiskite savo paskyros slaptažodį ir nustatykite naują paskyros atgavimo metodą." } From 6aeca7b8533806c6d859339c1dfd0be0c5eda424 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 6 Mar 2020 17:43:10 -0700 Subject: [PATCH 209/522] UX polish for custom themes --- res/css/_common.scss | 7 ++- .../tabs/user/GeneralUserSettingsTab.js | 59 ++++++++++++------- src/i18n/strings/en_EN.json | 1 + 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/res/css/_common.scss b/res/css/_common.scss index e062e0bd73..a4ef603242 100644 --- a/res/css/_common.scss +++ b/res/css/_common.scss @@ -42,10 +42,15 @@ pre, code { font-size: 100% !important; } -.error, .warning { +.error, .warning, +.text-error, .text-warning { color: $warning-color; } +.text-success { + color: $accent-color; +} + b { // On Firefox, the default weight for `` is `bolder` which results in no bold // effect since we only have specific weights of our fonts available. diff --git a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js index 7af9aae146..d0509644b5 100644 --- a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js @@ -62,7 +62,7 @@ export default class GeneralUserSettingsTab extends React.Component { msisdns: [], ...this._calculateThemeState(), customThemeUrl: "", - customThemeError: "", + customThemeMessage: {isError: false, text: ""}, }; this.dispatcherRef = dis.register(this._onAction); @@ -281,22 +281,30 @@ export default class GeneralUserSettingsTab extends React.Component { if (!currentThemes) currentThemes = []; currentThemes = currentThemes.map(c => c); // cheap clone + if (this._themeTimer) { + clearTimeout(this._themeTimer); + } + try { const r = await fetch(this.state.customThemeUrl); const themeInfo = await r.json(); if (!themeInfo || typeof(themeInfo['name']) !== 'string' || typeof(themeInfo['colors']) !== 'object') { - console.log(themeInfo); - this.setState({customThemeError: _t("Invalid theme schema.")}); + this.setState({customThemeMessage: {text: _t("Invalid theme schema."), isError: true}}); return; } currentThemes.push(themeInfo); } catch (e) { console.error(e); - this.setState({customThemeError: _t("Error downloading theme information.")}); + this.setState({customThemeMessage: {text: _t("Error downloading theme information."), isError: true}}); + return; // Don't continue on error } await SettingsStore.setValue("custom_themes", null, SettingLevel.ACCOUNT, currentThemes); - this.setState({customThemeUrl: "", customThemeError: ""}); + this.setState({customThemeUrl: "", customThemeMessage: {text: _t("Theme added!"), isError: false}}); + + this._themeTimer = setTimeout(() => { + this.setState({customThemeMessage: {text: "", isError: false}}); + }, 3000); }; _onCustomThemeChange = (e) => { @@ -400,22 +408,33 @@ export default class GeneralUserSettingsTab extends React.Component { let customThemeForm; if (SettingsStore.isFeatureEnabled("feature_custom_themes")) { + let messageElement = null; + if (this.state.customThemeMessage.text) { + if (this.state.customThemeMessage.isError) { + messageElement =
{this.state.customThemeMessage.text}
; + } else { + messageElement =
{this.state.customThemeMessage.text}
; + } + } customThemeForm = ( -
- -
{this.state.customThemeError}
- {_t("Add theme")} - +
+
+ + {_t("Add theme")} + {messageElement} + +
); } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 57e4bcb1cc..6463c7474f 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -706,6 +706,7 @@ "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them", "Invalid theme schema.": "Invalid theme schema.", "Error downloading theme information.": "Error downloading theme information.", + "Theme added!": "Theme added!", "Profile": "Profile", "Email addresses": "Email addresses", "Phone numbers": "Phone numbers", From 661508ddf8323d4fc8daad9663376bc9e203965a Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 6 Mar 2020 17:52:16 -0700 Subject: [PATCH 210/522] Order theme names in the dropdown --- .../views/settings/tabs/user/GeneralUserSettingsTab.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js index d0509644b5..e9b30430a3 100644 --- a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js @@ -438,6 +438,12 @@ export default class GeneralUserSettingsTab extends React.Component { ); } + const themes = Object.entries(enumerateThemes()) + .map(p => ({id: p[0], name: p[1]})); // convert pairs to objects for code readability + const builtInThemes = themes.filter(p => !p.id.startsWith("custom-")); + const customThemes = themes.filter(p => !builtInThemes.includes(p)) + .sort((a, b) => a.name.localeCompare(b.name)); + const orderedThemes = [...builtInThemes, ...customThemes]; return (
{_t("Theme")} @@ -446,8 +452,8 @@ export default class GeneralUserSettingsTab extends React.Component { value={this.state.theme} onChange={this._onThemeChange} disabled={this.state.useSystemTheme} > - {Object.entries(enumerateThemes()).map(([theme, text]) => { - return ; + {orderedThemes.map(theme => { + return ; })} {customThemeForm} From 7850c506b78a1e3d76df35b7e5a1c7a6189027a3 Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Fri, 6 Mar 2020 22:17:49 -0600 Subject: [PATCH 211/522] When room name is changed, show both the old and new name Signed-off-by: Aaron Raimist --- src/TextForEvent.js | 6 ++++-- src/i18n/strings/en_EN.json | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/TextForEvent.js b/src/TextForEvent.js index d4003058c8..79083e351c 100644 --- a/src/TextForEvent.js +++ b/src/TextForEvent.js @@ -127,9 +127,11 @@ function textForRoomNameEvent(ev) { if (!ev.getContent().name || ev.getContent().name.trim().length === 0) { return _t('%(senderDisplayName)s removed the room name.', {senderDisplayName}); } - return _t('%(senderDisplayName)s changed the room name to %(roomName)s.', { + debugger; + return _t('%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.', { senderDisplayName, - roomName: ev.getContent().name, + oldRoomName: ev.getPrevContent().name, + newRoomName: ev.getContent().name, }); } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 01ba458a2f..8b4e9417bb 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -228,7 +228,7 @@ "%(senderName)s kicked %(targetName)s.": "%(senderName)s kicked %(targetName)s.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s changed the topic to \"%(topic)s\".", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s removed the room name.", - "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s changed the room name to %(roomName)s.", + "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.", "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s upgraded this room.", "%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s made the room public to whoever knows the link.", "%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s made the room invite only.", From 832f904cdb5bf2413015685267332d65da49242b Mon Sep 17 00:00:00 2001 From: Tentarial Date: Sat, 7 Mar 2020 09:12:29 +0000 Subject: [PATCH 212/522] Translated using Weblate (German) Currently translated at 77.3% (1656 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 42 +++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 9a655b041c..46f2dfacae 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -110,7 +110,7 @@ "Upload file": "Datei hochladen", "Users": "Benutzer", "Verification Pending": "Verifizierung ausstehend", - "Video call": "Video-Anruf", + "Video call": "Videoanruf", "Voice call": "Sprachanruf", "VoIP conference finished.": "VoIP-Konferenz wurde beendet.", "VoIP conference started.": "VoIP-Konferenz gestartet.", @@ -250,7 +250,7 @@ "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Es wurde versucht, einen bestimmten Punkt im Chatverlauf dieses Raumes zu laden. Dir fehlt jedoch die Berechtigung, die betreffende Nachricht zu sehen.", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Es wurde versucht, einen bestimmten Punkt im Chatverlauf dieses Raumes zu laden, der Punkt konnte jedoch nicht gefunden werden.", "Unknown room %(roomId)s": "Unbekannter Raum %(roomId)s", - "You seem to be in a call, are you sure you want to quit?": "Du scheinst in einem Anruf zu sein. Bist du sicher schließen zu wollen?", + "You seem to be in a call, are you sure you want to quit?": "Du scheinst in einem Gespräch zu sein, bist du sicher, dass du aufhören willst?", "You seem to be uploading files, are you sure you want to quit?": "Du scheinst Dateien hochzuladen. Bist du sicher schließen zu wollen?", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Du wirst diese Änderung nicht rückgängig machen können, da der Benutzer dasselbe Berechtigungslevel wie du selbst erhalten wird.", "Make Moderator": "Zum Moderator ernennen", @@ -400,8 +400,8 @@ "Enable Notifications": "Benachrichtigungen aktivieren", "Failed to upload profile picture!": "Hochladen des Profilbild's fehlgeschlagen!", "Incoming call from %(name)s": "Eingehender Anruf von %(name)s", - "Incoming video call from %(name)s": "Eingehender Video-Anruf von %(name)s", - "Incoming voice call from %(name)s": "Eingehender Sprach-Anruf von %(name)s", + "Incoming video call from %(name)s": "Eingehender Videoanruf von %(name)s", + "Incoming voice call from %(name)s": "Eingehender Sprachanruf von %(name)s", "Join as voice or video.": "Per Sprachanruf oder Videoanruf beitreten.", "Last seen": "Zuletzt gesehen", "No display name": "Kein Anzeigename", @@ -780,7 +780,7 @@ "Developer Tools": "Entwicklerwerkzeuge", "Preparing to send logs": "Senden von Logs wird vorbereitet", "Remember, you can always set an email address in user settings if you change your mind.": "Vergiss nicht, dass du in den Benutzereinstellungen jederzeit eine E-Mail-Adresse setzen kannst, wenn du deine Meinung änderst.", - "Explore Account Data": "Benutzerkonto-Daten analysieren", + "Explore Account Data": "Konto-Daten erkunden", "All messages (noisy)": "Alle Nachrichten (laut)", "Saturday": "Samstag", "I understand the risks and wish to continue": "Ich verstehe das Risiko und möchte fortfahren", @@ -906,7 +906,7 @@ "Permission Required": "Berechtigung benötigt", "You do not have permission to start a conference call in this room": "Du hast keine Berechtigung um ein Konferenzgespräch in diesem Raum zu starten", "Failed to remove widget": "Widget konnte nicht entfernt werden", - "An error ocurred whilst trying to remove the widget from the room": "Ein Fehler trat auf, während versucht wurde das Widget aus diesem Raum zu entfernen", + "An error ocurred whilst trying to remove the widget from the room": "Ein Fehler trat auf während versucht wurde, das Widget aus diesem Raum zu entfernen", "System Alerts": "System-Benachrichtigung", "Only room administrators will see this warning": "Nur Raum-Administratoren werden diese Nachricht sehen", "Please contact your service administrator to continue using the service.": "Bitte kontaktiere deinen Systemadministrator um diesen Dienst weiter zu nutzen.", @@ -1548,7 +1548,7 @@ "Whether you're using Riot as an installed Progressive Web App": "Ob Sie Riot als installierte progressive Web-App verwenden", "Your user agent": "Ihr User-Agent", "The information being sent to us to help make Riot better includes:": "Zu den Informationen, die uns zugesandt werden, um zu helfen, Riot besser zu machen, gehören:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Es sind unbekannte Sitzungen in diesem Raum: Wenn Sie ohne Verifizierung fortfahren, wird es für jemanden möglich sein, Ihren Anruf zu belauschen.", + "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Es sind unbekannte Sitzungen in diesem Raum: Wenn du ohne Verifizierung fortfährst, wird es für jemanden möglich sein, deinen Anruf zu belauschen.", "If you cancel now, you won't complete verifying the other user.": "Wenn Sie jetzt abbrechen, werden Sie die Verifizierung des anderen Nutzers nicht beenden können.", "If you cancel now, you won't complete verifying your other session.": "Wenn Sie jetzt abbrechen, werden Sie die Verifizierung der anderen Sitzung nicht beenden können.", "If you cancel now, you won't complete your secret storage operation.": "Wenn Sie jetzt abbrechen, werden Sie die Geheimlagerungsoperation nicht beenden können.", @@ -1604,7 +1604,7 @@ "No sessions with registered encryption keys": "Keine Sitzungen mit registrierten Verschlüsselungsschlüsseln", "Room %(name)s": "Raum %(name)s", "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "Ein Upgrade dieses Raums schaltet die aktuelle Instanz des Raums ab und erstellt einen aktualisierten Raum mit demselben Namen.", - "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) hat sich zu einer neuen Sitzung angemeldet, ohne sie zu überprüfen:", + "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) hat sich zu einer neuen Sitzung angemeldet, ohne sie zu verifizieren:", "%(count)s verified sessions|other": "%(count)s verifizierte Sitzungen", "Hide verified sessions": "Verifizierte Sitzungen ausblenden", "%(count)s sessions|other": "%(count)s Sitzungen", @@ -1656,5 +1656,29 @@ "Scan this unique code": "Scanne diesen einzigartigen Code", "or": "oder", "Compare unique emoji": "Vergleiche einzigartige Emojis", - "Start": "Starte" + "Start": "Starte", + "Discovery": "Entdeckung", + "Done": "Erledigt", + "Manually Verify": "Manuell verifizieren", + "Trusted": "Vertrauenswürdig", + "Not trusted": "Nicht vertrauenswürdig", + "%(count)s verified sessions|one": "1 verifizierte Sitzung", + "%(count)s sessions|one": "%(count)s Sitzung", + "Messages in this room are not end-to-end encrypted.": "Nachrichten in diesem Raum sind nicht Ende-zu-Ende verschlüsselt.", + "Security": "Sicherheit", + "Ask %(displayName)s to scan your code:": "Bitte %(displayName)s, deinen Code zu scannen:", + "Verify by emoji": "Verifizierung durch Emojis", + "Verify by comparing unique emoji.": "Verifizierung durch den Vergleich einzigartiger Emojis.", + "You've successfully verified %(displayName)s!": "Du hast %(displayName)s erfolgreich verifiziert!", + "Got it": "Verstanden", + "Widget added by": "Widget hinzugefügt von", + "This widget may use cookies.": "Dieses Widget kann Cookies verwenden.", + "More options": "Weitere Optionen", + "Terms of Service": "Nutzungsbedingungen", + "To continue you need to accept the terms of this service.": "Um fortzufahren, musst du die Bedingungen dieses Dienstes akzeptieren.", + "Service": "Dienst", + "Summary": "Zusammenfassung", + "Document": "Dokument", + "Explore": "Erkunde", + "Explore rooms": "Erkunde Räume" } From c0abae29287759b7a1b5e47251087bebcf4be561 Mon Sep 17 00:00:00 2001 From: Bamstam Date: Sat, 7 Mar 2020 09:16:09 +0000 Subject: [PATCH 213/522] Translated using Weblate (German) Currently translated at 77.3% (1656 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 46f2dfacae..09fbf1dfe1 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -525,7 +525,7 @@ "Invalid community ID": "Ungültige Community-ID", "'%(groupId)s' is not a valid community ID": "'%(groupId)s' ist keine gültige Community-ID", "New community ID (e.g. +foo:%(localDomain)s)": "Neue Community-ID (z. B. +foo:%(localDomain)s)", - "Remove from community": "Aus Community entfernen", + "Remove from community": "Aus der Community entfernen", "Failed to remove user from community": "Entfernen des Benutzers aus der Community fehlgeschlagen", "Filter community members": "Community-Mitglieder filtern", "Filter community rooms": "Community-Räume filtern", From 69bfabdcf8db0696709740bd2b59101a73a98515 Mon Sep 17 00:00:00 2001 From: Krombel Date: Sat, 7 Mar 2020 09:23:52 +0000 Subject: [PATCH 214/522] Translated using Weblate (German) Currently translated at 77.3% (1656 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 09fbf1dfe1..9ce8b9140b 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -556,7 +556,7 @@ "Message removed": "Nachricht entfernt", "Mention": "Erwähnen", "Invite": "Einladen", - "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Das Löschen eines Widgets entfernt das Widget für alle Benutzer in diesem Raum. Möchtest du dieses Widget wirklich löschen?", + "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Das Löschen eines Widgets entfernt es für alle Nutzer in diesem Raum. Möchtest du dieses Widget wirklich löschen?", "Mirror local video feed": "Lokalen Video-Feed spiegeln", "Failed to withdraw invitation": "Die Einladung konnte nicht zurückgezogen werden", "Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Community-IDs dürfen nur die folgenden Zeichen enthalten: a-z, 0-9, or '=_-./'", From dd0d98b997a7f7061f7360d850b50cc483208793 Mon Sep 17 00:00:00 2001 From: natowi Date: Sat, 7 Mar 2020 09:24:32 +0000 Subject: [PATCH 215/522] Translated using Weblate (German) Currently translated at 77.3% (1656 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 9ce8b9140b..c5ec81b3a1 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1680,5 +1680,6 @@ "Summary": "Zusammenfassung", "Document": "Dokument", "Explore": "Erkunde", - "Explore rooms": "Erkunde Räume" + "Explore rooms": "Erkunde Räume", + "Maximize apps": "Apps maximieren" } From 356120f0da3ee54190f46313733ed30519d5c45d Mon Sep 17 00:00:00 2001 From: "@a2sc:matrix.org" Date: Sat, 7 Mar 2020 09:34:40 +0000 Subject: [PATCH 216/522] Translated using Weblate (German) Currently translated at 77.3% (1656 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index c5ec81b3a1..144362e556 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1681,5 +1681,17 @@ "Document": "Dokument", "Explore": "Erkunde", "Explore rooms": "Erkunde Räume", - "Maximize apps": "Apps maximieren" + "Maximize apps": "Apps maximieren", + "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Dein bereitgestellter Signaturschlüssel passt zu dem Schlüssel, der von %(userId)s's Sitzung %(deviceId)s empfangen wurde. Sitzung wird als verifiziert markiert.", + "Match system theme": "An System-Design anpassen", + "Verify this session by completing one of the following:": "Verifiziere diese Sitzung, indem du eine der folgenden Aktionen ausführst:", + "Your homeserver does not support session management.": "Dein Heimserver unterstützt keine Sitzungsverwaltung.", + "Unable to load session list": "Sitzungsliste kann nicht geladen werden", + "Delete %(count)s sessions|one": "%(count)s Sitzung löschen", + "This session is backing up your keys. ": "Diese Sitzung sichert deine Schlüssel.", + "Connect this session to Key Backup": "Diese Sitzung mit der Schlüsselsicherung verbinden", + "Backup has a signature from unknown session with ID %(deviceId)s": "Die Sicherung hat eine Signatur von einer unbekannten Sitzung mit der ID %(deviceId)s", + "Backup has a valid signature from this session": "Die Sicherung hat eine gültige Signatur von dieser Sitzung", + "Backup has an invalid signature from this session": "Die Sicherung hat eine ungültige Signatur von dieser Sitzung", + "Discovery options will appear once you have added an email above.": "Erkennungsoptionen werden angezeigt, sobald oben eine E-Mail hinzugefügt wurde." } From 47d73e3a644d22a39a3477e71f425c2ad7974467 Mon Sep 17 00:00:00 2001 From: Tentarial Date: Sat, 7 Mar 2020 09:41:16 +0000 Subject: [PATCH 217/522] Translated using Weblate (German) Currently translated at 77.4% (1657 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 144362e556..3bc50b66f6 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1693,5 +1693,5 @@ "Backup has a signature from unknown session with ID %(deviceId)s": "Die Sicherung hat eine Signatur von einer unbekannten Sitzung mit der ID %(deviceId)s", "Backup has a valid signature from this session": "Die Sicherung hat eine gültige Signatur von dieser Sitzung", "Backup has an invalid signature from this session": "Die Sicherung hat eine ungültige Signatur von dieser Sitzung", - "Discovery options will appear once you have added an email above.": "Erkennungsoptionen werden angezeigt, sobald oben eine E-Mail hinzugefügt wurde." + "Discovery options will appear once you have added an email above.": "Entdeckungsoptionen werden angezeigt, sobald oben eine E-Mail hinzugefügt wurde." } From 36de51d0345446a70baecbc630579093277be4df Mon Sep 17 00:00:00 2001 From: "@a2sc:matrix.org" Date: Sat, 7 Mar 2020 09:41:21 +0000 Subject: [PATCH 218/522] Translated using Weblate (German) Currently translated at 77.4% (1657 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 3bc50b66f6..18e52178aa 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1693,5 +1693,6 @@ "Backup has a signature from unknown session with ID %(deviceId)s": "Die Sicherung hat eine Signatur von einer unbekannten Sitzung mit der ID %(deviceId)s", "Backup has a valid signature from this session": "Die Sicherung hat eine gültige Signatur von dieser Sitzung", "Backup has an invalid signature from this session": "Die Sicherung hat eine ungültige Signatur von dieser Sitzung", - "Discovery options will appear once you have added an email above.": "Entdeckungsoptionen werden angezeigt, sobald oben eine E-Mail hinzugefügt wurde." + "Discovery options will appear once you have added an email above.": "Entdeckungsoptionen werden angezeigt, sobald oben eine E-Mail hinzugefügt wurde.", + "Discovery options will appear once you have added a phone number above.": "Erkennungsoptionen werden angezeigt, sobald eine Telefonnummer hinzugefügt wurde." } From f2f8e5e2f64b8b6a92883e4a910863133bbe3a25 Mon Sep 17 00:00:00 2001 From: Tentarial Date: Sat, 7 Mar 2020 09:41:31 +0000 Subject: [PATCH 219/522] Translated using Weblate (German) Currently translated at 77.5% (1659 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 18e52178aa..afd9773f25 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1694,5 +1694,5 @@ "Backup has a valid signature from this session": "Die Sicherung hat eine gültige Signatur von dieser Sitzung", "Backup has an invalid signature from this session": "Die Sicherung hat eine ungültige Signatur von dieser Sitzung", "Discovery options will appear once you have added an email above.": "Entdeckungsoptionen werden angezeigt, sobald oben eine E-Mail hinzugefügt wurde.", - "Discovery options will appear once you have added a phone number above.": "Erkennungsoptionen werden angezeigt, sobald eine Telefonnummer hinzugefügt wurde." + "Discovery options will appear once you have added a phone number above.": "Entdeckungsoptionen werden angezeigt, sobald eine Telefonnummer hinzugefügt wurde." } From 212c970d9171038aa560e1fdcb6bf2144386e15f Mon Sep 17 00:00:00 2001 From: "@a2sc:matrix.org" Date: Sat, 7 Mar 2020 09:42:22 +0000 Subject: [PATCH 220/522] Translated using Weblate (German) Currently translated at 77.5% (1659 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index afd9773f25..1f3b295763 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1694,5 +1694,7 @@ "Backup has a valid signature from this session": "Die Sicherung hat eine gültige Signatur von dieser Sitzung", "Backup has an invalid signature from this session": "Die Sicherung hat eine ungültige Signatur von dieser Sitzung", "Discovery options will appear once you have added an email above.": "Entdeckungsoptionen werden angezeigt, sobald oben eine E-Mail hinzugefügt wurde.", - "Discovery options will appear once you have added a phone number above.": "Entdeckungsoptionen werden angezeigt, sobald eine Telefonnummer hinzugefügt wurde." + "Discovery options will appear once you have added a phone number above.": "Entdeckungsoptionen werden angezeigt, sobald eine Telefonnummer hinzugefügt wurde.", + "Close preview": "Vorschau schließen", + "Loading room preview": "Raumvorschau laden" } From f9f87defa4bfaf108e4f946c237d18881d9e0c25 Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Sat, 7 Mar 2020 12:36:24 -0600 Subject: [PATCH 221/522] Only show old room name if it exists --- src/TextForEvent.js | 13 +++++++++---- src/i18n/strings/en_EN.json | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/TextForEvent.js b/src/TextForEvent.js index 79083e351c..e897ec2911 100644 --- a/src/TextForEvent.js +++ b/src/TextForEvent.js @@ -127,11 +127,16 @@ function textForRoomNameEvent(ev) { if (!ev.getContent().name || ev.getContent().name.trim().length === 0) { return _t('%(senderDisplayName)s removed the room name.', {senderDisplayName}); } - debugger; - return _t('%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.', { + if (ev.getPrevContent().name) { + return _t('%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.', { + senderDisplayName, + oldRoomName: ev.getPrevContent().name, + newRoomName: ev.getContent().name, + }); + } + return _t('%(senderDisplayName)s changed the room name to %(roomName)s.', { senderDisplayName, - oldRoomName: ev.getPrevContent().name, - newRoomName: ev.getContent().name, + roomName: ev.getContent().name, }); } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 8b4e9417bb..ca955afcc9 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -229,6 +229,7 @@ "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s changed the topic to \"%(topic)s\".", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s removed the room name.", "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.", + "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s changed the room name to %(roomName)s.", "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s upgraded this room.", "%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s made the room public to whoever knows the link.", "%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s made the room invite only.", From 84f7dc9660996640d9e197dd0016778daa0de036 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Sat, 7 Mar 2020 02:39:39 +0000 Subject: [PATCH 222/522] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2142 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 83458cfa37..db7559fbb4 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2179,5 +2179,8 @@ "Show shortcuts to recently viewed rooms above the room list": "在聊天室清單上方顯示最近看過的聊天室的捷徑", "Displays information about a user": "顯示關於使用者的資訊", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "要回報與 Matrix 有關的安全性問題,請閱讀 Matrix.org 安全性揭露政策。", - "Mark all as read": "全部標示為已讀" + "Mark all as read": "全部標示為已讀", + "Not currently indexing messages for any room.": "目前未為任何聊天室編寫索引。", + "Currently indexing: %(currentRoom)s.": "目前正在製作索引:%(currentRoom)s。", + "%(doneRooms)s out of %(totalRooms)s": "%(totalRooms)s 中的 %(doneRooms)s" } From 7cf4b1238d6335c3411c936d0ed79b79a3f7c030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanislav=20Luke=C5=A1?= Date: Sun, 8 Mar 2020 11:37:56 +0000 Subject: [PATCH 223/522] Translated using Weblate (Czech) Currently translated at 99.9% (2141 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/cs/ --- src/i18n/strings/cs.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index e5c4cea2ff..46675489b4 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -2165,5 +2165,10 @@ "This session, or the other session": "Tato relace, nebo jiná", "We recommend you change your password and recovery key in Settings immediately": "Doporučujeme vám si v nastavení okamžitě změnit své heslo a obnovovací klíče", "exists": "existuje", - "The internet connection either session is using": "Internetové připojení používané jednou z relací" + "The internet connection either session is using": "Internetové připojení používané jednou z relací", + "Displays information about a user": "Zobrazuje informace o uživateli", + "Mark all as read": "Označit vše jako přečtené", + "Not currently indexing messages for any room.": "Aktuálně neindexujeme žádné zprávy.", + "Currently indexing: %(currentRoom)s.": "Aktuálně indexujeme: %(currentRoom)s.", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s z %(totalRooms)s" } From 0e7428f44c1af308acb8f13b433f3e8db51f7477 Mon Sep 17 00:00:00 2001 From: Nathan Follens Date: Sat, 7 Mar 2020 23:30:14 +0000 Subject: [PATCH 224/522] Translated using Weblate (Dutch) Currently translated at 100.0% (2142 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nl/ --- src/i18n/strings/nl.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index d4c8345392..300488b7df 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -2161,5 +2161,9 @@ "Indexed messages:": "Geïndexeerde berichten:", "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s van %(totalRooms)s", "Message downloading sleep time(ms)": "Wachttijd voor downloaden van berichten (ms)", - "Mark all as read": "Alles markeren als gelezen" + "Mark all as read": "Alles markeren als gelezen", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Bekijk eerst het beveiligingsopenbaarmakingsbeleid van Matrix.org als u een probleem met de beveiliging van Matrix wilt melden.", + "Not currently indexing messages for any room.": "Er worden momenteel voor geen enkel gesprek berichten geïndexeerd.", + "Currently indexing: %(currentRoom)s.": "Wordt geïndexeerd: %(currentRoom)s.", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s van %(totalRooms)s" } From b6a0921bff620f264649a5b7bb880b35f085436c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Sat, 7 Mar 2020 08:25:08 +0000 Subject: [PATCH 225/522] Translated using Weblate (French) Currently translated at 100.0% (2142 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 5a97f54218..b432fbf573 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2180,5 +2180,8 @@ "Show shortcuts to recently viewed rooms above the room list": "Afficher les raccourcis vers les salons vus récemment au-dessus de la liste des salons", "Displays information about a user": "Affiche des informations à propos de l’utilisateur", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Pour signaler un problème de sécurité lié à Matrix, consultez la politique de divulgation de sécurité de Matrix.org.", - "Mark all as read": "Tout marquer comme lu" + "Mark all as read": "Tout marquer comme lu", + "Not currently indexing messages for any room.": "N’indexe aucun message en ce moment.", + "Currently indexing: %(currentRoom)s.": "En ce moment, indexe : %(currentRoom)s.", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s sur %(totalRooms)s" } From 0cf5594b97bacce251759559c73a4aff71f4674b Mon Sep 17 00:00:00 2001 From: Tentarial Date: Sat, 7 Mar 2020 09:43:12 +0000 Subject: [PATCH 226/522] Translated using Weblate (German) Currently translated at 78.2% (1674 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 1f3b295763..4c47252cb4 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1696,5 +1696,11 @@ "Discovery options will appear once you have added an email above.": "Entdeckungsoptionen werden angezeigt, sobald oben eine E-Mail hinzugefügt wurde.", "Discovery options will appear once you have added a phone number above.": "Entdeckungsoptionen werden angezeigt, sobald eine Telefonnummer hinzugefügt wurde.", "Close preview": "Vorschau schließen", - "Loading room preview": "Raumvorschau laden" + "Loading room preview": "Lade Raumvorschau", + "Join the discussion": "Trete der Diskussion bei", + "Remove for everyone": "Für alle entfernen", + "Remove for me": "Für mich entfernen", + "Create your Matrix account on ": "Erstelle dein Matrix-Konto auf ", + "Preview": "Vorschau", + "Your Matrix account on ": "Dein Matrix-Konto auf " } From 291e5152e84bec4f1c85a9aeab59311917883d95 Mon Sep 17 00:00:00 2001 From: "@a2sc:matrix.org" Date: Sat, 7 Mar 2020 09:43:48 +0000 Subject: [PATCH 227/522] Translated using Weblate (German) Currently translated at 78.2% (1674 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 4c47252cb4..c2f20305d6 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1702,5 +1702,14 @@ "Remove for me": "Für mich entfernen", "Create your Matrix account on ": "Erstelle dein Matrix-Konto auf ", "Preview": "Vorschau", - "Your Matrix account on ": "Dein Matrix-Konto auf " + "Your Matrix account on ": "Dein Matrix-Konto auf ", + "Remove %(email)s?": "%(email)s entfernen?", + "Remove %(phone)s?": "%(phone)s entfernen?", + "Remove recent messages by %(user)s": "Letzte Nachrichten von %(user)s entfernen", + "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|other": "Du bist dabei %(count)s Nachrichten von %(user)s zu löschen, was nicht rückgängig gemacht werden kann. Fortfahren?", + "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "Du bist dabei eine Nachrichten von %(user)s zu löschen, was nicht rückgängig gemacht werden kann. Fortfahren?", + "Remove %(count)s messages|other": "%(count)s Nachrichten entfernen", + "Remove %(count)s messages|one": "Eine Nachricht entfernen", + "Remove recent messages": "Letzte Nachrichten entfernen", + "You're previewing %(roomName)s. Want to join it?": "Du betrachtest %(roomName)s. Willst du beitreten?" } From 0c4aac91a4423ddda076a66f6da2ffe63c7f58b6 Mon Sep 17 00:00:00 2001 From: catborise Date: Sat, 7 Mar 2020 09:24:51 +0000 Subject: [PATCH 228/522] Translated using Weblate (Turkish) Currently translated at 77.0% (1650 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/tr/ --- src/i18n/strings/tr.json | 46 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index bcf7fbbc35..36f526d841 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -1194,7 +1194,7 @@ "Failed to revoke invite": "Davetin geri çekilmesi başarısız", "Revoke invite": "Davet geri çekildi", "Invited by %(sender)s": "%(sender)s tarafından davet", - "Error updating main address": "Ana adres güncellemede hata", + "Error updating main address": "Ana adresi güncellemede hata", "Error removing alias": "Lakap silmede hata", "Main address": "Ana adres", "Invalid community ID": "Geçersiz topluluk ID si", @@ -1628,5 +1628,47 @@ "Your password": "Parolanız", "This session, or the other session": "Bu oturum veya diğer oturum", "New session": "Yeni oturum", - "This wasn't me": "Bu ben değildim" + "This wasn't me": "Bu ben değildim", + "Sign In or Create Account": "Oturum Açın veya Hesap Oluşturun", + "Use your account or create a new one to continue.": "Hesabınızı kullanın veya devam etmek için yeni bir tane oluşturun.", + "Create Account": "Hesap Oluştur", + "Displays information about a user": "Bir kullanıcı hakkındaki bilgileri görüntüler", + "Add another word or two. Uncommon words are better.": "Bir iki kelime daha ekleyin. Yaygın olmayan kelimeler daha iyi olur.", + "Recent years are easy to guess": "Güncel yılların tahmini kolaydır", + "Show typing notifications": "Yazma bildirimlerini göster", + "Order rooms by name": "Odaları isme göre sırala", + "Show rooms with unread notifications first": "Okunmamış bildirimlere sahip odaları önce göster", + "Enable message search in encrypted rooms": "Şifrelenmiş odalardaki mesaj aramayı aktifleştir", + "Messages containing @room": "@room odasındaki mesajlar", + "Scan this unique code": "Bu eşsiz kodu tara", + "or": "veya", + "Cancelling…": "İptal ediliyor…", + "Lock": "Kilit", + "Pin": "Şifre", + "Your homeserver does not support cross-signing.": "Ana sunucunuz çapraz imzalamayı desteklemiyor.", + "exists": "mevcut", + "This session is backing up your keys. ": "Bu oturum anahtarlarınızı yedekliyor. ", + "Your keys are not being backed up from this session.": "Anahtarlarınız bu oturum tarafından yedeklenmiyor.", + "Enable audible notifications for this session": "Bu oturum için sesli bildirimleri aktifleştir", + "Change topic": "Başlığı değiştir", + "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains.": "Bir metin mesajı gönderildi: +%(msisdn)s. Lütfen içerdiği doğrulama kodunu girin.", + "You have verified this user. This user has verified all of their sessions.": "Bu kullanıcıyı doğruladınız. Bu kullanıcı tüm oturumlarını doğruladı.", + "This room is end-to-end encrypted": "Bu oda uçtan uça şifreli", + "Some sessions in this encrypted room are not trusted": "Şifrelenmiş bu odadaki bazı oturumlar güvenilir değil", + "All sessions in this encrypted room are trusted": "Bu odadaki tün oturumlar güvenilir", + "Re-request encryption keys from your other sessions.": "Diğer oturumlardan şifreleme anahtarlarını yeniden talep et.", + "Encrypted by an unverified session": "Doğrulanmamış bir oturum tarafından şifrelenmiş", + "Encrypted by a deleted session": "Silinen bir oturumla şifrelenmiş", + "Invite only": "Sadece davetliler", + "Strikethrough": "Üstü çizili", + "Recent rooms": "Güncel odalar", + "Reject & Ignore user": "Kullanıcı Reddet & Yoksay", + "%(count)s unread messages including mentions.|one": "1 okunmamış bahis.", + "Unread mentions.": "Okunmamış bahisler.", + "Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "Davet geri çekilemiyor. Sunucu geçici bir problem yaşıyor olabilir yada daveti geri çekmek için gerekli izinlere sahip değilsin.", + "Mark all as read": "Tümünü okunmuş olarak işaretle", + "Incoming Verification Request": "Gelen Doğrulama İsteği", + "Use bots, bridges, widgets and sticker packs": "Botları, köprüleri, görsel bileşenleri ve çıkartma paketlerini kullan", + "Not sure of your password? Set a new one": "Şifrenizden emin değil misiniz? Yenisini ayalarla", + "Want more than a community? Get your own server": "Bir topluluktan fazlasınımı istiyorsunuz? Kendi sunucunuzu edinin" } From 47b1552ccc502ac4da4027a806b43af82879fb83 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Mon, 9 Mar 2020 13:35:59 +0000 Subject: [PATCH 229/522] Fix secret sharing names to match spec When sharing keys, we should use `m.cross_signing` prefix. Part of https://github.com/vector-im/riot-web/issues/12661 --- src/CrossSigningManager.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CrossSigningManager.js b/src/CrossSigningManager.js index 0cf2c9e2ac..2184eaf347 100644 --- a/src/CrossSigningManager.js +++ b/src/CrossSigningManager.js @@ -144,10 +144,10 @@ const onSecretRequested = async function({ } const callbacks = client.getCrossSigningCacheCallbacks(); if (!callbacks.getCrossSigningKeyCache) return; - if (name === "m.key.self_signing") { + if (name === "m.cross_signing.self_signing") { const key = await callbacks.getCrossSigningKeyCache("self_signing"); return key && encodeBase64(key); - } else if (name === "m.key.user_signing") { + } else if (name === "m.cross_signing.user_signing") { const key = await callbacks.getCrossSigningKeyCache("user_signing"); return key && encodeBase64(key); } From 23774057736f07a314093921b0dc809008d520a2 Mon Sep 17 00:00:00 2001 From: random Date: Mon, 9 Mar 2020 11:01:06 +0000 Subject: [PATCH 230/522] Translated using Weblate (Italian) Currently translated at 100.0% (2142 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 26a95062fd..a90ca5a2b6 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2159,5 +2159,26 @@ "Your homeserver does not support cross-signing.": "Il tuo homeserver non supporta la firma incrociata.", "Homeserver feature support:": "Funzioni supportate dall'homeserver:", "exists": "esiste", - "Verification Requests": "Richieste di verifica" + "Verification Requests": "Richieste di verifica", + "Sign In or Create Account": "Accedi o crea account", + "Use your account or create a new one to continue.": "Usa il tuo account o creane uno nuovo per continuare.", + "Create Account": "Crea account", + "Displays information about a user": "Mostra le informazioni di un utente", + "Order rooms by name": "Ordina stanze per nome", + "Show rooms with unread notifications first": "Mostra prima le stanze con notifiche non lette", + "Show shortcuts to recently viewed rooms above the room list": "Mostra scorciatoie per le stanze viste di recente sopra l'elenco stanze", + "Cancelling…": "Annullamento…", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Per segnalare un problema di sicurezza relativo a Matrix, leggi la Politica di divulgazione della sicurezza di Matrix.org .", + "Mark all as read": "Segna tutto come letto", + "Accepting…": "Accettazione…", + "Accepting …": "Accettazione …", + "Declining …": "Rifiuto …", + "Your account is not secure": "Il tuo account non è sicuro", + "Your password": "La tua password", + "This session, or the other session": "Questa o l'altra sessione", + "The internet connection either session is using": "La connessione internet di una sessione", + "We recommend you change your password and recovery key in Settings immediately": "Ti consigliamo di cambiare immediatamente la password e la chiave di recupero nelle impostazioni", + "Not currently indexing messages for any room.": "Attualmente non si stanno indicizzando i messaggi di alcuna stanza.", + "Currently indexing: %(currentRoom)s.": "Attualmente si indicizzano: %(currentRoom)s.", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s di %(totalRooms)s" } From c425d7f02f3a0ff1db8bb394d643c56352f8c020 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Mon, 9 Mar 2020 15:24:55 +0000 Subject: [PATCH 231/522] Make Mjolnir stop more robust Since Mjolnir is a shared instance, we need to be a bit more careful about clearing internal state than we do for components. This clears watcher and dispatcher refs in case `stop` is called multiple times (which can happen in prod as well as tests). --- src/mjolnir/Mjolnir.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/mjolnir/Mjolnir.js b/src/mjolnir/Mjolnir.js index 0c99306278..5836ffd57a 100644 --- a/src/mjolnir/Mjolnir.js +++ b/src/mjolnir/Mjolnir.js @@ -65,14 +65,14 @@ export class Mjolnir { } stop() { - SettingsStore.unwatchSetting(this._mjolnirWatchRef); + if (this._mjolnirWatchRef) { + SettingsStore.unwatchSetting(this._mjolnirWatchRef); + this._mjolnirWatchRef = null; + } - try { - if (this._dispatcherRef) dis.unregister(this._dispatcherRef); - } catch (e) { - console.error(e); - // Only the tests cause problems with this particular block of code. We should - // never be here in production. + if (this._dispatcherRef) { + dis.unregister(this._dispatcherRef); + this._dispatcherRef = null; } if (!MatrixClientPeg.get()) return; From ee9558cb0b548afd37330ed24b63c6eddf315096 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Mar 2020 16:26:43 +0100 Subject: [PATCH 232/522] change state from domainToAliases to local and alt aliases --- .../views/room_settings/AliasSettings.js | 163 ++++++------------ src/i18n/strings/en_EN.json | 2 +- 2 files changed, 55 insertions(+), 110 deletions(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index a52fa09c87..79317d3d1b 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -87,91 +87,59 @@ export default class AliasSettings extends React.Component { super(props); const state = { - domainToAliases: {}, // { domain.com => [#alias1:domain.com, #alias2:domain.com] } - remoteDomains: [], // [ domain.com, foobar.com ] - canonicalAlias: null, // #canonical:domain.com + altAliases: [], // [ #alias:domain.tld, ... ] + localAliases: [], // [ #alias:my-hs.tld, ... ] + canonicalAlias: null, // #canonical:domain.tld updatingCanonicalAlias: false, - localAliasesLoading: true, + localAliasesLoading: false, }; if (props.canonicalAliasEvent) { - state.canonicalAlias = props.canonicalAliasEvent.getContent().alias; + const content = props.canonicalAliasEvent.getContent(); + const altAliases = content.alt_aliases; + if (Array.isArray(altAliases)) { + state.altAliases = altAliases.slice(); + } + state.canonicalAlias = content.alias; } this.state = state; } - async componentWillMount() { - const cli = MatrixClientPeg.get(); + componentDidMount() { + return this.loadLocalAliases(); + } + + async loadLocalAliases() { + this.setState({ localAliasesLoading: true }); try { + const cli = MatrixClientPeg.get(); + let localAliases = []; if (await cli.doesServerSupportUnstableFeature("org.matrix.msc2432")) { const response = await cli.unstableGetLocalAliases(this.props.roomId); - const localAliases = response.aliases; - const localDomain = cli.getDomain(); - const domainToAliases = Object.assign( - {}, - // FIXME, any localhost alt_aliases will be ignored as they are overwritten by localAliases - this.aliasesToDictionary(this._getAltAliases()), - {[localDomain]: localAliases || []}, - ); - const remoteDomains = Object.keys(domainToAliases).filter((domain) => { - return domain !== localDomain && domainToAliases[domain].length > 0; - }); - this.setState({ domainToAliases, remoteDomains }); - } else { - const state = {}; - const localDomain = cli.getDomain(); - state.domainToAliases = this.aliasEventsToDictionary(this.props.aliasEvents || []); - state.remoteDomains = Object.keys(state.domainToAliases).filter((domain) => { - return domain !== localDomain && state.domainToAliases[domain].length > 0; - }); - this.setState(state); + if (Array.isArray(response.aliases)) { + localAliases = response.aliases; + } } + this.setState({ localAliases }); } finally { - this.setState({localAliasesLoading: false}); + this.setState({ localAliasesLoading: false }); } } - aliasesToDictionary(aliases) { - return aliases.reduce((dict, alias) => { - const domain = alias.split(":")[1]; - dict[domain] = dict[domain] || []; - dict[domain].push(alias); - return dict; - }, {}); - } - - aliasEventsToDictionary(aliasEvents) { // m.room.alias events - const dict = {}; - aliasEvents.forEach((event) => { - dict[event.getStateKey()] = ( - (event.getContent().aliases || []).slice() // shallow-copy - ); - }); - return dict; - } - - _getAltAliases() { - if (this.props.canonicalAliasEvent) { - const altAliases = this.props.canonicalAliasEvent.getContent().alt_aliases; - if (Array.isArray(altAliases)) { - return altAliases; - } - } - return []; - } - changeCanonicalAlias(alias) { if (!this.props.canSetCanonicalAlias) return; + const oldAlias = this.state.canonicalAlias; this.setState({ canonicalAlias: alias, updatingCanonicalAlias: true, }); - const eventContent = {}; - const altAliases = this._getAltAliases(); - if (altAliases) eventContent["alt_aliases"] = altAliases; + const eventContent = { + alt_aliases: this.state.altAliases, + }; + if (alias) eventContent["alias"] = alias; MatrixClientPeg.get().sendStateEvent(this.props.roomId, "m.room.canonical_alias", @@ -184,6 +152,7 @@ export default class AliasSettings extends React.Component { "or a temporary failure occurred.", ), }); + this.setState({canonicalAlias: oldAlias}); }).finally(() => { this.setState({updatingCanonicalAlias: false}); }); @@ -200,16 +169,10 @@ export default class AliasSettings extends React.Component { if (!alias.includes(':')) alias += ':' + localDomain; MatrixClientPeg.get().createAlias(alias, this.props.roomId).then(() => { - const localAliases = this.state.domainToAliases[localDomain] || []; - const domainAliases = Object.assign({}, this.state.domainToAliases); - domainAliases[localDomain] = [...localAliases, alias]; - this.setState({ - domainToAliases: domainAliases, - // Reset the add field - newAlias: "", + localAliases: this.state.localAliases.concat(alias), + newAlias: null, }); - if (!this.state.canonicalAlias) { this.changeCanonicalAlias(alias); } @@ -226,18 +189,13 @@ export default class AliasSettings extends React.Component { }; onLocalAliasDeleted = (index) => { - const localDomain = MatrixClientPeg.get().getDomain(); - - const alias = this.state.domainToAliases[localDomain][index]; - + const alias = this.state.localAliases[index]; // TODO: In future, we should probably be making sure that the alias actually belongs // to this room. See https://github.com/vector-im/riot-web/issues/7353 MatrixClientPeg.get().deleteAlias(alias).then(() => { - const localAliases = this.state.domainToAliases[localDomain].filter((a) => a !== alias); - const domainAliases = Object.assign({}, this.state.domainToAliases); - domainAliases[localDomain] = localAliases; - - this.setState({domainToAliases: domainAliases}); + const localAliases = this.state.localAliases.slice(); + localAliases.splice(index); + this.setState({localAliases}); if (this.state.canonicalAlias === alias) { this.changeCanonicalAlias(null); @@ -258,6 +216,15 @@ export default class AliasSettings extends React.Component { this.changeCanonicalAlias(event.target.value); }; + _getAliases() { + return this.state.altAliases.concat(this._getLocalNonAltAliases()); + } + + _getLocalNonAltAliases() { + const {altAliases} = this.state; + return this.state.localAliases.filter(alias => !altAliases.includes(alias)); + } + render() { const localDomain = MatrixClientPeg.get().getDomain(); @@ -269,15 +236,13 @@ export default class AliasSettings extends React.Component { element='select' id='canonicalAlias' label={_t('Main address')}> { - Object.keys(this.state.domainToAliases).map((domain, i) => { - return this.state.domainToAliases[domain].map((alias, j) => { - if (alias === this.state.canonicalAlias) found = true; - return ( - - ); - }); + this._getAliases().map((alias, i) => { + if (alias === this.state.canonicalAlias) found = true; + return ( + + ); }) } { @@ -289,53 +254,33 @@ export default class AliasSettings extends React.Component { ); - let remoteAliasesSection; - if (this.state.remoteDomains.length) { - remoteAliasesSection = ( -
-
- { _t("Remote addresses for this room:") } -
-
    - { this.state.remoteDomains.map((domain, i) => { - return this.state.domainToAliases[domain].map((alias, j) => { - return
  • {alias}
  • ; - }); - }) } -
-
- ); - } - let localAliasesList; if (this.state.localAliasesLoading) { const Spinner = sdk.getComponent("elements.Spinner"); localAliasesList = ; } else { - localAliasesList = ; + />); } return (
{canonicalAliasSection} {localAliasesList} - {remoteAliasesSection}
); } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 01ba458a2f..ccf232d86d 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1149,10 +1149,10 @@ "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "There was an error removing that alias. It may no longer exist or a temporary error occurred.", "Main address": "Main address", "not specified": "not specified", - "Remote addresses for this room:": "Remote addresses for this room:", "Local addresses for this room:": "Local addresses for this room:", "This room has no local addresses": "This room has no local addresses", "New address (e.g. #foo:%(localDomain)s)": "New address (e.g. #foo:%(localDomain)s)", + "New address (e.g. #foo:domain)": "New address (e.g. #foo:domain)", "Error updating flair": "Error updating flair", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.", "Invalid community ID": "Invalid community ID", From 38e99f3a68c3debfa56a732835346c40d631998a Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Mar 2020 16:29:04 +0100 Subject: [PATCH 233/522] add editable list for alt aliases --- .../views/room_settings/AliasSettings.js | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 79317d3d1b..7c766e3e31 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -158,6 +158,38 @@ export default class AliasSettings extends React.Component { }); } + changeAltAliases(altAliases) { + if (!this.props.canSetCanonicalAlias) return; + + this.setState({ + updatingCanonicalAlias: true, + altAliases, + }); + + const eventContent = {}; + + if (this.state.canonicalAlias) { + eventContent.alias = this.state.canonicalAlias; + } + if (altAliases) { + eventContent["alt_aliases"] = altAliases; + } + + MatrixClientPeg.get().sendStateEvent(this.props.roomId, "m.room.canonical_alias", + eventContent, "").catch((err) => { + console.error(err); + Modal.createTrackedDialog('Error updating alternative addresses', '', ErrorDialog, { + title: _t("Error updating main address"), + description: _t( + "There was an error updating the room's alternative addresses. It may not be allowed by the server " + + "or a temporary failure occurred.", + ), + }); + }).finally(() => { + this.setState({updatingCanonicalAlias: false}); + }); + } + onNewAliasChanged = (value) => { this.setState({newAlias: value}); }; @@ -216,6 +248,25 @@ export default class AliasSettings extends React.Component { this.changeCanonicalAlias(event.target.value); }; + onNewAltAliasChanged = (value) => { + this.setState({newAltAlias: value}); + } + + onAltAliasAdded = (alias) => { + const altAliases = this.state.altAliases.slice(); + if (!altAliases.some(a => a.trim() === alias.trim())) { + altAliases.push(alias.trim()); + this.changeAltAliases(altAliases); + this.setState({newAltAlias: ""}); + } + } + + onAltAliasDeleted = (index) => { + const altAliases = this.state.altAliases.slice(); + altAliases.splice(index, 1); + this.changeAltAliases(altAliases); + } + _getAliases() { return this.state.altAliases.concat(this._getLocalNonAltAliases()); } @@ -281,6 +332,22 @@ export default class AliasSettings extends React.Component {
{canonicalAliasSection} {localAliasesList} +
); } From eb539537f2d1bc75022a6d496f220fc8202b0e9b Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Mar 2020 16:31:07 +0100 Subject: [PATCH 234/522] add recommendations for alt aliases --- src/components/views/elements/EditableItemList.js | 3 ++- src/components/views/elements/Field.js | 5 ++++- src/components/views/room_settings/AliasSettings.js | 6 ++++++ src/i18n/strings/en_EN.json | 3 +++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/components/views/elements/EditableItemList.js b/src/components/views/elements/EditableItemList.js index c74fd6a4ee..3eb30c808c 100644 --- a/src/components/views/elements/EditableItemList.js +++ b/src/components/views/elements/EditableItemList.js @@ -123,7 +123,8 @@ export default class EditableItemList extends React.Component {
+ autoComplete="off" value={this.props.newItem || ""} onChange={this._onNewItemChanged} + list={this.props.suggestionsListId} /> {_t("Add")} diff --git a/src/components/views/elements/Field.js b/src/components/views/elements/Field.js index 7d5ccbb72d..8583c91a01 100644 --- a/src/components/views/elements/Field.js +++ b/src/components/views/elements/Field.js @@ -32,6 +32,8 @@ export default class Field extends React.PureComponent { element: PropTypes.oneOf(["input", "select", "textarea"]), // The field's type (when used as an ). Defaults to "text". type: PropTypes.string, + // id of a element for suggestions + list: PropTypes.string, // The field's label string. label: PropTypes.string, // The field's placeholder string. Defaults to the label. @@ -157,7 +159,7 @@ export default class Field extends React.PureComponent { render() { const { element, prefix, postfix, className, onValidate, children, - tooltipContent, flagInvalid, tooltipClassName, ...inputProps} = this.props; + tooltipContent, flagInvalid, tooltipClassName, list, ...inputProps} = this.props; const inputElement = element || "input"; @@ -169,6 +171,7 @@ export default class Field extends React.PureComponent { inputProps.onFocus = this.onFocus; inputProps.onChange = this.onChange; inputProps.onBlur = this.onBlur; + inputProps.list = list; const fieldInput = React.createElement(inputElement, inputProps, children); diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 7c766e3e31..aa6e6069aa 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -332,6 +332,11 @@ export default class AliasSettings extends React.Component {
{canonicalAliasSection} {localAliasesList} + + {this._getLocalNonAltAliases().map(alias => { + return Date: Mon, 9 Mar 2020 16:31:30 +0100 Subject: [PATCH 235/522] make domain postfix optional (not needed for alt aliases) --- src/components/views/room_settings/AliasSettings.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index aa6e6069aa..e7986cc1f5 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -46,6 +46,11 @@ class EditableAliasesList extends EditableItemList { }; _renderNewItemField() { + // if we don't need the RoomAliasField, + // we don't need to overriden version of _renderNewItemField + if (!this.props.domain) { + return super._renderNewItemField(); + } const RoomAliasField = sdk.getComponent('views.elements.RoomAliasField'); const onChange = (alias) => this._onNewItemChanged({target: {value: alias}}); return ( From 7079d70f188e3f17a8acff647611022ce81bfd3b Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Mar 2020 16:32:13 +0100 Subject: [PATCH 236/522] hide local aliases by default --- src/components/views/room_settings/AliasSettings.js | 5 ++++- src/i18n/strings/en_EN.json | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index e7986cc1f5..d2a2c0e5f7 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -336,7 +336,6 @@ export default class AliasSettings extends React.Component { return (
{canonicalAliasSection} - {localAliasesList} {this._getLocalNonAltAliases().map(alias => { return
); } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 6174ec7b15..4fa7df4c0f 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1156,6 +1156,7 @@ "Alternative addresses for this room:": "Alternative addresses for this room:", "This room has no alternative addresses": "This room has no alternative addresses", "New address (e.g. #foo:domain)": "New address (e.g. #foo:domain)", + "Local addresses (unmoderated content)": "Local addresses (unmoderated content)", "Error updating flair": "Error updating flair", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.", "Invalid community ID": "Invalid community ID", From 053ba1110af9ebb1621add803f956913d72d98a4 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Mar 2020 16:32:31 +0100 Subject: [PATCH 237/522] make pressing enter not reload riot when editable list is in form --- src/components/views/elements/EditableItemList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/elements/EditableItemList.js b/src/components/views/elements/EditableItemList.js index 3eb30c808c..ae3473ef0d 100644 --- a/src/components/views/elements/EditableItemList.js +++ b/src/components/views/elements/EditableItemList.js @@ -125,7 +125,7 @@ export default class EditableItemList extends React.Component { - + {_t("Add")} From f7cb633e3d004b60695f1757126529672f157daf Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Mar 2020 16:43:52 +0100 Subject: [PATCH 238/522] only load local aliases on mount when you can edit the canonical alias --- .../views/room_settings/AliasSettings.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index d2a2c0e5f7..c6e4d1e3ba 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -112,7 +112,11 @@ export default class AliasSettings extends React.Component { } componentDidMount() { - return this.loadLocalAliases(); + if (this.props.canSetCanonicalAlias) { + // load local aliases for providing recommendations + // for the canonical alias and alt_aliases + this.loadLocalAliases(); + } } async loadLocalAliases() { @@ -249,6 +253,16 @@ export default class AliasSettings extends React.Component { }); }; + onLocalAliasesToggled = (event) => { + // expanded + if (event.target.open) { + // if local aliases haven't been preloaded yet at component mount + if (!this.props.canSetCanonicalAlias && this.state.localAliases.length === 0) { + this.loadLocalAliases(); + } + } + }; + onCanonicalAliasChange = (event) => { this.changeCanonicalAlias(event.target.value); }; @@ -358,7 +372,7 @@ export default class AliasSettings extends React.Component { 'New address (e.g. #foo:domain)', )} /> -
+
{_t('Local addresses (unmoderated content)')} {localAliasesList}
From dcbbf31f042c5a07e0ef74124a39c9810287e3ab Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Mar 2020 16:50:34 +0100 Subject: [PATCH 239/522] fix lint --- src/components/views/room_settings/AliasSettings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index c6e4d1e3ba..0a7bd1d333 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -190,8 +190,8 @@ export default class AliasSettings extends React.Component { Modal.createTrackedDialog('Error updating alternative addresses', '', ErrorDialog, { title: _t("Error updating main address"), description: _t( - "There was an error updating the room's alternative addresses. It may not be allowed by the server " + - "or a temporary failure occurred.", + "There was an error updating the room's alternative addresses. " + + "It may not be allowed by the server or a temporary failure occurred.", ), }); }).finally(() => { From 8ee714f86dec46fd85c2f38522dc0599c6c6a635 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Mar 2020 16:50:48 +0100 Subject: [PATCH 240/522] show hand cursor over summary --- res/css/views/room_settings/_AliasSettings.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/css/views/room_settings/_AliasSettings.scss b/res/css/views/room_settings/_AliasSettings.scss index d4ae58e5b0..294902a1f0 100644 --- a/res/css/views/room_settings/_AliasSettings.scss +++ b/res/css/views/room_settings/_AliasSettings.scss @@ -26,3 +26,7 @@ limitations under the License. outline: none; box-shadow: none; } + +.mx_AliasSettings summary { + cursor: pointer; +} From 9961f810f12fe11eb4bec46af16b240078d139be Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Mar 2020 16:54:00 +0100 Subject: [PATCH 241/522] update i18n --- src/i18n/strings/en_EN.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 4fa7df4c0f..2d9fd74ad0 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1150,7 +1150,6 @@ "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "There was an error removing that alias. It may no longer exist or a temporary error occurred.", "Main address": "Main address", "not specified": "not specified", - "Local addresses for this room:": "Local addresses for this room:", "This room has no local addresses": "This room has no local addresses", "New address (e.g. #foo:%(localDomain)s)": "New address (e.g. #foo:%(localDomain)s)", "Alternative addresses for this room:": "Alternative addresses for this room:", From 5eaf03c3da11944b7636758f38f89d94024cecf0 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Mar 2020 17:03:50 +0100 Subject: [PATCH 242/522] update e2e tests to expand local aliases when adding one --- test/end-to-end-tests/src/usecases/room-settings.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/end-to-end-tests/src/usecases/room-settings.js b/test/end-to-end-tests/src/usecases/room-settings.js index f526312f8a..ab6d66ea6d 100644 --- a/test/end-to-end-tests/src/usecases/room-settings.js +++ b/test/end-to-end-tests/src/usecases/room-settings.js @@ -52,9 +52,11 @@ module.exports = async function changeRoomSettings(session, settings) { if (settings.alias) { session.log.step(`sets alias to ${settings.alias}`); - const aliasField = await session.query(".mx_RoomSettingsDialog .mx_AliasSettings input[type=text]"); + const summary = await session.query(".mx_RoomSettingsDialog .mx_AliasSettings summary"); + await summary.click(); + const aliasField = await session.query(".mx_RoomSettingsDialog .mx_AliasSettings details input[type=text]"); await session.replaceInputText(aliasField, settings.alias.substring(1, settings.alias.lastIndexOf(":"))); - const addButton = await session.query(".mx_RoomSettingsDialog .mx_AliasSettings .mx_AccessibleButton"); + const addButton = await session.query(".mx_RoomSettingsDialog .mx_AliasSettings details .mx_AccessibleButton"); await addButton.click(); await session.delay(10); // delay to give time for the validator to run and check the alias session.log.done(); From bc34dfa60aae9a4e154114002309e8dde4c1b023 Mon Sep 17 00:00:00 2001 From: Tirifto Date: Mon, 9 Mar 2020 14:12:41 +0000 Subject: [PATCH 243/522] Translated using Weblate (Esperanto) Currently translated at 86.1% (1845 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eo/ --- src/i18n/strings/eo.json | 57 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 1513e2dcd8..9767fb9156 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -1815,5 +1815,60 @@ "Verify other users in their profile.": "Kontrolu aliajn uzantojn en iliaj profiloj.", "Upgrade your encryption": "Gradaltigi vian ĉifradon", "Encryption upgraded": "Ĉifrado gradaltigita", - "Encryption setup complete": "Agordo de ĉifrado finita" + "Encryption setup complete": "Agordo de ĉifrado finita", + "The version of Riot": "La versio de Riot", + "Whether you're using Riot on a device where touch is the primary input mechanism": "Ĉu vi uzas Rioton per aparato, kies ĉefa enigilo estas tuŝado", + "The information being sent to us to help make Riot better includes:": "La informoj sendataj al ni por plibonigi Rioton inkluzivas:", + "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Nekonataj kunsidoj enas la ĉambron; se vi daŭrigos ne kontrolinte ilin, iu eble povos subaŭskulti vian vokon.", + "If you cancel now, you won't complete verifying the other user.": "Se vi nuligos nun, vi ne finos kontrolon de la alia uzanto.", + "If you cancel now, you won't complete verifying your other session.": "Se vi nuligos nun, vi ne finos kontrolon de via alia kunsido.", + "Cancel entering passphrase?": "Ĉu nuligi enigon de pasfrazo?", + "Setting up keys": "Agordo de klavoj", + "Verify this session": "Kontroli ĉi tiun kunsidon", + "Encryption upgrade available": "Ĝisdatigo de ĉifrado haveblas", + "Unverified session": "Nekontrolita kunsido", + "Sign In or Create Account": "Salutu aŭ kreu konton", + "Use your account or create a new one to continue.": "Por daŭrigi, uzu vian konton aŭ kreu novan.", + "Create Account": "Krei konton", + "Error upgrading room": "Eraris ĝisdatigo de la ĉambro", + "Double check that your server supports the room version chosen and try again.": "Bone kontrolu, ĉu via servilo subtenas la elektitan version de ĉambro, kaj reprovu.", + "Verifies a user, session, and pubkey tuple": "Kontrolas opon de uzanto, kunsido, kaj publika ŝlosilo.", + "Unknown (user, session) pair:": "Nekonata (uzanto, kunsido) duopo:", + "Session already verified!": "Kunsido jam estas kontrolita!", + "WARNING: Session already verified, but keys do NOT MATCH!": "AVERTO: Kunsido jam estas kontrolita, sed la ŝlosiloj NE AKORDAS!", + "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "AVERTO: MALSUKCESIS KONTROLO DE ŜLOSILOJ! La subskriba ŝlosilo de %(userId)s kaj session %(deviceId)s estas «%(fprint)s», kiu ne akordas la donitan ŝlosilon «%(fingerprint)s». Tio povus signifi, ke via komunikado estas spionata!", + "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "La subskriba ŝlosilo, kiun vi donis, akordas la subskribas ŝlosilon, kinu vi ricevis de la seanco %(deviceId)s de la uzanto %(userId)s. Kunsido estis markita kontrolita.", + "Displays information about a user": "Montras informojn pri uzanto", + "The message you are trying to send is too large.": "La mesaĝo, kiun vi provas sendi, estas tro granda.", + "Show typing notifications": "Montri sciigojn pri tajpado", + "Never send encrypted messages to unverified sessions from this session": "Neniam sendi ĉifritajn mesaĝojn al nekontrolitaj kunsidoj de ĉi tiu kunsido", + "Never send encrypted messages to unverified sessions in this room from this session": "Neniam sendi ĉifritajn mesaĝojn al nekontrolitaj kunsidoj en ĉi tiu ĉambro de ĉi tiu kunsido", + "Order rooms by name": "Ordigi ĉambrojn laŭ nomo", + "Show rooms with unread notifications first": "Montri ĉambrojn kun nelegitaj sciigoj unue", + "Show shortcuts to recently viewed rooms above the room list": "Montri tujirilojn al freŝe rigarditaj ĉambroj super la listo de ĉambroj", + "Enable message search in encrypted rooms": "Ŝalti serĉon de mesaĝoj en ĉifritaj ĉambroj", + "How fast should messages be downloaded.": "Kiel rapide elŝuti mesaĝojn.", + "Verify this session by completing one of the following:": "Kontrolu la kunsidon per plenumado de unu el la jenaj:", + "Scan this unique code": "Skanu ĉi tiun unikan kodon", + "or": "aŭ", + "Compare unique emoji": "Komparu unikajn bildsignojn", + "Compare a unique set of emoji if you don't have a camera on either device": "Komparu unikan aron de bildsignoj se vi ne havas kameraon sur la alia aparato", + "Confirm the emoji below are displayed on both devices, in the same order:": "Konfirmu, ke la ĉi-subaj bildsignoj estas montrataj sur ambaŭ aparatoj, samorde:", + "Verify this device by confirming the following number appears on its screen.": "Kontrolu ĉi tiun aparaton per kontrolo, ke la jena nombro aperas sur ĝia ekrano.", + "Waiting for %(displayName)s to verify…": "Atendas kontrolon de %(displayName)s…", + "Cancelling…": "Nuliganta…", + "They match": "Ili akordas", + "They don't match": "Ili ne akordas", + "To be secure, do this in person or use a trusted way to communicate.": "Por plia sekureco, faru tion persone, aŭ uzu alian fidatan komunikilon.", + "Verify yourself & others to keep your chats safe": "Kontrolu vin mem kaj aliajn por sekurigi viajn babilojn", + "Channel: %(channelName)s": "Kanalo: %(channelName)s", + "Show less": "Montri pli", + "Show more": "Montri malpli", + "Help": "Helpo", + "Message not sent due to unknown sessions being present": "Mesaĝo ne sendiĝis pro ĉeesto de nekonataj kunsidoj", + "Show sessions, send anyway or cancel.": "Montri kunsidojn, tamen sendinuligi.", + "Complete security": "Plena sekureco", + "Verify this session to grant it access to encrypted messages.": "Kontrolu ĉi tiun kunsidon por doni al ĝi aliron al la ĉifritaj mesaĝoj.", + "Session verified": "Kunsido kontrolita", + "Copy": "Kopii" } From 5d9f9db3fa78d05a6f79d4414950b4c516313dd5 Mon Sep 17 00:00:00 2001 From: catborise Date: Mon, 9 Mar 2020 15:42:18 +0000 Subject: [PATCH 244/522] Translated using Weblate (Turkish) Currently translated at 77.3% (1655 of 2142 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/tr/ --- src/i18n/strings/tr.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index 36f526d841..bd25e66fbf 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -1670,5 +1670,10 @@ "Incoming Verification Request": "Gelen Doğrulama İsteği", "Use bots, bridges, widgets and sticker packs": "Botları, köprüleri, görsel bileşenleri ve çıkartma paketlerini kullan", "Not sure of your password? Set a new one": "Şifrenizden emin değil misiniz? Yenisini ayalarla", - "Want more than a community? Get your own server": "Bir topluluktan fazlasınımı istiyorsunuz? Kendi sunucunuzu edinin" + "Want more than a community? Get your own server": "Bir topluluktan fazlasınımı istiyorsunuz? Kendi sunucunuzu edinin", + "Explore rooms": "Odaları keşfet", + "Show sessions, send anyway or cancel.": "Oturumları gözat, yinede gönder yada iptal.", + "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Mesajı yeniden gönder veya şimdi mesajı iptal et .", + " (1/%(totalCount)s)": " (1/%(totalCount)s)", + "Your new session is now verified. Other users will see it as trusted.": "Yeni oturumunuz şimdi doğrulandı. Diğer kullanıcılar güvenilir olarak görecek." } From 650d3d0e2df93f837329ed4e1794a0a196b267ba Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 9 Mar 2020 16:17:25 +0000 Subject: [PATCH 245/522] Un-linkify version in settings Probably a bit confusing while our changelogs are mostly in react-sdk, and ended up linking to version 0.0.0 in nightly builds. --- .../settings/tabs/user/HelpUserSettingsTab.js | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/components/views/settings/tabs/user/HelpUserSettingsTab.js b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js index 8e7983970a..aca2f010b6 100644 --- a/src/components/views/settings/tabs/user/HelpUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js @@ -25,21 +25,6 @@ import Modal from "../../../../../Modal"; import * as sdk from "../../../../../"; import PlatformPeg from "../../../../../PlatformPeg"; -// Simple method to help prettify GH Release Tags and Commit Hashes. -const semVerRegex = /^v?(\d+\.\d+\.\d+(?:-rc.+)?)(?:-(?:\d+-g)?([0-9a-fA-F]+))?(?:-dirty)?$/i; -const ghVersionLabel = function(repo, token='') { - const match = token.match(semVerRegex); - let url; - if (match && match[1]) { // basic semVer string possibly with commit hash - url = (match.length > 1 && match[2]) - ? `https://github.com/${repo}/commit/${match[2]}` - : `https://github.com/${repo}/releases/tag/v${match[1]}`; - } else { - url = `https://github.com/${repo}/commit/${token.split('-')[0]}`; - } - return { token }; -}; - export default class HelpUserSettingsTab extends React.Component { static propTypes = { closeSettingsFn: PropTypes.func.isRequired, @@ -184,9 +169,7 @@ export default class HelpUserSettingsTab extends React.Component { ); } - const vectorVersion = this.state.vectorVersion - ? ghVersionLabel('vector-im/riot-web', this.state.vectorVersion) - : 'unknown'; + const vectorVersion = this.state.vectorVersion || 'unknown'; let olmVersion = MatrixClientPeg.get().olmVersion; olmVersion = olmVersion ? `${olmVersion[0]}.${olmVersion[1]}.${olmVersion[2]}` : ''; From 0d8b4ac194fcf5dbccd2884082208cb99a2b04d4 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Mar 2020 18:23:32 +0100 Subject: [PATCH 246/522] remove timeline tiles for m.room.aliases events --- src/TextForEvent.js | 65 ------------------------- src/components/views/rooms/EventTile.js | 2 - 2 files changed, 67 deletions(-) diff --git a/src/TextForEvent.js b/src/TextForEvent.js index d4003058c8..3d9f5fa900 100644 --- a/src/TextForEvent.js +++ b/src/TextForEvent.js @@ -269,70 +269,6 @@ function textForMessageEvent(ev) { return message; } -function textForRoomAliasesEvent(ev) { - // An alternative implementation of this as a first-class event can be found at - // https://github.com/matrix-org/matrix-react-sdk/blob/dc7212ec2bd12e1917233ed7153b3e0ef529a135/src/components/views/messages/RoomAliasesEvent.js - // This feels a bit overkill though, and it's not clear the i18n really needs it - // so instead it's landing as a simple textual event. - - const maxShown = 3; - - const senderName = ev.sender && ev.sender.name ? ev.sender.name : ev.getSender(); - const oldAliases = ev.getPrevContent().aliases || []; - const newAliases = ev.getContent().aliases || []; - - const addedAliases = newAliases.filter((x) => !oldAliases.includes(x)); - const removedAliases = oldAliases.filter((x) => !newAliases.includes(x)); - - if (!addedAliases.length && !removedAliases.length) { - return ''; - } - - if (addedAliases.length && !removedAliases.length) { - if (addedAliases.length > maxShown) { - return _t("%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room", { - senderName: senderName, - count: addedAliases.length - maxShown, - addedAddresses: addedAliases.slice(0, maxShown).join(', '), - }); - } - return _t('%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.', { - senderName: senderName, - count: addedAliases.length, - addedAddresses: addedAliases.join(', '), - }); - } else if (!addedAliases.length && removedAliases.length) { - if (removedAliases.length > maxShown) { - return _t("%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room", { - senderName: senderName, - count: removedAliases.length - maxShown, - removedAddresses: removedAliases.slice(0, maxShown).join(', '), - }); - } - return _t('%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.', { - senderName: senderName, - count: removedAliases.length, - removedAddresses: removedAliases.join(', '), - }); - } else { - const combined = addedAliases.length + removedAliases.length; - if (combined > maxShown) { - return _t("%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room", { - senderName: senderName, - countAdded: addedAliases.length, - countRemoved: removedAliases.length, - }); - } - return _t( - '%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.', { - senderName: senderName, - addedAddresses: addedAliases.join(', '), - removedAddresses: removedAliases.join(', '), - }, - ); - } -} - function textForCanonicalAliasEvent(ev) { const senderName = ev.sender && ev.sender.name ? ev.sender.name : ev.getSender(); const oldAlias = ev.getPrevContent().alias; @@ -612,7 +548,6 @@ const handlers = { }; const stateHandlers = { - 'm.room.aliases': textForRoomAliasesEvent, 'm.room.canonical_alias': textForCanonicalAliasEvent, 'm.room.name': textForRoomNameEvent, 'm.room.topic': textForTopicEvent, diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index f21f2e1ee9..cdbf725a5c 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -48,8 +48,6 @@ const eventTileTypes = { const stateEventTileTypes = { 'm.room.encryption': 'messages.EncryptionEvent', - 'm.room.aliases': 'messages.TextualEvent', - // 'm.room.aliases': 'messages.RoomAliasesEvent', // too complex 'm.room.canonical_alias': 'messages.TextualEvent', 'm.room.create': 'messages.RoomCreate', 'm.room.member': 'messages.TextualEvent', From 378939bed7b92b554ea8c45646311ff12a040e88 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Mar 2020 18:24:48 +0100 Subject: [PATCH 247/522] add timeline text descriptions for modifying alt_aliases --- src/TextForEvent.js | 42 ++++++++++++++++++++++++++++++------- src/i18n/strings/en_EN.json | 14 ++++++------- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/TextForEvent.js b/src/TextForEvent.js index 3d9f5fa900..44bec5d925 100644 --- a/src/TextForEvent.js +++ b/src/TextForEvent.js @@ -272,15 +272,43 @@ function textForMessageEvent(ev) { function textForCanonicalAliasEvent(ev) { const senderName = ev.sender && ev.sender.name ? ev.sender.name : ev.getSender(); const oldAlias = ev.getPrevContent().alias; + const oldAltAliases = ev.getPrevContent().alt_aliases || []; const newAlias = ev.getContent().alias; + const newAltAliases = ev.getContent().alt_aliases || []; + const removedAltAliases = oldAltAliases.filter(alias => !newAltAliases.includes(alias)); + const addedAltAliases = newAltAliases.filter(alias => !oldAltAliases.includes(alias)); - if (newAlias) { - return _t('%(senderName)s set the main address for this room to %(address)s.', { - senderName: senderName, - address: ev.getContent().alias, - }); - } else if (oldAlias) { - return _t('%(senderName)s removed the main address for this room.', { + if (!removedAltAliases.length && !addedAltAliases.length) { + if (newAlias) { + return _t('%(senderName)s set the main address for this room to %(address)s.', { + senderName: senderName, + address: ev.getContent().alias, + }); + } else if (oldAlias) { + return _t('%(senderName)s removed the main address for this room.', { + senderName: senderName, + }); + } + } else if (newAlias === oldAlias) { + if (addedAltAliases.length && !removedAltAliases.length) { + return _t('%(senderName)s added the alternative addresses %(addresses)s for this room.', { + senderName: senderName, + addresses: addedAltAliases.join(", "), + count: addedAltAliases.length, + }); + } if (removedAltAliases.length && !addedAltAliases.length) { + return _t('%(senderName)s removed the alternative addresses %(addresses)s for this room.', { + senderName: senderName, + addresses: removedAltAliases.join(", "), + count: removedAltAliases.length, + }); + } if (removedAltAliases.length && addedAltAliases.length) { + return _t('%(senderName)s changed the alternative addresses for this room.', { + senderName: senderName, + }); + } + } else { + return _t('%(senderName)s changed the main and alternative addresses for this room.', { senderName: senderName, }); } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 01ba458a2f..68be1a3e88 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -240,16 +240,14 @@ "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s disabled flair for %(groups)s in this room.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s sent an image.", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s added %(addedAddresses)s as addresses for this room.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s added %(addedAddresses)s as an address for this room.", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s removed %(removedAddresses)s as addresses for this room.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s removed %(removedAddresses)s as an address for this room.", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s set the main address for this room to %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s removed the main address for this room.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s added the alternative addresses %(addresses)s for this room.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s added alternative address %(addresses)s for this room.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s removed the alternative addresses %(addresses)s for this room.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s removed alternative address %(addresses)s for this room.", + "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s changed the alternative addresses for this room.", + "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s changed the main and alternative addresses for this room.", "Someone": "Someone", "(not supported by this browser)": "(not supported by this browser)", "%(senderName)s answered the call.": "%(senderName)s answered the call.", From c541bc0705877fe00a6681afee1652dc90b690eb Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Mon, 9 Mar 2020 17:33:39 +0000 Subject: [PATCH 248/522] Fix mark as read button for dark theme This changes the mark as read button to a mask image so that it can be themed like other images. Fixes https://github.com/vector-im/riot-web/issues/12640 --- .../views/rooms/_TopUnreadMessagesBar.scss | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/res/css/views/rooms/_TopUnreadMessagesBar.scss b/res/css/views/rooms/_TopUnreadMessagesBar.scss index 5f6f869877..28eddf1fa2 100644 --- a/res/css/views/rooms/_TopUnreadMessagesBar.scss +++ b/res/css/views/rooms/_TopUnreadMessagesBar.scss @@ -51,7 +51,7 @@ limitations under the License. position: absolute; width: 38px; height: 38px; - mask: url('$(res)/img/icon-jump-to-first-unread.svg'); + mask-image: url('$(res)/img/icon-jump-to-first-unread.svg'); mask-repeat: no-repeat; mask-position: 9px 13px; background: $roomtile-name-color; @@ -61,12 +61,20 @@ limitations under the License. display: block; width: 18px; height: 18px; - background-image: url('$(res)/img/cancel.svg'); - background-position: center; - background-size: 10px; - background-repeat: no-repeat; - background-color: $primary-bg-color; + background: $primary-bg-color; border: 1.3px solid $roomtile-name-color; - border-radius: 99px; + border-radius: 10px; margin: 5px auto; } + +.mx_TopUnreadMessagesBar_markAsRead::before { + content: ""; + position: absolute; + width: 18px; + height: 18px; + mask-image: url('$(res)/img/cancel.svg'); + mask-repeat: no-repeat; + mask-size: 10px; + mask-position: 4px 4px; + background: $roomtile-name-color; +} From 4cdfda3c7d816fffe9126eede92184f924942cf4 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 9 Mar 2020 17:05:13 -0600 Subject: [PATCH 249/522] Remove v1 identity server fallbacks For https://github.com/vector-im/riot-web/issues/10443 --- src/IdentityAuthClient.js | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/IdentityAuthClient.js b/src/IdentityAuthClient.js index 72432b9a44..4a830d6506 100644 --- a/src/IdentityAuthClient.js +++ b/src/IdentityAuthClient.js @@ -181,24 +181,12 @@ export default class IdentityAuthClient { } async registerForToken(check=true) { - try { - const hsOpenIdToken = await MatrixClientPeg.get().getOpenIdToken(); - // XXX: The spec is `token`, but we used `access_token` for a Sydent release. - const { access_token: accessToken, token } = - await this._matrixClient.registerWithIdentityServer(hsOpenIdToken); - const identityAccessToken = token ? token : accessToken; - if (check) await this._checkToken(identityAccessToken); - return identityAccessToken; - } catch (e) { - if (e.cors === "rejected" || e.httpStatus === 404) { - // Assume IS only supports deprecated v1 API for now - // TODO: Remove this path once v2 is only supported version - // See https://github.com/vector-im/riot-web/issues/10443 - console.warn("IS doesn't support v2 auth"); - this.authEnabled = false; - return; - } - throw e; - } + const hsOpenIdToken = await MatrixClientPeg.get().getOpenIdToken(); + // XXX: The spec is `token`, but we used `access_token` for a Sydent release. + const { access_token: accessToken, token } = + await this._matrixClient.registerWithIdentityServer(hsOpenIdToken); + const identityAccessToken = token ? token : accessToken; + if (check) await this._checkToken(identityAccessToken); + return identityAccessToken; } } From 3bff5c55cfa34d8ac6405664330c84f93ff674d8 Mon Sep 17 00:00:00 2001 From: Marco Zehe Date: Tue, 10 Mar 2020 16:24:42 +0100 Subject: [PATCH 250/522] Remove extraneous tab stop from room tree view. This was introduced some time ago when the room list became scrollable. Divs with overflow:scroll; become focusable for the keyboard in Firefox, but since we have keyboard handling for the whole compound widget, we don't need that tab stop on the tree view container div. Putting tabindex="-1" on it fixes it. Signed-off-by: Marco Zehe --- src/components/views/rooms/RoomList.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/views/rooms/RoomList.js b/src/components/views/rooms/RoomList.js index ad67d8e308..0fe0ff3d8c 100644 --- a/src/components/views/rooms/RoomList.js +++ b/src/components/views/rooms/RoomList.js @@ -778,6 +778,9 @@ export default createReactClass({ className="mx_RoomList" role="tree" aria-label={_t("Rooms")} + // Firefox sometimes makes this element focusable due to + // overflow:scroll;, so force it out of tab order. + tabindex="-1" onMouseMove={this.onMouseMove} onMouseLeave={this.onMouseLeave} > From ddbfe4e1fadca5e74aaf82c106a04bab734b8a64 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 10 Mar 2020 16:31:40 +0100 Subject: [PATCH 251/522] enable 4S if needed when trying to verify --- src/components/views/right_panel/UserInfo.js | 65 +----------- src/verification.js | 106 +++++++++++++++++++ 2 files changed, 109 insertions(+), 62 deletions(-) create mode 100644 src/verification.js diff --git a/src/components/views/right_panel/UserInfo.js b/src/components/views/right_panel/UserInfo.js index 24c5489c4f..4219da690e 100644 --- a/src/components/views/right_panel/UserInfo.js +++ b/src/components/views/right_panel/UserInfo.js @@ -25,7 +25,7 @@ import dis from '../../../dispatcher'; import Modal from '../../../Modal'; import * as sdk from '../../../index'; import { _t } from '../../../languageHandler'; -import createRoom, {findDMForUser} from '../../../createRoom'; +import createRoom from '../../../createRoom'; import DMRoomMap from '../../../utils/DMRoomMap'; import AccessibleButton from '../elements/AccessibleButton'; import SdkConfig from '../../../SdkConfig'; @@ -43,6 +43,7 @@ import MatrixClientContext from "../../../contexts/MatrixClientContext"; import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases"; import EncryptionPanel from "./EncryptionPanel"; import { useAsyncMemo } from '../../../hooks/useAsyncMemo'; +import { verifyUser, legacyVerifyUser, verifyDevice } from '../../../verification'; const _disambiguateDevices = (devices) => { const names = Object.create(null); @@ -153,66 +154,6 @@ function useHasCrossSigningKeys(cli, member, canVerify, setUpdating) { }, [cli, member, canVerify], false); } -async function verifyDevice(userId, device) { - const cli = MatrixClientPeg.get(); - const member = cli.getUser(userId); - const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); - Modal.createTrackedDialog("Verification warning", "unverified session", QuestionDialog, { - headerImage: require("../../../../res/img/e2e/warning.svg"), - title: _t("Not Trusted"), - description:
-

{_t("%(name)s (%(userId)s) signed in to a new session without verifying it:", {name: member.displayName, userId})}

-

{device.getDisplayName()} ({device.deviceId})

-

{_t("Ask this user to verify their session, or manually verify it below.")}

-
, - onFinished: async (doneClicked) => { - const manuallyVerifyClicked = !doneClicked; - if (!manuallyVerifyClicked) { - return; - } - const cli = MatrixClientPeg.get(); - const verificationRequestPromise = cli.requestVerification( - userId, - [device.deviceId], - ); - dis.dispatch({ - action: "set_right_panel_phase", - phase: RIGHT_PANEL_PHASES.EncryptionPanel, - refireParams: {member, verificationRequestPromise}, - }); - }, - primaryButton: _t("Done"), - cancelButton: _t("Manually Verify"), - }); -} - -async function legacyVerifyUser(member) { - const cli = MatrixClientPeg.get(); - const verificationRequestPromise = cli.requestVerification(member.userId); - dis.dispatch({ - action: "set_right_panel_phase", - phase: RIGHT_PANEL_PHASES.EncryptionPanel, - refireParams: {member, verificationRequestPromise}, - }); -} - -function verifyUser(user) { - const cli = MatrixClientPeg.get(); - const dmRoom = findDMForUser(cli, user.userId); - let existingRequest; - if (dmRoom) { - existingRequest = cli.findVerificationRequestDMInProgress(dmRoom.roomId); - } - dis.dispatch({ - action: "set_right_panel_phase", - phase: RIGHT_PANEL_PHASES.EncryptionPanel, - refireParams: { - member: user, - verificationRequest: existingRequest, - }, - }); -} - function DeviceItem({userId, device}) { const cli = useContext(MatrixClientContext); const isMe = userId === cli.getUserId(); @@ -239,7 +180,7 @@ function DeviceItem({userId, device}) { const onDeviceClick = () => { if (!isVerified) { - verifyDevice(userId, device); + verifyDevice(cli.getUser(userId), device); } }; diff --git a/src/verification.js b/src/verification.js new file mode 100644 index 0000000000..f110a9632a --- /dev/null +++ b/src/verification.js @@ -0,0 +1,106 @@ +/* +Copyright 2019, 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import {MatrixClientPeg} from './MatrixClientPeg'; +import dis from "./dispatcher"; +import Modal from './Modal'; +import * as sdk from './index'; +import { _t } from './languageHandler'; +import {RIGHT_PANEL_PHASES} from "./stores/RightPanelStorePhases"; +import {findDMForUser} from './createRoom'; +import {accessSecretStorage} from './CrossSigningManager'; +import SettingsStore from './settings/SettingsStore'; + +async function enable4SIfNeeded() { + const cli = MatrixClientPeg.get(); + if (!cli.isCryptoEnabled() || !SettingsStore.isFeatureEnabled("feature_cross_signing")) { + return false; + } + const masterPK = cli.getCrossSigningId(); + if (!masterPK) { + await accessSecretStorage(); + return false; + } + + return true; +} + +export async function verifyDevice(user, device) { + if (!await enable4SIfNeeded()) { + return; + } + const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); + Modal.createTrackedDialog("Verification warning", "unverified session", QuestionDialog, { + headerImage: require("../res/img/e2e/warning.svg"), + title: _t("Not Trusted"), + description:
+

{_t("%(name)s (%(userId)s) signed in to a new session without verifying it:", {name: user.displayName, userId: user.userId})}

+

{device.getDisplayName()} ({device.deviceId})

+

{_t("Ask this user to verify their session, or manually verify it below.")}

+
, + onFinished: async (doneClicked) => { + const manuallyVerifyClicked = !doneClicked; + if (!manuallyVerifyClicked) { + return; + } + const cli = MatrixClientPeg.get(); + const verificationRequestPromise = cli.requestVerification( + user.userId, + [device.deviceId], + ); + dis.dispatch({ + action: "set_right_panel_phase", + phase: RIGHT_PANEL_PHASES.EncryptionPanel, + refireParams: {member: user, verificationRequestPromise}, + }); + }, + primaryButton: _t("Done"), + cancelButton: _t("Manually Verify"), + }); +} + +export async function legacyVerifyUser(user) { + if (!await enable4SIfNeeded()) { + return; + } + const cli = MatrixClientPeg.get(); + const verificationRequestPromise = cli.requestVerification(user.userId); + dis.dispatch({ + action: "set_right_panel_phase", + phase: RIGHT_PANEL_PHASES.EncryptionPanel, + refireParams: {member: user, verificationRequestPromise}, + }); +} + +export async function verifyUser(user) { + if (!await enable4SIfNeeded()) { + return; + } + const cli = MatrixClientPeg.get(); + const dmRoom = findDMForUser(cli, user.userId); + let existingRequest; + if (dmRoom) { + existingRequest = cli.findVerificationRequestDMInProgress(dmRoom.roomId); + } + dis.dispatch({ + action: "set_right_panel_phase", + phase: RIGHT_PANEL_PHASES.EncryptionPanel, + refireParams: { + member: user, + verificationRequest: existingRequest, + }, + }); +} From ab2e3a346599a4f092d43dc8d2de94954ac34f88 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 10 Mar 2020 16:54:49 +0100 Subject: [PATCH 252/522] also enable 4s when accepting a verification request --- src/components/views/toasts/VerificationRequestToast.js | 4 ++++ src/verification.js | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/views/toasts/VerificationRequestToast.js b/src/components/views/toasts/VerificationRequestToast.js index c11cefc839..f590cecc3e 100644 --- a/src/components/views/toasts/VerificationRequestToast.js +++ b/src/components/views/toasts/VerificationRequestToast.js @@ -24,6 +24,7 @@ import {userLabelForEventRoom} from "../../../utils/KeyVerificationStateObserver import dis from "../../../dispatcher"; import ToastStore from "../../../stores/ToastStore"; import Modal from "../../../Modal"; +import {enable4SIfNeeded} from "../../../verification"; export default class VerificationRequestToast extends React.PureComponent { constructor(props) { @@ -73,6 +74,9 @@ export default class VerificationRequestToast extends React.PureComponent { } accept = async () => { + if (!await enable4SIfNeeded()) { + return; + } ToastStore.sharedInstance().dismissToast(this.props.toastKey); const {request} = this.props; // no room id for to_device requests diff --git a/src/verification.js b/src/verification.js index f110a9632a..cdce9c6d32 100644 --- a/src/verification.js +++ b/src/verification.js @@ -24,7 +24,7 @@ import {findDMForUser} from './createRoom'; import {accessSecretStorage} from './CrossSigningManager'; import SettingsStore from './settings/SettingsStore'; -async function enable4SIfNeeded() { +export async function enable4SIfNeeded() { const cli = MatrixClientPeg.get(); if (!cli.isCryptoEnabled() || !SettingsStore.isFeatureEnabled("feature_cross_signing")) { return false; From e34a37102a73f49903d56fbc8c0acb9ff73c6137 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 10 Mar 2020 16:56:20 +0100 Subject: [PATCH 253/522] move i18n strings around as script desires --- src/i18n/strings/en_EN.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 01ba458a2f..4e371cacb0 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -293,6 +293,11 @@ "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s", "Light theme": "Light theme", "Dark theme": "Dark theme", + "Not Trusted": "Not Trusted", + "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) signed in to a new session without verifying it:", + "Ask this user to verify their session, or manually verify it below.": "Ask this user to verify their session, or manually verify it below.", + "Done": "Done", + "Manually Verify": "Manually Verify", "%(displayName)s is typing …": "%(displayName)s is typing …", "%(names)s and %(count)s others are typing …|other": "%(names)s and %(count)s others are typing …", "%(names)s and %(count)s others are typing …|one": "%(names)s and one other is typing …", @@ -1184,11 +1189,6 @@ "Yours, or the other users’ session": "Yours, or the other users’ session", "Members": "Members", "Files": "Files", - "Not Trusted": "Not Trusted", - "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) signed in to a new session without verifying it:", - "Ask this user to verify their session, or manually verify it below.": "Ask this user to verify their session, or manually verify it below.", - "Done": "Done", - "Manually Verify": "Manually Verify", "Trusted": "Trusted", "Not trusted": "Not trusted", "%(count)s verified sessions|other": "%(count)s verified sessions", From f33c930c418475fbe8f02c0fbc73a86f7100e3b2 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 5 Mar 2020 17:24:51 -0700 Subject: [PATCH 254/522] Revert "Merge pull request #3892 from krkc/move-read-receipts-to-bottom" This reverts commit 191abb5b0d9e642c69ea8a9cad44b05f59ce06f4. --- res/css/views/rooms/_EventTile.scss | 17 ++++++++++++++++- src/components/views/rooms/EventTile.js | 6 +++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/res/css/views/rooms/_EventTile.scss b/res/css/views/rooms/_EventTile.scss index 09827fe3bb..d292c729dd 100644 --- a/res/css/views/rooms/_EventTile.scss +++ b/res/css/views/rooms/_EventTile.scss @@ -289,11 +289,17 @@ div.mx_EventTile_notSent.mx_EventTile_redacted .mx_UnknownBody { display: inline-block; width: 14px; height: 14px; - top: -19px; + top: 29px; user-select: none; z-index: 1; } +.mx_EventTile_continuation .mx_EventTile_readAvatars, +.mx_EventTile_info .mx_EventTile_readAvatars, +.mx_EventTile_emote .mx_EventTile_readAvatars { + top: 7px; +} + .mx_EventTile_readAvatars .mx_BaseAvatar { position: absolute; display: inline-block; @@ -628,6 +634,15 @@ div.mx_EventTile_notSent.mx_EventTile_redacted .mx_UnknownBody { top: 27px; } + .mx_EventTile_continuation .mx_EventTile_readAvatars, + .mx_EventTile_emote .mx_EventTile_readAvatars { + top: 5px; + } + + .mx_EventTile_info .mx_EventTile_readAvatars { + top: 4px; + } + .mx_RoomView_MessageList h2 { margin-top: 6px; } diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index cdbf725a5c..26c8a54f4e 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -878,6 +878,9 @@ export default createReactClass({ // tab-index=-1 to allow it to be focusable but do not add tab stop for it, primarily for screen readers return (
+
+ { readAvatars } +
{ sender }
-
- { readAvatars } -
{ // The avatar goes after the event tile as it's absolutely positioned to be over the // event tile line, so needs to be later in the DOM so it appears on top (this avoids From 84f6bf06ddf1dc2dafa921605ae21d11e8a96d76 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Tue, 10 Mar 2020 16:13:42 +0000 Subject: [PATCH 255/522] Translated using Weblate (Albanian) Currently translated at 99.7% (2133 of 2140 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 29a4aceec7..5a6f192809 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2171,5 +2171,11 @@ "Mark all as read": "Vëru të tërave shenjë si të lexuara", "Not currently indexing messages for any room.": "Pa indeksuar aktualisht mesazhe nga ndonjë dhomë.", "Currently indexing: %(currentRoom)s.": "Aktualisht nën indeksim: %(currentRoom)s.", - "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s nga %(totalRooms)s" + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s nga %(totalRooms)s", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s shtoi adresat alternative %(addresses)s për këtë dhomë.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s shtoi adresën alternative %(addresses)s për këtë dhomë.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s hoqi adresat alternative %(addresses)s për këtë dhomë.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s hoqi adresën alternative %(addresses)s për këtë dhomë.", + "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s ndryshoi adresat alternative për këtë dhomë.", + "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s ndryshoi adresat kryesore dhe alternative për këtë dhomë." } From 1eb5bdf847f2c5badd014e865f71e297c20869d6 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 10 Mar 2020 18:40:24 +0100 Subject: [PATCH 256/522] use USK as we'll only have that around when using key sharing --- src/verification.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/verification.js b/src/verification.js index cdce9c6d32..235828dc92 100644 --- a/src/verification.js +++ b/src/verification.js @@ -29,8 +29,8 @@ export async function enable4SIfNeeded() { if (!cli.isCryptoEnabled() || !SettingsStore.isFeatureEnabled("feature_cross_signing")) { return false; } - const masterPK = cli.getCrossSigningId(); - if (!masterPK) { + const usk = cli.getCrossSigningId("user_signing"); + if (!usk) { await accessSecretStorage(); return false; } From 5d7f2f96e74792abdb76439ca6146470992cf014 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 10 Mar 2020 18:45:51 +0100 Subject: [PATCH 257/522] add fallback label for canonical alias events that dont change anything --- src/TextForEvent.js | 6 ++++++ src/i18n/strings/en_EN.json | 1 + 2 files changed, 7 insertions(+) diff --git a/src/TextForEvent.js b/src/TextForEvent.js index 44bec5d925..8757ff4ed6 100644 --- a/src/TextForEvent.js +++ b/src/TextForEvent.js @@ -308,10 +308,16 @@ function textForCanonicalAliasEvent(ev) { }); } } else { + // both alias and alt_aliases where modified return _t('%(senderName)s changed the main and alternative addresses for this room.', { senderName: senderName, }); } + // in case there is no difference between the two events, + // say something as we can't simply hide the tile from here + return _t('%(senderName)s changed the addresses for this room.', { + senderName: senderName, + }); } function textForCallAnswerEvent(event) { diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 15a050d783..715ca082ad 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -248,6 +248,7 @@ "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s removed alternative address %(addresses)s for this room.", "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s changed the alternative addresses for this room.", "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s changed the main and alternative addresses for this room.", + "%(senderName)s changed the addresses for this room.": "%(senderName)s changed the addresses for this room.", "Someone": "Someone", "(not supported by this browser)": "(not supported by this browser)", "%(senderName)s answered the call.": "%(senderName)s answered the call.", From 91de7fd7b66f86215c43e8775689582f672b1ed9 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 10 Mar 2020 18:59:45 +0100 Subject: [PATCH 258/522] also allow passing a promise to a verif request to the verification dialog --- .../views/dialogs/NewSessionReviewDialog.js | 7 ++++--- .../views/dialogs/VerificationRequestDialog.js | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/components/views/dialogs/NewSessionReviewDialog.js b/src/components/views/dialogs/NewSessionReviewDialog.js index 125811115f..2613dcc6e6 100644 --- a/src/components/views/dialogs/NewSessionReviewDialog.js +++ b/src/components/views/dialogs/NewSessionReviewDialog.js @@ -54,17 +54,18 @@ export default class NewSessionReviewDialog extends React.PureComponent { }); } - onContinueClick = async () => { + onContinueClick = () => { const { userId, device } = this.props; const cli = MatrixClientPeg.get(); - const request = await cli.requestVerification( + const requestPromise = cli.requestVerification( userId, [device.deviceId], ); this.props.onFinished(true); Modal.createTrackedDialog('New Session Verification', 'Starting dialog', VerificationRequestDialog, { - verificationRequest: request, + verificationRequestPromise: requestPromise, + member: cli.getUser(userId), }); } diff --git a/src/components/views/dialogs/VerificationRequestDialog.js b/src/components/views/dialogs/VerificationRequestDialog.js index abcf925f96..30bff80f03 100644 --- a/src/components/views/dialogs/VerificationRequestDialog.js +++ b/src/components/views/dialogs/VerificationRequestDialog.js @@ -22,7 +22,8 @@ import { _t } from '../../../languageHandler'; export default class VerificationRequestDialog extends React.Component { static propTypes = { - verificationRequest: PropTypes.object.isRequired, + verificationRequest: PropTypes.object, + verificationRequestPromise: PropTypes.object, onFinished: PropTypes.func.isRequired, }; @@ -34,6 +35,8 @@ export default class VerificationRequestDialog extends React.Component { render() { const BaseDialog = sdk.getComponent("views.dialogs.BaseDialog"); const EncryptionPanel = sdk.getComponent("views.right_panel.EncryptionPanel"); + const member = this.props.member || + MatrixClientPeg.get().getUser(this.props.verificationRequest.otherUserId); return ; } - onFinished() { - this.props.verificationRequest.cancel(); + async onFinished() { this.props.onFinished(); + let request = this.props.verificationRequest; + if (!request && this.props.verificationRequestPromise) { + request = await this.props.verificationRequestPromise; + } + request.cancel(); } } From 78ffb3ddf43d677a34302dec7f4d098cd64d9575 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 10 Mar 2020 20:09:40 +0000 Subject: [PATCH 259/522] Don't remount main split children on rhs collapse Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/MainSplit.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/components/structures/MainSplit.js b/src/components/structures/MainSplit.js index 772be358cf..7c66f21a04 100644 --- a/src/components/structures/MainSplit.js +++ b/src/components/structures/MainSplit.js @@ -93,14 +93,19 @@ export default class MainSplit extends React.Component { const bodyView = React.Children.only(this.props.children); const panelView = this.props.panel; - if (this.props.collapsedRhs || !panelView) { - return bodyView; - } else { - return
- { bodyView } + const hasResizer = !this.props.collapsedRhs && panelView; + + let children; + if (hasResizer) { + children = { panelView } -
; + ; } + + return
+ { bodyView } + { children } +
; } } From 5c582037ceb6522c4f1344c693af6a6a7cda5041 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 10 Mar 2020 23:11:48 +0000 Subject: [PATCH 260/522] Tweak padding to match Figma Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/structures/_RoomDirectory.scss | 6 +++--- src/components/structures/RoomDirectory.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/res/css/structures/_RoomDirectory.scss b/res/css/structures/_RoomDirectory.scss index 5ae8df7176..241c921f20 100644 --- a/res/css/structures/_RoomDirectory.scss +++ b/res/css/structures/_RoomDirectory.scss @@ -46,8 +46,8 @@ limitations under the License. .mx_RoomDirectory_listheader { display: flex; - margin-top: 12px; - margin-bottom: 12px; + margin-top: 13px; + margin-bottom: 13px; } .mx_RoomDirectory_searchbox { @@ -148,7 +148,7 @@ limitations under the License. padding: 0; } -.mx_RoomDirectory p { +.mx_RoomDirectory > span { font-size: 14px; margin-top: 0; diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js index dd089a9776..3c3d67578e 100644 --- a/src/components/structures/RoomDirectory.js +++ b/src/components/structures/RoomDirectory.js @@ -628,7 +628,7 @@ export default createReactClass({ title={_t("Explore rooms")} >
-

{explanation}

+ {explanation}
{listHeader} {content} From 73980422e6f516c40b985516e447ad5c03226784 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Wed, 11 Mar 2020 06:09:25 +0000 Subject: [PATCH 261/522] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2143 of 2143 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index db7559fbb4..eff96f88b5 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2182,5 +2182,16 @@ "Mark all as read": "全部標示為已讀", "Not currently indexing messages for any room.": "目前未為任何聊天室編寫索引。", "Currently indexing: %(currentRoom)s.": "目前正在製作索引:%(currentRoom)s。", - "%(doneRooms)s out of %(totalRooms)s": "%(totalRooms)s 中的 %(doneRooms)s" + "%(doneRooms)s out of %(totalRooms)s": "%(totalRooms)s 中的 %(doneRooms)s", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s 為此聊天室新增了替代位置 %(addresses)s。", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s 為此聊天室新增了替代位置 %(addresses)s。", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s 為此聊天室移除了替代位置 %(addresses)s。", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s 為此聊天室移除了替代位置 %(addresses)s。", + "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s 為此聊天是變更了替代位置。", + "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s 為此聊天是變更了主要及替代位置。", + "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "更新聊天室的替代位置時發生錯誤。伺服器可能不允許這麼做,或是昱到了暫時性的故障。", + "Alternative addresses for this room:": "此聊天是的替代位置:", + "This room has no alternative addresses": "此聊天室沒有替代位置", + "New address (e.g. #foo:domain)": "新位置(例如:#foo:domain)", + "Local addresses (unmoderated content)": "本機位置(未經審核的內容)" } From 58d3ad515f500871bf5b48c303f176883ffb7ab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Wed, 11 Mar 2020 08:36:26 +0000 Subject: [PATCH 262/522] Translated using Weblate (French) Currently translated at 100.0% (2143 of 2143 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index b432fbf573..d46bd45d0f 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2183,5 +2183,16 @@ "Mark all as read": "Tout marquer comme lu", "Not currently indexing messages for any room.": "N’indexe aucun message en ce moment.", "Currently indexing: %(currentRoom)s.": "En ce moment, indexe : %(currentRoom)s.", - "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s sur %(totalRooms)s" + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s sur %(totalRooms)s", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s a ajouté les adresses alternatives %(addresses)s pour ce salon.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s a ajouté l’adresse alternative %(addresses)s pour ce salon.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s a supprimé les adresses alternatives %(addresses)s pour ce salon.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s a supprimé l’adresse alternative %(addresses)s pour ce salon.", + "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s a modifié les adresses alternatives de ce salon.", + "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s a modifié l’adresse principale et les adresses alternatives pour ce salon.", + "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Une erreur est survenue lors de la mise à jour des adresses alternatives du salon. Ce n’est peut-être pas permis par le serveur ou une défaillance temporaire est survenue.", + "Alternative addresses for this room:": "Adresses alternatives pour ce salon :", + "This room has no alternative addresses": "Ce salon n’a pas d’adresse alternative", + "New address (e.g. #foo:domain)": "Nouvelle adresse (par ex. #foo:domaine)", + "Local addresses (unmoderated content)": "Adresses locales (contenu non modéré)" } From 8e647e539fe3e08747a5d3019fc8670a9643af17 Mon Sep 17 00:00:00 2001 From: catborise Date: Tue, 10 Mar 2020 18:37:12 +0000 Subject: [PATCH 263/522] Translated using Weblate (Turkish) Currently translated at 78.3% (1678 of 2143 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/tr/ --- src/i18n/strings/tr.json | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index bd25e66fbf..84cb229a46 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -1675,5 +1675,30 @@ "Show sessions, send anyway or cancel.": "Oturumları gözat, yinede gönder yada iptal.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Mesajı yeniden gönder veya şimdi mesajı iptal et .", " (1/%(totalCount)s)": " (1/%(totalCount)s)", - "Your new session is now verified. Other users will see it as trusted.": "Yeni oturumunuz şimdi doğrulandı. Diğer kullanıcılar güvenilir olarak görecek." + "Your new session is now verified. Other users will see it as trusted.": "Yeni oturumunuz şimdi doğrulandı. Diğer kullanıcılar güvenilir olarak görecek.", + "Invalid base_url for m.homeserver": "m.anasunucu için geçersiz base_url", + "Invalid base_url for m.identity_server": "m.kimlik_sunucu için geçersiz base_url", + "Identity server URL does not appear to be a valid identity server": "Kimlik sunucu adresi geçerli bir kimlik sunucu adresi gibi gözükmüyor", + "Please note you are logging into the %(hs)s server, not matrix.org.": "Lütfen %(hs)s sunucusuna oturum açtığınızın farkında olun. Bu sunucu matrix.org değil.", + "Registration has been disabled on this homeserver.": "Bu anasunucuda kayıt işlemleri kapatılmış.", + "You can now close this window or log in to your new account.": "Şimdi bu pencereyi kapatabilirsin yada yeni hesabına oturum aç.", + "Enter your password to sign in and regain access to your account.": "Oturum açmak için şifreni gir ve hesabına yeniden erişimi sağla.", + "Enter your account password to confirm the upgrade:": "Güncellemeyi başlatmak için hesap şifreni gir:", + "Restore": "Geri yükle", + "You'll need to authenticate with the server to confirm the upgrade.": "Güncellemeyi teyit etmek için sunucuda oturum açmaya ihtiyacınız var.", + "Great! This passphrase looks strong enough.": "Harika! Bu parola yeterince güçlü gözüküyor.", + "Enter a passphrase": "Bir parola girin", + "Back up my encryption keys, securing them with the same passphrase": "Şifreleme anahtarlarımı aynı parola ile güvenli hale getirerek yedekle", + "Enter your passphrase a second time to confirm it.": "Parolanızı ikinci kez girerek teyit edin.", + "Confirm your passphrase": "Parolanızı teyit edin", + "Your recovery key is in your Downloads folder.": "Kurtarma anahtarı İndirilenler klasörünüzde.", + "Unable to set up secret storage": "Sır deposu ayarlanamıyor", + "For maximum security, this should be different from your account password.": "En üst düzey güvenlik için, bu şifre hesap şifrenizden farklı olmalı.", + "Enter a passphrase...": "Bir parola girin...", + "Please enter your passphrase a second time to confirm.": "Lütfen parolanızı ikinci kez girerek teyit edin.", + "Repeat your passphrase...": "Parolanızı tekrarlayın...", + "Your keys are being backed up (the first backup could take a few minutes).": "Anahtarlarınız yedekleniyor (ilk yedek bir kaç dakika sürebilir).", + "Secure your backup with a passphrase": "Yedeğinizi bir parola ile koruyun", + "If you don't want to set this up now, you can later in Settings.": "Şimdi ayarlamak istemiyorsanız daha sonra Ayarlar menüsünden yapabilirsiniz.", + "Set up": "Ayarla" } From 13a4f4190f16303f9e3c935297f400e405ea0164 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 11 Mar 2020 10:11:54 +0100 Subject: [PATCH 264/522] Revert "also enable 4s when accepting a verification request" This reverts commit ab2e3a346599a4f092d43dc8d2de94954ac34f88. --- src/components/views/toasts/VerificationRequestToast.js | 4 ---- src/verification.js | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/components/views/toasts/VerificationRequestToast.js b/src/components/views/toasts/VerificationRequestToast.js index f590cecc3e..c11cefc839 100644 --- a/src/components/views/toasts/VerificationRequestToast.js +++ b/src/components/views/toasts/VerificationRequestToast.js @@ -24,7 +24,6 @@ import {userLabelForEventRoom} from "../../../utils/KeyVerificationStateObserver import dis from "../../../dispatcher"; import ToastStore from "../../../stores/ToastStore"; import Modal from "../../../Modal"; -import {enable4SIfNeeded} from "../../../verification"; export default class VerificationRequestToast extends React.PureComponent { constructor(props) { @@ -74,9 +73,6 @@ export default class VerificationRequestToast extends React.PureComponent { } accept = async () => { - if (!await enable4SIfNeeded()) { - return; - } ToastStore.sharedInstance().dismissToast(this.props.toastKey); const {request} = this.props; // no room id for to_device requests diff --git a/src/verification.js b/src/verification.js index 235828dc92..6f1bb07344 100644 --- a/src/verification.js +++ b/src/verification.js @@ -24,7 +24,7 @@ import {findDMForUser} from './createRoom'; import {accessSecretStorage} from './CrossSigningManager'; import SettingsStore from './settings/SettingsStore'; -export async function enable4SIfNeeded() { +async function enable4SIfNeeded() { const cli = MatrixClientPeg.get(); if (!cli.isCryptoEnabled() || !SettingsStore.isFeatureEnabled("feature_cross_signing")) { return false; From 3baaaaab079257eed7ea8edf9faf4f77b8fc8d09 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 11 Mar 2020 12:03:16 +0100 Subject: [PATCH 265/522] use splice correctly after removing a local alias --- src/components/views/room_settings/AliasSettings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 0a7bd1d333..1d6b29c3ce 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -235,7 +235,7 @@ export default class AliasSettings extends React.Component { // to this room. See https://github.com/vector-im/riot-web/issues/7353 MatrixClientPeg.get().deleteAlias(alias).then(() => { const localAliases = this.state.localAliases.slice(); - localAliases.splice(index); + localAliases.splice(index, 1); this.setState({localAliases}); if (this.state.canonicalAlias === alias) { From cccf7cd07ff585f974c805aeab7f1a94cd85e86d Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 11 Mar 2020 12:13:28 +0100 Subject: [PATCH 266/522] specific error for lack of permissions when trying to delete an alias --- .../views/room_settings/AliasSettings.js | 14 ++++++++++---- src/i18n/strings/en_EN.json | 3 ++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 1d6b29c3ce..eab41c5ccd 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -243,12 +243,18 @@ export default class AliasSettings extends React.Component { } }).catch((err) => { console.error(err); - Modal.createTrackedDialog('Error removing alias', '', ErrorDialog, { - title: _t("Error removing alias"), - description: _t( + let description; + if (err.errcode === "M_FORBIDDEN") { + description = _t("You don't have permission to delete the alias."); + } else { + description = _t( "There was an error removing that alias. It may no longer exist or a temporary " + "error occurred.", - ), + ); + } + Modal.createTrackedDialog('Error removing alias', '', ErrorDialog, { + title: _t("Error removing alias"), + description, }); }); }; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 10ae7fb455..d0e01917f3 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1150,8 +1150,9 @@ "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.", "Error creating alias": "Error creating alias", "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.", - "Error removing alias": "Error removing alias", + "You don't have permission to delete the alias.": "You don't have permission to delete the alias.", "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "There was an error removing that alias. It may no longer exist or a temporary error occurred.", + "Error removing alias": "Error removing alias", "Main address": "Main address", "not specified": "not specified", "This room has no local addresses": "This room has no local addresses", From 80e7cbf2e1ee44c3f405b8f5f3f5608501aa96e8 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 11 Mar 2020 14:30:10 +0000 Subject: [PATCH 267/522] Translated using Weblate (Russian) Currently translated at 83.2% (1783 of 2144 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ru/ --- src/i18n/strings/ru.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 298025ea6a..c79be28838 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -1044,8 +1044,8 @@ "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Превышен один из ресурсных лимитов сервера, по этому некоторые пользователи не смогут залогиниться.", "Join": "Присоединиться", "That doesn't look like a valid email address": "Это не похоже на адрес электронной почты", - "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Пожалуйста, обратитесь к вашему администратору, чтобы продолжить использование сервиса.", - "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Your message wasn't sent because this homeserver has exceeded a resource limit. Пожалуйста, обратитесь к вашему администратору, чтобы продолжить использование сервиса.", + "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "Ваше сообщение не было отправлено, потому что этот домашний сервер превысил месячный лимит активных пользователей. обратитесь к администратору службы, чтобы продолжить использование службы.", + "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Ваше сообщение не было отправлено, потому что этот домашний сервер превысил лимит ресурсов. обратитесь к администратору службы, чтобы продолжить использование службы.", "User %(user_id)s does not exist": "Пользователя %(user_id)s не существует", "Enable Community Filter Panel": "Включить панель сообществ", "Prompt before sending invites to potentially invalid matrix IDs": "Подтверждать отправку приглашений на потенциально недействительные matrix ID", @@ -1194,7 +1194,7 @@ "Scissors": "Ножницы", "Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "Общение с этим пользователем зашифровано сквозным шифрованием и недоступно третьим лицам.", "We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "Мы отправили вам сообщение для подтверждения адреса электронной почты. Пожалуйста выполните указания данные в сообщении и нажмите кнопку внизу.", - "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Вы уверены? You will lose your encrypted messages if your keys are not backed up properly.", + "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Вы уверены? Зашифрованные сообщения будут безвозвратно утеряны при отсутствии соответствующего резервного копирования ваших ключей.", "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Зашифрованные сообщения защищены сквозным шифрованием. Только вы и ваш собеседник имеете ключи для их расшифровки и чтения.", "Unable to load key backup status": "Не удалось получить статус резервного копирования для ключей шифрования", "Restore from Backup": "Восстановить из резервной копии", @@ -1481,9 +1481,9 @@ "Unexpected error resolving identity server configuration": "Неопределённая ошибка при разборе параметра сервера идентификации", "Use lowercase letters, numbers, dashes and underscores only": "Используйте только строчные буквы, цифры, тире и подчеркивания", "Cannot reach identity server": "Не удаётся связаться с сервером идентификации", - "You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.", - "You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.", - "You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.", + "You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Вы можете зарегистрироваться, но некоторые возможности не будет доступны, пока сервер идентификации не станет доступным. Если вы продолжаете видеть это предупреждение, проверьте вашу конфигурацию или свяжитесь с администратором сервера.", + "You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Вы можете сбросить пароль, но некоторые возможности не будет доступны, пока сервер идентификации не станет доступным. Если вы продолжаете видеть это предупреждение, проверьте вашу конфигурацию или свяжитесь с администратором сервера.", + "You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Вы можете войти в систему, но некоторые возможности не будет доступны, пока сервер идентификации не станет доступным. Если вы продолжаете видеть это предупреждение, проверьте вашу конфигурацию или свяжитесь с администратором сервера.", "Log in to your new account.": "Войти в вашу новую учётную запись.", "You can now close this window or log in to your new account.": "Вы можете закрыть это окно или войти в вашу новую учётную запись.", "Registration Successful": "Регистрация успешно завершена", @@ -1661,8 +1661,8 @@ "This client does not support end-to-end encryption.": "Этот клиент не поддерживает сквозное шифрование.", "Messages in this room are not end-to-end encrypted.": "Сообщения в этой комнате не шифруются сквозным шифрованием.", "Please create a new issue on GitHub so that we can investigate this bug.": "Пожалуйста, создайте новую проблему/вопрос на GitHub, чтобы мы могли расследовать эту ошибку.", - "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Используйте сервер идентификации что бы пригласить по электронной почте Use the default (%(defaultIdentityServerName)s) or manage in Settings.", - "Use an identity server to invite by email. Manage in Settings.": "Используйте сервер идентификации что бы пригласить по электронной почте Manage in Settings.", + "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Используйте идентификационный сервер для приглашения по электронной почте. Используйте значение по умолчанию (%(defaultIdentityServerName)s) или управляйте в Настройках.", + "Use an identity server to invite by email. Manage in Settings.": "Используйте идентификационный сервер для приглашения по электронной почте. Управление в Настройки.", "Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Запретить пользователям других Matrix-Серверов присоединяться к этой комнате (этот параметр нельзя изменить позже!)", "Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "Отчет о данном сообщении отправит свой уникальный 'event ID' администратору вашего домашнего сервера. Если сообщения в этой комнате зашифрованы, администратор вашего домашнего сервера не сможет прочитать текст сообщения или просмотреть какие-либо файлы или изображения.", "Missing captcha public key in homeserver configuration. Please report this to your homeserver administrator.": "Отсутствует Капча открытого ключа в конфигурации домашнего сервера. Пожалуйста, сообщите об этом администратору вашего домашнего сервера.", From e373dbd616aba62b9c7f082085cd16eae9f7710c Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 11 Mar 2020 15:52:48 +0100 Subject: [PATCH 268/522] use new legacy verif method for a single device --- src/verification.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/verification.js b/src/verification.js index 6f1bb07344..4443079b95 100644 --- a/src/verification.js +++ b/src/verification.js @@ -23,6 +23,7 @@ import {RIGHT_PANEL_PHASES} from "./stores/RightPanelStorePhases"; import {findDMForUser} from './createRoom'; import {accessSecretStorage} from './CrossSigningManager'; import SettingsStore from './settings/SettingsStore'; +import {verificationMethods} from 'matrix-js-sdk/src/crypto'; async function enable4SIfNeeded() { const cli = MatrixClientPeg.get(); @@ -57,9 +58,10 @@ export async function verifyDevice(user, device) { return; } const cli = MatrixClientPeg.get(); - const verificationRequestPromise = cli.requestVerification( + const verificationRequestPromise = cli.legacyDeviceVerification( user.userId, - [device.deviceId], + device.deviceId, + verificationMethods.SAS, ); dis.dispatch({ action: "set_right_panel_phase", @@ -77,7 +79,7 @@ export async function legacyVerifyUser(user) { return; } const cli = MatrixClientPeg.get(); - const verificationRequestPromise = cli.requestVerification(user.userId); + const verificationRequestPromise = cli.beginKeyVerification(user.userId); dis.dispatch({ action: "set_right_panel_phase", phase: RIGHT_PANEL_PHASES.EncryptionPanel, From 6b4d3cad7cb329900841e63319dfee7fa72bf271 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 11 Mar 2020 14:54:03 +0000 Subject: [PATCH 269/522] yarn upgrade --- yarn.lock | 695 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 449 insertions(+), 246 deletions(-) diff --git a/yarn.lock b/yarn.lock index 20580f26f9..5e4fa6b5a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,27 +25,27 @@ dependencies: "@babel/highlight" "^7.8.3" -"@babel/compat-data@^7.8.4": - version "7.8.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.5.tgz#d28ce872778c23551cbb9432fc68d28495b613b9" - integrity sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg== +"@babel/compat-data@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.6.tgz#7eeaa0dfa17e50c7d9c0832515eee09b56f04e35" + integrity sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q== dependencies: browserslist "^4.8.5" invariant "^2.2.4" semver "^5.5.0" "@babel/core@>=7.2.2", "@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" - integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.7.tgz#b69017d221ccdeb203145ae9da269d72cf102f3b" + integrity sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" + "@babel/generator" "^7.8.7" "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.4" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/parser" "^7.8.7" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.7" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -55,12 +55,12 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.8.3", "@babel/generator@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" - integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== +"@babel/generator@^7.4.0", "@babel/generator@^7.8.3", "@babel/generator@^7.8.6", "@babel/generator@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.7.tgz#870b3cf7984f5297998152af625c4f3e341400f7" + integrity sha512-DQwjiKJqH4C3qGiyQCAExJHoZssn49JTMJgZ8SANGgVFdkupcUhLOdkAeoC6kmHZCPfoDG5M0b6cFlSN5wW7Ew== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.8.7" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" @@ -88,43 +88,44 @@ "@babel/types" "^7.8.3" esutils "^2.0.0" -"@babel/helper-call-delegate@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692" - integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A== +"@babel/helper-call-delegate@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz#28a279c2e6c622a6233da548127f980751324cab" + integrity sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ== dependencies: "@babel/helper-hoist-variables" "^7.8.3" "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/types" "^7.8.7" -"@babel/helper-compilation-targets@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz#03d7ecd454b7ebe19a254f76617e61770aed2c88" - integrity sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg== +"@babel/helper-compilation-targets@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz#dac1eea159c0e4bd46e309b5a1b04a66b53c1dde" + integrity sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw== dependencies: - "@babel/compat-data" "^7.8.4" - browserslist "^4.8.5" + "@babel/compat-data" "^7.8.6" + browserslist "^4.9.1" invariant "^2.2.4" levenary "^1.1.1" semver "^5.5.0" "@babel/helper-create-class-features-plugin@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz#5b94be88c255f140fd2c10dd151e7f98f4bff397" - integrity sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA== + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0" + integrity sha512-klTBDdsr+VFFqaDHm5rR69OpEQtO2Qv8ECxHS1mNhJJvaHArR6a1xTf5K/eZW7eZpJbhCx3NW1Yt/sKsLXLblg== dependencies: "@babel/helper-function-name" "^7.8.3" "@babel/helper-member-expression-to-functions" "^7.8.3" "@babel/helper-optimise-call-expression" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-split-export-declaration" "^7.8.3" "@babel/helper-create-regexp-features-plugin@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" - integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q== + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.6.tgz#7fa040c97fb8aebe1247a5c645330c32d083066b" + integrity sha512-bPyujWfsHhV/ztUkwGHz/RPV1T1TDEsSZDsN42JPehndA+p1KKTh3npvTadux0ZhCrytx9tvjpWNowKby3tM6A== dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-regex" "^7.8.3" regexpu-core "^4.6.0" @@ -183,15 +184,16 @@ "@babel/types" "^7.8.3" "@babel/helper-module-transforms@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590" - integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q== + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz#6a13b5eecadc35692047073a64e42977b97654a4" + integrity sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg== dependencies: "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-simple-access" "^7.8.3" "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.8.6" lodash "^4.17.13" "@babel/helper-optimise-call-expression@^7.8.3": @@ -224,15 +226,15 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-replace-supers@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc" - integrity sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA== +"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" + integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== dependencies: "@babel/helper-member-expression-to-functions" "^7.8.3" "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.6" "@babel/helper-simple-access@^7.8.3": version "7.8.3" @@ -277,10 +279,10 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" - integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.7.tgz#7b8facf95d25fef9534aad51c4ffecde1a61e26a" + integrity sha512-9JWls8WilDXFGxs0phaXAZgpxTZhSk/yOYH2hTHC0X1yC7Z78IJfvR1vJ+rmJKq3I35td2XzXzN6ZLYlna+r/A== "@babel/plugin-proposal-async-generator-functions@^7.8.3": version "7.8.3" @@ -509,17 +511,17 @@ "@babel/helper-plugin-utils" "^7.8.3" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8" - integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w== +"@babel/plugin-transform-classes@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz#77534447a477cbe5995ae4aee3e39fbc8090c46d" + integrity sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg== dependencies: "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-define-map" "^7.8.3" "@babel/helper-function-name" "^7.8.3" "@babel/helper-optimise-call-expression" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-split-export-declaration" "^7.8.3" globals "^11.1.0" @@ -577,10 +579,10 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-flow" "^7.8.3" -"@babel/plugin-transform-for-of@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz#6fe8eae5d6875086ee185dd0b098a8513783b47d" - integrity sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A== +"@babel/plugin-transform-for-of@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz#a051bd1b402c61af97a27ff51b468321c7c2a085" + integrity sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw== dependencies: "@babel/helper-plugin-utils" "^7.8.3" @@ -665,12 +667,12 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-replace-supers" "^7.8.3" -"@babel/plugin-transform-parameters@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz#1d5155de0b65db0ccf9971165745d3bb990d77d3" - integrity sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA== +"@babel/plugin-transform-parameters@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.7.tgz#66fa2f1de4129b4e0447509223ac71bda4955395" + integrity sha512-brYWaEPTRimOctz2NDA3jnBbDi7SVN2T4wYuu0aqSzxC3nozFZngGaw29CJ9ZPweB7k+iFmZuoG3IVPIcXmD2g== dependencies: - "@babel/helper-call-delegate" "^7.8.3" + "@babel/helper-call-delegate" "^7.8.7" "@babel/helper-get-function-arity" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" @@ -713,12 +715,12 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-regenerator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8" - integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA== +"@babel/plugin-transform-regenerator@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" + integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== dependencies: - regenerator-transform "^0.14.0" + regenerator-transform "^0.14.2" "@babel/plugin-transform-reserved-words@^7.8.3": version "7.8.3" @@ -775,9 +777,9 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-typescript@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.3.tgz#be6f01a7ef423be68e65ace1f04fc407e6d88917" - integrity sha512-Ebj230AxcrKGZPKIp4g4TdQLrqX95TobLUWKd/CwG7X1XHUH1ZpkpFvXuXqWbtGRWb7uuEWNlrl681wsOArAdQ== + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.7.tgz#48bccff331108a7b3a28c3a4adc89e036dc3efda" + integrity sha512-7O0UsPQVNKqpHeHLpfvOG4uXmlw+MOxYvUv6Otc9uH5SYMIxvF6eBdjkWvC3f9G+VXe0RsNExyAQBeTRug/wqQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" @@ -792,12 +794,12 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/preset-env@^7.7.6": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.4.tgz#9dac6df5f423015d3d49b6e9e5fa3413e4a72c4e" - integrity sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w== + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.7.tgz#1fc7d89c7f75d2d70c2b6768de6c2e049b3cb9db" + integrity sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw== dependencies: - "@babel/compat-data" "^7.8.4" - "@babel/helper-compilation-targets" "^7.8.4" + "@babel/compat-data" "^7.8.6" + "@babel/helper-compilation-targets" "^7.8.7" "@babel/helper-module-imports" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-proposal-async-generator-functions" "^7.8.3" @@ -820,13 +822,13 @@ "@babel/plugin-transform-async-to-generator" "^7.8.3" "@babel/plugin-transform-block-scoped-functions" "^7.8.3" "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.8.3" + "@babel/plugin-transform-classes" "^7.8.6" "@babel/plugin-transform-computed-properties" "^7.8.3" "@babel/plugin-transform-destructuring" "^7.8.3" "@babel/plugin-transform-dotall-regex" "^7.8.3" "@babel/plugin-transform-duplicate-keys" "^7.8.3" "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.8.4" + "@babel/plugin-transform-for-of" "^7.8.6" "@babel/plugin-transform-function-name" "^7.8.3" "@babel/plugin-transform-literals" "^7.8.3" "@babel/plugin-transform-member-expression-literals" "^7.8.3" @@ -837,9 +839,9 @@ "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" "@babel/plugin-transform-new-target" "^7.8.3" "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.4" + "@babel/plugin-transform-parameters" "^7.8.7" "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.7" "@babel/plugin-transform-reserved-words" "^7.8.3" "@babel/plugin-transform-shorthand-properties" "^7.8.3" "@babel/plugin-transform-spread" "^7.8.3" @@ -847,7 +849,7 @@ "@babel/plugin-transform-template-literals" "^7.8.3" "@babel/plugin-transform-typeof-symbol" "^7.8.4" "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/types" "^7.8.7" browserslist "^4.8.5" core-js-compat "^3.6.2" invariant "^2.2.2" @@ -882,9 +884,9 @@ "@babel/plugin-transform-typescript" "^7.8.3" "@babel/register@^7.7.4": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.8.3.tgz#5d5d30cfcc918437535d724b8ac1e4a60c5db1f8" - integrity sha512-t7UqebaWwo9nXWClIPLPloa5pN33A2leVs8Hf0e9g9YwUP8/H9NeR7DJU+4CXo23QtjChQv5a3DjEtT83ih1rg== + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.8.6.tgz#a1066aa6168a73a70c35ef28cc5865ccc087ea69" + integrity sha512-7IDO93fuRsbyml7bAafBQb3RcBGlCpU4hh5wADA2LJEEcYk92WkwFZ0pHyIi2fb5Auoz1714abETdZKCOxN0CQ== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.13" @@ -892,41 +894,49 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.8.3": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308" - integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ== +"@babel/runtime-corejs3@^7.8.3": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.8.7.tgz#8209d9dff2f33aa2616cb319c83fe159ffb07b8c" + integrity sha512-sc7A+H4I8kTd7S61dgB9RomXu/C+F4IrRr4Ytze4dnfx7AXEpCrejSNpjx7vq6y/Bak9S6Kbk65a/WgMLtg43Q== dependencies: - regenerator-runtime "^0.13.2" + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" -"@babel/template@^7.4.0", "@babel/template@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" - integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.7.tgz#8fefce9802db54881ba59f90bb28719b4996324d" + integrity sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.4.0", "@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" - integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4", "@babel/traverse@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff" + integrity sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" + "@babel/generator" "^7.8.6" "@babel/helper-function-name" "^7.8.3" "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.7.0", "@babel/types@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" - integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d" + integrity sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw== dependencies: esutils "^2.0.2" lodash "^4.17.13" @@ -1109,7 +1119,7 @@ asn1js "^2.0.22" tslib "^1.9.3" -"@peculiar/json-schema@^1.1.6": +"@peculiar/json-schema@^1.1.9": version "1.1.9" resolved "https://registry.yarnpkg.com/@peculiar/json-schema/-/json-schema-1.1.9.tgz#b746e046b787607a1b2804f64437fda2527b3e62" integrity sha512-F2ST2y/IQPgY+1QMw1Q33sqJbGDCeO3lGqI69SL3Hgo0++7iHqprUB1QyxB/A7bN3tuM65MBxoM2JLbwh42lsQ== @@ -1117,15 +1127,15 @@ tslib "^1.10.0" "@peculiar/webcrypto@^1.0.22": - version "1.0.22" - resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.0.22.tgz#9dae652fce6bacd9df15bc91965797cee33adf67" - integrity sha512-NP6H6ZGXUvJnQJCWzUgnRcQv+9nMCNwLUDhTwOxRUwPFvtHauMOl0oPTKUjbhInCMaE55gJqB4yc0YKbde6Exw== + version "1.0.23" + resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.0.23.tgz#5519b839fba2cf8603bbbd6764dc41b108093dad" + integrity sha512-Ssb4xpQI3BJ0itAtT9y9jyeeiWNjcFvP6Wt/ehITxRYrEnlSfnrP7Ytc7BwN8XtnKmXDS2cWvppPldw5QsFCcw== dependencies: "@peculiar/asn1-schema" "^1.0.3" - "@peculiar/json-schema" "^1.1.6" + "@peculiar/json-schema" "^1.1.9" asn1js "^2.0.26" pvtsutils "^1.0.9" - tslib "^1.10.0" + tslib "^1.11.1" webcrypto-core "^1.0.17" "@sinonjs/commons@^1.7.0": @@ -1213,9 +1223,9 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "13.7.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.6.tgz#cb734a7c191472ae6a2b3a502b4dfffcea974113" - integrity sha512-eyK7MWD0R1HqVTp+PtwRgFeIsemzuj4gBFSQxfPHY5iMjS7474e5wq+VFgTcdpyHeNxyKSaetYAjdMLJlKoWqA== + version "13.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.0.tgz#5b6ee7a77faacddd7de719017d0bc12f52f81589" + integrity sha512-0ARSQootUG1RljH2HncpsY2TJBfGQIKOOi7kxzUY6z54ePu/ZD+wJA8zI2Q6v8rol2qpG/rvqsReco8zNMPvhQ== "@types/stack-utils@^1.0.1": version "1.0.1" @@ -1256,18 +1266,18 @@ "@types/yargs-parser" "*" "@typescript-eslint/experimental-utils@^2.5.0": - version "2.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.21.0.tgz#71de390a3ec00b280b69138d80733406e6e86bfa" - integrity sha512-olKw9JP/XUkav4lq0I7S1mhGgONJF9rHNhKFn9wJlpfRVjNo3PPjSvybxEldvCXnvD+WAshSzqH5cEjPp9CsBA== + version "2.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.23.0.tgz#5d2261c8038ec1698ca4435a8da479c661dc9242" + integrity sha512-OswxY59RcXH3NNPmq+4Kis2CYZPurRU6mG5xPcn24CjFyfdVli5mySwZz/g/xDbJXgDsYqNGq7enV0IziWGXVQ== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.21.0" + "@typescript-eslint/typescript-estree" "2.23.0" eslint-scope "^5.0.0" -"@typescript-eslint/typescript-estree@2.21.0": - version "2.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.21.0.tgz#7e4be29f2e338195a2e8c818949ed0ff727cc943" - integrity sha512-NC/nogZNb9IK2MEFQqyDBAciOT8Lp8O3KgAfvHx2Skx6WBo+KmDqlU3R9KxHONaijfTIKtojRe3SZQyMjr3wBw== +"@typescript-eslint/typescript-estree@2.23.0": + version "2.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.23.0.tgz#d355960fab96bd550855488dcc34b9a4acac8d36" + integrity sha512-pmf7IlmvXdlEXvE/JWNNJpEvwBV59wtJqA8MLAxMKLXNKVRC3HZBXR/SlZLPWTCcwOSg9IM7GeRSV3SIerGVqw== dependencies: debug "^4.1.1" eslint-visitor-keys "^1.1.0" @@ -1438,6 +1448,11 @@ abab@^2.0.0: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + acorn-globals@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" @@ -1457,14 +1472,14 @@ acorn-walk@^6.0.1: integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn@^5.5.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== acorn@^6.0.1, acorn@^6.0.7, acorn@^6.2.1: - version "6.4.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" - integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== agent-base@4, agent-base@^4.3.0: version "4.3.0" @@ -1571,11 +1586,19 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.1.1: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1951,10 +1974,10 @@ browser-encrypt-attachment@^0.3.0: resolved "https://registry.yarnpkg.com/browser-encrypt-attachment/-/browser-encrypt-attachment-0.3.0.tgz#205a94caadf0dc7e81413941812f655bd190ff1c" integrity sha1-IFqUyq3w3H6BQTlBgS9lW9GQ/xw= -browser-process-hrtime@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" - integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browser-request@^0.3.3: version "0.3.3" @@ -2027,14 +2050,14 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.8.3, browserslist@^4.8.5: - version "4.8.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.7.tgz#ec8301ff415e6a42c949d0e66b405eb539c532d0" - integrity sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA== +browserslist@^4.8.3, browserslist@^4.8.5, browserslist@^4.9.1: + version "4.9.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.9.1.tgz#01ffb9ca31a1aef7678128fc6a2253316aa7287c" + integrity sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw== dependencies: - caniuse-lite "^1.0.30001027" - electron-to-chromium "^1.3.349" - node-releases "^1.1.49" + caniuse-lite "^1.0.30001030" + electron-to-chromium "^1.3.363" + node-releases "^1.1.50" bs58@^4.0.1: version "4.0.1" @@ -2088,9 +2111,9 @@ buffer@^4.3.0: isarray "^1.0.0" buffer@^5.4.3: - version "5.4.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.3.tgz#3fbc9c69eb713d323e3fc1a895eee0710c072115" - integrity sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A== + version "5.5.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce" + integrity sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -2189,10 +2212,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001027: - version "1.0.30001030" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001030.tgz#78076c4c6d67d3e41d6eb9399853fb27fe6e44ee" - integrity sha512-QGK0W4Ft/Ac+zTjEiRJfwDNATvS3fodDczBXrH42784kcfqcDKpEPfN08N0HQjrAp8He/Jw8QiSS9QRn7XAbUw== +caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001030: + version "1.0.30001033" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001033.tgz#60c328fb56860de60f9a2cb419c31fb80587cba0" + integrity sha512-8Ibzxee6ibc5q88cM1usPsMpJOG5CTq0s/dKOmlekPbDGKt+UrnOOTPSjQz3kVo6yL7N4SB5xd+FGLHQmbzh6A== capture-exit@^2.0.0: version "2.0.0" @@ -2481,6 +2504,11 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -2523,6 +2551,11 @@ core-js-compat@^3.6.2: browserslist "^4.8.3" semver "7.0.0" +core-js-pure@^3.0.0: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a" + integrity sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw== + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -2716,7 +2749,7 @@ debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.1.0: +debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -2792,6 +2825,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -2805,6 +2843,11 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -2987,10 +3030,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.349: - version "1.3.361" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.361.tgz#a820bf52da171c0024314745462cfe0dc944373e" - integrity sha512-OzSVjWpsRhJyr9PSAXkeloSe6e9viU2ToGt1wXlXFsGcxuI9vlsnalL+V/AM59Z2pEo3wRxIddtOGsT7Y6x/sQ== +electron-to-chromium@^1.3.363: + version "1.3.375" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.375.tgz#e290d59d316024e5499057944c10d05c518b7a24" + integrity sha512-zmaFnYVBtfpF8bGRYxgPeVAlXB7N3On8rjBE2ROc6wOpTPpzRWaiHo6KkbJMvlH07CH33uks/TEb6kuMMn8q6A== elliptic@^6.0.0: version "6.5.2" @@ -3252,21 +3295,21 @@ eslint-plugin-flowtype@^2.30.0: lodash "^4.17.10" eslint-plugin-jest@^23.0.4: - version "23.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.8.0.tgz#c978f959fa8395801742d13c5a3125a986d2661e" - integrity sha512-DKXmLxguZ1Lru4u5YM12ko3WLq6gqo7dhV2b63K731+/PNyZ/Ff6NGONQsGUtPLG9zU3kdz/N+2LTbweNZifeg== + version "23.8.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.8.2.tgz#6f28b41c67ef635f803ebd9e168f6b73858eb8d4" + integrity sha512-xwbnvOsotSV27MtAe7s8uGWOori0nUsrXh2f1EnpmXua8sDfY6VZhHAhHg2sqK7HBNycRQExF074XSZ7DvfoFg== dependencies: "@typescript-eslint/experimental-utils" "^2.5.0" eslint-plugin-react-hooks@^2.0.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.4.0.tgz#db6ee1cc953e3a217035da3d4e9d4356d3c672a4" - integrity sha512-bH5DOCP6WpuOqNaux2BlaDCrSgv8s5BitP90bTgtZ1ZsRn2bdIfeMDY5F2RnJVnyKDy6KRQRDbipPLZ1y77QtQ== + version "2.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.0.tgz#c50ab7ca5945ce6d1cf8248d9e185c80b54171b6" + integrity sha512-bzvdX47Jx847bgAYf0FPX3u1oxU+mKU8tqrpj4UX9A96SbAmj/HVEefEy6rJUog5u8QIlOPTKZcBpGn5kkKfAQ== eslint-plugin-react@^7.7.0: - version "7.18.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.18.3.tgz#8be671b7f6be095098e79d27ac32f9580f599bc8" - integrity sha512-Bt56LNHAQCoou88s8ViKRjMB2+36XRejCQ1VoLj716KI1MoE99HpTVvIThJ0rvFmG4E4Gsq+UgToEjn+j044Bg== + version "7.19.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666" + integrity sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ== dependencies: array-includes "^3.1.1" doctrine "^2.1.0" @@ -3276,8 +3319,10 @@ eslint-plugin-react@^7.7.0: object.fromentries "^2.0.2" object.values "^1.1.1" prop-types "^15.7.2" - resolve "^1.14.2" + resolve "^1.15.1" + semver "^6.3.0" string.prototype.matchall "^4.0.2" + xregexp "^4.3.0" eslint-rule-composer@^0.3.0: version "0.3.0" @@ -3805,6 +3850,13 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -3867,6 +3919,20 @@ fuse.js@^2.2.0: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-2.7.4.tgz#96e420fde7ef011ac49c258a621314fe576536f9" integrity sha1-luQg/efvARrEnCWKYhMU/ldlNvk= +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + "gemini-scrollbar@github:matrix-org/gemini-scrollbar#91e1e566", gemini-scrollbar@matrix-org/gemini-scrollbar#91e1e566: version "1.4.3" resolved "https://codeload.github.com/matrix-org/gemini-scrollbar/tar.gz/91e1e566fa33324188f278801baf4a79f9f554ab" @@ -4068,6 +4134,11 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -4158,9 +4229,9 @@ hosted-git-info@3.0.0: lru-cache "^5.1.1" hosted-git-info@^2.1.4: - version "2.8.6" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.6.tgz#3a6e6d0324c5371fc8c7ba7175e1e5d14578724d" - integrity sha512-Kp6rShEsCHhF5dD3EWKdkgVA8ix90oSUJ0VY4g9goxxa0+f4lx63muTftn0mlJ/+8IESGWyKnP//V2D7S4ZbIQ== + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== html-element-map@^1.2.0: version "1.2.0" @@ -4255,7 +4326,7 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4272,6 +4343,13 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -5655,7 +5733,7 @@ mathml-tag-names@^2.0.1: "matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": version "5.1.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/bc53f8fdec7222b6ca44a63cafbc7ae8c4cc396f" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/86304fd037ac43a493000fa42f393eaafc0480ac" dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" @@ -5840,11 +5918,31 @@ minimist@1.1.x: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag= -minimist@1.2.0, minimist@^1.1.1, minimist@^1.2.0, "minimist@~ 1.2.0": +minimist@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minimist@^1.1.1, minimist@^1.2.0, "minimist@~ 1.2.0": + version "1.2.3" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.3.tgz#3db5c0765545ab8637be71f333a104a965a9ca3f" + integrity sha512-+bMdgqjMN/Z77a6NlY/I3U5LlRDbnmaAk6lDveAPKwSpcPM4tKAuYsvYF8xjhOPXhOYGe/73vVLVez5PW+jqhw== + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -5869,7 +5967,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.1: +mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -5946,6 +6044,15 @@ nearley@^2.7.10: randexp "0.4.6" semver "^5.4.1" +needle@^2.2.1: + version "2.3.3" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.3.tgz#a041ad1d04a871b0ebb666f40baaf1fb47867117" + integrity sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" @@ -6023,13 +6130,37 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-releases@^1.1.49: - version "1.1.50" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.50.tgz#803c40d2c45db172d0410e4efec83aa8c6ad0592" - integrity sha512-lgAmPv9eYZ0bGwUYAKlr8MG6K4CvWliWqnkcT2P8mMAgVrH3lqfBPorFlxiG1pHQnqmavJZ9vbMXUTNyMLbrgQ== +node-pre-gyp@*: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4.4.2" + +node-releases@^1.1.50: + version "1.1.51" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.51.tgz#70d0e054221343d2966006bfbd4d98622cc00bd0" + integrity sha512-1eQEs6HFYY1kMXQPOLzCf7HdjReErmvn85tZESMczdCNVWP3Y7URYLBAyYynuI7yef1zj4HN5q+oB2x67QU0lw== dependencies: semver "^6.3.0" +nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -6062,6 +6193,27 @@ normalize-selector@^0.2.0: resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -6069,6 +6221,16 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -6218,6 +6380,11 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -6227,11 +6394,19 @@ os-locale@^3.0.0, os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -6631,7 +6806,7 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" -private@^0.1.6: +private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -6861,7 +7036,7 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -rc@1.2.8, rc@^1.2.8: +rc@1.2.8, rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -6902,14 +7077,14 @@ react-clientside-effect@^1.2.2: "@babel/runtime" "^7.0.0" react-dom@^16.9.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" - integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== + version "16.13.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.0.tgz#cdde54b48eb9e8a0ca1b3dc9943d9bb409b81866" + integrity sha512-y09d2c4cG220DzdlFkPTnVvGTszVvNpC73v+AaLGLHbkpy3SSgvYq8x0rNwPJ/Rk/CicTNgk0hbHNw1gMEZAXg== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.18.0" + scheduler "^0.19.0" react-focus-lock@^2.2.1: version "2.2.1" @@ -6930,9 +7105,9 @@ react-focus-lock@^2.2.1: gemini-scrollbar matrix-org/gemini-scrollbar#91e1e566 react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" - integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== + version "16.13.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.0.tgz#0f37c3613c34fe6b37cd7f763a0d6293ab15c527" + integrity sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA== react-lifecycles-compat@^3.0.0: version "3.0.4" @@ -6962,14 +7137,14 @@ react-redux@^5.0.6: react-lifecycles-compat "^3.0.0" react-test-renderer@^16.0.0-0, react-test-renderer@^16.9.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.12.0.tgz#11417ffda579306d4e841a794d32140f3da1b43f" - integrity sha512-Vj/teSqt2oayaWxkbhQ6gKis+t5JrknXfPVo+aIJ8QwYAqMPH77uptOdrlphyxl8eQI/rtkOYg86i/UWkpFu0w== + version "16.13.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.13.0.tgz#39ba3bf72cedc8210c3f81983f0bb061b14a3014" + integrity sha512-NQ2S9gdMUa7rgPGpKGyMcwl1d6D9MCF0lftdI3kts6kkiX+qvpC955jNjAZXlIDTjnN9jwFI8A8XhRh/9v0spA== dependencies: object-assign "^4.1.1" prop-types "^15.6.2" react-is "^16.8.6" - scheduler "^0.18.0" + scheduler "^0.19.0" react-transition-group@^1.2.0: version "1.2.1" @@ -6983,9 +7158,9 @@ react-transition-group@^1.2.0: warning "^3.0.0" react@^16.9.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" - integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== + version "16.13.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.13.0.tgz#d046eabcdf64e457bbeed1e792e235e1b9934cf7" + integrity sha512-TSavZz2iSLkq5/oiE7gnFzmURKZMltmi193rm5HEoUDAXpzT9Kzw6oNZnGoai/4+fUnm7FqS5dwgUL34TujcWQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -7025,7 +7200,7 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -7115,17 +7290,18 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" - integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== +regenerator-runtime@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz#e96bf612a3362d12bb69f7e8f74ffeab25c7ac91" + integrity sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g== -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== +regenerator-transform@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.2.tgz#949d9d87468ff88d5a7e4734ebb994a892de1ff2" + integrity sha512-V4+lGplCM/ikqi5/mkkpJ06e9Bujq1NFmNLvsCs56zg3ZbzrnUzAtizZ24TXxtRX/W2jcdScwQCnbL0CICTFkQ== dependencies: - private "^0.1.6" + "@babel/runtime" "^7.8.4" + private "^0.1.8" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -7174,9 +7350,9 @@ regjsgen@^0.5.0: integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== regjsparser@^0.6.0: - version "0.6.3" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.3.tgz#74192c5805d35e9f5ebe3c1fb5b40d40a8a38460" - integrity sha512-8uZvYbnfAtEm9Ab8NTb3hdLwL4g/LQzEYP7Xs27T96abJCCE2d6r3cPZPQEsLKy0vRSGVNG+/zVGtLr86HQduA== + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== dependencies: jsesc "~0.5.0" @@ -7352,7 +7528,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.3.2, resolve@^1.8.1: +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.8.1: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== @@ -7384,7 +7560,7 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.4.3, rimraf@^2.5.4, rimraf@^2.6.3: +rimraf@^2.4.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -7400,9 +7576,9 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: inherits "^2.0.1" rollup-plugin-terser@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.2.0.tgz#ba758adf769347b7f1eaf9ef35978d2e207dccc7" - integrity sha512-jQI+nYhtDBc9HFRBz8iGttQg7li9klmzR62RG2W2nN6hJ/FI2K2ItYQ7kJ7/zn+vs+BP1AEccmVRjRN989I+Nw== + version "5.3.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz#9c0dd33d5771df9630cd027d6a2559187f65885e" + integrity sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g== dependencies: "@babel/code-frame" "^7.5.5" jest-worker "^24.9.0" @@ -7509,10 +7685,10 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" - integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== +scheduler@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.0.tgz#a715d56302de403df742f4a9be11975b32f5698d" + integrity sha512-xowbVaTPe9r7y7RUejcK73/j8tt2jfiyTednOvHbA8JoClvMYCp+r8QegLwK/n8zWQAtZb1fFnER4XLBZXrCxA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -7546,7 +7722,7 @@ serialize-javascript@^2.1.2: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -7882,7 +8058,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -8145,6 +8321,19 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tar@^4.4.2: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -8161,9 +8350,9 @@ terser-webpack-plugin@^1.4.3: worker-farm "^1.7.0" terser@^4.1.2, terser@^4.6.2: - version "4.6.4" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.4.tgz#40a0b37afbe5b57e494536815efa68326840fc00" - integrity sha512-5fqgBPLgVHZ/fVvqRhhUp9YUiGXhFJ9ZkrZWD9vQtFBR4QIGTnbsb+/kKqSqfgp3WnBwGWAFnedGTtmX1YTn0w== + version "4.6.6" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.6.tgz#da2382e6cafbdf86205e82fb9a115bd664d54863" + integrity sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -8313,10 +8502,10 @@ trough@^1.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== -tslib@^1.10.0, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: - version "1.11.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc" - integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg== +tslib@^1.10.0, tslib@^1.11.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: + version "1.11.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== tslint@^5.20.1: version "5.20.1" @@ -8386,9 +8575,9 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^3.7.3: - version "3.8.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.2.tgz#91d6868aaead7da74f493c553aeff76c0c0b1d5a" - integrity sha512-EgOVgL/4xfVrCMbhYKUQTdF37SQn4Iw73H5BgCrF1Abdun7Kwy/QZsE/ssAy0y4LxBbvua3PIbFsbRczWWnDdQ== + version "3.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== ua-parser-js@^0.7.18: version "0.7.21" @@ -8404,9 +8593,9 @@ unherit@^1.0.4: xtend "^4.0.0" unhomoglyph@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unhomoglyph/-/unhomoglyph-1.0.4.tgz#38d2ec9de84ab921623ebd9fb60f710963c601f4" - integrity sha512-+y+QeEXwm4f0H8Tmy9fFUWHM95YcFjJLlv83/p3+EARUkeJBxnSOBADVyeuSq0TsRJ/UexxCXBKXo40ksu715w== + version "1.0.5" + resolved "https://registry.yarnpkg.com/unhomoglyph/-/unhomoglyph-1.0.5.tgz#a68c6244f0ec140bfe58293a1f66a9bd2a244343" + integrity sha512-rNAw2rGogjq4BVhsCX8K6qXrCcHmUaMCHETlUG0ujGZ3OHwnzJHwdMyzy3n/c9Y7lvlbckOd9nkW33grUVE3bg== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -8499,9 +8688,9 @@ unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== unist-util-stringify-position@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.2.tgz#5a3866e7138d55974b640ec69a94bc19e0f3fa12" - integrity sha512-nK5n8OGhZ7ZgUwoUbL8uiVRwAbZyzBsB/Ddrlbu6jwwubFza4oe15KlyEaLNMXQW1svOQq4xesUeqA85YrIUQA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== dependencies: "@types/unist" "^2.0.2" @@ -8653,9 +8842,9 @@ vfile-location@^2.0.0: integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== vfile-message@*: - version "2.0.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.2.tgz#75ba05090ec758fa8420f2c11ce049bcddd8cf3e" - integrity sha512-gNV2Y2fDvDOOqq8bEe7cF3DXU6QgV4uA9zMR2P8tix11l1r7zju3zry3wZ8sx+BEfuO6WQ7z2QzfWTvqHQiwsA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.3.tgz#0dd4f6879fb240a8099b22bd3755536c92e59ba5" + integrity sha512-qQg/2z8qnnBHL0psXyF72kCjb9YioIynvyltuNKFaUhRtqTIcIMP3xnBaPzirVZNuBrUe1qwFciSx2yApa4byw== dependencies: "@types/unist" "^2.0.0" unist-util-stringify-position "^2.0.0" @@ -8683,11 +8872,11 @@ vm-browserify@^1.0.1: integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: - browser-process-hrtime "^0.1.2" + browser-process-hrtime "^1.0.0" walk@^2.3.9: version "2.3.14" @@ -8758,9 +8947,9 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-map "~0.6.1" webpack@^4.20.2: - version "4.41.6" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.6.tgz#12f2f804bf6542ef166755050d4afbc8f66ba7e1" - integrity sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA== + version "4.42.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.0.tgz#b901635dd6179391d90740a63c93f76f39883eb8" + integrity sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" @@ -8787,9 +8976,9 @@ webpack@^4.20.2: webpack-sources "^1.4.1" what-input@^5.2.6: - version "5.2.6" - resolved "https://registry.yarnpkg.com/what-input/-/what-input-5.2.6.tgz#ac6f003bf8d3592a0031dea7a03565469b00020b" - integrity sha512-a0BcI5YR7xp87vSzGcbN0IszJKpUQuTmrZaTSQBl7TLDIdKj6rDhluQ7b/7lYGG81gWDvkySsEvwv4BW5an9kg== + version "5.2.7" + resolved "https://registry.yarnpkg.com/what-input/-/what-input-5.2.7.tgz#81afbb6b82882cff8c43fa7ff1054aa46f288ffa" + integrity sha512-ruCP2skyygi0ZHnMicHuZP7vXnJh8uJXs9R7RX488HlWigSdzngdmKo5Ti11Iatp1dnYp55VfioP/WevPaK+xQ== whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.5" @@ -8864,6 +9053,13 @@ which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: dependencies: isexe "^2.0.0" +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -8931,6 +9127,13 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xregexp@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" + integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== + dependencies: + "@babel/runtime-corejs3" "^7.8.3" + xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -8941,7 +9144,7 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From 15d5190b9b145f63d9b6fbb5d1baa0fba4846d4f Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 11 Mar 2020 16:18:08 +0000 Subject: [PATCH 270/522] js-sdk rc.1 --- package.json | 2 +- yarn.lock | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 6380eabd9e..31fb2ea83d 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "is-ip": "^2.0.0", "linkifyjs": "^2.1.6", "lodash": "^4.17.14", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop", + "matrix-js-sdk": "5.1.1-rc.1", "minimist": "^1.2.0", "pako": "^1.0.5", "png-chunks-extract": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index 20580f26f9..965e156e39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5653,9 +5653,10 @@ mathml-tag-names@^2.0.1: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": - version "5.1.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/bc53f8fdec7222b6ca44a63cafbc7ae8c4cc396f" +matrix-js-sdk@5.1.1-rc.1: + version "5.1.1-rc.1" + resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-5.1.1-rc.1.tgz#e3872696b8e6ec3fcae2d1ba1491e6a08d20954a" + integrity sha512-55F4jvJSVYJb5DDmso6Mld3HJ9v1UW0eT///SMcJtHVIJd5ZSLvsGV7rvMny7w6MHy5enfH4E2yItjjvlAL9dA== dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" From 5e3d6517319ccf95cc12171ad948fa4f56139e67 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 11 Mar 2020 16:23:53 +0000 Subject: [PATCH 271/522] Prepare changelog for v2.2.2 --- CHANGELOG.md | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d436ca690..94909f9df4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,138 @@ +Changes in [2.2.2](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.2.2) (2020-03-11) +=================================================================================================== +[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.2.1...v2.2.2) + + * Update from Weblate + [\#4200](https://github.com/matrix-org/matrix-react-sdk/pull/4200) + * Revert "enable 4s when accepting a verification request" + [\#4198](https://github.com/matrix-org/matrix-react-sdk/pull/4198) + * Don't remount main split children on rhs collapse + [\#4197](https://github.com/matrix-org/matrix-react-sdk/pull/4197) + * Add fallback label for canonical alias events that dont change anything + [\#4195](https://github.com/matrix-org/matrix-react-sdk/pull/4195) + * Immediately switch to verification dialog when clicking [Continue] from new + session dialog + [\#4196](https://github.com/matrix-org/matrix-react-sdk/pull/4196) + * Enable 4S if needed when trying to verify or accepting verification + [\#4194](https://github.com/matrix-org/matrix-react-sdk/pull/4194) + * Remove extraneous tab stop from room tree view. + [\#4193](https://github.com/matrix-org/matrix-react-sdk/pull/4193) + * Remove v1 identity server fallbacks + [\#4191](https://github.com/matrix-org/matrix-react-sdk/pull/4191) + * Allow editing of alt_aliases according to MSC2432 + [\#4187](https://github.com/matrix-org/matrix-react-sdk/pull/4187) + * Update timeline rendering of aliases + [\#4189](https://github.com/matrix-org/matrix-react-sdk/pull/4189) + * Fix mark as read button for dark theme + [\#4190](https://github.com/matrix-org/matrix-react-sdk/pull/4190) + * Un-linkify version in settings + [\#4188](https://github.com/matrix-org/matrix-react-sdk/pull/4188) + * Make Mjolnir stop more robust + [\#4186](https://github.com/matrix-org/matrix-react-sdk/pull/4186) + * Fix secret sharing names to match spec + [\#4185](https://github.com/matrix-org/matrix-react-sdk/pull/4185) + * Share secrets with another device on request + [\#4172](https://github.com/matrix-org/matrix-react-sdk/pull/4172) + * Fall back to to_device verification if other user hasn't uploaded cross- + signing keys + [\#4181](https://github.com/matrix-org/matrix-react-sdk/pull/4181) + * Disable edits on redacted events + [\#4182](https://github.com/matrix-org/matrix-react-sdk/pull/4182) + * Use crypto.verification.request even when xsign is disabled + [\#4180](https://github.com/matrix-org/matrix-react-sdk/pull/4180) + * Reword the status for the currently indexing rooms. + [\#4084](https://github.com/matrix-org/matrix-react-sdk/pull/4084) + * Moved read receipts to the bottom of the message + [\#3892](https://github.com/matrix-org/matrix-react-sdk/pull/3892) + * Include a mark as read X under the scroll to unread button + [\#4159](https://github.com/matrix-org/matrix-react-sdk/pull/4159) + * Show the room presence indicator, even when cross-singing is enabled + [\#4178](https://github.com/matrix-org/matrix-react-sdk/pull/4178) + * Add local echo when clicking "Manually Verify" in unverified session dialog + [\#4179](https://github.com/matrix-org/matrix-react-sdk/pull/4179) + * link to matrix.org/security-disclosure-policy in help screen + [\#4129](https://github.com/matrix-org/matrix-react-sdk/pull/4129) + * only show verify button if user has uploaded cross-signing keys + [\#4174](https://github.com/matrix-org/matrix-react-sdk/pull/4174) + * Fix room alias references in topics + [\#4176](https://github.com/matrix-org/matrix-react-sdk/pull/4176) + * Fix not being able to start chats when you have no rooms + [\#4177](https://github.com/matrix-org/matrix-react-sdk/pull/4177) + * Disable registration flows on SSO servers + [\#4170](https://github.com/matrix-org/matrix-react-sdk/pull/4170) + * Don't group blank membership changes + [\#4160](https://github.com/matrix-org/matrix-react-sdk/pull/4160) + * Ensure the room list always triggers updates on itself + [\#4175](https://github.com/matrix-org/matrix-react-sdk/pull/4175) + * Fix composer touch bar flickering on keypress in Chrome + [\#4173](https://github.com/matrix-org/matrix-react-sdk/pull/4173) + * Document scrollpanel and BACAT scrolling + [\#4167](https://github.com/matrix-org/matrix-react-sdk/pull/4167) + * riot-desktop open SSO in browser so user doesn't have to auth twice + [\#4158](https://github.com/matrix-org/matrix-react-sdk/pull/4158) + * Lock login and registration buttons after submit + [\#4165](https://github.com/matrix-org/matrix-react-sdk/pull/4165) + * Suggest the server's results as lower quality in the invite dialog + [\#4149](https://github.com/matrix-org/matrix-react-sdk/pull/4149) + * Adjust scroll offset with relative scrolling + [\#4166](https://github.com/matrix-org/matrix-react-sdk/pull/4166) + * only automatically download in usercontent if user requested it + [\#4163](https://github.com/matrix-org/matrix-react-sdk/pull/4163) + * Fix having to decrypt & download in two steps + [\#4162](https://github.com/matrix-org/matrix-react-sdk/pull/4162) + * Use bash for release script + [\#4161](https://github.com/matrix-org/matrix-react-sdk/pull/4161) + * Revert to manual sorting for custom tag rooms + [\#4157](https://github.com/matrix-org/matrix-react-sdk/pull/4157) + * Fix the last char of people's names being cut off in the invite dialog + [\#4150](https://github.com/matrix-org/matrix-react-sdk/pull/4150) + * Add /whois SlashCommand to open UserInfo + [\#4154](https://github.com/matrix-org/matrix-react-sdk/pull/4154) + * word-break in pills and wrap the background correctly + [\#4155](https://github.com/matrix-org/matrix-react-sdk/pull/4155) + * don't show "This alias is available to use" if the alias is invalid + [\#4153](https://github.com/matrix-org/matrix-react-sdk/pull/4153) + * Don't ask to enable analytics when Do Not Track is enabled + [\#4098](https://github.com/matrix-org/matrix-react-sdk/pull/4098) + * Fix MELS not breaking on day boundaries regression + [\#4152](https://github.com/matrix-org/matrix-react-sdk/pull/4152) + * Fix Quote on search results page + [\#4151](https://github.com/matrix-org/matrix-react-sdk/pull/4151) + * Ensure errors when creating a DM are raised to the user + [\#4144](https://github.com/matrix-org/matrix-react-sdk/pull/4144) + * Add a Login button to startAnyRegistrationFlow + [\#3829](https://github.com/matrix-org/matrix-react-sdk/pull/3829) + * Use latest backup status directly rather than via state + [\#4147](https://github.com/matrix-org/matrix-react-sdk/pull/4147) + * Prefer account password variation of upgrading + [\#4146](https://github.com/matrix-org/matrix-react-sdk/pull/4146) + * Hide user avatars from screen readers in group and room user lists. + [\#4145](https://github.com/matrix-org/matrix-react-sdk/pull/4145) + * Room List sorting algorithms + [\#4085](https://github.com/matrix-org/matrix-react-sdk/pull/4085) + * Clear selected tags when disabling tag panel + [\#4143](https://github.com/matrix-org/matrix-react-sdk/pull/4143) + * Ignore cursor jumping shortcuts with shift + [\#4142](https://github.com/matrix-org/matrix-react-sdk/pull/4142) + * add local echo for clicking 'start verification' button + [\#4138](https://github.com/matrix-org/matrix-react-sdk/pull/4138) + * Fix formatting buttons not marking the composer as modified + [\#4141](https://github.com/matrix-org/matrix-react-sdk/pull/4141) + * Upgrade deps + [\#4136](https://github.com/matrix-org/matrix-react-sdk/pull/4136) + * Remove debug line from Analytics + [\#4137](https://github.com/matrix-org/matrix-react-sdk/pull/4137) + * Use the right function for creating binary verification QR codes + [\#4140](https://github.com/matrix-org/matrix-react-sdk/pull/4140) + * Ensure verification QR codes use the right buffer size + [\#4139](https://github.com/matrix-org/matrix-react-sdk/pull/4139) + * Don't prefix QR codes with the length of the static marker string + [\#4128](https://github.com/matrix-org/matrix-react-sdk/pull/4128) + * Solve fixed-width digit display in flowed text + [\#4127](https://github.com/matrix-org/matrix-react-sdk/pull/4127) + * Limit UserInfo Displayname to 3 lines to get rid of scrollbars + [\#4135](https://github.com/matrix-org/matrix-react-sdk/pull/4135) + Changes in [2.2.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.2.1) (2020-03-04) =================================================================================================== [Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.2.0...v2.2.1) From 0e08e4bd0e4cd55aac8f74f5be4af9fae36dae9f Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 11 Mar 2020 16:23:53 +0000 Subject: [PATCH 272/522] v2.2.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 31fb2ea83d..370f4e5d95 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-react-sdk", - "version": "2.2.1", + "version": "2.2.2", "description": "SDK for matrix.org using React", "author": "matrix.org", "repository": { From 57022d9355155d1c7016eb679f23bf960437d9a4 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 11 Mar 2020 16:25:15 +0000 Subject: [PATCH 273/522] Reset matrix-js-sdk back to develop branch --- package.json | 2 +- yarn.lock | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 370f4e5d95..26e6a6bf2e 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "is-ip": "^2.0.0", "linkifyjs": "^2.1.6", "lodash": "^4.17.14", - "matrix-js-sdk": "5.1.1-rc.1", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop", "minimist": "^1.2.0", "pako": "^1.0.5", "png-chunks-extract": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index 965e156e39..f6c4915a84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5653,10 +5653,9 @@ mathml-tag-names@^2.0.1: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== -matrix-js-sdk@5.1.1-rc.1: - version "5.1.1-rc.1" - resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-5.1.1-rc.1.tgz#e3872696b8e6ec3fcae2d1ba1491e6a08d20954a" - integrity sha512-55F4jvJSVYJb5DDmso6Mld3HJ9v1UW0eT///SMcJtHVIJd5ZSLvsGV7rvMny7w6MHy5enfH4E2yItjjvlAL9dA== +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": + version "5.1.0" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/86304fd037ac43a493000fa42f393eaafc0480ac" dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" From 5d4651578f7cbf7b8edae3ffc6ecce66137c5a95 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 11 Mar 2020 17:33:57 +0000 Subject: [PATCH 274/522] Prepare changelog for v2.2.3-rc.1 --- CHANGELOG.md | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d436ca690..34a6e6bfd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,138 @@ +Changes in [2.2.3-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.2.3-rc.1) (2020-03-11) +============================================================================================================= +[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.2.1...v2.2.3-rc.1) + + * Update from Weblate + [\#4200](https://github.com/matrix-org/matrix-react-sdk/pull/4200) + * Revert "enable 4s when accepting a verification request" + [\#4198](https://github.com/matrix-org/matrix-react-sdk/pull/4198) + * Don't remount main split children on rhs collapse + [\#4197](https://github.com/matrix-org/matrix-react-sdk/pull/4197) + * Add fallback label for canonical alias events that dont change anything + [\#4195](https://github.com/matrix-org/matrix-react-sdk/pull/4195) + * Immediately switch to verification dialog when clicking [Continue] from new + session dialog + [\#4196](https://github.com/matrix-org/matrix-react-sdk/pull/4196) + * Enable 4S if needed when trying to verify or accepting verification + [\#4194](https://github.com/matrix-org/matrix-react-sdk/pull/4194) + * Remove extraneous tab stop from room tree view. + [\#4193](https://github.com/matrix-org/matrix-react-sdk/pull/4193) + * Remove v1 identity server fallbacks + [\#4191](https://github.com/matrix-org/matrix-react-sdk/pull/4191) + * Allow editing of alt_aliases according to MSC2432 + [\#4187](https://github.com/matrix-org/matrix-react-sdk/pull/4187) + * Update timeline rendering of aliases + [\#4189](https://github.com/matrix-org/matrix-react-sdk/pull/4189) + * Fix mark as read button for dark theme + [\#4190](https://github.com/matrix-org/matrix-react-sdk/pull/4190) + * Un-linkify version in settings + [\#4188](https://github.com/matrix-org/matrix-react-sdk/pull/4188) + * Make Mjolnir stop more robust + [\#4186](https://github.com/matrix-org/matrix-react-sdk/pull/4186) + * Fix secret sharing names to match spec + [\#4185](https://github.com/matrix-org/matrix-react-sdk/pull/4185) + * Share secrets with another device on request + [\#4172](https://github.com/matrix-org/matrix-react-sdk/pull/4172) + * Fall back to to_device verification if other user hasn't uploaded cross- + signing keys + [\#4181](https://github.com/matrix-org/matrix-react-sdk/pull/4181) + * Disable edits on redacted events + [\#4182](https://github.com/matrix-org/matrix-react-sdk/pull/4182) + * Use crypto.verification.request even when xsign is disabled + [\#4180](https://github.com/matrix-org/matrix-react-sdk/pull/4180) + * Reword the status for the currently indexing rooms. + [\#4084](https://github.com/matrix-org/matrix-react-sdk/pull/4084) + * Moved read receipts to the bottom of the message + [\#3892](https://github.com/matrix-org/matrix-react-sdk/pull/3892) + * Include a mark as read X under the scroll to unread button + [\#4159](https://github.com/matrix-org/matrix-react-sdk/pull/4159) + * Show the room presence indicator, even when cross-singing is enabled + [\#4178](https://github.com/matrix-org/matrix-react-sdk/pull/4178) + * Add local echo when clicking "Manually Verify" in unverified session dialog + [\#4179](https://github.com/matrix-org/matrix-react-sdk/pull/4179) + * link to matrix.org/security-disclosure-policy in help screen + [\#4129](https://github.com/matrix-org/matrix-react-sdk/pull/4129) + * only show verify button if user has uploaded cross-signing keys + [\#4174](https://github.com/matrix-org/matrix-react-sdk/pull/4174) + * Fix room alias references in topics + [\#4176](https://github.com/matrix-org/matrix-react-sdk/pull/4176) + * Fix not being able to start chats when you have no rooms + [\#4177](https://github.com/matrix-org/matrix-react-sdk/pull/4177) + * Disable registration flows on SSO servers + [\#4170](https://github.com/matrix-org/matrix-react-sdk/pull/4170) + * Don't group blank membership changes + [\#4160](https://github.com/matrix-org/matrix-react-sdk/pull/4160) + * Ensure the room list always triggers updates on itself + [\#4175](https://github.com/matrix-org/matrix-react-sdk/pull/4175) + * Fix composer touch bar flickering on keypress in Chrome + [\#4173](https://github.com/matrix-org/matrix-react-sdk/pull/4173) + * Document scrollpanel and BACAT scrolling + [\#4167](https://github.com/matrix-org/matrix-react-sdk/pull/4167) + * riot-desktop open SSO in browser so user doesn't have to auth twice + [\#4158](https://github.com/matrix-org/matrix-react-sdk/pull/4158) + * Lock login and registration buttons after submit + [\#4165](https://github.com/matrix-org/matrix-react-sdk/pull/4165) + * Suggest the server's results as lower quality in the invite dialog + [\#4149](https://github.com/matrix-org/matrix-react-sdk/pull/4149) + * Adjust scroll offset with relative scrolling + [\#4166](https://github.com/matrix-org/matrix-react-sdk/pull/4166) + * only automatically download in usercontent if user requested it + [\#4163](https://github.com/matrix-org/matrix-react-sdk/pull/4163) + * Fix having to decrypt & download in two steps + [\#4162](https://github.com/matrix-org/matrix-react-sdk/pull/4162) + * Use bash for release script + [\#4161](https://github.com/matrix-org/matrix-react-sdk/pull/4161) + * Revert to manual sorting for custom tag rooms + [\#4157](https://github.com/matrix-org/matrix-react-sdk/pull/4157) + * Fix the last char of people's names being cut off in the invite dialog + [\#4150](https://github.com/matrix-org/matrix-react-sdk/pull/4150) + * Add /whois SlashCommand to open UserInfo + [\#4154](https://github.com/matrix-org/matrix-react-sdk/pull/4154) + * word-break in pills and wrap the background correctly + [\#4155](https://github.com/matrix-org/matrix-react-sdk/pull/4155) + * don't show "This alias is available to use" if the alias is invalid + [\#4153](https://github.com/matrix-org/matrix-react-sdk/pull/4153) + * Don't ask to enable analytics when Do Not Track is enabled + [\#4098](https://github.com/matrix-org/matrix-react-sdk/pull/4098) + * Fix MELS not breaking on day boundaries regression + [\#4152](https://github.com/matrix-org/matrix-react-sdk/pull/4152) + * Fix Quote on search results page + [\#4151](https://github.com/matrix-org/matrix-react-sdk/pull/4151) + * Ensure errors when creating a DM are raised to the user + [\#4144](https://github.com/matrix-org/matrix-react-sdk/pull/4144) + * Add a Login button to startAnyRegistrationFlow + [\#3829](https://github.com/matrix-org/matrix-react-sdk/pull/3829) + * Use latest backup status directly rather than via state + [\#4147](https://github.com/matrix-org/matrix-react-sdk/pull/4147) + * Prefer account password variation of upgrading + [\#4146](https://github.com/matrix-org/matrix-react-sdk/pull/4146) + * Hide user avatars from screen readers in group and room user lists. + [\#4145](https://github.com/matrix-org/matrix-react-sdk/pull/4145) + * Room List sorting algorithms + [\#4085](https://github.com/matrix-org/matrix-react-sdk/pull/4085) + * Clear selected tags when disabling tag panel + [\#4143](https://github.com/matrix-org/matrix-react-sdk/pull/4143) + * Ignore cursor jumping shortcuts with shift + [\#4142](https://github.com/matrix-org/matrix-react-sdk/pull/4142) + * add local echo for clicking 'start verification' button + [\#4138](https://github.com/matrix-org/matrix-react-sdk/pull/4138) + * Fix formatting buttons not marking the composer as modified + [\#4141](https://github.com/matrix-org/matrix-react-sdk/pull/4141) + * Upgrade deps + [\#4136](https://github.com/matrix-org/matrix-react-sdk/pull/4136) + * Remove debug line from Analytics + [\#4137](https://github.com/matrix-org/matrix-react-sdk/pull/4137) + * Use the right function for creating binary verification QR codes + [\#4140](https://github.com/matrix-org/matrix-react-sdk/pull/4140) + * Ensure verification QR codes use the right buffer size + [\#4139](https://github.com/matrix-org/matrix-react-sdk/pull/4139) + * Don't prefix QR codes with the length of the static marker string + [\#4128](https://github.com/matrix-org/matrix-react-sdk/pull/4128) + * Solve fixed-width digit display in flowed text + [\#4127](https://github.com/matrix-org/matrix-react-sdk/pull/4127) + * Limit UserInfo Displayname to 3 lines to get rid of scrollbars + [\#4135](https://github.com/matrix-org/matrix-react-sdk/pull/4135) + Changes in [2.2.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.2.1) (2020-03-04) =================================================================================================== [Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.2.0...v2.2.1) From 9b6986e86286fd59df154e12ae8543eba683797b Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Wed, 11 Mar 2020 17:33:57 +0000 Subject: [PATCH 275/522] v2.2.3-rc.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 31fb2ea83d..3ab8247afb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-react-sdk", - "version": "2.2.1", + "version": "2.2.3-rc.1", "description": "SDK for matrix.org using React", "author": "matrix.org", "repository": { From 7dd7417f1248e10f3fe84fdc471d6da58cb5ce5c Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 11 Mar 2020 17:47:18 -0600 Subject: [PATCH 276/522] Enable support for TypeScript in components Includes: compilation, translations, IDE support (use .tsx not .ts), typings, and other build tools. TypeScript component have to import PropTypes and React with `import * as React from 'react';` --- package.json | 3 ++- scripts/gen-i18n.js | 2 +- scripts/reskindex.js | 11 +++++++---- src/utils/replaceableComponent.ts | 2 +- tsconfig.json | 3 ++- yarn.lock | 18 ++++++++++++++++++ 6 files changed, 31 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 26e6a6bf2e..e9bd23b58a 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "rethemendex": "res/css/rethemendex.sh", "clean": "rimraf lib", "build": "yarn clean && git rev-parse HEAD > git-revision.txt && yarn build:compile && yarn build:types", - "build:compile": "yarn reskindex && babel -d lib --verbose --extensions \".ts,.js\" src", + "build:compile": "yarn reskindex && babel -d lib --verbose --extensions \".ts,.js,.tsx\" src", "build:types": "tsc --emitDeclarationOnly", "start": "echo THIS IS FOR LEGACY PURPOSES ONLY. && yarn start:all", "start:all": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n build,reskindex \"yarn start:build\" \"yarn reskindex:watch\"", @@ -118,6 +118,7 @@ "@babel/preset-typescript": "^7.7.4", "@babel/register": "^7.7.4", "@peculiar/webcrypto": "^1.0.22", + "@types/react": "16.9", "babel-eslint": "^10.0.3", "babel-jest": "^24.9.0", "chokidar": "^3.3.1", diff --git a/scripts/gen-i18n.js b/scripts/gen-i18n.js index 3d3d5af116..a4d53aea2f 100755 --- a/scripts/gen-i18n.js +++ b/scripts/gen-i18n.js @@ -237,7 +237,7 @@ const walkOpts = { const fullPath = path.join(root, fileStats.name); let trs; - if (fileStats.name.endsWith('.js')) { + if (fileStats.name.endsWith('.js') || fileStats.name.endsWith('.tsx')) { trs = getTranslationsJs(fullPath); } else if (fileStats.name.endsWith('.html')) { trs = getTranslationsOther(fullPath); diff --git a/scripts/reskindex.js b/scripts/reskindex.js index 81ab111f46..9fb0e1a7c0 100755 --- a/scripts/reskindex.js +++ b/scripts/reskindex.js @@ -8,11 +8,14 @@ var chokidar = require('chokidar'); var componentIndex = path.join('src', 'component-index.js'); var componentIndexTmp = componentIndex+".tmp"; var componentsDir = path.join('src', 'components'); -var componentGlob = '**/*.js'; +var componentJsGlob = '**/*.js'; +var componentTsGlob = '**/*.tsx'; var prevFiles = []; function reskindex() { - var files = glob.sync(componentGlob, {cwd: componentsDir}).sort(); + var jsFiles = glob.sync(componentJsGlob, {cwd: componentsDir}).sort(); + var tsFiles = glob.sync(componentTsGlob, {cwd: componentsDir}).sort(); + var files = [...tsFiles, ...jsFiles]; if (!filesHaveChanged(files, prevFiles)) { return; } @@ -36,7 +39,7 @@ function reskindex() { strm.write("let components = {};\n"); for (var i = 0; i < files.length; ++i) { - var file = files[i].replace('.js', ''); + var file = files[i].replace('.js', '').replace('.tsx', ''); var moduleName = (file.replace(/\//g, '.')); var importName = moduleName.replace(/\./g, "$"); @@ -79,7 +82,7 @@ if (!args.w) { } var watchDebouncer = null; -chokidar.watch(path.join(componentsDir, componentGlob)).on('all', (event, path) => { +chokidar.watch(path.join(componentsDir, componentJsGlob)).on('all', (event, path) => { if (path === componentIndex) return; if (watchDebouncer) clearTimeout(watchDebouncer); watchDebouncer = setTimeout(reskindex, 1000); diff --git a/src/utils/replaceableComponent.ts b/src/utils/replaceableComponent.ts index 9f617b27f3..8c29fdf037 100644 --- a/src/utils/replaceableComponent.ts +++ b/src/utils/replaceableComponent.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React from 'react'; +import * as React from 'react'; import * as sdk from '../index'; /** diff --git a/tsconfig.json b/tsconfig.json index ec1531e429..ecb524e22e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,8 @@ "outDir": "./lib", "declaration": true, "types": [ - "node" + "node", + "react" ] }, "include": [ diff --git a/yarn.lock b/yarn.lock index f6c4915a84..8056f3d435 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1217,6 +1217,19 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.6.tgz#cb734a7c191472ae6a2b3a502b4dfffcea974113" integrity sha512-eyK7MWD0R1HqVTp+PtwRgFeIsemzuj4gBFSQxfPHY5iMjS7474e5wq+VFgTcdpyHeNxyKSaetYAjdMLJlKoWqA== +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/react@16.9": + version "16.9.23" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.23.tgz#1a66c6d468ba11a8943ad958a8cb3e737568271c" + integrity sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw== + dependencies: + "@types/prop-types" "*" + csstype "^2.2.0" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -2664,6 +2677,11 @@ cssstyle@^1.0.0: dependencies: cssom "0.3.x" +csstype@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098" + integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q== + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" From cccd27fe8465e6ddee1f212be390e023f6b2c5dd Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 11 Mar 2020 18:02:17 -0600 Subject: [PATCH 277/522] Convert TabbedView to TypeScript to prove it works --- .../{TabbedView.js => TabbedView.tsx} | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) rename src/components/structures/{TabbedView.js => TabbedView.tsx} (80%) diff --git a/src/components/structures/TabbedView.js b/src/components/structures/TabbedView.tsx similarity index 80% rename from src/components/structures/TabbedView.js rename to src/components/structures/TabbedView.tsx index 20af183af8..ea485acc1a 100644 --- a/src/components/structures/TabbedView.js +++ b/src/components/structures/TabbedView.tsx @@ -1,7 +1,7 @@ /* Copyright 2017 Travis Ralston Copyright 2019 New Vector Ltd -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 2020 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,41 +18,54 @@ limitations under the License. import * as React from "react"; import {_t} from '../../languageHandler'; -import PropTypes from "prop-types"; +import * as PropTypes from "prop-types"; import * as sdk from "../../index"; +import { ReactNode } from "react"; /** * Represents a tab for the TabbedView. */ export class Tab { + public label: string; + public icon: string; + public body: React.ReactNode; + /** * Creates a new tab. * @param {string} tabLabel The untranslated tab label. * @param {string} tabIconClass The class for the tab icon. This should be a simple mask. - * @param {string} tabJsx The JSX for the tab container. + * @param {React.ReactNode} tabJsx The JSX for the tab container. */ - constructor(tabLabel, tabIconClass, tabJsx) { + constructor(tabLabel: string, tabIconClass: string, tabJsx: React.ReactNode) { this.label = tabLabel; this.icon = tabIconClass; this.body = tabJsx; } } -export default class TabbedView extends React.Component { +interface IProps { + tabs: Tab[]; +} + +interface IState { + activeTabIndex: number; +} + +export default class TabbedView extends React.Component { static propTypes = { // The tabs to show tabs: PropTypes.arrayOf(PropTypes.instanceOf(Tab)).isRequired, }; - constructor() { - super(); + constructor(props: IProps) { + super(props); this.state = { activeTabIndex: 0, }; } - _getActiveTabIndex() { + private _getActiveTabIndex() { if (!this.state || !this.state.activeTabIndex) return 0; return this.state.activeTabIndex; } @@ -62,7 +75,7 @@ export default class TabbedView extends React.Component { * @param {Tab} tab the tab to show * @private */ - _setActiveTab(tab) { + private _setActiveTab(tab: Tab) { const idx = this.props.tabs.indexOf(tab); if (idx !== -1) { this.setState({activeTabIndex: idx}); @@ -71,7 +84,7 @@ export default class TabbedView extends React.Component { } } - _renderTabLabel(tab) { + private _renderTabLabel(tab: Tab) { const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); let classes = "mx_TabbedView_tabLabel "; @@ -97,7 +110,7 @@ export default class TabbedView extends React.Component { ); } - _renderTabPanel(tab) { + private _renderTabPanel(tab: Tab): React.ReactNode { return (
@@ -107,7 +120,7 @@ export default class TabbedView extends React.Component { ); } - render() { + public render(): React.ReactNode { const labels = this.props.tabs.map(tab => this._renderTabLabel(tab)); const panel = this._renderTabPanel(this.props.tabs[this._getActiveTabIndex()]); From 5a5e7171bcbb4e9ed9d56833a813c134848394e3 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 11 Mar 2020 18:17:35 -0600 Subject: [PATCH 278/522] Also tsconfig --- tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index ecb524e22e..3e4db4baa1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,6 +15,7 @@ ] }, "include": [ - "./src/**/*.ts" + "./src/**/*.ts", + "./src/**/*.tsx" ] } From 751bcfb1f593428616a2a27ae2966f8f8ba57864 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 11 Mar 2020 18:24:01 -0600 Subject: [PATCH 279/522] Supply `--jsx react` to tsc --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e9bd23b58a..eeca614aa2 100644 --- a/package.json +++ b/package.json @@ -41,14 +41,14 @@ "clean": "rimraf lib", "build": "yarn clean && git rev-parse HEAD > git-revision.txt && yarn build:compile && yarn build:types", "build:compile": "yarn reskindex && babel -d lib --verbose --extensions \".ts,.js,.tsx\" src", - "build:types": "tsc --emitDeclarationOnly", + "build:types": "tsc --emitDeclarationOnly --jsx react", "start": "echo THIS IS FOR LEGACY PURPOSES ONLY. && yarn start:all", "start:all": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n build,reskindex \"yarn start:build\" \"yarn reskindex:watch\"", "start:build": "babel src -w -s -d lib --verbose --extensions \".ts,.js\"", "lint": "yarn lint:types && yarn lint:ts && yarn lint:js && yarn lint:style", "lint:js": "eslint --max-warnings 0 --ignore-path .eslintignore.errorfiles src test", "lint:ts": "tslint --project ./tsconfig.json -t stylish", - "lint:types": "tsc --noEmit", + "lint:types": "tsc --noEmit --jsx react", "lint:style": "stylelint 'res/css/**/*.scss'", "test": "jest", "test:e2e": "./test/end-to-end-tests/run.sh --riot-url http://localhost:8080" From cd515f1922988dc79c7cbe88914393d6f9cfd016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 12 Mar 2020 11:42:02 +0100 Subject: [PATCH 280/522] EventIndex: Add support to delete events from the index. --- src/indexing/BaseEventIndexManager.js | 4 ++++ src/indexing/EventIndex.js | 31 ++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/indexing/BaseEventIndexManager.js b/src/indexing/BaseEventIndexManager.js index 66904f9264..f780c8e9ce 100644 --- a/src/indexing/BaseEventIndexManager.js +++ b/src/indexing/BaseEventIndexManager.js @@ -123,6 +123,10 @@ export default class BaseEventIndexManager { throw new Error("Unimplemented"); } + async deleteEvent(eventId: string): Promise { + throw new Error("Unimplemented"); + } + /** * Check if our event index is empty. */ diff --git a/src/indexing/EventIndex.js b/src/indexing/EventIndex.js index c8a9a4c1fa..128b4bb42d 100644 --- a/src/indexing/EventIndex.js +++ b/src/indexing/EventIndex.js @@ -61,6 +61,7 @@ export default class EventIndex extends EventEmitter { client.on('Room.timeline', this.onRoomTimeline); client.on('Event.decrypted', this.onEventDecrypted); client.on('Room.timelineReset', this.onTimelineReset); + client.on('Room.redaction', this.onRedaction); } /** @@ -74,6 +75,7 @@ export default class EventIndex extends EventEmitter { client.removeListener('Room.timeline', this.onRoomTimeline); client.removeListener('Event.decrypted', this.onEventDecrypted); client.removeListener('Room.timelineReset', this.onTimelineReset); + client.removeListener('Room.redaction', this.onRedaction); } /** @@ -210,6 +212,23 @@ export default class EventIndex extends EventEmitter { await this.addLiveEventToIndex(ev); } + /* + * The Room.redaction listener. + * + * Removes a redacted event from our event index. + */ + onRedaction = async (ev, room) => { + // We only index encrypted rooms locally. + if (!MatrixClientPeg.get().isRoomEncrypted(room.roomId)) return; + const indexManager = PlatformPeg.get().getEventIndexingManager(); + + try { + await indexManager.deleteEvent(ev.getAssociatedId()); + } catch (e) { + console.log("EventIndex: Error deleting event from index", e); + } + } + /* * The Room.timelineReset listener. * @@ -431,12 +450,17 @@ export default class EventIndex extends EventEmitter { // Let us wait for all the events to get decrypted. await Promise.all(decryptionPromises); - // TODO if there are no events at this point we're missing a lot // decryption keys, do we want to retry this checkpoint at a later // stage? const filteredEvents = matrixEvents.filter(this.isValidEvent); + // Collect the redaction events so we can delete the redacted events + // from the index. + const redactionEvents = matrixEvents.filter((ev) => { + return ev.getType() === "m.room.redaction"; + }); + // Let us convert the events back into a format that EventIndex can // consume. const events = filteredEvents.map((ev) => { @@ -468,6 +492,11 @@ export default class EventIndex extends EventEmitter { ); try { + for (var i = 0; i < redactionEvents.length; i++) { + let ev = redactionEvents[i]; + await indexManager.deleteEvent(ev.getAssociatedId()); + } + const eventsAlreadyAdded = await indexManager.addHistoricEvents( events, newCheckpoint, checkpoint); // If all events were already indexed we assume that we catched From c02e839e9dba2390e1a2cf776c244031fb570c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 12 Mar 2020 12:15:46 +0100 Subject: [PATCH 281/522] EventIndex: Use a const instead of a let binding. --- src/indexing/EventIndex.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/indexing/EventIndex.js b/src/indexing/EventIndex.js index 128b4bb42d..245427d425 100644 --- a/src/indexing/EventIndex.js +++ b/src/indexing/EventIndex.js @@ -493,7 +493,7 @@ export default class EventIndex extends EventEmitter { try { for (var i = 0; i < redactionEvents.length; i++) { - let ev = redactionEvents[i]; + const ev = redactionEvents[i]; await indexManager.deleteEvent(ev.getAssociatedId()); } From 25568fa15cc9ddf899f5265cf433d3263a8b24fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 12 Mar 2020 12:20:46 +0100 Subject: [PATCH 282/522] EventIndex: More lint fixes. --- src/indexing/EventIndex.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/indexing/EventIndex.js b/src/indexing/EventIndex.js index 245427d425..a4a9302601 100644 --- a/src/indexing/EventIndex.js +++ b/src/indexing/EventIndex.js @@ -492,7 +492,7 @@ export default class EventIndex extends EventEmitter { ); try { - for (var i = 0; i < redactionEvents.length; i++) { + for (let i = 0; i < redactionEvents.length; i++) { const ev = redactionEvents[i]; await indexManager.deleteEvent(ev.getAssociatedId()); } From 6a3a93bf55b4b5e89d17e93e4e0312d196862268 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Thu, 12 Mar 2020 03:12:14 +0000 Subject: [PATCH 283/522] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2145 of 2145 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index eff96f88b5..395b8988b5 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2193,5 +2193,7 @@ "Alternative addresses for this room:": "此聊天是的替代位置:", "This room has no alternative addresses": "此聊天室沒有替代位置", "New address (e.g. #foo:domain)": "新位置(例如:#foo:domain)", - "Local addresses (unmoderated content)": "本機位置(未經審核的內容)" + "Local addresses (unmoderated content)": "本機位置(未經審核的內容)", + "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s 將聊天室名稱從 %(oldRoomName)s 變更為 %(newRoomName)s。", + "%(senderName)s changed the addresses for this room.": "%(senderName)s 變更了此聊天室的位置。" } From 6bcf929fce6068525f5cac813ce7a04ac1c8f0aa Mon Sep 17 00:00:00 2001 From: Szimszon Date: Wed, 11 Mar 2020 18:27:34 +0000 Subject: [PATCH 284/522] Translated using Weblate (Hungarian) Currently translated at 100.0% (2145 of 2145 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 18aa375944..cfa5fd352a 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2179,5 +2179,18 @@ "Mark all as read": "Mindent olvasottnak jelöl", "Not currently indexing messages for any room.": "Jelenleg egyik szoba indexelése sem történik.", "Currently indexing: %(currentRoom)s.": "Indexelés alatt jelenleg: %(currentRoom)s.", - "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s / %(totalRooms)s" + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s / %(totalRooms)s", + "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s a szoba nevét megváltoztatta erről: %(oldRoomName)s erre: %(newRoomName)s.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s egy alternatív nevet (%(addresses)s) adott hozzá a szobához.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s egy alternatív címet (%(addresses)s) adott hozzá a szobához.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s egy alternatív címet (%(addresses)s) eltávolított a szobáról.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s eltávolította ezt az alternatív címet a szobáról: %(addresses)s.", + "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s megváltoztatta az alternatív címét ennek a szobának.", + "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s ennek a szobának megváltoztatta az elsődleges és az alternatív címét.", + "%(senderName)s changed the addresses for this room.": "%(senderName)s megváltoztatta ennek a szobának a címét.", + "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "A szoba címének megváltoztatásakor hiba történt. Lehet, hogy a szerver nem engedélyezi vagy átmeneti hiba történt.", + "Alternative addresses for this room:": "A szoba alternatív címei:", + "This room has no alternative addresses": "A szobának nincsen alternatív címe", + "New address (e.g. #foo:domain)": "Új cím (pl.: #foo:domain)", + "Local addresses (unmoderated content)": "Helyi cím (nem moderált tartalom)" } From 255e57963ef21e58735920ec5a1c3a10768fa8ba Mon Sep 17 00:00:00 2001 From: random Date: Thu, 12 Mar 2020 09:01:40 +0000 Subject: [PATCH 285/522] Translated using Weblate (Italian) Currently translated at 100.0% (2145 of 2145 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index a90ca5a2b6..4c111b2e68 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2180,5 +2180,18 @@ "We recommend you change your password and recovery key in Settings immediately": "Ti consigliamo di cambiare immediatamente la password e la chiave di recupero nelle impostazioni", "Not currently indexing messages for any room.": "Attualmente non si stanno indicizzando i messaggi di alcuna stanza.", "Currently indexing: %(currentRoom)s.": "Attualmente si indicizzano: %(currentRoom)s.", - "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s di %(totalRooms)s" + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s di %(totalRooms)s", + "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s ha cambiato il nome della stanza da %(oldRoomName)s a %(newRoomName)s.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s ha aggiunto gli indirizzi alternativi %(addresses)s per questa stanza.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s ha aggiunto l'indirizzo alternativo %(addresses)s per questa stanza.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s ha rimosso gli indirizzi alternativi %(addresses)s per questa stanza.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s ha rimosso l'indirizzo alternativo %(addresses)s per questa stanza.", + "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s ha cambiato gli indirizzi alternativi per questa stanza.", + "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s ha cambiato gli indirizzi principali ed alternativi per questa stanza.", + "%(senderName)s changed the addresses for this room.": "%(senderName)s ha cambiato gli indirizzi per questa stanza.", + "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Si è verificato un errore aggiornando gli indirizzi alternativi della stanza. Potrebbe non essere consentito dal server o essere un errore temporaneo.", + "Alternative addresses for this room:": "Indirizzi alternativi per questa stanza:", + "This room has no alternative addresses": "Questa stanza non ha indirizzi alternativi", + "New address (e.g. #foo:domain)": "Nuovo indirizzo (es. #abc:dominio)", + "Local addresses (unmoderated content)": "Indirizzi locali (contenuto non moderato)" } From 57a61efabf308ca16f41333ab9ca4c7759df740d Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 12 Mar 2020 10:46:42 -0600 Subject: [PATCH 286/522] Remove stuff that yarn install doesn't think we need --- yarn.lock | 195 +++--------------------------------------------------- 1 file changed, 11 insertions(+), 184 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7f00976cbc..705b02e3e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1461,11 +1461,6 @@ abab@^2.0.0: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - acorn-globals@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" @@ -1599,19 +1594,11 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2517,11 +2504,6 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -2767,7 +2749,7 @@ debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.2.6: +debug@^3.1.0: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -2843,11 +2825,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -2861,11 +2838,6 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -3868,13 +3840,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -3937,20 +3902,6 @@ fuse.js@^2.2.0: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-2.7.4.tgz#96e420fde7ef011ac49c258a621314fe576536f9" integrity sha1-luQg/efvARrEnCWKYhMU/ldlNvk= -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - "gemini-scrollbar@github:matrix-org/gemini-scrollbar#91e1e566", gemini-scrollbar@matrix-org/gemini-scrollbar#91e1e566: version "1.4.3" resolved "https://codeload.github.com/matrix-org/gemini-scrollbar/tar.gz/91e1e566fa33324188f278801baf4a79f9f554ab" @@ -4152,11 +4103,6 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -4344,7 +4290,7 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4361,13 +4307,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -5946,21 +5885,6 @@ minimist@^1.1.1, minimist@^1.2.0, "minimist@~ 1.2.0": resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.3.tgz#3db5c0765545ab8637be71f333a104a965a9ca3f" integrity sha512-+bMdgqjMN/Z77a6NlY/I3U5LlRDbnmaAk6lDveAPKwSpcPM4tKAuYsvYF8xjhOPXhOYGe/73vVLVez5PW+jqhw== -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -5985,7 +5909,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -6062,15 +5986,6 @@ nearley@^2.7.10: randexp "0.4.6" semver "^5.4.1" -needle@^2.2.1: - version "2.3.3" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.3.tgz#a041ad1d04a871b0ebb666f40baaf1fb47867117" - integrity sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" @@ -6148,22 +6063,6 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-releases@^1.1.50: version "1.1.51" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.51.tgz#70d0e054221343d2966006bfbd4d98622cc00bd0" @@ -6171,14 +6070,6 @@ node-releases@^1.1.50: dependencies: semver "^6.3.0" -nopt@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -6211,27 +6102,6 @@ normalize-selector@^0.2.0: resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -6239,16 +6109,6 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -6398,11 +6258,6 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -6412,19 +6267,11 @@ os-locale@^3.0.0, os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -7054,7 +6901,7 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -rc@1.2.8, rc@^1.2.7, rc@^1.2.8: +rc@1.2.8, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -7218,7 +7065,7 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -7578,7 +7425,7 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.4.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@^2.4.3, rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -7740,7 +7587,7 @@ serialize-javascript@^2.1.2: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -8076,7 +7923,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -8339,19 +8186,6 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^4.4.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -9071,13 +8905,6 @@ which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -9162,7 +8989,7 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From b5d532b8cd64bc017369ef63431d8355d522d76e Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Thu, 12 Mar 2020 18:03:18 +0000 Subject: [PATCH 287/522] Test for cross-signing homeserver support during login, toasts This adds more checking of homeserver support for cross-signing at login and in toasts. Fixes https://github.com/vector-im/riot-web/issues/12228 --- src/DeviceListener.js | 6 +++++- src/components/structures/MatrixChat.js | 5 ++++- src/components/structures/auth/CompleteSecurity.js | 5 +++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/DeviceListener.js b/src/DeviceListener.js index 4e7bc8470d..6a506db496 100644 --- a/src/DeviceListener.js +++ b/src/DeviceListener.js @@ -99,9 +99,13 @@ export default class DeviceListener { } async _recheck() { - if (!SettingsStore.isFeatureEnabled("feature_cross_signing")) return; const cli = MatrixClientPeg.get(); + if ( + !SettingsStore.isFeatureEnabled("feature_cross_signing") || + !await cli.doesServerSupportUnstableFeature("org.matrix.e2e_cross_signing") + ) return; + if (!cli.isCryptoEnabled()) return; if (!cli.getCrossSigningId()) { if (this._dismissedThisDeviceToast) { diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index a0b9a8fe57..f1a5a372be 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -1911,7 +1911,10 @@ export default createReactClass({ // secret storage. SettingsStore.setFeatureEnabled("feature_cross_signing", true); this.setStateForNewView({ view: VIEWS.COMPLETE_SECURITY }); - } else if (SettingsStore.isFeatureEnabled("feature_cross_signing")) { + } else if ( + SettingsStore.isFeatureEnabled("feature_cross_signing") && + await cli.doesServerSupportUnstableFeature("org.matrix.e2e_cross_signing") + ) { // This will only work if the feature is set to 'enable' in the config, // since it's too early in the lifecycle for users to have turned the // labs flag on. diff --git a/src/components/structures/auth/CompleteSecurity.js b/src/components/structures/auth/CompleteSecurity.js index 6bf3e7f07c..2e95f668a6 100644 --- a/src/components/structures/auth/CompleteSecurity.js +++ b/src/components/structures/auth/CompleteSecurity.js @@ -59,9 +59,10 @@ export default class CompleteSecurity extends React.Component { phase: PHASE_BUSY, }); const cli = MatrixClientPeg.get(); - const backupInfo = await cli.getKeyBackupVersion(); - this.setState({backupInfo}); try { + const backupInfo = await cli.getKeyBackupVersion(); + this.setState({backupInfo}); + await accessSecretStorage(async () => { await cli.checkOwnCrossSigningTrust(); if (backupInfo) await cli.restoreKeyBackupWithSecretStorage(backupInfo); From b825be281efe0992c8ff9286c99b6eb41ba669e5 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 12 Mar 2020 13:36:02 -0600 Subject: [PATCH 288/522] Declare jsx in tsconfig for IDEs --- tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tsconfig.json b/tsconfig.json index 3e4db4baa1..d70e0a85f0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,7 @@ "sourceMap": false, "outDir": "./lib", "declaration": true, + "jsx": "react", "types": [ "node", "react" From 35b673ce9bf8993abec2ad7ebf68514848c6aec0 Mon Sep 17 00:00:00 2001 From: Szimszon Date: Thu, 12 Mar 2020 14:45:45 +0000 Subject: [PATCH 289/522] Translated using Weblate (Hungarian) Currently translated at 100.0% (2146 of 2146 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index cfa5fd352a..b37b18fe83 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2192,5 +2192,6 @@ "Alternative addresses for this room:": "A szoba alternatív címei:", "This room has no alternative addresses": "A szobának nincsen alternatív címe", "New address (e.g. #foo:domain)": "Új cím (pl.: #foo:domain)", - "Local addresses (unmoderated content)": "Helyi cím (nem moderált tartalom)" + "Local addresses (unmoderated content)": "Helyi cím (nem moderált tartalom)", + "You don't have permission to delete the alias.": "Ezt az alternatív nevet nincs jogod törölni." } From 86e53ea2c31f99a60a6d0113584400b7fa87aff4 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 00:02:50 +0000 Subject: [PATCH 290/522] Initial attempt to redesign explore servers in room directory Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/structures/_RoomDirectory.scss | 3 +- res/css/views/directory/_NetworkDropdown.scss | 180 +++++--- .../views/elements/_DirectorySearchBox.scss | 1 - src/components/structures/MatrixChat.js | 5 +- src/components/structures/RoomDirectory.js | 44 +- .../views/dialogs/TextInputDialog.js | 11 +- .../views/directory/NetworkDropdown.js | 383 +++++++++--------- src/i18n/strings/en_EN.json | 9 + src/settings/Settings.js | 4 + 9 files changed, 362 insertions(+), 278 deletions(-) diff --git a/res/css/structures/_RoomDirectory.scss b/res/css/structures/_RoomDirectory.scss index 241c921f20..d6ae0bb739 100644 --- a/res/css/structures/_RoomDirectory.scss +++ b/res/css/structures/_RoomDirectory.scss @@ -1,5 +1,6 @@ /* Copyright 2015, 2016 OpenMarket Ltd +Copyright 2020 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -45,7 +46,7 @@ limitations under the License. } .mx_RoomDirectory_listheader { - display: flex; + display: block; margin-top: 13px; margin-bottom: 13px; } diff --git a/res/css/views/directory/_NetworkDropdown.scss b/res/css/views/directory/_NetworkDropdown.scss index d402f6c48f..3dc3a99dd4 100644 --- a/res/css/views/directory/_NetworkDropdown.scss +++ b/res/css/views/directory/_NetworkDropdown.scss @@ -1,5 +1,6 @@ /* Copyright 2015, 2016 OpenMarket Ltd +Copyright 2020 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15,70 +16,143 @@ limitations under the License. */ .mx_NetworkDropdown { + height: 32px; position: relative; -} + width: max-content; + padding-right: 32px; + margin-left: auto; + margin-right: 9px; + margin-top: 12px; -.mx_NetworkDropdown_input { - position: relative; - border-radius: 3px; - border: 1px solid $strong-input-border-color; - font-weight: 300; - font-size: 13px; - user-select: none; -} - -.mx_NetworkDropdown_arrow { - border-color: $primary-fg-color transparent transparent; - border-style: solid; - border-width: 5px 5px 0; - display: block; - height: 0; - position: absolute; - right: 10px; - top: 16px; - width: 0; -} - -.mx_NetworkDropdown_networkoption { - height: 37px; - line-height: 37px; - padding-left: 8px; - padding-right: 8px; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.mx_NetworkDropdown_networkoption img { - margin: 5px; - width: 25px; - vertical-align: middle; -} - -input.mx_NetworkDropdown_networkoption, input.mx_NetworkDropdown_networkoption:focus { - border: 0; - padding-top: 0; - padding-bottom: 0; + .mx_AccessibleButton { + width: max-content; + } } .mx_NetworkDropdown_menu { - position: absolute; - left: -1px; - right: -1px; - top: 100%; - z-index: 2; + //position: absolute; + //left: -1px; + //right: -1px; + //top: 100%; + //z-index: 2; + width: 204px; margin: 0; - padding: 0px; - border-radius: 3px; + box-sizing: border-box; + border-radius: 4px; border: 1px solid $accent-color; background-color: $primary-bg-color; } -.mx_NetworkDropdown_menu .mx_NetworkDropdown_networkoption:hover { - background-color: $focus-bg-color; -} - .mx_NetworkDropdown_menu_network { font-weight: bold; } +.mx_NetworkDropdown_server { + padding: 12px 0; + border-bottom: 1px solid $input-darker-fg-color; + + .mx_NetworkDropdown_server_title { + padding: 0 10px; + font-size: 15px; + font-weight: 600; + line-height: 20px; + margin-bottom: 4px; + + // remove server button + .mx_AccessibleButton { + position: absolute; + display: inline; + right: 0; + + &::before { + content: ""; + position: absolute; + width: 16px; + height: 16px; + right: 12px; + top: 4px; + mask-repeat: no-repeat; + mask-position: center; + mask-size: contain; + mask-image: url('$(res)/img/feather-customised/x.svg'); + background-color: $notice-primary-color; + } + } + } + + .mx_NetworkDropdown_server_subtitle { + padding: 0 10px; + font-size: 10px; + line-height: 14px; + margin-top: -4px; + margin-bottom: 4px; + color: $muted-fg-color; + } + + .mx_NetworkDropdown_server_network { + font-size: 12px; + line-height: 16px; + padding: 4px 10px; + cursor: pointer; + position: relative; + + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + + &[aria-checked=true]::after { + content: ""; + position: absolute; + width: 16px; + height: 16px; + right: 10px; + mask-repeat: no-repeat; + mask-position: center; + mask-size: contain; + mask-image: url('$(res)/img/feather-customised/check.svg'); + background-color: $input-valid-border-color; + } + } +} + +.mx_NetworkDropdown_server_add, +.mx_NetworkDropdown_server_network { + &:hover { + background-color: $header-panel-bg-color; + } +} + +.mx_NetworkDropdown_server_add { + padding: 16px 10px 16px 32px; + position: relative; + + &::before { + content: ""; + position: absolute; + width: 16px; + height: 16px; + left: 7px; + mask-repeat: no-repeat; + mask-position: center; + mask-size: contain; + mask-image: url('$(res)/img/feather-customised/plus.svg'); + background-color: $muted-fg-color; + } +} + +.mx_NetworkDropdown_handle { + position: relative; + + &::after { + content: ""; + position: absolute; + width: 24px; + height: 24px; + right: -28px; // - (24 + 4) + mask-repeat: no-repeat; + mask-position: center; + mask-size: contain; + mask-image: url('$(res)/img/feather-customised/chevron-down.svg'); + background-color: $primary-fg-color; + } +} diff --git a/res/css/views/elements/_DirectorySearchBox.scss b/res/css/views/elements/_DirectorySearchBox.scss index ef944f6fa0..75ef3fbabd 100644 --- a/res/css/views/elements/_DirectorySearchBox.scss +++ b/res/css/views/elements/_DirectorySearchBox.scss @@ -18,7 +18,6 @@ limitations under the License. display: flex; padding-left: 9px; padding-right: 9px; - margin: 0 5px 0 0 !important; } .mx_DirectorySearchBox_joinButton { diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index a0b9a8fe57..0099af8398 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -600,9 +600,8 @@ export default createReactClass({ break; case 'view_room_directory': { const RoomDirectory = sdk.getComponent("structures.RoomDirectory"); - Modal.createTrackedDialog('Room directory', '', RoomDirectory, { - config: this.props.config, - }, 'mx_RoomDirectory_dialogWrapper'); + Modal.createTrackedDialog('Room directory', '', RoomDirectory, {}, + 'mx_RoomDirectory_dialogWrapper', false, true); // View the welcome or home page if we need something to look at this._viewSomethingBehindModal(); diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js index 3c3d67578e..ddc172fca7 100644 --- a/src/components/structures/RoomDirectory.js +++ b/src/components/structures/RoomDirectory.js @@ -28,6 +28,7 @@ import { _t } from '../../languageHandler'; import { instanceForInstanceId, protocolNameForInstanceId } from '../../utils/DirectoryUtils'; import Analytics from '../../Analytics'; import {getHttpUriForMxc} from "matrix-js-sdk/src/content-repo"; +import {ALL_ROOMS} from "../views/directory/NetworkDropdown"; const MAX_NAME_LENGTH = 80; const MAX_TOPIC_LENGTH = 160; @@ -40,25 +41,17 @@ export default createReactClass({ displayName: 'RoomDirectory', propTypes: { - config: PropTypes.object, onFinished: PropTypes.func.isRequired, }, - getDefaultProps: function() { - return { - config: {}, - }; - }, - getInitialState: function() { return { publicRooms: [], loading: true, protocolsLoading: true, error: null, - instanceId: null, - includeAll: false, - roomServer: null, + instanceId: undefined, + roomServer: MatrixClientPeg.getHomeserverName(), filterString: null, }; }, @@ -98,6 +91,10 @@ export default createReactClass({ }); }, + componentDidMount: function() { + this.refreshRoomList(); + }, + componentWillUnmount: function() { if (this.filterTimeout) { clearTimeout(this.filterTimeout); @@ -130,10 +127,10 @@ export default createReactClass({ if (my_server != MatrixClientPeg.getHomeserverName()) { opts.server = my_server; } - if (this.state.instanceId) { - opts.third_party_instance_id = this.state.instanceId; - } else if (this.state.includeAll) { + if (this.state.instanceId === ALL_ROOMS) { opts.include_all_networks = true; + } else if (this.state.instanceId) { + opts.third_party_instance_id = this.state.instanceId; } if (this.nextBatch) opts.since = this.nextBatch; if (my_filter_string) opts.filter = { generic_search_term: my_filter_string }; @@ -247,7 +244,7 @@ export default createReactClass({ } }, - onOptionChange: function(server, instanceId, includeAll) { + onOptionChange: function(server, instanceId) { // clear next batch so we don't try to load more rooms this.nextBatch = null; this.setState({ @@ -257,7 +254,6 @@ export default createReactClass({ publicRooms: [], roomServer: server, instanceId: instanceId, - includeAll: includeAll, error: null, }, this.refreshRoomList); // We also refresh the room list each time even though this @@ -305,7 +301,7 @@ export default createReactClass({ onJoinFromSearchClick: function(alias) { // If we don't have a particular instance id selected, just show that rooms alias - if (!this.state.instanceId) { + if (!this.state.instanceId || this.state.instanceId === ALL_ROOMS) { // If the user specified an alias without a domain, add on whichever server is selected // in the dropdown if (alias.indexOf(':') == -1) { @@ -587,7 +583,7 @@ export default createReactClass({ } let placeholder = _t('Find a room…'); - if (!this.state.instanceId) { + if (!this.state.instanceId || this.state.instanceId === ALL_ROOMS) { placeholder = _t("Find a room… (e.g. %(exampleRoom)s)", {exampleRoom: "#example:" + this.state.roomServer}); } else if (instance_expected_field_type) { placeholder = instance_expected_field_type.placeholder; @@ -604,10 +600,18 @@ export default createReactClass({ listHeader =
+ -
; } const explanation = diff --git a/src/components/views/dialogs/TextInputDialog.js b/src/components/views/dialogs/TextInputDialog.js index 0ffc072cc0..4b21e8206e 100644 --- a/src/components/views/dialogs/TextInputDialog.js +++ b/src/components/views/dialogs/TextInputDialog.js @@ -28,9 +28,11 @@ export default createReactClass({ PropTypes.string, ]), value: PropTypes.string, + placeholder: PropTypes.string, button: PropTypes.string, focus: PropTypes.bool, onFinished: PropTypes.func.isRequired, + hasCancel: PropTypes.bool, }, getDefaultProps: function() { @@ -39,6 +41,7 @@ export default createReactClass({ value: "", description: "", focus: true, + hasCancel: true, }; }, @@ -80,13 +83,17 @@ export default createReactClass({ className="mx_TextInputDialog_input" defaultValue={this.props.value} autoFocus={this.props.focus} + placeholder={this.props.placeholder} size="64" />
- + onCancel={this.onCancel} + hasCancel={this.props.hasCancel} + /> ); }, diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js index cb6a015d86..229f80ef29 100644 --- a/src/components/views/directory/NetworkDropdown.js +++ b/src/components/views/directory/NetworkDropdown.js @@ -1,6 +1,7 @@ /* Copyright 2016 OpenMarket Ltd Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2020 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,239 +18,225 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; + import {MatrixClientPeg} from '../../../MatrixClientPeg'; import {instanceForInstanceId} from '../../../utils/DirectoryUtils'; +import {ContextMenu, useContextMenu, ContextMenuButton, MenuItemRadio, MenuItem} from "../../structures/ContextMenu"; +import {_t} from "../../../languageHandler"; +import SdkConfig from "../../../SdkConfig"; +import {useSettingValue} from "../../../hooks/useSettings"; +import * as sdk from "../../../index"; +import Modal from "../../../Modal"; +import SettingsStore from "../../../settings/SettingsStore"; +import AccessibleButton from "../elements/AccessibleButton"; -const DEFAULT_ICON_URL = require("../../../../res/img/network-matrix.svg"); +export const ALL_ROOMS = Symbol("ALL_ROOMS"); -export default class NetworkDropdown extends React.Component { - constructor(props) { - super(props); +const SETTING_NAME = "room_directory_servers"; - this.dropdownRootElement = null; - this.ignoreEvent = null; +const inPlaceOf = (elementRect) => ({ + right: window.innerWidth - elementRect.right, + top: elementRect.top, + chevronOffset: 0, + chevronFace: "none", +}); - this.onInputClick = this.onInputClick.bind(this); - this.onRootClick = this.onRootClick.bind(this); - this.onDocumentClick = this.onDocumentClick.bind(this); - this.onMenuOptionClick = this.onMenuOptionClick.bind(this); - this.onInputKeyUp = this.onInputKeyUp.bind(this); - this.collectRoot = this.collectRoot.bind(this); - this.collectInputTextBox = this.collectInputTextBox.bind(this); +// This dropdown sources homeservers from three places: +// + your currently connected homeserver +// + homeservers in config.json["roomDirectory"] +// + homeservers in SettingsStore["room_directory_servers"] +// if a server exists in multiple, only keep the top-most entry. - this.inputTextBox = null; +const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, selectedInstanceId}) => { + const [menuDisplayed, handle, openMenu, closeMenu] = useContextMenu(); + const userDefinedServers = useSettingValue(SETTING_NAME); - const server = MatrixClientPeg.getHomeserverName(); - this.state = { - expanded: false, - selectedServer: server, - selectedInstanceId: null, - includeAllNetworks: false, + const handlerFactory = (server, instanceId) => { + return () => { + onOptionChange(server, instanceId); + closeMenu(); }; - } + }; - componentWillMount() { - // Listen for all clicks on the document so we can close the - // menu when the user clicks somewhere else - document.addEventListener('click', this.onDocumentClick, false); + // we either show the button or the dropdown in its place. + let content; + if (menuDisplayed) { + const config = SdkConfig.get(); + const roomDirectory = config.roomDirectory || {}; - // fire this now so the defaults can be set up - const {selectedServer, selectedInstanceId, includeAllNetworks} = this.state; - this.props.onOptionChange(selectedServer, selectedInstanceId, includeAllNetworks); - } + const hsName = MatrixClientPeg.getHomeserverName(); + const configServers = new Set(roomDirectory.servers); - componentWillUnmount() { - document.removeEventListener('click', this.onDocumentClick, false); - } - - componentDidUpdate() { - if (this.state.expanded && this.inputTextBox) { - this.inputTextBox.focus(); - } - } - - onDocumentClick(ev) { - // Close the dropdown if the user clicks anywhere that isn't - // within our root element - if (ev !== this.ignoreEvent) { - this.setState({ - expanded: false, - }); - } - } - - onRootClick(ev) { - // This captures any clicks that happen within our elements, - // such that we can then ignore them when they're seen by the - // click listener on the document handler, ie. not close the - // dropdown immediately after opening it. - // NB. We can't just stopPropagation() because then the event - // doesn't reach the React onClick(). - this.ignoreEvent = ev; - } - - onInputClick(ev) { - this.setState({ - expanded: !this.state.expanded, - }); - ev.preventDefault(); - } - - onMenuOptionClick(server, instance, includeAll) { - this.setState({ - expanded: false, - selectedServer: server, - selectedInstanceId: instance ? instance.instance_id : null, - includeAllNetworks: includeAll, - }); - this.props.onOptionChange(server, instance ? instance.instance_id : null, includeAll); - } - - onInputKeyUp(e) { - if (e.key === 'Enter') { - this.setState({ - expanded: false, - selectedServer: e.target.value, - selectedNetwork: null, - includeAllNetworks: false, - }); - this.props.onOptionChange(e.target.value, null); - } - } - - collectRoot(e) { - if (this.dropdownRootElement) { - this.dropdownRootElement.removeEventListener('click', this.onRootClick, false); - } - if (e) { - e.addEventListener('click', this.onRootClick, false); - } - this.dropdownRootElement = e; - } - - collectInputTextBox(e) { - this.inputTextBox = e; - } - - _getMenuOptions() { - const options = []; - const roomDirectory = this.props.config.roomDirectory || {}; - - let servers = []; - if (roomDirectory.servers) { - servers = servers.concat(roomDirectory.servers); - } - - if (!servers.includes(MatrixClientPeg.getHomeserverName())) { - servers.unshift(MatrixClientPeg.getHomeserverName()); - } + // configured servers take preference over user-defined ones, if one occurs in both ignore the latter one. + const removableServers = new Set(userDefinedServers.filter(s => !configServers.has(s) && s !== hsName)); + const servers = [ + // we always show our connected HS, this takes precedence over it being configured or user-defined + hsName, + ...Array.from(configServers).filter(s => s !== hsName).sort(), + ...Array.from(removableServers).sort(), + ]; // For our own HS, we can use the instance_ids given in the third party protocols // response to get the server to filter the room list by network for us. // We can't get thirdparty protocols for remote server yet though, so for those // we can only show the default room list. - for (const server of servers) { - options.push(this._makeMenuOption(server, null, true)); - if (server === MatrixClientPeg.getHomeserverName()) { - options.push(this._makeMenuOption(server, null, false)); - if (this.props.protocols) { - for (const proto of Object.keys(this.props.protocols)) { - if (!this.props.protocols[proto].instances) continue; + const options = servers.map(server => { + const serverSelected = server === selectedServerName; + const entries = []; - const sortedInstances = this.props.protocols[proto].instances; - sortedInstances.sort(function(x, y) { - const a = x.desc; - const b = y.desc; - if (a < b) { - return -1; - } else if (a > b) { - return 1; - } else { - return 0; - } - }); - - for (const instance of sortedInstances) { - if (!instance.instance_id) continue; - options.push(this._makeMenuOption(server, instance, false)); - } - } - } + const protocolsList = server === hsName ? Object.values(protocols) : []; + if (protocolsList.length > 0) { + // add a fake protocol with the ALL_ROOMS symbol + protocolsList.push({ + instances: [{ + instance_id: ALL_ROOMS, + desc: _t("All rooms"), + }], + }); } - } - return options; - } + protocolsList.forEach(({instances=[]}) => { + [...instances].sort((b, a) => { + return a.desc.localeCompare(b.desc); + }).forEach(({desc, instance_id: instanceId}) => { + entries.push( + + { desc } + ); + }); + }); - _makeMenuOption(server, instance, includeAll, handleClicks) { - if (handleClicks === undefined) handleClicks = true; + let subtitle; + if (server === hsName) { + subtitle = ( +
+ {_t("Your server")} +
+ ); + } - let icon; - let name; - let key; + let removeButton; + if (removableServers.has(server)) { + const onClick = async () => { + closeMenu(); + const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); + const {finished} = Modal.createTrackedDialog("Network Dropdown", "Remove server", QuestionDialog, { + title: _t("Are you sure?"), + description: _t("Are you sure you want to remove %(serverName)s", { + serverName: server, + }, { + b: serverName => { serverName }, + }), + button: _t("Remove"), + }); - if (!instance && includeAll) { - key = server; - name = server; - } else if (!instance) { - key = server + '_all'; - name = 'Matrix'; - icon = ; - } else { - key = server + '_inst_' + instance.instance_id; - const imgUrl = instance.icon ? - MatrixClientPeg.get().mxcUrlToHttp(instance.icon, 25, 25, 'crop', true) : - DEFAULT_ICON_URL; - icon = ; - name = instance.desc; - } + const [ok] = await finished; + if (!ok) return; - const clickHandler = handleClicks ? this.onMenuOptionClick.bind(this, server, instance, includeAll) : null; + // delete from setting + await SettingsStore.setValue(SETTING_NAME, null, "account", servers.filter(s => s !== server)); - return
- {icon} - {name} -
; - } + // the selected server is being removed, reset to our HS + if (serverSelected === server) { + onOptionChange(hsName, undefined); + } + }; + removeButton = ; + } - render() { - let currentValue; + return ( +
+
+ { server } + { removeButton } +
+ { subtitle } - let menu; - if (this.state.expanded) { - const menuOptions = this._getMenuOptions(); - menu =
- {menuOptions} -
; - currentValue = ; - } else { - const instance = instanceForInstanceId(this.props.protocols, this.state.selectedInstanceId); - currentValue = this._makeMenuOption( - this.state.selectedServer, instance, this.state.includeAllNetworks, false, + + {_t("Matrix")} + + { entries } +
); + }); + + const onClick = async () => { + closeMenu(); + const TextInputDialog = sdk.getComponent("dialogs.TextInputDialog"); + const { finished } = Modal.createTrackedDialog("Network Dropdown", "Add a new server", TextInputDialog, { + title: _t("Add a new server"), + description: _t("Enter the address of a new server you want to explore."), + button: _t("Add"), + hasCancel: false, + placeholder: _t("Server address"), + }); + + const [ok, newServer] = await finished; + if (!ok) return; + + if (!userDefinedServers.includes(newServer)) { + const servers = [...userDefinedServers, newServer]; + await SettingsStore.setValue(SETTING_NAME, null, "account", servers); + } + + onOptionChange(newServer); // change filter to the new server + }; + + const buttonRect = handle.current.getBoundingClientRect(); + content = +
+ {options} + + {_t("Add a new server...")} + +
+
; + } else { + let currentValue; + if (selectedInstanceId === ALL_ROOMS) { + currentValue = _t("All rooms"); + } else if (selectedInstanceId) { + const instance = instanceForInstanceId(protocols, selectedInstanceId); + currentValue = _t("%(networkName)s rooms", { + networkName: instance.desc, + }); + } else { + currentValue = _t("Matrix rooms"); } - return
-
+ content = + {currentValue} - - {menu} -
-
; + + ({selectedServerName}) + + ; } -} + + return
+ {content} +
; +}; NetworkDropdown.propTypes = { onOptionChange: PropTypes.func.isRequired, protocols: PropTypes.object, - // The room directory config. May have a 'servers' key that is a list of server names to include in the dropdown - config: PropTypes.object, }; -NetworkDropdown.defaultProps = { - protocols: {}, - config: {}, -}; +export default NetworkDropdown; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 2f8f5c48ad..a5763fe5c5 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1437,6 +1437,15 @@ "And %(count)s more...|other": "And %(count)s more...", "ex. @bob:example.com": "ex. @bob:example.com", "Add User": "Add User", + "All rooms": "All rooms", + "Your server": "Your server", + "Matrix": "Matrix", + "Add a new server": "Add a new server", + "Enter the address of a new server you want to explore.": "Enter the address of a new server you want to explore.", + "Server address": "Server address", + "Add a new server...": "Add a new server...", + "%(networkName)s rooms": "%(networkName)s rooms", + "Matrix rooms": "Matrix rooms", "Matrix ID": "Matrix ID", "Matrix Room ID": "Matrix Room ID", "email address": "email address", diff --git a/src/settings/Settings.js b/src/settings/Settings.js index b77fb392e9..8024c411f7 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -324,6 +324,10 @@ export const SETTINGS = { supportedLevels: ['account'], default: [], }, + "room_directory_servers": { + supportedLevels: ['account'], + default: [], + }, "integrationProvisioning": { supportedLevels: ['account'], default: true, From dd4dc054aef404745299eb5838d6707eeb532360 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 00:06:41 +0000 Subject: [PATCH 291/522] i18n Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- 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 a5763fe5c5..b7ba70b62f 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1439,6 +1439,7 @@ "Add User": "Add User", "All rooms": "All rooms", "Your server": "Your server", + "Are you sure you want to remove %(serverName)s": "Are you sure you want to remove %(serverName)s", "Matrix": "Matrix", "Add a new server": "Add a new server", "Enter the address of a new server you want to explore.": "Enter the address of a new server you want to explore.", From 343403f1efcdf8b4150d903e0a4d21e49b59d23d Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 00:09:56 +0000 Subject: [PATCH 292/522] clean up Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/directory/_NetworkDropdown.scss | 6 ------ 1 file changed, 6 deletions(-) diff --git a/res/css/views/directory/_NetworkDropdown.scss b/res/css/views/directory/_NetworkDropdown.scss index 3dc3a99dd4..f3c2f4757a 100644 --- a/res/css/views/directory/_NetworkDropdown.scss +++ b/res/css/views/directory/_NetworkDropdown.scss @@ -1,5 +1,4 @@ /* -Copyright 2015, 2016 OpenMarket Ltd Copyright 2020 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); @@ -30,11 +29,6 @@ limitations under the License. } .mx_NetworkDropdown_menu { - //position: absolute; - //left: -1px; - //right: -1px; - //top: 100%; - //z-index: 2; width: 204px; margin: 0; box-sizing: border-box; From 359b07b8efc667945d3f3476fbd9658dd1f8b21c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 00:11:09 +0000 Subject: [PATCH 293/522] allow it to expand for longer content Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/directory/_NetworkDropdown.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/css/views/directory/_NetworkDropdown.scss b/res/css/views/directory/_NetworkDropdown.scss index f3c2f4757a..1f55531602 100644 --- a/res/css/views/directory/_NetworkDropdown.scss +++ b/res/css/views/directory/_NetworkDropdown.scss @@ -29,7 +29,7 @@ limitations under the License. } .mx_NetworkDropdown_menu { - width: 204px; + min-width: 204px; margin: 0; box-sizing: border-box; border-radius: 4px; From 642dd08ca25065237d157e5759efae77d94fe315 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 00:16:11 +0000 Subject: [PATCH 294/522] remove erroneous margin Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/structures/_RoomDirectory.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/res/css/structures/_RoomDirectory.scss b/res/css/structures/_RoomDirectory.scss index d6ae0bb739..b5ead78b8b 100644 --- a/res/css/structures/_RoomDirectory.scss +++ b/res/css/structures/_RoomDirectory.scss @@ -48,7 +48,6 @@ limitations under the License. .mx_RoomDirectory_listheader { display: block; margin-top: 13px; - margin-bottom: 13px; } .mx_RoomDirectory_searchbox { From 3628fd2ea26b12ee25d96ef453acd47edca3bc34 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 00:18:33 +0000 Subject: [PATCH 295/522] add missing asset Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/img/feather-customised/chevron-down.svg | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 res/img/feather-customised/chevron-down.svg diff --git a/res/img/feather-customised/chevron-down.svg b/res/img/feather-customised/chevron-down.svg new file mode 100644 index 0000000000..bcb185ede7 --- /dev/null +++ b/res/img/feather-customised/chevron-down.svg @@ -0,0 +1,3 @@ + + + From 5a27fa7d97eb6f85171730179cba4cdd3dc9b34f Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 00:18:53 +0000 Subject: [PATCH 296/522] fix styling of server name in handle Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/directory/_NetworkDropdown.scss | 5 +++++ src/components/views/directory/NetworkDropdown.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/res/css/views/directory/_NetworkDropdown.scss b/res/css/views/directory/_NetworkDropdown.scss index 1f55531602..f017ed9dcd 100644 --- a/res/css/views/directory/_NetworkDropdown.scss +++ b/res/css/views/directory/_NetworkDropdown.scss @@ -149,4 +149,9 @@ limitations under the License. mask-image: url('$(res)/img/feather-customised/chevron-down.svg'); background-color: $primary-fg-color; } + + .mx_NetworkDropdown_handle_server { + color: $muted-fg-color; + font-size: 12px; + } } diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js index 229f80ef29..8369926fb4 100644 --- a/src/components/views/directory/NetworkDropdown.js +++ b/src/components/views/directory/NetworkDropdown.js @@ -223,7 +223,7 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se > {currentValue} - + ({selectedServerName}) ; From 949ac2953e1038261ac82dc2817bea491ca9904a Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 13 Mar 2020 10:21:37 +0100 Subject: [PATCH 297/522] pass current server as via server to join room --- src/components/structures/RoomDirectory.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js index dd089a9776..6310efffb9 100644 --- a/src/components/structures/RoomDirectory.js +++ b/src/components/structures/RoomDirectory.js @@ -406,6 +406,12 @@ export default createReactClass({ // would normally decide what the name is. name: room.name || room_alias || _t('Unnamed room'), }; + + if (this.state.roomServer) { + payload.opts = { + viaServers: [this.state.roomServer], + }; + } } // It's not really possible to join Matrix rooms by ID because the HS has no way to know // which servers to start querying. However, there's no other way to join rooms in From 480dbad887d633e6ce67e38f3172f0c69d33d9df Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Fri, 13 Mar 2020 01:58:08 +0000 Subject: [PATCH 298/522] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2146 of 2146 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 395b8988b5..c8d520d5a3 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2195,5 +2195,6 @@ "New address (e.g. #foo:domain)": "新位置(例如:#foo:domain)", "Local addresses (unmoderated content)": "本機位置(未經審核的內容)", "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s 將聊天室名稱從 %(oldRoomName)s 變更為 %(newRoomName)s。", - "%(senderName)s changed the addresses for this room.": "%(senderName)s 變更了此聊天室的位置。" + "%(senderName)s changed the addresses for this room.": "%(senderName)s 變更了此聊天室的位置。", + "You don't have permission to delete the alias.": "您沒有刪除別名的權限。" } From a612a66b69b9a36da89d9146c648377c7733df04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Fri, 13 Mar 2020 11:33:58 +0100 Subject: [PATCH 299/522] EventIndex: Properly await the index closing. --- src/indexing/EventIndex.js | 3 ++- src/indexing/EventIndexPeg.js | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/indexing/EventIndex.js b/src/indexing/EventIndex.js index a4a9302601..f52e2596bd 100644 --- a/src/indexing/EventIndex.js +++ b/src/indexing/EventIndex.js @@ -549,7 +549,8 @@ export default class EventIndex extends EventEmitter { const indexManager = PlatformPeg.get().getEventIndexingManager(); this.removeListeners(); this.stopCrawler(); - return indexManager.closeEventIndex(); + await indexManager.closeEventIndex(); + return; } /** diff --git a/src/indexing/EventIndexPeg.js b/src/indexing/EventIndexPeg.js index 067aea3a7f..9aa7e78eda 100644 --- a/src/indexing/EventIndexPeg.js +++ b/src/indexing/EventIndexPeg.js @@ -135,7 +135,7 @@ class EventIndexPeg { */ async unset() { if (this.index === null) return; - this.index.close(); + await this.index.close(); this.index = null; } @@ -151,7 +151,7 @@ class EventIndexPeg { const indexManager = PlatformPeg.get().getEventIndexingManager(); if (indexManager !== null) { - this.unset(); + await this.unset(); console.log("EventIndex: Deleting event index."); await indexManager.deleteEventIndex(); } From 6b44254b4c1a84b6fedf9e8a9c56b17c0d6a669e Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 13 Mar 2020 10:21:37 +0100 Subject: [PATCH 300/522] pass current server as via server to join room --- src/components/structures/RoomDirectory.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js index dd089a9776..6310efffb9 100644 --- a/src/components/structures/RoomDirectory.js +++ b/src/components/structures/RoomDirectory.js @@ -406,6 +406,12 @@ export default createReactClass({ // would normally decide what the name is. name: room.name || room_alias || _t('Unnamed room'), }; + + if (this.state.roomServer) { + payload.opts = { + viaServers: [this.state.roomServer], + }; + } } // It's not really possible to join Matrix rooms by ID because the HS has no way to know // which servers to start querying. However, there's no other way to join rooms in From b83c1d04e7bbc953bc33fee0e680b5dd6735db6d Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 13 Mar 2020 13:59:56 +0100 Subject: [PATCH 301/522] wrap room name in room preview bar --- res/css/views/rooms/_RoomPreviewBar.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/res/css/views/rooms/_RoomPreviewBar.scss b/res/css/views/rooms/_RoomPreviewBar.scss index 85b6916226..b3f6a12103 100644 --- a/res/css/views/rooms/_RoomPreviewBar.scss +++ b/res/css/views/rooms/_RoomPreviewBar.scss @@ -25,6 +25,9 @@ limitations under the License. h3 { font-size: 18px; font-weight: 600; + // break-word, with fallback to break-all, which is wider supported + word-break: break-all; + word-break: break-word; &.mx_RoomPreviewBar_spinnerTitle { display: flex; From cb368a06012918289e1cb14362497cdaae27ecda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Fri, 13 Mar 2020 14:12:48 +0100 Subject: [PATCH 302/522] EventIndex: Remove a checkpoint if the HTTP request returns a 403. This fixes https://github.com/vector-im/riot-web/issues/12722. --- src/indexing/EventIndex.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/indexing/EventIndex.js b/src/indexing/EventIndex.js index c8a9a4c1fa..a9c27a254f 100644 --- a/src/indexing/EventIndex.js +++ b/src/indexing/EventIndex.js @@ -373,6 +373,21 @@ export default class EventIndex extends EventEmitter { checkpoint.roomId, checkpoint.token, this._eventsPerCrawl, checkpoint.direction); } catch (e) { + if (e.httpStatus === 403) { + console.log("EventIndex: Removing checkpoint as we don't have ", + "permissions to fetch messages from this room.", checkpoint); + try { + await indexManager.removeCrawlerCheckpoint(checkpoint); + } catch (e) { + console.log("EventIndex: Error removing checkpoint", checkpoint, e); + // We don't push the checkpoint here back, it will + // hopefully be removed after a restart. But let us + // ignore it for now as we don't want to hammer the + // endpoint. + } + continue; + } + console.log("EventIndex: Error crawling events:", e); this.crawlerCheckpoints.push(checkpoint); continue; From 9237cf956640f73d79ddb884b127b8cb46f2ad33 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 14:19:38 +0000 Subject: [PATCH 303/522] update font sizes Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/structures/_RoomDirectory.scss | 5 +++-- res/css/views/directory/_NetworkDropdown.scss | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/res/css/structures/_RoomDirectory.scss b/res/css/structures/_RoomDirectory.scss index b5ead78b8b..f3a7b0e243 100644 --- a/res/css/structures/_RoomDirectory.scss +++ b/res/css/structures/_RoomDirectory.scss @@ -64,7 +64,7 @@ limitations under the License. } .mx_RoomDirectory_table { - font-size: 14px; + font-size: 12px; color: $primary-fg-color; width: 100%; text-align: left; @@ -112,6 +112,7 @@ limitations under the License. .mx_RoomDirectory_name { display: inline-block; + font-size: 18px; font-weight: 600; } @@ -149,7 +150,7 @@ limitations under the License. } .mx_RoomDirectory > span { - font-size: 14px; + font-size: 15px; margin-top: 0; .mx_AccessibleButton { diff --git a/res/css/views/directory/_NetworkDropdown.scss b/res/css/views/directory/_NetworkDropdown.scss index f017ed9dcd..7e8a2e16d1 100644 --- a/res/css/views/directory/_NetworkDropdown.scss +++ b/res/css/views/directory/_NetworkDropdown.scss @@ -58,7 +58,7 @@ limitations under the License. display: inline; right: 0; - &::before { + &::after { content: ""; position: absolute; width: 16px; From af368a4736f546aec0ff24e29ead2aa16bf9b692 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 14:38:36 +0000 Subject: [PATCH 304/522] Improve accessibility Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/directory/_NetworkDropdown.scss | 5 +++-- src/components/structures/ContextMenu.js | 3 +-- .../views/directory/NetworkDropdown.js | 20 +++++++++++++------ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/res/css/views/directory/_NetworkDropdown.scss b/res/css/views/directory/_NetworkDropdown.scss index 7e8a2e16d1..28dd1ed628 100644 --- a/res/css/views/directory/_NetworkDropdown.scss +++ b/res/css/views/directory/_NetworkDropdown.scss @@ -56,14 +56,15 @@ limitations under the License. .mx_AccessibleButton { position: absolute; display: inline; - right: 0; + right: 12px; + height: 16px; + width: 16px; &::after { content: ""; position: absolute; width: 16px; height: 16px; - right: 12px; top: 4px; mask-repeat: no-repeat; mask-position: center; diff --git a/src/components/structures/ContextMenu.js b/src/components/structures/ContextMenu.js index 898991f4f2..b4647a6c30 100644 --- a/src/components/structures/ContextMenu.js +++ b/src/components/structures/ContextMenu.js @@ -350,7 +350,7 @@ export const ContextMenuButton = ({ label, isExpanded, children, ...props }) => }; ContextMenuButton.propTypes = { ...AccessibleButton.propTypes, - label: PropTypes.string.isRequired, + label: PropTypes.string, isExpanded: PropTypes.bool.isRequired, // whether or not the context menu is currently open }; @@ -377,7 +377,6 @@ export const MenuGroup = ({children, label, ...props}) => {
; }; MenuGroup.propTypes = { - ...AccessibleButton.propTypes, label: PropTypes.string.isRequired, className: PropTypes.string, // optional }; diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js index 8369926fb4..637fb09c18 100644 --- a/src/components/views/directory/NetworkDropdown.js +++ b/src/components/views/directory/NetworkDropdown.js @@ -21,7 +21,14 @@ import PropTypes from 'prop-types'; import {MatrixClientPeg} from '../../../MatrixClientPeg'; import {instanceForInstanceId} from '../../../utils/DirectoryUtils'; -import {ContextMenu, useContextMenu, ContextMenuButton, MenuItemRadio, MenuItem} from "../../structures/ContextMenu"; +import { + ContextMenu, + useContextMenu, + ContextMenuButton, + MenuItemRadio, + MenuItem, + MenuGroup +} from "../../structures/ContextMenu"; import {_t} from "../../../languageHandler"; import SdkConfig from "../../../SdkConfig"; import {useSettingValue} from "../../../hooks/useSettings"; @@ -147,11 +154,13 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se onOptionChange(hsName, undefined); } }; - removeButton = ; + removeButton = ; } + // ARIA: in actual fact the entire menu is one large radio group but for better screen reader support + // we use group to notate server wrongly. return ( -
+
{ server } { removeButton } @@ -167,7 +176,7 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se {_t("Matrix")} { entries } -
+
); }); @@ -194,7 +203,7 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se }; const buttonRect = handle.current.getBoundingClientRect(); - content = + content =
{options} @@ -217,7 +226,6 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se content = From 401d85ea6fd156bd2f2f46ce7a86db694a4deeaf Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 14:42:19 +0000 Subject: [PATCH 305/522] delint Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/directory/NetworkDropdown.js | 3 +-- src/i18n/strings/en_EN.json | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js index 637fb09c18..22f919b162 100644 --- a/src/components/views/directory/NetworkDropdown.js +++ b/src/components/views/directory/NetworkDropdown.js @@ -27,7 +27,7 @@ import { ContextMenuButton, MenuItemRadio, MenuItem, - MenuGroup + MenuGroup, } from "../../structures/ContextMenu"; import {_t} from "../../../languageHandler"; import SdkConfig from "../../../SdkConfig"; @@ -35,7 +35,6 @@ import {useSettingValue} from "../../../hooks/useSettings"; import * as sdk from "../../../index"; import Modal from "../../../Modal"; import SettingsStore from "../../../settings/SettingsStore"; -import AccessibleButton from "../elements/AccessibleButton"; export const ALL_ROOMS = Symbol("ALL_ROOMS"); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index b7ba70b62f..59bc643539 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1440,6 +1440,7 @@ "All rooms": "All rooms", "Your server": "Your server", "Are you sure you want to remove %(serverName)s": "Are you sure you want to remove %(serverName)s", + "Remove server": "Remove server", "Matrix": "Matrix", "Add a new server": "Add a new server", "Enter the address of a new server you want to explore.": "Enter the address of a new server you want to explore.", From 84332184b518b9609cda77e7becb75d4761d0bb7 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 14:50:41 +0000 Subject: [PATCH 306/522] no need to await here as settings take a while to effect, we watch them elsewhere Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/directory/_NetworkDropdown.scss | 2 +- src/components/views/directory/NetworkDropdown.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/res/css/views/directory/_NetworkDropdown.scss b/res/css/views/directory/_NetworkDropdown.scss index 28dd1ed628..61f9825143 100644 --- a/res/css/views/directory/_NetworkDropdown.scss +++ b/res/css/views/directory/_NetworkDropdown.scss @@ -59,13 +59,13 @@ limitations under the License. right: 12px; height: 16px; width: 16px; + margin-top: 4px; &::after { content: ""; position: absolute; width: 16px; height: 16px; - top: 4px; mask-repeat: no-repeat; mask-position: center; mask-size: contain; diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js index 22f919b162..c4a70c112e 100644 --- a/src/components/views/directory/NetworkDropdown.js +++ b/src/components/views/directory/NetworkDropdown.js @@ -146,7 +146,7 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se if (!ok) return; // delete from setting - await SettingsStore.setValue(SETTING_NAME, null, "account", servers.filter(s => s !== server)); + SettingsStore.setValue(SETTING_NAME, null, "account", servers.filter(s => s !== server)); // the selected server is being removed, reset to our HS if (serverSelected === server) { @@ -195,7 +195,7 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se if (!userDefinedServers.includes(newServer)) { const servers = [...userDefinedServers, newServer]; - await SettingsStore.setValue(SETTING_NAME, null, "account", servers); + SettingsStore.setValue(SETTING_NAME, null, "account", servers); } onOptionChange(newServer); // change filter to the new server From 4de0e21a4b596a0ef6083c00afd860c407a14dda Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 15:28:22 +0000 Subject: [PATCH 307/522] fix styling mistakes Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/directory/_NetworkDropdown.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/res/css/views/directory/_NetworkDropdown.scss b/res/css/views/directory/_NetworkDropdown.scss index 61f9825143..b23af0b2a0 100644 --- a/res/css/views/directory/_NetworkDropdown.scss +++ b/res/css/views/directory/_NetworkDropdown.scss @@ -33,7 +33,7 @@ limitations under the License. margin: 0; box-sizing: border-box; border-radius: 4px; - border: 1px solid $accent-color; + border: 1px solid $dialog-close-fg-color; background-color: $primary-bg-color; } @@ -120,6 +120,7 @@ limitations under the License. .mx_NetworkDropdown_server_add { padding: 16px 10px 16px 32px; position: relative; + border-radius: 0 0 4px 4px; &::before { content: ""; From ee1659625cfa7affa8ec873279cca35d3b5cd518 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 17:32:02 +0000 Subject: [PATCH 308/522] Add Field validation to TextInputDialog Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../views/dialogs/TextInputDialog.js | 59 +++++++++++++++---- .../views/directory/NetworkDropdown.js | 30 ++++++++++ src/i18n/strings/en_EN.json | 3 + 3 files changed, 81 insertions(+), 11 deletions(-) diff --git a/src/components/views/dialogs/TextInputDialog.js b/src/components/views/dialogs/TextInputDialog.js index 4b21e8206e..e56e9f2b87 100644 --- a/src/components/views/dialogs/TextInputDialog.js +++ b/src/components/views/dialogs/TextInputDialog.js @@ -18,6 +18,7 @@ import React, {createRef} from 'react'; import createReactClass from 'create-react-class'; import PropTypes from 'prop-types'; import * as sdk from '../../../index'; +import Field from "../elements/Field"; export default createReactClass({ displayName: 'TextInputDialog', @@ -33,6 +34,7 @@ export default createReactClass({ focus: PropTypes.bool, onFinished: PropTypes.func.isRequired, hasCancel: PropTypes.bool, + validator: PropTypes.func, // result of withValidation }, getDefaultProps: function() { @@ -45,25 +47,57 @@ export default createReactClass({ }; }, + getInitialState: function() { + return { + value: this.props.value, + valid: false, + }; + }, + UNSAFE_componentWillMount: function() { - this._textinput = createRef(); + this._field = createRef(); }, componentDidMount: function() { if (this.props.focus) { // Set the cursor at the end of the text input - this._textinput.current.value = this.props.value; + // this._field.current.value = this.props.value; + this._field.current.focus(); } }, - onOk: function() { - this.props.onFinished(true, this._textinput.current.value); + onOk: async function(ev) { + ev.preventDefault(); + if (this.props.validator) { + await this._field.current.validate({ allowEmpty: false }); + + if (!this._field.current.state.valid) { + this._field.current.focus(); + this._field.current.validate({ allowEmpty: false, focused: true }); + return; + } + } + this.props.onFinished(true, this.state.value); }, onCancel: function() { this.props.onFinished(false); }, + onChange: function(ev) { + this.setState({ + value: ev.target.value, + }); + }, + + onValidate: async function(fieldState) { + const result = await this.props.validator(fieldState); + this.setState({ + valid: result.valid, + }); + return result; + }, + render: function() { const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog'); const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); @@ -77,14 +111,17 @@ export default createReactClass({
- + ref={this._field} + type="text" + label={this.props.placeholder} + value={this.state.value} + onChange={this.onChange} + onValidate={this.props.validator ? this.onValidate : undefined} + size="64" + />
diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js index c4a70c112e..6d1501ca57 100644 --- a/src/components/views/directory/NetworkDropdown.js +++ b/src/components/views/directory/NetworkDropdown.js @@ -35,6 +35,7 @@ import {useSettingValue} from "../../../hooks/useSettings"; import * as sdk from "../../../index"; import Modal from "../../../Modal"; import SettingsStore from "../../../settings/SettingsStore"; +import withValidation from "../elements/Validation"; export const ALL_ROOMS = Symbol("ALL_ROOMS"); @@ -47,6 +48,34 @@ const inPlaceOf = (elementRect) => ({ chevronFace: "none", }); +const validServer = withValidation({ + rules: [ + { + key: "required", + test: async ({ value }) => !!value, + invalid: () => _t("Enter a server address"), + }, { + key: "available", + final: true, + test: async ({ value }) => { + try { + const opts = { + limit: 1, + server: value, + }; + // check if we can successfully load this server's room directory + await MatrixClientPeg.get().publicRooms(opts); + return true; + } catch (e) { + return false; + } + }, + valid: () => _t("Looks good"), + invalid: () => _t("Can't find this server or its room list"), + }, + ], +}); + // This dropdown sources homeservers from three places: // + your currently connected homeserver // + homeservers in config.json["roomDirectory"] @@ -188,6 +217,7 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se button: _t("Add"), hasCancel: false, placeholder: _t("Server address"), + validator: validServer, }); const [ok, newServer] = await finished; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 59bc643539..3f20d4ec61 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1437,6 +1437,9 @@ "And %(count)s more...|other": "And %(count)s more...", "ex. @bob:example.com": "ex. @bob:example.com", "Add User": "Add User", + "Enter a server address": "Enter a server address", + "Looks good": "Looks good", + "Can't find this server or its room list": "Can't find this server or its room list", "All rooms": "All rooms", "Your server": "Your server", "Are you sure you want to remove %(serverName)s": "Are you sure you want to remove %(serverName)s", From 6137e5d5d8d5881d4f3765e3cff34365bbd439c8 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 17:52:06 +0000 Subject: [PATCH 309/522] Fix typo in tabIndex to make React happy Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/RoomList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomList.js b/src/components/views/rooms/RoomList.js index 0fe0ff3d8c..2143c7f1a8 100644 --- a/src/components/views/rooms/RoomList.js +++ b/src/components/views/rooms/RoomList.js @@ -780,7 +780,7 @@ export default createReactClass({ aria-label={_t("Rooms")} // Firefox sometimes makes this element focusable due to // overflow:scroll;, so force it out of tab order. - tabindex="-1" + tabIndex="-1" onMouseMove={this.onMouseMove} onMouseLeave={this.onMouseLeave} > From 714f9dbfcbfb23a8060ed94af8743c37b2d69f92 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Fri, 13 Mar 2020 15:57:38 +0000 Subject: [PATCH 310/522] Translated using Weblate (Albanian) Currently translated at 99.7% (2145 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 5a6f192809..a5f896bc43 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2177,5 +2177,19 @@ "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s hoqi adresat alternative %(addresses)s për këtë dhomë.", "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s hoqi adresën alternative %(addresses)s për këtë dhomë.", "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s ndryshoi adresat alternative për këtë dhomë.", - "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s ndryshoi adresat kryesore dhe alternative për këtë dhomë." + "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s ndryshoi adresat kryesore dhe alternative për këtë dhomë.", + "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s ndryshoi emrin e dhomës nga %(oldRoomName)s në %(newRoomName)s.", + "%(senderName)s changed the addresses for this room.": "%(senderName)s ndryshoi adresat për këtë dhomë.", + "Support adding custom themes": "Mbulim shtimi temash vetjake", + "Invalid theme schema.": "Skemë e pavlefshme teme.", + "Error downloading theme information.": "Gabim në shkarkim të dhënash teme.", + "Theme added!": "Tema u shtua!", + "Custom theme URL": "URL teme vetjake", + "Add theme": "Shtoni temë", + "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Pati një gabim gjatë përditësimit të adresave alternative të dhomës. Mund të mos lejohet nga shërbyesi pse ndodhi një gabim i përkohshëm.", + "You don't have permission to delete the alias.": "S’keni leje të fshini aliasin.", + "Alternative addresses for this room:": "Adresa alternative për këtë dhomë:", + "This room has no alternative addresses": "Kjo dhomë nuk ka adresa alternative", + "New address (e.g. #foo:domain)": "Adresë e re (p.sh., #foo:domain)", + "Local addresses (unmoderated content)": "Adresa vendore (lëndë e pamoderuar)" } From e927ab6ad4292e56ed5081ee423e66369643739c Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 13 Mar 2020 22:21:34 +0000 Subject: [PATCH 311/522] Move to composer when typing letters with Shift held We already jump to the composer for unshifted typing, but we should also do so with Shift as well. Fixes https://github.com/vector-im/riot-web/issues/12734 --- src/components/structures/LoggedInView.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/structures/LoggedInView.js b/src/components/structures/LoggedInView.js index 20217548b7..d643c82120 100644 --- a/src/components/structures/LoggedInView.js +++ b/src/components/structures/LoggedInView.js @@ -337,13 +337,13 @@ const LoggedInView = createReactClass({ let handled = false; const ctrlCmdOnly = isOnlyCtrlOrCmdKeyEvent(ev); - const hasModifier = ev.altKey || ev.ctrlKey || ev.metaKey || ev.shiftKey || - ev.key === Key.ALT || ev.key === Key.CONTROL || ev.key === Key.META || ev.key === Key.SHIFT; + const hasModifier = ev.altKey || ev.ctrlKey || ev.metaKey || ev.shiftKey; + const isModifier = ev.key === Key.ALT || ev.key === Key.CONTROL || ev.key === Key.META || ev.key === Key.SHIFT; switch (ev.key) { case Key.PAGE_UP: case Key.PAGE_DOWN: - if (!hasModifier) { + if (!hasModifier && !isModifier) { this._onScrollKeyPressed(ev); handled = true; } @@ -384,7 +384,10 @@ const LoggedInView = createReactClass({ if (handled) { ev.stopPropagation(); ev.preventDefault(); - } else if (!hasModifier) { + } else if (!isModifier && !ev.altKey && !ev.ctrlKey && !ev.metaKey) { + // The above condition is crafted to _allow_ characters with Shift + // already pressed (but not the Shift key down itself). + const isClickShortcut = ev.target !== document.body && (ev.key === Key.SPACE || ev.key === Key.ENTER); From 1347d61671e9939ccfd725c93c9da079996a2c85 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 23:22:13 +0000 Subject: [PATCH 312/522] Remove low hanging Gemini consumers Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/groups/GroupMemberInfo.js | 6 +++--- src/components/views/groups/GroupMemberList.js | 6 +++--- src/components/views/groups/GroupRoomInfo.js | 6 +++--- src/components/views/groups/GroupRoomList.js | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/components/views/groups/GroupMemberInfo.js b/src/components/views/groups/GroupMemberInfo.js index e659352b74..f70c769ad7 100644 --- a/src/components/views/groups/GroupMemberInfo.js +++ b/src/components/views/groups/GroupMemberInfo.js @@ -27,6 +27,7 @@ import { GroupMemberType } from '../../../groups'; import GroupStore from '../../../stores/GroupStore'; import AccessibleButton from '../elements/AccessibleButton'; import MatrixClientContext from "../../../contexts/MatrixClientContext"; +import AutoHideScrollbar from "../../structures/AutoHideScrollbar"; export default createReactClass({ displayName: 'GroupMemberInfo', @@ -182,10 +183,9 @@ export default createReactClass({ this.props.groupMember.displayname || this.props.groupMember.userId ); - const GeminiScrollbarWrapper = sdk.getComponent('elements.GeminiScrollbarWrapper'); return (
- + @@ -199,7 +199,7 @@ export default createReactClass({
{ adminTools } - +
); }, diff --git a/src/components/views/groups/GroupMemberList.js b/src/components/views/groups/GroupMemberList.js index 05af70b266..2853e70afa 100644 --- a/src/components/views/groups/GroupMemberList.js +++ b/src/components/views/groups/GroupMemberList.js @@ -26,6 +26,7 @@ import { showGroupInviteDialog } from '../../../GroupAddressPicker'; import AccessibleButton from '../elements/AccessibleButton'; import TintableSvg from '../elements/TintableSvg'; import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases"; +import AutoHideScrollbar from "../../structures/AutoHideScrollbar"; const INITIAL_LOAD_NUM_MEMBERS = 30; @@ -172,7 +173,6 @@ export default createReactClass({ }, render: function() { - const GeminiScrollbarWrapper = sdk.getComponent("elements.GeminiScrollbarWrapper"); if (this.state.fetching || this.state.fetchingInvitedMembers) { const Spinner = sdk.getComponent("elements.Spinner"); return (
@@ -225,10 +225,10 @@ export default createReactClass({ return (
{ inviteButton } - + { joined } { invited } - + { inputBox }
); diff --git a/src/components/views/groups/GroupRoomInfo.js b/src/components/views/groups/GroupRoomInfo.js index 7b9f43f15f..91d84be4d1 100644 --- a/src/components/views/groups/GroupRoomInfo.js +++ b/src/components/views/groups/GroupRoomInfo.js @@ -24,6 +24,7 @@ import * as sdk from '../../../index'; import { _t } from '../../../languageHandler'; import GroupStore from '../../../stores/GroupStore'; import MatrixClientContext from "../../../contexts/MatrixClientContext"; +import AutoHideScrollbar from "../../structures/AutoHideScrollbar"; export default createReactClass({ displayName: 'GroupRoomInfo', @@ -153,7 +154,6 @@ export default createReactClass({ render: function() { const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); const InlineSpinner = sdk.getComponent('elements.InlineSpinner'); - const GeminiScrollbarWrapper = sdk.getComponent("elements.GeminiScrollbarWrapper"); if (this.state.groupRoomRemoveLoading || !this.state.groupRoom) { const Spinner = sdk.getComponent("elements.Spinner"); return
@@ -216,7 +216,7 @@ export default createReactClass({ const groupRoomName = this.state.groupRoom.displayname; return (
- + @@ -231,7 +231,7 @@ export default createReactClass({
{ adminTools } - +
); }, diff --git a/src/components/views/groups/GroupRoomList.js b/src/components/views/groups/GroupRoomList.js index 5fd8c9f31d..dee304e1f6 100644 --- a/src/components/views/groups/GroupRoomList.js +++ b/src/components/views/groups/GroupRoomList.js @@ -22,6 +22,7 @@ import PropTypes from 'prop-types'; import { showGroupAddRoomDialog } from '../../../GroupAddressPicker'; import AccessibleButton from '../elements/AccessibleButton'; import TintableSvg from '../elements/TintableSvg'; +import AutoHideScrollbar from "../../structures/AutoHideScrollbar"; const INITIAL_LOAD_NUM_ROOMS = 30; @@ -150,17 +151,16 @@ export default createReactClass({ placeholder={_t('Filter community rooms')} autoComplete="off" /> ); - const GeminiScrollbarWrapper = sdk.getComponent("elements.GeminiScrollbarWrapper"); const TruncatedList = sdk.getComponent("elements.TruncatedList"); return (
{ inviteButton } - + { this.makeGroupRoomTiles(this.state.searchQuery) } - + { inputBox }
); From a9f414dafed7a00ffab9eec4494367c0ce1c1cc4 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 23:23:23 +0000 Subject: [PATCH 313/522] Remove unused SearchableEntityList.js Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/_components.scss | 1 - .../views/rooms/_SearchableEntityList.scss | 77 -------- src/components/structures/RoomView.js | 15 -- .../views/rooms/SearchableEntityList.js | 186 ------------------ 4 files changed, 279 deletions(-) delete mode 100644 res/css/views/rooms/_SearchableEntityList.scss delete mode 100644 src/components/views/rooms/SearchableEntityList.js diff --git a/res/css/_components.scss b/res/css/_components.scss index bc636eb3c6..68322b9660 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -177,7 +177,6 @@ @import "./views/rooms/_RoomTile.scss"; @import "./views/rooms/_RoomUpgradeWarningBar.scss"; @import "./views/rooms/_SearchBar.scss"; -@import "./views/rooms/_SearchableEntityList.scss"; @import "./views/rooms/_SendMessageComposer.scss"; @import "./views/rooms/_Stickers.scss"; @import "./views/rooms/_TopUnreadMessagesBar.scss"; diff --git a/res/css/views/rooms/_SearchableEntityList.scss b/res/css/views/rooms/_SearchableEntityList.scss deleted file mode 100644 index 37a663123d..0000000000 --- a/res/css/views/rooms/_SearchableEntityList.scss +++ /dev/null @@ -1,77 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -.mx_SearchableEntityList { - display: flex; - - flex-direction: column; -} - -.mx_SearchableEntityList_query { - font-family: $font-family; - border-radius: 3px; - border: 1px solid $input-border-color; - padding: 9px; - color: $primary-fg-color; - background-color: $primary-bg-color; - margin-left: 3px; - font-size: 15px; - margin-bottom: 8px; - width: 189px; -} - -.mx_SearchableEntityList_query::-moz-placeholder { - color: $primary-fg-color; - opacity: 0.5; - font-size: 12px; -} - -.mx_SearchableEntityList_query::-webkit-input-placeholder { - color: $primary-fg-color; - opacity: 0.5; - font-size: 12px; -} - -.mx_SearchableEntityList_listWrapper { - flex: 1; - - overflow-y: auto; -} - -.mx_SearchableEntityList_list { - display: table; - table-layout: fixed; - width: 100%; -} - -.mx_SearchableEntityList_list .mx_EntityTile_chevron { - display: none; -} - -.mx_SearchableEntityList_hrWrapper { - width: 100%; - flex: 0 0 auto; -} - -.mx_SearchableEntityList hr { - height: 1px; - border: 0px; - color: $primary-fg-color; - background-color: $primary-fg-color; - margin-right: 15px; - margin-top: 11px; - margin-bottom: 11px; -} diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 36e30343e4..17a496b037 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -405,21 +405,6 @@ export default createReactClass({ this.onResize(); document.addEventListener("keydown", this.onKeyDown); - - // XXX: EVIL HACK to autofocus inviting on empty rooms. - // We use the setTimeout to avoid racing with focus_composer. - if (this.state.room && - this.state.room.getJoinedMemberCount() == 1 && - this.state.room.getLiveTimeline() && - this.state.room.getLiveTimeline().getEvents() && - this.state.room.getLiveTimeline().getEvents().length <= 6) { - const inviteBox = document.getElementById("mx_SearchableEntityList_query"); - setTimeout(function() { - if (inviteBox) { - inviteBox.focus(); - } - }, 50); - } }, shouldComponentUpdate: function(nextProps, nextState) { diff --git a/src/components/views/rooms/SearchableEntityList.js b/src/components/views/rooms/SearchableEntityList.js deleted file mode 100644 index 807ddbf729..0000000000 --- a/src/components/views/rooms/SearchableEntityList.js +++ /dev/null @@ -1,186 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import React from 'react'; -import PropTypes from 'prop-types'; -import createReactClass from 'create-react-class'; -import * as sdk from "../../../index"; -import { _t } from '../../../languageHandler'; - -// A list capable of displaying entities which conform to the SearchableEntity -// interface which is an object containing getJsx(): Jsx and matches(query: string): boolean -const SearchableEntityList = createReactClass({ - displayName: 'SearchableEntityList', - - propTypes: { - emptyQueryShowsAll: PropTypes.bool, - showInputBox: PropTypes.bool, - onQueryChanged: PropTypes.func, // fn(inputText) - onSubmit: PropTypes.func, // fn(inputText) - entities: PropTypes.array, - truncateAt: PropTypes.number, - }, - - getDefaultProps: function() { - return { - showInputBox: true, - entities: [], - emptyQueryShowsAll: false, - onSubmit: function() {}, - onQueryChanged: function(input) {}, - }; - }, - - getInitialState: function() { - return { - query: "", - focused: false, - truncateAt: this.props.truncateAt, - results: this.getSearchResults("", this.props.entities), - }; - }, - - componentWillReceiveProps: function(newProps) { - // recalculate the search results in case we got new entities - this.setState({ - results: this.getSearchResults(this.state.query, newProps.entities), - }); - }, - - componentWillUnmount: function() { - // pretend the query box was blanked out else filters could still be - // applied to other components which rely on onQueryChanged. - this.props.onQueryChanged(""); - }, - - /** - * Public-facing method to set the input query text to the given input. - * @param {string} input - */ - setQuery: function(input) { - this.setState({ - query: input, - results: this.getSearchResults(input, this.props.entities), - }); - }, - - onQueryChanged: function(ev) { - const q = ev.target.value; - this.setState({ - query: q, - // reset truncation if they back out the entire text - truncateAt: (q.length === 0 ? this.props.truncateAt : this.state.truncateAt), - results: this.getSearchResults(q, this.props.entities), - }, () => { - // invoke the callback AFTER we've flushed the new state. We need to - // do this because onQueryChanged can result in new props being passed - // to this component, which will then try to recalculate the search - // list. If we do this without flushing, we'll recalc with the last - // search term and not the current one! - this.props.onQueryChanged(q); - }); - }, - - onQuerySubmit: function(ev) { - ev.preventDefault(); - this.props.onSubmit(this.state.query); - }, - - getSearchResults: function(query, entities) { - if (!query || query.length === 0) { - return this.props.emptyQueryShowsAll ? entities : []; - } - return entities.filter(function(e) { - return e.matches(query); - }); - }, - - _showAll: function() { - this.setState({ - truncateAt: -1, - }); - }, - - _createOverflowEntity: function(overflowCount, totalCount) { - const EntityTile = sdk.getComponent("rooms.EntityTile"); - const BaseAvatar = sdk.getComponent("avatars.BaseAvatar"); - const text = _t("and %(count)s others...", { count: overflowCount }); - return ( - - } name={text} presenceState="online" suppressOnHover={true} - onClick={this._showAll} /> - ); - }, - - render: function() { - let inputBox; - - if (this.props.showInputBox) { - inputBox = ( -
- { this.setState({ focused: true }); }} - onBlur= {() => { this.setState({ focused: false }); }} - placeholder={_t("Search")} /> -
- ); - } - - let list; - if (this.state.results.length > 1 || this.state.focused) { - if (this.props.truncateAt) { // caller wants list truncated - const TruncatedList = sdk.getComponent("elements.TruncatedList"); - list = ( - - { this.state.results.map((entity) => { - return entity.getJsx(); - }) } - - ); - } else { - list = ( -
- { this.state.results.map((entity) => { - return entity.getJsx(); - }) } -
- ); - } - const GeminiScrollbarWrapper = sdk.getComponent("elements.GeminiScrollbarWrapper"); - list = ( - - { list } - - ); - } - - return ( -
- { inputBox } - { list } - { list ?

: '' } -
- ); - }, -}); - -export default SearchableEntityList; From 30d971b81970215cb3719afc343e3e5e1fa7c8b5 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 23:36:52 +0000 Subject: [PATCH 314/522] migrate MyGroups away from Gemini Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/structures/_MyGroups.scss | 8 +++++--- src/components/structures/MyGroups.js | 6 ++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/res/css/structures/_MyGroups.scss b/res/css/structures/_MyGroups.scss index d25789ab94..9556fd57e3 100644 --- a/res/css/structures/_MyGroups.scss +++ b/res/css/structures/_MyGroups.scss @@ -67,9 +67,6 @@ limitations under the License. } } - - - .mx_MyGroups_headerCard_header { font-weight: bold; margin-bottom: 10px; @@ -100,6 +97,11 @@ limitations under the License. flex-direction: column; } +.mx_MyGroups_content, +.mx_MyGroups_scrollable { + overflow-y: scroll; +} + .mx_MyGroups_placeholder { background-color: $info-plinth-bg-color; color: $info-plinth-fg-color; diff --git a/src/components/structures/MyGroups.js b/src/components/structures/MyGroups.js index b26ab5ff70..b7efa2d00a 100644 --- a/src/components/structures/MyGroups.js +++ b/src/components/structures/MyGroups.js @@ -62,8 +62,6 @@ export default createReactClass({ const Loader = sdk.getComponent("elements.Spinner"); const SimpleRoomHeader = sdk.getComponent('rooms.SimpleRoomHeader'); const GroupTile = sdk.getComponent("groups.GroupTile"); - const GeminiScrollbarWrapper = sdk.getComponent("elements.GeminiScrollbarWrapper"); - let content; let contentHeader; @@ -74,7 +72,7 @@ export default createReactClass({ }); contentHeader = groupNodes.length > 0 ?

{ _t('Your Communities') }

:
; content = groupNodes.length > 0 ? - +

{ _t( @@ -93,7 +91,7 @@ export default createReactClass({

{ groupNodes }
- : +
:
{ _t( "You're not currently a member of any communities.", From c77ba71f895b3d87f42020bcfa2525ffa8b174f5 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 23:39:42 +0000 Subject: [PATCH 315/522] migrate EmbeddedPage away from Gemini Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/EmbeddedPage.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/structures/EmbeddedPage.js b/src/components/structures/EmbeddedPage.js index 6d734c3838..f854dc955f 100644 --- a/src/components/structures/EmbeddedPage.js +++ b/src/components/structures/EmbeddedPage.js @@ -23,11 +23,11 @@ import PropTypes from 'prop-types'; import request from 'browser-request'; import { _t } from '../../languageHandler'; import sanitizeHtml from 'sanitize-html'; -import * as sdk from '../../index'; import dis from '../../dispatcher'; import {MatrixClientPeg} from '../../MatrixClientPeg'; import classnames from 'classnames'; import MatrixClientContext from "../../contexts/MatrixClientContext"; +import AutoHideScrollbar from "./AutoHideScrollbar"; export default class EmbeddedPage extends React.PureComponent { static propTypes = { @@ -117,10 +117,9 @@ export default class EmbeddedPage extends React.PureComponent {
; if (this.props.scrollbar) { - const GeminiScrollbarWrapper = sdk.getComponent("elements.GeminiScrollbarWrapper"); - return + return {content} - ; + ; } else { return
{content} From b68d4583d19bcf0d5e6f3fcda3652a84faf32587 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 23:49:28 +0000 Subject: [PATCH 316/522] migrate UnknownDeviceDialog away from Gemini Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/dialogs/_UnknownDeviceDialog.scss | 1 + src/components/views/dialogs/UnknownDeviceDialog.js | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/res/css/views/dialogs/_UnknownDeviceDialog.scss b/res/css/views/dialogs/_UnknownDeviceDialog.scss index 02e0fb1fe5..4c3bb9bdd3 100644 --- a/res/css/views/dialogs/_UnknownDeviceDialog.scss +++ b/res/css/views/dialogs/_UnknownDeviceDialog.scss @@ -44,6 +44,7 @@ limitations under the License. .mx_UnknownDeviceDialog .mx_Dialog_content { margin-bottom: 24px; + overflow-y: scroll; } .mx_UnknownDeviceDialog_deviceList > li { diff --git a/src/components/views/dialogs/UnknownDeviceDialog.js b/src/components/views/dialogs/UnknownDeviceDialog.js index d58961f964..3d5300fe92 100644 --- a/src/components/views/dialogs/UnknownDeviceDialog.js +++ b/src/components/views/dialogs/UnknownDeviceDialog.js @@ -168,7 +168,7 @@ export default createReactClass({ title={_t('Room contains unknown sessions')} contentId='mx_Dialog_content' > - +

{ _t('"%(RoomName)s" contains sessions that you haven\'t seen before.', {RoomName: this.props.room.name}) }

@@ -176,7 +176,7 @@ export default createReactClass({ { _t("Unknown sessions") }: - +
From 1b933b7bfebd78631b0f80bdf7399006409829e0 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Mar 2020 23:54:13 +0000 Subject: [PATCH 317/522] remove UnknownDeviceDialog gemini specific css Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/dialogs/_UnknownDeviceDialog.scss | 8 -------- 1 file changed, 8 deletions(-) diff --git a/res/css/views/dialogs/_UnknownDeviceDialog.scss b/res/css/views/dialogs/_UnknownDeviceDialog.scss index 4c3bb9bdd3..2b0f8dceca 100644 --- a/res/css/views/dialogs/_UnknownDeviceDialog.scss +++ b/res/css/views/dialogs/_UnknownDeviceDialog.scss @@ -14,14 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -// CSS voodoo to support a gemini-scrollbar for the contents of the dialog -.mx_Dialog_unknownDevice .mx_Dialog { - // ideally we'd shrink the height to fit when needed, but in practice this - // is a pain in the ass. plus might as well make the dialog big given how - // important it is. - height: 100%; -} - .mx_UnknownDeviceDialog { height: 100%; display: flex; From 19421504366ca3714c7a43235f44534bc3fdc2b4 Mon Sep 17 00:00:00 2001 From: Tirifto Date: Fri, 13 Mar 2020 19:36:07 +0000 Subject: [PATCH 318/522] Translated using Weblate (Esperanto) Currently translated at 99.8% (2148 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eo/ --- src/i18n/strings/eo.json | 463 ++++++++++++++++++++++++++++++++------- 1 file changed, 388 insertions(+), 75 deletions(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 9767fb9156..209057e36d 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -4,12 +4,12 @@ "Failed to verify email address: make sure you clicked the link in the email": "Kontrolo de via retpoŝtadreso malsukcesis: certigu, ke vi alklakis la ligilon en la retmesaĝo", "Call Timeout": "Voka tempolimo", "The remote side failed to pick up": "La defora flanko malsukcesis respondi", - "Unable to capture screen": "Ne eblas registri ekranon", + "Unable to capture screen": "Ne povas registri ekranon", "You cannot place a call with yourself.": "Vi ne povas voki vin mem.", "Warning!": "Averto!", "Sign in with": "Saluti per", "Sign in": "Saluti", - "For security, this session has been signed out. Please sign in again.": "Pro sekurecaj kialoj, la seanco finiĝis. Bonvolu resaluti.", + "For security, this session has been signed out. Please sign in again.": "Pro sekurecaj kialoj, la salutaĵo adiaŭiĝis. Bonvolu resaluti.", "Upload Failed": "Alŝuto malsukcesis", "Sun": "Dim", "Mon": "Lun", @@ -54,7 +54,7 @@ "Failed to add the following rooms to %(groupId)s:": "Malsukcesis aldoni jenajn ĉambrojn al %(groupId)s:", "Riot does not have permission to send you notifications - please check your browser settings": "Riot ne havas permeson sciigi vin – bonvolu kontroli la agordojn de via foliumilo", "Riot was not given permission to send notifications - please try again": "Riot ne ricevis permeson sendi sciigojn – bonvolu reprovi", - "Unable to enable Notifications": "Sciigoj ne sendeblas", + "Unable to enable Notifications": "Ne povas ŝalti sciigojn", "This email address was not found": "Tiu ĉi retpoŝtadreso ne troviĝis", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Via retpoŝtareso ŝajne ne ligiĝas al Matrix-identigilo sur tiu ĉi hejmservilo.", "Default": "Norma", @@ -67,7 +67,7 @@ "Failed to invite the following users to the %(roomName)s room:": "Malsukcesis inviti la jenajn uzantojn al la ĉambro %(roomName)s:", "You need to be logged in.": "Vi devas esti salutinta.", "You need to be able to invite users to do that.": "Vi bezonas permeson inviti uzantojn por tio.", - "Unable to create widget.": "Fenestraĵo ne kreeblas.", + "Unable to create widget.": "Ne povas krei fenestraĵon.", "Failed to send request.": "Malsukcesis sendi peton.", "This room is not recognised.": "Ĉi tiu ĉambro ne estas rekonita.", "Power level must be positive integer.": "Nivelo de potenco devas esti entjero pozitiva.", @@ -132,7 +132,7 @@ "Unnamed Room": "Sennoma Ĉambro", "Your browser does not support the required cryptography extensions": "Via foliumilo ne subtenas la bezonatajn ĉifrajn kromprogramojn", "Not a valid Riot keyfile": "Nevalida ŝlosila dosiero de Riot", - "Authentication check failed: incorrect password?": "Aŭtentiga kontrolo malsukcesis: ĉu pro malĝusta pasvorto?", + "Authentication check failed: incorrect password?": "Aŭtentikiga kontrolo malsukcesis: ĉu pro malĝusta pasvorto?", "Failed to join room": "Malsukcesis aliĝi al ĉambro", "Message Pinning": "Fikso de mesaĝoj", "Use compact timeline layout": "Uzi densan okazordan aranĝon", @@ -169,7 +169,7 @@ "Failed to upload profile picture!": "Malsukcesis alŝuti vian profilbildon!", "Upload new:": "Alŝuti novan:", "No display name": "Sen vidiga nomo", - "New passwords don't match": "Novaj pasvortoj ne kongruas", + "New passwords don't match": "Novaj pasvortoj ne akordas", "Passwords can't be empty": "Pasvortoj ne povas esti malplenaj", "Continue": "Daŭrigi", "Export E2E room keys": "Elporti ĝiscele ĉifrajn ŝlosilojn de la ĉambro", @@ -179,7 +179,7 @@ "New Password": "Nova pasvorto", "Confirm password": "Konfirmi pasvorton", "Change Password": "Ŝanĝi pasvorton", - "Authentication": "Aŭtentigo", + "Authentication": "Aŭtentikigo", "Device ID": "Aparata identigilo", "Last seen": "Laste vidita", "Failed to set display name": "Malsukcesis agordi vidigan nomon", @@ -218,7 +218,7 @@ "Unignore": "Reatenti", "Ignore": "Malatenti", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s ŝanĝis la profilbildon de %(roomName)s", - "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Vi estas direktota al ekstera retejo por aŭtentigi vian konton por uzo kun %(integrationsUrl)s. Ĉu vi volas daŭrigi tion?", + "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Vi estas direktota al ekstera retejo por aŭtentikigi vian konton por uzo kun %(integrationsUrl)s. Ĉu vi volas daŭrigi tion?", "Jump to read receipt": "Salti al legokonfirmo", "Mention": "Mencio", "Invite": "Inviti", @@ -354,7 +354,7 @@ "Token incorrect": "Malĝusta ĵetono", "A text message has been sent to %(msisdn)s": "Tekstmesaĝo sendiĝîs al %(msisdn)s", "Please enter the code it contains:": "Bonvolu enigi la enhavatan kodon:", - "Start authentication": "Komenci aŭtentigon", + "Start authentication": "Komenci aŭtentikigon", "Email address": "Retpoŝtadreso", "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Se vi ne enigos retpoŝtadreson, vi ne povos restarigi vian pasvorton. Ĉu vi certas?", "Remove from community": "Forigi de komunumo", @@ -470,20 +470,20 @@ "Unknown error": "Nekonata eraro", "Incorrect password": "Malĝusta pasvorto", "Deactivate Account": "Malaktivigi konton", - "I verify that the keys match": "Mi kontrolas, ke la ŝlosiloj kongruas", + "I verify that the keys match": "Mi kontrolas, ke la ŝlosiloj akordas", "An error has occurred.": "Okazis eraro.", "OK": "Bone", "Start verification": "Komenci kontrolon", "Share without verifying": "Kunhavigi sen kontrolo", "Ignore request": "Malatenti peton", "Encryption key request": "Peto por ĉifra ŝlosilo", - "Unable to restore session": "Seanco ne restaŭreblas", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Se vi antaŭe uzis pli novan version de Riot, via seanco eble ne kongruos kun ĉi tiu versio. Fermu ĉi tiun fenestron kaj revenu al la pli nova versio.", + "Unable to restore session": "Salutaĵo ne rehaveblas", + "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Se vi antaŭe uzis pli novan version de Riot, via salutaĵo eble ne akordos kun ĉi tiu versio. Fermu ĉi tiun fenestron kaj revenu al la pli nova versio.", "Invalid Email Address": "Malvalida retpoŝtadreso", "This doesn't appear to be a valid email address": "Tio ĉi ne ŝajnas esti valida retpoŝtadreso", "Verification Pending": "Atendanta kontrolon", "Please check your email and click on the link it contains. Once this is done, click continue.": "Bonvolu kontroli vian retpoŝton, kaj alklaki la ligilon enhavatan en la sendita mesaĝo. Farinte tion, klaku je 'daŭrigi'.", - "Unable to add email address": "Retpoŝtadreso ne aldoneblas", + "Unable to add email address": "Ne povas aldoni retpoŝtadreson", "Unable to verify email address.": "Retpoŝtadreso ne kontroleblas.", "This will allow you to reset your password and receive notifications.": "Tio ĉi permesos al vi restarigi vian pasvorton kaj ricevi sciigojn.", "Skip": "Preterpasi", @@ -516,8 +516,8 @@ "The user '%(displayName)s' could not be removed from the summary.": "Uzanto '%(displayName)s' ne forigeblas de la superrigardo.", "Failed to upload image": "Malsukcesis alŝuti bildon", "Failed to update community": "Malskucesis ĝisdatigi la komunumon", - "Unable to accept invite": "Invito ne akcepteblas", - "Unable to reject invite": "Invito ne rifuzeblas", + "Unable to accept invite": "Ne povas akcepti inviton", + "Unable to reject invite": "Ne povas rifuzi inviton", "Leave Community": "Forlasi komunumon", "Leave %(groupName)s?": "Ĉu foriri el %(groupName)s?", "Community Settings": "Komunumaj agordoj", @@ -554,7 +554,7 @@ "You seem to be uploading files, are you sure you want to quit?": "Ŝajne vi alŝutas dosierojn nun; ĉu vi tamen volas foriri?", "You seem to be in a call, are you sure you want to quit?": "Ŝajne vi vokas nun; ĉu vi tamen volas foriri?", "Search failed": "Serĉo malsukcesis", - "Server may be unavailable, overloaded, or search timed out :(": "Aŭ la servilo estas neatingebla aŭ troŝargita, aŭ la serĉo eltempiĝis :(", + "Server may be unavailable, overloaded, or search timed out :(": "Aŭ la servilo estas neatingebla aŭ troŝarĝita, aŭ la serĉo eltempiĝis :(", "No more results": "Neniuj pliaj rezultoj", "Unknown room %(roomId)s": "Nekonata ĉambro %(roomId)s", "Room": "Ĉambro", @@ -574,7 +574,7 @@ "Dark theme": "Malhela haŭto", "Sign out": "Adiaŭi", "Success": "Sukceso", - "Unable to remove contact information": "Kontaktaj informoj ne forigeblas", + "Unable to remove contact information": "Ne povas forigi kontaktajn informojn", "": "", "Import E2E room keys": "Enporti ĝiscele ĉifrajn ĉambrajn ŝlosilojn", "Cryptography": "Kriptografio", @@ -604,7 +604,7 @@ "Failed to send email": "Malsukcesis sendi retleteron", "The email address linked to your account must be entered.": "Vi devas enigi retpoŝtadreson ligitan al via konto.", "A new password must be entered.": "Vi devas enigi novan pasvorton.", - "New passwords must match each other.": "Novaj pasvortoj devas kongrui.", + "New passwords must match each other.": "Novaj pasvortoj devas akordi.", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Retletero sendiĝis al %(emailAddress)s. Irinte al la ligilo en tiu mesaĝo, klaku sube.", "I have verified my email address": "Mi kontrolis mian retpoŝtadreson", "Return to login screen": "Reiri al saluta paĝo", @@ -614,11 +614,11 @@ "This homeserver doesn't offer any login flows which are supported by this client.": "Tiu ĉi hejmservilo ne proponas salutajn fluojn subtenatajn de tiu ĉi kliento.", "Error: Problem communicating with the given homeserver.": "Eraro: Estas problemo en komunikado kun la hejmservilo.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Hejmservilo ne alkonekteblas per HTTP kun HTTPS URL en via adresbreto. Aŭ uzu HTTPS aŭ ŝaltu malsekurajn skriptojn.", - "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Ne eblas konekti al hejmservilo – bonvolu kontroli vian konekton, certigi ke la SSL-atestilo de via hejmservilo estas fidata, kaj ke neniu foliumila kromprogramo baras petojn.", + "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Ne eblas konekti al hejmservilo – bonvolu kontroli vian konekton, certigi ke la SSL-atestilo de via hejmservilo estas fidata, kaj ke neniu foliumila kromprogramo blokas petojn.", "Failed to fetch avatar URL": "Malsukcesis venigi adreson de profilbildo", "Set a display name:": "Agordi vidigan nomon:", "Upload an avatar:": "Alŝuti profilbildon:", - "This server does not support authentication with a phone number.": "Ĉi tiu servilo ne subtenas aŭtentigon per telefona numero.", + "This server does not support authentication with a phone number.": "Ĉi tiu servilo ne subtenas aŭtentikigon per telefona numero.", "Displays action": "Montras agon", "Bans user with given id": "Forbaras uzanton kun la donita identigilo", "Define the power level of a user": "Difini la potencan nivelon de uzanto", @@ -647,10 +647,10 @@ "Algorithm": "Algoritmo", "unencrypted": "neĉifritaj", "Decryption error": "Malĉifra eraro", - "Session ID": "Seanca identigilo", + "Session ID": "Identigilo de salutaĵo", "End-to-end encryption information": "Informoj pri tutvoja ĉifrado", "Event information": "Informoj pri okazaĵo", - "Passphrases must match": "Pasfrazoj devas kongrui", + "Passphrases must match": "Pasfrazoj devas akordi", "Passphrase must not be empty": "Pasfrazoj maldevas esti malplenaj", "Export room keys": "Elporti ĉambrajn ŝlosilojn", "This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Tio ĉi permesos al vi elporti al loka dosiero ŝlosilojn por la mesaĝoj ricevitaj en ĉifritaj ĉambroj. Poste vi povos enporti la dosieron en alian klienton de Matrix, por povigi ĝin malĉifri tiujn mesaĝojn.", @@ -682,7 +682,7 @@ "The platform you're on": "Via platformo", "Which officially provided instance you are using, if any": "Kiun oficiale disponeblan nodon vi uzas, se iun ajn", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Ĉu vi uzas la riĉtekstan reĝimon de la riĉteksta redaktilo aŭ ne", - "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Kiam ĉi tiu paĝo enhavas identigeblajn informojn, ekzemple ĉambron, uzantan aŭ grupan identigilon, ili estas formetataj antaŭ ol sendado al la servilo.", + "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Kiam ĉi tiu paĝo enhavas identigeblajn informojn, ekzemple ĉambron, uzantulan aŭ grupan identigilon, ili estas formetataj antaŭ sendado al la servilo.", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s", "Failed to add tag %(tagName)s to room": "Malsukcesis aldoni etikedon %(tagName)s al ĉambro", "Submit debug logs": "Sendi sencimigan protokolon", @@ -751,7 +751,7 @@ "Direct Chat": "Rekta babilo", "The server may be unavailable or overloaded": "La servilo povas esti nedisponebla aŭ troŝarĝita", "Reject": "Rifuzi", - "Failed to set Direct Message status of room": "Malsukcesis agordi staton de rekta mesaĝo al la ĉambro", + "Failed to set Direct Message status of room": "Malsukcesis agordi staton de rekteco al la ĉambro", "Monday": "Lundo", "Remove from Directory": "Forigi de ujo", "Enable them now": "Ŝalti ilin nun", @@ -762,7 +762,7 @@ "Invite to this room": "Inviti al ĉi tiu ĉambro", "Wednesday": "Merkredo", "You cannot delete this message. (%(code)s)": "Vi ne povas forigi tiun ĉi mesaĝon. (%(code)s)", - "Quote": "Citi", + "Quote": "Citaĵo", "Send logs": "Sendi protokolojn", "All messages": "Ĉiuj mesaĝoj", "Call invitation": "Invito al voko", @@ -775,8 +775,8 @@ "Keywords": "Ŝlosilvortoj", "Can't update user notification settings": "Agordoj de sciigoj al uzanto ne ĝisdatigeblas", "Notify for all other messages/rooms": "Sciigu min por ĉiuj aliaj mesaĝoj/ĉambroj", - "Unable to look up room ID from server": "Ĉambra identigilo ne akireblas de la servilo", - "Couldn't find a matching Matrix room": "Malsukcesis trovi kongruan ĉambron en Matrix", + "Unable to look up room ID from server": "Ne povas akiri ĉambran identigilon de la servilo", + "Couldn't find a matching Matrix room": "Malsukcesis trovi akordan ĉambron en Matrix", "All Rooms": "Ĉiuj ĉambroj", "Thursday": "Ĵaŭdo", "Forward Message": "Plusendi mesaĝon", @@ -785,7 +785,7 @@ "Reply": "Respondi", "Show message in desktop notification": "Montradi mesaĝojn en labortablaj sciigoj", "Unhide Preview": "Malkaŝi antaŭrigardon", - "Unable to join network": "Malsukcesis konektiĝi al la reto", + "Unable to join network": "Ne povas konektiĝi al la reto", "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Vi eble agordis ilin en alia kliento. Vi ne povas agordi ilin en Riot, sed ili ankoraŭ validas", "Sorry, your browser is not able to run Riot.": "Pardonon, via foliumilo ne kapablas funkciigi klienton Riot.", "Uploaded on %(date)s by %(user)s": "Alŝutita je %(date)s de %(user)s", @@ -793,7 +793,7 @@ "Yesterday": "Hieraŭ", "Error encountered (%(errorDetail)s).": "Okazis eraro (%(errorDetail)s).", "Low Priority": "Malalta prioritato", - "Unable to fetch notification target list": "Malsukcesis akiri la liston de celoj por sciigoj", + "Unable to fetch notification target list": "Ne povas akiri la liston de celoj por sciigoj", "Set Password": "Agordi pasvorton", "Off": "For", "Riot does not know how to join a room on this network": "Riot ne scias aliĝi al ĉambroj en tiu ĉi reto", @@ -820,12 +820,12 @@ "Every page you use in the app": "Ĉiu paĝo kiun vi uzas en la aplikaĵo", "e.g. ": "ekz. ", "Your User Agent": "Via klienta aplikaĵo", - "Your device resolution": "La distingo de via aparato", + "Your device resolution": "La distingumo de via aparato", "Call in Progress": "Voko farata", "A call is already in progress!": "Voko estas jam farata!", "Always show encryption icons": "Ĉiam montri bildetojn de ĉifrado", "Send analytics data": "Sendi statistikajn datumojn", - "Key request sent.": "Demando de ŝlosilo sendita.", + "Key request sent.": "Peto de ŝlosilo sendita.", "Permission Required": "Necesas permeso", "Registration Required": "Necesas registriĝo", "You need to register to do this. Would you like to register now?": "Por fari ĉi tion, vi bezonas registriĝi. Ĉu vi volas registriĝi nun?", @@ -839,7 +839,7 @@ "%(senderName)s removed the main address for this room.": "%(senderName)s forigis la ĉefan adreson de la ĉambro.", "Please contact your service administrator to continue using the service.": "Bonvolu kontakti administranton de la servo por daŭre uzadi la servon.", "A call is currently being placed!": "Alia voko nun dumas!", - "Unable to load! Check your network connectivity and try again.": "Ne eblas ŝargi! Kontrolu vian retan konekton kaj reprovu.", + "Unable to load! Check your network connectivity and try again.": "Ne eblas enlegi! Kontrolu vian retan konekton kaj reprovu.", "Failed to invite users to the room:": "Malsukcesis inviti uzantojn al la ĉambro:", "Opens the Developer Tools dialog": "Maflermas evoluigistan interagujon", "This homeserver has hit its Monthly Active User limit.": "Tiu ĉi hejmservilo atingis sian monatan limon de aktivaj uzantoj.", @@ -965,7 +965,7 @@ "For help with using Riot, click here.": "Por helpo kun uzo de Riot, alklaku ĉi tie.", "For help with using Riot, click here or start a chat with our bot using the button below.": "Por helpo kun uzo de Riot, alklaku ĉi tie aŭ komencu babilon kun nia roboto uzante la butonon sube.", "Chat with Riot Bot": "Babilu kun la roboto Riot Bot", - "Help & About": "Helpo & Pri", + "Help & About": "Helpo kaj Prio", "Bug reporting": "Cim-raportado", "FAQ": "Oftaj demandoj", "Versions": "Versioj", @@ -1047,9 +1047,9 @@ "Identity Server URL": "URL de identiga servilo", "Free": "Senpaga", "Other": "Alia", - "Couldn't load page": "Ne povis ŝargi paĝon", - "Unable to join community": "Ne eblas aliĝi al komunumo", - "Unable to leave community": "Ne eblas forlasi komunumon", + "Couldn't load page": "Ne povis enlegi paĝon", + "Unable to join community": "Ne povas aliĝi al komunumo", + "Unable to leave community": "Ne povas forlasi komunumon", "Join this community": "Aliĝi al ĉi tiu komunumo", "Leave this community": "Forlasi ĉi tiun komunumon", "Everyone": "Ĉiuj", @@ -1058,7 +1058,7 @@ "%(count)s of your messages have not been sent.|one": "Via mesaĝo ne sendiĝis.", "Clear filter": "Vakigi filtrilon", "Guest": "Gasto", - "Could not load user profile": "Ne povis ŝargi uzantan profilon", + "Could not load user profile": "Ne povis enlegi profilon de uzanto", "Your Matrix account on %(serverName)s": "Via Matrix-konto sur %(serverName)s", "A verification email will be sent to your inbox to confirm setting your new password.": "Kontrola retpoŝtmesaĝo estos sendita al via enirkesto por kontroli agordadon de via nova pasvorto.", "Sign in instead": "Anstataŭe saluti", @@ -1070,8 +1070,8 @@ "Great! This passphrase looks strong enough.": "Bonege! Ĉi tiu pasfrazo ŝajnas sufiĉe forta.", "Keep going...": "Daŭrigu…", "Enter a passphrase...": "Enigu pasfrazon…", - "That matches!": "Tio kongruas!", - "That doesn't match.": "Tio ne kongruas.", + "That matches!": "Tio akordas!", + "That doesn't match.": "Tio ne akordas.", "Repeat your passphrase...": "Ripetu vian pasfrazon...", "Download": "Elŝuti", "Success!": "Sukceso!", @@ -1276,7 +1276,7 @@ "A widget located at %(widgetUrl)s would like to verify your identity. By allowing this, the widget will be able to verify your user ID, but not perform actions as you.": "Fenestraĵo de %(widgetUrl)s volas kontroli vian identecon. Se vi permesos tion, ĝi povos kontroli vian identigilon de uzanto, sed ne agi per vi.", "Remember my selection for this widget": "Memoru mian elekton por tiu ĉi fenestraĵo", "Deny": "Rifuzi", - "Unable to load backup status": "Ne eblas legi staton de savkopio", + "Unable to load backup status": "Ne povas legi staton de savkopio", "Collapse Reply Thread": "Maletendi respondan fadenon", "This homeserver would like to make sure you are not a robot.": "Ĉi tiu hejmservilo volas certigi, ke vi ne estas roboto.", "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Vi povas uzi proprajn servilajn elektojn por saluti aliajn servilojn de Matrix per alia hejmservila URL. Tio ebligos uzi ĉi tiun aplikaĵon kun jama Matrix-konto en alia hejmservilo.", @@ -1319,7 +1319,7 @@ "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Ĉu vi uzas la funkcion « spuroj » (profilbildoj super la listo de ĉambroj)", "Adds a custom widget by URL to the room": "Aldonas propran fenestraĵon al la ĉambro per URL", "You cannot modify widgets in this room.": "Vi ne rajtas modifi fenestraĵojn en ĉi tiu ĉambro.", - "Forces the current outbound group session in an encrypted room to be discarded": "Devigas la aktualan eliran grupan kunsidon en ĉifrita ĉambro forĵetiĝi", + "Forces the current outbound group session in an encrypted room to be discarded": "Devigas la aktualan eliran grupan salutaĵon en ĉifrita ĉambro forĵetiĝi", "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s ŝaltis etikedojn por %(groups)s en ĉi tiu ĉambro.", "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s malŝaltis etikedojn por %(groups)s en ĉi tiu ĉambro.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s ŝaltis etikedojn por %(newGroups)s kaj malŝaltis etikedojn por %(oldGroups)s en ĉi tiu ĉambro.", @@ -1401,11 +1401,11 @@ "Community IDs cannot be empty.": "Identigilo de komunumo ne estu malplena.", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Por eviti perdon de via babila historio, vi devas elporti la ŝlosilojn de viaj ĉambroj antaŭ adiaŭo. Por tio vi bezonos reveni al la pli nova versio de Riot", "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Vi antaŭe uzis pli novan version de Riot je %(host)s. Por ree uzi ĉi tiun version kun ĉifrado, vi devos adiaŭi kaj resaluti. ", - "Incompatible Database": "Nekongrua datumbazo", + "Incompatible Database": "Neakorda datumbazo", "View Servers in Room": "Montri servilojn en ĉambro", - "You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "Vi antaŭe uzis Riot-on je %(host)s kun ŝaltita malfrua enlegado de anoj. En ĉi tiu versio, malfrua enlegado estas malŝaltita. Ĉar la loka kaŝmemoro de ambaŭ versioj ne kongruas, Riot bezonas respeguli vian konton.", + "You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "Vi antaŭe uzis Riot-on je %(host)s kun ŝaltita malfrua enlegado de anoj. En ĉi tiu versio, malfrua enlegado estas malŝaltita. Ĉar la loka kaŝmemoro de ambaŭ versioj ne akordas, Riot bezonas respeguli vian konton.", "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Se la alia versio de Riot ankoraŭ estas malfermita en alia langeto, bonvolu tiun fermi, ĉar uzado de Riot je la sama gastiganto, kun malfrua enlegado samtempe ŝaltita kaj malŝaltita, kaŭzos problemojn.", - "Incompatible local cache": "Nekongrua loka kaŝmemoro", + "Incompatible local cache": "Neakorda loka kaŝmemoro", "Clear cache and resync": "Vakigi kaŝmemoron kaj respeguli", "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot nun uzas 3–5-oble malpli da memoro, ĉar ĝi enlegas informojn pri aliaj uzantoj nur tiam, kiam ĝi bezonas. Bonvolu atendi ĝis ni respegulos la servilon!", "You'll lose access to your encrypted messages": "Vi perdos aliron al viaj ĉifritaj mesaĝoj", @@ -1416,18 +1416,18 @@ "To help avoid duplicate issues, please view existing issues first (and add a +1) or create a new issue if you can't find it.": "Por eviti duoblajn raportojn, bonvolu unue rigardi jamajn raportojn (kaj meti +1) aŭ raporti novan problemon se vi neniun trovos.", "Report bugs & give feedback": "Raporti erarojn kaj sendi prikomentojn", "Clear Storage and Sign Out": "Vakigi memoron kaj adiaŭi", - "We encountered an error trying to restore your previous session.": "Ni renkontis eraron provante rehavi vian antaŭan kunsidon.", + "We encountered an error trying to restore your previous session.": "Ni renkontis eraron provante rehavi vian antaŭan salutaĵon.", "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Vakigo de la memoro de via foliumilo eble korektos la problemon, sed adiaŭigos vin, kaj malebligos legadon de historio de ĉifritaj babiloj.", - "Missing session data": "Mankas kunsidaj datumoj", - "Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Iuj kunsidaj datumoj, inkluzive viajn ĉifrajn ŝlosilojn, mankas. Por tion korekti, resalutu, kaj rehavu la ŝlosilojn el savkopio.", + "Missing session data": "Mankas datumoj de salutaĵo", + "Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Iuj datumoj de salutaĵo, inkluzive viajn ĉifrajn ŝlosilojn, mankas. Por tion korekti, resalutu, kaj rehavu la ŝlosilojn el savkopio.", "Your browser likely removed this data when running low on disk space.": "Via foliumilo probable forigos ĉi tiujn datumojn kiam al ĝi mankos spaco sur disko.", "Recovery Key Mismatch": "Malakordo de rehava ŝlosilo", "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Savkopio ne povas esti malĉifrita per ĉi tiu ŝlosilo: bonvolu kontroli, ke vi enigis la ĝustan rehavan ŝlosilon.", "Incorrect Recovery Passphrase": "Malĝusta rehava pasfrazo", "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "Savkopio ne sukcesis malĉifriĝi per ĉi tiu pasfrazo: bonvolu kontroli, ĉu vi enigis la ĝustan rehavan pasfrazon.", "Unable to restore backup": "Ne povas rehavi savkopion", - "Failed to decrypt %(failedCount)s sessions!": "Malsukcesis malĉifri%(failedCount)s kunsidojn!", - "Restored %(sessionCount)s session keys": "Rehavis %(sessionCount)s kunsidajn ŝlosilojn", + "Failed to decrypt %(failedCount)s sessions!": "Malsukcesis malĉifri%(failedCount)s salutaĵojn!", + "Restored %(sessionCount)s session keys": "Rehavis %(sessionCount)s ŝlosilojn de salutaĵo", "Enter Recovery Passphrase": "Enigu rehavan pasfrazon", "Warning: you should only set up key backup from a trusted computer.": "Averto: vi agordu ŝlosilan savkopion nur per fidata komputilo.", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Aliru vian sekuran mesaĝan historion kaj agordu sekuran mesaĝadon per enigo de via rehava pasfrazo.", @@ -1439,7 +1439,7 @@ "Resend %(unsentCount)s reaction(s)": "Resendi %(unsentCount)s reago(j)n", "Resend removal": "Resendi forigon", "Share Permalink": "Kunhavi daŭran ligilon", - "Passwords don't match": "Pasvortoj ne kongruas", + "Passwords don't match": "Pasvortoj ne akordas", "Other users can invite you to rooms using your contact details": "Aliaj uzantoj povas inviti vin al ĉambroj per viaj kontaktaj detaloj", "Enter phone number (required on this homeserver)": "Enigu telefonnumeron (bezonata sur ĉi tiu hejmservilo)", "Doesn't look like a valid phone number": "Ne ŝajnas esti valida telefonnumero", @@ -1473,7 +1473,7 @@ "If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Se vi ne forigis la rehavan metodon, eble atakanto provas aliri vian konton. Vi tuj ŝanĝu la pasvorton de via konto, kaj agordu novan rehavan metodon en la agordoj.", "Use a longer keyboard pattern with more turns": "Uzu pli longan tekston kun plia varieco", "Unable to load key backup status": "Ne povas enlegi staton de ŝlosila savkopio", - "Reset": "Reagordi", + "Reset": "Restarigi", "Demote yourself?": "Ĉu malrangaltigi vin mem?", "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Vi ne povos malfari tiun ŝanĝon, ĉar vi malrangaltigas vin mem; se vi estas la lasta povohava uzanto en la ĉambro, estos neeble vian povon rehavi.", "Demote": "Malrangaltigi", @@ -1486,8 +1486,8 @@ "Invalid identity server discovery response": "Nevalida eltrova respondo de identiga servilo", "Identity server URL does not appear to be a valid identity server": "URL por identiga servilo ŝajne ne ligas al valida identiga servilo", "Sign in with single sign-on": "Salutu per ununura saluto", - "Failed to re-authenticate due to a homeserver problem": "Malsukcesis reaŭtentigi pro hejmservila problemo", - "Failed to re-authenticate": "Malsukcesis reaŭtentigi", + "Failed to re-authenticate due to a homeserver problem": "Malsukcesis reaŭtentikigi pro hejmservila problemo", + "Failed to re-authenticate": "Malsukcesis reaŭtentikigi", "Enter your password to sign in and regain access to your account.": "Enigu vian pasvorton por saluti kaj rehavi aliron al via konto.", "Sign in and regain access to your account.": "Saluti kaj rehavi aliron al via konto.", "You cannot sign in to your account. Please contact your homeserver admin for more information.": "Vi ne povas saluti per via konto. Bonvolu kontakti administranton de via hejmservilo por akiri pliajn informojn.", @@ -1680,8 +1680,8 @@ "Please provide a room alias": "Bonvolu doni kromnomon de ĉambro", "This alias is available to use": "Ĉi tiu kromnomo estas disponebla", "This alias is already in use": "Ĉi tiu kromnomo jam estas uzata", - "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Uzu identigan servilon por inviti per retpoŝto. Uzu la norman (%(defaultIdentityServerName)s) aŭ mastrumu per Agordoj.", - "Use an identity server to invite by email. Manage in Settings.": "Uzu identigan servilon por inviti per retpoŝto. Mastrumu per Agordoj.", + "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Uzu identigan servilon por inviti per retpoŝto. Uzu la norman (%(defaultIdentityServerName)s) aŭ administru per Agordoj.", + "Use an identity server to invite by email. Manage in Settings.": "Uzu identigan servilon por inviti per retpoŝto. Administru per Agordoj.", "Close dialog": "Fermi interagujon", "Please enter a name for the room": "Bonvolu enigi nomon por la ĉambro", "Set a room alias to easily share your room with other people.": "Agordu kromnomon de la ĉambro por facile ĝin kunhavigi al aliaj homoj.", @@ -1724,7 +1724,7 @@ "Try out new ways to ignore people (experimental)": "Elprovi novajn manierojn malatenti homojn (eksperimente)", "Match system theme": "Similiĝi la sisteman haŭton", "My Ban List": "Mia listo de forbaroj", - "This is your list of users/servers you have blocked - don't leave the room!": "Ĉi tio estas la listo de uzantoj/serviloj, kiujn vi forbaris – ne eliru el la ĉambro!", + "This is your list of users/servers you have blocked - don't leave the room!": "Ĉi tio estas la listo de uzantoj/serviloj, kiujn vi blokis – ne eliru el la ĉambro!", "Decline (%(counter)s)": "Malakcepti (%(counter)s)", "Clear notifications": "Vakigi sciigojn", "Error subscribing to list": "Eraris abono al listo", @@ -1776,7 +1776,7 @@ "Set up encryption": "Agordi ĉifradon", "Upgrade": "Gradaltigi", "Cannot connect to integration manager": "Ne povas konektiĝi al kunigilo", - "The integration manager is offline or it cannot reach your homeserver.": "La kunigilo estas eksterreta aŭ ne povas atingi vian hejmservilon", + "The integration manager is offline or it cannot reach your homeserver.": "La kunigilo estas eksterreta aŭ ne povas atingi vian hejmservilon.", "Backup has a valid signature from this user": "Savkopio havas validan subskribon de ĉi tiu uzanto", "Backup has a invalid signature from this user": "Savkopio havas nevalidan subskribon de ĉi tiu uzanto", "This room is end-to-end encrypted": "Ĉi tiu ĉambro uzas tutvojan ĉifradon", @@ -1785,7 +1785,7 @@ "Unencrypted": "Neĉifrita", "Send a reply…": "Sendi respondon…", "Send a message…": "Sendi mesaĝon…", - "Direct Messages": "Rektaj mesaĝoj", + "Direct Messages": "Rektaj ĉambroj", " wants to chat": " volas babili", "Start chatting": "Ekbabili", "Reject & Ignore user": "Rifuzi kaj malatenti uzanton", @@ -1797,7 +1797,7 @@ "Start Verification": "Komenci kontrolon", "Trusted": "Fidata", "Not trusted": "Nefidata", - "Direct message": "Rekta mesaĝo", + "Direct message": "Rekta ĉambro", "Security": "Sekureco", "Reactions": "Reagoj", "More options": "Pliaj elektebloj", @@ -1819,36 +1819,36 @@ "The version of Riot": "La versio de Riot", "Whether you're using Riot on a device where touch is the primary input mechanism": "Ĉu vi uzas Rioton per aparato, kies ĉefa enigilo estas tuŝado", "The information being sent to us to help make Riot better includes:": "La informoj sendataj al ni por plibonigi Rioton inkluzivas:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Nekonataj kunsidoj enas la ĉambron; se vi daŭrigos ne kontrolinte ilin, iu eble povos subaŭskulti vian vokon.", + "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Nekonataj salutaĵoj ĉeestas la ĉambron; se vi daŭrigos ne kontrolinte ilin, iu povos subaŭskulti vian vokon.", "If you cancel now, you won't complete verifying the other user.": "Se vi nuligos nun, vi ne finos kontrolon de la alia uzanto.", - "If you cancel now, you won't complete verifying your other session.": "Se vi nuligos nun, vi ne finos kontrolon de via alia kunsido.", + "If you cancel now, you won't complete verifying your other session.": "Se vi nuligos nun, vi ne finos kontrolon de via alia salutaĵo.", "Cancel entering passphrase?": "Ĉu nuligi enigon de pasfrazo?", "Setting up keys": "Agordo de klavoj", - "Verify this session": "Kontroli ĉi tiun kunsidon", + "Verify this session": "Kontroli ĉi tiun salutaĵon", "Encryption upgrade available": "Ĝisdatigo de ĉifrado haveblas", - "Unverified session": "Nekontrolita kunsido", + "Unverified session": "Nekontrolita salutaĵo", "Sign In or Create Account": "Salutu aŭ kreu konton", "Use your account or create a new one to continue.": "Por daŭrigi, uzu vian konton aŭ kreu novan.", "Create Account": "Krei konton", "Error upgrading room": "Eraris ĝisdatigo de la ĉambro", "Double check that your server supports the room version chosen and try again.": "Bone kontrolu, ĉu via servilo subtenas la elektitan version de ĉambro, kaj reprovu.", - "Verifies a user, session, and pubkey tuple": "Kontrolas opon de uzanto, kunsido, kaj publika ŝlosilo.", - "Unknown (user, session) pair:": "Nekonata (uzanto, kunsido) duopo:", + "Verifies a user, session, and pubkey tuple": "Kontrolas opon de uzanto, salutaĵo, kaj publika ŝlosilo", + "Unknown (user, session) pair:": "Nekonata duopo (uzanto, salutaĵo):", "Session already verified!": "Kunsido jam estas kontrolita!", - "WARNING: Session already verified, but keys do NOT MATCH!": "AVERTO: Kunsido jam estas kontrolita, sed la ŝlosiloj NE AKORDAS!", + "WARNING: Session already verified, but keys do NOT MATCH!": "AVERTO: Salutaĵo jam estas kontrolita, sed la ŝlosiloj NE AKORDAS!", "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "AVERTO: MALSUKCESIS KONTROLO DE ŜLOSILOJ! La subskriba ŝlosilo de %(userId)s kaj session %(deviceId)s estas «%(fprint)s», kiu ne akordas la donitan ŝlosilon «%(fingerprint)s». Tio povus signifi, ke via komunikado estas spionata!", - "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "La subskriba ŝlosilo, kiun vi donis, akordas la subskribas ŝlosilon, kinu vi ricevis de la seanco %(deviceId)s de la uzanto %(userId)s. Kunsido estis markita kontrolita.", + "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "La subskriba ŝlosilo, kiun vi donis, akordas la subskribas ŝlosilon, kinu vi ricevis de la salutaĵo %(deviceId)s de la uzanto %(userId)s. Salutaĵo estis markita kontrolita.", "Displays information about a user": "Montras informojn pri uzanto", "The message you are trying to send is too large.": "La mesaĝo, kiun vi provas sendi, estas tro granda.", "Show typing notifications": "Montri sciigojn pri tajpado", - "Never send encrypted messages to unverified sessions from this session": "Neniam sendi ĉifritajn mesaĝojn al nekontrolitaj kunsidoj de ĉi tiu kunsido", - "Never send encrypted messages to unverified sessions in this room from this session": "Neniam sendi ĉifritajn mesaĝojn al nekontrolitaj kunsidoj en ĉi tiu ĉambro de ĉi tiu kunsido", + "Never send encrypted messages to unverified sessions from this session": "Neniam sendi ĉifritajn mesaĝojn al nekontrolitaj salutaĵoj de ĉi tiu salutaĵo", + "Never send encrypted messages to unverified sessions in this room from this session": "Neniam sendi ĉifritajn mesaĝojn al nekontrolitaj salutaĵoj en ĉi tiu ĉambro de ĉi tiu salutaĵo", "Order rooms by name": "Ordigi ĉambrojn laŭ nomo", "Show rooms with unread notifications first": "Montri ĉambrojn kun nelegitaj sciigoj unue", "Show shortcuts to recently viewed rooms above the room list": "Montri tujirilojn al freŝe rigarditaj ĉambroj super la listo de ĉambroj", "Enable message search in encrypted rooms": "Ŝalti serĉon de mesaĝoj en ĉifritaj ĉambroj", "How fast should messages be downloaded.": "Kiel rapide elŝuti mesaĝojn.", - "Verify this session by completing one of the following:": "Kontrolu la kunsidon per plenumado de unu el la jenaj:", + "Verify this session by completing one of the following:": "Kontrolu la salutaĵon per plenumado de unu el la jenaj:", "Scan this unique code": "Skanu ĉi tiun unikan kodon", "or": "aŭ", "Compare unique emoji": "Komparu unikajn bildsignojn", @@ -1865,10 +1865,323 @@ "Show less": "Montri pli", "Show more": "Montri malpli", "Help": "Helpo", - "Message not sent due to unknown sessions being present": "Mesaĝo ne sendiĝis pro ĉeesto de nekonataj kunsidoj", - "Show sessions, send anyway or cancel.": "Montri kunsidojn, tamen sendinuligi.", + "Message not sent due to unknown sessions being present": "Mesaĝo ne sendiĝis pro ĉeesto de nekonataj salutaĵoj", + "Show sessions, send anyway or cancel.": "Montri salutaĵojn, tamen sendinuligi.", "Complete security": "Plena sekureco", - "Verify this session to grant it access to encrypted messages.": "Kontrolu ĉi tiun kunsidon por doni al ĝi aliron al la ĉifritaj mesaĝoj.", - "Session verified": "Kunsido kontrolita", - "Copy": "Kopii" + "Verify this session to grant it access to encrypted messages.": "Kontrolu ĉi tiun salutaĵon por doni al ĝi aliron al la ĉifritaj mesaĝoj.", + "Session verified": "Salutaĵo kontroliĝis", + "Copy": "Kopii", + "Your user agent": "Via klienta aplikaĵo", + "If you cancel now, you won't complete your secret storage operation.": "Se vi nuligos nun, vi ne finos la operacion de la sekreta deponejo.", + "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s ŝanĝis nomon de la ĉambro de %(oldRoomName)s al %(newRoomName)s.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s aldonis la alternativajn adresojn %(addresses)s por ĉi tiu ĉambro.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s aldonis alternativan adreson %(addresses)s por ĉi tiu ĉambro.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s forigis la alternativajn adresojn %(addresses)s por ĉi tiu ĉambro.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s forigis alternativan adreson %(addresses)s por ĉi tiu ĉambro.", + "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s ŝanĝis la alternativan adreson de ĉi tiu ĉambro.", + "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s ŝanĝis la ĉefan kaj alternativan adresojn de ĉi tiu ĉambro.", + "%(senderName)s changed the addresses for this room.": "%(senderName)s ŝanĝis la adresojn de ĉi tiu ĉambro.", + "%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s forigis la regulon forbarantan uzantojn, kiuj akordas kun %(glob)s", + "%(senderName)s removed the rule banning rooms matching %(glob)s": "%(senderName)s forigis la regulon forbarantan ĉambrojn, kiuj akordas kun %(glob)s", + "%(senderName)s removed the rule banning servers matching %(glob)s": "%(senderName)s forigis la regulon forbarantan servilojn, kiuj akordas kun %(glob)s", + "%(senderName)s removed a ban rule matching %(glob)s": "%(senderName)s forigis forbaran regulon, kiu akordas kun %(glob)s", + "%(senderName)s updated an invalid ban rule": "%(senderName)s ĝisdatigis nevalidan forbaran regulon", + "%(senderName)s updated the rule banning users matching %(glob)s for %(reason)s": "%(senderName)s ĝisdatigis la regulon forbarantan uzantojn, kiuj akordas kun %(glob)s, pro %(reason)s", + "%(senderName)s updated the rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s ĝisdatigis la regulon forbarantan ĉambrojn, kiuj akordas kun %(glob)s, pro %(reason)s", + "%(senderName)s updated the rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s ĝisdatigis la regulon forbarantan servilojn, kiuj akordas kun %(glob)s, pro %(reason)s", + "%(senderName)s updated a ban rule matching %(glob)s for %(reason)s": "%(senderName)s ĝisdatigis forbaran regulon, kiu akordas kun %(glob)s, pro %(reason)s", + "%(senderName)s created a rule banning users matching %(glob)s for %(reason)s": "%(senderName)s kreis regulon forbarantan uzantojn, kiuj akordas kun %(glob)s, pro %(reason)s", + "%(senderName)s created a rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s kreis regulon forbarantan ĉambrojn, kiuj akordas kun %(glob)s, pro %(reason)s", + "%(senderName)s created a rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s kreis regulon forbarantan servilojn, kiuj akordas kun %(glob)s, pro %(reason)s", + "%(senderName)s created a ban rule matching %(glob)s for %(reason)s": "%(senderName)s kreis forbaran regulon, kiu akordas kun %(glob)s, pro %(reason)s", + "%(senderName)s changed a rule that was banning users matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s ŝanĝis regulon forbarintan uzantojn, kiuj akordis kun %(oldGlob)s, al akordo kun %(newGlob)s, pro %(reason)s", + "%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s ŝanĝis regulon forbarintan ĉambrojn, kiuj akordis kun %(oldGlob)s, al akordo kun %(newGlob)s, pro %(reason)s", + "%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s ŝanĝis regulon forbarintan servilojn, kiuj akordis kun %(oldGlob)s, al akordo kun %(newGlob)s, pro %(reason)s", + "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s ĝisdatigis forbaran regulon, kiu akordis kun %(oldGlob)s, al akordo kun %(newGlob)s, pro %(reason)s", + "Not Trusted": "Nefidata", + "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) salutis novan salutaĵon ne kontrolante ĝin:", + "Ask this user to verify their session, or manually verify it below.": "Petu, ke ĉi tiu la uzanto kontrolu sian salutaĵon, aŭ kontrolu ĝin permane sube.", + "Manually Verify": "Permane kontroli", + "Show a presence dot next to DMs in the room list": "Montri punkton de ĉeesteco apud rektaj ĉambroj en la listo de ĉambroj", + "Support adding custom themes": "Subteni aldonadon de propraj haŭtoj", + "Enable cross-signing to verify per-user instead of per-session (in development)": "Ŝalti transirajn subskribojn por kontroli uzantojn anstataŭ aparatojn (ankoraŭ evoluigate)", + "Enable local event indexing and E2EE search (requires restart)": "Ŝalti lokan indeksadon de okazoj kaj serĉon en tutvoja ĉifrado (bezonas restartigon)", + "Show info about bridges in room settings": "Montri informon pri pontoj en agordoj de ĉambro", + "Show padlocks on invite only rooms": "Montri serurojn sur ĉambroj por invititaj", + "Keep secret storage passphrase in memory for this session": "Teni pasfrazon de sekreta deponejo en memoro dum ĉi tiu salutaĵo", + "Review": "Rekontroli", + "This bridge was provisioned by .": "Ĉi tiu ponto estas provizita de .", + "This bridge is managed by .": "Ĉi tiu ponto estas administrata de .", + "Workspace: %(networkName)s": "Labortablo: %(networkName)s", + "Changing password will currently reset any end-to-end encryption keys on all sessions, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Ŝanĝo de pasvorto nuntempe restarigos ĉiujn tutvoje ĉifrajn ŝlosilojn en ĉiuj salutaĵoj, malebligante legadon de ĉifrita historio, malse vi unue elportus la ŝlosilojn de viaj ĉambroj kaj reenportus ilin poste. Ĉi tion ni plibonigos ose.", + "Your homeserver does not support cross-signing.": "Via hejmservilo ne subtenas transirajn subskribojn.", + "Cross-signing and secret storage are enabled.": "Transiraj subskriboj kaj sekreta deponejo estas ŝaltitaj.", + "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Via konto havas identecon de transiraj subskriboj en sekreta deponejo, sed ĉi tiu salutaĵo ankoraŭ ne fidas ĝin.", + "Cross-signing and secret storage are not yet set up.": "Transiraj subskriboj kaj sekreta deponejo ankoraŭ ne agordiĝis.", + "Reset cross-signing and secret storage": "Remeti transirajn subskribojn kaj sekretan deponejon", + "Bootstrap cross-signing and secret storage": "Praŝargi transirajn subskribojn kaj sekretan deponejon", + "Cross-signing public keys:": "Transiraj publikaj ŝlosiloj:", + "in memory": "en memoro", + "not found": "ne trovita", + "Cross-signing private keys:": "Transiraj privataj ŝlosiloj:", + "in secret storage": "en sekreta deponejo", + "Secret storage public key:": "Publika ŝlosilo de sekreta deponejo:", + "in account data": "en datumoj de konto", + "Homeserver feature support:": "Funkciaj kapabloj de hejmservilo:", + "exists": "ekzistas", + "Your homeserver does not support session management.": "Via hejmservilo ne subtenas administradon de salutaĵoj.", + "Unable to load session list": "Ne povas enlegi liston de salutaĵoj", + "Delete %(count)s sessions|other": "Forigi %(count)s salutaĵojn", + "Delete %(count)s sessions|one": "Forigi %(count)s salutaĵon", + "Securely cache encrypted messages locally for them to appear in search results, using ": "Sekure kaŝmemori ĉifritajn mesaĝojn loke, por aperigi ilin en serĉrezultoj, uzante ", + " to store messages from ": " por deponi mesaĝojn el ", + "rooms.": "ĉambroj.", + "Manage": "Administri", + "Securely cache encrypted messages locally for them to appear in search results.": "Sekure kaŝmemori ĉifritajn mesaĝojn loke, por aperigi ilin en serĉrezultoj.", + "Enable": "Ŝalti", + "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riot malhavas kelkajn partojn bezonajn por sekura loka kaŝmemorado de ĉirfitaj mesaĝoj. Se vi volas eksperimenti pri ĉi tiu kapablo, kunmetu propran klienton «Riot Dekstop» kun aldonitaj serĉopartoj.", + "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot ne povas sekure loke kaŝmemori ĉifritajn mesaĝojn, rulate en reta foliumilo. Uzu la klienton Riot Desktop por aperigi ĉirfritajn mesaĝojn en serĉorezultoj.", + "Connecting to integration manager...": "Konektante al kunigilo…", + "This session is backing up your keys. ": "Ĉi tiu salutaĵo savkopias viajn ŝlosilojn. ", + "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Ĉi tiu salutaĵo ne savkopias viajn ŝlosilojn, sed vi jam havas savkopion, el kiu vi povas rehavi datumojn, kaj ilin kreskigi plue.", + "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Konektu ĉi tiun salutaĵon al savkopiado de ŝlosiloj antaŭ ol vi adiaŭos, por ne perdi ŝlosilojn, kiuj povus troviĝi nur en ĉi tiu salutaĵo.", + "Connect this session to Key Backup": "Konekti ĉi tiun salutaĵon al Savkopiado de ŝlosiloj", + "not stored": "ne deponita", + "Backup has a signature from unknown user with ID %(deviceId)s": "Savkopio havas subskribon de nekonata uzanto kun la identigilo %(deviceId)s", + "Backup has a signature from unknown session with ID %(deviceId)s": "Savkopio havas subskribon de nekonata salutaĵo kun la identigilo %(deviceId)s", + "Backup has a valid signature from this session": "Savkopio havas validan subskribon de ĉi tiu salutaĵo", + "Backup has an invalid signature from this session": "Savkopio havas nevalidan subskribon de ĉi tiu salutaĵo", + "Backup has a valid signature from verified session ": "Savkopio havas validan subskribon de kontrolita salutaĵo ", + "Backup has a valid signature from unverified session ": "Savkopio havas validan subskribon de nekontrolita salutaĵo ", + "Backup has an invalid signature from verified session ": "Savkopio havas nevalidan subskribon de kontrolita salutaĵo ", + "Backup has an invalid signature from unverified session ": "Savkopio havas nevalidan subskribon de nekontrolita salutaĵo ", + "Backup is not signed by any of your sessions": "Savkopio estas subskribita de neniu el viaj salutaĵoj", + "This backup is trusted because it has been restored on this session": "Ĉi tiu savkopio estas fidata, ĉar ĝi estis rehavita en ĉi tiu salutaĵo", + "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Savkopia ŝlosilo estas deponita en sekreta deponejo, sed tiu funkcio ne estas ŝaltita en ĉi tiu salutaĵo. Bonvolu ŝalti transirajn subskribojn en Laboratorio por modifi la staton de savkopiado.", + "Backup key stored: ": "Savkopia ŝlosilo deponita: ", + "Your keys are not being backed up from this session.": "Viaj ŝlosiloj ne estas savkopiataj el ĉi tiu salutaĵo.", + "Enable desktop notifications for this session": "Ŝalti labortablajn sciigojn por ĉi tiu salutaĵo", + "Enable audible notifications for this session": "Ŝalti aŭdeblajn sciigojn por ĉi tiu salutaĵo", + "Use an Integration Manager (%(serverName)s) to manage bots, widgets, and sticker packs.": "Uzu kunigilon (%(serverName)s) por administrado de robotoj, fenestraĵoj, kaj glumarkaroj.", + "Use an Integration Manager to manage bots, widgets, and sticker packs.": "Uzu kunigilon por administrado de robotoj, fenestraĵoj, kaj glumarkaroj.", + "Manage integrations": "Administri kunigojn", + "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Kunigiloj ricevas agordajn datumojn, kaj povas modifi fenestraĵojn, sendi invitojn al ĉambroj, kaj vianome agordi nivelojn de potenco.", + "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Via pasvorto sukcese ŝanĝiĝis. Vi ne ricevados pasivajn sciigojn en aliaj salutaĵoj, ĝis vi ilin resalutos", + "Error downloading theme information.": "Eraris elŝuto de informoj pri haŭto.", + "Theme added!": "Haŭto aldoniĝis!", + "Custom theme URL": "Propra URL al haŭto", + "Add theme": "Aldoni haŭton", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Por raparto de sekureca problemo rilata al Matrix, bonvolu legi la Eldiran Politikon pri Sekureco de Matrix.org.", + "Customise your experience with experimental labs features. Learn more.": "Alĝustigu vian sperton per eksperimentaj laboratoriaj funkcioj. Eksciu plion.", + "Ignored/Blocked": "Malatentita/Blokita", + "Error adding ignored user/server": "Eraris aldono de malatentita uzanto/servilo", + "Something went wrong. Please try again or view your console for hints.": "Io eraris. Bonvolu reprovi aŭ serĉi helpilojn en via konzolo.", + "None": "Neniu", + "Ban list rules - %(roomName)s": "Reguloj de listo de forbaroj – %(roomName)s", + "Server rules": "Servilaj reguloj", + "User rules": "Uzantulaj reguloj", + "You are currently ignoring:": "Vi nun malatentas:", + "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Aldonu ĉi tien uzantojn kaj servilojn, kiujn vi volas malatenti. Uzu steleton por akordigi ĉiajn signojn. Ekzemple, @bot:* malatentigus ĉiujn uzantojn kun la nomo «bot» sur ĉiu servilo.", + "Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.": "Malatento de homoj okazas per listoj de forbaroj, kiuj enhavas regulojn pri tio, kiun forbari. Abono de listo de forbaroj signifas, ke la uzantoj/serviloj blokataj de la listo estos kaŝitaj de vi.", + "Personal ban list": "Persona listo de forbaroj", + "Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Via persona listo de forbaroj tenas ĉiujn uzantojn/servilojn, kies mesaĝoj vi persone ne volas vidi. Post via unua malatento, nova ĉambro aperos en via listo de ĉambroj, nomita «Mia listo de forbaroj» – restu en ĝi por efikigi la liston de forbaroj.", + "Server or user ID to ignore": "Malatentota servilo aŭ identigilo de uzanto", + "eg: @bot:* or example.org": "ekz: @bot:* aŭ ekzemplo.org", + "Subscribing to a ban list will cause you to join it!": "Abono de listo de forbaroj aligos vin al ĝi!", + "If this isn't what you want, please use a different tool to ignore users.": "Se vi ne volas tion, bonvolu uzi alian ilon por malatenti uzantojn.", + "Room ID or alias of ban list": "Identigilo de ĉambro aŭ kromnomo de listo de forbaroj", + "Session ID:": "Identigilo de salutaĵo:", + "Session key:": "Ŝlosilo de salutaĵo:", + "Message search": "Serĉado de mesaĝoj", + "Cross-signing": "Transiraj subskriboj", + "Sessions": "Salutaĵoj", + "A session's public name is visible to people you communicate with": "Publika nomo de salutaĵo estas videbla al homoj, kun kiuj vi komunikas", + "This room is bridging messages to the following platforms. Learn more.": "Ĉi tiu ĉambro transpontigas mesaĝojn al la jenaj platformoj. Eksciu plion.", + "This room isn’t bridging messages to any platforms. Learn more.": "Ĉi tiu ĉambro transpontigas mesaĝojn al neniu platformo. Eksciu plion.", + "Bridges": "Pontoj", + "This user has not verified all of their sessions.": "Ĉi tiu uzanto ne kontrolis ĉiomon da siaj salutaĵoj.", + "You have not verified this user.": "Vi ne kontrolis tiun ĉi uzanton.", + "You have verified this user. This user has verified all of their sessions.": "Vi kontrolis tiun ĉi uzanton. Ĝi kontrolis ĉiomon da siaj salutaĵoj.", + "Someone is using an unknown session": "Iu uzas nekonatan salutaĵon", + "Some sessions for this user are not trusted": "Iuj salutaĵoj de ĉi tiu uzanto ne estas fidataj", + "All sessions for this user are trusted": "Ĉiuj salutaĵoj de ĉi tiu uzanto estas fidataj", + "Some sessions in this encrypted room are not trusted": "Iuj salutaĵoj en ĉi tiu ĉifrita ĉambro ne estas fidataj", + "All sessions in this encrypted room are trusted": "Ĉiuj salutaĵoj en ĉi tiu ĉifrita ĉambro estas fidataj", + "Your key share request has been sent - please check your other sessions for key share requests.": "Via peto pri havigo de ŝlosilo estas sendita – bonvolu kontroli viajn aliajn salutaĵojn je petojn pri havigo de ŝlosiloj.", + "Key share requests are sent to your other sessions automatically. If you rejected or dismissed the key share request on your other sessions, click here to request the keys for this session again.": "Petoj pri havigo de ŝlosiloj estas memage sendataj al viaj aliaj salutaĵoj. Se vi rifuzis aŭ forigis la peton pri havigo de ŝlosiloj en aliaj viaj salutaĵoj, klaku ĉi tien por ree peti ŝlosilojn por ĉi tiu salutaĵo.", + "If your other sessions do not have the key for this message you will not be able to decrypt them.": "Se viaj aliaj salutaĵoj ne havas la ŝlosilon por ĉi tiu mesaĝo, vi ne povos ilin malĉifri.", + "Re-request encryption keys from your other sessions.": "Repeti viajn ĉifrajn ŝlosilojn de ceteraj viaj salutaĵoj.", + "Encrypted by an unverified session": "Ĉifrita de nekontrolita salutaĵo", + "Encrypted by a deleted session": "Ĉifrita de forigita salutaĵo", + "Invite only": "Nur por invititaj", + "Close preview": "Fermi antaŭrigardon", + "No sessions with registered encryption keys": "Neniuj salutaĵoj kun registritaj ĉifraj ŝlosiloj", + "Unrecognised command: %(commandText)s": "Nerekonita komando: %(commandText)s", + "You can use /help to list available commands. Did you mean to send this as a message?": "Vi povas komandi /help por listigi uzeblajn komandojn. Ĉu vi intencis sendi ĉi tion kiel mesaĝon?", + "Hint: Begin your message with // to start it with a slash.": "Helpeto: Komencu vian mesaĝon per // por komenci ĝin per suprenstreko.", + "Mark all as read": "Marki ĉion legita", + "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Eraris ĝisdatigo de la alternativaj adresoj de la ĉambro. Eble la servilo ne permesas tion, aŭ io dumtempe ne funkcias.", + "You don't have permission to delete the alias.": "Vi ne havas permeson forigi la kromnomon.", + "Alternative addresses for this room:": "Alternativaj adresoj de ĉi tiu ĉambro:", + "This room has no alternative addresses": "Ĉi tiu ĉambro ne havas alternativajn adresojn", + "New address (e.g. #foo:domain)": "Nova adreso (ekz. #foo:domain)", + "Local addresses (unmoderated content)": "Lokaj adresoj (nereguligata enhavo)", + "Waiting for %(displayName)s to accept…": "Atendante akcepton de %(displayName)s…", + "Accepting…": "Akceptante…", + "Messages in this room are end-to-end encrypted.": "Mesaĝoj en ĉi tiu ĉambro estas tutvoje ĉifrataj.", + "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Viaj mesaĝoj estas sekurigitaj, kaj nur vi kaj la ricevanto posedas la unikan ŝlosilojn, kiuj ilin povas malĉifri.", + "Your messages are not secure": "Viaj mesaĝoj ne estas sekuraj", + "One of the following may be compromised:": "Unu el la jenaj eble estas malkonfidencigita:", + "Your homeserver": "Via hejmservilo", + "The homeserver the user you’re verifying is connected to": "La hejmservilo, al kiu konektiĝis la kontrolata uzanto", + "Yours, or the other users’ internet connection": "Interreta konekto de vi aŭ la aliaj uzantoj", + "Yours, or the other users’ session": "Salutaĵo de vi aŭ la aliaj uzantoj", + "%(count)s verified sessions|other": "%(count)s kontrolitaj salutaĵoj", + "%(count)s verified sessions|one": "1 kontrolita salutaĵo", + "Hide verified sessions": "Kaŝi kontrolitajn salutaĵojn", + "%(count)s sessions|other": "%(count)s salutaĵoj", + "%(count)s sessions|one": "%(count)s salutaĵo", + "Hide sessions": "Kaŝi salutaĵojn", + "%(role)s in %(roomName)s": "%(role)s en %(roomName)s", + "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "La salutaĵo, kiun vi provas kontroli, ne subtenas skanadon de rapidrespondaj kodoj nek kontrolon per bildsignoj, kiujn subtenas Riot. Provu per alia kliento.", + "Verify by scanning": "Kontroli per skanado", + "Ask %(displayName)s to scan your code:": "Petu de %(displayName)s skani vian kodon:", + "Verify by emoji": "Kontroli per bildsignoj", + "If you can't scan the code above, verify by comparing unique emoji.": "Se vi ne povas skani la supran kodon, kontrolu per komparo de unikaj bildsignoj.", + "Verify by comparing unique emoji.": "Kontrolu per komparo de unikaj bildsignoj.", + "You've successfully verified %(displayName)s!": "Vi sukcese kontrolis uzanton %(displayName)s!", + "Got it": "Komprenite", + "Verification timed out. Start verification again from their profile.": "Kontrolo atingis tempolimon. Rekomencu la kontrolon de ĝia profilo.", + "%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s nuligis la kontrolon. Rekomencu ĝin de ĝia profilo.", + "You cancelled verification. Start verification again from their profile.": "Vi nuligis la kontrolon. Rekomencu ĝin de ĝia profilo.", + "Encryption enabled": "Ĉifrado estas ŝaltita", + "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Mesaĝojn en ĉi tiu ĉambro estas tutvoje ĉifrataj. Eksciu plion kaj kontrolu ĉi tiun uzanton el ĝia profilo.", + "Encryption not enabled": "Ĉifrado ne estas ŝaltita", + "The encryption used by this room isn't supported.": "La ĉifro uzata de ĉi tiu ĉambro ne estas subtenata.", + "You have ignored this user, so their message is hidden. Show anyways.": "Vi malatentis ĉi tiun uzanton, ĝia mesaĝo estas do kaŝita. Tamen montri.", + "You declined": "Vi rifuzis", + "%(name)s declined": "%(name)s rifuzis", + "Accepting …": "Akceptante…", + "Declining …": "Rifuzante…", + " reacted with %(content)s": " reagis per %(content)s", + "Any of the following data may be shared:": "Ĉiu el la jenaj datumoj povas kunhaviĝi:", + "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Uzo de tiu ĉi fenestraĵo eble havigos datumojn kun %(widgetDomain)s kaj via kunigilo.", + "Using this widget may share data with %(widgetDomain)s.": "Uzo de tiu ĉi fenestraĵo eble havigos datumojn kun %(widgetDomain)s.", + "Language Dropdown": "Lingva falmenuo", + "Destroy cross-signing keys?": "Ĉu detrui transire ĉifrajn ŝlosilojn?", + "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Forigo de transire ĉifraj ŝlosiloj estas porĉiama. Ĉiu, kun kiu vi interkontrolis, vidos avertojn pri sekureco. Vi preskaŭ certe ne volas ĉi tion fari, malse vi perdis ĉiun aparaton, el kiu vi povus transire subskribadi.", + "Clear cross-signing keys": "Vakigi transire ĉifrajn ŝlosilojn", + "Clear all data in this session?": "Ĉu vakigi ĉiujn datumojn en ĉi tiu salutaĵo?", + "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Vakigo de ĉiuj datumoj el ĉi tiu salutaĵo estas porĉiama. Ĉifritaj mesaĝoj perdiĝos, malse iliaj ŝlosiloj savkopiiĝis.", + "Verify session": "Kontroli salutaĵon", + "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Por kontroli, ke ĉi tiu salutaĵo estas fidinda, bonvolu kontroli, ke la ŝlosilo, kiun vi vidas en Agordoj de uzanto en tiu aparato, akordas kun la suba:", + "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Por kontroli, ke ĉi tiu salutaĵo estas fidinda, bonvolu kontakti ĝian posedanton alimaniere (ekz. persone aŭ telefone), kaj demandu al ĝi, ĉu la ŝlosilo, kiun ĝi vidas en siaj Agordoj de uzanto por ĉi tiu salutaĵo akordas kun la suba:", + "Session name": "Nomo de salutaĵo", + "Session key": "Ŝlosilo de salutaĵo", + "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Se ĝi akordas, premu la kontrolan butonon sube. Se ne, iu alia spionas la salutaĵon kaj vi probable volos premi la forlistigan butonon anstataŭe.", + "Verification Requests": "Petoj de kontrolo", + "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Kontrolo de tiu ĉi uzanto markos ĝian salutaĵon fidata, kaj ankaŭ markos vian salutaĵon fidata por ĝi.", + "Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.": "Kontrolu ĉi tiun aparaton por marki ĝin fidata. Fidado povas pacigi la menson de vi kaj aliaj uzantoj dum uzado de tutvoje ĉifrataj mesaĝoj.", + "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Kontrolo de ĉi tiu aparato markos ĝin fidata, kaj ankaŭ la uzantoj, kiuj interkontrolis kun vi, fidos ĉi tiun aparaton.", + "Enable 'Manage Integrations' in Settings to do this.": "Ŝaltu «Administri kunigojn» en Agordoj, por fari ĉi tion.", + "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Via Rioto ne permesas al vi uzi kunigilon por tio. Bonvolu kontakti administranton.", + "Failed to invite the following users to chat: %(csvUsers)s": "Malsukcesis inviti la jenajn uzantojn al babilo: %(csvUsers)s", + "We couldn't create your DM. Please check the users you want to invite and try again.": "Ni ne povis krei vian rektan ĉambron. Bonvolu kontroli, kiujn uzantojn vi invitas, kaj reprovu.", + "Something went wrong trying to invite the users.": "Io eraris dum invito de la uzantoj.", + "We couldn't invite those users. Please check the users you want to invite and try again.": "Ni ne povis inviti tiujn uzantojn. Bonvolu kontroli, kiujn uzantojn vi invitas, kaj reprovu.", + "Failed to find the following users": "Malsukcesis trovi la jenajn uzantojn", + "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "La jenaj uzantoj eble ne ekzistas aŭ ne validas, kaj ne povas invitiĝi: %(csvNames)s", + "Recent Conversations": "Freŝaj interparoloj", + "Recently Direct Messaged": "Freŝaj rektaj ĉambroj", + "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Se vi ne povas iun trovi, petu ĝian uzantonomon, kaj havigu al ĝi vian uzantonomon (%(userId)s) aŭ ligilon al profilo.", + "Go": "Iri", + "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Se vi ne povas iun trovi, petu ĝian uzantonomon (ekz. @uzanto:servilo.net), aŭ prezentu al ĝi tiun ĉi ĉambron.", + "You added a new session '%(displayName)s', which is requesting encryption keys.": "Vi aldonis novas salutaĵon «%(displayName)s», kiu petas ĉifrajn ŝlosilojn.", + "Your unverified session '%(displayName)s' is requesting encryption keys.": "Via nekontrolita salutaĵo «%(displayName)s» petas ĉifrajn ŝlosilojn.", + "Loading session info...": "Enlegante informojn pri salutaĵo…", + "Your account is not secure": "Via konto ne estas sekura", + "Your password": "Via pasvorto", + "This session, or the other session": "Ĉi tiu salutaĵo, aŭ la alia salutaĵo", + "The internet connection either session is using": "La retkonekto uzata de iu el la salutaĵoj", + "We recommend you change your password and recovery key in Settings immediately": "Ni rekomendas, ke vi tuj ŝanĝu viajn pasvorton kaj rehavan ŝlosilon en Agordoj", + "New session": "Nova salutaĵo", + "Use this session to verify your new one, granting it access to encrypted messages:": "Uzu ĉi tiun salutaĵon por kontroli vian novan, donante al ĝi aliron al ĉifritaj mesaĝoj:", + "If you didn’t sign in to this session, your account may be compromised.": "Se vi ne salutis ĉi tiun salutaĵon, via konto eble estas malkonfidencigita.", + "This wasn't me": "Tio ne estis mi", + "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Gradaltigo de ĉambro estas altnivela ago kaj estas kutime rekomendata kiam ĉambro estas malstabila pro eraroj, mankantaj funkcioj, aŭ malsekuraĵoj.", + "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Ĉi tio kutime influas nur traktadon de la ĉambro de la servilo. Se vi spertas problemojn pri Riot, bonvolu raporti problemon.", + "You'll upgrade this room from to .": "Vi gradaltigos ĉi tiun ĉambron de al .", + "This will allow you to return to your account after signing out, and sign in on other sessions.": "Ĉi tio ebligos revenon al via konto post adiaŭo kaj resaluto en aliaj salutaĵoj.", + "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Vi nun forlistigas nekontrolitajn salutaĵojn; por sendi mesaĝojn al tiuj salutaĵoj, vi devas ilin kontroli.", + "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Ni rekomendas, ke vi trairu la kontrolon de ĉiu salutaĵo por konfirmi, ke ili apartenas al siaj ĝustaj posedantoj, sed laŭplaĉe vi povas ankaŭ sendi la mesaĝon sen kontrolo.", + "Room contains unknown sessions": "Ĉambro enhavas nekonatajn salutaĵojn", + "\"%(RoomName)s\" contains sessions that you haven't seen before.": "«%(RoomName)s» enhavas salutaĵojn, kiujn vi ne vidis antaŭe.", + "Unknown sessions": "Nekonataj salutaĵoj", + "Verification Request": "Kontrolpeto", + "Enter secret storage passphrase": "Enigu pasfrazon de sekreta deponejo", + "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Ne povis atingi sekretan deponejon. Bonvolu kontroli, ke vi enigis la ĝustan pasfrazon.", + "Warning: You should only access secret storage from a trusted computer.": "Averto: vi aliru sekretan deponejon nur de fidata komputilo.", + "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Aliru viajn sekuran historion de mesaĝoj kaj identecon de transiraj subskriboj por kontrolo de aliaj salutaĵoj per enigo de via pasfrazo.", + "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Se vi forgesis vian pasfrazon, vi povas uzi vian rehavan ŝlosilonreagordi rehavon.", + "Enter secret storage recovery key": "Enigu rehavan ŝlosilon de la sekreta deponejo", + "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Ne povas atingi sekretan deponejon. Bonvolu kontroli, ke vi enigis la ĝustan rehavan ŝlosilon.", + "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Aliru vian sekuran historion de mesaĝoj kaj vian identecon de transiraj subskriboj por kontrolo de aliaj salutaĵoj per enigo de via rehava ŝlosilo.", + "If you've forgotten your recovery key you can .": "Se vi forgesis vian rehavan ŝlosilon, vi povas .", + "Recovery key mismatch": "Malakordo de rehavaj ŝlosiloj", + "Incorrect recovery passphrase": "Malĝusta rehava pasfrazo", + "Backup restored": "Savkopio rehavita", + "Enter recovery passphrase": "Enigu la rehavan pasfrazon", + "Enter recovery key": "Enigu la rehavan ŝlosilon", + "Warning: You should only set up key backup from a trusted computer.": "Averto: savkopiadon de ŝlosiloj vi starigu nur el fidata komputilo.", + "If you've forgotten your recovery key you can ": "Se vi forgesis vian rehavan ŝlosilon, vi povas ", + "Reload": "Relegi", + "Remove for everyone": "Forigi por ĉiuj", + "Remove for me": "Forigi por mi mem", + "User Status": "Stato de uzanto", + "Country Dropdown": "Landa falmenuo", + "Confirm your identity by entering your account password below.": "Konfirmu vian identecon per enigo de la pasvorto de via konto sube.", + "Missing captcha public key in homeserver configuration. Please report this to your homeserver administrator.": "Mankas publika ŝlosilo por testo de homeco en hejmservila agordaro. Bonvolu raporti tion al la administranto de via hejmservilo.", + " (1/%(totalCount)s)": " (1/%(totalCount)s)", + "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Via nova salutaĵo nun estas kontrolita. Ĝi povas atingi viajn ĉifritajn mesaĝojn, kaj aliaj uzantoj vidos ĝin fidata.", + "Your new session is now verified. Other users will see it as trusted.": "Via nova salutaĵo nun estas kontrolita. Aliaj uzantoj vidos ĝin fidata.", + "Without completing security on this session, it won’t have access to encrypted messages.": "Sen plenigo de sekureco en ĉi tiu salutaĵo, ĝi ne povos atingi ĉifritajn mesaĝojn.", + "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Ŝanĝo de via pasvorto restarigos ĉiujn tutvoje ĉifrajn ŝlosilojn en ĉiuj viaj salutaĵoj, igante ĉifritan historion de babilo nelegebla. Agordu Savkopiadon de ŝlosiloj aŭ elportu viajn ĉambrajn ŝlosilojn el alia salutaĵo, antaŭ ol vi restarigos vian pasvorton.", + "You have been logged out of all sessions and will no longer receive push notifications. To re-enable notifications, sign in again on each device.": "Vi adiaŭis ĉiujn viajn salutaĵojn kaj ne plu ricevados pasivajn sciigojn. Por reŝalti sciigojn, vi resalutu per ĉiu el viaj aparatoj.", + "Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Reprenu aliron al via konto kaj rehavu ĉifrajn ŝlosilojn deponitajn en ĉi tiu salutaĵo. Sen ili, vi ne povos legi ĉiujn viajn sekurajn mesaĝojn en iu ajn salutaĵo.", + "Warning: Your personal data (including encryption keys) is still stored in this session. Clear it if you're finished using this session, or want to sign in to another account.": "Viaj personaj datumoj (inkluzive ĉifrajn ŝlosilojn) estas ankorŭ deponitaj en ĉi tiu salutaĵo. Vakigu ĝin, se vi ne plu uzos ĉi tiun salutaĵon, aŭ volas saluti alian konton.", + "Sender session information": "Informoj pri salutaĵo de sendinto", + "Enter your account password to confirm the upgrade:": "Enigu pasvorton de via konto por konfirmi la gradaltigon:", + "Restore your key backup to upgrade your encryption": "Rehavu vian savkopion de ŝlosiloj por gradaltigi vian ĉifradon", + "Restore": "Rehavi", + "You'll need to authenticate with the server to confirm the upgrade.": "Vi devos aŭtentikigi kun la servilo por konfirmi la gradaltigon.", + "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Gradaltigu ĉi tiun salutaĵon por ebligi al ĝi kontroladon de aliaj salutaĵoj, donante al ili aliron al ĉifritaj mesaĵoj, kaj markante ilin fidataj por aliaj uzantoj.", + "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Starigu ĉifradon en ĉi tiu salutaĵo por ebligi al ĝi kontroladon de aliaj salutaĵoj, donante al ili aliron al ĉifritaj mesaĵoj, kaj markante ilin fidataj por aliaj uzantoj.", + "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Sekurigu viajn ĉifrajn ŝlosilojn per pasfrazo. Por plejgranda sekureco, ĝi malsamu la pasvorton de via konto:", + "Enter a passphrase": "Enigu pasfrazon", + "Back up my encryption keys, securing them with the same passphrase": "Savkopiu miajn ĉifrajn ŝlosilojn, sekurigante ilin per la sama pasfrazo", + "Set up with a recovery key": "Starigi kun rehava ŝlosilo", + "Enter your passphrase a second time to confirm it.": "Enigu vian pasfrazon duan fojon por konfirmi ĝin.", + "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Tenu ĝian kopion en sekura loko, ekzemple mastrumilo de pasvortoj, aŭ eĉ sekurkesto.", + "Your recovery key": "Via rehava ŝlosilo", + "Your recovery key has been copied to your clipboard, paste it to:": "Via rehava ŝlosilo estis kopiita al via tondujo, algluu ĝin al:", + "Your recovery key is in your Downloads folder.": "Via rehava ŝlosilo estas en via dosierujo kun Elŝutoj.", + "You can now verify your other devices, and other users to keep your chats safe.": "Vi nun povas kontroli aliajn viajn aparatojn, kaj aliajn uzantojn, por teni viajn babilojn sekurajn.", + "Make a copy of your recovery key": "Fari kopionde via rehava ŝlosilo", + "You're done!": "Vi finis!", + "Unable to set up secret storage": "Ne povas starigi sekretan deponejon", + "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another session.": "Sen Sekura rehavo de mesaĝoj, vi ne povos rehavi vian historion de ĉifritaj mesaĝoj se vi adiaŭos aŭ uzos alian salutaĵon.", + "Create key backup": "Krei savkopion de ŝlosiloj", + "This session is encrypting history using the new recovery method.": "Ĉi tiu salutaĵo nun ĉifras historion kun la nova rehava metodo.", + "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Ĉi tiu salutaĵo trovis, ke viaj rehava pasfrazo kaj ŝlosilo por Sekuraj mesaĝoj estis forigitaj.", + "If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "Se vi faris tion akcidente, vi povas agordi Sekurajn mesaĝojn en ĉi tiu salutaĵo, kio reĉifros la historion de mesaj de ĉi tiu salutaĵo kun nova rehava metodo.", + "If disabled, messages from encrypted rooms won't appear in search results.": "Post malŝalto, mesaĝoj el ĉifritaj ĉambroj ne aperos en serĉorezultoj.", + "Disable": "Malŝalti", + "Not currently indexing messages for any room.": "Mesaĝoj estas indeksataj en neniu ĉambro.", + "Currently indexing: %(currentRoom)s.": "Nun indeksante: %(currentRoom)s.", + "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot sekure loke kaŝmemoras ĉifritajn mesaĝojn por aperigi ilin en serĉorezultoj:", + "Space used:": "Spaco uzita:", + "Indexed messages:": "Indeksitaj masaĝoj:", + "Indexed rooms:": "Indeksitaj ĉambroj:", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s el %(totalRooms)s", + "Message downloading sleep time(ms)": "Dormotempo de elŝuto de mesaĝoj (milonsekunde)" } From ca78337d20654b1b8a44e0d644f76b91c2bef205 Mon Sep 17 00:00:00 2001 From: Madison Scott-Clary Date: Sun, 15 Mar 2020 18:20:02 +0000 Subject: [PATCH 319/522] Translated using Weblate (Esperanto) Currently translated at 99.8% (2148 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eo/ --- src/i18n/strings/eo.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 209057e36d..da3201ebec 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -2183,5 +2183,6 @@ "Indexed messages:": "Indeksitaj masaĝoj:", "Indexed rooms:": "Indeksitaj ĉambroj:", "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s el %(totalRooms)s", - "Message downloading sleep time(ms)": "Dormotempo de elŝuto de mesaĝoj (milonsekunde)" + "Message downloading sleep time(ms)": "Dormotempo de elŝuto de mesaĝoj (milonsekunde)", + "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Permesi fala vokhelpa servilo turn.matrix.org, kiam vian hejmservilo ne ofertas unu (vian IP-adreso estus dividita dum voko)" } From 06fce7158a1595ee71e6299898403d7a231a16e2 Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Sun, 15 Mar 2020 13:46:26 -0500 Subject: [PATCH 320/522] Rename Review Devices to Review Sessions Signed-off-by: Aaron Raimist --- src/CallHandler.js | 2 +- src/i18n/strings/en_EN.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CallHandler.js b/src/CallHandler.js index 1551b57313..2988e90f40 100644 --- a/src/CallHandler.js +++ b/src/CallHandler.js @@ -143,7 +143,7 @@ function _setCallListeners(call) { "if you proceed without verifying them, it will be "+ "possible for someone to eavesdrop on your call.", ), - button: _t('Review Devices'), + button: _t('Review Sessions'), onFinished: function(confirmed) { if (confirmed) { const room = MatrixClientPeg.get().getRoom(call.roomId); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 42120588c3..5f3ead1490 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -27,7 +27,7 @@ "Dismiss": "Dismiss", "Call Failed": "Call Failed", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.", - "Review Devices": "Review Devices", + "Review Sessions": "Review Sessions", "Call Anyway": "Call Anyway", "Answer Anyway": "Answer Anyway", "Call": "Call", From b331cb42027a6265e1deb63c4a3f94e663154cbf Mon Sep 17 00:00:00 2001 From: tsdgeos Date: Sat, 14 Mar 2020 09:31:03 +0000 Subject: [PATCH 321/522] Translated using Weblate (Catalan) Currently translated at 34.9% (750 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ca/ --- src/i18n/strings/ca.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json index 87e90fec9d..490af39fc7 100644 --- a/src/i18n/strings/ca.json +++ b/src/i18n/strings/ca.json @@ -598,7 +598,7 @@ "Uploading %(filename)s and %(count)s others|zero": "Pujant %(filename)s", "Light theme": "Tema clar", "Dark theme": "Tema fosc", - "Sign out": "Tancar sessió", + "Sign out": "Tanca la sessió", "Import E2E room keys": "Importar claus E2E de sala", "Cryptography": "Criptografia", "Labs": "Laboraroris", @@ -872,5 +872,12 @@ "Show a reminder to enable Secure Message Recovery in encrypted rooms": "Mostra un recordatori per activar la Recuperació de missatges segurs en sales encriptades", "Show avatars in user and room mentions": "Mostra avatars en mencions d'usuaris i sales", "Enable big emoji in chat": "Activa Emojis grans en xats", - "Send analytics data": "Envia dades d'anàlisi" + "Send analytics data": "Envia dades d'anàlisi", + "Upload": "Puja", + "Email addresses": "Adreces de correu electrònic", + "Phone numbers": "Números de telèfon", + "Language and region": "Idioma i regió", + "Theme": "Tema", + "Phone Number": "Número de telèfon", + "Help": "Ajuda" } From 099e56cd6b6faa692142475ac50130c8c2b7a8d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0?= Date: Sat, 14 Mar 2020 09:42:30 +0000 Subject: [PATCH 322/522] Translated using Weblate (Catalan) Currently translated at 34.9% (750 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ca/ --- src/i18n/strings/ca.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json index 490af39fc7..f1e354e7c8 100644 --- a/src/i18n/strings/ca.json +++ b/src/i18n/strings/ca.json @@ -115,7 +115,7 @@ "You do not have permission to do that in this room.": "No teniu el permís per realitzar aquesta acció en aquesta sala.", "Missing room_id in request": "Falta l'ID de la sala en la vostra sol·licitud", "Room %(roomId)s not visible": "La sala %(roomId)s no és visible", - "Missing user_id in request": "Falta el user_id a la sol·licitud", + "Missing user_id in request": "Falta l'user_id a la vostra sol·licitud", "Usage": "Ús", "/ddg is not a command": "/ddg no és un comandament", "To use it, just wait for autocomplete results to load and tab through them.": "Per utilitzar-lo, simplement espereu que es completin els resultats automàticament i seleccioneu-ne el desitjat.", @@ -633,7 +633,7 @@ "The platform you're on": "La plataforma a la que estàs", "Your language of choice": "El teu idioma preferit", "Which officially provided instance you are using, if any": "Quina instància oficial estàs utilitzant, si escau", - "Whether or not you're using the Richtext mode of the Rich Text Editor": "Si estàs utilitzant el mode Richtext del Rich Text Editor o no", + "Whether or not you're using the Richtext mode of the Rich Text Editor": "Si esteu utilitzant el mode Richtext del Rich Text Editor o no", "The information being sent to us to help make Riot.im better includes:": "La informació enviada a Riot.im per ajudar-nos a millorar inclou:", "Fetching third party location failed": "S'ha produït un error en obtenir la ubicació de tercers", "A new version of Riot is available.": "Hi ha una versió nova del Riot disponible.", @@ -879,5 +879,6 @@ "Language and region": "Idioma i regió", "Theme": "Tema", "Phone Number": "Número de telèfon", - "Help": "Ajuda" + "Help": "Ajuda", + "Send typing notifications": "Envia notificacions d'escriptura" } From 9cd7a94e82340f25985c6078c346f4978031cfa6 Mon Sep 17 00:00:00 2001 From: Evilham Date: Sat, 14 Mar 2020 09:44:48 +0000 Subject: [PATCH 323/522] Translated using Weblate (Catalan) Currently translated at 34.9% (750 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ca/ --- src/i18n/strings/ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json index f1e354e7c8..aee9559eb7 100644 --- a/src/i18n/strings/ca.json +++ b/src/i18n/strings/ca.json @@ -113,7 +113,7 @@ "Power level must be positive integer.": "El nivell de poders ha de ser un enter positiu.", "You are not in this room.": "No heu entrat a aquesta sala.", "You do not have permission to do that in this room.": "No teniu el permís per realitzar aquesta acció en aquesta sala.", - "Missing room_id in request": "Falta l'ID de la sala en la vostra sol·licitud", + "Missing room_id in request": "Falta el room_id en la vostra sol·licitud", "Room %(roomId)s not visible": "La sala %(roomId)s no és visible", "Missing user_id in request": "Falta l'user_id a la vostra sol·licitud", "Usage": "Ús", From e1b2272a93ff82f6460608c416f6fca246b43716 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Sun, 15 Mar 2020 03:30:00 +0000 Subject: [PATCH 324/522] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2152 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index c8d520d5a3..2df131f757 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2196,5 +2196,11 @@ "Local addresses (unmoderated content)": "本機位置(未經審核的內容)", "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s 將聊天室名稱從 %(oldRoomName)s 變更為 %(newRoomName)s。", "%(senderName)s changed the addresses for this room.": "%(senderName)s 變更了此聊天室的位置。", - "You don't have permission to delete the alias.": "您沒有刪除別名的權限。" + "You don't have permission to delete the alias.": "您沒有刪除別名的權限。", + "Support adding custom themes": "支援新增自訂佈景主題", + "Invalid theme schema.": "無效的佈景主題架構。", + "Error downloading theme information.": "下載佈景主題資訊時發生錯誤。", + "Theme added!": "已新增佈景主題!", + "Custom theme URL": "自訂佈景主題 URL", + "Add theme": "新增佈景主題" } From b2258ab159dec0534d7067736308c3f73b1462f9 Mon Sep 17 00:00:00 2001 From: Tirifto Date: Sun, 15 Mar 2020 18:21:27 +0000 Subject: [PATCH 325/522] Translated using Weblate (Esperanto) Currently translated at 99.8% (2148 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eo/ --- src/i18n/strings/eo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index da3201ebec..2684f32747 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -2184,5 +2184,5 @@ "Indexed rooms:": "Indeksitaj ĉambroj:", "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s el %(totalRooms)s", "Message downloading sleep time(ms)": "Dormotempo de elŝuto de mesaĝoj (milonsekunde)", - "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Permesi fala vokhelpa servilo turn.matrix.org, kiam vian hejmservilo ne ofertas unu (vian IP-adreso estus dividita dum voko)" + "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Permesi repaŝan vokasistan servilon turn.matrix.org, kiam via hejmservilo iun ne disponigas (via IP-adreso estus havigata dum voko)" } From f91ab660fd792fc19c69c7b03dafb4e5f9ed3e92 Mon Sep 17 00:00:00 2001 From: Tuomas Hietala Date: Fri, 13 Mar 2020 19:10:21 +0000 Subject: [PATCH 326/522] Translated using Weblate (Finnish) Currently translated at 90.7% (1951 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fi/ --- src/i18n/strings/fi.json | 51 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 769e92ac27..a6ad64a55d 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -1024,7 +1024,7 @@ "Don't ask me again": "Älä kysy uudelleen", "Not now": "Ei nyt", "The conversation continues here.": "Keskustelu jatkuu täällä.", - "Share Link to User": "Jaa linkki käyttäjälle", + "Share Link to User": "Jaa linkki käyttäjään", "Muted Users": "Mykistetyt käyttäjät", "Timeline": "Aikajana", "Submit debug logs": "Lähetä vianjäljityslokit", @@ -1939,5 +1939,52 @@ "Session name": "Istunnon nimi", "You added a new session '%(displayName)s', which is requesting encryption keys.": "Lisäsit uuden istunnon '%(displayName)s', joka pyytää salausavaimia.", "Loading session info...": "Ladataan istunnon tietoja...", - "New session": "Uusi istunto" + "New session": "Uusi istunto", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Raportoidaksesi Matrixiin liittyvän tietoturvaongelman, lue Matrix.orgin tietoturvaongelmien julkaisukäytäntö.", + "Message search": "Viestihaku", + "Sessions": "Istunnot", + "This room is bridging messages to the following platforms. Learn more.": "Tämä huone siltaa viestejä seuraaville alustoille. Lue lisää.", + "Re-request encryption keys from your other sessions.": "Pyydä uudelleen salausavaimia muista istunnoistasi.", + "Mark all as read": "Merkitse kaikki luetuiksi", + "Alternative addresses for this room:": "Tämän huoneen vaihtoehtoiset osoitteet:", + "This room has no alternative addresses": "Tällä huoneella ei ole vaihtoehtoisia osoitteita", + "Accepting…": "Hyväksytään…", + "One of the following may be compromised:": "Jokin seuraavista saattaa olla vaarantunut:", + "Your homeserver": "Kotipalvelimesi", + "Yours, or the other users’ internet connection": "Omasi tai muiden käyttäjien internet-yhteys", + "Yours, or the other users’ session": "Omasi tai muiden käyttäjien istunto", + "Encryption enabled": "Salaus käytössä", + "Encryption not enabled": "Salaus pois käytöstä", + "The encryption used by this room isn't supported.": "Tämän huoneen käyttämää salausta ei tueta.", + "You declined": "Kieltäydyit", + "%(name)s declined": "%(name)s kieltäytyi", + "Failed to invite the following users to chat: %(csvUsers)s": "Seuraavien käyttäjien kutsuminen keskusteluun epäonnistui: %(csvUsers)s", + "Something went wrong trying to invite the users.": "Käyttäjien kutsumisessa meni jotain pieleen.", + "We couldn't invite those users. Please check the users you want to invite and try again.": "Emme voineet kutsua kyseisiä käyttäjiä. Tarkista käyttäjät, jotka haluat kutsua ja yritä uudelleen.", + "Suggestions": "Ehdotukset", + "Your account is not secure": "Tilisi ei ole turvallinen", + "Your password": "Salasanasi", + "Room contains unknown sessions": "Huoneessa on tuntemattomia istuntoja", + "\"%(RoomName)s\" contains sessions that you haven't seen before.": "\"%(RoomName)s\" sisältää istuntoja, joita et ole nähnyt aiemmin.", + "Incorrect recovery passphrase": "Virheellinen palautuksen salalause", + "Enter recovery passphrase": "Syötä palautuksen salalause", + "Enter recovery key": "Syötä palautusavain", + "Confirm your identity by entering your account password below.": "Vahvista henkilöllisyytesi syöttämällä tilisi salasana alle.", + "Message not sent due to unknown sessions being present": "Viestiä ei lähetetty, koska läsnä on tuntemattomia istuntoja", + "Show sessions, send anyway or cancel.": "Näytä istunnot, lähetä silti tai peruuta.", + "Sender session information": "Tietoa lähettäjän istunnosta", + "Enter your account password to confirm the upgrade:": "Syötä tilisi salasana vahvistaaksesi päivityksen:", + "Restore": "Palauta", + "Enter a passphrase": "Syötä salalause", + "Back up my encryption keys, securing them with the same passphrase": "Varmuuskopioi salausavaimeni, suojaten ne samalla salalauseella", + "Enter your passphrase a second time to confirm it.": "Syötä salalauseesi uudestaan vahvistaaksesi sen.", + "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Säilytä sitä turvallisessa paikassa, kuten salasanojen hallintaohjelmassa tai jopa kassakaapissa.", + "Your recovery key": "Palautusavaimesi", + "Make a copy of your recovery key": "Tee kopio palautusavaimestasi", + "You're done!": "Valmis!", + "Not currently indexing messages for any room.": "Minkään huoneen viestejä ei tällä hetkellä indeksoida.", + "Space used:": "Käytetty tila:", + "Indexed messages:": "Indeksoidut viestit:", + "Indexed rooms:": "Indeksoidut huoneet:", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s / %(totalRooms)s" } From d06fa6693f69c15d08db661aa49cfa01fb2018bb Mon Sep 17 00:00:00 2001 From: Jean-Abou-Samra Date: Sun, 15 Mar 2020 08:35:28 +0000 Subject: [PATCH 327/522] Translated using Weblate (French) Currently translated at 99.9% (2150 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 65 +++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index d46bd45d0f..635033c009 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -288,16 +288,16 @@ "Analytics": "Collecte de données", "Riot collects anonymous analytics to allow us to improve the application.": "Riot collecte des données anonymes qui nous permettent d’améliorer l’application.", "Passphrases must match": "Les phrases de passe doivent être identiques", - "Passphrase must not be empty": "La phrase de passe ne peut pas être vide", + "Passphrase must not be empty": "Le mot de passe ne peut pas être vide", "Export room keys": "Exporter les clés de salon", - "Enter passphrase": "Saisir la phrase de passe", - "Confirm passphrase": "Confirmer la phrase de passe", + "Enter passphrase": "Saisir le mot de passe", + "Confirm passphrase": "Confirmer le mot de passe", "Import room keys": "Importer les clés de salon", "File to import": "Fichier à importer", "This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Ce processus vous permet d’exporter dans un fichier local les clés pour les messages que vous avez reçus dans des salons chiffrés. Il sera ensuite possible d’importer ce fichier dans un autre client Matrix, afin de permettre à ce client de pouvoir déchiffrer ces messages.", "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "Le fichier exporté permettra à tous ceux qui peuvent le lire de déchiffrer tous les messages chiffrés auxquels vous avez accès, vous devez donc être vigilant et le stocker dans un endroit sûr. Afin de protéger ce fichier, saisissez ci-dessous une phrase secrète qui sera utilisée pour chiffrer les données exportées. Seule l’utilisation de la même phrase secrète permettra de déchiffrer et importer les données.", "This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Ce processus vous permet d’importer les clés de chiffrement que vous avez précédemment exportées depuis un autre client Matrix. Vous serez alors capable de déchiffrer n’importe quel message que l’autre client pouvait déchiffrer.", - "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Le fichier exporté est protégé par une phrase de passe. Vous devez saisir cette phrase de passe ici pour déchiffrer le fichier.", + "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Le fichier exporté sera protégé par un mot de passe. Vous devez saisir ce mot de passe ici, pour déchiffrer le fichier.", "You must join the room to see its files": "Vous devez rejoindre le salon pour voir ses fichiers", "Reject all %(invitedRooms)s invites": "Rejeter la totalité des %(invitedRooms)s invitations", "Failed to invite": "Échec de l’invitation", @@ -967,12 +967,12 @@ "Unable to load key backup status": "Impossible de charger l'état de sauvegarde des clés", "Backup version: ": "Version de la sauvegarde : ", "Algorithm: ": "Algorithme : ", - "Enter a passphrase...": "Saisissez une phrase de passe…", + "Enter a passphrase...": "Saisissez un mot de passe…", "Next": "Suivant", "That matches!": "Ça correspond !", "That doesn't match.": "Ça ne correspond pas.", "Go back to set it again.": "Retournez en arrière pour la redéfinir.", - "Repeat your passphrase...": "Répétez votre phrase de passe…", + "Repeat your passphrase...": "Répétez votre mot de passe…", "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Par précaution, vous pouvez l'utiliser pour restaurer l'historique de vos messages chiffrés si vous oubliez votre phrase de récupération.", "Your Recovery Key": "Votre clé de récupération", "Copy to clipboard": "Copier dans le presse-papier", @@ -1025,7 +1025,7 @@ "Names and surnames by themselves are easy to guess": "Les noms et prénoms seuls sont faciles à deviner", "Common names and surnames are easy to guess": "Les noms et prénoms répandus sont faciles à deviner", "Use a longer keyboard pattern with more turns": "Utilisez un schéma plus long et avec plus de variations", - "Great! This passphrase looks strong enough.": "Super ! Cette phrase de passe a l'air assez forte.", + "Great! This passphrase looks strong enough.": "Super ! Ce mot de passe a l'air assez fort.", "As a safety net, you can use it to restore your encrypted message history.": "En cas de problème, vous pouvez l'utiliser pour restaurer l'historique de vos messages chiffrés.", "Failed to load group members": "Échec du chargement des membres du groupe", "Failed to invite users to the room:": "Échec de l'invitation d'utilisateurs dans le salon :", @@ -1184,7 +1184,7 @@ "Create account": "Créer un compte", "Keep going...": "Continuer…", "Starting backup...": "Début de la sauvegarde…", - "A new recovery passphrase and key for Secure Messages have been detected.": "Une nouvelle phrase de passe et une nouvelle clé de récupération pour les messages sécurisés ont été détectées.", + "A new recovery passphrase and key for Secure Messages have been detected.": "Un nouveau mot de passe et une nouvelle clé de récupération pour les messages sécurisés ont été détectés.", "Recovery Method Removed": "Méthode de récupération supprimée", "If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Si vous n'avez pas supprimé la méthode de récupération, un attaquant peut être en train d'essayer d'accéder à votre compte. Modifiez le mot de passe de votre compte et configurez une nouvelle méthode de récupération dans les réglages.", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Le fichier \"%(fileName)s\" dépasse la taille limite autorisée par ce serveur pour les téléchargements", @@ -1263,7 +1263,7 @@ "Pin": "Épingle", "Recovery Key Mismatch": "La clé de récupération ne correspond pas", "Incorrect Recovery Passphrase": "Phrase de passe de récupération incorrecte", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "La sauvegarde n'a pas pu être déchiffrée avec cette phrase de passe : vérifiez que vous avez saisi la bonne phrase de passe de récupération.", + "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "La sauvegarde n'a pas pu être déchiffrée avec ce mot de passe : vérifiez que vous avez saisi le bon mot de passe de récupération.", "This homeserver would like to make sure you are not a robot.": "Ce serveur d'accueil veut s'assurer que vous n'êtes pas un robot.", "Change": "Changer", "Couldn't load page": "Impossible de charger la page", @@ -1290,14 +1290,14 @@ "Are you sure you want to sign out?": "Voulez-vous vraiment vous déconnecter ?", "Warning: you should only set up key backup from a trusted computer.": "Attention : vous ne devriez configurer la sauvegarde des clés que depuis un ordinateur de confiance.", "Hide": "Masquer", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Nous conserverons une copie chiffrée de vos clés sur notre serveur. Protégez votre sauvegarde avec une phrase de passe pour qu'elle reste sécurisée.", + "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Nous conserverons une copie chiffrée de vos clés sur notre serveur. Protégez votre sauvegarde avec un mot de passe pour qu'elle reste sécurisée.", "For maximum security, this should be different from your account password.": "Pour une sécurité maximale, ceci devrait être différent du mot de passe de votre compte.", "Set up with a Recovery Key": "Configurer une clé de récupération", - "Please enter your passphrase a second time to confirm.": "Veuillez saisir votre phrase de passe une seconde fois pour la confirmer.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Votre clé de récupération est une mesure de précaution. Vous pouvez l’utiliser pour restaurer l’accès à vos messages chiffrés si vous oubliez votre phrase de passe.", + "Please enter your passphrase a second time to confirm.": "Veuillez saisir votre mot de passe une seconde fois pour le confirmer.", + "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Votre clé de récupération est une mesure de précaution. Vous pouvez l’utiliser pour restaurer l’accès à vos messages chiffrés si vous oubliez votre mot de passe.", "Your keys are being backed up (the first backup could take a few minutes).": "Vous clés sont en cours de sauvegarde (la première sauvegarde peut prendre quelques minutes).", - "Secure your backup with a passphrase": "Protégez votre sauvegarde avec une phrase de passe", - "Confirm your passphrase": "Confirmez votre phrase de passe", + "Secure your backup with a passphrase": "Protégez votre sauvegarde avec un mot de passe", + "Confirm your passphrase": "Confirmez votre mot de passe", "Recovery key": "Clé de récupération", "Success!": "Terminé !", "Allow Peer-to-Peer for 1:1 calls": "Autoriser les connexions pair-à-pair pour les appels individuels", @@ -1843,10 +1843,10 @@ "Secret storage public key:": "Clé publique du coffre secret :", "in account data": "dans les données du compte", "Cross-signing": "Signature croisée", - "Enter secret storage passphrase": "Saisir la phrase de passe du coffre secret", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Impossible d’accéder au coffre secret. Vérifiez que vous avez saisi la bonne phrase de passe.", + "Enter secret storage passphrase": "Saisir le mot de passe du coffre secret", + "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Impossible d’accéder au coffre secret. Vérifiez que le mot de passe saisi est correct.", "Warning: You should only access secret storage from a trusted computer.": "Attention : Vous devriez uniquement accéder au coffre secret depuis un ordinateur de confiance.", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Si vous avez oublié votre phrase de passe, vous pouvez utiliser votre clé de récupération ou définir de nouvelles options de récupération.", + "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Si vous avez oublié votre mot de passe, vous pouvez utiliser votre clé de récupération ou définir de nouvelles options de récupération.", "Enter secret storage recovery key": "Saisir la clé de récupération du coffre secret", "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Impossible d’accéder au coffre secret. Vérifiez que vous avez saisi la bonne clé de récupération.", "If you've forgotten your recovery key you can .": "Si vous avez oublié votre clé de récupération vous pouvez .", @@ -1931,9 +1931,9 @@ "Reject & Ignore user": "Rejeter et ignorer l’utilisateur", "Enter your account password to confirm the upgrade:": "Saisissez le mot de passe de votre compte pour confirmer la mise à niveau :", "You'll need to authenticate with the server to confirm the upgrade.": "Vous devrez vous identifier avec le serveur pour confirmer la mise à niveau.", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Sécurisez vos clés de chiffrement avec une phrase de passe. Pour une sécurité maximale, elle devrait être différente du mot de passe de votre compte :", - "Enter a passphrase": "Saisissez une phrase de passe", - "Enter your passphrase a second time to confirm it.": "Saisissez votre phrase de passe une seconde fois pour la confirmer.", + "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Sécurisez vos clés de chiffrement avec un mot de passe. Pour une sécurité maximale, il devrait être différent du mot de passe de votre compte :", + "Enter a passphrase": "Saisissez un mot de passe", + "Enter your passphrase a second time to confirm it.": "Saisissez votre mot de passe une seconde fois pour le confirmer.", "Verify other users in their profile.": "Vérifiez d’autres utilisateurs dans leur profil.", "Upgrade your encryption": "Mettre à niveau votre chiffrement", "Set up encryption": "Configurer le chiffrement", @@ -2000,7 +2000,7 @@ "This wasn't me": "Ce n’était pas moi", "Your new session is now verified. Other users will see it as trusted.": "Votre nouvelle session est maintenant vérifiée. Les autres utilisateurs la verront comme fiable.", "Restore your key backup to upgrade your encryption": "Restaurez votre sauvegarde de clés pour mettre à niveau votre chiffrement", - "Back up my encryption keys, securing them with the same passphrase": "Sauvegarder mes clés de chiffrement, en les sécurisant avec la même phrase de passe", + "Back up my encryption keys, securing them with the same passphrase": "Sauvegarder mes clés de chiffrement, en les sécurisant avec le même mot de passe", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Il y a des sessions inconnues dans ce salon : si vous continuez sans les vérifier, quelqu’un pourra espionner votre appel.", "Unverified session": "Session non vérifiée", "Verifies a user, session, and pubkey tuple": "Vérifie un utilisateur, une session et une collection de clés publiques", @@ -2013,7 +2013,7 @@ "Show padlocks on invite only rooms": "Afficher des cadenas sur les salons accessibles uniquement par invitation", "Never send encrypted messages to unverified sessions from this session": "Ne jamais envoyer de messages chiffrés aux sessions non vérifiées depuis cette session", "Never send encrypted messages to unverified sessions in this room from this session": "Ne jamais envoyer des messages chiffrés aux sessions non vérifiées dans ce salon depuis cette session", - "Keep secret storage passphrase in memory for this session": "Conserver la phrase de passe du coffre secret en mémoire pour cette session", + "Keep secret storage passphrase in memory for this session": "Conserver le mot de passe du coffre secret en mémoire pour cette session", "Confirm the emoji below are displayed on both devices, in the same order:": "Confirmez que les émojis ci-dessous sont affichés sur les deux appareils, dans le même ordre :", "Verify this device by confirming the following number appears on its screen.": "Vérifiez cet appareil en confirmant que le nombre suivant apparaît sur son écran.", "To be secure, do this in person or use a trusted way to communicate.": "Pour être sûr, faites cela en personne ou utilisez un moyen de communication fiable.", @@ -2091,7 +2091,7 @@ "Room contains unknown sessions": "Le salon contient des sessions inconnues", "\"%(RoomName)s\" contains sessions that you haven't seen before.": "« %(RoomName)s » contient des sessions que vous n’avez jamais vues auparavant.", "Unknown sessions": "Sessions inconnues", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Accédez à l’historique de vos messages sécurisés et à votre identité de signature croisée pour vérifier d’autres sessions en renseignant votre phrase de passe.", + "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Accédez à l’historique de vos messages sécurisés et à votre identité de signature croisée pour vérifier d’autres sessions en renseignant votre mot de passe.", "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Accédez à l’historique de vos messages sécurisés et à votre identité de signature croisée pour vérifier d’autres sessions en renseignant votre clé de récupération.", "Message not sent due to unknown sessions being present": "Message non envoyé à cause de la présence de sessions inconnues", "Show sessions, send anyway or cancel.": "Afficher les sessions, envoyer quand même ou annuler.", @@ -2106,14 +2106,14 @@ "This session can now verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Cette session peut à présent vérifier d’autres sessions, ce qui leur permettra d’accéder aux messages chiffrés et de les marquer comme fiables pour les autres utilisateurs.", "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another session.": "Si vous ne configurez pas la récupération de messages sécurisée, vous ne pourrez pas restaurer l’historique de vos messages chiffrés si vous vous déconnectez ou si vous utilisez une autre session.", "This session is encrypting history using the new recovery method.": "Cette session chiffre l’historique en utilisant la nouvelle méthode de récupération.", - "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Cette session a détecté que votre phrase de passe et votre clé de récupération pour les messages chiffrés ont été supprimés.", + "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Cette session a détecté que votre mot de passe et votre clé de récupération pour les messages chiffrés ont été supprimés.", "Setting up keys": "Configuration des clés", "Verify yourself & others to keep your chats safe": "Vérifiez-vous et vérifiez les autres afin que vos discussions restent sûres", "You have not verified this user.": "Vous n’avez pas vérifié cet utilisateur.", "Recovery key mismatch": "La clé de récupération ne correspond pas", - "Incorrect recovery passphrase": "Phrase de passe de récupération incorrecte", + "Incorrect recovery passphrase": "Mot de passe de récupération incorrecte", "Backup restored": "Sauvegarde restaurée", - "Enter recovery passphrase": "Saisir la phrase de passe de récupération", + "Enter recovery passphrase": "Saisir le mot de passe de récupération", "Enter recovery key": "Saisir la clé de récupération", "Confirm your identity by entering your account password below.": "Confirmez votre identité en saisissant le mot de passe de votre compte ci-dessous.", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Gardez-en une copie en lieu sûr, comme un gestionnaire de mots de passe ou même un coffre.", @@ -2127,7 +2127,7 @@ "How fast should messages be downloaded.": "À quelle fréquence les messages doivent être téléchargés.", "of ": "sur ", "Message downloading sleep time(ms)": "Temps d’attente de téléchargement des messages (ms)", - "Cancel entering passphrase?": "Annuler la saisie de la phrase de passe ?", + "Cancel entering passphrase?": "Annuler la saisie du mot de passe ?", "If you cancel now, you won't complete your secret storage operation!": "Si vous annulez maintenant, vous ne terminerez pas votre opération du coffre secret !", "Indexed rooms:": "Salons indexés :", "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s sur %(totalRooms)s", @@ -2194,5 +2194,14 @@ "Alternative addresses for this room:": "Adresses alternatives pour ce salon :", "This room has no alternative addresses": "Ce salon n’a pas d’adresse alternative", "New address (e.g. #foo:domain)": "Nouvelle adresse (par ex. #foo:domaine)", - "Local addresses (unmoderated content)": "Adresses locales (contenu non modéré)" + "Local addresses (unmoderated content)": "Adresses locales (contenu non modéré)", + "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s a changé le nom du salon de %(oldRoomName)s en %(newRoomName)s.", + "%(senderName)s changed the addresses for this room.": "%(senderName)s a changé les adresses de ce salon.", + "Support adding custom themes": "Autoriser l'ajout de thèmes personnalisés", + "Invalid theme schema.": "Schéma du thème invalide.", + "Error downloading theme information.": "Une erreur s'est produite en téléchargeant les informations du thème.", + "Theme added!": "Thème ajouté !", + "Custom theme URL": "URL personnalisée pour le thème", + "Add theme": "Ajouter le thème", + "You don't have permission to delete the alias.": "Vous n'avez pas la permission de supprimer l'alias." } From edff8a916c73d2ed08d3e93ee399c61702f28b12 Mon Sep 17 00:00:00 2001 From: Jan Renz Date: Sun, 15 Mar 2020 21:59:48 +0000 Subject: [PATCH 328/522] Translated using Weblate (German) Currently translated at 77.4% (1666 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index c2f20305d6..636ee1e861 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -176,10 +176,10 @@ "%(targetName)s joined the room.": "%(targetName)s hat den Raum betreten.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s hat %(targetName)s gekickt.", "%(targetName)s left the room.": "%(targetName)s hat den Raum verlassen.", - "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für alle Raum-Mitglieder (ab dem Zeitpunkt, an dem sie eingeladen wurden).", - "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für alle Raum-Mitglieder (ab dem Zeitpunkt, an dem sie beigetreten sind).", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s hat den zukünftigen Chatverlauf für alle Raum-Mitglieder sichtbar gemacht (ab dem Zeitpunkt, an dem sie eingeladen wurden).", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s hat den zukünftigen Chatverlauf für alle Raum-Mitglieder sichtbar gemacht (ab dem Zeitpunkt, an dem sie beigetreten sind).", "%(senderName)s made future room history visible to all room members.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für: Alle Raum-Mitglieder.", - "%(senderName)s made future room history visible to anyone.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für Alle.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für: Alle.", "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s hat den zukünftigen Chatverlauf für Unbekannte sichtbar gemacht (%(visibility)s).", "Missing room_id in request": "Fehlende room_id in Anfrage", "Missing user_id in request": "Fehlende user_id in Anfrage", @@ -1468,10 +1468,10 @@ "check your browser plugins for anything that might block the identity server (such as Privacy Badger)": "Überprüfe deinen Browser auf Erweiterungen, die den Identitätsserver blockieren könnten (z.B. Privacy Badger)", "Error upgrading room": "Fehler beim Raum-Aufrüsten", "Double check that your server supports the room version chosen and try again.": "Überprüfe nochmal ob dein Server die ausgewählte Raumversion unterstützt und versuche es nochmal.", - "%(senderName)s placed a voice call.": "%(senderName)s tätigte einen Sprachanruf.", - "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s tätigte einen Sprachanruf (Nicht von diesem Browser unterstützt)", - "%(senderName)s placed a video call.": "%(senderName)s tätigte einen Videoanruf.", - "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s tätigte einen Videoanruf (Nicht von diesem Browser unterstützt)", + "%(senderName)s placed a voice call.": "%(senderName)s hat einen Sprachanruf getätigt.", + "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s hat einen Sprachanruf getätigt. (Nicht von diesem Browser unterstützt)", + "%(senderName)s placed a video call.": "%(senderName)s hat einen Sprachanruf getätigt.", + "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s hat einen Sprachanruf getätigt. (Nicht von diesem Browser unterstützt)", "Verify this session": "Sitzung verifizieren", "Set up encryption": "Verschlüsselung einrichten", "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s hat %(addedAddresses)s und %(count)s Adressen zu diesem Raum hinzugefügt", @@ -1711,5 +1711,7 @@ "Remove %(count)s messages|other": "%(count)s Nachrichten entfernen", "Remove %(count)s messages|one": "Eine Nachricht entfernen", "Remove recent messages": "Letzte Nachrichten entfernen", - "You're previewing %(roomName)s. Want to join it?": "Du betrachtest %(roomName)s. Willst du beitreten?" + "You're previewing %(roomName)s. Want to join it?": "Du betrachtest %(roomName)s. Willst du beitreten?", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s hat die alternative Adresse 2%(addresses)s für diesen Raum hinzugefügt.", + "%(senderName)s changed the addresses for this room.": "%(senderName)s hat die Adresse für diesen Raum geändert." } From c2e2894ab2d787972ffe25e97364bd1da63a6bc6 Mon Sep 17 00:00:00 2001 From: Szimszon Date: Fri, 13 Mar 2020 19:39:36 +0000 Subject: [PATCH 329/522] Translated using Weblate (Hungarian) Currently translated at 100.0% (2152 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index b37b18fe83..d1e7aeebe7 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2193,5 +2193,11 @@ "This room has no alternative addresses": "A szobának nincsen alternatív címe", "New address (e.g. #foo:domain)": "Új cím (pl.: #foo:domain)", "Local addresses (unmoderated content)": "Helyi cím (nem moderált tartalom)", - "You don't have permission to delete the alias.": "Ezt az alternatív nevet nincs jogod törölni." + "You don't have permission to delete the alias.": "Ezt az alternatív nevet nincs jogod törölni.", + "Support adding custom themes": "Egyedi téma támogatás hozzáadása", + "Invalid theme schema.": "Téma séma érvénytelen.", + "Error downloading theme information.": "A téma információk letöltése sikertelen.", + "Theme added!": "Téma hozzáadva!", + "Custom theme URL": "Egyedi téma URL", + "Add theme": "Téma hozzáadása" } From 7eb9f205e50b13b232beabf98bd2428939d8a187 Mon Sep 17 00:00:00 2001 From: random Date: Sat, 14 Mar 2020 10:25:02 +0000 Subject: [PATCH 330/522] Translated using Weblate (Italian) Currently translated at 100.0% (2152 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 4c111b2e68..8c61eda6e0 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2193,5 +2193,12 @@ "Alternative addresses for this room:": "Indirizzi alternativi per questa stanza:", "This room has no alternative addresses": "Questa stanza non ha indirizzi alternativi", "New address (e.g. #foo:domain)": "Nuovo indirizzo (es. #abc:dominio)", - "Local addresses (unmoderated content)": "Indirizzi locali (contenuto non moderato)" + "Local addresses (unmoderated content)": "Indirizzi locali (contenuto non moderato)", + "Support adding custom themes": "Supporta l'aggiunta di temi personalizzati", + "Invalid theme schema.": "Schema del tema non valido.", + "Error downloading theme information.": "Errore scaricando informazioni sul tema.", + "Theme added!": "Tema aggiunto!", + "Custom theme URL": "URL tema personalizzato", + "Add theme": "Aggiungi tema", + "You don't have permission to delete the alias.": "Non hai l'autorizzazione per eliminare l'alias." } From a19b67b97053c4ea86a1635fa123eb0e86b26915 Mon Sep 17 00:00:00 2001 From: call_xz Date: Sun, 15 Mar 2020 21:36:10 +0000 Subject: [PATCH 331/522] Translated using Weblate (Japanese) Currently translated at 54.6% (1176 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ja/ --- src/i18n/strings/ja.json | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index c142cc2a0e..6aaa03a0ff 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -207,7 +207,7 @@ "Answer Anyway": "とにかく応答", "Call Anyway": "とにかく通話", "Call Timeout": "通話タイムアウト", - "The remote side failed to pick up": "相手が応答しなかった", + "The remote side failed to pick up": "相手が応答しませんでした", "Unable to capture screen": "画面をキャプチャできません", "Existing Call": "既存の通話", "You are already in a call.": "すでに通話中です。", @@ -346,14 +346,14 @@ "(unknown failure: %(reason)s)": "(不明なエラー: %(reason)s)", "%(senderName)s ended the call.": "%(senderName)s が通話を終了しました。", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s は部屋に加わるよう %(targetDisplayName)s に招待状を送りました。", - "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s は、部屋のメンバー全員に招待された時点からの部屋履歴を参照できるようにしました。", - "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s は、部屋のメンバー全員に参加した時点からの部屋履歴を参照できるようにしました。", - "%(senderName)s made future room history visible to all room members.": "%(senderName)s は、部屋のメンバー全員に部屋履歴を参照できるようにしました。", - "%(senderName)s made future room history visible to anyone.": "%(senderName)s は、部屋履歴を誰でも参照できるようにしました。", - "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s は 見知らぬ (%(visibility)s) に部屋履歴を参照できるようにしました。", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s が、部屋のメンバー全員に招待された時点からの部屋履歴を参照できるようにしました。", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s が、部屋のメンバー全員に参加した時点からの部屋履歴を参照できるようにしました。", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s が、部屋のメンバー全員に部屋履歴を参照できるようにしました。", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s が、部屋履歴を誰でも参照できるようにしました。", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s が、見知らぬ (%(visibility)s) に部屋履歴を参照できるようにしました。", "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s は %(fromPowerLevel)s から %(toPowerLevel)s", - "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s は %(powerLevelDiffText)s の権限レベルを変更しました。", - "%(senderName)s changed the pinned messages for the room.": "%(senderName)s は、その部屋の固定メッセージを変更しました。", + "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s が %(powerLevelDiffText)s の権限レベルを変更しました。", + "%(senderName)s changed the pinned messages for the room.": "%(senderName)s が、部屋の固定メッセージを変更しました。", "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s ウィジェットは %(senderName)s によって変更されました", "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s ウィジェットが %(senderName)s によって追加されました", "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s ウィジェットが %(senderName)s によって削除されました", @@ -403,7 +403,7 @@ "Confirm password": "確認のパスワード", "Authentication": "認証", "Device ID": "端末ID", - "Last seen": "最後に表示した時刻", + "Last seen": "最近の使用履歴", "Failed to set display name": "表示名の設定に失敗しました", "Disable Notifications": "通知を無効にする", "Enable Notifications": "通知を有効にする", @@ -1139,7 +1139,7 @@ "Bug reporting": "バグの報告", "FAQ": "よくある質問", "Versions": "バージョン", - "Key backup": "キーのバックアップ", + "Key backup": "鍵のバックアップ", "Voice & Video": "音声とビデオ", "Remove recent messages": "最近のメッセージを削除する", "%(creator)s created and configured the room.": "%(creator)s が部屋を作成して構成しました。", @@ -1185,5 +1185,19 @@ "Encryption enabled": "暗号化が有効です", "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "この部屋内のメッセージはエンドツーエンドで暗号化されます。詳細およびユーザーの検証に関しては各ユーザーのプロフィールをご確認ください。", "Encryption not enabled": "暗号化が無効です", - "The encryption used by this room isn't supported.": "この部屋では暗号化の使用がサポートされていません。" + "The encryption used by this room isn't supported.": "この部屋では暗号化の使用がサポートされていません。", + "Cross-signing public keys:": "クロス署名公開鍵:", + "Cross-signing private keys:": "クロス署名秘密鍵:", + "Delete %(count)s sessions|other": "%(count)s 件のセッションを削除", + "Delete %(count)s sessions|one": "%(count)s 件のセッションを削除", + "ID": "ID", + "Clear cache and reload": "キャッシュを削除して再読み込み", + "Session ID:": "セッションID:", + "Session key:": "セッション鍵:", + "Cross-signing": "クロス署名", + "Sessions": "セッション", + "A session's public name is visible to people you communicate with": "各セッションの公開名は、あなたの連絡先のユーザーが閲覧できます。", + "Session name": "セッション名", + "Session key": "セッション鍵", + "Sender session information": "送信者のセッション情報" } From acd3087b0ff6796f525f9ba3b66e2ca717864008 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Mon, 16 Mar 2020 02:46:31 +0000 Subject: [PATCH 332/522] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2152 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 2df131f757..6ab657ee72 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2202,5 +2202,6 @@ "Error downloading theme information.": "下載佈景主題資訊時發生錯誤。", "Theme added!": "已新增佈景主題!", "Custom theme URL": "自訂佈景主題 URL", - "Add theme": "新增佈景主題" + "Add theme": "新增佈景主題", + "Review Sessions": "檢閱工作階段" } From 7510ac72f533929bc2ee86dc2eba7881872730f8 Mon Sep 17 00:00:00 2001 From: call_xz Date: Sun, 15 Mar 2020 22:32:52 +0000 Subject: [PATCH 333/522] Translated using Weblate (Japanese) Currently translated at 56.4% (1214 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ja/ --- src/i18n/strings/ja.json | 59 +++++++++++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index 6aaa03a0ff..6be319d794 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -25,7 +25,7 @@ "Failed to change password. Is your password correct?": "パスワード変更に失敗しました。パスワードは正しいですか?", "Only people who have been invited": "この部屋に招待された人のみ参加可能", "Always show message timestamps": "発言時刻を常に表示", - "Filter room members": "部屋メンバーの絞り込み", + "Filter room members": "部屋メンバーを検索", "Show timestamps in 12 hour format (e.g. 2:30pm)": "発言時刻を12時間形式で表示 (例 2:30PM)", "Upload avatar": "アイコン画像を変更", "Upload file": "添付ファイル送信", @@ -71,7 +71,7 @@ "Analytics": "分析", "The information being sent to us to help make Riot.im better includes:": "Riot.imをよりよくするために私達に送信される情報は以下を含みます:", "Thursday": "木曜日", - "Messages in one-to-one chats": "一対一のチャットでのメッセージ", + "Messages in one-to-one chats": "1対1のチャットでのメッセージ", "A new version of Riot is available.": "新しいバージョンのRiotが利用可能です。", "All Rooms": "全ての部屋", "You cannot delete this message. (%(code)s)": "あなたはこの発言を削除できません (%(code)s)", @@ -86,7 +86,7 @@ "Set Password": "パスワードを設定", "Sorry, your browser is not able to run Riot.": "申し訳ありません。あなたのブラウザではRiotは動作できません。", "Monday": "月曜日", - "Messages in group chats": "グループチャットのメッセージ", + "Messages in group chats": "グループチャットでのメッセージ", "Friday": "金曜日", "All messages (noisy)": "全ての発言(通知音あり)", "Yesterday": "昨日", @@ -383,9 +383,9 @@ "Enable widget screenshots on supported widgets": "サポートされているウィジェットでウィジェットのスクリーンショットを有効にする", "Active call (%(roomName)s)": "アクティブな通話 (%(roomName)s)", "unknown caller": "不明な発信者", - "Incoming voice call from %(name)s": "%(name)s からの着信音声コール", - "Incoming video call from %(name)s": "%(name)s からの着信ビデオコール", - "Incoming call from %(name)s": "%(name)s からの着信コール", + "Incoming voice call from %(name)s": "%(name)s からの音声通話の着信", + "Incoming video call from %(name)s": "%(name)s からのビデオ通話の着信", + "Incoming call from %(name)s": "%(name)s からの通話の着信", "Decline": "辞退", "Accept": "受諾", "Incorrect verification code": "認証コードの誤りです", @@ -485,7 +485,7 @@ "Idle": "アイドル", "Offline": "オフライン", "Unknown": "未知の", - "Seen by %(userName)s at %(dateTime)s": "%(dateTime)s に %(userName)s が見た", + "Seen by %(userName)s at %(dateTime)s": "%(dateTime)s に %(userName)s が閲覧", "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "%(dateTime)s に %(displayName)s (%(userName)s) が見た", "Replying": "返信中", "Save": "保存", @@ -755,7 +755,7 @@ "To get started, please pick a username!": "開始するには、ユーザー名を選んでください!", "This will be your account name on the homeserver, or you can pick a different server.": "これはホームサーバー上のアカウント名ですが、別のサーバーを選択することもできます。", "If you already have a Matrix account you can log in instead.": "すでにMatrixアカウントをお持ちの場合は、代わりにログインすることができます。", - "Share Room": "共有部屋", + "Share Room": "部屋を共有", "Link to most recent message": "最新のメッセージへのリンク", "Share User": "ユーザーを共有", "Share Community": "コミュニティを共有", @@ -1077,7 +1077,7 @@ "Roles & Permissions": "役割と権限", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "誰が履歴を読み取れるかに関する変更は、今後送信されるメッセージにのみ適用されます。既に存在する履歴の表示は変更されません。", "Encryption": "暗号化", - "Once enabled, encryption cannot be disabled.": "もし有効化された場合、二度と無効化できません。", + "Once enabled, encryption cannot be disabled.": "暗号化は一度有効にすると、二度と無効にできません。", "Encrypted": "暗号化", "Email Address": "メールアドレス", "Main address": "メインアドレス", @@ -1199,5 +1199,44 @@ "A session's public name is visible to people you communicate with": "各セッションの公開名は、あなたの連絡先のユーザーが閲覧できます。", "Session name": "セッション名", "Session key": "セッション鍵", - "Sender session information": "送信者のセッション情報" + "Sender session information": "送信者のセッション情報", + "Never send encrypted messages to unverified sessions from this session": "このセッションでは、未検証のセッションに対して暗号化されたメッセージを送信しない", + "Never send encrypted messages to unverified sessions in this room from this session": "このセッションでは、この部屋の未検証のセッションに対して暗号化されたメッセージを送信しない", + "Encrypted messages in one-to-one chats": "1対1のチャットでの暗号化されたメッセージ", + "Encrypted messages in group chats": "グループチャットでの暗号化されたメッセージ", + "Upload": "アップロード", + "Enable desktop notifications for this session": "このセッションでデスクトップ通知を行う", + "Email addresses": "メールアドレス", + "This room is end-to-end encrypted": "この部屋はエンドツーエンド暗号化されています", + "Some sessions for this user are not trusted": "このユーザーの一部のセッションは信頼されていません", + "All sessions for this user are trusted": "このユーザーの全てのセッションを信頼しています", + "Some sessions in this encrypted room are not trusted": "この暗号化された部屋の一部のセッションは信頼されていません", + "All sessions in this encrypted room are trusted": "この暗号化された部屋の全てのセッションを信頼しています", + "Encrypted by an unverified session": "未検証のセッションによる暗号化", + "Close preview": "プレビューを閉じる", + "Direct Messages": "ダイレクトメッセージ", + "Loading …": "読み込み中 …", + "Direct message": "ダイレクトメッセージ", + "Your display name": "あなたの表示名", + "Power level": "権限レベル", + "Removing…": "削除中…", + "Destroy cross-signing keys?": "クロス署名鍵を破棄してよろしいですか?", + "Clear cross-signing keys": "クロス署名鍵を削除", + "Clear all data in this session?": "このセッションの全てのデータを削除してよろしいですか?", + "Clear all data": "全てのデータを削除", + "Create a public room": "公開された部屋を作成", + "Make this room public": "この部屋を公開する", + "Loading session info...": "セッション情報を読み込み中...", + "Message edits": "メッセージの編集履歴", + "Report Content to Your Homeserver Administrator": "あなたのホームサーバーの管理者にコンテンツを報告", + "Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "このメッセージを報告すると、このメッセージの一意の「イベントID」があなたのホームサーバーの管理者に送信されます。この部屋内のメッセージが暗号化されている場合、ホームサーバーの管理者はメッセージのテキストを読んだり、ファイルや画像を表示することはできません。", + "Send report": "報告を送信する", + "Sign out and remove encryption keys?": "ログアウトおよび暗号鍵の削除を実行してよろしいですか?", + "Terms of Service": "利用規約", + "To continue you need to accept the terms of this service.": "続行するには、このサービスの利用規約に同意する必要があります。", + "Report Content": "コンテンツを報告", + "Hide": "隠す", + "Help": "ヘルプ", + "Filter rooms…": "部屋を検索…", + "Preview": "プレビュー" } From 6f27c4c17af4e47272ff21815c57b35da9d23456 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 16 Mar 2020 11:45:51 +0000 Subject: [PATCH 334/522] s/Server address/Server name/ Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/directory/NetworkDropdown.js | 4 ++-- src/i18n/strings/en_EN.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js index 6d1501ca57..e56cfcf185 100644 --- a/src/components/views/directory/NetworkDropdown.js +++ b/src/components/views/directory/NetworkDropdown.js @@ -53,7 +53,7 @@ const validServer = withValidation({ { key: "required", test: async ({ value }) => !!value, - invalid: () => _t("Enter a server address"), + invalid: () => _t("Enter a server name"), }, { key: "available", final: true, @@ -216,7 +216,7 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se description: _t("Enter the address of a new server you want to explore."), button: _t("Add"), hasCancel: false, - placeholder: _t("Server address"), + placeholder: _t("Server name"), validator: validServer, }); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 3f20d4ec61..e990f76519 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1437,7 +1437,7 @@ "And %(count)s more...|other": "And %(count)s more...", "ex. @bob:example.com": "ex. @bob:example.com", "Add User": "Add User", - "Enter a server address": "Enter a server address", + "Enter a server name": "Enter a server name", "Looks good": "Looks good", "Can't find this server or its room list": "Can't find this server or its room list", "All rooms": "All rooms", @@ -1447,7 +1447,7 @@ "Matrix": "Matrix", "Add a new server": "Add a new server", "Enter the address of a new server you want to explore.": "Enter the address of a new server you want to explore.", - "Server address": "Server address", + "Server name": "Server name", "Add a new server...": "Add a new server...", "%(networkName)s rooms": "%(networkName)s rooms", "Matrix rooms": "Matrix rooms", From 82a37ba0ad429c09c101e175dd0650773dd67a2d Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 16 Mar 2020 12:00:56 +0000 Subject: [PATCH 335/522] Fix styling of NetworkDropdown dialogs Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/directory/_NetworkDropdown.scss | 4 ++++ src/components/views/dialogs/QuestionDialog.js | 6 +++++- src/components/views/dialogs/TextInputDialog.js | 6 +++++- src/components/views/directory/NetworkDropdown.js | 6 ++++-- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/res/css/views/directory/_NetworkDropdown.scss b/res/css/views/directory/_NetworkDropdown.scss index b23af0b2a0..e60c481e45 100644 --- a/res/css/views/directory/_NetworkDropdown.scss +++ b/res/css/views/directory/_NetworkDropdown.scss @@ -157,3 +157,7 @@ limitations under the License. font-size: 12px; } } + +.mx_NetworkDropdown_dialog .mx_Dialog { + width: 557px; +} diff --git a/src/components/views/dialogs/QuestionDialog.js b/src/components/views/dialogs/QuestionDialog.js index 8cb16dd88f..07a1eae5d5 100644 --- a/src/components/views/dialogs/QuestionDialog.js +++ b/src/components/views/dialogs/QuestionDialog.js @@ -33,6 +33,7 @@ export default createReactClass({ onFinished: PropTypes.func.isRequired, headerImage: PropTypes.string, quitOnly: PropTypes.bool, // quitOnly doesn't show the cancel button just the quit [x]. + fixedWidth: PropTypes.bool, }, getDefaultProps: function() { @@ -63,11 +64,14 @@ export default createReactClass({ primaryButtonClass = "danger"; } return ( -
{ this.props.description } diff --git a/src/components/views/dialogs/TextInputDialog.js b/src/components/views/dialogs/TextInputDialog.js index e56e9f2b87..b9f6f6ebce 100644 --- a/src/components/views/dialogs/TextInputDialog.js +++ b/src/components/views/dialogs/TextInputDialog.js @@ -35,6 +35,7 @@ export default createReactClass({ onFinished: PropTypes.func.isRequired, hasCancel: PropTypes.bool, validator: PropTypes.func, // result of withValidation + fixedWidth: PropTypes.bool, }, getDefaultProps: function() { @@ -102,8 +103,11 @@ export default createReactClass({ const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog'); const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); return ( -
diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js index e56cfcf185..85d72e33f0 100644 --- a/src/components/views/directory/NetworkDropdown.js +++ b/src/components/views/directory/NetworkDropdown.js @@ -169,7 +169,8 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se b: serverName => { serverName }, }), button: _t("Remove"), - }); + fixedWidth: false, + }, "mx_NetworkDropdown_dialog"); const [ok] = await finished; if (!ok) return; @@ -218,7 +219,8 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se hasCancel: false, placeholder: _t("Server name"), validator: validServer, - }); + fixedWidth: false, + }, "mx_NetworkDropdown_dialog"); const [ok, newServer] = await finished; if (!ok) return; From 454b32400dbc9d190dc594ebf3115bfe9e8cb277 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 16 Mar 2020 12:12:59 +0000 Subject: [PATCH 336/522] improve width Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/directory/_NetworkDropdown.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/css/views/directory/_NetworkDropdown.scss b/res/css/views/directory/_NetworkDropdown.scss index e60c481e45..106392f880 100644 --- a/res/css/views/directory/_NetworkDropdown.scss +++ b/res/css/views/directory/_NetworkDropdown.scss @@ -159,5 +159,5 @@ limitations under the License. } .mx_NetworkDropdown_dialog .mx_Dialog { - width: 557px; + width: 45vw; } From eabaf5801388e40cba45322335be01d765472cbb Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 16 Mar 2020 12:20:52 +0000 Subject: [PATCH 337/522] Add local-echo Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../views/directory/NetworkDropdown.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js index 85d72e33f0..425b951929 100644 --- a/src/components/views/directory/NetworkDropdown.js +++ b/src/components/views/directory/NetworkDropdown.js @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React from 'react'; +import React, {useEffect, useState} from 'react'; import PropTypes from 'prop-types'; import {MatrixClientPeg} from '../../../MatrixClientPeg'; @@ -84,7 +84,8 @@ const validServer = withValidation({ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, selectedInstanceId}) => { const [menuDisplayed, handle, openMenu, closeMenu] = useContextMenu(); - const userDefinedServers = useSettingValue(SETTING_NAME); + const _userDefinedServers = useSettingValue(SETTING_NAME); + const [userDefinedServers, _setUserDefinedServers] = useState(_userDefinedServers); const handlerFactory = (server, instanceId) => { return () => { @@ -93,6 +94,15 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se }; }; + const setUserDefinedServers = servers => { + _setUserDefinedServers(servers); + SettingsStore.setValue(SETTING_NAME, null, "account", servers); + }; + // keep local echo up to date with external changes + useEffect(() => { + _setUserDefinedServers(_userDefinedServers); + }, [_userDefinedServers]); + // we either show the button or the dropdown in its place. let content; if (menuDisplayed) { @@ -176,7 +186,7 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se if (!ok) return; // delete from setting - SettingsStore.setValue(SETTING_NAME, null, "account", servers.filter(s => s !== server)); + setUserDefinedServers(servers.filter(s => s !== server)); // the selected server is being removed, reset to our HS if (serverSelected === server) { @@ -226,8 +236,7 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se if (!ok) return; if (!userDefinedServers.includes(newServer)) { - const servers = [...userDefinedServers, newServer]; - SettingsStore.setValue(SETTING_NAME, null, "account", servers); + setUserDefinedServers([...userDefinedServers, newServer]); } onOptionChange(newServer); // change filter to the new server From 78543da7f4bb989499bbfac56d7ec27d21164177 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 16 Mar 2020 12:28:20 +0000 Subject: [PATCH 338/522] Fix missed copy Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/directory/NetworkDropdown.js | 2 +- src/i18n/strings/en_EN.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js index 425b951929..2fabda1a74 100644 --- a/src/components/views/directory/NetworkDropdown.js +++ b/src/components/views/directory/NetworkDropdown.js @@ -224,7 +224,7 @@ const NetworkDropdown = ({onOptionChange, protocols = {}, selectedServerName, se const TextInputDialog = sdk.getComponent("dialogs.TextInputDialog"); const { finished } = Modal.createTrackedDialog("Network Dropdown", "Add a new server", TextInputDialog, { title: _t("Add a new server"), - description: _t("Enter the address of a new server you want to explore."), + description: _t("Enter the name of a new server you want to explore."), button: _t("Add"), hasCancel: false, placeholder: _t("Server name"), diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index e990f76519..a14e275a51 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1446,7 +1446,7 @@ "Remove server": "Remove server", "Matrix": "Matrix", "Add a new server": "Add a new server", - "Enter the address of a new server you want to explore.": "Enter the address of a new server you want to explore.", + "Enter the name of a new server you want to explore.": "Enter the name of a new server you want to explore.", "Server name": "Server name", "Add a new server...": "Add a new server...", "%(networkName)s rooms": "%(networkName)s rooms", From 7239f5149a02db6e62e28eae2149ae3cc60bd26d Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Mon, 16 Mar 2020 12:00:18 +0000 Subject: [PATCH 339/522] Translated using Weblate (Albanian) Currently translated at 99.7% (2145 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index a5f896bc43..2a89531c03 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2191,5 +2191,6 @@ "Alternative addresses for this room:": "Adresa alternative për këtë dhomë:", "This room has no alternative addresses": "Kjo dhomë nuk ka adresa alternative", "New address (e.g. #foo:domain)": "Adresë e re (p.sh., #foo:domain)", - "Local addresses (unmoderated content)": "Adresa vendore (lëndë e pamoderuar)" + "Local addresses (unmoderated content)": "Adresa vendore (lëndë e pamoderuar)", + "Review Sessions": "Shqyrtoni Sesione" } From 5d5d28df40282b3e86a0ac278f72e4874fdd28f0 Mon Sep 17 00:00:00 2001 From: Michael Albert Date: Mon, 16 Mar 2020 15:09:14 +0000 Subject: [PATCH 340/522] Translated using Weblate (German) Currently translated at 77.6% (1669 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 636ee1e861..4a81253308 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1688,7 +1688,7 @@ "Your homeserver does not support session management.": "Dein Heimserver unterstützt keine Sitzungsverwaltung.", "Unable to load session list": "Sitzungsliste kann nicht geladen werden", "Delete %(count)s sessions|one": "%(count)s Sitzung löschen", - "This session is backing up your keys. ": "Diese Sitzung sichert deine Schlüssel.", + "This session is backing up your keys. ": "Diese Sitzung sichert deine Schlüssel. ", "Connect this session to Key Backup": "Diese Sitzung mit der Schlüsselsicherung verbinden", "Backup has a signature from unknown session with ID %(deviceId)s": "Die Sicherung hat eine Signatur von einer unbekannten Sitzung mit der ID %(deviceId)s", "Backup has a valid signature from this session": "Die Sicherung hat eine gültige Signatur von dieser Sitzung", @@ -1713,5 +1713,8 @@ "Remove recent messages": "Letzte Nachrichten entfernen", "You're previewing %(roomName)s. Want to join it?": "Du betrachtest %(roomName)s. Willst du beitreten?", "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s hat die alternative Adresse 2%(addresses)s für diesen Raum hinzugefügt.", - "%(senderName)s changed the addresses for this room.": "%(senderName)s hat die Adresse für diesen Raum geändert." + "%(senderName)s changed the addresses for this room.": "%(senderName)s hat die Adresse für diesen Raum geändert.", + "Review Sessions": "Sitzungen überprüfen", + "Displays information about a user": "Zeigt Informationen über einen Benutzer", + "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s hat den Raumnamen von %(oldRoomName)s zu %(newRoomName)s geändert." } From 639f20e37a8eb81df3acdcda84294b899f9949ef Mon Sep 17 00:00:00 2001 From: Jan Renz Date: Mon, 16 Mar 2020 15:10:58 +0000 Subject: [PATCH 341/522] Translated using Weblate (German) Currently translated at 77.6% (1669 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 4a81253308..3ef5b09a89 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1716,5 +1716,6 @@ "%(senderName)s changed the addresses for this room.": "%(senderName)s hat die Adresse für diesen Raum geändert.", "Review Sessions": "Sitzungen überprüfen", "Displays information about a user": "Zeigt Informationen über einen Benutzer", - "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s hat den Raumnamen von %(oldRoomName)s zu %(newRoomName)s geändert." + "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s hat den Raumnamen von %(oldRoomName)s zu %(newRoomName)s geändert.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s hat die alternative Adresse %(addresses)s für diesen Raum hinzugefügt." } From 26f62039852260912cbe99f4ff6712a0f55b12db Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 17:27:06 +0100 Subject: [PATCH 342/522] move room publish toggle below canonical alias also to own component to not contaminate alias settings too much with this --- .../views/room_settings/AliasSettings.js | 2 + .../views/room_settings/RoomPublishSetting.js | 60 +++++++++++++++++++ .../tabs/room/GeneralRoomSettingsTab.js | 31 ---------- 3 files changed, 62 insertions(+), 31 deletions(-) create mode 100644 src/components/views/room_settings/RoomPublishSetting.js diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index eab41c5ccd..57dfa16ada 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -25,6 +25,7 @@ import Field from "../elements/Field"; import ErrorDialog from "../dialogs/ErrorDialog"; import AccessibleButton from "../elements/AccessibleButton"; import Modal from "../../../Modal"; +import RoomPublishSetting from "./RoomPublishSetting"; class EditableAliasesList extends EditableItemList { constructor(props) { @@ -356,6 +357,7 @@ export default class AliasSettings extends React.Component { return (
{canonicalAliasSection} + {this._getLocalNonAltAliases().map(alias => { return
-
- -
- {_t("Flair")}
Date: Mon, 16 Mar 2020 17:28:45 +0100 Subject: [PATCH 343/522] add headers and copy to lessen confusion of new alias workings --- src/components/views/room_settings/AliasSettings.js | 9 +++++++-- .../views/settings/tabs/room/GeneralRoomSettingsTab.js | 3 ++- src/i18n/strings/en_EN.json | 10 +++++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 57dfa16ada..34e07e31dc 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -356,6 +356,9 @@ export default class AliasSettings extends React.Component { return (
+ {_t("Published Addresses")} +

{_t("Published addresses can be used by anyone on any server to join your room. " + + "To publish an address it needs to be set as a local address first.")}

{canonicalAliasSection} @@ -374,12 +377,14 @@ export default class AliasSettings extends React.Component { onItemAdded={this.onAltAliasAdded} onItemRemoved={this.onAltAliasDeleted} suggestionsListId="mx_AliasSettings_altRecommendations" - itemsLabel={_t('Alternative addresses for this room:')} - noItemsLabel={_t('This room has no alternative addresses')} + itemsLabel={_t('Other published addresses:')} + noItemsLabel={_t('No other published addresses yet, add one below')} placeholder={_t( 'New address (e.g. #foo:domain)', )} /> + {_t("Local Addresses")} +

{_t("Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)", {localDomain})}

{_t('Local addresses (unmoderated content)')} {localAliasesList} diff --git a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js index 5aface4f3b..99882ae400 100644 --- a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js @@ -68,12 +68,13 @@ export default class GeneralRoomSettingsTab extends React.Component {
- {_t("Room Addresses")} +
{_t("Room Addresses")}
+
{_t("Other")}
{_t("Flair")}
Learn more.": "This room isn’t bridging messages to any platforms. Learn more.", "Bridges": "Bridges", "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", "Uploaded sound": "Uploaded sound", "Sounds": "Sounds", @@ -1164,9 +1163,13 @@ "not specified": "not specified", "This room has no local addresses": "This room has no local addresses", "New address (e.g. #foo:%(localDomain)s)": "New address (e.g. #foo:%(localDomain)s)", - "Alternative addresses for this room:": "Alternative addresses for this room:", - "This room has no alternative addresses": "This room has no alternative addresses", + "Published Addresses": "Published Addresses", + "Published addresses can be used by anyone on any server to join your room. To publish an address it needs to be set as a local address first.": "Published addresses can be used by anyone on any server to join your room. To publish an address it needs to be set as a local address first.", + "Other published addresses:": "Other published addresses:", + "No other published addresses yet, add one below": "No other published addresses yet, add one below", "New address (e.g. #foo:domain)": "New address (e.g. #foo:domain)", + "Local Addresses": "Local Addresses", + "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)", "Local addresses (unmoderated content)": "Local addresses (unmoderated content)", "Error updating flair": "Error updating flair", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.", @@ -1178,6 +1181,7 @@ "Room Name": "Room Name", "Room Topic": "Room Topic", "Room avatar": "Room avatar", + "Publish this room to the public in %(domain)s's room directory?": "Publish this room to the public in %(domain)s's room directory?", "You have enabled URL previews by default.": "You have enabled URL previews by default.", "You have disabled URL previews by default.": "You have disabled URL previews by default.", "URL previews are enabled by default for participants in this room.": "URL previews are enabled by default for participants in this room.", From f7eecc09212d3b6550ce61983c4323665ee6fa14 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 17:29:15 +0100 Subject: [PATCH 344/522] avoid double margin-right for toggle --- res/css/views/settings/tabs/_SettingsTab.scss | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/res/css/views/settings/tabs/_SettingsTab.scss b/res/css/views/settings/tabs/_SettingsTab.scss index 9727946893..64d6f04711 100644 --- a/res/css/views/settings/tabs/_SettingsTab.scss +++ b/res/css/views/settings/tabs/_SettingsTab.scss @@ -49,9 +49,15 @@ limitations under the License. margin-bottom: 24px; } -.mx_SettingsTab_section .mx_SettingsFlag { - margin-right: 100px; - margin-bottom: 10px; +.mx_SettingsTab_section { + .mx_SettingsFlag { + margin-right: 100px; + margin-bottom: 10px; + } + + &.mx_SettingsTab_subsectionText .mx_SettingsFlag { + margin-right: 0px !important; + } } .mx_SettingsTab_section .mx_SettingsFlag .mx_SettingsFlag_label { From db10fcd2b7e936c892f8c24d7fa37edc22d68b6f Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 17:29:35 +0100 Subject: [PATCH 345/522] make editable list look like something closer to design --- res/css/views/elements/_EditableItemList.scss | 16 +++++++++++++++- .../views/elements/EditableItemList.js | 3 +-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/res/css/views/elements/_EditableItemList.scss b/res/css/views/elements/_EditableItemList.scss index 51fa4c4423..ef60f006cc 100644 --- a/res/css/views/elements/_EditableItemList.scss +++ b/res/css/views/elements/_EditableItemList.scss @@ -20,14 +20,21 @@ limitations under the License. } .mx_EditableItem { + display: flex; margin-bottom: 5px; - margin-left: 15px; } .mx_EditableItem_delete { + order: 3; margin-right: 5px; cursor: pointer; vertical-align: middle; + width: 14px; + height: 14px; + mask-image: url('$(res)/img/feather-customised/cancel.svg'); + mask-repeat: no-repeat; + background-color: $warning-color; + mask-size: 100%; } .mx_EditableItem_email { @@ -36,12 +43,19 @@ limitations under the License. .mx_EditableItem_promptText { margin-right: 10px; + order: 2; } .mx_EditableItem_confirmBtn { margin-right: 5px; } +.mx_EditableItem_item { + flex: auto 1 0; + order: 1; +} + .mx_EditableItemList_label { margin-bottom: 5px; } + diff --git a/src/components/views/elements/EditableItemList.js b/src/components/views/elements/EditableItemList.js index ae3473ef0d..6e649e777a 100644 --- a/src/components/views/elements/EditableItemList.js +++ b/src/components/views/elements/EditableItemList.js @@ -78,8 +78,7 @@ export class EditableItem extends React.Component { return (
- {_t("Remove")} +
{this.props.value}
); From 78fb95aa9e1e88251a16a723e38ffadb07f82d76 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 18:24:49 +0100 Subject: [PATCH 346/522] change
appearance for local aliases --- res/css/views/room_settings/_AliasSettings.scss | 8 ++++++++ src/components/views/room_settings/AliasSettings.js | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/res/css/views/room_settings/_AliasSettings.scss b/res/css/views/room_settings/_AliasSettings.scss index 294902a1f0..8ae3acbbd3 100644 --- a/res/css/views/room_settings/_AliasSettings.scss +++ b/res/css/views/room_settings/_AliasSettings.scss @@ -29,4 +29,12 @@ limitations under the License. .mx_AliasSettings summary { cursor: pointer; + color: $accent-color; + font-weight: 600; + list-style: none; + + // list-style doesn't do it for webkit + &::-webkit-details-marker { + display: none; + } } diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 34e07e31dc..e8fc700d50 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -98,6 +98,7 @@ export default class AliasSettings extends React.Component { canonicalAlias: null, // #canonical:domain.tld updatingCanonicalAlias: false, localAliasesLoading: false, + detailsOpen: false, }; if (props.canonicalAliasEvent) { @@ -268,6 +269,7 @@ export default class AliasSettings extends React.Component { this.loadLocalAliases(); } } + this.setState({detailsOpen: event.target.open}); }; onCanonicalAliasChange = (event) => { @@ -386,7 +388,7 @@ export default class AliasSettings extends React.Component { {_t("Local Addresses")}

{_t("Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)", {localDomain})}

- {_t('Local addresses (unmoderated content)')} + { this.state.detailsOpen ? _t('Show less') : _t("Show more")} {localAliasesList}
From d6ddc5096ff806dfa64022bb393e3c6ff80a34e0 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 18:25:13 +0100 Subject: [PATCH 347/522] tweak labels, etc --- src/components/views/room_settings/AliasSettings.js | 8 ++------ src/i18n/strings/en_EN.json | 5 ++--- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index e8fc700d50..84e2120e1a 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -349,9 +349,7 @@ export default class AliasSettings extends React.Component { onItemAdded={this.onLocalAliasAdded} onItemRemoved={this.onLocalAliasDeleted} noItemsLabel={_t('This room has no local addresses')} - placeholder={_t( - 'New address (e.g. #foo:%(localDomain)s)', {localDomain: localDomain}, - )} + placeholder={_t('Local address')} domain={localDomain} />); } @@ -381,9 +379,7 @@ export default class AliasSettings extends React.Component { suggestionsListId="mx_AliasSettings_altRecommendations" itemsLabel={_t('Other published addresses:')} noItemsLabel={_t('No other published addresses yet, add one below')} - placeholder={_t( - 'New address (e.g. #foo:domain)', - )} + placeholder={_t('New published address (e.g. #alias:server)')} /> {_t("Local Addresses")}

{_t("Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)", {localDomain})}

diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 547b7e64cf..f2272b294a 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1162,15 +1162,14 @@ "Main address": "Main address", "not specified": "not specified", "This room has no local addresses": "This room has no local addresses", - "New address (e.g. #foo:%(localDomain)s)": "New address (e.g. #foo:%(localDomain)s)", + "Local address": "Local address", "Published Addresses": "Published Addresses", "Published addresses can be used by anyone on any server to join your room. To publish an address it needs to be set as a local address first.": "Published addresses can be used by anyone on any server to join your room. To publish an address it needs to be set as a local address first.", "Other published addresses:": "Other published addresses:", "No other published addresses yet, add one below": "No other published addresses yet, add one below", - "New address (e.g. #foo:domain)": "New address (e.g. #foo:domain)", + "New published address (e.g. #alias:server)": "New published address (e.g. #alias:server)", "Local Addresses": "Local Addresses", "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)", - "Local addresses (unmoderated content)": "Local addresses (unmoderated content)", "Error updating flair": "Error updating flair", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.", "Invalid community ID": "Invalid community ID", From 3253d0b93dc8a61a9a1b230ae441dfa83aeda4ab Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 18:30:40 +0100 Subject: [PATCH 348/522] more margin between published and local addresses --- .../views/room_settings/_AliasSettings.scss | 22 ++++++++++++------- .../views/room_settings/AliasSettings.js | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/res/css/views/room_settings/_AliasSettings.scss b/res/css/views/room_settings/_AliasSettings.scss index 8ae3acbbd3..f8d92e7828 100644 --- a/res/css/views/room_settings/_AliasSettings.scss +++ b/res/css/views/room_settings/_AliasSettings.scss @@ -27,14 +27,20 @@ limitations under the License. box-shadow: none; } -.mx_AliasSettings summary { - cursor: pointer; - color: $accent-color; - font-weight: 600; - list-style: none; +.mx_AliasSettings { + summary { + cursor: pointer; + color: $accent-color; + font-weight: 600; + list-style: none; - // list-style doesn't do it for webkit - &::-webkit-details-marker { - display: none; + // list-style doesn't do it for webkit + &::-webkit-details-marker { + display: none; + } + } + + .mx_AliasSettings_localAliasHeader { + margin-top: 35px; } } diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 84e2120e1a..ae9b085375 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -381,7 +381,7 @@ export default class AliasSettings extends React.Component { noItemsLabel={_t('No other published addresses yet, add one below')} placeholder={_t('New published address (e.g. #alias:server)')} /> - {_t("Local Addresses")} + {_t("Local Addresses")}

{_t("Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)", {localDomain})}

{ this.state.detailsOpen ? _t('Show less') : _t("Show more")} From 351398ada98dab4f7fabdf27b2efee93c2cb6e55 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 18:34:09 +0100 Subject: [PATCH 349/522] fix style lint --- res/css/views/settings/tabs/_SettingsTab.scss | 2 -- 1 file changed, 2 deletions(-) diff --git a/res/css/views/settings/tabs/_SettingsTab.scss b/res/css/views/settings/tabs/_SettingsTab.scss index 64d6f04711..01a1d94956 100644 --- a/res/css/views/settings/tabs/_SettingsTab.scss +++ b/res/css/views/settings/tabs/_SettingsTab.scss @@ -47,9 +47,7 @@ limitations under the License. .mx_SettingsTab_section { margin-bottom: 24px; -} -.mx_SettingsTab_section { .mx_SettingsFlag { margin-right: 100px; margin-bottom: 10px; From 6c4b572c7e1d4df1a9fdd32de8c12035e1b139d0 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 16 Mar 2020 17:47:56 +0000 Subject: [PATCH 350/522] Wait for verification request on login Basically just changes to the designed screen to wait for an incoming verification request in order to verify the device & cross-sign it. Fixes https://github.com/vector-im/riot-web/issues/11215 Fixes https://github.com/vector-im/riot-web/issues/11217 --- .../structures/auth/_CompleteSecurity.scss | 4 ++++ .../structures/auth/CompleteSecurity.js | 20 +++++++++++-------- src/i18n/strings/en_EN.json | 4 +++- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/res/css/structures/auth/_CompleteSecurity.scss b/res/css/structures/auth/_CompleteSecurity.scss index 2bf51d9574..601492d43c 100644 --- a/res/css/structures/auth/_CompleteSecurity.scss +++ b/res/css/structures/auth/_CompleteSecurity.scss @@ -37,6 +37,10 @@ limitations under the License. font-size: 15px; } +.mx_CompleteSecurity_waiting { + color: $notice-secondary-color; +} + .mx_CompleteSecurity_actionRow { display: flex; justify-content: flex-end; diff --git a/src/components/structures/auth/CompleteSecurity.js b/src/components/structures/auth/CompleteSecurity.js index 2e95f668a6..2516abbb74 100644 --- a/src/components/structures/auth/CompleteSecurity.js +++ b/src/components/structures/auth/CompleteSecurity.js @@ -54,7 +54,7 @@ export default class CompleteSecurity extends React.Component { } } - onStartClick = async () => { + _onUsePassphraseClick = async () => { this.setState({ phase: PHASE_BUSY, }); @@ -148,13 +148,23 @@ export default class CompleteSecurity extends React.Component { member={MatrixClientPeg.get().getUser(this.state.verificationRequest.otherUserId)} />; } else if (phase === PHASE_INTRO) { + const InlineSpinner = sdk.getComponent('elements.InlineSpinner'); + icon = ; title = _t("Complete security"); body = (

{_t( - "Verify this session to grant it access to encrypted messages.", + "Open an existing session & use it to verify this one, granting it access to encrypted messages.", )}

+

{_t("Waiting…")}

+

{_t( + "If you can’t access one, ", + {}, { + button: sub => + {sub} + , + })}

{_t("Skip")} - - {_t("Start")} -
); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 5f3ead1490..183acea3e6 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1973,7 +1973,9 @@ "Uploading %(filename)s and %(count)s others|one": "Uploading %(filename)s and %(count)s other", "Could not load user profile": "Could not load user profile", "Complete security": "Complete security", - "Verify this session to grant it access to encrypted messages.": "Verify this session to grant it access to encrypted messages.", + "Open an existing session & use it to verify this one, granting it access to encrypted messages.": "Open an existing session & use it to verify this one, granting it access to encrypted messages.", + "Waiting…": "Waiting…", + "If you can’t access one, ": "If you can’t access one, ", "Session verified": "Session verified", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.", "Your new session is now verified. Other users will see it as trusted.": "Your new session is now verified. Other users will see it as trusted.", From 6c8bfe3293b2732b380ccda118180cb826426785 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 16 Mar 2020 17:58:37 +0000 Subject: [PATCH 351/522] Lint --- src/components/structures/auth/CompleteSecurity.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/structures/auth/CompleteSecurity.js b/src/components/structures/auth/CompleteSecurity.js index 2516abbb74..e8a5e3db49 100644 --- a/src/components/structures/auth/CompleteSecurity.js +++ b/src/components/structures/auth/CompleteSecurity.js @@ -155,13 +155,17 @@ export default class CompleteSecurity extends React.Component { body = (

{_t( - "Open an existing session & use it to verify this one, granting it access to encrypted messages.", + "Open an existing session & use it to verify this one, " + + "granting it access to encrypted messages.", )}

{_t("Waiting…")}

{_t( "If you can’t access one, ", {}, { - button: sub => + button: sub => {sub} , })}

From cc27894fc92e5e3c9ce35f11fbebe2a973e43224 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Mon, 16 Mar 2020 18:59:07 +0000 Subject: [PATCH 352/522] Fix key backup trust text for cross-signing This fixes the key backup panel to use the correct object when checking whether a device is verified or unverified via cross-signing trust. --- src/components/views/settings/KeyBackupPanel.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/views/settings/KeyBackupPanel.js b/src/components/views/settings/KeyBackupPanel.js index 73be2bad9f..27fdb2cb56 100644 --- a/src/components/views/settings/KeyBackupPanel.js +++ b/src/components/views/settings/KeyBackupPanel.js @@ -277,25 +277,25 @@ export default class KeyBackupPanel extends React.PureComponent { "Backup has an invalid signature from this session", {}, { validity }, ); - } else if (sig.valid && sig.device.isVerified()) { + } else if (sig.valid && sig.deviceTrust.isVerified()) { sigStatus = _t( "Backup has a valid signature from " + "verified session ", {}, { validity, verify, device }, ); - } else if (sig.valid && !sig.device.isVerified()) { + } else if (sig.valid && !sig.deviceTrust.isVerified()) { sigStatus = _t( "Backup has a valid signature from " + "unverified session ", {}, { validity, verify, device }, ); - } else if (!sig.valid && sig.device.isVerified()) { + } else if (!sig.valid && sig.deviceTrust.isVerified()) { sigStatus = _t( "Backup has an invalid signature from " + "verified session ", {}, { validity, verify, device }, ); - } else if (!sig.valid && !sig.device.isVerified()) { + } else if (!sig.valid && !sig.deviceTrust.isVerified()) { sigStatus = _t( "Backup has an invalid signature from " + "unverified session ", From d30618fe0ebd26c7497208fc114f436569c240f0 Mon Sep 17 00:00:00 2001 From: Mejans Date: Mon, 16 Mar 2020 20:14:10 +0000 Subject: [PATCH 353/522] Added translation using Weblate (Occitan) --- src/i18n/strings/oc.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/i18n/strings/oc.json diff --git a/src/i18n/strings/oc.json b/src/i18n/strings/oc.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/src/i18n/strings/oc.json @@ -0,0 +1 @@ +{} From 7b6a78bfb86a14196573342928bc41a49320b13f Mon Sep 17 00:00:00 2001 From: Hubert Chathi Date: Mon, 16 Mar 2020 17:31:06 -0400 Subject: [PATCH 354/522] don't check public key if there is none --- src/CrossSigningManager.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/CrossSigningManager.js b/src/CrossSigningManager.js index 2184eaf347..f428697e74 100644 --- a/src/CrossSigningManager.js +++ b/src/CrossSigningManager.js @@ -96,6 +96,9 @@ async function getSecretStorageKey({ keys: keyInfos }, ssssItemName) { { keyInfo: info, checkPrivateKey: async (input) => { + if (!info.pubkey) { + return true; + } const key = await inputToKey(input); return MatrixClientPeg.get().checkSecretStoragePrivateKey(key, info.pubkey); }, From f7dddfc1a7c773e2e66f82735b56e4d9f9dfa8d1 Mon Sep 17 00:00:00 2001 From: Hubert Chathi Date: Mon, 16 Mar 2020 17:31:26 -0400 Subject: [PATCH 355/522] show encryption upgrade when SSSS needs upgrading --- src/DeviceListener.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/DeviceListener.js b/src/DeviceListener.js index 4e7bc8470d..28f0d49c0e 100644 --- a/src/DeviceListener.js +++ b/src/DeviceListener.js @@ -143,6 +143,15 @@ export default class DeviceListener { } } return; + } else if (await cli.secretStorageKeyNeedsUpgrade()) { + // FIXME: do we a different message? + ToastStore.sharedInstance().addOrReplaceToast({ + key: THIS_DEVICE_TOAST_KEY, + title: _t("Encryption upgrade available"), + icon: "verification_warning", + props: {kind: 'upgrade_encryption'}, + component: sdk.getComponent("toasts.SetupEncryptionToast"), + }); } else { ToastStore.sharedInstance().dismissToast(THIS_DEVICE_TOAST_KEY); } From c245c6932cdfe60b480be0cd0f33790f8f4ae78b Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Mon, 16 Mar 2020 19:00:13 +0000 Subject: [PATCH 356/522] Restore key backup in background after complete security We were blocking the complete security flow on waiting for a key backup restore to complete, which could take multiple minutes with no visible progress. Fixes https://github.com/vector-im/riot-web/issues/12426 --- .../structures/auth/CompleteSecurity.js | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/components/structures/auth/CompleteSecurity.js b/src/components/structures/auth/CompleteSecurity.js index 2e95f668a6..70732f4d9a 100644 --- a/src/components/structures/auth/CompleteSecurity.js +++ b/src/components/structures/auth/CompleteSecurity.js @@ -63,9 +63,30 @@ export default class CompleteSecurity extends React.Component { const backupInfo = await cli.getKeyBackupVersion(); this.setState({backupInfo}); - await accessSecretStorage(async () => { - await cli.checkOwnCrossSigningTrust(); - if (backupInfo) await cli.restoreKeyBackupWithSecretStorage(backupInfo); + // The control flow is fairly twisted here... + // For the purposes of completing security, we only wait on getting + // as far as the trust check and then show a green shield. + // We also begin the key backup restore as well, which we're + // awaiting inside `accessSecretStorage` only so that it keeps your + // passphase cached for that work. This dialog itself will only wait + // on the first trust check, and the key backup restore will happen + // in the background. + await new Promise((resolve, reject) => { + try { + accessSecretStorage(async () => { + await cli.checkOwnCrossSigningTrust(); + resolve(); + if (backupInfo) { + // A complete restore can take many minutes for large + // accounts / slow servers, so we allow the dialog + // to advance before this. + await cli.restoreKeyBackupWithSecretStorage(backupInfo); + } + }); + } catch (e) { + console.error(e); + reject(e); + } }); if (cli.getCrossSigningId()) { From 43f0013dda8a5c67e1e4eb7c15d6f6772986960c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 17 Mar 2020 10:09:47 +0000 Subject: [PATCH 357/522] Migrate GroupView away from Gemini Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/structures/_GroupView.scss | 4 ++-- res/css/structures/_MainSplit.scss | 1 + src/components/structures/GroupView.js | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/res/css/structures/_GroupView.scss b/res/css/structures/_GroupView.scss index 517b8b1922..7072307b9d 100644 --- a/res/css/structures/_GroupView.scss +++ b/res/css/structures/_GroupView.scss @@ -341,8 +341,8 @@ limitations under the License. display: none; } -.mx_GroupView_body .gm-scroll-view > * { - margin: 11px 50px 0px 68px; +.mx_GroupView_body .mx_AutoHideScrollbar_offset > * { + margin: 11px 50px 50px 68px; } .mx_GroupView_groupDesc textarea { diff --git a/res/css/structures/_MainSplit.scss b/res/css/structures/_MainSplit.scss index 4d73953cd7..25e1153fce 100644 --- a/res/css/structures/_MainSplit.scss +++ b/res/css/structures/_MainSplit.scss @@ -18,6 +18,7 @@ limitations under the License. display: flex; flex-direction: row; min-width: 0; + height: 100%; } // move hit area 5px to the right so it doesn't overlap with the timeline scrollbar diff --git a/src/components/structures/GroupView.js b/src/components/structures/GroupView.js index af90fbbe83..cadc511fc3 100644 --- a/src/components/structures/GroupView.js +++ b/src/components/structures/GroupView.js @@ -39,6 +39,7 @@ import {makeGroupPermalink, makeUserPermalink} from "../../utils/permalinks/Perm import {Group} from "matrix-js-sdk"; import {allSettled, sleep} from "../../utils/promise"; import RightPanelStore from "../../stores/RightPanelStore"; +import AutoHideScrollbar from "./AutoHideScrollbar"; const LONG_DESC_PLACEHOLDER = _td( `

HTML for your community's page

@@ -1173,7 +1174,6 @@ export default createReactClass({ render: function() { const GroupAvatar = sdk.getComponent("avatars.GroupAvatar"); const Spinner = sdk.getComponent("elements.Spinner"); - const GeminiScrollbarWrapper = sdk.getComponent("elements.GeminiScrollbarWrapper"); if (this.state.summaryLoading && this.state.error === null || this.state.saving) { return ; @@ -1332,10 +1332,10 @@ export default createReactClass({
- + { this._getMembershipSection() } { this._getGroupSection() } - + ); From 8dfc15a3288d685fb3c6e664ce71e5deeeb1ee60 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 17 Mar 2020 10:23:12 +0000 Subject: [PATCH 358/522] Migrate TagPanel away from Gemini Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/structures/_TagPanel.scss | 2 ++ src/components/structures/TagPanel.js | 7 +++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/res/css/structures/_TagPanel.scss b/res/css/structures/_TagPanel.scss index dddd2e324c..77f016f05f 100644 --- a/res/css/structures/_TagPanel.scss +++ b/res/css/structures/_TagPanel.scss @@ -57,6 +57,8 @@ limitations under the License. .mx_TagPanel .mx_TagPanel_scroller { flex-grow: 1; + width: 100%; + height: 100vh; } .mx_TagPanel .mx_TagPanel_tagTileContainer { diff --git a/src/components/structures/TagPanel.js b/src/components/structures/TagPanel.js index 622e63d8ce..f1a39d6fcf 100644 --- a/src/components/structures/TagPanel.js +++ b/src/components/structures/TagPanel.js @@ -28,6 +28,7 @@ import { _t } from '../../languageHandler'; import { Droppable } from 'react-beautiful-dnd'; import classNames from 'classnames'; import MatrixClientContext from "../../contexts/MatrixClientContext"; +import AutoHideScrollbar from "./AutoHideScrollbar"; const TagPanel = createReactClass({ displayName: 'TagPanel', @@ -106,7 +107,6 @@ const TagPanel = createReactClass({ const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); const ActionButton = sdk.getComponent('elements.ActionButton'); const TintableSvg = sdk.getComponent('elements.TintableSvg'); - const GeminiScrollbarWrapper = sdk.getComponent("elements.GeminiScrollbarWrapper"); const tags = this.state.orderedTags.map((tag, index) => { return
- ) } - +
; }, }); From 44b0aa2d88a3d30eba1c8fc44e9fa8397e7958c4 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 17 Mar 2020 10:31:45 +0000 Subject: [PATCH 359/522] Remove remainders of gemini-scrollbar and react-gemini-scrollbar Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- package.json | 2 -- res/css/_common.scss | 31 ---------------- res/css/structures/_GroupView.scss | 2 +- res/css/structures/_MatrixChat.scss | 7 ---- res/themes/dark/css/_dark.scss | 4 --- src/components/structures/ScrollPanel.js | 2 +- .../views/dialogs/UnknownDeviceDialog.js | 1 - .../views/elements/GeminiScrollbarWrapper.js | 35 ------------------- yarn.lock | 10 ------ 9 files changed, 2 insertions(+), 92 deletions(-) delete mode 100644 src/components/views/elements/GeminiScrollbarWrapper.js diff --git a/package.json b/package.json index eeca614aa2..075295ba0e 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,6 @@ "flux": "2.1.1", "focus-visible": "^5.0.2", "fuse.js": "^2.2.0", - "gemini-scrollbar": "github:matrix-org/gemini-scrollbar#91e1e566", "gfm.css": "^1.1.1", "glob-to-regexp": "^0.4.1", "highlight.js": "^9.15.8", @@ -93,7 +92,6 @@ "react-beautiful-dnd": "^4.0.1", "react-dom": "^16.9.0", "react-focus-lock": "^2.2.1", - "react-gemini-scrollbar": "github:matrix-org/react-gemini-scrollbar#9cf17f63b7c0b0ec5f31df27da0f82f7238dc594", "resize-observer-polyfill": "^1.5.0", "sanitize-html": "^1.18.4", "text-encoding-utf-8": "^1.0.1", diff --git a/res/css/_common.scss b/res/css/_common.scss index a4ef603242..ad64aced50 100644 --- a/res/css/_common.scss +++ b/res/css/_common.scss @@ -207,37 +207,6 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus { transition: opacity 0.2s ease-in-out; } -/* XXX: critical hack to GeminiScrollbar to allow them to work in FF 42 and Chrome 48. - Stop the scrollbar view from pushing out the container's overall sizing, which causes - flexbox to adapt to the new size and cause the view to keep growing. - */ -.gm-scrollbar-container .gm-scroll-view { - position: absolute; -} - -/* Expand thumbs on hoverover */ -.gm-scrollbar { - border-radius: 5px !important; -} -.gm-scrollbar.-vertical { - width: 6px; - transition: width 120ms ease-out !important; -} -.gm-scrollbar.-vertical:hover, -.gm-scrollbar.-vertical:active { - width: 8px; - transition: width 120ms ease-out !important; -} -.gm-scrollbar.-horizontal { - height: 6px; - transition: height 120ms ease-out !important; -} -.gm-scrollbar.-horizontal:hover, -.gm-scrollbar.-horizontal:active { - height: 8px; - transition: height 120ms ease-out !important; -} - // These are magic constants which are excluded from tinting, to let themes // (which only have CSS, unlike skins) tell the app what their non-tinted // colourscheme is by inspecting the stylesheet DOM. diff --git a/res/css/structures/_GroupView.scss b/res/css/structures/_GroupView.scss index 7072307b9d..6963f8a160 100644 --- a/res/css/structures/_GroupView.scss +++ b/res/css/structures/_GroupView.scss @@ -370,7 +370,7 @@ limitations under the License. padding: 40px 20px; } -.mx_GroupView .mx_MemberInfo .gm-scroll-view > :not(.mx_MemberInfo_avatar) { +.mx_GroupView .mx_MemberInfo .mx_AutoHideScrollbar_offset > :not(.mx_MemberInfo_avatar) { padding-left: 16px; padding-right: 16px; } diff --git a/res/css/structures/_MatrixChat.scss b/res/css/structures/_MatrixChat.scss index f2ce7e1d5c..c5a5d50068 100644 --- a/res/css/structures/_MatrixChat.scss +++ b/res/css/structures/_MatrixChat.scss @@ -76,13 +76,6 @@ limitations under the License. flex: 1 1 0; min-width: 0; - /* Experimental fix for https://github.com/vector-im/vector-web/issues/947 - and https://github.com/vector-im/vector-web/issues/946. - Empirically this stops the MessagePanel's width exploding outwards when - gemini is in 'prevented' mode - */ - overflow-x: auto; - /* To fix https://github.com/vector-im/riot-web/issues/3298 where Safari needed height 100% all the way down to the HomePage. Height does not have to be auto, empirically. diff --git a/res/themes/dark/css/_dark.scss b/res/themes/dark/css/_dark.scss index a3515a9d99..33670c39bf 100644 --- a/res/themes/dark/css/_dark.scss +++ b/res/themes/dark/css/_dark.scss @@ -219,10 +219,6 @@ $user-tile-hover-bg-color: $header-panel-bg-color; filter: invert(1); } -.gm-scrollbar .thumb { - filter: invert(1); -} - // markdown overrides: .mx_EventTile_content .markdown-body pre:hover { border-color: #808080 !important; // inverted due to rules below diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index b81b3ebede..c218fee5d6 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -782,7 +782,7 @@ export default createReactClass({ if (!this._divScroll) { // Likewise, we should have the ref by this point, but if not // turn the NPE into something meaningful. - throw new Error("ScrollPanel._getScrollNode called before gemini ref collected"); + throw new Error("ScrollPanel._getScrollNode called before AutoHideScrollbar ref collected"); } return this._divScroll; diff --git a/src/components/views/dialogs/UnknownDeviceDialog.js b/src/components/views/dialogs/UnknownDeviceDialog.js index 3d5300fe92..69ebb72a6f 100644 --- a/src/components/views/dialogs/UnknownDeviceDialog.js +++ b/src/components/views/dialogs/UnknownDeviceDialog.js @@ -122,7 +122,6 @@ export default createReactClass({ }, render: function() { - const GeminiScrollbarWrapper = sdk.getComponent("elements.GeminiScrollbarWrapper"); if (this.props.devices === null) { const Spinner = sdk.getComponent("elements.Spinner"); return ; diff --git a/src/components/views/elements/GeminiScrollbarWrapper.js b/src/components/views/elements/GeminiScrollbarWrapper.js deleted file mode 100644 index 13eb14ecc3..0000000000 --- a/src/components/views/elements/GeminiScrollbarWrapper.js +++ /dev/null @@ -1,35 +0,0 @@ -/* -Copyright 2018 New Vector Ltd. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import React from 'react'; -import GeminiScrollbar from 'react-gemini-scrollbar'; - -function GeminiScrollbarWrapper(props) { - const {wrappedRef, ...wrappedProps} = props; - - // Enable forceGemini so that gemini is always enabled. This is - // to avoid future issues where a feature is implemented without - // doing QA on every OS/browser combination. - // - // By default GeminiScrollbar allows native scrollbars to be used - // on macOS. Use forceGemini to enable Gemini's non-native - // scrollbars on all OSs. - return - { props.children } - ; -} -export default GeminiScrollbarWrapper; - diff --git a/yarn.lock b/yarn.lock index 705b02e3e4..c6fd3432cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3902,10 +3902,6 @@ fuse.js@^2.2.0: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-2.7.4.tgz#96e420fde7ef011ac49c258a621314fe576536f9" integrity sha1-luQg/efvARrEnCWKYhMU/ldlNvk= -"gemini-scrollbar@github:matrix-org/gemini-scrollbar#91e1e566", gemini-scrollbar@matrix-org/gemini-scrollbar#91e1e566: - version "1.4.3" - resolved "https://codeload.github.com/matrix-org/gemini-scrollbar/tar.gz/91e1e566fa33324188f278801baf4a79f9f554ab" - gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" @@ -6963,12 +6959,6 @@ react-focus-lock@^2.2.1: use-callback-ref "^1.2.1" use-sidecar "^1.0.1" -"react-gemini-scrollbar@github:matrix-org/react-gemini-scrollbar#9cf17f63b7c0b0ec5f31df27da0f82f7238dc594": - version "2.1.5" - resolved "https://codeload.github.com/matrix-org/react-gemini-scrollbar/tar.gz/9cf17f63b7c0b0ec5f31df27da0f82f7238dc594" - dependencies: - gemini-scrollbar matrix-org/gemini-scrollbar#91e1e566 - react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0: version "16.13.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.0.tgz#0f37c3613c34fe6b37cd7f763a0d6293ab15c527" From 76703d99f5617560536d7135c7ded2f4bec5ed90 Mon Sep 17 00:00:00 2001 From: Tirifto Date: Mon, 16 Mar 2020 19:45:02 +0000 Subject: [PATCH 360/522] Translated using Weblate (Esperanto) Currently translated at 99.8% (2148 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eo/ --- src/i18n/strings/eo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 2684f32747..b3a06ea3ed 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -2111,7 +2111,7 @@ "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Gradaltigo de ĉambro estas altnivela ago kaj estas kutime rekomendata kiam ĉambro estas malstabila pro eraroj, mankantaj funkcioj, aŭ malsekuraĵoj.", "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Ĉi tio kutime influas nur traktadon de la ĉambro de la servilo. Se vi spertas problemojn pri Riot, bonvolu raporti problemon.", "You'll upgrade this room from to .": "Vi gradaltigos ĉi tiun ĉambron de al .", - "This will allow you to return to your account after signing out, and sign in on other sessions.": "Ĉi tio ebligos revenon al via konto post adiaŭo kaj resaluto en aliaj salutaĵoj.", + "This will allow you to return to your account after signing out, and sign in on other sessions.": "Ĉi tio ebligos saluti aliajn salutaĵojn, kaj reveni al via konto post adiaŭo.", "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Vi nun forlistigas nekontrolitajn salutaĵojn; por sendi mesaĝojn al tiuj salutaĵoj, vi devas ilin kontroli.", "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Ni rekomendas, ke vi trairu la kontrolon de ĉiu salutaĵo por konfirmi, ke ili apartenas al siaj ĝustaj posedantoj, sed laŭplaĉe vi povas ankaŭ sendi la mesaĝon sen kontrolo.", "Room contains unknown sessions": "Ĉambro enhavas nekonatajn salutaĵojn", From e3ce197145700fe2cb180d03163fd387883a7333 Mon Sep 17 00:00:00 2001 From: call_xz Date: Mon, 16 Mar 2020 18:06:53 +0000 Subject: [PATCH 361/522] Translated using Weblate (Japanese) Currently translated at 56.5% (1216 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ja/ --- src/i18n/strings/ja.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index 6be319d794..1dbbcad09e 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -66,7 +66,7 @@ "Your language of choice": "選択した言語", "Which officially provided instance you are using, if any": "どの公式に提供されたインスタンスを利用していますか(もしあれば)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "リッチテキストエディタのリッチテキストモードを利用しているか否か", - "Your homeserver's URL": "あなたのホームサーバーのURL", + "Your homeserver's URL": "あなたのホームサーバーの URL", "Your identity server's URL": "あなたのアイデンティティサーバーの URL", "Analytics": "分析", "The information being sent to us to help make Riot.im better includes:": "Riot.imをよりよくするために私達に送信される情報は以下を含みます:", @@ -1238,5 +1238,7 @@ "Hide": "隠す", "Help": "ヘルプ", "Filter rooms…": "部屋を検索…", - "Preview": "プレビュー" + "Preview": "プレビュー", + "The version of Riot": "Riot のバージョン", + "Your user agent": "あなたの User Agent" } From 2ef53cb50a2cc26792b19551b206afd83a49b822 Mon Sep 17 00:00:00 2001 From: Mejans Date: Mon, 16 Mar 2020 20:16:29 +0000 Subject: [PATCH 362/522] Translated using Weblate (Occitan) Currently translated at 2.2% (48 of 2152 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/oc/ --- src/i18n/strings/oc.json | 51 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/oc.json b/src/i18n/strings/oc.json index 0967ef424b..f67d7291ce 100644 --- a/src/i18n/strings/oc.json +++ b/src/i18n/strings/oc.json @@ -1 +1,50 @@ -{} +{ + "Add Email Address": "Ajustar una adreça electronica", + "Add Phone Number": "Ajustar un numèro de telefòn", + "The platform you're on": "La plataforma ont sètz", + "The version of Riot": "La version de Riot", + "Your language of choice": "La lenga que volètz", + "User Options": "Opcions utilizaire", + "Start a chat": "Començar una discussion", + "Unmute": "Restablir lo son", + "Mute": "Copar lo son", + "Admin Tools": "Aisinas d’administrator", + "Invite to this room": "Convidar a aquesta sala", + "Invited": "Convidat", + "Voice call": "Sonada vocala", + "Video call": "Sonada vidèo", + "Upload file": "Enviar un fichièr", + "Send an encrypted reply…": "Enviar una responsa chifrada …", + "Send a reply…": "Enviar una responsa…", + "Send an encrypted message…": "Enviar un messatge chifrat…", + "Send a message…": "Enviar un messatge…", + "Bold": "Gras", + "Quote": "Citacion", + "Loading...": "Cargament…", + "Pinned Messages": "Messatges penjats", + "Unpin Message": "Despenjar lo messatge", + "Online for %(duration)s": "En linha dempuèi %(duration)s", + "Idle for %(duration)s": "Inactiu dempuèi %(duration)s", + "Offline for %(duration)s": "Fòra linha dempuèi %(duration)s", + "Unknown for %(duration)s": "Desconegut dempuèi %(duration)s", + "Online": "En linha", + "Idle": "Inactiu", + "Offline": "Fòra linha", + "Unknown": "Desconegut", + "Recent rooms": "Salas recentas", + "No rooms to show": "Cap de sala a mostrar", + "Unnamed room": "Sala sens nom", + "Settings": "Paramètres", + "Search": "Recercar", + "Share room": "Partejar la sala", + "Favourites": "Favorits", + "Start chat": "Començar una discussion", + "Rooms": "Salas", + "Low priority": "Febla prioritat", + "System Alerts": "Alèrtas sistèma", + "This room": "Aquesta sala", + "Loading …": "Cargament…", + "Reason: %(reason)s": "Rason : %(reason)s", + "Forget this room": "Oblidar aquesta sala", + "Disable": "Desactivar" +} From 1f4e92885bcb9ebb88589385e43d12d884058dd6 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 17 Mar 2020 10:43:01 +0000 Subject: [PATCH 363/522] Update src/components/views/room_settings/AliasSettings.js Co-Authored-By: J. Ryan Stinnett --- src/components/views/room_settings/AliasSettings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index ae9b085375..f8e2151c4f 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -358,7 +358,7 @@ export default class AliasSettings extends React.Component {
{_t("Published Addresses")}

{_t("Published addresses can be used by anyone on any server to join your room. " + - "To publish an address it needs to be set as a local address first.")}

+ "To publish an address, it needs to be set as a local address first.")}

{canonicalAliasSection} From 010661249b355b2b8b85abec48fe147dcd9c1ddd Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 17 Mar 2020 11:47:56 +0100 Subject: [PATCH 364/522] run i18n --- src/i18n/strings/en_EN.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index f2272b294a..a7d0887c32 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1164,7 +1164,7 @@ "This room has no local addresses": "This room has no local addresses", "Local address": "Local address", "Published Addresses": "Published Addresses", - "Published addresses can be used by anyone on any server to join your room. To publish an address it needs to be set as a local address first.": "Published addresses can be used by anyone on any server to join your room. To publish an address it needs to be set as a local address first.", + "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.", "Other published addresses:": "Other published addresses:", "No other published addresses yet, add one below": "No other published addresses yet, add one below", "New published address (e.g. #alias:server)": "New published address (e.g. #alias:server)", From 57b2dd92f5b5d9fce4e308ec9f17abae5b8f9863 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 17:27:06 +0100 Subject: [PATCH 365/522] move room publish toggle below canonical alias also to own component to not contaminate alias settings too much with this --- .../views/room_settings/AliasSettings.js | 2 + .../views/room_settings/RoomPublishSetting.js | 60 +++++++++++++++++++ .../tabs/room/GeneralRoomSettingsTab.js | 31 ---------- 3 files changed, 62 insertions(+), 31 deletions(-) create mode 100644 src/components/views/room_settings/RoomPublishSetting.js diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 0a7bd1d333..7b0302c714 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -25,6 +25,7 @@ import Field from "../elements/Field"; import ErrorDialog from "../dialogs/ErrorDialog"; import AccessibleButton from "../elements/AccessibleButton"; import Modal from "../../../Modal"; +import RoomPublishSetting from "./RoomPublishSetting"; class EditableAliasesList extends EditableItemList { constructor(props) { @@ -350,6 +351,7 @@ export default class AliasSettings extends React.Component { return (
{canonicalAliasSection} + {this._getLocalNonAltAliases().map(alias => { return
-
- -
- {_t("Flair")}
Date: Mon, 16 Mar 2020 17:28:45 +0100 Subject: [PATCH 366/522] add headers and copy to lessen confusion of new alias workings --- src/components/views/room_settings/AliasSettings.js | 9 +++++++-- .../views/settings/tabs/room/GeneralRoomSettingsTab.js | 3 ++- src/i18n/strings/en_EN.json | 10 +++++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 7b0302c714..435dd9b7a3 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -350,6 +350,9 @@ export default class AliasSettings extends React.Component { return (
+ {_t("Published Addresses")} +

{_t("Published addresses can be used by anyone on any server to join your room. " + + "To publish an address it needs to be set as a local address first.")}

{canonicalAliasSection} @@ -368,12 +371,14 @@ export default class AliasSettings extends React.Component { onItemAdded={this.onAltAliasAdded} onItemRemoved={this.onAltAliasDeleted} suggestionsListId="mx_AliasSettings_altRecommendations" - itemsLabel={_t('Alternative addresses for this room:')} - noItemsLabel={_t('This room has no alternative addresses')} + itemsLabel={_t('Other published addresses:')} + noItemsLabel={_t('No other published addresses yet, add one below')} placeholder={_t( 'New address (e.g. #foo:domain)', )} /> + {_t("Local Addresses")} +

{_t("Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)", {localDomain})}

{_t('Local addresses (unmoderated content)')} {localAliasesList} diff --git a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js index 5aface4f3b..99882ae400 100644 --- a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js @@ -68,12 +68,13 @@ export default class GeneralRoomSettingsTab extends React.Component {
- {_t("Room Addresses")} +
{_t("Room Addresses")}
+
{_t("Other")}
{_t("Flair")}
Learn more.": "This room isn’t bridging messages to any platforms. Learn more.", "Bridges": "Bridges", "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", "Uploaded sound": "Uploaded sound", "Sounds": "Sounds", @@ -1156,9 +1155,13 @@ "not specified": "not specified", "This room has no local addresses": "This room has no local addresses", "New address (e.g. #foo:%(localDomain)s)": "New address (e.g. #foo:%(localDomain)s)", - "Alternative addresses for this room:": "Alternative addresses for this room:", - "This room has no alternative addresses": "This room has no alternative addresses", + "Published Addresses": "Published Addresses", + "Published addresses can be used by anyone on any server to join your room. To publish an address it needs to be set as a local address first.": "Published addresses can be used by anyone on any server to join your room. To publish an address it needs to be set as a local address first.", + "Other published addresses:": "Other published addresses:", + "No other published addresses yet, add one below": "No other published addresses yet, add one below", "New address (e.g. #foo:domain)": "New address (e.g. #foo:domain)", + "Local Addresses": "Local Addresses", + "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)", "Local addresses (unmoderated content)": "Local addresses (unmoderated content)", "Error updating flair": "Error updating flair", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.", @@ -1170,6 +1173,7 @@ "Room Name": "Room Name", "Room Topic": "Room Topic", "Room avatar": "Room avatar", + "Publish this room to the public in %(domain)s's room directory?": "Publish this room to the public in %(domain)s's room directory?", "You have enabled URL previews by default.": "You have enabled URL previews by default.", "You have disabled URL previews by default.": "You have disabled URL previews by default.", "URL previews are enabled by default for participants in this room.": "URL previews are enabled by default for participants in this room.", From cb271fe027ee6000e7a3df83e90e0dffc55344a1 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 17:29:15 +0100 Subject: [PATCH 367/522] avoid double margin-right for toggle --- res/css/views/settings/tabs/_SettingsTab.scss | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/res/css/views/settings/tabs/_SettingsTab.scss b/res/css/views/settings/tabs/_SettingsTab.scss index 9727946893..64d6f04711 100644 --- a/res/css/views/settings/tabs/_SettingsTab.scss +++ b/res/css/views/settings/tabs/_SettingsTab.scss @@ -49,9 +49,15 @@ limitations under the License. margin-bottom: 24px; } -.mx_SettingsTab_section .mx_SettingsFlag { - margin-right: 100px; - margin-bottom: 10px; +.mx_SettingsTab_section { + .mx_SettingsFlag { + margin-right: 100px; + margin-bottom: 10px; + } + + &.mx_SettingsTab_subsectionText .mx_SettingsFlag { + margin-right: 0px !important; + } } .mx_SettingsTab_section .mx_SettingsFlag .mx_SettingsFlag_label { From 42ff9f2c9eb3c9735e2f92c4384eff9947530f55 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 17:29:35 +0100 Subject: [PATCH 368/522] make editable list look like something closer to design --- res/css/views/elements/_EditableItemList.scss | 16 +++++++++++++++- .../views/elements/EditableItemList.js | 3 +-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/res/css/views/elements/_EditableItemList.scss b/res/css/views/elements/_EditableItemList.scss index 51fa4c4423..ef60f006cc 100644 --- a/res/css/views/elements/_EditableItemList.scss +++ b/res/css/views/elements/_EditableItemList.scss @@ -20,14 +20,21 @@ limitations under the License. } .mx_EditableItem { + display: flex; margin-bottom: 5px; - margin-left: 15px; } .mx_EditableItem_delete { + order: 3; margin-right: 5px; cursor: pointer; vertical-align: middle; + width: 14px; + height: 14px; + mask-image: url('$(res)/img/feather-customised/cancel.svg'); + mask-repeat: no-repeat; + background-color: $warning-color; + mask-size: 100%; } .mx_EditableItem_email { @@ -36,12 +43,19 @@ limitations under the License. .mx_EditableItem_promptText { margin-right: 10px; + order: 2; } .mx_EditableItem_confirmBtn { margin-right: 5px; } +.mx_EditableItem_item { + flex: auto 1 0; + order: 1; +} + .mx_EditableItemList_label { margin-bottom: 5px; } + diff --git a/src/components/views/elements/EditableItemList.js b/src/components/views/elements/EditableItemList.js index ae3473ef0d..6e649e777a 100644 --- a/src/components/views/elements/EditableItemList.js +++ b/src/components/views/elements/EditableItemList.js @@ -78,8 +78,7 @@ export class EditableItem extends React.Component { return (
- {_t("Remove")} +
{this.props.value}
); From 5537e6dcd4f8a0c654ddb5c72e178ea315f53128 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 18:24:49 +0100 Subject: [PATCH 369/522] change
appearance for local aliases --- res/css/views/room_settings/_AliasSettings.scss | 8 ++++++++ src/components/views/room_settings/AliasSettings.js | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/res/css/views/room_settings/_AliasSettings.scss b/res/css/views/room_settings/_AliasSettings.scss index 294902a1f0..8ae3acbbd3 100644 --- a/res/css/views/room_settings/_AliasSettings.scss +++ b/res/css/views/room_settings/_AliasSettings.scss @@ -29,4 +29,12 @@ limitations under the License. .mx_AliasSettings summary { cursor: pointer; + color: $accent-color; + font-weight: 600; + list-style: none; + + // list-style doesn't do it for webkit + &::-webkit-details-marker { + display: none; + } } diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 435dd9b7a3..0f2e3ad4eb 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -98,6 +98,7 @@ export default class AliasSettings extends React.Component { canonicalAlias: null, // #canonical:domain.tld updatingCanonicalAlias: false, localAliasesLoading: false, + detailsOpen: false, }; if (props.canonicalAliasEvent) { @@ -262,6 +263,7 @@ export default class AliasSettings extends React.Component { this.loadLocalAliases(); } } + this.setState({detailsOpen: event.target.open}); }; onCanonicalAliasChange = (event) => { @@ -380,7 +382,7 @@ export default class AliasSettings extends React.Component { {_t("Local Addresses")}

{_t("Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)", {localDomain})}

- {_t('Local addresses (unmoderated content)')} + { this.state.detailsOpen ? _t('Show less') : _t("Show more")} {localAliasesList}
From a591e5016fd6391a5d30b009baec32ae5beae494 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 18:25:13 +0100 Subject: [PATCH 370/522] tweak labels, etc --- src/components/views/room_settings/AliasSettings.js | 8 ++------ src/i18n/strings/en_EN.json | 5 ++--- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 0f2e3ad4eb..9e97a1c881 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -343,9 +343,7 @@ export default class AliasSettings extends React.Component { onItemAdded={this.onLocalAliasAdded} onItemRemoved={this.onLocalAliasDeleted} noItemsLabel={_t('This room has no local addresses')} - placeholder={_t( - 'New address (e.g. #foo:%(localDomain)s)', {localDomain: localDomain}, - )} + placeholder={_t('Local address')} domain={localDomain} />); } @@ -375,9 +373,7 @@ export default class AliasSettings extends React.Component { suggestionsListId="mx_AliasSettings_altRecommendations" itemsLabel={_t('Other published addresses:')} noItemsLabel={_t('No other published addresses yet, add one below')} - placeholder={_t( - 'New address (e.g. #foo:domain)', - )} + placeholder={_t('New published address (e.g. #alias:server)')} /> {_t("Local Addresses")}

{_t("Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)", {localDomain})}

diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index bebec32b4f..acc6df19b1 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1154,15 +1154,14 @@ "Main address": "Main address", "not specified": "not specified", "This room has no local addresses": "This room has no local addresses", - "New address (e.g. #foo:%(localDomain)s)": "New address (e.g. #foo:%(localDomain)s)", + "Local address": "Local address", "Published Addresses": "Published Addresses", "Published addresses can be used by anyone on any server to join your room. To publish an address it needs to be set as a local address first.": "Published addresses can be used by anyone on any server to join your room. To publish an address it needs to be set as a local address first.", "Other published addresses:": "Other published addresses:", "No other published addresses yet, add one below": "No other published addresses yet, add one below", - "New address (e.g. #foo:domain)": "New address (e.g. #foo:domain)", + "New published address (e.g. #alias:server)": "New published address (e.g. #alias:server)", "Local Addresses": "Local Addresses", "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)", - "Local addresses (unmoderated content)": "Local addresses (unmoderated content)", "Error updating flair": "Error updating flair", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.", "Invalid community ID": "Invalid community ID", From dd19f27964907a7951a2e4ae2755997053b9b0fc Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 18:30:40 +0100 Subject: [PATCH 371/522] more margin between published and local addresses --- .../views/room_settings/_AliasSettings.scss | 22 ++++++++++++------- .../views/room_settings/AliasSettings.js | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/res/css/views/room_settings/_AliasSettings.scss b/res/css/views/room_settings/_AliasSettings.scss index 8ae3acbbd3..f8d92e7828 100644 --- a/res/css/views/room_settings/_AliasSettings.scss +++ b/res/css/views/room_settings/_AliasSettings.scss @@ -27,14 +27,20 @@ limitations under the License. box-shadow: none; } -.mx_AliasSettings summary { - cursor: pointer; - color: $accent-color; - font-weight: 600; - list-style: none; +.mx_AliasSettings { + summary { + cursor: pointer; + color: $accent-color; + font-weight: 600; + list-style: none; - // list-style doesn't do it for webkit - &::-webkit-details-marker { - display: none; + // list-style doesn't do it for webkit + &::-webkit-details-marker { + display: none; + } + } + + .mx_AliasSettings_localAliasHeader { + margin-top: 35px; } } diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 9e97a1c881..608e4553cd 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -375,7 +375,7 @@ export default class AliasSettings extends React.Component { noItemsLabel={_t('No other published addresses yet, add one below')} placeholder={_t('New published address (e.g. #alias:server)')} /> - {_t("Local Addresses")} + {_t("Local Addresses")}

{_t("Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)", {localDomain})}

{ this.state.detailsOpen ? _t('Show less') : _t("Show more")} From 048d3f0e423a5382bd31e8ed2be642e1956c710f Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 16 Mar 2020 18:34:09 +0100 Subject: [PATCH 372/522] fix style lint --- res/css/views/settings/tabs/_SettingsTab.scss | 2 -- 1 file changed, 2 deletions(-) diff --git a/res/css/views/settings/tabs/_SettingsTab.scss b/res/css/views/settings/tabs/_SettingsTab.scss index 64d6f04711..01a1d94956 100644 --- a/res/css/views/settings/tabs/_SettingsTab.scss +++ b/res/css/views/settings/tabs/_SettingsTab.scss @@ -47,9 +47,7 @@ limitations under the License. .mx_SettingsTab_section { margin-bottom: 24px; -} -.mx_SettingsTab_section { .mx_SettingsFlag { margin-right: 100px; margin-bottom: 10px; From 26f2bcd073b771445885fd36466fe29623286477 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 17 Mar 2020 10:43:01 +0000 Subject: [PATCH 373/522] Update src/components/views/room_settings/AliasSettings.js Co-Authored-By: J. Ryan Stinnett --- src/components/views/room_settings/AliasSettings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index 608e4553cd..a01f02f487 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -352,7 +352,7 @@ export default class AliasSettings extends React.Component {
{_t("Published Addresses")}

{_t("Published addresses can be used by anyone on any server to join your room. " + - "To publish an address it needs to be set as a local address first.")}

+ "To publish an address, it needs to be set as a local address first.")}

{canonicalAliasSection} From 663ccb7796131b96fc9dfbe68285c1060e7d6dce Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 17 Mar 2020 11:47:56 +0100 Subject: [PATCH 374/522] run i18n --- src/i18n/strings/en_EN.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index acc6df19b1..40f44d4b1d 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1156,7 +1156,7 @@ "This room has no local addresses": "This room has no local addresses", "Local address": "Local address", "Published Addresses": "Published Addresses", - "Published addresses can be used by anyone on any server to join your room. To publish an address it needs to be set as a local address first.": "Published addresses can be used by anyone on any server to join your room. To publish an address it needs to be set as a local address first.", + "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.", "Other published addresses:": "Other published addresses:", "No other published addresses yet, add one below": "No other published addresses yet, add one below", "New published address (e.g. #alias:server)": "New published address (e.g. #alias:server)", From 59b1cbd4b21c388b03ec0d1d11797bb40fe78e12 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Tue, 17 Mar 2020 11:33:10 +0000 Subject: [PATCH 375/522] Add default on config setting to control call button in composer This adds a default on setting that can be used to control whether call buttons are shown in the composer via `settingDefaults` in config.json. No UI is added to control it for now. Fixes https://github.com/vector-im/riot-web/issues/12758 --- src/components/views/rooms/MessageComposer.js | 17 ++++++++++++++--- src/settings/Settings.js | 4 ++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js index 557a58412a..c86bcb2ff0 100644 --- a/src/components/views/rooms/MessageComposer.js +++ b/src/components/views/rooms/MessageComposer.js @@ -178,6 +178,7 @@ export default class MessageComposer extends React.Component { isQuoting: Boolean(RoomViewStore.getQuotingEvent()), tombstone: this._getRoomTombstone(), canSendMessages: this.props.room.maySendMessage(), + showCallButtons: SettingsStore.getValue("showCallButtonsInComposer"), }; } @@ -325,10 +326,20 @@ export default class MessageComposer extends React.Component { permalinkCreator={this.props.permalinkCreator} />, , , - callInProgress ? : null, - callInProgress ? null : , - callInProgress ? null : , ); + + if (this.state.showCallButtons) { + if (callInProgress) { + controls.push( + , + ); + } else { + controls.push( + , + , + ); + } + } } else if (this.state.tombstone) { const replacementRoomId = this.state.tombstone.getContent()['replacement_room']; diff --git a/src/settings/Settings.js b/src/settings/Settings.js index ba6df47a04..abcfd21902 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -517,4 +517,8 @@ export const SETTINGS = { displayName: _td("How fast should messages be downloaded."), default: 3000, }, + "showCallButtonsInComposer": { + supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG, + default: true, + }, }; From ec4e81de74fea0edc91c03fa69d79f4c52c22221 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Tue, 17 Mar 2020 11:33:10 +0000 Subject: [PATCH 376/522] Add default on config setting to control call button in composer This adds a default on setting that can be used to control whether call buttons are shown in the composer via `settingDefaults` in config.json. No UI is added to control it for now. Fixes https://github.com/vector-im/riot-web/issues/12758 --- src/components/views/rooms/MessageComposer.js | 17 ++++++++++++++--- src/settings/Settings.js | 4 ++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js index 557a58412a..c86bcb2ff0 100644 --- a/src/components/views/rooms/MessageComposer.js +++ b/src/components/views/rooms/MessageComposer.js @@ -178,6 +178,7 @@ export default class MessageComposer extends React.Component { isQuoting: Boolean(RoomViewStore.getQuotingEvent()), tombstone: this._getRoomTombstone(), canSendMessages: this.props.room.maySendMessage(), + showCallButtons: SettingsStore.getValue("showCallButtonsInComposer"), }; } @@ -325,10 +326,20 @@ export default class MessageComposer extends React.Component { permalinkCreator={this.props.permalinkCreator} />, , , - callInProgress ? : null, - callInProgress ? null : , - callInProgress ? null : , ); + + if (this.state.showCallButtons) { + if (callInProgress) { + controls.push( + , + ); + } else { + controls.push( + , + , + ); + } + } } else if (this.state.tombstone) { const replacementRoomId = this.state.tombstone.getContent()['replacement_room']; diff --git a/src/settings/Settings.js b/src/settings/Settings.js index b77fb392e9..29b6f1cbce 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -511,4 +511,8 @@ export const SETTINGS = { displayName: _td("How fast should messages be downloaded."), default: 3000, }, + "showCallButtonsInComposer": { + supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG, + default: true, + }, }; From ea99eebb7bfbca43b6726742f8ae4ef7e5f4cf41 Mon Sep 17 00:00:00 2001 From: Zoe Date: Tue, 17 Mar 2020 10:20:58 +0000 Subject: [PATCH 377/522] Report to the user when a key signature upload fails --- src/components/structures/MatrixChat.js | 10 ++ .../dialogs/KeySignatureUploadFailedDialog.js | 108 ++++++++++++++++++ src/i18n/strings/en_EN.json | 10 ++ 3 files changed, 128 insertions(+) create mode 100644 src/components/views/dialogs/KeySignatureUploadFailedDialog.js diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index f1a5a372be..e3a239663e 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -1495,6 +1495,16 @@ export default createReactClass({ } }); + cli.on("crypto.keySignatureUploadFailure", (failures, source, continuation) => { + const KeySignatureUploadFailedDialog = + sdk.getComponent('views.dialogs.KeySignatureUploadFailedDialog'); + Modal.createTrackedDialog( + 'Failed to upload key signatures', + 'Failed to upload key signatures', + KeySignatureUploadFailedDialog, + { failures, source, continuation }); + }); + cli.on("crypto.verification.request", request => { const isFlagOn = SettingsStore.isFeatureEnabled("feature_cross_signing"); diff --git a/src/components/views/dialogs/KeySignatureUploadFailedDialog.js b/src/components/views/dialogs/KeySignatureUploadFailedDialog.js new file mode 100644 index 0000000000..a04c4a389f --- /dev/null +++ b/src/components/views/dialogs/KeySignatureUploadFailedDialog.js @@ -0,0 +1,108 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React, {useState, useCallback, useRef} from 'react'; +import * as sdk from '../../../index'; +import { _t } from '../../../languageHandler'; + +export default function KeySignatureUploadFailedDialog({ + failures, + source, + continuation, + onFinished, + }) { + const RETRIES = 2; + const BaseDialog = sdk.getComponent('dialogs.BaseDialog'); + const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); + const Spinner = sdk.getComponent('elements.Spinner'); + const [retry, setRetry] = useState(RETRIES); + const [cancelled, setCancelled] = useState(false); + const [retrying, setRetrying] = useState(false); + const [success, setSuccess] = useState(false); + const onCancel = useRef(onFinished); + + const causes = new Map([ + ["_afterCrossSigningLocalKeyChange", _t("a new master key signature")], + ["checkOwnCrossSigningTrust", _t("a new cross-signing key signature")], + ["setDeviceVerification", _t("a device cross-signing signature")], + ]); + const defaultCause = _t("a key signature"); + + const onRetry = useCallback(async () => { + try { + setRetrying(true); + const cancel = new Promise((resolve, reject) => { + onCancel.current = reject; + }).finally(() => { + setCancelled(true); + }); + await Promise.race([ + continuation(), + cancel, + ]); + setSuccess(true); + } catch (e) { + setRetry(r => r-1); + } finally { + onCancel.current = onFinished; + setRetrying(false); + } + }, [continuation, onFinished]); + + let body; + if (!success && !cancelled && continuation && retry > 0) { + const reason = causes.get(source) || defaultCause; + + body = (
+

{_t("Riot encountered an error during upload of:")}

+

{reason}

+ {retrying && } +
{JSON.stringify(failures, null, 2)}
+ +
); + } else { + body = (
+ {success ? + {_t("Upload completed")} : + cancelled ? + {_t("Cancelled signature upload")} : + {_t("Unabled to upload")}} + +
); + } + + return ( + {}} + > + {body} + + ); +} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 5f3ead1490..971e6037e4 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1577,6 +1577,16 @@ "Ignore request": "Ignore request", "Loading session info...": "Loading session info...", "Encryption key request": "Encryption key request", + "a new master key signature": "a new master key signature", + "a new cross-signing key signature": "a new cross-signing key signature", + "a device cross-signing signature": "a device cross-signing signature", + "a key signature": "a key signature", + "Riot encountered an error during upload of:": "Riot encountered an error during upload of:", + "Upload completed": "Upload completed", + "Cancelled signature upload": "Cancelled signature upload", + "Unabled to upload": "Unabled to upload", + "Signature upload success": "Signature upload success", + "Signature upload failed": "Signature upload failed", "You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.", "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.", "Incompatible local cache": "Incompatible local cache", From 8fd3b96b7231661b1c5d8298933b69ace4ad0447 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 17 Mar 2020 11:53:19 +0000 Subject: [PATCH 378/522] fix styling/heights Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/structures/_GroupView.scss | 4 ---- res/css/structures/_MyGroups.scss | 5 +++++ res/css/structures/_TagPanel.scss | 2 +- src/components/structures/MyGroups.js | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/res/css/structures/_GroupView.scss b/res/css/structures/_GroupView.scss index 6963f8a160..2575169664 100644 --- a/res/css/structures/_GroupView.scss +++ b/res/css/structures/_GroupView.scss @@ -180,10 +180,6 @@ limitations under the License. line-height: 2em; } -.mx_GroupView > .mx_MainSplit { - flex: 1; -} - .mx_GroupView_body { flex-grow: 1; } diff --git a/res/css/structures/_MyGroups.scss b/res/css/structures/_MyGroups.scss index 9556fd57e3..47a5ea5a77 100644 --- a/res/css/structures/_MyGroups.scss +++ b/res/css/structures/_MyGroups.scss @@ -95,6 +95,11 @@ limitations under the License. display: flex; flex-direction: column; + overflow-y: auto; +} + +.mx_MyGroups_scrollable { + overflow-y: inherit; } .mx_MyGroups_content, diff --git a/res/css/structures/_TagPanel.scss b/res/css/structures/_TagPanel.scss index 77f016f05f..03f5ce230c 100644 --- a/res/css/structures/_TagPanel.scss +++ b/res/css/structures/_TagPanel.scss @@ -23,6 +23,7 @@ limitations under the License. flex-direction: column; align-items: center; justify-content: space-between; + height: 100%; } .mx_TagPanel_items_selected { @@ -58,7 +59,6 @@ limitations under the License. .mx_TagPanel .mx_TagPanel_scroller { flex-grow: 1; width: 100%; - height: 100vh; } .mx_TagPanel .mx_TagPanel_tagTileContainer { diff --git a/src/components/structures/MyGroups.js b/src/components/structures/MyGroups.js index b7efa2d00a..f75fc86fc8 100644 --- a/src/components/structures/MyGroups.js +++ b/src/components/structures/MyGroups.js @@ -72,7 +72,7 @@ export default createReactClass({ }); contentHeader = groupNodes.length > 0 ?

{ _t('Your Communities') }

:
; content = groupNodes.length > 0 ? -
+

{ _t( From 638629c2fa6fcba33080c77e9d83f4134217fbbb Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 17 Mar 2020 13:28:07 +0000 Subject: [PATCH 379/522] fix MyGroups scrollbar Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/structures/_MyGroups.scss | 5 ----- src/components/structures/MyGroups.js | 5 +++-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/res/css/structures/_MyGroups.scss b/res/css/structures/_MyGroups.scss index 47a5ea5a77..36150c33a5 100644 --- a/res/css/structures/_MyGroups.scss +++ b/res/css/structures/_MyGroups.scss @@ -102,11 +102,6 @@ limitations under the License. overflow-y: inherit; } -.mx_MyGroups_content, -.mx_MyGroups_scrollable { - overflow-y: scroll; -} - .mx_MyGroups_placeholder { background-color: $info-plinth-bg-color; color: $info-plinth-fg-color; diff --git a/src/components/structures/MyGroups.js b/src/components/structures/MyGroups.js index f75fc86fc8..f1209b7b9e 100644 --- a/src/components/structures/MyGroups.js +++ b/src/components/structures/MyGroups.js @@ -22,6 +22,7 @@ import { _t } from '../../languageHandler'; import dis from '../../dispatcher'; import AccessibleButton from '../views/elements/AccessibleButton'; import MatrixClientContext from "../../contexts/MatrixClientContext"; +import AutoHideScrollbar from "./AutoHideScrollbar"; export default createReactClass({ displayName: 'MyGroups', @@ -72,7 +73,7 @@ export default createReactClass({ }); contentHeader = groupNodes.length > 0 ?

{ _t('Your Communities') }

:
; content = groupNodes.length > 0 ? -
+

{ _t( @@ -91,7 +92,7 @@ export default createReactClass({

{ groupNodes }
-
: +
:
{ _t( "You're not currently a member of any communities.", From 83b6155637d821d707ea00d03955afc6016c4d6f Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 17 Mar 2020 14:12:15 +0000 Subject: [PATCH 380/522] Upgrade matrix-js-sdk to 5.1.1 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 3ab8247afb..93f0f46227 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "is-ip": "^2.0.0", "linkifyjs": "^2.1.6", "lodash": "^4.17.14", - "matrix-js-sdk": "5.1.1-rc.1", + "matrix-js-sdk": "5.1.1", "minimist": "^1.2.0", "pako": "^1.0.5", "png-chunks-extract": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index 965e156e39..05c8d60348 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5653,10 +5653,10 @@ mathml-tag-names@^2.0.1: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== -matrix-js-sdk@5.1.1-rc.1: - version "5.1.1-rc.1" - resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-5.1.1-rc.1.tgz#e3872696b8e6ec3fcae2d1ba1491e6a08d20954a" - integrity sha512-55F4jvJSVYJb5DDmso6Mld3HJ9v1UW0eT///SMcJtHVIJd5ZSLvsGV7rvMny7w6MHy5enfH4E2yItjjvlAL9dA== +matrix-js-sdk@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-5.1.1.tgz#d93c2db08acf07e894fb85345d3eaa8d4736b56c" + integrity sha512-zCkylD/oia9v/9Fbx54k/aBNd3szDflscViXq0gf2fQlKzTJRT3LoCAXZ9Uwr7gJ8AE8kFquyZ7revk3Y5YmPQ== dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" From 5b96408bc5c3e89c54348acf717e297728c716b3 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 17 Mar 2020 14:18:14 +0000 Subject: [PATCH 381/522] Prepare changelog for v2.2.3 --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34a6e6bfd2..07e478fa02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +Changes in [2.2.3](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.2.3) (2020-03-17) +=================================================================================================== +[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.2.3-rc.1...v2.2.3) + + * Upgrade JS SDK to 5.1.1 + * Add default on config setting to control call button in composer + [\#4228](https://github.com/matrix-org/matrix-react-sdk/pull/4228) + * Fix: make alternative addresses UX less confusing + [\#4226](https://github.com/matrix-org/matrix-react-sdk/pull/4226) + * Fix: best-effort to join room without canonical alias over federation from + room directory + [\#4211](https://github.com/matrix-org/matrix-react-sdk/pull/4211) + Changes in [2.2.3-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.2.3-rc.1) (2020-03-11) ============================================================================================================= [Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.2.1...v2.2.3-rc.1) From 1e3b917aededf13998bd7d9ee676f44d989a4454 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 17 Mar 2020 14:18:15 +0000 Subject: [PATCH 382/522] v2.2.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 93f0f46227..a89330aee3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-react-sdk", - "version": "2.2.3-rc.1", + "version": "2.2.3", "description": "SDK for matrix.org using React", "author": "matrix.org", "repository": { From 51012702f2365c3c115e085d7ab2d58c61114afa Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Tue, 17 Mar 2020 12:10:30 +0000 Subject: [PATCH 383/522] Translated using Weblate (Albanian) Currently translated at 99.3% (2141 of 2157 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 2a89531c03..912f75e361 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2192,5 +2192,7 @@ "This room has no alternative addresses": "Kjo dhomë nuk ka adresa alternative", "New address (e.g. #foo:domain)": "Adresë e re (p.sh., #foo:domain)", "Local addresses (unmoderated content)": "Adresa vendore (lëndë e pamoderuar)", - "Review Sessions": "Shqyrtoni Sesione" + "Review Sessions": "Shqyrtoni Sesione", + "Local address": "Adresë vendore", + "Published Addresses": "Adresa të Publikuara" } From b09c063d1b2cae9e26b336de0b0ed69f3d6afcc8 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 17 Mar 2020 14:25:44 +0000 Subject: [PATCH 384/522] Reset matrix-js-sdk back to develop branch --- package.json | 2 +- yarn.lock | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 5c5c9cce80..8cda349e03 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "is-ip": "^2.0.0", "linkifyjs": "^2.1.6", "lodash": "^4.17.14", - "matrix-js-sdk": "5.1.1", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop", "minimist": "^1.2.0", "pako": "^1.0.5", "png-chunks-extract": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index 9794a93612..ac511949ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5688,10 +5688,9 @@ mathml-tag-names@^2.0.1: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== -matrix-js-sdk@5.1.1: +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": version "5.1.1" - resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-5.1.1.tgz#d93c2db08acf07e894fb85345d3eaa8d4736b56c" - integrity sha512-zCkylD/oia9v/9Fbx54k/aBNd3szDflscViXq0gf2fQlKzTJRT3LoCAXZ9Uwr7gJ8AE8kFquyZ7revk3Y5YmPQ== + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/b2e154377a4268441a3b27b183dd7f7018187035" dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" From af023a2d7c3788c107ad046126f0fd4a925862c3 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Tue, 17 Mar 2020 11:13:52 -0600 Subject: [PATCH 385/522] rename 'jump to bottom' to avoid ublock block --- src/components/views/rooms/JumpToBottomButton.js | 2 +- src/i18n/strings/en_EN.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/rooms/JumpToBottomButton.js b/src/components/views/rooms/JumpToBottomButton.js index 487071855f..d3305f498a 100644 --- a/src/components/views/rooms/JumpToBottomButton.js +++ b/src/components/views/rooms/JumpToBottomButton.js @@ -24,7 +24,7 @@ export default (props) => { } return (
{ badge } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index d92cf41f5b..bf46586651 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -955,7 +955,7 @@ "Encrypted by a deleted session": "Encrypted by a deleted session", "Please select the destination room for this message": "Please select the destination room for this message", "Invite only": "Invite only", - "Scroll to bottom of page": "Scroll to bottom of page", + "Scroll to most recent messages": "Scroll to most recent messages", "Close preview": "Close preview", "device id: ": "device id: ", "Disinvite": "Disinvite", From 84a8ca69828a5934e5ea077c86d83b8e0e4806e9 Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Tue, 17 Mar 2020 13:18:22 -0500 Subject: [PATCH 386/522] Fix typo Signed-off-by: Aaron Raimist --- src/components/views/rooms/BasicMessageComposer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/BasicMessageComposer.js b/src/components/views/rooms/BasicMessageComposer.js index 52947aa6e2..3c5c698f51 100644 --- a/src/components/views/rooms/BasicMessageComposer.js +++ b/src/components/views/rooms/BasicMessageComposer.js @@ -372,7 +372,7 @@ export default class BasicMessageEditor extends React.Component { handled = true; // redo } else if ((!IS_MAC && modKey && event.key === Key.Y) || - (IS_MAC && modkey && event.shiftKey && event.key === Key.Z)) { + (IS_MAC && modKey && event.shiftKey && event.key === Key.Z)) { if (this.historyManager.canRedo()) { const {parts, caret} = this.historyManager.redo(); // pass matching inputType so historyManager doesn't push echo From 7b1b4cda14625fced42cf43641f00e175c8c5af7 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 17 Mar 2020 20:37:40 +0100 Subject: [PATCH 387/522] ensure local state for aliases doesn't get garbled up when removing another alias before the response of the first comes back --- src/components/views/room_settings/AliasSettings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index f8e2151c4f..bdcb22342c 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -233,11 +233,11 @@ export default class AliasSettings extends React.Component { onLocalAliasDeleted = (index) => { const alias = this.state.localAliases[index]; + console.log("removing local alias", index, alias); // TODO: In future, we should probably be making sure that the alias actually belongs // to this room. See https://github.com/vector-im/riot-web/issues/7353 MatrixClientPeg.get().deleteAlias(alias).then(() => { - const localAliases = this.state.localAliases.slice(); - localAliases.splice(index, 1); + const localAliases = this.state.localAliases.filter(a => a !== alias); this.setState({localAliases}); if (this.state.canonicalAlias === alias) { From f8c6097c397438e9f8a3b70f530e0e1f05d9c9fe Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 18 Mar 2020 11:18:48 +0100 Subject: [PATCH 388/522] remove logging --- src/components/views/room_settings/AliasSettings.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index bdcb22342c..857a80c34a 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -233,7 +233,6 @@ export default class AliasSettings extends React.Component { onLocalAliasDeleted = (index) => { const alias = this.state.localAliases[index]; - console.log("removing local alias", index, alias); // TODO: In future, we should probably be making sure that the alias actually belongs // to this room. See https://github.com/vector-im/riot-web/issues/7353 MatrixClientPeg.get().deleteAlias(alias).then(() => { From bc410e0cd2432bffa82603c89b9ce4e07e270dad Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Wed, 18 Mar 2020 02:58:53 +0000 Subject: [PATCH 389/522] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2157 of 2157 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 6ab657ee72..4ebdb441de 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2203,5 +2203,17 @@ "Theme added!": "已新增佈景主題!", "Custom theme URL": "自訂佈景主題 URL", "Add theme": "新增佈景主題", - "Review Sessions": "檢閱工作階段" + "Review Sessions": "檢閱工作階段", + "Scroll to most recent messages": "捲動到最新訊息", + "Local address": "本機位置", + "Published Addresses": "發佈的位置", + "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "發佈的位置可以讓在任何伺服器上的任何人用來加入您的聊天室。要發佈位置,您必須先設定本機位置。", + "Other published addresses:": "其他已發佈的位置:", + "No other published addresses yet, add one below": "尚無其他已發佈的位置,在下方新增一個", + "New published address (e.g. #alias:server)": "新的已發佈位置(例如:#alias:server)", + "Local Addresses": "本機位置", + "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "為此聊天室設定位置讓使用者可以透過您的家伺服器找到此聊天室 (%(localDomain)s)", + "Open an existing session & use it to verify this one, granting it access to encrypted messages.": "開啟既有的工作階段並使用它來驗證此工作階段,並授予其存取已加密訊息的權限。", + "Waiting…": "等待中……", + "If you can’t access one, ": "如果您無法存取裝置," } From 660bbfb2a92fcb0dcdb48c924cd811366df8ec8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Wed, 18 Mar 2020 07:48:18 +0000 Subject: [PATCH 390/522] Translated using Weblate (French) Currently translated at 100.0% (2157 of 2157 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 635033c009..6ad6a6b011 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2197,11 +2197,24 @@ "Local addresses (unmoderated content)": "Adresses locales (contenu non modéré)", "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s a changé le nom du salon de %(oldRoomName)s en %(newRoomName)s.", "%(senderName)s changed the addresses for this room.": "%(senderName)s a changé les adresses de ce salon.", - "Support adding custom themes": "Autoriser l'ajout de thèmes personnalisés", + "Support adding custom themes": "Autoriser l’ajout de thèmes personnalisés", "Invalid theme schema.": "Schéma du thème invalide.", "Error downloading theme information.": "Une erreur s'est produite en téléchargeant les informations du thème.", "Theme added!": "Thème ajouté !", "Custom theme URL": "URL personnalisée pour le thème", "Add theme": "Ajouter le thème", - "You don't have permission to delete the alias.": "Vous n'avez pas la permission de supprimer l'alias." + "You don't have permission to delete the alias.": "Vous n'avez pas la permission de supprimer l'alias.", + "Review Sessions": "Vérifier les sessions", + "Scroll to most recent messages": "Sauter aux messages les plus récents", + "Local address": "Adresse locale", + "Published Addresses": "Adresses publiées", + "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "Les adresses publiées peuvent être utilisées par n’importe qui sur n’importe quel serveur pour rejoindre votre salon. Pour publier une adresse, elle doit d’abord être définie comme adresse locale.", + "Other published addresses:": "Autres adresses publiques :", + "No other published addresses yet, add one below": "Aucune autre adresse n’est publiée, ajoutez-en une ci-dessous", + "New published address (e.g. #alias:server)": "Nouvelles adresses publiées (par ex. #alias:serveur)", + "Local Addresses": "Adresses locales", + "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Définissez les adresses de ce salon pour que les utilisateurs puissent trouver ce salon avec votre serveur d’accueil (%(localDomain)s)", + "Open an existing session & use it to verify this one, granting it access to encrypted messages.": "Ouvrez une session existante et utilisez-la pour vérifier celle-ci, ce qui lui permettra d’avoir accès aux messages chiffrés.", + "Waiting…": "Patientez…", + "If you can’t access one, ": "Si vous n’avez accès à aucune session, " } From 61c3132cc5e40ae2eeec079e33d7a4ab2b742d45 Mon Sep 17 00:00:00 2001 From: Mejans Date: Tue, 17 Mar 2020 19:59:51 +0000 Subject: [PATCH 391/522] Translated using Weblate (Occitan) Currently translated at 2.7% (59 of 2157 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/oc/ --- src/i18n/strings/oc.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/oc.json b/src/i18n/strings/oc.json index f67d7291ce..6e8969da35 100644 --- a/src/i18n/strings/oc.json +++ b/src/i18n/strings/oc.json @@ -46,5 +46,16 @@ "Loading …": "Cargament…", "Reason: %(reason)s": "Rason : %(reason)s", "Forget this room": "Oblidar aquesta sala", - "Disable": "Desactivar" + "Disable": "Desactivar", + "Do you want to chat with %(user)s?": "Volètz charrar amb %(user)s ?", + " wants to chat": " vòl charrar", + "Start chatting": "Començar de charrar", + "Do you want to join %(roomName)s?": "Volètz rejonher %(roomName)s ?", + " invited you": " vos convidèt", + "Reject": "Regetar", + "Reject & Ignore user": "Regetar e ignorar", + "%(roomName)s does not exist.": "%(roomName)s existís pas.", + "Not now": "Pas ara", + "Don't ask me again": "Me demandar pas mai", + "Options": "Opcions" } From c43dd8ce92420a9ea952e827ceacbff14bbc2062 Mon Sep 17 00:00:00 2001 From: Pedro Silva Date: Tue, 17 Mar 2020 23:33:15 +0000 Subject: [PATCH 392/522] Translated using Weblate (Portuguese) Currently translated at 28.3% (611 of 2157 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/pt/ --- src/i18n/strings/pt.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index f0f1ce9860..6c64a10696 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -321,7 +321,7 @@ "Please check your email to continue registration.": "Por favor, verifique o seu e-mail para continuar o processo de registro.", "Token incorrect": "Token incorreto", "Please enter the code it contains:": "Por favor, entre com o código que está na mensagem:", - "powered by Matrix": "rodando a partir do Matrix", + "powered by Matrix": "powered by Matrix", "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Se não especificar um endereço de e-mail, você não poderá redefinir sua senha. Tem certeza?", "Error decrypting audio": "Erro ao descriptografar o áudio", "Error decrypting image": "Erro ao descriptografar a imagem", @@ -627,5 +627,9 @@ "Call failed due to misconfigured server": "Chamada falhada devido a um erro de configuração do servidor", "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Peça ao administrador do seu servidor inicial (%(homeserverDomain)s) de configurar um servidor TURN para que as chamadas funcionem fiavelmente.", "Alternatively, you can try to use the public server at turn.matrix.org, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "Alternativamente, pode tentar usar o servidor público em turn.matrix.org, mas não será tão fiável e partilhará o seu IP com esse servidor. Também pode gerir isso nas definições.", - "Try using turn.matrix.org": "Tente utilizar turn.matrix.org" + "Try using turn.matrix.org": "Tente utilizar turn.matrix.org", + "The version of Riot": "A versão do Riot", + "Whether you're using Riot on a device where touch is the primary input mechanism": "Quer esteja a usar o Riot num dispositivo onde o touch é o mecanismo de entrada primário", + "Whether you're using Riot as an installed Progressive Web App": "Quer esteja a usar o Riot como uma Progressive Web App (PWA)", + "Your user agent": "O seu user agent" } From a34e8478d98b3ff6bb25dcb42e28f1f9c0d60791 Mon Sep 17 00:00:00 2001 From: catborise Date: Tue, 17 Mar 2020 19:52:46 +0000 Subject: [PATCH 393/522] Translated using Weblate (Turkish) Currently translated at 77.8% (1679 of 2157 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/tr/ --- src/i18n/strings/tr.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index 84cb229a46..28e9108902 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -353,7 +353,7 @@ "Sent messages will be stored until your connection has returned.": "Gönderilen iletiler bağlantınız geri gelene kadar saklanacak.", "(~%(count)s results)|one": "(~%(count)s sonuç)", "(~%(count)s results)|other": "(~%(count)s sonuçlar)", - "Cancel": "İptal Et", + "Cancel": "İptal", "Active call": "Aktif çağrı", "Please select the destination room for this message": "Bu ileti için lütfen hedef oda seçin", "Create new room": "Yeni Oda Oluştur", @@ -1700,5 +1700,10 @@ "Your keys are being backed up (the first backup could take a few minutes).": "Anahtarlarınız yedekleniyor (ilk yedek bir kaç dakika sürebilir).", "Secure your backup with a passphrase": "Yedeğinizi bir parola ile koruyun", "If you don't want to set this up now, you can later in Settings.": "Şimdi ayarlamak istemiyorsanız daha sonra Ayarlar menüsünden yapabilirsiniz.", - "Set up": "Ayarla" + "Set up": "Ayarla", + "Review Sessions": "Oturumlar Gözden Geçir", + "Cancel entering passphrase?": "Parola girişini iptal et?", + "%(senderName)s changed the alternative addresses for this room.": "Bu oda için alternatif adresler %(senderName)s tarafından değiştirildi.", + "%(senderName)s changed the main and alternative addresses for this room.": "Bu oda için ana ve alternatif adresler %(senderName)s tarafından değiştirildi.", + "%(senderName)s changed the addresses for this room.": "Bu oda adresleri %(senderName)s tarafından değiştirildi." } From d5b6392120719b7b82e853927e3c6bf223bb673b Mon Sep 17 00:00:00 2001 From: random Date: Wed, 18 Mar 2020 11:31:55 +0000 Subject: [PATCH 394/522] Translated using Weblate (Italian) Currently translated at 99.6% (2148 of 2157 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 8c61eda6e0..0aa4bfbca6 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2200,5 +2200,9 @@ "Theme added!": "Tema aggiunto!", "Custom theme URL": "URL tema personalizzato", "Add theme": "Aggiungi tema", - "You don't have permission to delete the alias.": "Non hai l'autorizzazione per eliminare l'alias." + "You don't have permission to delete the alias.": "Non hai l'autorizzazione per eliminare l'alias.", + "Review Sessions": "Controlla sessioni", + "Scroll to most recent messages": "Scorri ai messaggi più recenti", + "Local address": "Indirizzo locale", + "Published Addresses": "Indirizzi pubblicati" } From 87cb4a98a78286f02645b22bb4be29dcd8449b98 Mon Sep 17 00:00:00 2001 From: Mejans Date: Wed, 18 Mar 2020 11:17:08 +0000 Subject: [PATCH 395/522] Translated using Weblate (Occitan) Currently translated at 2.9% (63 of 2157 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/oc/ --- src/i18n/strings/oc.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/oc.json b/src/i18n/strings/oc.json index 6e8969da35..e62d44f51d 100644 --- a/src/i18n/strings/oc.json +++ b/src/i18n/strings/oc.json @@ -57,5 +57,9 @@ "%(roomName)s does not exist.": "%(roomName)s existís pas.", "Not now": "Pas ara", "Don't ask me again": "Me demandar pas mai", - "Options": "Opcions" + "Options": "Opcions", + "This Room": "Aquesta sala", + "All Rooms": "Totas les salas", + "Search…": "Cercar…", + "Server error": "Error servidor" } From 5ee2a33faae91a4da3c294a9c8e7103c1b8b530c Mon Sep 17 00:00:00 2001 From: Elwyn Malethan Date: Wed, 18 Mar 2020 11:20:32 +0000 Subject: [PATCH 396/522] Translated using Weblate (Welsh) Currently translated at 0.4% (9 of 2157 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/cy/ --- src/i18n/strings/cy.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/cy.json b/src/i18n/strings/cy.json index 951468c747..5795f3b5de 100644 --- a/src/i18n/strings/cy.json +++ b/src/i18n/strings/cy.json @@ -7,5 +7,6 @@ "The platform you're on": "Y platfform rydych chi arno", "The version of Riot.im": "Fersiwn Riot.im", "Whether or not you're logged in (we don't record your username)": "Os ydych wedi mewngofnodi ai peidio (nid ydym yn cofnodi'ch enw defnyddiwr)", - "Your language of choice": "Eich iaith o ddewis" + "Your language of choice": "Eich iaith o ddewis", + "The version of Riot": "Fersiwn Riot" } From 863d0206d26fd1045f689b819eded64c7b5c53e1 Mon Sep 17 00:00:00 2001 From: random Date: Wed, 18 Mar 2020 11:34:52 +0000 Subject: [PATCH 397/522] Translated using Weblate (Italian) Currently translated at 100.0% (2157 of 2157 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 0aa4bfbca6..6614a7aa6d 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2204,5 +2204,14 @@ "Review Sessions": "Controlla sessioni", "Scroll to most recent messages": "Scorri ai messaggi più recenti", "Local address": "Indirizzo locale", - "Published Addresses": "Indirizzi pubblicati" + "Published Addresses": "Indirizzi pubblicati", + "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "Gli indirizzi pubblicati possono essere usati da chiunque su qualsiasi server per entrare nella stanza. Per pubblicare un indirizzo, deve essere prima impostato come indirizzo locale.", + "Other published addresses:": "Altri indirizzi pubblicati:", + "No other published addresses yet, add one below": "Nessun altro indirizzo ancora pubblicato, aggiungine uno sotto", + "New published address (e.g. #alias:server)": "Nuovo indirizzo pubblicato (es. #alias:server)", + "Local Addresses": "Indirizzi locali", + "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Imposta gli indirizzi per la stanza affinché gli utenti la trovino attraverso il tuo homeserver (%(localDomain)s)", + "Open an existing session & use it to verify this one, granting it access to encrypted messages.": "Apri una sessione esistente e usala per verificare questa, dandole accesso ai messaggi cifrati.", + "Waiting…": "In attesa…", + "If you can’t access one, ": "Se non puoi accedere a nessuna, " } From a99b61a14b4eff09724ac0eb43263643398cc1f8 Mon Sep 17 00:00:00 2001 From: Tirifto Date: Wed, 18 Mar 2020 13:56:15 +0000 Subject: [PATCH 398/522] Translated using Weblate (Esperanto) Currently translated at 99.8% (2167 of 2171 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eo/ --- src/i18n/strings/eo.json | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index b3a06ea3ed..4849862f99 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -2184,5 +2184,31 @@ "Indexed rooms:": "Indeksitaj ĉambroj:", "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s el %(totalRooms)s", "Message downloading sleep time(ms)": "Dormotempo de elŝuto de mesaĝoj (milonsekunde)", - "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Permesi repaŝan vokasistan servilon turn.matrix.org, kiam via hejmservilo iun ne disponigas (via IP-adreso estus havigata dum voko)" + "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Permesi repaŝan vokasistan servilon turn.matrix.org, kiam via hejmservilo iun ne disponigas (via IP-adreso estus havigata dum voko)", + "Scroll to most recent messages": "Rulumi al plej freŝaj mesaĝoj", + "Local address": "Loka adreso", + "Published Addresses": "Publikigitaj adresoj", + "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "Publikigitan adreson povas uzi ĉiu persono el ĉiu servilo por aliĝi al via ĉambro. Por ke adreso publikiĝu, ĝi unue estu agordita kiel adreso loka.", + "Other published addresses:": "Aliaj publikigitaj adresoj:", + "No other published addresses yet, add one below": "Ankoraŭ neniuj aliaj publikigitaj adresoj; aldonu iun sube", + "New published address (e.g. #alias:server)": "Nova publikigita adreso (ekz. #kromnomo:servilo)", + "Local Addresses": "Lokaj adresoj", + "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Agordu adresojn por ĉi tiu ĉambro, por ke uzantoj povu ĝin trovi per via hejmservilo (%(localDomain)s)", + "Enter a server name": "Enigu nomon de servilo", + "Looks good": "Ŝajnas en ordo", + "Can't find this server or its room list": "Ne povas trovi ĉi tiun servilon aŭ ĝian liston de ĉambroj", + "All rooms": "Ĉiuj ĉambroj", + "Your server": "Via servilo", + "Are you sure you want to remove %(serverName)s": "Ĉu vi certe volas forigi servilon %(serverName)s", + "Remove server": "Forigi servilon", + "Matrix": "Matrix", + "Add a new server": "Aldoni novan servilon", + "Enter the name of a new server you want to explore.": "Enigu la nomon de nova servilo, kiun vi volas esplori.", + "Server name": "Nomo de servilo", + "Add a new server...": "Aldoni novan servilon…", + "%(networkName)s rooms": "Ĉambroj de %(networkName)s", + "Matrix rooms": "Ĉambroj de Matrix", + "Open an existing session & use it to verify this one, granting it access to encrypted messages.": "Malfermi jaman salutaĵon kaj kontroli ĉi tiun per ĝi, permesante al ĝi aliron al ĉifritaj mesaĝoj.", + "Waiting…": "Atendante…", + "If you can’t access one, ": "Se vi ne povas iun atingi, " } From cad28c81c00ec434dd06c31bc102f4ba25a424c9 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 18 Mar 2020 16:40:21 +0000 Subject: [PATCH 399/522] Add Keyboard shortcuts dialog Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- package.json | 1 + res/css/_components.scss | 1 + .../dialogs/_KeyboardShortcutsDialog.scss | 65 ++++ src/{Keyboard.js => Keyboard.ts} | 5 +- src/accessibility/KeyboardShortcuts.tsx | 313 ++++++++++++++++++ src/components/structures/LoggedInView.js | 10 +- src/components/views/dialogs/InfoDialog.js | 6 +- .../settings/tabs/user/HelpUserSettingsTab.js | 4 + src/i18n/strings/en_EN.json | 40 ++- yarn.lock | 5 + 10 files changed, 444 insertions(+), 6 deletions(-) create mode 100644 res/css/views/dialogs/_KeyboardShortcutsDialog.scss rename src/{Keyboard.js => Keyboard.ts} (92%) create mode 100644 src/accessibility/KeyboardShortcuts.tsx diff --git a/package.json b/package.json index 8cda349e03..2316482f87 100644 --- a/package.json +++ b/package.json @@ -118,6 +118,7 @@ "@babel/preset-typescript": "^7.7.4", "@babel/register": "^7.7.4", "@peculiar/webcrypto": "^1.0.22", + "@types/classnames": "^2.2.10", "@types/react": "16.9", "babel-eslint": "^10.0.3", "babel-jest": "^24.9.0", diff --git a/res/css/_components.scss b/res/css/_components.scss index bc636eb3c6..8f05394a48 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -65,6 +65,7 @@ @import "./views/dialogs/_GroupAddressPicker.scss"; @import "./views/dialogs/_IncomingSasDialog.scss"; @import "./views/dialogs/_InviteDialog.scss"; +@import "./views/dialogs/_KeyboardShortcutsDialog.scss"; @import "./views/dialogs/_MessageEditHistoryDialog.scss"; @import "./views/dialogs/_NewSessionReviewDialog.scss"; @import "./views/dialogs/_RoomSettingsDialog.scss"; diff --git a/res/css/views/dialogs/_KeyboardShortcutsDialog.scss b/res/css/views/dialogs/_KeyboardShortcutsDialog.scss new file mode 100644 index 0000000000..231623f6ef --- /dev/null +++ b/res/css/views/dialogs/_KeyboardShortcutsDialog.scss @@ -0,0 +1,65 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.mx_KeyboardShortcutsDialog { + display: flex; + flex-wrap: wrap; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + margin-bottom: -50px; + max-height: 700px; // XXX: this may need adjusting when adding new shortcuts + + .mx_KeyboardShortcutsDialog_category { + width: 33.3333%; // 3 columns + margin: 0 0 40px; + + & > div { + padding-left: 5px; + } + } + + h3 { + margin: 0 0 10px; + } + + h5 { + margin: 15px 0 5px; + font-weight: normal; + } + + kbd { + padding: 5px; + border-radius: 4px; + background: $roomheader-addroom-bg-color; + margin-right: 5px; + min-width: 20px; + text-align: center; + display: inline-block; + border: 1px solid black; + box-shadow: 0 2px black; + margin-bottom: 4px; + text-transform: capitalize; + + & + kbd { + margin-left: 5px; + } + } + + .mx_KeyboardShortcutsDialog_inline div { + display: inline; + } +} diff --git a/src/Keyboard.js b/src/Keyboard.ts similarity index 92% rename from src/Keyboard.js rename to src/Keyboard.ts index 478d75acc1..f5cf0a5492 100644 --- a/src/Keyboard.js +++ b/src/Keyboard.ts @@ -40,6 +40,7 @@ export const Key = { GREATER_THAN: ">", BACKTICK: "`", SPACE: " ", + SLASH: "/", A: "a", B: "b", C: "c", @@ -68,8 +69,9 @@ export const Key = { Z: "z", }; +export const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0; + export function isOnlyCtrlOrCmdKeyEvent(ev) { - const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0; if (isMac) { return ev.metaKey && !ev.altKey && !ev.ctrlKey && !ev.shiftKey; } else { @@ -78,7 +80,6 @@ export function isOnlyCtrlOrCmdKeyEvent(ev) { } export function isOnlyCtrlOrCmdIgnoreShiftKeyEvent(ev) { - const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0; if (isMac) { return ev.metaKey && !ev.altKey && !ev.ctrlKey; } else { diff --git a/src/accessibility/KeyboardShortcuts.tsx b/src/accessibility/KeyboardShortcuts.tsx new file mode 100644 index 0000000000..ceec3f94bc --- /dev/null +++ b/src/accessibility/KeyboardShortcuts.tsx @@ -0,0 +1,313 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import * as React from "react"; +import classNames from "classnames"; + +import * as sdk from "../index"; +import Modal from "../Modal"; +import { _t, _td } from "../languageHandler"; +import {isMac, Key} from "../Keyboard"; + +// TS: once languageHandler is TS we can probably inline this into the enum +_td("Navigation"); +_td("Calls"); +_td("Composer"); +_td("Room List"); +_td("Autocomplete"); + +export enum Categories { + NAVIGATION="Navigation", + CALLS="Calls", + COMPOSER="Composer", + ROOM_LIST="Room List", + AUTOCOMPLETE="Autocomplete", +} + +// TS: once languageHandler is TS we can probably inline this into the enum +_td("Alt"); +_td("Alt Gr"); +_td("Shift"); +_td("Super"); +_td("Ctrl"); + +export enum Modifiers { + ALT="Alt", + OPTION="Option", // This gets displayed as an Icon + ALT_GR="Alt Gr", + SHIFT="Shift", + SUPER="Super", // should this be "Windows"? + // Instead of using below, consider CMD_OR_CTRL + COMMAND="Command", // This gets displayed as an Icon + CONTROL="Ctrl", +} + +// Meta-modifier: isMac ? CMD : CONTROL +export const CMD_OR_CTRL = isMac ? Modifiers.COMMAND : Modifiers.CONTROL; + +interface IKeybind { + modifiers?: Modifiers[]; + key: string; // TS: fix this once Key is an enum +} + +interface IShortcut { + keybinds: IKeybind[]; + description: string; +} + +const shortcuts: Record = { + [Categories.COMPOSER]: [ + { + keybinds: [{ + modifiers: [CMD_OR_CTRL], + key: Key.B, + }], + description: _td("Toggle Bold"), + }, { + keybinds: [{ + modifiers: [CMD_OR_CTRL], + key: Key.I, + }], + description: _td("Toggle Italics"), + }, { + keybinds: [{ + modifiers: [CMD_OR_CTRL], + key: Key.GREATER_THAN, + }], + description: _td("Toggle Quote"), + }, { + keybinds: [{ + modifiers: [CMD_OR_CTRL], + key: Key.M, + }], + description: _td("Toggle Markdown"), + }, { + keybinds: [{ + modifiers: [Modifiers.SHIFT], + key: Key.ENTER, + }], + description: _td("New line"), + }, { + keybinds: [{ + key: Key.ARROW_UP, + }, { + key: Key.ARROW_DOWN, + }], + description: _td("Navigate recent messages to edit"), + }, { + keybinds: [{ + modifiers: [CMD_OR_CTRL], + key: Key.HOME, + }, { + modifiers: [CMD_OR_CTRL], + key: Key.END, + }], + description: _td("Jump to start/end of the composer"), + }, + ], + + [Categories.CALLS]: [ + { + keybinds: [{ + modifiers: [CMD_OR_CTRL], + key: Key.D, + }], + description: _td("Toggle microphone mute"), + }, { + keybinds: [{ + modifiers: [CMD_OR_CTRL], + key: Key.E, + }], + description: _td("Toggle video on/off"), + }, + ], + + [Categories.ROOM_LIST]: [ + { + keybinds: [{ + modifiers: [CMD_OR_CTRL], + key: Key.K, + }], + description: _td("Jump to room search"), + }, { + keybinds: [{ + key: Key.ARROW_UP, + }, { + key: Key.ARROW_DOWN, + }], + description: _td("Navigate up/down in the room list"), + }, { + keybinds: [{ + key: Key.ENTER, + }], + description: _td("Select room from the room list"), + }, { + keybinds: [{ + key: Key.ARROW_LEFT, + }], + description: _td("Collapse room list section"), + }, { + keybinds: [{ + key: Key.ARROW_RIGHT, + }], + description: _td("Expand room list section"), + }, { + keybinds: [{ + key: Key.ESCAPE, + }], + description: _td("Clear room list filter field"), + }, + ], + + [Categories.NAVIGATION]: [ + { + keybinds: [{ + key: Key.PAGE_UP, + }, { + key: Key.PAGE_DOWN, + }], + description: _td("Scroll up/down in the timeline"), + }, { + keybinds: [{ + modifiers: [CMD_OR_CTRL], + key: Key.BACKTICK, + }], + description: _td("Toggle the top left menu"), + }, { + keybinds: [{ + key: Key.ESCAPE, + }], + description: _td("Close dialog or context menu"), + }, { + keybinds: [{ + key: Key.ENTER, + }, { + key: Key.SPACE, + }], + description: _td("Activate selected button"), + }, { + keybinds: [{ + modifiers: [CMD_OR_CTRL], + key: Key.SLASH, + }], + description: _td("Toggle this dialog"), + }, + ], + + [Categories.AUTOCOMPLETE]: [ + { + keybinds: [{ + key: Key.ARROW_UP, + }, { + key: Key.ARROW_DOWN, + }], + description: _td("Move autocomplete selection up/down"), + }, { + keybinds: [{ + key: Key.ESCAPE, + }], + description: _td("Cancel autocomplete"), + }, + ], +}; + +interface IModal { + close: () => void; + finished: Promise; +} + +const modifierIcon: Record = { + [Modifiers.COMMAND]: "⌘", + [Modifiers.OPTION]: "⌥", +}; + +const alternateKeyName: Record = { // TS: fix this once Key is an enum + [Key.PAGE_UP]: _td("Page Up"), + [Key.PAGE_DOWN]: _td("Page Down"), + [Key.ESCAPE]: _td("Esc"), + [Key.ENTER]: _td("Enter"), + [Key.SPACE]: _td("Space"), + [Key.HOME]: _td("Home"), + [Key.END]: _td("End"), +}; +const keyIcon: Record = { // TS: fix this once Key is an enum + [Key.ARROW_UP]: "↑", + [Key.ARROW_DOWN]: "↓", + [Key.ARROW_LEFT]: "←", + [Key.ARROW_RIGHT]: "→", +}; + +const Shortcut: React.FC<{ + shortcut: IShortcut; +}> = ({shortcut}) => { + const classes = classNames({ + "mx_KeyboardShortcutsDialog_inline": shortcut.keybinds.every(k => !k.modifiers || k.modifiers.length === 0), + }); + + return
+
{ _t(shortcut.description) }
+ { shortcut.keybinds.map(s => { + let text = s.key; + if (alternateKeyName[s.key]) { + text = _t(alternateKeyName[s.key]); + } else if (keyIcon[s.key]) { + text = keyIcon[s.key]; + } + + return
+ { s.modifiers && s.modifiers.map(m => { + return + { modifierIcon[m] || _t(m) }+ + ; + }) } + { text } +
; + }) } +
; +}; + +let activeModal: IModal = null; +export const toggleDialog = () => { + if (activeModal) { + activeModal.close(); + activeModal = null; + return; + } + + const sections = Object.entries(shortcuts).map(([category, list]) => { + return
+

{_t(category)}

+
{list.map(shortcut => )}
+
; + }); + + const InfoDialog = sdk.getComponent('dialogs.InfoDialog'); + activeModal = Modal.createTrackedDialog("Keyboard Shortcuts", "", InfoDialog, { + className: "mx_KeyboardShortcutsDialog", + title: _t("Keyboard Shortcuts"), + description: sections, + hasCloseButton: true, + onKeyDown: (ev) => { + if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey && ev.key === Key.SLASH) { // Ctrl + / + ev.stopPropagation(); + activeModal.close(); + } + }, + onFinished: () => { + activeModal = null; + }, + }); +}; diff --git a/src/components/structures/LoggedInView.js b/src/components/structures/LoggedInView.js index d643c82120..576ae2b276 100644 --- a/src/components/structures/LoggedInView.js +++ b/src/components/structures/LoggedInView.js @@ -39,6 +39,7 @@ import RoomListActions from '../../actions/RoomListActions'; import ResizeHandle from '../views/elements/ResizeHandle'; import {Resizer, CollapseDistributor} from '../../resizer'; import MatrixClientContext from "../../contexts/MatrixClientContext"; +import * as KeyboardShortcuts from "../../accessibility/KeyboardShortcuts"; // We need to fetch each pinned message individually (if we don't already have it) // so each pinned message may trigger a request. Limit the number per room for sanity. // NB. this is just for server notices rather than pinned messages in general. @@ -365,8 +366,6 @@ const LoggedInView = createReactClass({ } break; case Key.BACKTICK: - if (ev.key !== "`") break; - // Ideally this would be CTRL+P for "Profile", but that's // taken by the print dialog. CTRL+I for "Information" // was previously chosen but conflicted with italics in @@ -379,6 +378,13 @@ const LoggedInView = createReactClass({ handled = true; } break; + + case Key.SLASH: + if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) { + KeyboardShortcuts.toggleDialog(); + handled = true; + } + break; } if (handled) { diff --git a/src/components/views/dialogs/InfoDialog.js b/src/components/views/dialogs/InfoDialog.js index 8a8f51c25a..b63f6ba9c6 100644 --- a/src/components/views/dialogs/InfoDialog.js +++ b/src/components/views/dialogs/InfoDialog.js @@ -32,6 +32,7 @@ export default createReactClass({ button: PropTypes.string, onFinished: PropTypes.func, hasCloseButton: PropTypes.bool, + onKeyDown: PropTypes.func, }, getDefaultProps: function() { @@ -50,10 +51,13 @@ export default createReactClass({ const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog'); const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); return ( -
{ this.props.description } diff --git a/src/components/views/settings/tabs/user/HelpUserSettingsTab.js b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js index aca2f010b6..9a2db8113e 100644 --- a/src/components/views/settings/tabs/user/HelpUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js @@ -24,6 +24,7 @@ import createRoom from "../../../../../createRoom"; import Modal from "../../../../../Modal"; import * as sdk from "../../../../../"; import PlatformPeg from "../../../../../PlatformPeg"; +import * as KeyboardShortcuts from "../../../../../accessibility/KeyboardShortcuts"; export default class HelpUserSettingsTab extends React.Component { static propTypes = { @@ -224,6 +225,9 @@ export default class HelpUserSettingsTab extends React.Component {
{faqText}
+ + { _t("Keyboard Shortcuts") } +
{_t("Versions")} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index d9b8f4f0bd..cdfc3cbb89 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -742,6 +742,7 @@ "Clear cache and reload": "Clear cache and reload", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.", "FAQ": "FAQ", + "Keyboard Shortcuts": "Keyboard Shortcuts", "Versions": "Versions", "riot-web version:": "riot-web version:", "olm version:": "olm version:", @@ -2155,5 +2156,42 @@ "Message downloading sleep time(ms)": "Message downloading sleep time(ms)", "Failed to set direct chat tag": "Failed to set direct chat tag", "Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room", - "Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room" + "Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room", + "Navigation": "Navigation", + "Calls": "Calls", + "Room List": "Room List", + "Autocomplete": "Autocomplete", + "Alt": "Alt", + "Alt Gr": "Alt Gr", + "Shift": "Shift", + "Super": "Super", + "Ctrl": "Ctrl", + "Toggle Bold": "Toggle Bold", + "Toggle Italics": "Toggle Italics", + "Toggle Quote": "Toggle Quote", + "Toggle Markdown": "Toggle Markdown", + "New line": "New line", + "Navigate recent messages to edit": "Navigate recent messages to edit", + "Jump to start/end of the composer": "Jump to start/end of the composer", + "Toggle microphone mute": "Toggle microphone mute", + "Toggle video on/off": "Toggle video on/off", + "Jump to room search": "Jump to room search", + "Navigate up/down in the room list": "Navigate up/down in the room list", + "Select room from the room list": "Select room from the room list", + "Collapse room list section": "Collapse room list section", + "Expand room list section": "Expand room list section", + "Clear room list filter field": "Clear room list filter field", + "Scroll up/down in the timeline": "Scroll up/down in the timeline", + "Toggle the top left menu": "Toggle the top left menu", + "Close dialog or context menu": "Close dialog or context menu", + "Activate selected button": "Activate selected button", + "Toggle this dialog": "Toggle this dialog", + "Move autocomplete selection up/down": "Move autocomplete selection up/down", + "Cancel autocomplete": "Cancel autocomplete", + "Page Up": "Page Up", + "Page Down": "Page Down", + "Esc": "Esc", + "Enter": "Enter", + "Space": "Space", + "End": "End" } diff --git a/yarn.lock b/yarn.lock index ac511949ce..ac921a619a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1178,6 +1178,11 @@ dependencies: "@babel/types" "^7.3.0" +"@types/classnames@^2.2.10": + version "2.2.10" + resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.10.tgz#cc658ca319b6355399efc1f5b9e818f1a24bf999" + integrity sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ== + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" From 9cda84c675e20636bf3c7f60893065a50d75762d Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 18 Mar 2020 16:54:46 +0000 Subject: [PATCH 400/522] fix kbd background colour Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/dialogs/_KeyboardShortcutsDialog.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/css/views/dialogs/_KeyboardShortcutsDialog.scss b/res/css/views/dialogs/_KeyboardShortcutsDialog.scss index 231623f6ef..ce7dd90d33 100644 --- a/res/css/views/dialogs/_KeyboardShortcutsDialog.scss +++ b/res/css/views/dialogs/_KeyboardShortcutsDialog.scss @@ -44,7 +44,7 @@ limitations under the License. kbd { padding: 5px; border-radius: 4px; - background: $roomheader-addroom-bg-color; + background: $other-user-pill-bg-color; margin-right: 5px; min-width: 20px; text-align: center; From 36cedc58bb09e03fe4c8de030bec9c5bfb26d0b1 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 18 Mar 2020 17:03:00 +0000 Subject: [PATCH 401/522] Make ts happier Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/accessibility/KeyboardShortcuts.tsx | 30 ++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/accessibility/KeyboardShortcuts.tsx b/src/accessibility/KeyboardShortcuts.tsx index ceec3f94bc..97b3a69bd5 100644 --- a/src/accessibility/KeyboardShortcuts.tsx +++ b/src/accessibility/KeyboardShortcuts.tsx @@ -30,11 +30,11 @@ _td("Room List"); _td("Autocomplete"); export enum Categories { - NAVIGATION="Navigation", - CALLS="Calls", - COMPOSER="Composer", - ROOM_LIST="Room List", - AUTOCOMPLETE="Autocomplete", + NAVIGATION = "Navigation", + CALLS = "Calls", + COMPOSER = "Composer", + ROOM_LIST = "Room List", + AUTOCOMPLETE = "Autocomplete", } // TS: once languageHandler is TS we can probably inline this into the enum @@ -45,14 +45,14 @@ _td("Super"); _td("Ctrl"); export enum Modifiers { - ALT="Alt", - OPTION="Option", // This gets displayed as an Icon - ALT_GR="Alt Gr", - SHIFT="Shift", - SUPER="Super", // should this be "Windows"? + ALT = "Alt", + OPTION = "Option", // This gets displayed as an Icon + ALT_GR = "Alt Gr", + SHIFT = "Shift", + SUPER = "Super", // should this be "Windows"? // Instead of using below, consider CMD_OR_CTRL - COMMAND="Command", // This gets displayed as an Icon - CONTROL="Ctrl", + COMMAND = "Command", // This gets displayed as an Icon + CONTROL = "Ctrl", } // Meta-modifier: isMac ? CMD : CONTROL @@ -229,12 +229,12 @@ interface IModal { finished: Promise; } -const modifierIcon: Record = { +const modifierIcon: Record = { [Modifiers.COMMAND]: "⌘", [Modifiers.OPTION]: "⌥", }; -const alternateKeyName: Record = { // TS: fix this once Key is an enum +const alternateKeyName: Record = { [Key.PAGE_UP]: _td("Page Up"), [Key.PAGE_DOWN]: _td("Page Down"), [Key.ESCAPE]: _td("Esc"), @@ -243,7 +243,7 @@ const alternateKeyName: Record = { // TS: fix this once Key is a [Key.HOME]: _td("Home"), [Key.END]: _td("End"), }; -const keyIcon: Record = { // TS: fix this once Key is an enum +const keyIcon: Record = { [Key.ARROW_UP]: "↑", [Key.ARROW_DOWN]: "↓", [Key.ARROW_LEFT]: "←", From 1d5001544c57fc2d08452865c4f5fde3d9f6c196 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 18 Mar 2020 17:32:36 +0000 Subject: [PATCH 402/522] Improve colouring Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/dialogs/_KeyboardShortcutsDialog.scss | 6 +++--- res/themes/dark/css/_dark.scss | 2 ++ res/themes/light/css/_light.scss | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/res/css/views/dialogs/_KeyboardShortcutsDialog.scss b/res/css/views/dialogs/_KeyboardShortcutsDialog.scss index ce7dd90d33..f529b11059 100644 --- a/res/css/views/dialogs/_KeyboardShortcutsDialog.scss +++ b/res/css/views/dialogs/_KeyboardShortcutsDialog.scss @@ -44,13 +44,13 @@ limitations under the License. kbd { padding: 5px; border-radius: 4px; - background: $other-user-pill-bg-color; + background-color: $reaction-row-button-bg-color; margin-right: 5px; min-width: 20px; text-align: center; display: inline-block; - border: 1px solid black; - box-shadow: 0 2px black; + border: 1px solid $kbd-border-color; + box-shadow: 0 2px $kbd-border-color; margin-bottom: 4px; text-transform: capitalize; diff --git a/res/themes/dark/css/_dark.scss b/res/themes/dark/css/_dark.scss index a3515a9d99..77360c870a 100644 --- a/res/themes/dark/css/_dark.scss +++ b/res/themes/dark/css/_dark.scss @@ -165,6 +165,8 @@ $reaction-row-button-hover-border-color: $header-panel-text-primary-color; $reaction-row-button-selected-bg-color: #1f6954; $reaction-row-button-selected-border-color: $accent-color; +$kbd-border-color: #000000; + $tooltip-timeline-bg-color: $tagpanel-bg-color; $tooltip-timeline-fg-color: #ffffff; diff --git a/res/themes/light/css/_light.scss b/res/themes/light/css/_light.scss index 626ccb2e13..9bdd712e07 100644 --- a/res/themes/light/css/_light.scss +++ b/res/themes/light/css/_light.scss @@ -290,6 +290,8 @@ $reaction-row-button-hover-border-color: $focus-bg-color; $reaction-row-button-selected-bg-color: #e9fff9; $reaction-row-button-selected-border-color: $accent-color; +$kbd-border-color: $reaction-row-button-border-color; + $tooltip-timeline-bg-color: $tagpanel-bg-color; $tooltip-timeline-fg-color: #ffffff; From 544e2c9971d78729922a04c035ef468b49a7b6e4 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 18 Mar 2020 20:53:05 +0000 Subject: [PATCH 403/522] Don't use buildkite agent to upload logs --- scripts/ci/end-to-end-tests.sh | 8 -------- 1 file changed, 8 deletions(-) diff --git a/scripts/ci/end-to-end-tests.sh b/scripts/ci/end-to-end-tests.sh index 9bdb512940..2f907dffa2 100755 --- a/scripts/ci/end-to-end-tests.sh +++ b/scripts/ci/end-to-end-tests.sh @@ -6,16 +6,8 @@ set -ev -upload_logs() { - echo "--- Uploading logs" - buildkite-agent artifact upload "logs/**/*;synapse/installations/consent/homeserver.log" -} - handle_error() { EXIT_CODE=$? - if [ $TESTS_STARTED -eq 1 ]; then - upload_logs - fi exit $EXIT_CODE } From 7a448c5ba2065035adf90d9bd9ff31067df543c6 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 18 Mar 2020 20:56:28 +0000 Subject: [PATCH 404/522] Fix Alt being Option on Mac Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/accessibility/KeyboardShortcuts.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/accessibility/KeyboardShortcuts.tsx b/src/accessibility/KeyboardShortcuts.tsx index 97b3a69bd5..618ed4755a 100644 --- a/src/accessibility/KeyboardShortcuts.tsx +++ b/src/accessibility/KeyboardShortcuts.tsx @@ -45,8 +45,7 @@ _td("Super"); _td("Ctrl"); export enum Modifiers { - ALT = "Alt", - OPTION = "Option", // This gets displayed as an Icon + ALT = "Alt", // Option on Mac and displayed as an Icon ALT_GR = "Alt Gr", SHIFT = "Shift", SUPER = "Super", // should this be "Windows"? @@ -231,9 +230,12 @@ interface IModal { const modifierIcon: Record = { [Modifiers.COMMAND]: "⌘", - [Modifiers.OPTION]: "⌥", }; +if (isMac) { + modifierIcon[Modifiers.ALT] = "⌥"; +} + const alternateKeyName: Record = { [Key.PAGE_UP]: _td("Page Up"), [Key.PAGE_DOWN]: _td("Page Down"), From 22c8df9f2309842708ea9b567d73f73017a9feb5 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 18 Mar 2020 21:08:37 +0000 Subject: [PATCH 405/522] Update DM invite copy Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/dialogs/InviteDialog.js | 9 +++++---- src/i18n/strings/en_EN.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js index d27a66165e..84ce69e174 100644 --- a/src/components/views/dialogs/InviteDialog.js +++ b/src/components/views/dialogs/InviteDialog.js @@ -1060,10 +1060,11 @@ export default class InviteDialog extends React.PureComponent { title = _t("Direct Messages"); helpText = _t( - "If you can't find someone, ask them for their username, share your " + - "username (%(userId)s) or profile link.", - {userId}, - {a: (sub) => {sub}}, + "Start a conversation with someone using their name, username (like ) or email address.", + {}, + {userId: () => { + return {userId}; + }}, ); buttonText = _t("Go"); goButtonFn = this._startDm; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index f8c8ad0200..2f800f8d21 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1584,7 +1584,7 @@ "Recent Conversations": "Recent Conversations", "Suggestions": "Suggestions", "Recently Direct Messaged": "Recently Direct Messaged", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.", + "Start a conversation with someone using their name, username (like ) or email address.": "Start a conversation with someone using their name, username (like ) or email address.", "Go": "Go", "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.", "You added a new session '%(displayName)s', which is requesting encryption keys.": "You added a new session '%(displayName)s', which is requesting encryption keys.", From dd9ead0166181da4c7dd5471a84d7feb42dbb7e6 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 18 Mar 2020 21:09:52 +0000 Subject: [PATCH 406/522] Invite dialog: backspace on empty field remove right-most target Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/dialogs/InviteDialog.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js index 84ce69e174..8cf3967ac5 100644 --- a/src/components/views/dialogs/InviteDialog.js +++ b/src/components/views/dialogs/InviteDialog.js @@ -35,6 +35,7 @@ import createRoom, {canEncryptToAllUsers} from "../../../createRoom"; import {inviteMultipleToRoom} from "../../../RoomInvite"; import SettingsStore from '../../../settings/SettingsStore'; import RoomListStore, {TAG_DM} from "../../../stores/RoomListStore"; +import {Key} from "../../../Keyboard"; export const KIND_DM = "dm"; export const KIND_INVITE = "invite"; @@ -647,6 +648,14 @@ export default class InviteDialog extends React.PureComponent { this.props.onFinished(); }; + _onKeyDown = (e) => { + // when the field is empty and the user hits backspace remove the right-most target + if (!e.target.value && this.state.targets.length > 0 && e.key === Key.BACKSPACE && !e.ctrlKey && !e.shiftKey) { + e.preventDefault(); + this._removeMember(this.state.targets[this.state.targets.length - 1]); + } + }; + _updateFilter = (e) => { const term = e.target.value; this.setState({filterText: term}); @@ -988,8 +997,8 @@ export default class InviteDialog extends React.PureComponent { )); const input = (