{_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 |