{_t("To continue you need to accept the Terms of this service.")}
+{_t("To continue you need to accept the terms of this service.")}
| {_t("Service")} | {_t("Summary")} | -{_t("Terms")} | +{_t("Document")} | {_t("Accept")} | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| {serviceName} | {summary} | -- + | {termDoc[termsLang].name} + | {_t( "Your keys are being backed up (the first backup could take a few minutes).", )} -%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Be administratören för din hemserver (%(homeserverDomain)s) att konfigurera en TURN-server för att samtal ska fungera pålitligt.",
+ "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.": "Alternativt kan du testa att använda den offentliga servern turn.matrix.org, men det är inte lika pålitligt och det kommer att dela din IP-adress med den servern. Du kan också hantera detta under Inställningar.",
+ "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.": "Varning: Uppgradering av ett rum flyttar inte automatiskt rumsmedlemmar till den nya versionen av rummet. Vi lägger ut en länk till det nya rummet i den gamla versionen av rummet - rumsmedlemmar måste klicka på den här länken för att gå med i det nya rummet.",
+ "Please confirm that you'd like to go forward with upgrading this room from %(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í.",
+ "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",
+ "Failed to start chat": "Nepovedlo se začít chat",
+ "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í vašeho avatara pro tuto místnost",
+ "Changes your avatar in all rooms": "Změní vašeho avatara 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í.",
+ "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.",
+ "Use the new, faster, but still experimental composer for writing messages (requires refresh)": "Používat nový, rychlejší ale experimentální editor na zprávy (vyžaduje znovunačtení stránky)",
+ "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)",
+ "Send read receipts for messages (requires compatible homeserver to disable)": "Odesílat potvrzení o přijetí (vypnutá volba vyžaduje kompatibilní domovský server)",
+ "Accept
- { completions }
- ;
+ return (
+
+ { completions }
+
+ );
}
}
diff --git a/src/autocomplete/Components.js b/src/autocomplete/Components.js
index b09f4e963e..ca105bb211 100644
--- a/src/autocomplete/Components.js
+++ b/src/autocomplete/Components.js
@@ -60,7 +60,7 @@ export class PillCompletion extends React.Component {
...restProps
} = this.props;
return (
-
+
{ initialComponent }
{ title }
{ subtitle }
diff --git a/src/autocomplete/EmojiProvider.js b/src/autocomplete/EmojiProvider.js
index 8afcba6ab0..1e39593022 100644
--- a/src/autocomplete/EmojiProvider.js
+++ b/src/autocomplete/EmojiProvider.js
@@ -116,7 +116,9 @@ export default class EmojiProvider extends AutocompleteProvider {
return {
completion: unicode,
component: (
-
- { completions }
- ;
+ return (
+
+ { completions }
+
+ );
}
}
diff --git a/src/autocomplete/NotifProvider.js b/src/autocomplete/NotifProvider.js
index 60a3352f9b..95cfb34616 100644
--- a/src/autocomplete/NotifProvider.js
+++ b/src/autocomplete/NotifProvider.js
@@ -58,8 +58,14 @@ export default class NotifProvider extends AutocompleteProvider {
}
renderCompletions(completions: [React.Component]): ?React.Component {
- return
- { completions }
- ;
+ return (
+
+ { completions }
+
+ );
}
}
diff --git a/src/autocomplete/RoomProvider.js b/src/autocomplete/RoomProvider.js
index b94edf590c..79986657b8 100644
--- a/src/autocomplete/RoomProvider.js
+++ b/src/autocomplete/RoomProvider.js
@@ -109,8 +109,14 @@ export default class RoomProvider extends AutocompleteProvider {
}
renderCompletions(completions: [React.Component]): ?React.Component {
- return
- { completions }
- ;
+ return (
+
+ { completions }
+
+ );
}
}
diff --git a/src/autocomplete/UserProvider.js b/src/autocomplete/UserProvider.js
index 62ae5d4970..edba6d4b03 100644
--- a/src/autocomplete/UserProvider.js
+++ b/src/autocomplete/UserProvider.js
@@ -164,7 +164,7 @@ export default class UserProvider extends AutocompleteProvider {
}
renderCompletions(completions: [React.Component]): ?React.Component {
- return
+ return );
}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index c23cd6d324..9e8a0fec5c 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -1726,11 +1726,16 @@
"Clear personal data": "Clear personal data",
"Warning: Your personal data (including encryption keys) is still stored on this device. Clear it if you're finished using this device, or want to sign in to another account.": "Warning: Your personal data (including encryption keys) is still stored on this device. Clear it if you're finished using this device, or want to sign in to another account.",
"Commands": "Commands",
+ "Community Autocomplete": "Community Autocomplete",
"Results from DuckDuckGo": "Results from DuckDuckGo",
"Emoji": "Emoji",
+ "Emoji Autocomplete": "Emoji Autocomplete",
"Notify the whole room": "Notify the whole room",
"Room Notification": "Room Notification",
+ "Notification Autocomplete": "Notification Autocomplete",
+ "Room Autocomplete": "Room Autocomplete",
"Users": "Users",
+ "User Autocomplete": "User Autocomplete",
"unknown device": "unknown device",
"NOT verified": "NOT verified",
"Blacklisted": "Blacklisted",
From f299f7e092170dc054cb94cc6f0124ca29d928ec Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Mon, 30 Sep 2019 14:32:42 +0100
Subject: [PATCH 21/55] delint
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
src/autocomplete/UserProvider.js | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/autocomplete/UserProvider.js b/src/autocomplete/UserProvider.js
index edba6d4b03..451ae0bb83 100644
--- a/src/autocomplete/UserProvider.js
+++ b/src/autocomplete/UserProvider.js
@@ -164,9 +164,11 @@ export default class UserProvider extends AutocompleteProvider {
}
renderCompletions(completions: [React.Component]): ?React.Component {
- return
{ completions }
;
}
diff --git a/src/components/views/rooms/Autocomplete.js b/src/components/views/rooms/Autocomplete.js
index 243cfe2f75..ad5fa198a3 100644
--- a/src/components/views/rooms/Autocomplete.js
+++ b/src/components/views/rooms/Autocomplete.js
@@ -20,18 +20,17 @@ import ReactDOM from 'react-dom';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import flatMap from 'lodash/flatMap';
-import isEqual from 'lodash/isEqual';
-import sdk from '../../../index';
import type {Completion} from '../../../autocomplete/Autocompleter';
import Promise from 'bluebird';
import { Room } from 'matrix-js-sdk';
-import {getCompletions} from '../../../autocomplete/Autocompleter';
import SettingsStore from "../../../settings/SettingsStore";
import Autocompleter from '../../../autocomplete/Autocompleter';
const COMPOSER_SELECTED = 0;
+export const generateCompletionDomId = (number) => `mx_Autocomplete_Completion_${number}`;
+
export default class Autocomplete extends React.Component {
constructor(props) {
super(props);
@@ -224,7 +223,7 @@ export default class Autocomplete extends React.Component {
setSelection(selectionOffset: number) {
this.setState({selectionOffset, hide: false});
if (this.props.onSelectionChange) {
- this.props.onSelectionChange(this.state.completionList[selectionOffset - 1]);
+ this.props.onSelectionChange(this.state.completionList[selectionOffset - 1], selectionOffset - 1);
}
}
@@ -250,9 +249,8 @@ export default class Autocomplete extends React.Component {
let position = 1;
const renderedCompletions = this.state.completions.map((completionResult, i) => {
const completions = completionResult.completions.map((completion, i) => {
- const className = classNames('mx_Autocomplete_Completion', {
- 'selected': position === this.state.selectionOffset,
- });
+ const selected = position === this.state.selectionOffset;
+ const className = classNames('mx_Autocomplete_Completion', {selected});
const componentPosition = position;
position++;
@@ -261,10 +259,12 @@ export default class Autocomplete extends React.Component {
};
return React.cloneElement(completion.component, {
- key: i,
- ref: `completion${position - 1}`,
+ "key": i,
+ "ref": `completion${componentPosition}`,
+ "id": generateCompletionDomId(componentPosition - 1), // 0 index the completion IDs
className,
onClick,
+ "aria-selected": selected,
});
});
diff --git a/src/components/views/rooms/BasicMessageComposer.js b/src/components/views/rooms/BasicMessageComposer.js
index 895696e118..4ec43d8af2 100644
--- a/src/components/views/rooms/BasicMessageComposer.js
+++ b/src/components/views/rooms/BasicMessageComposer.js
@@ -28,7 +28,7 @@ import {
replaceRangeAndMoveCaret,
} from '../../../editor/operations';
import {getCaretOffsetAndText, getRangeForSelection} from '../../../editor/dom';
-import Autocomplete from '../rooms/Autocomplete';
+import Autocomplete, {generateCompletionDomId} from '../rooms/Autocomplete';
import {autoCompleteCreator} from '../../../editor/parts';
import {parsePlainTextMessage} from '../../../editor/deserialize';
import {renderModel} from '../../../editor/render';
@@ -432,8 +432,9 @@ export default class BasicMessageEditor extends React.Component {
this.props.model.autoComplete.onComponentConfirm(completion);
}
- _onAutoCompleteSelectionChange = (completion) => {
+ _onAutoCompleteSelectionChange = (completion, completionIndex) => {
this.props.model.autoComplete.onComponentSelectionChange(completion);
+ this.setState({completionIndex});
}
componentWillUnmount() {
@@ -535,6 +536,8 @@ export default class BasicMessageEditor extends React.Component {
quote: ctrlShortcutLabel(">"),
};
+ const {completionIndex} = this.state;
+
return (
{ autoComplete }
+ role="textbox"
+ aria-multiline="true"
+ aria-autocomplete="both"
+ aria-haspopup="listbox"
+ aria-expanded={Boolean(this.state.autoComplete)}
+ aria-activedescendant={completionIndex >= 0 ? generateCompletionDomId(completionIndex) : undefined}
+ />
- { completions }
- ;
+ return (
+
+ { completions }
+
+ );
}
shouldForceComplete(): boolean {
From e7fdc5002ec428e82bacfda0a8f9dd1702805f05 Mon Sep 17 00:00:00 2001
From: "J. Ryan Stinnett"
+ return
{this._getHeaderJsx(isCollapsed)}
;
} else if (this._canUseLazyListRendering()) {
- return
+ return
{this._getHeaderJsx(isCollapsed)}
+ return
{this._getHeaderJsx(isCollapsed)}
+
{ this._getHeaderJsx(isCollapsed) }
{ content }
diff --git a/src/components/views/elements/AccessibleButton.js b/src/components/views/elements/AccessibleButton.js
index a43e2ff26a..bfc3e45246 100644
--- a/src/components/views/elements/AccessibleButton.js
+++ b/src/components/views/elements/AccessibleButton.js
@@ -68,7 +68,7 @@ export default function AccessibleButton(props) {
delete restProps.inputRef;
restProps.tabIndex = restProps.tabIndex || "0";
- restProps.role = "button";
+ restProps.role = restProps.role || "button";
restProps.className = (restProps.className ? restProps.className + " " : "") + "mx_AccessibleButton";
if (kind) {
diff --git a/src/components/views/rooms/RoomList.js b/src/components/views/rooms/RoomList.js
index da2d11f34b..6c031563cd 100644
--- a/src/components/views/rooms/RoomList.js
+++ b/src/components/views/rooms/RoomList.js
@@ -805,7 +805,7 @@ module.exports = createReactClass({
const subListComponents = this._mapSubListProps(subLists);
return (
-
{ subListComponents }
diff --git a/src/components/views/rooms/RoomTile.js b/src/components/views/rooms/RoomTile.js
index 2ec5384b93..a7ba744e47 100644
--- a/src/components/views/rooms/RoomTile.js
+++ b/src/components/views/rooms/RoomTile.js
@@ -33,6 +33,7 @@ import AccessibleButton from '../elements/AccessibleButton';
import ActiveRoomObserver from '../../../ActiveRoomObserver';
import RoomViewStore from '../../../stores/RoomViewStore';
import SettingsStore from "../../../settings/SettingsStore";
+import {_t} from "../../../languageHandler";
module.exports = createReactClass({
displayName: 'RoomTile',
@@ -368,6 +369,8 @@ module.exports = createReactClass({
const RoomAvatar = sdk.getComponent('avatars.RoomAvatar');
+ let ariaLabel = name;
+
let dmIndicator;
if (this._isDirectMessageRoom(this.props.room.roomId)) {
dmIndicator =
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index c23cd6d324..a03b654a3e 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -949,6 +949,9 @@
"Securely back up your keys to avoid losing them. Learn more.": "Securely back up your keys to avoid losing them. Learn more.",
"Not now": "Not now",
"Don't ask me again": "Don't ask me again",
+ "It has %(count)s unread messages including mentions.|other": "It has %(count)s unread messages including mentions.",
+ "It has %(count)s unread messages.|other": "It has %(count)s unread messages.",
+ "It has unread mentions.": "It has unread mentions.",
"Add a topic": "Add a topic",
"Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.",
"This room has already been upgraded.": "This room has already been upgraded.",
From 5545012b28b9aa44f175c127ee499a1ccd4f3cd0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sava=20Rado=C5=A1?= %(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Замолите администратора вашег сервера (%(homeserverDomain)s) да подеси TURN сервер како би позиви радили поуздано.",
+ "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 адресу са тим сервером. Ово такође можете мењати у Подешавањима.",
+ "Try using turn.matrix.org": "Покушајте да користите turn.matrix.org",
+ "A conference call could not be started because the integrations server is not available": "Конференцијски позив није могао бити започет јер интеграциони сервер није расположив"
}
From 53d0c89e9c82a31dac2d48a5eb0d19e6c277d27c Mon Sep 17 00:00:00 2001
From: Diego Esaa %(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Por favor pídele al administrador de tu servidor doméstico (%(homeserverDomain)s) que configure un servidor TURN para que las llamadas funcionen correctamente.",
+ "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, puedes tratar de usar el servidor público en turn.matrix.org, pero éste no será igual de confiable, y compartirá tu dirección IP con ese servidor. También puedes administrar esto en Ajustes.",
+ "Try using turn.matrix.org": "Trata de usar turn.matrix.org",
+ "Failed to start chat": "Error al iniciar el chat",
+ "Messages": "Mensajes",
+ "Actions": "Acciones",
+ "Other": "Otros",
+ "Sends a message as plain text, without interpreting it as markdown": "Envía un mensaje como texto estándar, sin interpretarlo como Markdown",
+ "You do not have the required permissions to use this command.": "No tienes los permisos requeridos para usar este comando.",
+ "Changes the avatar of the current room": "Cambia el ávatar de la sala actual",
+ "Use an identity server": "Usar un servidor de identidad",
+ "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Usar un servidor de identidad para invitar por correo. Presiona continuar par usar el servidor de identidad por defecto (%(defaultIdentityServerName)s) o adminístralo en Ajustes.",
+ "Use an identity server to invite by email. Manage in Settings.": "Usar un servidor de identidad para invitar por correo. Administrar en Ajustes.",
+ "Adds a custom widget by URL to the room": "Añade un widget personalizado por URL a la sala",
+ "Please supply a https:// or http:// widget URL": "Por favor provisiona un URL de widget de http:// o https://",
+ "You cannot modify widgets in this room.": "No puedes modificar widgets en esta sala.",
+ "Displays list of commands with usages and descriptions": "Muestra lista de comandos con usos y descripciones",
+ "Use the new, faster, but still experimental composer for writing messages (requires refresh)": "Usar el compositor nuevo y más rapido para escribir mensajes, pero todavía experimental (requiere que refresques la página)",
+ "Multiple integration managers": "Administradores de integración múltiples"
}
From c8a5f9459c35dcf5d6531d601a4b5ca34b8803bb Mon Sep 17 00:00:00 2001
From: pebles {serviceName} |
From 64aa6695f5cd135ca2eb21455588e3e3d39ccd08 Mon Sep 17 00:00:00 2001
From: Travis Ralston |