From 553c53e7e858a5f0e8f5975bfcc033335874ea7f Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Wed, 17 May 2017 12:33:58 +0100 Subject: [PATCH 001/202] Add apps menu icons --- .../views/rooms/_MessageComposer.scss | 6 +++-- src/skins/vector/img/icons-apps-active.svg | 24 +++++++++++++++++++ src/skins/vector/img/icons-apps.svg | 14 +++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 src/skins/vector/img/icons-apps-active.svg create mode 100644 src/skins/vector/img/icons-apps.svg diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss index 525cc1f654..ac49722711 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss @@ -128,7 +128,8 @@ limitations under the License. .mx_MessageComposer_upload, .mx_MessageComposer_hangup, .mx_MessageComposer_voicecall, -.mx_MessageComposer_videocall { +.mx_MessageComposer_videocall, +.mx_MessageComposer_apps { /*display: table-cell;*/ /*vertical-align: middle;*/ /*padding-left: 10px;*/ @@ -140,7 +141,8 @@ limitations under the License. .mx_MessageComposer_upload object, .mx_MessageComposer_hangup object, .mx_MessageComposer_voicecall object, -.mx_MessageComposer_videocall object { +.mx_MessageComposer_videocall object, +.mx_MessageComposer_apps object { pointer-events: none; } diff --git a/src/skins/vector/img/icons-apps-active.svg b/src/skins/vector/img/icons-apps-active.svg new file mode 100644 index 0000000000..ea222d0511 --- /dev/null +++ b/src/skins/vector/img/icons-apps-active.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/skins/vector/img/icons-apps.svg b/src/skins/vector/img/icons-apps.svg new file mode 100644 index 0000000000..affd8e6408 --- /dev/null +++ b/src/skins/vector/img/icons-apps.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + From 7ea6157b6749d08e0917f6a5338a6ac2e62ef608 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Wed, 17 May 2017 21:16:15 +0100 Subject: [PATCH 002/202] App drawer styling --- .../css/matrix-react-sdk/views/rooms/_MessageComposer.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss index ac49722711..b7de8dcd93 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss @@ -202,3 +202,8 @@ limitations under the License. padding: 4px 4px 4px 0; opacity: 0.8; } + +.mx_AppsDrawer { + height: 50px; + width: 100%; +} From 7a63cfd71746c5626f2ee0ae286939a0421ebcb6 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Wed, 17 May 2017 23:17:53 +0100 Subject: [PATCH 003/202] Add stylesheet for apps --- src/skins/vector/css/_components.scss | 1 + .../views/rooms/_AppsDrawer.scss | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss diff --git a/src/skins/vector/css/_components.scss b/src/skins/vector/css/_components.scss index c22fbc06a3..7d78404d58 100644 --- a/src/skins/vector/css/_components.scss +++ b/src/skins/vector/css/_components.scss @@ -51,6 +51,7 @@ @import "./matrix-react-sdk/views/rooms/_SearchableEntityList.scss"; @import "./matrix-react-sdk/views/rooms/_TabCompleteBar.scss"; @import "./matrix-react-sdk/views/rooms/_TopUnreadMessagesBar.scss"; +@import "./matrix-react-sdk/views/rooms/_AppsDrawer.scss"; @import "./matrix-react-sdk/views/settings/_DevicesPanel.scss"; @import "./matrix-react-sdk/views/settings/_IntegrationsManager.scss"; @import "./matrix-react-sdk/views/voip/_CallView.scss"; diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss new file mode 100644 index 0000000000..7b20e4dbf8 --- /dev/null +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss @@ -0,0 +1,22 @@ +/* +Copyright 2015, 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_AddWidget_button { + order: 2; + cursor: pointer; + padding-left: 12px; + padding-right: 12px; +} From 8afc9f9a09d9efd00d22dd3dfa3d929383880d68 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Fri, 19 May 2017 17:17:48 +0100 Subject: [PATCH 004/202] Add widget iframes and styling --- .../views/rooms/_AppsDrawer.scss | 44 +++++++++++++++++++ .../views/rooms/_MessageComposer.scss | 5 --- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss index 7b20e4dbf8..23c4ca4868 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss @@ -14,9 +14,53 @@ See the License for the specific language governing permissions and limitations under the License. */ +.mx_AppsDrawer { +} + +.mx_AppsContainer { + display: flex; + flex-direction: row; + align-items: center; +} + .mx_AddWidget_button { order: 2; cursor: pointer; padding-left: 12px; padding-right: 12px; + margin: 0 20px 20px 20px; + color: $accent-color; +} + +.mx_SetAppURLDialog_input { + border-radius: 3px; + border: 1px solid $input-border-color; + padding: 9px; + color: $primary-fg-color; + background-color: $primary-bg-color; + font-size: 15px; +} + +.mx_AppTile { + width: 48%; + margin: 2px 5px; + border: 1px solid $greyed-fg-color; + border-radius: 2px; + height: 200px; + // display: inline-block; +} + +.mx_AppTileMenuBar { + // height: 15px; + margin: 0; + padding: 2px 10px; + // background-color: $e2e-verified-color; + border-bottom: 1px solid $greyed-fg-color; +} + +.mx_AppTileBody iframe { + width: 100%; + height: 175px; + overflow: hidden; + border: none; } diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss index b7de8dcd93..ac49722711 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss @@ -202,8 +202,3 @@ limitations under the License. padding: 4px 4px 4px 0; opacity: 0.8; } - -.mx_AppsDrawer { - height: 50px; - width: 100%; -} From 998739a7dcc0c98b29fa19e016c5f825761a36ac Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Mon, 22 May 2017 18:00:40 +0100 Subject: [PATCH 005/202] Edit icon and styling --- .../views/rooms/_AppsDrawer.scss | 33 ++++++++++++++----- src/skins/vector/img/edit.svg | 13 ++++++++ 2 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 src/skins/vector/img/edit.svg diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss index 23c4ca4868..bf838b85ee 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss @@ -26,25 +26,26 @@ limitations under the License. .mx_AddWidget_button { order: 2; cursor: pointer; - padding-left: 12px; padding-right: 12px; - margin: 0 20px 20px 20px; + padding: 0; + margin: 0 0 5px 0; color: $accent-color; + font-size: 12px; } .mx_SetAppURLDialog_input { border-radius: 3px; border: 1px solid $input-border-color; padding: 9px; - color: $primary-fg-color; + color: $primary-hairline-color; background-color: $primary-bg-color; font-size: 15px; } .mx_AppTile { - width: 48%; - margin: 2px 5px; - border: 1px solid $greyed-fg-color; + width: 50%; + margin: 0 5px 2px 0; + border: 1px solid $primary-hairline-color; border-radius: 2px; height: 200px; // display: inline-block; @@ -55,12 +56,28 @@ limitations under the License. margin: 0; padding: 2px 10px; // background-color: $e2e-verified-color; - border-bottom: 1px solid $greyed-fg-color; + border-bottom: 1px solid $primary-hairline-color; + font-size: 10px; +} + +.mx_AppTileMenuBarWidgets { + float: right; +} +.mx_AppTileMenuBarWidget { + // pointer-events: none; + cursor: pointer; } .mx_AppTileBody iframe { width: 100%; - height: 175px; + height: 181px; overflow: hidden; border: none; } + +.mx_CloseAppWidget { +} + +.mx_AppTileMenuBarWidgetPadding { + margin-right: 5px; +} diff --git a/src/skins/vector/img/edit.svg b/src/skins/vector/img/edit.svg new file mode 100644 index 0000000000..a0be3454e1 --- /dev/null +++ b/src/skins/vector/img/edit.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + From ac9075a82a24234f8b6698f4070549b0d45abcd1 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Tue, 30 May 2017 10:47:29 +0100 Subject: [PATCH 006/202] Increase panel height --- .../vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss index bf838b85ee..ae39e7f781 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss @@ -47,7 +47,7 @@ limitations under the License. margin: 0 5px 2px 0; border: 1px solid $primary-hairline-color; border-radius: 2px; - height: 200px; + height: 350px; // display: inline-block; } @@ -70,7 +70,7 @@ limitations under the License. .mx_AppTileBody iframe { width: 100%; - height: 181px; + height: 331px; overflow: hidden; border: none; } From 113533ad6148bcc6d22178293cf9e2dc1cfa5717 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Wed, 31 May 2017 10:08:23 +0100 Subject: [PATCH 007/202] Add styling for full-width widgets --- .../css/matrix-react-sdk/views/rooms/_AppsDrawer.scss | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss index ae39e7f781..0d8ada3633 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss @@ -51,6 +51,15 @@ limitations under the License. // display: inline-block; } +.mx_AppTileFullWidth { + width: 100%; + margin: 0 5px 2px 0; + border: 1px solid $primary-hairline-color; + border-radius: 2px; + height: 350px; + // display: inline-block; +} + .mx_AppTileMenuBar { // height: 15px; margin: 0; From 0e6012ad4561102c72bbdcb2c29c300a57927f4e Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 3 Jun 2017 12:50:47 +0100 Subject: [PATCH 008/202] absorb updater.js into the Platforms, gets rid of pointless setInterval in Electron Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> (cherry picked from commit 24e8a30) Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/vector/index.js | 7 +++--- src/vector/platform/VectorBasePlatform.js | 6 +++++ src/vector/platform/WebPlatform.js | 7 ++++++ src/vector/updater.js | 30 ----------------------- 4 files changed, 17 insertions(+), 33 deletions(-) delete mode 100644 src/vector/updater.js diff --git a/src/vector/index.js b/src/vector/index.js index 9f16205164..d26e480e30 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -59,7 +59,6 @@ var sdk = require("matrix-react-sdk"); const PlatformPeg = require("matrix-react-sdk/lib/PlatformPeg"); sdk.loadSkin(require('../component-index')); var VectorConferenceHandler = require('../VectorConferenceHandler'); -var UpdateChecker = require("./updater"); var q = require('q'); var request = require('browser-request'); import * as UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore'; @@ -277,7 +276,9 @@ async function loadApp() { Unable to load config file: please refresh the page to try again. , document.getElementById('matrixchat')); } else if (validBrowser) { - UpdateChecker.start(); + const platform = PlatformPeg.get(); + platform.startUpdater(); + const MatrixChat = sdk.getComponent('structures.MatrixChat'); window.matrixChat = ReactDOM.render( , document.getElementById('matrixchat') ); diff --git a/src/vector/platform/VectorBasePlatform.js b/src/vector/platform/VectorBasePlatform.js index 76707d1d58..8e998402c4 100644 --- a/src/vector/platform/VectorBasePlatform.js +++ b/src/vector/platform/VectorBasePlatform.js @@ -74,6 +74,12 @@ export default class VectorBasePlatform extends BasePlatform { this._updateFavicon(); } + /** + * Begin update polling, if applicable + */ + startUpdater() { + } + /** * Check for the availability of an update to the version of the * app that's currently running. diff --git a/src/vector/platform/WebPlatform.js b/src/vector/platform/WebPlatform.js index 8397a7f703..c589af38b8 100644 --- a/src/vector/platform/WebPlatform.js +++ b/src/vector/platform/WebPlatform.js @@ -26,6 +26,8 @@ import q from 'q'; import url from 'url'; import UAParser from 'ua-parser-js'; +var POKE_RATE_MS = 10 * 60 * 1000; // 10 min + export default class WebPlatform extends VectorBasePlatform { constructor() { super(); @@ -132,6 +134,11 @@ export default class WebPlatform extends VectorBasePlatform { return this._getVersion(); } + startUpdater() { + this.pollForUpdate(); + setInterval(this.pollForUpdate, POKE_RATE_MS); + } + pollForUpdate() { this._getVersion().done((ver) => { if (this.runningVersion === null) { diff --git a/src/vector/updater.js b/src/vector/updater.js deleted file mode 100644 index 19d40b4f38..0000000000 --- a/src/vector/updater.js +++ /dev/null @@ -1,30 +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. -*/ - -import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg'; - -var POKE_RATE_MS = 10 * 60 * 1000; // 10 min - -module.exports = { - start: function() { - module.exports.poll(); - setInterval(module.exports.poll, POKE_RATE_MS); - }, - - poll: function() { - PlatformPeg.get().pollForUpdate(); - } -}; From efc68c078ebe80ec2b499cb644c8eccda33a973d Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 3 Jun 2017 15:12:46 +0100 Subject: [PATCH 009/202] basic manual update stuff + update check bar Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- electron_app/src/electron-main.js | 1 + .../views/globals/UpdateCheckBar.js | 89 +++++++++++++++++++ src/vector/platform/ElectronPlatform.js | 29 ++++-- src/vector/platform/VectorBasePlatform.js | 18 +++- src/vector/platform/WebPlatform.js | 13 +-- 5 files changed, 139 insertions(+), 11 deletions(-) create mode 100644 src/components/views/globals/UpdateCheckBar.js diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js index ef0d173c00..f1a9e37a73 100644 --- a/electron_app/src/electron-main.js +++ b/electron_app/src/electron-main.js @@ -120,6 +120,7 @@ process.on('uncaughtException', function(error) { }); electron.ipcMain.on('install_update', installUpdate); +electron.ipcMain.on('checkForUpdates', pollForUpdates); let focusHandlerAttached = false; electron.ipcMain.on('setBadgeCount', function(ev, count) { diff --git a/src/components/views/globals/UpdateCheckBar.js b/src/components/views/globals/UpdateCheckBar.js new file mode 100644 index 0000000000..65fe84c989 --- /dev/null +++ b/src/components/views/globals/UpdateCheckBar.js @@ -0,0 +1,89 @@ +/* +Copyright 2015, 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. +*/ + +'use strict'; + +import React from 'react'; +import dis from 'matrix-react-sdk/lib/dispatcher'; +import { _t } from 'matrix-react-sdk/lib/languageHandler'; +import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg'; +import {updateStateEnum} from '../../../vector/platform/VectorBasePlatform'; +import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton'; + +export default React.createClass({ + + getInitialState: function() { + return { + message: 'Checking for an update...', + done: false, + }; + }, + + componentWillMount: function() { + PlatformPeg.get().checkForUpdate().done((state) => { + if (this._unmounted) return; + + console.log('checkForUpdate done, ', state); + + // We will be replaced by NewVersionBar + if (state === updateStateEnum.Ready) return; + + let done = true; + let message; + switch (state) { + case updateStateEnum.Error: + message = 'Error encountered when checking for an update'; + break; + case updateStateEnum.NotAvailable: + message = 'No update found'; + break; + case updateStateEnum.Downloading: + message = 'Update is being downloaded'; + done = false; + break; + } + + this.setState({message, done}); + }); + }, + + componentWillUnmount: function() { + this._unmounted = true; + }, + + hideToolbar: function() { + dis.dispatch({ + action: 'check_updates', + value: false, + }); + }, + + render: function() { + const imgSrc = this.state.done ? 'img/warning.svg' : 'img/spinner.gif'; + + return ( +
+ /!\ +
+ {this.state.message} +
+ + + +
+ ); + } +}); diff --git a/src/vector/platform/ElectronPlatform.js b/src/vector/platform/ElectronPlatform.js index fa0f999cb8..1ed1c0d8c7 100644 --- a/src/vector/platform/ElectronPlatform.js +++ b/src/vector/platform/ElectronPlatform.js @@ -17,7 +17,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import VectorBasePlatform from './VectorBasePlatform'; +import VectorBasePlatform, {updateStateEnum} from './VectorBasePlatform'; import dis from 'matrix-react-sdk/lib/dispatcher'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; import q from 'q'; @@ -66,6 +66,7 @@ export default class ElectronPlatform extends VectorBasePlatform { constructor() { super(); dis.register(_onAction); + this.updatable = Boolean(remote.autoUpdater.getFeedURL()); } getHumanReadableName(): string { @@ -137,10 +138,28 @@ export default class ElectronPlatform extends VectorBasePlatform { return q(remote.app.getVersion()); } - pollForUpdate() { - // In electron we control the update process ourselves, since - // it needs to run in the main process, so we just run the timer - // loop in the main electron process instead. + checkForUpdate() { // manual update check for this platform + const deferred = q.defer(); + + const _onUpdateAvailable = function() { + electron.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); + deferred.resolve(updateStateEnum.Downloading); + } + + const _onUpdateNotAvailable = function() { + electron.autoUpdater.removeListener('update-available', _onUpdateAvailable); + deferred.resolve(updateStateEnum.NotAvailable); + } + + electron.autoUpdater.once('update-available', _onUpdateAvailable); + electron.autoUpdater.once('update-not-available', _onUpdateNotAvailable); + + electron.ipcRenderer.send('checkForUpdates'); + return deferred.promise.timeout(10000).catch(() => { + electron.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); + electron.autoUpdater.removeListener('update-available', _onUpdateAvailable); + return updateStateEnum.Error; + }); } installUpdate() { diff --git a/src/vector/platform/VectorBasePlatform.js b/src/vector/platform/VectorBasePlatform.js index 8e998402c4..5ae620cb01 100644 --- a/src/vector/platform/VectorBasePlatform.js +++ b/src/vector/platform/VectorBasePlatform.js @@ -22,6 +22,13 @@ import { _t } from 'matrix-react-sdk/lib/languageHandler'; import Favico from 'favico.js'; +export const updateStateEnum = { + Error: -1, + NotAvailable: 0, + Downloading: 1, + Ready: 2, +}; + /** * Vector-specific extensions to the BasePlatform template */ @@ -35,6 +42,7 @@ export default class VectorBasePlatform extends BasePlatform { // so we'd need to fix that if enabling the animation. this.favicon = new Favico({animation: 'none'}); this._updateFavicon(); + this.updatable = true; } getHumanReadableName(): string { @@ -80,13 +88,21 @@ export default class VectorBasePlatform extends BasePlatform { startUpdater() { } + /** + * Whether we can call checkForUpdate on this platform build + */ + canSelfUpdate(): boolean { + return this.updatable; + } + /** * Check for the availability of an update to the version of the * app that's currently running. * If an update is available, this function should dispatch the * 'new_version' action. + * @returns Promise */ - pollForUpdate() { + checkForUpdate(): Promise { } /** diff --git a/src/vector/platform/WebPlatform.js b/src/vector/platform/WebPlatform.js index c589af38b8..318a3fe9a1 100644 --- a/src/vector/platform/WebPlatform.js +++ b/src/vector/platform/WebPlatform.js @@ -17,7 +17,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import VectorBasePlatform from './VectorBasePlatform'; +import VectorBasePlatform, {updateStateEnum} from './VectorBasePlatform'; import request from 'browser-request'; import dis from 'matrix-react-sdk/lib/dispatcher.js'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; @@ -135,12 +135,12 @@ export default class WebPlatform extends VectorBasePlatform { } startUpdater() { - this.pollForUpdate(); - setInterval(this.pollForUpdate, POKE_RATE_MS); + this.checkForUpdate(); + setInterval(this.checkForUpdate, POKE_RATE_MS); } - pollForUpdate() { - this._getVersion().done((ver) => { + checkForUpdate() { + return this._getVersion().then((ver) => { if (this.runningVersion === null) { this.runningVersion = ver; } else if (this.runningVersion !== ver) { @@ -149,9 +149,12 @@ export default class WebPlatform extends VectorBasePlatform { currentVersion: this.runningVersion, newVersion: ver, }); + return updateStateEnum.Ready; } + return updateStateEnum.NotAvailable; }, (err) => { console.error("Failed to poll for update", err); + return updateStateEnum.Error; }); } From b95ad701afcf4cada8c209de505eb53e19bc1e5f Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 3 Jun 2017 15:17:58 +0100 Subject: [PATCH 010/202] match ENUM style to others in project Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> (cherry picked from commit a871815) Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/globals/UpdateCheckBar.js | 8 ++++---- src/vector/platform/ElectronPlatform.js | 6 +++--- src/vector/platform/VectorBasePlatform.js | 8 ++++---- src/vector/platform/WebPlatform.js | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/components/views/globals/UpdateCheckBar.js b/src/components/views/globals/UpdateCheckBar.js index 65fe84c989..95c78cf634 100644 --- a/src/components/views/globals/UpdateCheckBar.js +++ b/src/components/views/globals/UpdateCheckBar.js @@ -39,18 +39,18 @@ export default React.createClass({ console.log('checkForUpdate done, ', state); // We will be replaced by NewVersionBar - if (state === updateStateEnum.Ready) return; + if (state === updateStateEnum.READY) return; let done = true; let message; switch (state) { - case updateStateEnum.Error: + case updateStateEnum.ERROR: message = 'Error encountered when checking for an update'; break; - case updateStateEnum.NotAvailable: + case updateStateEnum.NOTAVAILABLE: message = 'No update found'; break; - case updateStateEnum.Downloading: + case updateStateEnum.DOWNLOADING: message = 'Update is being downloaded'; done = false; break; diff --git a/src/vector/platform/ElectronPlatform.js b/src/vector/platform/ElectronPlatform.js index 1ed1c0d8c7..b4f17d6e42 100644 --- a/src/vector/platform/ElectronPlatform.js +++ b/src/vector/platform/ElectronPlatform.js @@ -143,12 +143,12 @@ export default class ElectronPlatform extends VectorBasePlatform { const _onUpdateAvailable = function() { electron.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); - deferred.resolve(updateStateEnum.Downloading); + deferred.resolve(updateStateEnum.DOWNLOADING); } const _onUpdateNotAvailable = function() { electron.autoUpdater.removeListener('update-available', _onUpdateAvailable); - deferred.resolve(updateStateEnum.NotAvailable); + deferred.resolve(updateStateEnum.NOTAVAILABLE); } electron.autoUpdater.once('update-available', _onUpdateAvailable); @@ -158,7 +158,7 @@ export default class ElectronPlatform extends VectorBasePlatform { return deferred.promise.timeout(10000).catch(() => { electron.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); electron.autoUpdater.removeListener('update-available', _onUpdateAvailable); - return updateStateEnum.Error; + return updateStateEnum.ERROR; }); } diff --git a/src/vector/platform/VectorBasePlatform.js b/src/vector/platform/VectorBasePlatform.js index 5ae620cb01..0bbcb8f3e7 100644 --- a/src/vector/platform/VectorBasePlatform.js +++ b/src/vector/platform/VectorBasePlatform.js @@ -23,10 +23,10 @@ import { _t } from 'matrix-react-sdk/lib/languageHandler'; import Favico from 'favico.js'; export const updateStateEnum = { - Error: -1, - NotAvailable: 0, - Downloading: 1, - Ready: 2, + ERROR: 'ERROR', + NOTAVAILABLE: 'NOTAVAILABLE', + DOWNLOADING: 'DOWNLOADING', + READY: 'READY', }; /** diff --git a/src/vector/platform/WebPlatform.js b/src/vector/platform/WebPlatform.js index 318a3fe9a1..dd6b91de91 100644 --- a/src/vector/platform/WebPlatform.js +++ b/src/vector/platform/WebPlatform.js @@ -149,12 +149,12 @@ export default class WebPlatform extends VectorBasePlatform { currentVersion: this.runningVersion, newVersion: ver, }); - return updateStateEnum.Ready; + return updateStateEnum.READY; } - return updateStateEnum.NotAvailable; + return updateStateEnum.NOTAVAILABLE; }, (err) => { console.error("Failed to poll for update", err); - return updateStateEnum.Error; + return updateStateEnum.ERROR; }); } From 3ebd90565c37f07c29c23d1eb217a853c2a3a83b Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 3 Jun 2017 15:31:08 +0100 Subject: [PATCH 011/202] add clearer concept of timeout vs error Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> (cherry picked from commit 104c804) Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/globals/UpdateCheckBar.js | 9 ++++++--- src/vector/platform/ElectronPlatform.js | 2 +- src/vector/platform/VectorBasePlatform.js | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/components/views/globals/UpdateCheckBar.js b/src/components/views/globals/UpdateCheckBar.js index 95c78cf634..c39754c85f 100644 --- a/src/components/views/globals/UpdateCheckBar.js +++ b/src/components/views/globals/UpdateCheckBar.js @@ -45,13 +45,16 @@ export default React.createClass({ let message; switch (state) { case updateStateEnum.ERROR: - message = 'Error encountered when checking for an update'; + message = 'Error encountered when checking for an update.'; + break; + case updateStateEnum.TIMEOUT: + message = 'Update Check timed out, try again later.'; break; case updateStateEnum.NOTAVAILABLE: - message = 'No update found'; + message = 'No update found.'; break; case updateStateEnum.DOWNLOADING: - message = 'Update is being downloaded'; + message = 'Update is being downloaded.'; done = false; break; } diff --git a/src/vector/platform/ElectronPlatform.js b/src/vector/platform/ElectronPlatform.js index b4f17d6e42..f84fe8d570 100644 --- a/src/vector/platform/ElectronPlatform.js +++ b/src/vector/platform/ElectronPlatform.js @@ -158,7 +158,7 @@ export default class ElectronPlatform extends VectorBasePlatform { return deferred.promise.timeout(10000).catch(() => { electron.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); electron.autoUpdater.removeListener('update-available', _onUpdateAvailable); - return updateStateEnum.ERROR; + return updateStateEnum.TIMEOUT; }); } diff --git a/src/vector/platform/VectorBasePlatform.js b/src/vector/platform/VectorBasePlatform.js index 0bbcb8f3e7..074be91c83 100644 --- a/src/vector/platform/VectorBasePlatform.js +++ b/src/vector/platform/VectorBasePlatform.js @@ -24,6 +24,7 @@ import Favico from 'favico.js'; export const updateStateEnum = { ERROR: 'ERROR', + TIMEOUT: 'TIMEOUT', NOTAVAILABLE: 'NOTAVAILABLE', DOWNLOADING: 'DOWNLOADING', READY: 'READY', From f5ba6fa95293b973505b56685b031226f56ef4c8 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 3 Jun 2017 15:36:03 +0100 Subject: [PATCH 012/202] i18n things Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> (cherry picked from commit d878c72) Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/globals/UpdateCheckBar.js | 10 +++++----- src/i18n/strings/en_EN.json | 5 +++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/components/views/globals/UpdateCheckBar.js b/src/components/views/globals/UpdateCheckBar.js index c39754c85f..0a9029222a 100644 --- a/src/components/views/globals/UpdateCheckBar.js +++ b/src/components/views/globals/UpdateCheckBar.js @@ -27,7 +27,7 @@ export default React.createClass({ getInitialState: function() { return { - message: 'Checking for an update...', + message: _t('Checking for an update...'), done: false, }; }, @@ -45,16 +45,16 @@ export default React.createClass({ let message; switch (state) { case updateStateEnum.ERROR: - message = 'Error encountered when checking for an update.'; + message = _t('Error encountered when checking for an update.'); break; case updateStateEnum.TIMEOUT: - message = 'Update Check timed out, try again later.'; + message = _t('Update Check timed out, try again later.'); break; case updateStateEnum.NOTAVAILABLE: - message = 'No update found.'; + message = _t('No update found.'); break; case updateStateEnum.DOWNLOADING: - message = 'Update is being downloaded.'; + message = _t('Update is being downloaded.'); done = false; break; } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index e148248cc6..2bce407061 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -158,6 +158,11 @@ "Today": "Today", "Yesterday": "Yesterday", "OK": "OK", + "Checking for an update...": "Checking for an update...", + "Error encountered when checking for an update.": "Error encountered when checking for an update.", + "Update Check timed out, try again later.": "Update Check timed out, try again later.", + "No update found.": "No update found.", + "Update is being downloaded.": "Update is being downloaded.", "You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.", "Welcome page": "Welcome page", "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!": "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!" From a4c1aee5eac715b779e0ccef1f420b767d8e8e15 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 3 Jun 2017 16:00:49 +0100 Subject: [PATCH 013/202] correct file header Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/globals/UpdateCheckBar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/globals/UpdateCheckBar.js b/src/components/views/globals/UpdateCheckBar.js index 0a9029222a..8d7cc281da 100644 --- a/src/components/views/globals/UpdateCheckBar.js +++ b/src/components/views/globals/UpdateCheckBar.js @@ -1,5 +1,5 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From 5981887705ba324177810f6b48ef24cf05d905fb Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 3 Jun 2017 16:04:01 +0100 Subject: [PATCH 014/202] fix UpdateCheckBar image alt Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/globals/UpdateCheckBar.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/components/views/globals/UpdateCheckBar.js b/src/components/views/globals/UpdateCheckBar.js index 8d7cc281da..d72ccefff4 100644 --- a/src/components/views/globals/UpdateCheckBar.js +++ b/src/components/views/globals/UpdateCheckBar.js @@ -75,11 +75,16 @@ export default React.createClass({ }, render: function() { - const imgSrc = this.state.done ? 'img/warning.svg' : 'img/spinner.gif'; + let image; + if (this.state.done) { + image = /!\; + } else { + image = {this.state.message}/; + } return (
- /!\ + {image}
{this.state.message}
From 93f148fca33c2c1a89a7a8fc407828ea90aa68d6 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sat, 3 Jun 2017 16:22:14 +0100 Subject: [PATCH 015/202] fix type electron vs remote don't break when running a non Squirrel Windows build that has an update url Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/vector/platform/ElectronPlatform.js | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/vector/platform/ElectronPlatform.js b/src/vector/platform/ElectronPlatform.js index f84fe8d570..519cadc09d 100644 --- a/src/vector/platform/ElectronPlatform.js +++ b/src/vector/platform/ElectronPlatform.js @@ -142,22 +142,30 @@ export default class ElectronPlatform extends VectorBasePlatform { const deferred = q.defer(); const _onUpdateAvailable = function() { - electron.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); + remote.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); + remote.autoUpdater.removeListener('error', _onError); deferred.resolve(updateStateEnum.DOWNLOADING); } - const _onUpdateNotAvailable = function() { - electron.autoUpdater.removeListener('update-available', _onUpdateAvailable); + remote.autoUpdater.removeListener('update-available', _onUpdateAvailable); + remote.autoUpdater.removeListener('error', _onError); deferred.resolve(updateStateEnum.NOTAVAILABLE); } + const _onError = function() { + remote.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); + remote.autoUpdater.removeListener('update-available', _onUpdateAvailable); + deferred.resolve(updateStateEnum.ERROR); + } - electron.autoUpdater.once('update-available', _onUpdateAvailable); - electron.autoUpdater.once('update-not-available', _onUpdateNotAvailable); + remote.autoUpdater.once('update-available', _onUpdateAvailable); + remote.autoUpdater.once('update-not-available', _onUpdateNotAvailable); + remote.autoUpdater.once('error', _onError); - electron.ipcRenderer.send('checkForUpdates'); + remote.ipcRenderer.send('checkForUpdates'); return deferred.promise.timeout(10000).catch(() => { - electron.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); - electron.autoUpdater.removeListener('update-available', _onUpdateAvailable); + remote.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); + remote.autoUpdater.removeListener('update-available', _onUpdateAvailable); + remote.autoUpdater.removeListener('error', _onError); return updateStateEnum.TIMEOUT; }); } From 0ef800073bac036ed797ff10d6911ff2d39271e4 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Mon, 5 Jun 2017 18:21:52 +0100 Subject: [PATCH 016/202] App drawer styling --- .../matrix-react-sdk/views/rooms/_AppsDrawer.scss | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss index 0d8ada3633..db2175732f 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss @@ -47,16 +47,17 @@ limitations under the License. margin: 0 5px 2px 0; border: 1px solid $primary-hairline-color; border-radius: 2px; - height: 350px; + // height: 350px; // display: inline-block; } .mx_AppTileFullWidth { width: 100%; - margin: 0 5px 2px 0; + margin: 0; + padding: 0; border: 1px solid $primary-hairline-color; border-radius: 2px; - height: 350px; + // height: 350px; // display: inline-block; } @@ -79,9 +80,12 @@ limitations under the License. .mx_AppTileBody iframe { width: 100%; - height: 331px; + height: 350px; overflow: hidden; border: none; + padding: 0; + margin: 0; + display: block; } .mx_CloseAppWidget { From 76880e0de7a7e982283432d141c69acd5520f5e2 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Tue, 6 Jun 2017 23:46:27 +0100 Subject: [PATCH 017/202] App icon tile styling --- .../views/rooms/_AppsDrawer.scss | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss index db2175732f..840fd963ca 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss @@ -94,3 +94,20 @@ limitations under the License. .mx_AppTileMenuBarWidgetPadding { margin-right: 5px; } + +.mx_AppIconTile { + box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); + transition: 0.3s; +} + +.mx_AppIconTile:hover { + box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2); +} + +.mx_AppIconTile_content { + padding: 2px 16px; +} + +.mx_AppIconTile_image { + width: 100%; +} From 9302c60b47699d42a5dcf08a7b7cca4a564be9f8 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Wed, 7 Jun 2017 10:55:35 +0100 Subject: [PATCH 018/202] App icon styling --- .../views/rooms/_AppsDrawer.scss | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss index 840fd963ca..cc473048c7 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss @@ -96,18 +96,48 @@ limitations under the License. } .mx_AppIconTile { + background-color: #666; + border: 1px solid #666; + width: 200px; box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); transition: 0.3s; + border-radius: 3px; + margin: 5px; + display: inline-block; } .mx_AppIconTile:hover { - box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2); + border: 1px solid $accent-color; + box-shadow: 0 0 10px 5px rgba(200,200,200,0.5); } .mx_AppIconTile_content { padding: 2px 16px; + height: 60px; + overflow: hidden; +} + +.mx_AppIconTile_content h4 { + margin-top: 5px; + margin-bottom: 2px; +} + +.mx_AppIconTile_content p { + margin-top: 0; + margin-bottom: 5px; + font-size: smaller; } .mx_AppIconTile_image { - width: 100%; + width: 75%; + margin: 10px; + max-height: 100px; +} + +.mx_AppIconTile_imageContainer { + text-align: center; + width: 100%; + background-color: white; + border-radius: 3px 3px 0 0; + max-height: 155px; } From 272d36995bb3886bbc6ddcb932d184bd2fdc0485 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Wed, 7 Jun 2017 15:28:58 +0100 Subject: [PATCH 019/202] Fix active styling --- .../views/rooms/_AppsDrawer.scss | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss index cc473048c7..798c9af102 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss @@ -96,8 +96,8 @@ limitations under the License. } .mx_AppIconTile { - background-color: #666; - border: 1px solid #666; + background-color: $lightbox-bg-color; + border: 1px solid rgba(0, 0, 0, 0); width: 200px; box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); transition: 0.3s; @@ -106,6 +106,11 @@ limitations under the License. display: inline-block; } +.mx_AppIconTile.mx_AppIconTile_active { + color: $accent-color; + border-color: $accent-color; +} + .mx_AppIconTile:hover { border: 1px solid $accent-color; box-shadow: 0 0 10px 5px rgba(200,200,200,0.5); @@ -129,9 +134,12 @@ limitations under the License. } .mx_AppIconTile_image { + padding: 10px; width: 75%; - margin: 10px; - max-height: 100px; + max-width:100px; + max-height:100px; + width: auto; + height: auto; } .mx_AppIconTile_imageContainer { From b032accdfa38c3819e2f24d3ae581a21bac4e5f7 Mon Sep 17 00:00:00 2001 From: Oliver Hunt Date: Fri, 9 Jun 2017 17:03:29 +0100 Subject: [PATCH 020/202] Add border on hover for code blocks Signed-off-by: Oliver Hunt --- .../vector/css/matrix-react-sdk/views/rooms/_EventTile.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss index a980d1f9ce..38da84b1c4 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss @@ -345,6 +345,11 @@ limitations under the License. } .mx_EventTile_body pre { position: relative; + border: 1px solid #f8f8f8; +} +.mx_EventTile:hover .mx_EventTile_body pre +{ + border: 1px solid $primary-hairline-color; } .mx_EventTile_body pre:hover .mx_EventTile_copyButton { From 3a86e659afdfdb15a2d05cc6112b6ebd3c33ae8a Mon Sep 17 00:00:00 2001 From: Oliver Hunt Date: Sat, 10 Jun 2017 01:26:20 +0100 Subject: [PATCH 021/202] Made border transparent when not hovered Signed-off-by: Oliver Hunt --- .../vector/css/matrix-react-sdk/views/rooms/_EventTile.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss index 38da84b1c4..7d8e4ba2b7 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss @@ -345,7 +345,7 @@ limitations under the License. } .mx_EventTile_body pre { position: relative; - border: 1px solid #f8f8f8; + border: 1px solid transparent; } .mx_EventTile:hover .mx_EventTile_body pre { From 6592526109dcfab9d484408a83d405211a70acae Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 11 Jun 2017 13:45:37 +0100 Subject: [PATCH 022/202] change /!\ to Warning for accessibility (plus weird escaping?) Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/globals/MatrixToolbar.js | 2 +- src/components/views/globals/NewVersionBar.js | 2 +- src/components/views/globals/UpdateCheckBar.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/views/globals/MatrixToolbar.js b/src/components/views/globals/MatrixToolbar.js index 488b5def47..06bfa36e9e 100644 --- a/src/components/views/globals/MatrixToolbar.js +++ b/src/components/views/globals/MatrixToolbar.js @@ -35,7 +35,7 @@ module.exports = React.createClass({ render: function() { return (
- /!\ + Warning
{ _t('You are not receiving desktop notifications') } { _t('Enable them now') }
diff --git a/src/components/views/globals/NewVersionBar.js b/src/components/views/globals/NewVersionBar.js index 219ef02a9a..d25fa3a6f2 100644 --- a/src/components/views/globals/NewVersionBar.js +++ b/src/components/views/globals/NewVersionBar.js @@ -96,7 +96,7 @@ export default React.createClass({ } return (
- /!\ + Warning
{_t("A new version of Riot is available.")}
diff --git a/src/components/views/globals/UpdateCheckBar.js b/src/components/views/globals/UpdateCheckBar.js index d72ccefff4..4949c4426d 100644 --- a/src/components/views/globals/UpdateCheckBar.js +++ b/src/components/views/globals/UpdateCheckBar.js @@ -77,7 +77,7 @@ export default React.createClass({ render: function() { let image; if (this.state.done) { - image = /!\; + image = Warning; } else { image = {this.state.message}/; } From 4c8ff0955db14c78d73a2db43d7ca7a8de7a3b6c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 11 Jun 2017 16:43:20 +0100 Subject: [PATCH 023/202] move electron update logic into own file, tidy tidy tidy Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- electron_app/src/electron-main.js | 72 +++---------------------------- electron_app/src/updater.js | 65 ++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 67 deletions(-) create mode 100644 electron_app/src/updater.js diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js index f1a9e37a73..d793ab9be9 100644 --- a/electron_app/src/electron-main.js +++ b/electron_app/src/electron-main.js @@ -28,6 +28,7 @@ const AutoLaunch = require('auto-launch'); const tray = require('./tray'); const vectorMenu = require('./vectormenu'); const webContentsHandler = require('./webcontents-handler'); +const updater = require('./updater'); const windowStateKeeper = require('electron-window-state'); @@ -45,69 +46,9 @@ try { // Continue with the defaults (ie. an empty config) } -const UPDATE_POLL_INTERVAL_MS = 60 * 60 * 1000; -const INITIAL_UPDATE_DELAY_MS = 30 * 1000; - let mainWindow = null; -let appQuitting = false; +global.appQuitting = false; -function installUpdate() { - // for some reason, quitAndInstall does not fire the - // before-quit event, so we need to set the flag here. - appQuitting = true; - electron.autoUpdater.quitAndInstall(); -} - -function pollForUpdates() { - try { - electron.autoUpdater.checkForUpdates(); - } catch (e) { - console.log('Couldn\'t check for update', e); - } -} - -function startAutoUpdate(updateBaseUrl) { - if (updateBaseUrl.slice(-1) !== '/') { - updateBaseUrl = updateBaseUrl + '/'; - } - try { - // For reasons best known to Squirrel, the way it checks for updates - // is completely different between macOS and windows. On macOS, it - // hits a URL that either gives it a 200 with some json or - // 204 No Content. On windows it takes a base path and looks for - // files under that path. - if (process.platform === 'darwin') { - // include the current version in the URL we hit. Electron doesn't add - // it anywhere (apart from the User-Agent) so it's up to us. We could - // (and previously did) just use the User-Agent, but this doesn't - // rely on NSURLConnection setting the User-Agent to what we expect, - // and also acts as a convenient cache-buster to ensure that when the - // app updates it always gets a fresh value to avoid update-looping. - electron.autoUpdater.setFeedURL( - `${updateBaseUrl}macos/?localVersion=${encodeURIComponent(electron.app.getVersion())}`); - - } else if (process.platform === 'win32') { - electron.autoUpdater.setFeedURL(`${updateBaseUrl}win32/${process.arch}/`); - } else { - // Squirrel / electron only supports auto-update on these two platforms. - // I'm not even going to try to guess which feed style they'd use if they - // implemented it on Linux, or if it would be different again. - console.log('Auto update not supported on this platform'); - } - // We check for updates ourselves rather than using 'updater' because we need to - // do it in the main process (and we don't really need to check every 10 minutes: - // every hour should be just fine for a desktop app) - // However, we still let the main window listen for the update events. - // We also wait a short time before checking for updates the first time because - // of squirrel on windows and it taking a small amount of time to release a - // lock file. - setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS); - setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS); - } catch (err) { - // will fail if running in debug mode - console.log('Couldn\'t enable update checking', err); - } -} // handle uncaught errors otherwise it displays // stack traces in popup dialogs, which is terrible (which @@ -119,9 +60,6 @@ process.on('uncaughtException', function(error) { console.log('Unhandled exception', error); }); -electron.ipcMain.on('install_update', installUpdate); -electron.ipcMain.on('checkForUpdates', pollForUpdates); - let focusHandlerAttached = false; electron.ipcMain.on('setBadgeCount', function(ev, count) { electron.app.setBadgeCount(count); @@ -219,7 +157,7 @@ electron.ipcMain.on('settings_set', function(ev, key, value) { electron.app.on('ready', () => { if (vectorConfig.update_base_url) { console.log(`Starting auto update with base URL: ${vectorConfig.update_base_url}`); - startAutoUpdate(vectorConfig.update_base_url); + updater.start(vectorConfig.update_base_url) } else { console.log('No update_base_url is defined: auto update is disabled'); } @@ -265,7 +203,7 @@ electron.app.on('ready', () => { mainWindow = null; }); mainWindow.on('close', (e) => { - if (!appQuitting && (tray.hasTray() || process.platform === 'darwin')) { + if (!global.appQuitting && (tray.hasTray() || process.platform === 'darwin')) { // On Mac, closing the window just hides it // (this is generally how single-window Mac apps // behave, eg. Mail.app) @@ -288,7 +226,7 @@ electron.app.on('activate', () => { }); electron.app.on('before-quit', () => { - appQuitting = true; + global.appQuitting = true; }); // Set the App User Model ID to match what the squirrel diff --git a/electron_app/src/updater.js b/electron_app/src/updater.js new file mode 100644 index 0000000000..ea7b259fb4 --- /dev/null +++ b/electron_app/src/updater.js @@ -0,0 +1,65 @@ +const { app, autoUpdater, ipcMain } = require('electron'); + +const UPDATE_POLL_INTERVAL_MS = 60 * 60 * 1000; +const INITIAL_UPDATE_DELAY_MS = 30 * 1000; + +function installUpdate() { + // for some reason, quitAndInstall does not fire the + // before-quit event, so we need to set the flag here. + global.appQuitting = true; + autoUpdater.quitAndInstall(); +} + +function pollForUpdates() { + try { + autoUpdater.checkForUpdates(); + } catch (e) { + console.log('Couldn\'t check for update', e); + } +} + +module.exports = {}; +module.exports.start = function startAutoUpdate(updateBaseUrl) { + if (updateBaseUrl.slice(-1) !== '/') { + updateBaseUrl = updateBaseUrl + '/'; + } + try { + // For reasons best known to Squirrel, the way it checks for updates + // is completely different between macOS and windows. On macOS, it + // hits a URL that either gives it a 200 with some json or + // 204 No Content. On windows it takes a base path and looks for + // files under that path. + if (process.platform === 'darwin') { + // include the current version in the URL we hit. Electron doesn't add + // it anywhere (apart from the User-Agent) so it's up to us. We could + // (and previously did) just use the User-Agent, but this doesn't + // rely on NSURLConnection setting the User-Agent to what we expect, + // and also acts as a convenient cache-buster to ensure that when the + // app updates it always gets a fresh value to avoid update-looping. + autoUpdater.setFeedURL(`${updateBaseUrl}macos/?localVersion=${encodeURIComponent(app.getVersion())}`); + + } else if (process.platform === 'win32') { + autoUpdater.setFeedURL(`${updateBaseUrl}win32/${process.arch}/`); + } else { + // Squirrel / electron only supports auto-update on these two platforms. + // I'm not even going to try to guess which feed style they'd use if they + // implemented it on Linux, or if it would be different again. + console.log('Auto update not supported on this platform'); + } + // We check for updates ourselves rather than using 'updater' because we need to + // do it in the main process (and we don't really need to check every 10 minutes: + // every hour should be just fine for a desktop app) + // However, we still let the main window listen for the update events. + // We also wait a short time before checking for updates the first time because + // of squirrel on windows and it taking a small amount of time to release a + // lock file. + setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS); + setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS); + } catch (err) { + // will fail if running in debug mode + console.log('Couldn\'t enable update checking', err); + } +} + +ipcMain.on('install_update', installUpdate); +ipcMain.on('checkForUpdates', pollForUpdates); From c4fd139586f14449bb830f2dc62c6b053c41dcdd Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 11 Jun 2017 16:46:47 +0100 Subject: [PATCH 024/202] get rid of pointless interval and timeout on linux Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- electron_app/src/updater.js | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/electron_app/src/updater.js b/electron_app/src/updater.js index ea7b259fb4..e585dc977d 100644 --- a/electron_app/src/updater.js +++ b/electron_app/src/updater.js @@ -24,6 +24,7 @@ module.exports.start = function startAutoUpdate(updateBaseUrl) { updateBaseUrl = updateBaseUrl + '/'; } try { + let url; // For reasons best known to Squirrel, the way it checks for updates // is completely different between macOS and windows. On macOS, it // hits a URL that either gives it a 200 with some json or @@ -36,25 +37,29 @@ module.exports.start = function startAutoUpdate(updateBaseUrl) { // rely on NSURLConnection setting the User-Agent to what we expect, // and also acts as a convenient cache-buster to ensure that when the // app updates it always gets a fresh value to avoid update-looping. - autoUpdater.setFeedURL(`${updateBaseUrl}macos/?localVersion=${encodeURIComponent(app.getVersion())}`); + url = `${updateBaseUrl}macos/?localVersion=${encodeURIComponent(app.getVersion())}`; } else if (process.platform === 'win32') { - autoUpdater.setFeedURL(`${updateBaseUrl}win32/${process.arch}/`); + url = `${updateBaseUrl}win32/${process.arch}/`; } else { // Squirrel / electron only supports auto-update on these two platforms. // I'm not even going to try to guess which feed style they'd use if they // implemented it on Linux, or if it would be different again. console.log('Auto update not supported on this platform'); } - // We check for updates ourselves rather than using 'updater' because we need to - // do it in the main process (and we don't really need to check every 10 minutes: - // every hour should be just fine for a desktop app) - // However, we still let the main window listen for the update events. - // We also wait a short time before checking for updates the first time because - // of squirrel on windows and it taking a small amount of time to release a - // lock file. - setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS); - setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS); + + if (url) { + autoUpdater.setFeedURL(url); + // We check for updates ourselves rather than using 'updater' because we need to + // do it in the main process (and we don't really need to check every 10 minutes: + // every hour should be just fine for a desktop app) + // However, we still let the main window listen for the update events. + // We also wait a short time before checking for updates the first time because + // of squirrel on windows and it taking a small amount of time to release a + // lock file. + setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS); + setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS); + } } catch (err) { // will fail if running in debug mode console.log('Couldn\'t enable update checking', err); From a520f0bfedade23ecd532c2293d677bb790d1170 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 11 Jun 2017 19:19:17 +0100 Subject: [PATCH 025/202] move all logic, make bar more generic pass through actual errors and tidy needs testing Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- electron_app/src/updater.js | 22 +++++- .../views/globals/UpdateCheckBar.js | 74 ++++++------------- src/i18n/strings/en_EN.json | 5 +- src/vector/platform/ElectronPlatform.js | 70 ++++++++++-------- src/vector/platform/VectorBasePlatform.js | 29 +++++++- src/vector/platform/WebPlatform.js | 34 +++++++-- 6 files changed, 138 insertions(+), 96 deletions(-) diff --git a/electron_app/src/updater.js b/electron_app/src/updater.js index e585dc977d..106e3d2f23 100644 --- a/electron_app/src/updater.js +++ b/electron_app/src/updater.js @@ -67,4 +67,24 @@ module.exports.start = function startAutoUpdate(updateBaseUrl) { } ipcMain.on('install_update', installUpdate); -ipcMain.on('checkForUpdates', pollForUpdates); + +let ipcChannel; +ipcMain.on('check_updates', function(event) { + ipcChannel = event.sender; + pollForUpdates(); + // event.sender.send('check_updates') // true/false/error = available(downloading)/notAvailable/error +}); + +function ipcChannelSendUpdateStatus(status) { + if (ipcChannel) { + ipcChannel.send('check_updates', status); + } +} + +autoUpdater.on('update-available', function() { + ipcChannelSendUpdateStatus(true); +}).on('update-not-available', function() { + ipcChannelSendUpdateStatus(false); +}).on('error', function(error) { + ipcChannelSendUpdateStatus(error.message); +}); diff --git a/src/components/views/globals/UpdateCheckBar.js b/src/components/views/globals/UpdateCheckBar.js index 4949c4426d..557698c711 100644 --- a/src/components/views/globals/UpdateCheckBar.js +++ b/src/components/views/globals/UpdateCheckBar.js @@ -17,76 +17,50 @@ limitations under the License. 'use strict'; import React from 'react'; -import dis from 'matrix-react-sdk/lib/dispatcher'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg'; -import {updateStateEnum} from '../../../vector/platform/VectorBasePlatform'; +import {updateCheckStatusEnum} from '../../../vector/platform/VectorBasePlatform'; import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton'; +const statusText = { + CHECKING: 'Checking for an update...', + ERROR: 'Error encountered (%(errorDetail)s).', + NOTAVAILABLE: 'No update available.', + DOWNLOADING: 'Downloading update...', +}; + +const doneStatuses = [ + updateCheckStatusEnum.ERROR, + updateCheckStatusEnum.NOTAVAILABLE, +]; + export default React.createClass({ - - getInitialState: function() { - return { - message: _t('Checking for an update...'), - done: false, - }; - }, - - componentWillMount: function() { - PlatformPeg.get().checkForUpdate().done((state) => { - if (this._unmounted) return; - - console.log('checkForUpdate done, ', state); - - // We will be replaced by NewVersionBar - if (state === updateStateEnum.READY) return; - - let done = true; - let message; - switch (state) { - case updateStateEnum.ERROR: - message = _t('Error encountered when checking for an update.'); - break; - case updateStateEnum.TIMEOUT: - message = _t('Update Check timed out, try again later.'); - break; - case updateStateEnum.NOTAVAILABLE: - message = _t('No update found.'); - break; - case updateStateEnum.DOWNLOADING: - message = _t('Update is being downloaded.'); - done = false; - break; - } - - this.setState({message, done}); - }); - }, - - componentWillUnmount: function() { - this._unmounted = true; + propTypes: { + status: React.PropTypes.oneOf(Object.values(updateCheckStatusEnum)).isRequired, + // Currently for error detail but will be usable for download progress + // once that is a thing that squirrel passes through electron. + detail: React.PropTypes.string, }, hideToolbar: function() { - dis.dispatch({ - action: 'check_updates', - value: false, - }); + PlatformPeg.get().stopUpdateCheck(); }, render: function() { + const message = _t(statusText[this.props.status], { errorDetail: this.props.detail }); + let image; - if (this.state.done) { + if (doneStatuses.includes(this.props.status)) { image = Warning; } else { - image = {this.state.message}/; + image = {message}/; } return (
{image}
- {this.state.message} + {message}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 2bce407061..1755fd620b 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -159,8 +159,9 @@ "Yesterday": "Yesterday", "OK": "OK", "Checking for an update...": "Checking for an update...", - "Error encountered when checking for an update.": "Error encountered when checking for an update.", - "Update Check timed out, try again later.": "Update Check timed out, try again later.", + "Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).", + "No update available.": "No update available.", + "Downloading update...": "Downloading update...", "No update found.": "No update found.", "Update is being downloaded.": "Update is being downloaded.", "You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.", diff --git a/src/vector/platform/ElectronPlatform.js b/src/vector/platform/ElectronPlatform.js index 519cadc09d..7a1bf58292 100644 --- a/src/vector/platform/ElectronPlatform.js +++ b/src/vector/platform/ElectronPlatform.js @@ -17,11 +17,11 @@ See the License for the specific language governing permissions and limitations under the License. */ -import VectorBasePlatform, {updateStateEnum} from './VectorBasePlatform'; +import VectorBasePlatform, {updateCheckStatusEnum} from './VectorBasePlatform'; import dis from 'matrix-react-sdk/lib/dispatcher'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; import q from 'q'; -import electron, {remote, ipcRenderer} from 'electron'; +import {remote, ipcRenderer} from 'electron'; remote.autoUpdater.on('update-downloaded', onUpdateDownloaded); @@ -62,11 +62,42 @@ function _onAction(payload: Object) { } } +function getUpdateCheckStatus(status) { + if (status === true) { + return { status: updateCheckStatusEnum.DOWNLOADING }; + } else if (status === false) { + return { status: updateCheckStatusEnum.NOTAVAILABLE }; + } else { + return { + status: updateCheckStatusEnum.ERROR, + detail: status, + }; + } +} + export default class ElectronPlatform extends VectorBasePlatform { constructor() { super(); dis.register(_onAction); this.updatable = Boolean(remote.autoUpdater.getFeedURL()); + + /* + IPC Call `check_updates` returns: + true if there is an update available + false if there is not + or the error if one is encountered + */ + ipcRenderer.on('check_updates', (event, status) => { + if (!this.showUpdateCheck) return; + dis.dispatch({ + action: 'check_updates', + value: getUpdateCheckStatus(status), + }); + this.showUpdateCheck = false; + }); + + this.startUpdateCheck = this.startUpdateCheck.bind(this); + this.stopUpdateCheck = this.stopUpdateCheck.bind(this); } getHumanReadableName(): string { @@ -138,43 +169,18 @@ export default class ElectronPlatform extends VectorBasePlatform { return q(remote.app.getVersion()); } - checkForUpdate() { // manual update check for this platform - const deferred = q.defer(); + startUpdateCheck() { + if (this.showUpdateCheck) return; + super.startUpdateCheck(); - const _onUpdateAvailable = function() { - remote.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); - remote.autoUpdater.removeListener('error', _onError); - deferred.resolve(updateStateEnum.DOWNLOADING); - } - const _onUpdateNotAvailable = function() { - remote.autoUpdater.removeListener('update-available', _onUpdateAvailable); - remote.autoUpdater.removeListener('error', _onError); - deferred.resolve(updateStateEnum.NOTAVAILABLE); - } - const _onError = function() { - remote.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); - remote.autoUpdater.removeListener('update-available', _onUpdateAvailable); - deferred.resolve(updateStateEnum.ERROR); - } - - remote.autoUpdater.once('update-available', _onUpdateAvailable); - remote.autoUpdater.once('update-not-available', _onUpdateNotAvailable); - remote.autoUpdater.once('error', _onError); - - remote.ipcRenderer.send('checkForUpdates'); - return deferred.promise.timeout(10000).catch(() => { - remote.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable); - remote.autoUpdater.removeListener('update-available', _onUpdateAvailable); - remote.autoUpdater.removeListener('error', _onError); - return updateStateEnum.TIMEOUT; - }); + ipcRenderer.send('check_updates'); } installUpdate() { // IPC to the main process to install the update, since quitAndInstall // doesn't fire the before-quit event so the main process needs to know // it should exit. - electron.ipcRenderer.send('install_update'); + ipcRenderer.send('install_update'); } getDefaultDeviceDisplayName(): string { diff --git a/src/vector/platform/VectorBasePlatform.js b/src/vector/platform/VectorBasePlatform.js index 074be91c83..0e84e5fcd5 100644 --- a/src/vector/platform/VectorBasePlatform.js +++ b/src/vector/platform/VectorBasePlatform.js @@ -19,12 +19,13 @@ limitations under the License. import BasePlatform from 'matrix-react-sdk/lib/BasePlatform'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; +import dis from 'matrix-react-sdk/lib/dispatcher'; import Favico from 'favico.js'; -export const updateStateEnum = { +export const updateCheckStatusEnum = { + CHECKING: 'CHECKING', ERROR: 'ERROR', - TIMEOUT: 'TIMEOUT', NOTAVAILABLE: 'NOTAVAILABLE', DOWNLOADING: 'DOWNLOADING', READY: 'READY', @@ -42,8 +43,12 @@ export default class VectorBasePlatform extends BasePlatform { // and we set the state each time, even if the value hasn't changed, // so we'd need to fix that if enabling the animation. this.favicon = new Favico({animation: 'none'}); + this.showUpdateCheck = false; this._updateFavicon(); this.updatable = true; + + this.startUpdateCheck = this.startUpdateCheck.bind(this); + this.stopUpdateCheck = this.stopUpdateCheck.bind(this); } getHumanReadableName(): string { @@ -96,14 +101,30 @@ export default class VectorBasePlatform extends BasePlatform { return this.updatable; } + startUpdateCheck() { + this.showUpdateCheck = true; + dis.dispatch({ + action: 'check_updates', + value: { status: updateCheckStatusEnum.CHECKING }, + }); + } + + stopUpdateCheck() { + this.showUpdateCheck = false; + dis.dispatch({ + action: 'check_updates', + value: false, + }) + } + /** * Check for the availability of an update to the version of the * app that's currently running. * If an update is available, this function should dispatch the * 'new_version' action. - * @returns Promise + * @returns Promise */ - checkForUpdate(): Promise { + pollForUpdate(): Promise { } /** diff --git a/src/vector/platform/WebPlatform.js b/src/vector/platform/WebPlatform.js index dd6b91de91..02632ba049 100644 --- a/src/vector/platform/WebPlatform.js +++ b/src/vector/platform/WebPlatform.js @@ -17,7 +17,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import VectorBasePlatform, {updateStateEnum} from './VectorBasePlatform'; +import VectorBasePlatform, {updateCheckStatusEnum} from './VectorBasePlatform'; import request from 'browser-request'; import dis from 'matrix-react-sdk/lib/dispatcher.js'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; @@ -32,6 +32,9 @@ export default class WebPlatform extends VectorBasePlatform { constructor() { super(); this.runningVersion = null; + + this.startUpdateCheck = this.startUpdateCheck.bind(this); + this.stopUpdateCheck = this.stopUpdateCheck.bind(this); } getHumanReadableName(): string { @@ -135,11 +138,11 @@ export default class WebPlatform extends VectorBasePlatform { } startUpdater() { - this.checkForUpdate(); - setInterval(this.checkForUpdate, POKE_RATE_MS); + this.pollForUpdate(); + setInterval(this.pollForUpdate.bind(this), POKE_RATE_MS); } - checkForUpdate() { + pollForUpdate() { return this._getVersion().then((ver) => { if (this.runningVersion === null) { this.runningVersion = ver; @@ -149,12 +152,29 @@ export default class WebPlatform extends VectorBasePlatform { currentVersion: this.runningVersion, newVersion: ver, }); - return updateStateEnum.READY; + // Return to skip a MatrixChat state update + return; } - return updateStateEnum.NOTAVAILABLE; + return { status: updateCheckStatusEnum.NOTAVAILABLE }; }, (err) => { console.error("Failed to poll for update", err); - return updateStateEnum.ERROR; + return { + status: updateCheckStatusEnum.ERROR, + detail: err.message || err.status ? err.status.toString() : 'Unknown Error', + }; + }); + } + + startUpdateCheck() { + if (this.showUpdateCheck) return; + super.startUpdateCheck(); + this.pollForUpdate().then((updateState) => { + if (!this.showUpdateCheck) return; + if (!updateState) return; + dis.dispatch({ + action: 'check_updates', + value: updateState, + }); }); } From 89533706a8cfc6f2bd1a6749dc2dbb9473fec3e6 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 11 Jun 2017 23:39:21 +0100 Subject: [PATCH 026/202] pollForUpdate is now internal/private to a Platform. Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/vector/platform/VectorBasePlatform.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/vector/platform/VectorBasePlatform.js b/src/vector/platform/VectorBasePlatform.js index 0e84e5fcd5..c3df04f5b7 100644 --- a/src/vector/platform/VectorBasePlatform.js +++ b/src/vector/platform/VectorBasePlatform.js @@ -117,16 +117,6 @@ export default class VectorBasePlatform extends BasePlatform { }) } - /** - * Check for the availability of an update to the version of the - * app that's currently running. - * If an update is available, this function should dispatch the - * 'new_version' action. - * @returns Promise - */ - pollForUpdate(): Promise { - } - /** * Update the currently running app to the latest available * version and replace this instance of the app with the From a32ce4fbf6208294d506d3b2dc3d4bcb76875e28 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 11 Jun 2017 23:57:03 +0100 Subject: [PATCH 027/202] remove unused string Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- 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 a06c443989..751249a3bc 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -165,7 +165,6 @@ "No update available.": "No update available.", "Downloading update...": "Downloading update...", "No update found.": "No update found.", - "Update is being downloaded.": "Update is being downloaded.", "You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.", "Welcome page": "Welcome page", "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!": "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!", From 9493f4a8720432c66acb9a7b45f6c3f6e6641c2b Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 12 Jun 2017 10:42:44 +0100 Subject: [PATCH 028/202] fallback from undefined for interpolation because _t called with undefined interpolation name: errorDetail even though when its undef its not used to sprinf-js would have been fine... Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/globals/UpdateCheckBar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/globals/UpdateCheckBar.js b/src/components/views/globals/UpdateCheckBar.js index 557698c711..d19a21cb8f 100644 --- a/src/components/views/globals/UpdateCheckBar.js +++ b/src/components/views/globals/UpdateCheckBar.js @@ -47,7 +47,7 @@ export default React.createClass({ }, render: function() { - const message = _t(statusText[this.props.status], { errorDetail: this.props.detail }); + const message = _t(statusText[this.props.status], { errorDetail: this.props.detail || '' }); let image; if (doneStatuses.includes(this.props.status)) { From 53e2ce33b878e61913958b2faced44f43eb4731a Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 12 Jun 2017 13:39:35 +0100 Subject: [PATCH 029/202] remove unused i18n Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- 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 751249a3bc..135c6dabda 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -164,7 +164,6 @@ "Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).", "No update available.": "No update available.", "Downloading update...": "Downloading update...", - "No update found.": "No update found.", "You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.", "Welcome page": "Welcome page", "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!": "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!", From b6d2ba2019ed4ca5a9f75bfb065ddbe8509ec02a Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 12 Jun 2017 13:47:29 +0100 Subject: [PATCH 030/202] store window ref globally so when splitting files its easier to access. Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- electron_app/src/electron-main.js | 6 +++--- electron_app/src/tray.js | 18 +++++++++--------- electron_app/src/updater.js | 12 +++--------- 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js index b0d4de4c21..5f9598afaf 100644 --- a/electron_app/src/electron-main.js +++ b/electron_app/src/electron-main.js @@ -185,7 +185,7 @@ electron.app.on('ready', () => { defaultHeight: 768, }); - mainWindow = new electron.BrowserWindow({ + mainWindow = global.mainWindow = new electron.BrowserWindow({ icon: iconPath, show: false, autoHideMenuBar: true, @@ -203,7 +203,7 @@ electron.app.on('ready', () => { mainWindow.hide(); // Create trayIcon icon - tray.create(mainWindow, { + tray.create({ icon_path: iconPath, brand: vectorConfig.brand || 'Riot', }); @@ -215,7 +215,7 @@ electron.app.on('ready', () => { } mainWindow.on('closed', () => { - mainWindow = null; + mainWindow = global.mainWindow = null; }); mainWindow.on('close', (e) => { if (!global.appQuitting && (tray.hasTray() || process.platform === 'darwin')) { diff --git a/electron_app/src/tray.js b/electron_app/src/tray.js index 039e7133fa..4225e1f6f3 100644 --- a/electron_app/src/tray.js +++ b/electron_app/src/tray.js @@ -26,17 +26,17 @@ exports.hasTray = function hasTray() { return (trayIcon !== null); }; -exports.create = function(win, config) { +exports.create = function(config) { // no trays on darwin if (process.platform === 'darwin' || trayIcon) return; const toggleWin = function() { - if (win.isVisible() && !win.isMinimized()) { - win.hide(); + if (global.mainWindow.isVisible() && !global.mainWindow.isMinimized()) { + global.mainWindow.hide(); } else { - if (win.isMinimized()) win.restore(); - if (!win.isVisible()) win.show(); - win.focus(); + if (global.mainWindow.isMinimized()) global.mainWindow.restore(); + if (!global.mainWindow.isVisible()) global.mainWindow.show(); + global.mainWindow.focus(); } }; @@ -60,7 +60,7 @@ exports.create = function(win, config) { trayIcon.on('click', toggleWin); let lastFavicon = null; - win.webContents.on('page-favicon-updated', async function(ev, favicons) { + global.mainWindow.webContents.on('page-favicon-updated', async function(ev, favicons) { let newFavicon = config.icon_path; if (favicons && favicons.length > 0 && favicons[0].startsWith('data:')) { newFavicon = favicons[0]; @@ -85,10 +85,10 @@ exports.create = function(win, config) { } trayIcon.setImage(newFavicon); - win.setIcon(newFavicon); + global.mainWindow.setIcon(newFavicon); }); - win.webContents.on('page-title-updated', function(ev, title) { + global.mainWindow.webContents.on('page-title-updated', function(ev, title) { trayIcon.setToolTip(title); }); }; diff --git a/electron_app/src/updater.js b/electron_app/src/updater.js index 106e3d2f23..49fa4e0419 100644 --- a/electron_app/src/updater.js +++ b/electron_app/src/updater.js @@ -67,17 +67,11 @@ module.exports.start = function startAutoUpdate(updateBaseUrl) { } ipcMain.on('install_update', installUpdate); - -let ipcChannel; -ipcMain.on('check_updates', function(event) { - ipcChannel = event.sender; - pollForUpdates(); - // event.sender.send('check_updates') // true/false/error = available(downloading)/notAvailable/error -}); +ipcMain.on('check_updates', pollForUpdates); function ipcChannelSendUpdateStatus(status) { - if (ipcChannel) { - ipcChannel.send('check_updates', status); + if (global.mainWindow) { + global.mainWindow.webContents.send('check_updates', status); } } From 1fcd462660a7d82bf4b610ba14f2bac3f73b5205 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 13 Jun 2017 14:45:05 +0100 Subject: [PATCH 031/202] Tweak tests to match updates to matrixchat Mostly this is just making it look at the `view` state rather than the individual boolean flags. One other tweak merits explanation: we now implement the initial couldn't-register-as-guest login with an explicit switch to the LOGIN view, which means that the URL gets updated to #/login. --- test/app-tests/loading.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index a323a26269..ed1875e004 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -29,6 +29,7 @@ import jssdk from 'matrix-js-sdk'; import sdk from 'matrix-react-sdk'; import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg'; import * as languageHandler from 'matrix-react-sdk/lib/languageHandler'; +import {VIEWS} from 'matrix-react-sdk/lib/components/structures/MatrixChat'; import * as test_utils from '../test-utils'; import MockHttpBackend from '../mock-request'; @@ -153,8 +154,8 @@ describe('loading:', function () { .check((r) => {syncRequest = r;}) .respond(200, response); - console.log("waiting for /sync"); for (let attempts = 10; attempts > 0; attempts--) { + console.log(Date.now() + " waiting for /sync"); if (syncRequest) { return syncRequest; } @@ -184,7 +185,7 @@ describe('loading:', function () { // we expect a single component following session load ReactTestUtils.findRenderedComponentWithType( matrixChat, sdk.getComponent('structures.login.Login')); - expect(windowLocation.hash).toEqual(""); + expect(windowLocation.hash).toEqual("#/login"); }).done(done, done); }); @@ -360,6 +361,9 @@ describe('loading:', function () { loadApp({ uriFragment: "#/login", }); + + // give the UI a chance to display + return q.delay(50); }); it('shows a login view', function() { @@ -589,7 +593,8 @@ function awaitSyncingSpinner(matrixChat, retryLimit, retryCount) { retryCount = 0; } - if (matrixChat.state.loading || matrixChat.state.loggingIn) { + if (matrixChat.state.view === VIEWS.LOADING || + matrixChat.state.view === VIEWS.LOGGING_IN) { console.log(Date.now() + " Awaiting sync spinner: still loading."); if (retryCount >= retryLimit) { throw new Error("MatrixChat still not loaded after " + @@ -628,8 +633,7 @@ function awaitRoomView(matrixChat, retryLimit, retryCount) { retryCount = 0; } - if (matrixChat.state.loading || - !(matrixChat.state.loggedIn && matrixChat.state.ready)) { + if (matrixChat.state.view !== VIEWS.LOGGED_IN || !matrixChat.state.ready) { console.log(Date.now() + " Awaiting room view: not ready yet."); if (retryCount >= retryLimit) { throw new Error("MatrixChat still not ready after " + From f5b2a92e840ecf630818a59c502733de15de59af Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 15 Jun 2017 18:17:00 +0100 Subject: [PATCH 032/202] Give the login panel a bit longer to appear --- test/app-tests/loading.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index ed1875e004..e660c91e9d 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -180,7 +180,7 @@ describe('loading:', function () { return httpBackend.flush(); }).then(() => { // Wait for another trip around the event loop for the UI to update - return q.delay(1); + return q.delay(10); }).then(() => { // we expect a single component following session load ReactTestUtils.findRenderedComponentWithType( @@ -206,7 +206,7 @@ describe('loading:', function () { return httpBackend.flush(); }).then(() => { // Wait for another trip around the event loop for the UI to update - return q.delay(1); + return q.delay(10); }).then(() => { return completeLogin(matrixChat); }).then(() => { From 5bc676a0426a3cfdeda89a271172fe3b51f1ae74 Mon Sep 17 00:00:00 2001 From: IMIN <2reeseenmin@gmail.com> Date: Fri, 16 Jun 2017 10:14:10 +0000 Subject: [PATCH 033/202] Translated using Weblate (Korean) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ko/ --- src/i18n/strings/ko.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index a9fdcb5a94..95c100b4a8 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -113,16 +113,16 @@ "Enable them now": "지금 켜기", "Enter keywords separated by a comma:": "키워드를 쉼표로 구분해 입력해주세요:", "Failed to": "실패했어요", - "Failed to add tag %(tagName)s to room": "방에 %(tagName)s 태그를 추가하지 못했어요", + "Failed to add tag %(tagName)s to room": "방에 %(tagName)s로 지정하지 못했어요", "Failed to change settings": "설정을 바꾸지 못했어요", "Failed to forget room %(errCode)s": "방 %(errCode)s를 잊지 못했어요", "Failed to update keywords": "키워드를 갱신하지 못했어요", "Failed to get protocol list from Home Server": "홈 서버에서 프로토콜 목록을 얻지 못했어요", "Failed to get public room list": "공개한 방 목록을 얻지 못했어요", "Failed to join the room": "방에 들어가지 못했어요", - "Failed to remove tag %(tagName)s from room": "방에서 태그 %(tagName)s를 지우지 못했어요", + "Failed to remove tag %(tagName)s from room": "방에서 %(tagName)s 지정을 지우지 못했어요", "Failed to send report: ": "보고를 보내지 못했어요: ", - "Failed to set direct chat tag": "직접 이야기 태그를 설정하지 못했어요", + "Failed to set direct chat tag": "직접 이야기 지정을 설정하지 못했어요", "Failed to set Direct Message status of room": "방의 쪽지 상태를 설정하지 못했어요", "Favourite": "즐겨찾기", "Fetching third party location failed": "타사 위치를 불러오지 못했어요", From 6df1574b8beeb3f6838f1ba7096019e0fcea9083 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Fri, 16 Jun 2017 15:05:14 +0100 Subject: [PATCH 034/202] onLoadCompleted is now onTokenLoginCompleted --- src/vector/index.js | 18 ++++++++---------- test/app-tests/loading.js | 8 +++++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/vector/index.js b/src/vector/index.js index 9f16205164..da03327dab 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -216,18 +216,16 @@ function getConfig() { return deferred.promise; } -function onLoadCompleted() { +function onTokenLoginCompleted() { // if we did a token login, we're now left with the token, hs and is // url as query params in the url; a little nasty but let's redirect to // clear them. - if (window.location.search) { - var parsedUrl = url.parse(window.location.href); - parsedUrl.search = ""; - var formatted = url.format(parsedUrl); - console.log("Redirecting to " + formatted + " to drop loginToken " + - "from queryparams"); - window.location.href = formatted; - } + var parsedUrl = url.parse(window.location.href); + parsedUrl.search = ""; + var formatted = url.format(parsedUrl); + console.log("Redirecting to " + formatted + " to drop loginToken " + + "from queryparams"); + window.location.href = formatted; } async function loadApp() { @@ -288,7 +286,7 @@ async function loadApp() { realQueryParams={params} startingFragmentQueryParams={fragparts.params} enableGuest={true} - onLoadCompleted={onLoadCompleted} + onTokenLoginCompleted={onTokenLoginCompleted} initialScreenAfterLogin={getScreenFromLocation(window.location)} defaultDeviceDisplayName={PlatformPeg.get().getDefaultDeviceDisplayName()} />, diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index a323a26269..04c68377a9 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -47,7 +47,7 @@ describe('loading:', function () { // the mounted MatrixChat let matrixChat; - // a promise which resolves when the MatrixChat calls onLoadCompleted + // a promise which resolves when the MatrixChat calls onTokenLoginCompleted let loadCompletePromise; beforeEach(function() { @@ -135,7 +135,7 @@ describe('loading:', function () { realQueryParams={params} startingFragmentQueryParams={fragParts.params} enableGuest={true} - onLoadCompleted={loadCompleteDefer.resolve} + onTokenLoginCompleted={loadCompleteDefer.resolve} initialScreenAfterLogin={getScreenFromLocation(windowLocation)} makeRegistrationUrl={() => {throw new Error('Not implemented');}} />, parentDiv @@ -360,6 +360,8 @@ describe('loading:', function () { loadApp({ uriFragment: "#/login", }); + + return q.delay(1); }); it('shows a login view', function() { @@ -513,7 +515,7 @@ describe('loading:', function () { return httpBackend.flush(); }).then(() => { - // at this point, MatrixChat should fire onLoadCompleted, which + // at this point, MatrixChat should fire onTokenLoginCompleted, which // makes index.js reload the app. We're not going to attempt to // simulate the reload - just check that things are left in the // right state for the reloaded app. From 274536bf139c62a5753a976b5c264c63340e70e8 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 16 Jun 2017 16:11:33 +0100 Subject: [PATCH 035/202] change dispatcher forward_event signature Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/context_menus/MessageContextMenu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/context_menus/MessageContextMenu.js b/src/components/views/context_menus/MessageContextMenu.js index e3f4d14042..bc82778aae 100644 --- a/src/components/views/context_menus/MessageContextMenu.js +++ b/src/components/views/context_menus/MessageContextMenu.js @@ -117,7 +117,7 @@ module.exports = React.createClass({ onForwardClick: function() { dis.dispatch({ action: 'forward_event', - content: this.props.mxEvent, + event: this.props.mxEvent, }); this.closeMenu(); }, From 3d0da059dcef4bed88fcd0cd0933c725c594e7f8 Mon Sep 17 00:00:00 2001 From: Szimszon Date: Fri, 16 Jun 2017 17:48:10 +0000 Subject: [PATCH 036/202] Translated using Weblate (Hungarian) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/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 9f8b2bef8f..ac7497c1e6 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -196,5 +196,7 @@ "Continue": "Folytatás", "Please set a password!": "Kérlek, állíts be egy jelszót!", "This will allow you to return to your account after signing out, and sign in on other devices.": "Ezzel visszatérhetsz kijelentkezés után a fiókodhoz és más eszközökkel is be tudsz jelentkezni.", - " (HTTP status %(httpStatus))": "(HTTP állapot %(httpStatus))" + " (HTTP status %(httpStatus))": "(HTTP állapot %(httpStatus))", + "You have successfully set a password and an email address!": "Sikeresen beállítottad a jelszavad és e-mail címed!", + "Remember, you can always set an email address in user settings if you change your mind.": "Ha meggondolod magad, bármikor beállíthatod az e-mail címed a felhasználói beállításoknál." } From 7cdb73d74b49c0198f4404ab9127e668ffe40f14 Mon Sep 17 00:00:00 2001 From: Walter Date: Fri, 16 Jun 2017 19:43:35 +0000 Subject: [PATCH 037/202] Translated using Weblate (Russian) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/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 49bb935d54..c3fa070ffc 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -7,7 +7,7 @@ "Create new room": "Создать новую комнату", "Couldn't find a matching Matrix room": "Не возможно найти подходящую Матриксу комнату", "Custom Server Options": "Расширенные настройки сервера", - "delete the alias.": "удалить привязку.", + "delete the alias.": "удалить псевдоним.", "Delete the room alias": "Удалить привязку комнаты", "Direct Chat": "Приватный чат", "Directory": "Каталог", @@ -35,7 +35,7 @@ "Fetching third party location failed": "Не удалось получить местоположение", "Files": "Файлы", "Filter room names": "Фильтр по назв. комнаты", - "Forget": "Забыть", + "Forget": "Удалить", "from the directory": "из каталога", " from room": " из комнаты", "Guests can join": "Гость может присоединиться", @@ -88,7 +88,7 @@ "Drop here %(toAction)s": "Вставить сюда: %(toAction)s", "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Удалить псевдоним комнаты %(alias)s и очистить %(name)s из каталога?", "Failed to add tag %(tagName)s to room": "Не удалось добавить тег %(tagName)s в комнату", - "Failed to forget room %(errCode)s": "Не удалось забыть комнату %(errCode)s", + "Failed to forget room %(errCode)s": "Не удалось удалить комнату %(errCode)s", "Failed to remove tag %(tagName)s from room": "Не удалось убрать пометку %(tagName)s из комнаты", "Failed to set direct chat tag": "Не удалось пометить прямую беседу", "Unhide Preview": "Показать анонс", @@ -141,11 +141,11 @@ "Forward Message": "Переслать сообщение дальше", "Hide panel": "Скрыть панель", "I understand the risks and wish to continue": "Я понимаю риск и хочу продолжать", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Что бы выявить проблему, будет отослан журнал этого клиента с сообщением о ошибке. Если ты только верхний текст отослать хочешь, отключи следующее:", + "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Что бы выявить проблему, будет отослан журнал этого клиента с сообщением о ошибке. Если Вы только верхний текст отослать хотите, отключите следующее:", "Loading bug report module": "Загрузи Модуль ошибок", "Messages containing keywords": "Сообщения, которые содержат определенные ключевые слова", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Пожалуйста опиши (на Английском) ошибку. Что ты делал? Что ты ожидал получить? Что произошло?", - "Please describe the bug and/or send logs.": "Пожалуйста опиши ошибку и/или перешли протоколы.", + "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Пожалуйста опишите (на Английском) ошибку. Что Вы делали? Что Вы ожидали получить? Что произошло?", + "Please describe the bug and/or send logs.": "Пожалуйста опишите ошибку и/или перешлите протоколы.", "Please install Chrome or Firefox for the best experience.": "Пожалуйста установите Chrome или Firefox для лучшего результата.", "Report a bug": "Отчет о ошибке", "Riot Desktop on %(platformName)s": "Riot Desktop на %(platformName)s", @@ -167,7 +167,7 @@ "You are Rioting as a guest. Register or sign in to access more rooms and features!": "Вы пользуетесь Riot как гость. Зарегистрируйтесь или войдите в систему и получите доступ к огромному количеству комнат и функций!", "OK": "ОК", "You need to be using HTTPS to place a screen-sharing call.": "Вы должны пользоваться HTTPS чтобы пользоваться видео звонком.", - "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!": "Если ваш браузер не корректно отображает информацию и все или некоторые функции отключены, вы можете и дальше этим браузером пользоваться но ваши проблемы останутся с вами!", + "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!": "Если Ваш браузер не корректно отображает информацию и все или некоторые функции отключены, Вы можете и дальше этим браузером пользоваться но ваши проблемы останутся с вами!", "Login": "Войти", "Welcome to Riot.im": "Добро пожаловать на Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализованное, шифрованное общение и сотрудничество на основе [matrix]", @@ -193,7 +193,7 @@ "Please set a password!": "Задайте пароль!", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "В Matrix существует множество комнат, связанных с существующими сетями (Slack, IRC, Gitter и т.д.) Или независимыми. Ищите в каталоге!", "Failed to change password. Is your password correct?": "Не удалось сменить пароль. Вы правильно ввели текущий пароль?", - "You can now return to your account after signing out, and sign in on other devices.": "Теперь вы можете вернуться в свою учетную запись после выхода из системы, и войти в систему на других устройствах.", + "You can now return to your account after signing out, and sign in on other devices.": "Теперь Вы можете вернуться в свою учетную запись после выхода из системы, и войти в систему на других устройствах.", "Support for those using the Matrix spec": "Поддержка для тех, кто использует спецификацию Matrix", "Design and implementation of E2E in Matrix": "Разработка и внедрение E2E в Matrix", "Implementing VR services with Matrix": "Внедрение служб VR с помощью Matrix", From e6551e4590e57132c64c51d8f8f1bdcda95dbf6f Mon Sep 17 00:00:00 2001 From: Enrique Date: Sat, 17 Jun 2017 10:19:31 +0000 Subject: [PATCH 038/202] Translated using Weblate (Spanish) Currently translated at 58.5% (117 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/es/ --- src/i18n/strings/es.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 0fb34871e6..98aef49556 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -56,7 +56,7 @@ "Messages in one-to-one chats": "Mensajes en chats uno a uno", "Messages sent by bot": "Mensajes enviados por bot", "more": "más", - "Mute": "Mute", + "Mute": "Silenciar", "No rooms to show": "Sin salas para mostrar", "Noisy": "Ruidoso", "Notification targets": "Objetivos de notificación", @@ -65,9 +65,9 @@ "Notify me for anything else": "Notificarme para cualquier otra cosa", "Off": "Apagado", "On": "Encendido", - "Operation failed": "Operación fallida", + "Operation failed": "Falló la operación", "Permalink": "Enlace permanente", - "Please Register": "Por favor regístrate", + "Please Register": "Por favor, regístrese", "Quote": "Citar", "Redact": "Redactar", "Reject": "Rechazar", @@ -114,5 +114,6 @@ "Yesterday": "Ayer", "Welcome page": "Página de bienvenida", "Continue": "Continuar", - "Search": "Búsqueda" + "Search": "Búsqueda", + "OK": "Correcto" } From 9c8be7257488d250e03f0b3030cb2b4db621af98 Mon Sep 17 00:00:00 2001 From: Christopher Armstrong Date: Sat, 17 Jun 2017 23:42:01 +0000 Subject: [PATCH 039/202] Translated using Weblate (English (United States)) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/en_US/ --- src/i18n/strings/en_US.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index 63fadbe006..6e37469705 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -196,5 +196,7 @@ "This will allow you to return to your account after signing out, and sign in on other devices.": "This will allow you to return to your account after signing out, and sign in on other devices.", "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat", "Riot/Web & Desktop chat": "Riot/Web & Desktop chat", - "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat" + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat", + "You have successfully set a password and an email address!": "You have successfully set a password and an email address!", + "Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind." } From c585d80e3ef124bb0fea9774e5657d331b815b69 Mon Sep 17 00:00:00 2001 From: Elia Date: Sat, 17 Jun 2017 23:49:43 +0000 Subject: [PATCH 040/202] Added translation using Weblate (Turkish) --- src/i18n/strings/tr.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/i18n/strings/tr.json diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/i18n/strings/tr.json @@ -0,0 +1 @@ +{} \ No newline at end of file From d9b63a482cfcfda21963ffa4644de1a5f5bd57d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20P=C3=A9rez-Su=C3=A1rez?= Date: Sat, 17 Jun 2017 23:37:54 +0000 Subject: [PATCH 041/202] Translated using Weblate (Spanish) Currently translated at 60.5% (121 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/es/ --- src/i18n/strings/es.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 98aef49556..84007782c1 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -115,5 +115,9 @@ "Welcome page": "Página de bienvenida", "Continue": "Continuar", "Search": "Búsqueda", - "OK": "Correcto" + "OK": "Correcto", + "Failed to change password. Is your password correct?": "Falló al cambiar la clave, ¿Está correcta tu clave?", + "Safari and Opera work too.": "Safari y Opera también funcionan.", + "A new version of Riot is available.": "Una nueva versión de Riot está disponible.", + "Cancel": "Cancelar" } From f2fa326c0c0e4f07bd6b85e4217a3bbd73ef4a17 Mon Sep 17 00:00:00 2001 From: Elia Date: Sun, 18 Jun 2017 02:06:23 +0000 Subject: [PATCH 042/202] Translated using Weblate (Turkish) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/tr/ --- src/i18n/strings/tr.json | 203 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 202 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index 9e26dfeeb6..761672f887 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -1 +1,202 @@ -{} \ No newline at end of file +{ + "%(appName)s via %(browserName)s on %(osName)s": "%(osName) işletim sisteminde %(browserName) ile %(appName)", + "Safari and Opera work too.": " Safari ve Opera da çalışıyor.", + "A new version of Riot is available.": "Riot'un yeni bir versiyonu mevcuttur.", + "Add an email address above to configure email notifications": "E-posta bildirimlerini yapılandırmak için yukarıya bir e-posta adresi ekleyin", + "Advanced notification settings": "Gelişmiş bildirim ayarları", + "All messages": "Tüm mesajlar", + "All messages (loud)": "Tüm mesajlar (uzun)", + "All Rooms": "Tüm Odalar", + "All notifications are currently disabled for all targets.": "Tüm bildirimler şu anda tüm hedefler için devre dışı bırakılmıştır.", + "An error occurred whilst saving your email notification preferences.": "E-posta bildirim tercihlerinizi kaydetme işlemi sırasında bir hata oluştu.", + "Call invitation": "Arama davetiyesi", + "Cancel": "İptal Et", + "Cancel Sending": "Göndermeyi İptal Et", + "Can't update user notification settings": "Kullanıcı bildirim ayarları güncellenemiyor", + "Changelog": "Değişiklikler", + "Close": "Kapat", + "Collapse panel": "Katlanır panel", + "Collecting app version information": "Uygulama sürümü bilgileri toplanıyor", + "Collecting logs": "Kayıtlar toplanıyor", + "Create new room": "Yeni oda oluştur", + "Couldn't find a matching Matrix room": "Eşleşen bir Matrix odası bulunamadı", + "Custom Server Options": "Özel Sunucu Seçenekleri", + "customServer_text": "Farklı bir Ana Sunucu URL'si belirleyerek başka bir Matrix sunucusunda oturum açmak için Özel Sunucu Seçeneklerini kullanabilirsiniz.
Bu , Riot'u mevcut Matrix hesabı ile farklı bir Ana Sunucuda kullanmanıza olanak tanır.

Ayrıca Özel Kimlik Sunucu'da ayarlayabilirsiniz ama kullanıcıları e-posta adresleriyle veya kendi e-posta adresinizle davet edemezsiniz.", + "delete the alias.": "Tüm rumuzları sil.", + "Delete the room alias %(alias)s and remove %(name)s from the directory?": "%(alias) oda rumuzu silinsin ve %(name) dizinden kaldırılsın mı ?", + "Describe your problem here.": "Probleminizi burada açıklayın.", + "Direct Chat": "Doğrudan Sohbet", + "Directory": "Dizin", + "Dismiss": "Reddet", + "Download this file": "Bu dosyayı indir", + "Drop here %(toAction)s": "Yapılacakları buraya bırak", + "Enable audible notifications in web client": "Web istemcisinde sesli bildirimleri etkinleştir", + "Enable desktop notifications": "Masaüstü bildirimlerini etkinleştir", + "Enable email notifications": "E-posta bildirimlerini etkinleştir", + "Enable notifications for this account": "Bu hesap için bildirimleri etkinleştir", + "Enable them now": "Onları şimdi etkinleştir", + "Enter keywords separated by a comma:": "Anahtar kelimeleri virgül ile ayırarak girin:", + "Error": "Hata", + "Error saving email notification preferences": "E-posta bildirim tercihlerini kaydetme hatası", + "#example": "örnek", + "Expand panel": "Genişletme paneli", + "Failed to": "Başaramadı", + "Failed to add tag %(tagName)s to room": "%(tagName) etiketi odaya eklenemedi", + "Failed to change settings": "Ayarlar değiştirilemedi", + "Failed to forget room %(errCode)s": "Odayı unutma başarısız oldu %(errCode)", + "Failed to update keywords": "Anahtar kelimeler güncellenemedi", + "Failed to get protocol list from Home Server": "Ana Sunucu'dan protokol listesi alınamadı", + "Failed to get public room list": "Genel odalar listesi alınamadı", + "Failed to join the room": "Odaya girilemedi", + "Failed to remove tag %(tagName)s from room": "Odadan %(tagName) etiketi kaldırılamadı", + "Failed to send report: ": "Rapor gönderilemedi: ", + "Failed to set direct chat tag": "Direkt sohbet etiketi ayarlanamadı", + "Failed to set Direct Message status of room": "Odanın Direkt Mesaj durumu ayarlanamadı", + "Favourite": "Favori", + "Fetching third party location failed": "Üçüncü parti konumunu çekemedi", + "Files": "Dosyalar", + "Filter room names": "Oda isimlerini filtrele", + "Forget": "Unut", + "Forward Message": "Mesajı İlet", + " from room": " Odadan", + "Guests can join": "Misafirler katılabilirler", + "Guest users can't invite users. Please register to invite.": "Misafir kullanıcılar kullanıcıları davet edemezler . Davet etmek için lütfen kayıt olun.", + "Hide panel": "Paneli gizle", + " (HTTP status %(httpStatus))": "(HTTP durumu &(httpStatus))", + "I understand the risks and wish to continue": "Riskleri anlıyorum ve devam etmek istiyorum", + "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Sorunları teşhis etmek için , bu istemciden kayıtlar hata raporu ile beraber gönderilecek . Yalnızca yukarıdaki metni göndermek isterseniz , lütfen işareti kaldırın:", + "Invite to this room": "Bu odaya davet et", + "Keywords": "Anahtar kelimeler", + "Leave": "Ayrıl", + "Login": "Oturum aç", + "Loading bug report module": "Hata raporlama modülü yükleniyor", + "Low Priority": "Düşük Öncelikli", + "Members": "Üyeler", + "Mentions only": "Sadece Mention'lar", + "Messages containing my display name": "İsmimi içeren mesajlar", + "Messages containing keywords": " anahtar kelimeleri içeren mesajlar", + "Messages containing my user name": "Kullanıcı ismimi içeren mesajlar", + "Messages in group chats": "Grup sohbetlerindeki mesajlar", + "Messages in one-to-one chats": "Bire bir sohbetlerdeki mesajlar", + "Messages sent by bot": "Bot tarafından gönderilen mesajlar", + "more": "Daha", + "Mute": "Sessiz", + "No rooms to show": "Gösterilecek oda yok", + "Noisy": "Gürültülü", + "Notification targets": "Bildirim hedefleri", + "Notifications": "Bildirimler", + "Notifications on the following keywords follow rules which can’t be displayed here:": "Aşağıdaki anahtar kelimeleri ile ilgili bildirimler burada gösterilemeyen kuralları takip eder:", + "Notify for all other messages/rooms": "Diğer tüm mesajlar / odalar için bildirim yapın", + "Notify me for anything else": "Başka herhangi bir şey için bana bildirim yap", + "Off": "Kapalı", + "On": "Açık", + "Operation failed": "Operasyon başarısız", + "Permalink": "Kalıcı Bağlantı(permalink)", + "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Lütfen hatayı tanımlayın. Ne yaptınız ? Ne gerçekleşmesini beklediniz ? Ne gerçekleşti ?", + "Please describe the bug and/or send logs.": "Lütfen hatayı tanımlayın ve/veya kayıtları gönderin.", + "Please install Chrome or Firefox for the best experience.": "Lütfen Chrome ya da Firefox 'u en iyi deneyim için yükleyin.", + "Please Register": "Lütfen Kaydolun", + "powered by Matrix": "Matrix tarafından desteklenmektedir", + "Quote": "Alıntı", + "Redact": "Yazıya Dökme", + "Reject": "Reddet", + "Remove %(name)s from the directory?": "%(name)'i dizinden kaldırılsın mı ?", + "Remove": "Kaldır", + "remove %(name)s from the directory.": "%(name)'i dizinden kaldır.", + "Remove from Directory": "Dizinden Kaldır", + "Report a bug": "Hata Bildir", + "Resend": "Yeniden Gönder", + "Riot Desktop on %(platformName)s": "%(platformName) platformunda Riot Masaüstü", + "Riot does not know how to join a room on this network": "Riot bu ağdaki bir odaya nasıl gireceğini bilmiyor", + "Riot is not supported on mobile web. Install the app?": "Riot mobil web'de desteklenmiyor . Uygulamayı yükle ?", + "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot geçerli tarayıcınızda mevcut olmayan veya denemelik olan birçok gelişmiş tarayıcı özelliği kullanıyor.", + "Room directory": "Oda dizini", + "Room not found": "Oda bulunamadı", + "Search": "Ara", + "Search…": "Arama…", + "Search for a room": "Oda ara", + "Send": "Gönder", + "Send logs": "Kayıtları gönder", + "Settings": "Ayarlar", + "Source URL": "Kaynak URL", + "Sorry, your browser is not able to run Riot.": "Üzgünüz , tarayıcınız Riot'u çalıştıramıyor .", + "Start chat": "Sohbet başlat", + "The Home Server may be too old to support third party networks": "Ana Sunucu 3. parti ağları desteklemek için çok eski olabilir", + "There are advanced notifications which are not shown here": "Burada gösterilmeyen gelişmiş bildirimler var", + "The server may be unavailable or overloaded": "Sunucu kullanılamıyor veya aşırı yüklenmiş olabilir", + "This Room": "Bu Oda", + "This room is inaccessible to guests. You may be able to join if you register.": "Bu odaya misafirler tarafından erişilemez . Kaydolursanız katılabilirsiniz.", + " to room": " odasına", + "Unable to fetch notification target list": "Bildirim hedef listesi çekilemedi", + "Unable to join network": "Ağa bağlanılamıyor", + "Unable to look up room ID from server": "Sunucudan oda ID'si aranamadı", + "Unavailable": "Kullanım dışı", + "Unhide Preview": "Önizlemeyi Göster", + "Unknown device": "Bilinmeyen aygıt", + "unknown error code": "Bilinmeyen hata kodu", + "Unnamed room": "İsimsiz oda", + "Update": "Güncelleştirme", + "Uploaded on %(date)s by %(user)s": "%(user) tarafında %(date) e yüklendi", + "Uploading report": "Rapor yükleniyor", + "View Decrypted Source": "Şifresi Çözülmüş(Decrypted) Kaynağı Görüntüle", + "View Source": "Kaynağı Görüntüle", + "What's New": "Yenilikler", + "What's new?": "Yeni olan ne ?", + "Waiting for response from server": "Sunucudan yanıt bekleniyor", + "When I'm invited to a room": "Bir odaya davet edildiğimde", + "World readable": "Okunabilir dünya", + "You cannot delete this image. (%(code)s)": "Bu resmi silemezsiniz. (%(code))", + "You cannot delete this message. (%(code)s)": "Bu mesajı silemezsiniz (%(code))", + "You are not receiving desktop notifications": "Masaüstü bildirimleri almıyorsunuz", + "You are Rioting as a guest. Register or sign in to access more rooms and features!": "Konuk olarak Riotluyorsunuz. Daha fazla odaya ve özelliğe erişmek için Kayıt Ol ya da Oturum Aç !", + "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Onları Riot dışında bir istemciden yapılandırmış olabilirsiniz . Onları Riot içersinide ayarlayamazsınız ama hala geçerlidirler", + "Sunday": "Pazar", + "Monday": "Pazartesi", + "Tuesday": "Salı", + "Wednesday": "Çarşamba", + "Thursday": "Perşembe", + "Friday": "Cuma", + "Saturday": "Cumartesi", + "Today": "Bugün", + "Yesterday": "Dün", + "OK": "Tamam", + "You need to be using HTTPS to place a screen-sharing call.": "Ekran paylaşımlı arama yapmak için HTTPS kullanıyor olmalısınız.", + "Welcome page": "Karşılama sayfası", + "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!": "Geçerli tarayıcınız ile birlikte , uygulamanın görünüş ve kullanım hissi tamamen hatalı olabilir ve bazı ya da tüm özellikler çalışmayabilir. Yine de denemek isterseniz devam edebilirsiniz ancak karşılaşabileceğiniz sorunlar karşısında kendi başınasınız !", + "Welcome to Riot.im": "Riot.im'e Hoş Geldiniz", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Dağıtık , şifreli sohbet & işbirliği ile Matrix tarafından desteklenmektedir", + "Search the room directory": "Oda dizinini ara", + "Chat with Riot Bot": "Riot Bot ile Sohbet Et", + "Get started with some tips from Riot Bot!": "Bazı Riot Bot ipuçları ile başlayın !", + "General discussion about Matrix and Riot": "Matrix ve Riot hakkında genel tartışma", + "Discussion of all things Matrix!": "Matrix'in tüm tartışması!", + "Riot/Web & Desktop chat": "Riot/Web & Masaüstü sohbet", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk sohbet", + "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk sohbet", + "Matrix technical discussions": "Matrix teknik tartışmalar", + "Running Matrix services": "Çalışan Matrix hizmetleri", + "Community-run support for Synapse": "Synapse için topluluk tarafından işlenen destek", + "Admin support for Dendrite": "Dendrite için Admin desteği", + "Announcements about Synapse releases": "Synapse sürümleri hakkında duyurular", + "Support for those using and running matrix-appservice-irc": "matrix-appservice-irc kullanan ve çalıştıran kullanıcılar için destek", + "Building services on Matrix": "Matrix üzerinde Yapı hizmetleri", + "Support for those using the Matrix spec": "Matrix teknik özelliklerini kullananlar için destek", + "Design and implementation of E2E in Matrix": "Matrix'te E2E ' nin Tasarım ve İmplementasyonu", + "Implementing VR services with Matrix": "Matrix'te VR hizmetlerini implement etmek", + "Implementing VoIP services with Matrix": "Matrix'te VoIP hizmetlerini implement etmek", + "Discussion of the Identity Service API": "Kimlik Hizmet API ( Identity Service API ) Tartışması", + "Support for those using, running and writing other bridges": "Diğer köprüleri kullanan , çalıştıran ve yazanlar için destek", + "Contributing code to Matrix and Riot": "Matrix ve Riot'a kod katkısı (contribution) sağla", + "Dev chat for the Riot/Web dev team": "Riot/Web Geliştirici takımı için Geliştirici sohbeti", + "Dev chat for the Dendrite dev team": "Dendrite Geliştirici Takımı için Geliştirici sohbeti", + "Co-ordination for Riot/Web translators": "Riot/Web çevirmenleri için koordinasyon", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix'te varolan ağlara (Slack , IRC , Gitter vb.) bağlı ya da bağımsız bir çok oda var . Dizini kontrol edin!", + "Failed to change password. Is your password correct?": "Şifre değiştirme başarısız oldu . Şifreniz doğru mu ?", + "You have successfully set a password!": "Başarıyla bir şifre ayarladınız!", + "You can now return to your account after signing out, and sign in on other devices.": "Şimdi oturumunuzu iptal ettikten sonra başka cihazda oturum açarak hesabınıza dönebilirsiniz.", + "Continue": "Devam", + "Please set a password!": "Lütfen bir şifre ayarlayın !", + "This will allow you to return to your account after signing out, and sign in on other devices.": "Bu oturumunuzu kapattıktan sonra hesabınıza dönmenizi ve diğer cihazlarda oturum açmanızı sağlar.", + "You have successfully set a password and an email address!": "Başarıyla bir şifre ve e-posta adresi ayarladın !", + "Remember, you can always set an email address in user settings if you change your mind.": "Unutmayın , fikrinizi değiştirirseniz her zaman bir şifre ve e-posta adresi ayarlayabilirsiniz." +} From 851f4d4a879c4f577f2bca10b3ce80744b7f1ac8 Mon Sep 17 00:00:00 2001 From: alxlg Date: Sun, 18 Jun 2017 08:02:29 +0000 Subject: [PATCH 043/202] Added translation using Weblate (Italian) --- src/i18n/strings/it.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/i18n/strings/it.json diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/i18n/strings/it.json @@ -0,0 +1 @@ +{} \ No newline at end of file From 93a6e03f70e444929d12596af37d79574cb6c4bb Mon Sep 17 00:00:00 2001 From: Przemek Anuszek Date: Sun, 18 Jun 2017 06:52:11 +0000 Subject: [PATCH 044/202] Translated using Weblate (Polish) Currently translated at 84.5% (169 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/pl/ --- src/i18n/strings/pl.json | 95 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 953aaa1f94..a60234c896 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -74,5 +74,98 @@ "Messages containing my user name": "Wiadomości zawierające mój użytkownik", "Messages in group chats": "Wiadomości w czatach grupowych", "Messages sent by bot": "Wiadomości wysłane przez robota", - "more": "więcej" + "more": "więcej", + "Enable desktop notifications": "Włącz powiadomienia", + "Guest users can't invite users. Please register to invite.": "Gość nie ma uprawnień dow wysyłania zaproszeń. Proszę się zarejestrować.", + " (HTTP status %(httpStatus))": "(status HTTP %(httpStatus))", + "Leave": "Opuść", + "Login": "Logowanie", + "Members": "Członkowie", + "Messages containing my display name": "Wiadomości zawierające moją nazwę", + "Direct Chat": "Rozmowa bezpośrednia", + "Mute": "Wycisz", + "No rooms to show": "Brak pokoi", + "Notifications": "Powiadomienia", + "Failed to set direct chat tag": "Nie udało się ustawić znacznika rozmów bezpośrednich", + "Failed to set Direct Message status of room": "Nie udało się ustawić statusu Rozmów Bezpośrednich dla pokoju", + "Notification targets": "Cele powiadomień", + "Operation failed": "Operacja nieudana", + "Permalink": "Odnośnik bezpośredni", + "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Proszę opisz błąd. Co zostało zrobione? Czego oczekiwałeś? A co właściwie nastąpiło?", + "Please describe the bug and/or send logs.": "Proszę opisz błąd i/lub wyślij logi.", + "Please install Chrome or Firefox for the best experience.": "Zainstaluj proszę Chrome lub Firefox.", + "Please Register": "Proszę się zarejestrować", + "Quote": "Cytat", + "Remove %(name)s from the directory?": "Usunąć %(name)s z katalogu?", + "Remove from Directory": "Usuń z Katalogu", + "Report a bug": "Raportuj błąd", + "Resend": "Wyślij powtórnie", + "Riot Desktop on %(platformName)s": "Riot Desktop na %(platformName)s", + "Riot does not know how to join a room on this network": "Riot nie wie jak dołączyć do pokoju w tej sieci", + "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot używa wiele zaawansowanych technologii przeglądarki, które nie są dostępne lub są eksperymentalne w Twojej obecnej przeglądarce.", + "Room not found": "Pokój nie znaleziony", + "Send logs": "Wyślij logi", + "Sorry, your browser is not able to run Riot.": "Przepraszamy, Twoja przeglądarka nie ma możliwości uruchomienia Riot.", + "Start chat": "Rozpocznij rozmowę", + "powered by Matrix": "wspierane przez Matrix", + "Redact": "Zredaguj", + "Reject": "Odrzuć", + "Remove": "Usuń", + "remove %(name)s from the directory.": "usuń %(name)s z katalogu.", + "The Home Server may be too old to support third party networks": "Home Server może być za stary dla innych sieci", + "There are advanced notifications which are not shown here": "Są dodatkowe powiadomienia nie pokazane tutaj", + "The server may be unavailable or overloaded": "Server jest nieosiągalny lub jest przeciążony", + "This Room": "Ten pokój", + "This room is inaccessible to guests. You may be able to join if you register.": "Ten pokój jest niedostępny dla gości. Może być po rejestracji.", + "Unable to join network": "Nie można dołączyć do sieci", + "Unable to look up room ID from server": "Nie można wyszukać ID pokoju na serwerze", + "Unavailable": "Niedostępny", + "Unhide Preview": "Odkryj podgląd", + "Unknown device": "Nieznane urządzenie", + "unknown error code": "nieznany kod błędu", + "Unnamed room": "Pokój bez nazwy", + "Update": "Uaktualnienie", + "Uploaded on %(date)s by %(user)s": "Wysłane %(date)s przez %(user)s", + "Uploading report": "Raport wysyłania", + "Messages in one-to-one chats": "Wiadomości w rozmowach jeden-do-jednego", + "Noisy": "Głośny", + "Notifications on the following keywords follow rules which can’t be displayed here:": "Powiadomienia słów kluczowych, które spełniają reguły nie są tutaj wyświetlone:", + "Notify for all other messages/rooms": "Powiadom we wszystkich wiadomościach/pokojach", + "Notify me for anything else": "Powiadom mnie o całej reszcie", + "Off": "Wyłącz", + "On": "Włącz", + "Source URL": "Źródłowy URL", + " to room": " do pokoju", + "Unable to fetch notification target list": "Nie można pobrać listy docelowej dla powiadomienia", + "View Decrypted Source": "Pokaż zdeszyfrowane źródło", + "View Source": "Pokaż źródło", + "What's New": "Co nowego", + "What's new?": "Co nowego?", + "Waiting for response from server": "Czekam na odpowiedź serwera", + "When I'm invited to a room": "Kiedy zostanę zaproszony do pokoju", + "World readable": "Całkowicie publiczne", + "You cannot delete this image. (%(code)s)": "Nie możesz usunąć tego obrazka. (%(code)s)", + "You cannot delete this message. (%(code)s)": "Nie możesz usunąć tej wiadomości. (%(code)s)", + "You are not receiving desktop notifications": "Nie otrzymujesz powiadomień na pulpit", + "You are Rioting as a guest. Register or sign in to access more rooms and features!": "You are Rioting jako gość. Zarejestruj się albo zaloguj się aby uzyskać dostęp do pokojów lub dodatkowych możliwości!", + "Sunday": "Niedziela", + "Monday": "Poniedziałek", + "Tuesday": "Wtorek", + "Wednesday": "Środa", + "Thursday": "Czwartek", + "Friday": "Piątek", + "Saturday": "Sobota", + "Today": "Dzisiaj", + "Yesterday": "Wczoraj", + "OK": "OK", + "You need to be using HTTPS to place a screen-sharing call.": "Musisz używać bezpiecznego protokołu HTTPS aby użyć połączenia współdzielenia ekranu.", + "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!": "Z Twoją obecną przeglądarką, wygląd oraz wrażenia z używania aplikacji mogą być niepoprawne, a niektóre funkcje wcale nie działać. Kontynuuj jeśli chcesz spróbować, jednak trudno będzie pomóc w przypadku błędów, które mogą nastąpić!", + "Welcome to Riot.im": "Witamy w Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Zdecentralizowany, szyfrowany czat & współpraca wspierana przez [matrix]", + "Search the room directory": "Wyszukaj katalog pokojów", + "Chat with Riot Bot": "Rozmowa z Botem Riota", + "Get started with some tips from Riot Bot!": "Rozpocznij z wskazówkami Riot Bota!", + "General discussion about Matrix and Riot": "Generalna rozmowa o Matrix i Riot", + "Discussion of all things Matrix!": "Rozmowa o wszystkim Matrixowym!", + "Matrix technical discussions": "Dyskusje techniczne Matrixa" } From 4d89e997b3639374cd55eb27c582d09d287815da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20=C5=81opaciuk?= Date: Sun, 18 Jun 2017 15:03:09 +0000 Subject: [PATCH 045/202] Translated using Weblate (Polish) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/pl/ --- src/i18n/strings/pl.json | 71 +++++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 20 deletions(-) diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index a60234c896..6a44b4ee9a 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -25,12 +25,12 @@ "Directory": "Księga adresowa", "Download this file": "Pobierz plik", "Welcome page": "Strona powitalna", - "Riot is not supported on mobile web. Install the app?": "Riot nie jest obsługiwany przez mobilną przeglądarkę internetową. Zainstaluj aplikację?", - "Room directory": "Katalog pokojowy", + "Riot is not supported on mobile web. Install the app?": "Riot nie jest obsługiwany przez przeglądarki mobilne. Zainstaluj aplikację?", + "Room directory": "Spis pokojów", "Search": "Szukaj", "Search…": "Szukaj…", "Search for a room": "Szukaj pokoju", - "Send": "Wysłać", + "Send": "Wyślij", "Settings": "Ustawienia", "Collapse panel": "Ukryj panel", "customServer_text": "Możesz używać opcji serwera niestandardowego do logowania się na inne serwery Matrix, określając inny adres URL serwera domowego.
Pozwala to na wykorzystanie Riot z istniejącym kontem Matrix na innym serwerze domowym.

Można również ustawić niestandardowy serwer tożsamości, ale nie będzie można zapraszać użytkowników adresem e-mail, ani być zaproszony przez adres e-mailowy.", @@ -70,10 +70,10 @@ "Keywords": "Słowa kluczowe", "Loading bug report module": "Ładowanie modułu raportu błędów", "Low Priority": "Niski priorytet", - "Messages containing keywords": "Wiadomości zawierające słowa kluczowe", - "Messages containing my user name": "Wiadomości zawierające mój użytkownik", + "Messages containing keywords": "Wiadomości zawierające słowa kluczowe", + "Messages containing my user name": "Wiadomości zawierające moją nazwę użytkownika", "Messages in group chats": "Wiadomości w czatach grupowych", - "Messages sent by bot": "Wiadomości wysłane przez robota", + "Messages sent by bot": "Wiadomości wysłane przez bota", "more": "więcej", "Enable desktop notifications": "Włącz powiadomienia", "Guest users can't invite users. Please register to invite.": "Gość nie ma uprawnień dow wysyłania zaproszeń. Proszę się zarejestrować.", @@ -81,31 +81,31 @@ "Leave": "Opuść", "Login": "Logowanie", "Members": "Członkowie", - "Messages containing my display name": "Wiadomości zawierające moją nazwę", + "Messages containing my display name": "Wiadomości zawierające moją wyświetlaną nazwę", "Direct Chat": "Rozmowa bezpośrednia", "Mute": "Wycisz", - "No rooms to show": "Brak pokoi", + "No rooms to show": "Brak pokoi do wyświetlenia", "Notifications": "Powiadomienia", "Failed to set direct chat tag": "Nie udało się ustawić znacznika rozmów bezpośrednich", "Failed to set Direct Message status of room": "Nie udało się ustawić statusu Rozmów Bezpośrednich dla pokoju", "Notification targets": "Cele powiadomień", "Operation failed": "Operacja nieudana", "Permalink": "Odnośnik bezpośredni", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Proszę opisz błąd. Co zostało zrobione? Czego oczekiwałeś? A co właściwie nastąpiło?", + "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Proszę opisz problem (w miarę możliwości po angielsku). Co doprowadziło do błędu? Jakie było Twoje oczekiwanie, a co stało się zamiast tego?", "Please describe the bug and/or send logs.": "Proszę opisz błąd i/lub wyślij logi.", "Please install Chrome or Firefox for the best experience.": "Zainstaluj proszę Chrome lub Firefox.", "Please Register": "Proszę się zarejestrować", "Quote": "Cytat", "Remove %(name)s from the directory?": "Usunąć %(name)s z katalogu?", - "Remove from Directory": "Usuń z Katalogu", - "Report a bug": "Raportuj błąd", + "Remove from Directory": "Usuń z katalogu", + "Report a bug": "Zgłoś błąd", "Resend": "Wyślij powtórnie", "Riot Desktop on %(platformName)s": "Riot Desktop na %(platformName)s", - "Riot does not know how to join a room on this network": "Riot nie wie jak dołączyć do pokoju w tej sieci", + "Riot does not know how to join a room on this network": "Riot nie wie, jak dołączyć do pokoju w tej sieci", "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot używa wiele zaawansowanych technologii przeglądarki, które nie są dostępne lub są eksperymentalne w Twojej obecnej przeglądarce.", "Room not found": "Pokój nie znaleziony", "Send logs": "Wyślij logi", - "Sorry, your browser is not able to run Riot.": "Przepraszamy, Twoja przeglądarka nie ma możliwości uruchomienia Riot.", + "Sorry, your browser is not able to run Riot.": "Przepraszamy, Twoja przeglądarka nie jest w stanie uruchomić Riot.", "Start chat": "Rozpocznij rozmowę", "powered by Matrix": "wspierane przez Matrix", "Redact": "Zredaguj", @@ -113,10 +113,10 @@ "Remove": "Usuń", "remove %(name)s from the directory.": "usuń %(name)s z katalogu.", "The Home Server may be too old to support third party networks": "Home Server może być za stary dla innych sieci", - "There are advanced notifications which are not shown here": "Są dodatkowe powiadomienia nie pokazane tutaj", - "The server may be unavailable or overloaded": "Server jest nieosiągalny lub jest przeciążony", + "There are advanced notifications which are not shown here": "Masz zaawansowane powiadomienia, nie pokazane tutaj", + "The server may be unavailable or overloaded": "Serwer jest nieosiągalny lub jest przeciążony", "This Room": "Ten pokój", - "This room is inaccessible to guests. You may be able to join if you register.": "Ten pokój jest niedostępny dla gości. Może być po rejestracji.", + "This room is inaccessible to guests. You may be able to join if you register.": "Ten pokój jest niedostępny dla gości. Możliwe, że będziesz mógł dołączyć po rejestracji.", "Unable to join network": "Nie można dołączyć do sieci", "Unable to look up room ID from server": "Nie można wyszukać ID pokoju na serwerze", "Unavailable": "Niedostępny", @@ -127,10 +127,10 @@ "Update": "Uaktualnienie", "Uploaded on %(date)s by %(user)s": "Wysłane %(date)s przez %(user)s", "Uploading report": "Raport wysyłania", - "Messages in one-to-one chats": "Wiadomości w rozmowach jeden-do-jednego", + "Messages in one-to-one chats": "Wiadomości w rozmowach jeden-na-jeden", "Noisy": "Głośny", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Powiadomienia słów kluczowych, które spełniają reguły nie są tutaj wyświetlone:", - "Notify for all other messages/rooms": "Powiadom we wszystkich wiadomościach/pokojach", + "Notifications on the following keywords follow rules which can’t be displayed here:": "Powiadomienia o słowach kluczowych spełniają reguły, które nie mogą być tu wyświetlone:", + "Notify for all other messages/rooms": "Powiadamiaj o wszystkich innych wiadomośsciach/pokojach", "Notify me for anything else": "Powiadom mnie o całej reszcie", "Off": "Wyłącz", "On": "Włącz", @@ -167,5 +167,36 @@ "Get started with some tips from Riot Bot!": "Rozpocznij z wskazówkami Riot Bota!", "General discussion about Matrix and Riot": "Generalna rozmowa o Matrix i Riot", "Discussion of all things Matrix!": "Rozmowa o wszystkim Matrixowym!", - "Matrix technical discussions": "Dyskusje techniczne Matrixa" + "Matrix technical discussions": "Dyskusje techniczne Matrixa", + "Fetching third party location failed": "Pobranie lokalizacji zewnętrznej nie powiodło się", + "Mentions only": "Tylko, gdy wymienieni", + "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", + "Riot/Web & Desktop chat": "Czat o Riot/Web i Desktop", + "Riot/iOS & matrix-ios-sdk chat": "Czat o Riot/iOS i matrix-ios-sdk", + "Riot/Android & matrix-android-sdk chat": "Czat o Riot/Android i matrix-android-sdk", + "Running Matrix services": "Utrzymywanie usług Matrix", + "Community-run support for Synapse": "Wsparcie społeczności dla Synapse", + "Admin support for Dendrite": "Wsparcie administratorskie dla Dendrite", + "Announcements about Synapse releases": "Ogłoszenia na temat Synapse", + "Support for those using and running matrix-appservice-irc": "Wsparcie dla hostujących i korzystających z matrix-appservice-irc", + "Building services on Matrix": "Tworzenie usług w oparciu o Matrix", + "Support for those using the Matrix spec": "Wsparcie dla używających specyfikacji Matrix", + "Design and implementation of E2E in Matrix": "Projektowanie i implementacja szyfrowania klient-klient (end-to-end) w Matrix", + "Implementing VR services with Matrix": "Implementowanie usług wirtualnej rzeczywistości w oparciu o Matrix", + "Implementing VoIP services with Matrix": "Implementowanie usług telefonii internetowej VoIP w oparciu o Matrix", + "Discussion of the Identity Service API": "Dyskusja na temat API Identity Service", + "Support for those using, running and writing other bridges": "Wsparcie dla używających, zapewniających i piszących inne mosty", + "Contributing code to Matrix and Riot": "Dokładanie kodu do Matrix lub Riot", + "Dev chat for the Riot/Web dev team": "Czat deweloperów zespołu Riot/Web", + "Dev chat for the Dendrite dev team": "Czat deweloperów zespołu Dendrite", + "Co-ordination for Riot/Web translators": "Koordynacja tłumaczy Riot/Web", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix ma wiele, już działających pokoi, połączonych z istniejącymi sieciami, takimi jak Slack, IRC lub Gitter, a także wiele zupełnie niezależnych. Możesz przejrzeć je wszystkie w spisie pokoi!", + "Failed to change password. Is your password correct?": "Zmiana hasła nie powiodła się. Czy Twoje hasło jest poprawne?", + "You have successfully set a password!": "Hasło zostało zmienione z powodzeniem!", + "You can now return to your account after signing out, and sign in on other devices.": "Teraz możesz powrócić do swojego konta na innych urządzeniach po wylogowaniu i ponownym zalogowaniu się.", + "Continue": "Kontynuuj", + "Please set a password!": "Proszę, ustaw hasło!", + "This will allow you to return to your account after signing out, and sign in on other devices.": "To pozwoli Ci powrócić do Twojego konta po wylogowaniu i ponownym zalogowaniu się na innych urządzeniach.", + "You have successfully set a password and an email address!": "Z powodzeniem ustawiono hasło i adres e-mail dla Twojego konta!", + "Remember, you can always set an email address in user settings if you change your mind.": "Pamiętaj, że zawsze możesz zmienić swój e-mail lub hasło w panelu ustawień użytkownika." } From 886475af7eaa1f73de988949f8499ce6b3db7e9e Mon Sep 17 00:00:00 2001 From: Pitchaya Boonsarngsuk Date: Sun, 18 Jun 2017 15:51:43 +0000 Subject: [PATCH 046/202] Translated using Weblate (Thai) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/th/ --- src/i18n/strings/th.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index c770dc3e43..976971c87e 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -197,5 +197,7 @@ "Discussion of the Identity Service API": "พูดคุยเกี่ยวกับ Identity Service API", "Decentralised, encrypted chat & collaboration powered by [matrix]": "ระบบแชทและประสานงาน ไร้ศูนย์กลางและเข้ารหัสได้ โดยใช้เทคโนโลยีจาก [matrix]", "General discussion about Matrix and Riot": "พูดคุยเรื่องทั่วไป ทั้ง Matrix และ Riot", - " (HTTP status %(httpStatus))": "(สถานะ HTTP %(httpStatus))" + " (HTTP status %(httpStatus))": "(สถานะ HTTP %(httpStatus))", + "Remember, you can always set an email address in user settings if you change your mind.": "อย่าลืม คุณสามารถตั้งที่อยู่อีเมลในการตั้งค่าผู้ใช้ได้ทุกเมื่อหากคุณเปลี่ยนใจ", + "You have successfully set a password and an email address!": "ตั้งรหัสผ่านและที่อยู่อีเมลสำเร็จแล้ว!" } From 7ae1a70a8d706f83c72c3eab5bda6d43bf3c4d1a Mon Sep 17 00:00:00 2001 From: zwindl Date: Sun, 18 Jun 2017 02:39:51 +0000 Subject: [PATCH 047/202] Translated using Weblate (Chinese (Simplified)) Currently translated at 16.0% (32 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/zh_Hans/ --- src/i18n/strings/zh_Hans.json | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index f76aa160dd..ca0a9ccda8 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -3,5 +3,32 @@ "Mute": "静音", "Notifications": "通知", "OK": "确定", - "Operation failed": "操作失败" + "Operation failed": "操作失败", + "%(appName)s via %(browserName)s on %(osName)s": "应用%(appName)通过%(osName)上的%(browserName)浏览器运行", + "Safari and Opera work too.": "SafariOpera均可运行。", + "A new version of Riot is available.": "Riot 有更新可用。", + "Add an email address above to configure email notifications": "请在上方输入电子邮件地址以接收邮件通知", + "Advanced notification settings": "通知高级设置", + "All messages": "全部消息", + "All messages (loud)": "全部消息(高亮)", + "All Rooms": "全部房间", + "All notifications are currently disabled for all targets.": "当前所有目标的通知均已禁用。", + "An error occurred whilst saving your email notification preferences.": "保存邮件通知偏好设定时出现错误。", + "Call invitation": "语音邀请", + "Cancel": "取消", + "Cancel Sending": "取消发送", + "Can't update user notification settings": "不能更新用户通知设置", + "Changelog": "变更日志", + "Collecting app version information": "正在收集应用版本信息", + "Collecting logs": "正在收集日志", + "Create new room": "创建新房间", + "Couldn't find a matching Matrix room": "未找到符合的 Matrix 房间", + "Custom Server Options": "自定义服务器选项", + "customServer_text": "你可以通过指定自定义服务器选项中的其他 Home server URL 来登录其他 Matrix 服务器。
该选项允许你在 Riot 上使用其他 Home server 上的帐号。

你也可以自定义身份验证服务器,但你将不能通过邮件邀请其他用户,同样的,你也不能通过邮件被其他用户邀请。", + "delete the alias.": "删除别名。", + "Delete the room alias %(alias)s and remove %(name)s from the directory?": "确定要删除房间别名 %(alias) 并将 %(name) 从列表中删除吗?", + "Describe your problem here.": "在这里描述你的问题。", + "Directory": "房间列表", + "Dismiss": "设为已读", + "Download this file": "下载该文件" } From 12dab61a6718739ef042413195d0ad340180bdc1 Mon Sep 17 00:00:00 2001 From: Raul Date: Sun, 18 Jun 2017 20:31:47 +0000 Subject: [PATCH 048/202] Translated using Weblate (Esperanto) Currently translated at 49.5% (99 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/eo/ --- src/i18n/strings/eo.json | 84 +++++++++++++++++++++++++++++++++------- 1 file changed, 70 insertions(+), 14 deletions(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 49ccc6e60f..36efee22c5 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -3,30 +3,30 @@ "All messages": "Ĉiuj mesaĝoj", "All messages (loud)": "Ĉiuj mesaĝoj (lauta)", "All Rooms": "Ĉiuj babilejoj", - "Cancel": "Nuligu", - "Create new room": "Kreu novan babilejon", - "delete the alias.": "Forviŝu la alinomon.", - "Describe your problem here.": "Priskribu vian problemon ĉi-tie.", + "Cancel": "Nuligi", + "Create new room": "Krei novan babilejon", + "delete the alias.": "Forviŝi la kromnomon.", + "Describe your problem here.": "Priskribi vian problemon ĉi tie.", "Direct Chat": "Rekta babilejo", "Directory": "Dosierujo", "Dismiss": "Eksigu", "Download this file": "Elŝutu ĉi-tiun dosieron", "#example": "#ekzemplo", "Files": "Dosieroj", - "Forget": "Forgesu", + "Forget": "Forgesi", " from room": " el babilejo", "Guests can join": "Gastoj povas aliĝi", "Guest users can't invite users. Please register to invite.": "Gasta uzantoj ne povas inviti uzantojn. Bonvolu registri por inviti.", - "I understand the risks and wish to continue": "Mi komprenas la riskoj kaj volas daŭrigi", - "Invite to this room": "Invitu al ĉi-tiun babilejon", + "I understand the risks and wish to continue": "Mi komprenas la riskonj kaj volas daŭrigi", + "Invite to this room": "Inviti en ĉi tiun babilejon", "Keywords": "Ŝlosilvortoj", - "Leave": "Lasu", + "Leave": "Foriri", "Low Priority": "Malalta prioritato", - "Messages containing my display name": "Mesaĝoj enhavantaj mia ekrano nomo", - "Messages containing keywords": "Mesaĝoj enhavantaj ŝlosilovortoj", - "Messages containing my user name": "Mesaĝoj enhavantaj mia uzantnomo", + "Messages containing my display name": "Mesaĝoj enhavantaj mian vidigan nomon", + "Messages containing keywords": "Mesaĝoj enhavantaj ŝlosilovortojn", + "Messages containing my user name": "Mesaĝoj enhavantaj mian uzantnomon", "Messages in group chats": "Mesaĝoj en grupaj babilejoj", - "Mute": "Silentigu", + "Mute": "Silentigi", "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Bonvolu priskribi la cimon. Kion vi faris? Kion vi atendis okazi? Kion fakte okazis?", "Please install Chrome or Firefox for the best experience.": "Bonvolu instali \"Chrome\"\"Firefox\" por la plej bona sperto.", "Please Register": "Bonvolu registri", @@ -40,6 +40,62 @@ "Search…": "Serĉu…", "Search for a room": "Serĉu por babilejon", "Send": "Sendu", - "Start chat": "Komencu babilo", - "This Room": "Ĉi-tiu Babilejo" + "Start chat": "Komenci babilo", + "This Room": "Ĉi-tiu Babilejo", + "Add an email address above to configure email notifications": "Aldonu retadreson supre por agordi retpoŝtajn sciigojn", + "Advanced notification settings": "Agordoj de sciigoj specialaj", + "Call invitation": "Invito al voko", + "All notifications are currently disabled for all targets.": "Ĉiuj sciigoj estas malvalidigitaj por ĉiu aparato.", + "An error occurred whilst saving your email notification preferences.": "Eraro okazis dum konservado de agordoj por retpoŝtaj sciigoj.", + "Cancel Sending": "Nuligi sendadon", + "Can't update user notification settings": "Ne eblas ĝisdatigi la agordojn de sciigoj al uzanto", + "Changelog": "Protokolo de ŝanĝoj", + "Close": "Fermi", + "Collapse panel": "Kaŝi panelon", + "Collecting app version information": "Kolektante informon pri versio de la aplikaĵo", + "Collecting logs": "Kolektante protokolon", + "Couldn't find a matching Matrix room": "Ne eblis trovi kongruantan ejon Matrix", + "Custom Server Options": "Opcioj pri personigo de servilo", + "customServer_text": "Vi povas uzi opciojn personigitajn de la servilo por ensaluti en aliajn servilojn Matrix specifante alian adreson URL-an de alia servilo Home.
Tio permesas al vi uzi Riot per ekzistanta konto en alia Home servilo.

Vi povas ankaŭ agordi servilon identecan personigita, sed ne eblos inviti uzantojn pere de retpoŝtadreso, aŭ esti invitita pere de retpoŝtadreso vi mem.", + "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Forviŝi la kromnomon de la ejo %(alias)s and forigi %(name)s el la dosierujo?", + "Enable audible notifications in web client": "Ebligi aŭdeblajn sciigojn en la retkliento", + "Enable desktop notifications": "Ebligi labortablajn sciigojn", + "Enable email notifications": "Ebligi retpoŝtajn sciigojn", + "Enable notifications for this account": "Ebligi sciigojn por tiu ĉi konto", + "Enable them now": "Ebligi ilin nun", + "Enter keywords separated by a comma:": "Entajpi ŝlosilvortojn apartigitaj per komoj:", + "Error": "Eraro", + "Error saving email notification preferences": "Eraro konservante agordojn pri retpoŝtaj sciigoj", + "Expand panel": "Pli grandigi panelon", + "Failed to": "Malsukcesis", + "Failed to add tag %(tagName)s to room": "Malsukcesis aldoni etikedon %(tagName)s al la ejo", + "Failed to change settings": "Malsukcesis ŝanĝi la agordojn", + "Failed to forget room %(errCode)s": "Malsukcesis forgesi la ejon %(errCode)s", + "Failed to update keywords": "Malsukcesis ĝisdatigi la ŝlosilvortojn", + "Failed to get protocol list from Home Server": "Malsukcesis obteni la liston de protokoloj por la servilo Home", + "Failed to get public room list": "Malsukcesis obteni la liston de publikaj ejoj", + "Failed to join the room": "Malsukcesis aliĝi al la ejo", + "Failed to remove tag %(tagName)s from room": "Malsukcesis forigi la etikedon %(tagName)s el la ejo", + "Failed to send report: ": "Malsukcesis sendi raporton: ", + "Failed to set direct chat tag": "Malsukcesis agordi la etikedon de rekta babilejo", + "Failed to set Direct Message status of room": "Malsukcesis agordi la staton de Rekta Mesaĝo de la ejo", + "Forward Message": "Plusendi mesaĝon", + "Hide panel": "Kaŝi panelon", + " (HTTP status %(httpStatus))": "(stato HTTP %(httpStatus))", + "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Por diagnozi problemojn, protokoloj el tiu ĉi kliento sendiĝos kune kun tiu ĉi raporto de eraro. Se vi preferas sendi nur la supran tekston, bonvolu malŝalti:", + "Login": "Ensaluti", + "Loading bug report module": "Ŝarĝante modulon pri eraroraporto", + "Members": "Membroj", + "Mentions only": "Nur mencioj", + "Messages in one-to-one chats": "Mesaĝoj en unu-je-unu babilejoj", + "Messages sent by bot": "Mesaĝoj sendita per roboto", + "more": "pli", + "No rooms to show": "Neniu ejo por montri", + "Noisy": "Brua", + "Notification targets": "Celo de sciigoj", + "Notifications": "Sciigoj", + "Notifications on the following keywords follow rules which can’t be displayed here:": "La sciigoj de la sekvaj ŝlosilvortoj sekvas regulojn kiuj ne povas esti montrataj ĉi tie:", + "Notify for all other messages/rooms": "Sciigu min por ĉiu alia babilejo", + "Notify me for anything else": "Sciigu min por ĉio alia", + "Off": "Malŝaltita" } From 0635a344ae99730a09c57bffc6bf1905aa26b23f Mon Sep 17 00:00:00 2001 From: Aviral Dasgupta Date: Sun, 18 Jun 2017 14:49:19 +0000 Subject: [PATCH 049/202] Translated using Weblate (Hindi) Currently translated at 3.0% (6 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/hi/ --- src/i18n/strings/hi.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hi.json b/src/i18n/strings/hi.json index 9e26dfeeb6..f8bfb088a8 100644 --- a/src/i18n/strings/hi.json +++ b/src/i18n/strings/hi.json @@ -1 +1,8 @@ -{} \ No newline at end of file +{ + "A new version of Riot is available.": "रायट के एक नया वर्शन उपलब्ध है।", + "All messages": "सारे संदेश", + "All Rooms": "सारे कमरे", + "Please set a password!": "कृपया एक पासवर्ड सेट करें!", + "Continue": "आगे बढ़ें", + "You have successfully set a password and an email address!": "आपने सफलतापूर्वक एक पासवर्ड और एक ईमेल एड्रेस सेट कर लिया है!" +} From ad57dd316902e5eb0405a52fa65817b9abc6553d Mon Sep 17 00:00:00 2001 From: alxlg Date: Sun, 18 Jun 2017 08:45:11 +0000 Subject: [PATCH 050/202] Translated using Weblate (Italian) Currently translated at 31.5% (63 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/it/ --- src/i18n/strings/it.json | 66 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 9e26dfeeb6..8dcc298406 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -1 +1,65 @@ -{} \ No newline at end of file +{ + "Safari and Opera work too.": "Anche Safari e Opera funzionano.", + "A new version of Riot is available.": "È disponibile una nuova versione di Riot.", + "Add an email address above to configure email notifications": "Specifica un indirizzo email per configurazione le notifiche via email", + "Advanced notification settings": "Impostazioni notifiche avanzate", + "All messages": "Tutti i messaggi", + "All messages (loud)": "Tutti i messaggi (rumoroso)", + "All Rooms": "Tutte le stanze", + "An error occurred whilst saving your email notification preferences.": "È avvenuto un errore durante il salvataggio delle tue preferenze sulle notifiche email.", + "Call invitation": "Invito ad una chiamata", + "Cancel": "Annulla", + "Cancel Sending": "Annulla invio", + "Can't update user notification settings": "Impossibile aggiornare le impostazioni di notifica dell'utente", + "Changelog": "Cambiamenti", + "Close": "Chiudi", + "Collapse panel": "Riduci pannello", + "Collecting app version information": "Raccolta delle informazioni sulla versione dell'applicazione", + "Collecting logs": "Raccolta del registro", + "Create new room": "Crea una nuova stanza", + "Couldn't find a matching Matrix room": "Impossibile trovare una stanza Matrix corrispondente", + "Custom Server Options": "Opzioni server personale", + "customServer_text": "Puoi utilizzare un server personale per entrare in altri server Matrix specificando un diverso indirizzo per il server Home.
Questo ti permetterà di usare Riot con un account Matrix già esistente su un altro server.

Puoi anche specificare un diverso server di identità ma non sarai in grado di invitare utenti o di essere invitato tramite indirizzo email.", + "delete the alias.": "Elimina gli alias.", + "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Eliminare l'alias %(alias)s e rimuovere %(name)s dalla lista?", + "Describe your problem here.": "Descrivi qui il tuo problema.", + "Direct Chat": "Chat diretta", + "Directory": "Lista", + "Dismiss": "Scarta", + "Download this file": "Scarica questo file", + "Enable audible notifications in web client": "Abilita notifiche audio nel client Web", + "Enable desktop notifications": "Abilita le notifiche desktop", + "Enable email notifications": "Abilita le notifiche email", + "Enable notifications for this account": "Abilita le notifiche per questo account", + "Enable them now": "Abilitale adesso", + "Enter keywords separated by a comma:": "Inserisci le parole chiave separate da virgole:", + "Error": "Errore", + "Error saving email notification preferences": "Errore nel salvataggio delle preferenze di notifica email", + "#example": "#esempio", + "Expand panel": "Espandi il pannello", + "Failed to": "Non si è riuscito a", + "Failed to add tag %(tagName)s to room": "Non si è riuscito ad aggiungere l'etichetta %(tagName)s alla stanza", + "Failed to change settings": "Non si è riuscito ad aggiornare le impostazioni", + "Failed to update keywords": "Non si è riuscito ad aggiornare le parole chiave", + "Failed to get protocol list from Home Server": "Non si è riuscito ad ottenere la lista protocollo dal server Home", + "Failed to get public room list": "Non si è riuscito ad ottenere la lista delle stanze pubbliche", + "Failed to join the room": "Non si è riuscito a entrare nella stanza", + "Failed to remove tag %(tagName)s from room": "Non si è riuscito a rimuovere il tag %(tagName)s dalla stanza", + "Failed to send report: ": "Non si è riuscito ad inviare il resoconto: ", + "Failed to set direct chat tag": "Non si è riuscito a impostare l'etichetta di chat diretta", + "Failed to set Direct Message status of room": "Non si è riuscito ad impostare lo stato di Messaggio Diretto alla stanza", + "Favourite": "Preferito", + "Files": "File", + "Filter room names": "Filtra i nomi delle stanze", + "Forget": "Dimentica", + "Forward Message": "Inoltra messaggio", + " from room": " dalla stanza", + "Guests can join": "Gli ospiti sono ammessi", + "Guest users can't invite users. Please register to invite.": "Gli utenti ospite non possono invitare altri utenti. Registrati per invitare.", + "Hide panel": "Nascondi pannello", + "I understand the risks and wish to continue": "Sono consapevole dei rischi e vorrei continuare", + "Invite to this room": "Invita a entrare in questa stanza", + "Keywords": "Parole chiave", + "Leave": "Abbandona", + "Login": "Entra" +} From 5cc1f62839711292f825eccf44f6a30de42825d1 Mon Sep 17 00:00:00 2001 From: IMIN <2reeseenmin@gmail.com> Date: Sun, 18 Jun 2017 06:00:03 +0000 Subject: [PATCH 051/202] Translated using Weblate (Korean) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ko/ --- src/i18n/strings/ko.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index 95c100b4a8..e0d1b40e5e 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -54,7 +54,7 @@ "Please Register": "계정을 등록해주세요", "powered by Matrix": "매트릭스의 지원을 받고 있어요", "Quote": "인용하기", - "Redact": "수정", + "Redact": "지우기", "Reject": "거절하기", "Remove %(name)s from the directory?": "목록에서 %(name)s을 지우시겠어요?", "Remove": "지우기", @@ -141,7 +141,7 @@ "Messages in group chats": "이야기 모임의 메시지", "Messages in one-to-one chats": "1:1 이야기의 메시지", "Messages sent by bot": "봇이 보낸 메시지", - "Noisy": "크게", + "Noisy": "소리", "Notifications on the following keywords follow rules which can’t be displayed here:": "여기 표시될 수 없는 규칙에 따라 다음 키워드는 알리지 않아요:", "Notify for all other messages/rooms": "다른 모든 메시지/방 알리기", "Notify me for anything else": "모든 걸 알리기", From 9a203aab672532ad9c5f9959cb3556325d872f69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20=C5=81opaciuk?= Date: Sun, 18 Jun 2017 19:06:05 +0000 Subject: [PATCH 052/202] Translated using Weblate (Polish) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/pl/ --- src/i18n/strings/pl.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 6a44b4ee9a..ee68ad0a00 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -99,15 +99,15 @@ "Remove %(name)s from the directory?": "Usunąć %(name)s z katalogu?", "Remove from Directory": "Usuń z katalogu", "Report a bug": "Zgłoś błąd", - "Resend": "Wyślij powtórnie", + "Resend": "Wyślij jeszcze raz", "Riot Desktop on %(platformName)s": "Riot Desktop na %(platformName)s", "Riot does not know how to join a room on this network": "Riot nie wie, jak dołączyć do pokoju w tej sieci", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot używa wiele zaawansowanych technologii przeglądarki, które nie są dostępne lub są eksperymentalne w Twojej obecnej przeglądarce.", + "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot używa wiele zaawansowanych technologii, które nie są dostępne lub są w fazie testów w Twojej przeglądarce.", "Room not found": "Pokój nie znaleziony", "Send logs": "Wyślij logi", "Sorry, your browser is not able to run Riot.": "Przepraszamy, Twoja przeglądarka nie jest w stanie uruchomić Riot.", "Start chat": "Rozpocznij rozmowę", - "powered by Matrix": "wspierane przez Matrix", + "powered by Matrix": "zbudowane na Matrix", "Redact": "Zredaguj", "Reject": "Odrzuć", "Remove": "Usuń", @@ -136,7 +136,7 @@ "On": "Włącz", "Source URL": "Źródłowy URL", " to room": " do pokoju", - "Unable to fetch notification target list": "Nie można pobrać listy docelowej dla powiadomienia", + "Unable to fetch notification target list": "Nie można pobrać listy docelowej dla powiadomień", "View Decrypted Source": "Pokaż zdeszyfrowane źródło", "View Source": "Pokaż źródło", "What's New": "Co nowego", From 2b3ec5585025ffb51c1cf5a35a723f7563ff9595 Mon Sep 17 00:00:00 2001 From: GrigRUSS Date: Fri, 16 Jun 2017 20:29:44 +0000 Subject: [PATCH 053/202] Translated using Weblate (Russian) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ru/ --- src/i18n/strings/ru.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index c3fa070ffc..8c5ef574e4 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -119,7 +119,7 @@ "Advanced notification settings": "Настройки уведомлений", "Call invitation": "Пригласительный звонок", "customServer_text": "Вы можете войти с помощью вашего сервера.
Это позволяет вам использовать Riot с уже существующей учетной записью на другом сервере.

Вы также можете задать свой сервер идентификации, но тогда вы не можете приглашать пользователей с помощью email-адреса и не можете быть приглашены по нему.", - "Messages containing my display name": "Сообщения, содержащие мое отображаемое имя", + "Messages containing my display name": "Сообщения, содержащие мое имя", "Messages containing my user name": "Сообщение, содержащие мое имя пользователя", "Messages in group chats": "Сообщения в групповых чатах", "Messages in one-to-one chats": "Сообщения в приватных чатах", @@ -164,7 +164,7 @@ "What's New": "Что нового", "What's new?": "Что нового?", "Waiting for response from server": "Подождите ответа от сервера", - "You are Rioting as a guest. Register or sign in to access more rooms and features!": "Вы пользуетесь Riot как гость. Зарегистрируйтесь или войдите в систему и получите доступ к огромному количеству комнат и функций!", + "You are Rioting as a guest. Register or sign in to access more rooms and features!": "Вы вошли в Riot как гость. Зарегистрируйтесь или войдите в систему и получите доступ к огромному количеству комнат и функций!", "OK": "ОК", "You need to be using HTTPS to place a screen-sharing call.": "Вы должны пользоваться HTTPS чтобы пользоваться видео звонком.", "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!": "Если Ваш браузер не корректно отображает информацию и все или некоторые функции отключены, Вы можете и дальше этим браузером пользоваться но ваши проблемы останутся с вами!", From 8bc2b4a122ce98be06047d73545dcdd8d1b65875 Mon Sep 17 00:00:00 2001 From: "Carlos A. Carnero Delgado" Date: Sun, 18 Jun 2017 01:04:59 +0000 Subject: [PATCH 054/202] Translated using Weblate (Spanish) Currently translated at 74.5% (149 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/es/ --- src/i18n/strings/es.json | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 84007782c1..fe9a18c768 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -119,5 +119,33 @@ "Failed to change password. Is your password correct?": "Falló al cambiar la clave, ¿Está correcta tu clave?", "Safari and Opera work too.": "Safari y Opera también funcionan.", "A new version of Riot is available.": "Una nueva versión de Riot está disponible.", - "Cancel": "Cancelar" + "Cancel": "Cancelar", + "Describe your problem here.": "Describa su problema aquí.", + "Forward Message": "Reenviar mensaje", + "Hide panel": "Ocultar panel", + " (HTTP status %(httpStatus))": "(estado HTTP %(httpStatus))", + "I understand the risks and wish to continue": "Entiendo los riesgos y deseo continuar", + "Changelog": "Bitácora de cambios", + "Collapse panel": "Colapsar panel", + "Remember, you can always set an email address in user settings if you change your mind.": "Recuerde que, si es necesario, puede establecer una dirección de email en las preferencias de usuario.", + "All Rooms": "Todas las salas", + "Expand panel": "Expandir panel", + "Failed to": "Falló", + "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para diagnosticar los problemas, las trazas de este cliente serán enviadas adjuntas a este informe de defecto. Si quisiera enviar el texto anterior solamente, entonces desmarque:", + "Login": "Abrir sesión", + "Report a bug": "Informe un defecto", + "Search…": "Buscar…", + "Send": "Enviar", + "Send logs": "Enviar trazas", + "Sorry, your browser is not able to run Riot.": "¡Lo sentimos! Su navegador no puede ejecutar Riot.", + "This Room": "Esta sala", + "Unavailable": "No disponible", + "Unknown device": "Dispositivo desconocido", + "Update": "Actualizar", + "Uploading report": "Enviando informe", + "What's New": "Lo que hay de nuevo", + "What's new?": "¿Qué hay de nuevo?", + "Waiting for response from server": "Esperando una respuesta del servidor", + "You have successfully set a password and an email address!": "¡Ha establecido exitosamente la contraseña y la dirección de email!", + "You have successfully set a password!": "¡Ha establecido exitosamente una contraseña!" } From 6ace710a6506609e8fd516751af1960ef21f520f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Magr=C3=AD?= Date: Sun, 18 Jun 2017 22:41:39 +0000 Subject: [PATCH 055/202] Translated using Weblate (Spanish) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/es/ --- src/i18n/strings/es.json | 53 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index fe9a18c768..97a6da536e 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -147,5 +147,56 @@ "What's new?": "¿Qué hay de nuevo?", "Waiting for response from server": "Esperando una respuesta del servidor", "You have successfully set a password and an email address!": "¡Ha establecido exitosamente la contraseña y la dirección de email!", - "You have successfully set a password!": "¡Ha establecido exitosamente una contraseña!" + "You have successfully set a password!": "¡Ha establecido exitosamente una contraseña!", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s en %(osName)s", + "All messages (loud)": "Todos los mensajes (ruidoso)", + "All notifications are currently disabled for all targets.": "Las notificaciones estan desactivadas en todos los objetivos.", + "Collecting app version information": "Recolectando información de la versión de la aplicación", + "Collecting logs": "Recolectando registros", + "Dismiss": "Omitir", + "Failed to send report: ": "Error al enviar reporte: ", + "Loading bug report module": "Cargando módulo de reporte de errores", + "Messages containing keywords": "Mensajes que contienen palabras clave", + "Notify for all other messages/rooms": "Notificar para todos los demás mensajes/salas", + "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor describa el error. Qué acción ejecutó? Cuál era el resultado que esperaba? Que pasó realmente?", + "Please describe the bug and/or send logs.": "Por favor describa el error y/o envíe los registros.", + "Please install Chrome or Firefox for the best experience.": "Por favor instale Google Chrome o Mozilla Firefox para una mejor experiencia.", + "powered by Matrix": "con el poder de Matrix", + "Riot Desktop on %(platformName)s": "Riot Desktop en %(platformName)s", + "Riot is not supported on mobile web. Install the app?": "Riot no está soportado en navegadores Web móviles. Quieres instalar la aplicación?", + "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot usa muchas características avanzadas del navegador, algunas de las cuales no están disponibles en su navegador actual.", + "You are Rioting as a guest. Register or sign in to access more rooms and features!": "Está usando Riot como invitado. ¡Regístrese o inicie sesión para acceder más salas y características!", + "You need to be using HTTPS to place a screen-sharing call.": "Debes usar HTTPS para hacer una llamada con pantalla compartida.", + "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!": "En su navegador actual, la apariencia de la aplicación puede ser completamente incorrecta, y algunas de las características podrían no funcionar. Si aún desea probarlo puede continuar, pero ¡no podremos ofrecer soporte por cualquier problema que pudiese tener!", + "Welcome to Riot.im": "Bienvenido a Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones & colaboración cifradas y descentralizadas con el poder de [matrix]", + "Search the room directory": "Buscar en el directorio de salas", + "Chat with Riot Bot": "Conversar con el Bot de Riot", + "Get started with some tips from Riot Bot!": "¡Comenzar con algunos tips de Riot Bot!", + "General discussion about Matrix and Riot": "Discusión general sobre Matrix y Riot", + "Discussion of all things Matrix!": "¡Discusión sobre todas las cosas de Matrix!", + "Riot/Web & Desktop chat": "Conversaciones de Riot/Web & Desktop", + "Riot/iOS & matrix-ios-sdk chat": "Conversaciones sobre Riot/iOS & matrix-ios-sdk", + "Riot/Android & matrix-android-sdk chat": "Conversaciones sobre Riot/Android & matrix-android-sdk", + "Matrix technical discussions": "Discusiones técnicas sobre Matrix", + "Running Matrix services": "Ejecutando servicios de Matrix", + "Community-run support for Synapse": "Soporte comunitario de Synapse", + "Admin support for Dendrite": "Soporte administrativo para Dendrite", + "Announcements about Synapse releases": "Anuncios de lanzamientos de Synapse", + "Support for those using and running matrix-appservice-irc": "Soporte para aquellos que usan o administran matrix-appservice-irc", + "Building services on Matrix": "Construyendo servicios con Matrix", + "Support for those using the Matrix spec": "Soporte para usuarios de la especificación de Matrix", + "Design and implementation of E2E in Matrix": "Diseño e implementación de E2E en Matrix", + "Implementing VR services with Matrix": "Implementación de servicios VR con Matrix", + "Implementing VoIP services with Matrix": "Implementación de servicios VoIP con Matrix", + "Discussion of the Identity Service API": "Discusión sobre el API de Identity Service", + "Support for those using, running and writing other bridges": "Soporte para usuarios, administradores y desarrolladores de otros puentes", + "Contributing code to Matrix and Riot": "Contribuciones de código para Matrix y Riot", + "Dev chat for the Riot/Web dev team": "Conversaciones del equipo de desarrollo de Riot/Web", + "Dev chat for the Dendrite dev team": "Conversaciones del equipo de desarrollo de Dendrite", + "Co-ordination for Riot/Web translators": "Coordinación para traductores de Riot/Web", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Muchas salas ya están disponibles en Matrix, enlazadas a redes existentes (Slack, IRC, Gitter, etc) o independientes. ¡Revisa el directorio!", + "You can now return to your account after signing out, and sign in on other devices.": "Ahora puedes regresar a tu cuenta después de cerrar tu sesión, e iniciar sesión en otros dispositivos.", + "Please set a password!": "¡Por favor establece una contraseña!", + "This will allow you to return to your account after signing out, and sign in on other devices.": "Esto le permitirá regresar a su cuenta después de cerrar sesión, así como iniciar sesión en otros dispositivos." } From a4abccdcefb62910162c63e3b454fbdc07362682 Mon Sep 17 00:00:00 2001 From: Raul Date: Sun, 18 Jun 2017 22:40:22 +0000 Subject: [PATCH 056/202] Translated using Weblate (Esperanto) Currently translated at 83.0% (166 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/eo/ --- src/i18n/strings/eo.json | 89 +++++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 11 deletions(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 36efee22c5..4a50ff5609 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -32,16 +32,16 @@ "Please Register": "Bonvolu registri", "powered by Matrix": "funkciigata de \"Matrix\"", "Quote": "Citu", - "Reject": "Malakceptu", - "Resend": "Resendu", - "Room directory": "Babilejo dosierujo", - "Room not found": "Babilejon ne trovis", - "Search": "Serĉu", - "Search…": "Serĉu…", - "Search for a room": "Serĉu por babilejon", - "Send": "Sendu", - "Start chat": "Komenci babilo", - "This Room": "Ĉi-tiu Babilejo", + "Reject": "Malakcepti", + "Resend": "Resendi", + "Room directory": "Babileja dosierujo", + "Room not found": "Babilejo ne trovita", + "Search": "Serĉi", + "Search…": "Serĉi…", + "Search for a room": "Serĉi babilejon", + "Send": "Sendi", + "Start chat": "Komenci babiladon", + "This Room": "Ĉi tiu Babilejo", "Add an email address above to configure email notifications": "Aldonu retadreson supre por agordi retpoŝtajn sciigojn", "Advanced notification settings": "Agordoj de sciigoj specialaj", "Call invitation": "Invito al voko", @@ -97,5 +97,72 @@ "Notifications on the following keywords follow rules which can’t be displayed here:": "La sciigoj de la sekvaj ŝlosilvortoj sekvas regulojn kiuj ne povas esti montrataj ĉi tie:", "Notify for all other messages/rooms": "Sciigu min por ĉiu alia babilejo", "Notify me for anything else": "Sciigu min por ĉio alia", - "Off": "Malŝaltita" + "Off": "Malŝaltita", + "On": "Ŝaltita", + "Operation failed": "La operacio malsukcesis", + "Permalink": "Konstanta ligilo", + "Please describe the bug and/or send logs.": "Bonvolu priskribi la cimon kaj/aŭ sendi protokolojn.", + "Redact": "Redakti", + "Remove %(name)s from the directory?": "Forigi %(name)s el la dosierujo?", + "Remove": "Forigi", + "remove %(name)s from the directory.": "forigi %(name)s el la dosierujo.", + "Remove from Directory": "Forigi el Dosierujo", + "Report a bug": "Raporti cimon", + "Riot Desktop on %(platformName)s": "Riot Labortablo sur %(platformName)s", + "Riot does not know how to join a room on this network": "Riot ne scias kiel aliĝi al ejo en tiu ĉi reto", + "Riot is not supported on mobile web. Install the app?": "Riot ne estas subtenita je mobile web. Instali la aplikaĵon?", + "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uzas multajn specialajn trajtojn, kelkaj ne estas disponeblaj aŭ estas eksperimentaj en via nuna retumilo.", + "Send logs": "Sendi protokolojn", + "Settings": "Agordoj", + "Source URL": "Fonta URL", + "Sorry, your browser is not able to run Riot.": "Pardonu, via retumilo ne kapablas funkciigi Riot.", + "The Home Server may be too old to support third party networks": "La servilo Home povas esti tro malnova por subteni retoj de ekstera liveranto", + "There are advanced notifications which are not shown here": "Estas specialaj sciigoj kiuj ne estas montritaj ĉi tie", + "The server may be unavailable or overloaded": "La servilo povas esti maldisponebla aŭ tro ŝarĝita", + "This room is inaccessible to guests. You may be able to join if you register.": "Ci tiu ejo estas neenirebla por gastoj. Vi povus aliĝi se vi registriĝas.", + " to room": " al ejo", + "Unable to fetch notification target list": "Ne eblis obteni la liston de celoj por sciigoj", + "Unable to join network": "Ne eblis kuniĝi kun la reto", + "Unable to look up room ID from server": "Ne eblis trovi la identigon el la servilo", + "Unavailable": "Maldisponebla", + "Unhide Preview": "Malkaŝi antaŭrigardon", + "Unknown device": "Nekonata aparato", + "unknown error code": "kodo de nekonata eraro", + "Unnamed room": "Nekonata ejo", + "Update": "Ĝisdatigi", + "Uploaded on %(date)s by %(user)s": "Alŝutita je %(date)s per %(user)s", + "Uploading report": "Alŝutante raporton", + "View Decrypted Source": "Vidi malĉifritan fonton", + "View Source": "Vidi fonton", + "What's New": "Kio novas", + "What's new?": "Kio novas?", + "Waiting for response from server": "Atendante respondon el la servilo", + "When I'm invited to a room": "Kiam mi estas invitita en ejon", + "World readable": "Legebla tutmonde", + "You cannot delete this image. (%(code)s)": "Vi ne povas forviŝi tiun ĉi bildon. (%(code)s)", + "You cannot delete this message. (%(code)s)": "Vi ne povas forviŝi tiun ĉi mesaĝon. (%(code)s)", + "You are not receiving desktop notifications": "Vi ne estas ricevante sciigojn labortablan", + "You are Rioting as a guest. Register or sign in to access more rooms and features!": "Vi uzas Riot kiel gasto. Registriĝuensalutu por atingi pli da ejoj kaj funkcioj!", + "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 kliento kiu ne estis Riot. Vi ne povas agordi ilin en Riot sed ili ankoraŭ validas", + "Sunday": "Dimanĉo", + "Monday": "Lundo", + "Tuesday": "Mardo", + "Wednesday": "Merkredo", + "Thursday": "Ĵaŭdo", + "Friday": "Vendredo", + "Saturday": "Sabato", + "Today": "Hodiaŭ", + "Yesterday": "Hieraŭ", + "OK": "Bone", + "You need to be using HTTPS to place a screen-sharing call.": "Vi devas uzi HTTPS por starigi ekranan vokon.", + "Welcome page": "Paĝo de bonveno", + "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!": "Kun via nuna retumilo, la aspekto kaj funkciado de la aplikaĵo povas esti tute malĝusta, kaj kelkaj aŭ ĉiu funkcioj eble ne funkcios. Se vi volas provi ĉiuokaze vi rajtas daŭrigi, sed ne estos subteno se vi trafas problemojn!", + "Welcome to Riot.im": "Bonvenon al Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Malcentra, ĉifrita babilejo & kunlaboro povigita de [matrix]", + "Search the room directory": "Serĉi la ejan dosierujon", + "Chat with Riot Bot": "Babili kun la roboto Riot Bot", + "Get started with some tips from Riot Bot!": "Eki per sugesto de la roboto Riot Bot!", + "General discussion about Matrix and Riot": "Ĝenerala diskutado pri Matrix kaj Riot", + "Discussion of all things Matrix!": "Diskutado pri ĉio rilate al Matrix!", + "Riot/Web & Desktop chat": "Diskudato labortabla pri Riot/Web" } From 0e00f708f10df5be47ca9d6891012366d0538ace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20=C5=81opaciuk?= Date: Sun, 18 Jun 2017 22:38:54 +0000 Subject: [PATCH 057/202] Translated using Weblate (Polish) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/pl/ --- src/i18n/strings/pl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index ee68ad0a00..4ca24868bc 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -112,7 +112,7 @@ "Reject": "Odrzuć", "Remove": "Usuń", "remove %(name)s from the directory.": "usuń %(name)s z katalogu.", - "The Home Server may be too old to support third party networks": "Home Server może być za stary dla innych sieci", + "The Home Server may be too old to support third party networks": "Serwer domowy może być za stary dla innych sieci", "There are advanced notifications which are not shown here": "Masz zaawansowane powiadomienia, nie pokazane tutaj", "The server may be unavailable or overloaded": "Serwer jest nieosiągalny lub jest przeciążony", "This Room": "Ten pokój", From f9ef5e84988a844c7d8cc3875dac7a065cf261df Mon Sep 17 00:00:00 2001 From: Raul Date: Sun, 18 Jun 2017 22:44:39 +0000 Subject: [PATCH 058/202] Translated using Weblate (Esperanto) Currently translated at 84.0% (168 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/eo/ --- src/i18n/strings/eo.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 4a50ff5609..ae0e365eb7 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -164,5 +164,7 @@ "Get started with some tips from Riot Bot!": "Eki per sugesto de la roboto Riot Bot!", "General discussion about Matrix and Riot": "Ĝenerala diskutado pri Matrix kaj Riot", "Discussion of all things Matrix!": "Diskutado pri ĉio rilate al Matrix!", - "Riot/Web & Desktop chat": "Diskudato labortabla pri Riot/Web" + "Riot/Web & Desktop chat": "Diskudato labortabla pri Riot/Web", + "Riot/iOS & matrix-ios-sdk chat": "Diskutado pri Riot/iOS & matrix-ios-sdk", + "Riot/Android & matrix-android-sdk chat": "Diskutado pri Riot/Android & matrix-android-sdk" } From 2fa05f8d615c9bd7f92637c8098b59345b78155d Mon Sep 17 00:00:00 2001 From: Raul Date: Sun, 18 Jun 2017 22:49:06 +0000 Subject: [PATCH 059/202] Translated using Weblate (Esperanto) Currently translated at 87.0% (174 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/eo/ --- src/i18n/strings/eo.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index ae0e365eb7..7556aa83f1 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -166,5 +166,11 @@ "Discussion of all things Matrix!": "Diskutado pri ĉio rilate al Matrix!", "Riot/Web & Desktop chat": "Diskudato labortabla pri Riot/Web", "Riot/iOS & matrix-ios-sdk chat": "Diskutado pri Riot/iOS & matrix-ios-sdk", - "Riot/Android & matrix-android-sdk chat": "Diskutado pri Riot/Android & matrix-android-sdk" + "Riot/Android & matrix-android-sdk chat": "Diskutado pri Riot/Android & matrix-android-sdk", + "Matrix technical discussions": "Teknikaj diskutoj pri Matrix", + "Running Matrix services": "Funkciigado de servoj Matrix", + "Community-run support for Synapse": "Komunuma subtenado de Synapse", + "Admin support for Dendrite": "Administra subtenado por Dendrite", + "Announcements about Synapse releases": "Anoncoj pri eldonoj Synapse", + "Support for those using and running matrix-appservice-irc": "Subteno por tiuj, kiuj uzas kaj funkciigas matrix-appservice-irc" } From eaf61526fbd6d4872f1b6bafd90f57226806f360 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 18 Jun 2017 23:50:13 +0100 Subject: [PATCH 060/202] add new languages --- scripts/copy-res.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/copy-res.js b/scripts/copy-res.js index 0e22907e62..e8f6684d21 100755 --- a/scripts/copy-res.js +++ b/scripts/copy-res.js @@ -13,16 +13,21 @@ const INCLUDE_LANGS = [ {'value': 'en_US', 'label': 'English (US)'}, {'value': 'da', 'label': 'Dansk'}, {'value': 'el', 'label': 'Ελληνικά'}, + {'value': 'eo', 'label': 'Esperanto'}, {'value': 'nl', 'label': 'Nederlands'}, {'value': 'de_DE', 'label': 'Deutsch'}, {'value': 'fr', 'label': 'Français'}, + {'value': 'hu', 'label': 'Magyar'}, {'value': 'ko', 'label': '한국어'}, + {'value': 'nb_NO', 'label': 'Norwegian Bokmål'}, + {'value': 'pl', 'label': 'Polski'}, {'value': 'pt', 'label': 'Português'}, {'value': 'pt_BR', 'label': 'Português do Brasil'}, {'value': 'ru', 'label': 'Русский'}, {'value': 'sv', 'label': 'Svenska'}, {'value': 'es', 'label': 'Español'}, {'value': 'th', 'label': 'ไทย'}, + {'value': 'tr', 'label': 'Türk'}, {'value': 'zh_Hans', 'label': '简体中文'}, // simplified chinese {'value': 'zh_Hant', 'label': '繁體中文'}, // traditional chinese ]; From 82eb69324d566dc34789204e3bde835520aa8e04 Mon Sep 17 00:00:00 2001 From: Raul Date: Sun, 18 Jun 2017 22:50:04 +0000 Subject: [PATCH 061/202] Translated using Weblate (Esperanto) Currently translated at 88.0% (176 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/eo/ --- src/i18n/strings/eo.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 7556aa83f1..efa658e0e9 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -172,5 +172,7 @@ "Community-run support for Synapse": "Komunuma subtenado de Synapse", "Admin support for Dendrite": "Administra subtenado por Dendrite", "Announcements about Synapse releases": "Anoncoj pri eldonoj Synapse", - "Support for those using and running matrix-appservice-irc": "Subteno por tiuj, kiuj uzas kaj funkciigas matrix-appservice-irc" + "Support for those using and running matrix-appservice-irc": "Subteno por tiuj, kiuj uzas kaj funkciigas matrix-appservice-irc", + "Building services on Matrix": "Konstruante servojn per Matrix", + "Support for those using the Matrix spec": "Subteno por tiuj, kiuj uzas la specifon Matrix" } From 6b1ffaff7a69f2a41da1db87a358ff6219aa7a6f Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 18 Jun 2017 23:54:29 +0100 Subject: [PATCH 062/202] fix broken http status i18n --- src/i18n/strings/de_DE.json | 2 +- src/i18n/strings/el.json | 2 +- src/i18n/strings/en_EN.json | 2 +- src/i18n/strings/en_US.json | 2 +- src/i18n/strings/eo.json | 2 +- src/i18n/strings/es.json | 2 +- src/i18n/strings/fr.json | 2 +- src/i18n/strings/hu.json | 2 +- src/i18n/strings/ko.json | 2 +- src/i18n/strings/nl.json | 2 +- src/i18n/strings/pl.json | 2 +- src/i18n/strings/pt_BR.json | 2 +- src/i18n/strings/ru.json | 2 +- src/i18n/strings/th.json | 2 +- src/i18n/strings/tr.json | 2 +- src/i18n/strings/uk.json | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index e5044c9758..19d43523ed 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -205,7 +205,7 @@ "This will allow you to return to your account after signing out, and sign in on other devices.": "Dies erlaubt dir, dich wieder an deinem Konto anzumelden, nachdem du dich abgemeldet hast.", "Dev chat for the Dendrite dev team": "Entwickler-Chat für das Dendrite-Entwickler-Team", "General discussion about Matrix and Riot": "Allgemeine Diskussion über Matrix und Riot", - " (HTTP status %(httpStatus))": "(HTTP-Status %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(HTTP-Status %(httpStatus)s)", "You have successfully set a password and an email address!": "Du hast erfolgreich ein Passwort und eine E-Mail-Adresse gesetzt!", "Remember, you can always set an email address in user settings if you change your mind.": "Denk daran, dass du in den Benutzereinstellungen jederzeit eine E-Mail-Adresse setzen kannst." } diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index f1dc8b8334..c9f9373a5a 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -156,7 +156,7 @@ "powered by Matrix": "βασισμένο στο πρωτόκολλο Matrix", "Quote": "Παράθεση", "Fetching third party location failed": "Η λήψη τοποθεσίας απέτυχε", - " (HTTP status %(httpStatus))": "(Κατάσταση HTTP %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(Κατάσταση HTTP %(httpStatus)s)", "Login": "Σύνδεση", "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Το Riot χρησιμοποιεί αρκετά προχωρημένα χαρακτηριστικά των περιηγητών Ιστού, ορισμένα από τα οποία δεν είναι διαθέσιμα ή είναι σε πειραματικό στάδιο στον περιηγητή σας.", "The Home Server may be too old to support third party networks": "Ο διακομιστής μπορεί να είναι αρκετά παλιός για να υποστηρίζει δίκτυα τρίτων", diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index bdf0c08222..4717e267ea 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -62,7 +62,7 @@ "Guests can join": "Guests can join", "Guest users can't invite users. Please register to invite.": "Guest users can't invite users. Please register to invite.", "Hide panel": "Hide panel", - " (HTTP status %(httpStatus))": "(HTTP status %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)", "I understand the risks and wish to continue": "I understand the risks and wish to continue", "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:", "Invite to this room": "Invite to this room", diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index 6e37469705..2d7a5fa148 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -164,7 +164,7 @@ "Login": "Login", "Continue": "Continue", "Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?", - " (HTTP status %(httpStatus))": "(HTTP status %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)", "Welcome to Riot.im": "Welcome to Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]", "Chat with Riot Bot": "Chat with Riot Bot", diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 4a50ff5609..bfc8bcd0a1 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -81,7 +81,7 @@ "Failed to set Direct Message status of room": "Malsukcesis agordi la staton de Rekta Mesaĝo de la ejo", "Forward Message": "Plusendi mesaĝon", "Hide panel": "Kaŝi panelon", - " (HTTP status %(httpStatus))": "(stato HTTP %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(stato HTTP %(httpStatus)s)", "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Por diagnozi problemojn, protokoloj el tiu ĉi kliento sendiĝos kune kun tiu ĉi raporto de eraro. Se vi preferas sendi nur la supran tekston, bonvolu malŝalti:", "Login": "Ensaluti", "Loading bug report module": "Ŝarĝante modulon pri eraroraporto", diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 97a6da536e..af1efb60e8 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -123,7 +123,7 @@ "Describe your problem here.": "Describa su problema aquí.", "Forward Message": "Reenviar mensaje", "Hide panel": "Ocultar panel", - " (HTTP status %(httpStatus))": "(estado HTTP %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(estado HTTP %(httpStatus)s)", "I understand the risks and wish to continue": "Entiendo los riesgos y deseo continuar", "Changelog": "Bitácora de cambios", "Collapse panel": "Colapsar panel", diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index f1f2c33a6c..13cf15ceaf 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -169,7 +169,7 @@ "You can now return to your account after signing out, and sign in on other devices.": "Vous pouvez maintenant revenir sur votre compte après vous être déconnecté, et vous identifier sur d'autres appareils.", "This will allow you to return to your account after signing out, and sign in on other devices.": "Cela vous permettra de retourner sur votre compte après vous être déconnecté, et de vous identifier sur d'autres appareils.", "Welcome to Riot.im": "Bienvenue sur Riot.im", - " (HTTP status %(httpStatus))": "(statut HTTP %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(statut HTTP %(httpStatus)s)", "Login": "S'identifier", "Chat with Riot Bot": "Discussion avec Riot Bot", "Search the room directory": "Rechercher dans le répertoire de salon", diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index ac7497c1e6..a08a8b8648 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -196,7 +196,7 @@ "Continue": "Folytatás", "Please set a password!": "Kérlek, állíts be egy jelszót!", "This will allow you to return to your account after signing out, and sign in on other devices.": "Ezzel visszatérhetsz kijelentkezés után a fiókodhoz és más eszközökkel is be tudsz jelentkezni.", - " (HTTP status %(httpStatus))": "(HTTP állapot %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(HTTP állapot %(httpStatus)s)", "You have successfully set a password and an email address!": "Sikeresen beállítottad a jelszavad és e-mail címed!", "Remember, you can always set an email address in user settings if you change your mind.": "Ha meggondolod magad, bármikor beállíthatod az e-mail címed a felhasználói beállításoknál." } diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index e0d1b40e5e..862fbc0aa5 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -131,7 +131,7 @@ "Forward Message": "메시지 전달", " from room": " 방에서", "Guests can join": "손님이 들어올 수 있어요", - " (HTTP status %(httpStatus))": "(HTTP 상태 %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(HTTP 상태 %(httpStatus)s)", "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "문제를 진단하기 위해서, 이 클라이언트의 로그를 오류 보고서와 같이 보낼 거에요. 위 내용만 보내시려면, 체크를 해제하세요:", "Keywords": "키워드", "Mentions only": "답만 하기", diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index c8f0079538..75c9cdfe3a 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -132,7 +132,7 @@ "Failed to send report: ": "Rapport verzenden mislukt: ", "Forward Message": "Bericht doorsturen", "Hide panel": "Paneel verbergen", - " (HTTP status %(httpStatus))": "(HTTP-status %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(HTTP-status %(httpStatus)s)", "I understand the risks and wish to continue": "Ik begrijp de risico's en wil graag verder gaan", "Login": "Aanmelden", "Loading bug report module": "Bugrapporteermodule laden", diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 4ca24868bc..2941f4b568 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -77,7 +77,7 @@ "more": "więcej", "Enable desktop notifications": "Włącz powiadomienia", "Guest users can't invite users. Please register to invite.": "Gość nie ma uprawnień dow wysyłania zaproszeń. Proszę się zarejestrować.", - " (HTTP status %(httpStatus))": "(status HTTP %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(status HTTP %(httpStatus)s)", "Leave": "Opuść", "Login": "Logowanie", "Members": "Członkowie", diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 436e15bc10..17e3eaa778 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -198,6 +198,6 @@ "Continue": "Continuar", "Please set a password!": "Por favor, defina uma senha!", "This will allow you to return to your account after signing out, and sign in on other devices.": "Isso permitirá que você possa retornar à sua conta após fazer logout, e também fazer login em outros dispositivos.", - " (HTTP status %(httpStatus))": "(Status HTTP %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(Status HTTP %(httpStatus)s)", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, criptografado e colaborativo impulsionado por [matrix]" } diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 8c5ef574e4..1c3bb01638 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -183,7 +183,7 @@ "Admin support for Dendrite": "Админ. помощь для Dendrite", "Building services on Matrix": "Построить услуги для Matrix", "Implementing VoIP services with Matrix": "Внедрение услуги VoIP с Matrix", - " (HTTP status %(httpStatus))": "(HTTP-Состояние %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(HTTP-Состояние %(httpStatus)s)", "Riot/iOS & matrix-ios-sdk chat": "Riot-iOS & \"matrix-ios-sdk\"-Чат", "Riot/Android & matrix-android-sdk chat": "Riot-Android & matrix-android-sdk-Чат", "Announcements about Synapse releases": "Объявления релизов Synapse", diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index 976971c87e..27483243a0 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -197,7 +197,7 @@ "Discussion of the Identity Service API": "พูดคุยเกี่ยวกับ Identity Service API", "Decentralised, encrypted chat & collaboration powered by [matrix]": "ระบบแชทและประสานงาน ไร้ศูนย์กลางและเข้ารหัสได้ โดยใช้เทคโนโลยีจาก [matrix]", "General discussion about Matrix and Riot": "พูดคุยเรื่องทั่วไป ทั้ง Matrix และ Riot", - " (HTTP status %(httpStatus))": "(สถานะ HTTP %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(สถานะ HTTP %(httpStatus)s)", "Remember, you can always set an email address in user settings if you change your mind.": "อย่าลืม คุณสามารถตั้งที่อยู่อีเมลในการตั้งค่าผู้ใช้ได้ทุกเมื่อหากคุณเปลี่ยนใจ", "You have successfully set a password and an email address!": "ตั้งรหัสผ่านและที่อยู่อีเมลสำเร็จแล้ว!" } diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index 761672f887..3540194329 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -62,7 +62,7 @@ "Guests can join": "Misafirler katılabilirler", "Guest users can't invite users. Please register to invite.": "Misafir kullanıcılar kullanıcıları davet edemezler . Davet etmek için lütfen kayıt olun.", "Hide panel": "Paneli gizle", - " (HTTP status %(httpStatus))": "(HTTP durumu &(httpStatus))", + "(HTTP status %(httpStatus)s)": "(HTTP durumu &(httpStatus))", "I understand the risks and wish to continue": "Riskleri anlıyorum ve devam etmek istiyorum", "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Sorunları teşhis etmek için , bu istemciden kayıtlar hata raporu ile beraber gönderilecek . Yalnızca yukarıdaki metni göndermek isterseniz , lütfen işareti kaldırın:", "Invite to this room": "Bu odaya davet et", diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index 80cabf9a62..a16cd75167 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -59,7 +59,7 @@ "Guests can join": "Гості можуть приєднуватися", "Guest users can't invite users. Please register to invite.": "Гості не можуть запрошувати користувачів. Зареєструйтесь, будь ласка, для видачі запрошень.", "Hide panel": "Сховати панель", - " (HTTP status %(httpStatus))": "(статус HTTP %(httpStatus))", + "(HTTP status %(httpStatus)s)": "(статус HTTP %(httpStatus)s)", "I understand the risks and wish to continue": "Я ознайомлений з ризиками і хочу продовжити", "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "З метою діагностики проблем журнали з цього застосунку будуть надіслані разом зі звітом про вади. Якщо ви бажаєте надіслати лише вищенаведений текст, відозначте, будь ласка:", "Invite to this room": "Запросити до цієї кімнати", From 612cad5d9e3092a86d8b9d9f1e511c38935c8ccb Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Mon, 19 Jun 2017 00:01:11 +0100 Subject: [PATCH 063/202] fix broken vars --- .../views/dialogs/SetPasswordDialog.js | 4 +-- src/i18n/strings/ml.json | 2 +- src/i18n/strings/tr.json | 26 +++++++++---------- src/i18n/strings/zh_Hans.json | 4 +-- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/components/views/dialogs/SetPasswordDialog.js b/src/components/views/dialogs/SetPasswordDialog.js index 3e34d8b4b1..b82d03468c 100644 --- a/src/components/views/dialogs/SetPasswordDialog.js +++ b/src/components/views/dialogs/SetPasswordDialog.js @@ -93,8 +93,8 @@ export default React.createClass({ if (err.httpStatus === 403) { errMsg = _t('Failed to change password. Is your password correct?'); } else if (err.httpStatus) { - errMsg += _t( - ' (HTTP status %(httpStatus)s)', + errMsg += ' ' + _t( + '(HTTP status %(httpStatus)s)', { httpStatus: err.httpStatus }, ); } diff --git a/src/i18n/strings/ml.json b/src/i18n/strings/ml.json index 1059888544..9f2ad64a24 100644 --- a/src/i18n/strings/ml.json +++ b/src/i18n/strings/ml.json @@ -2,5 +2,5 @@ "Add an email address above to configure email notifications": "ഇ മെയില്‍ അറിയിപ്പുകൾ ലഭിക്കാന്‍ മുകളില്‍ ഇ-മെയില്‍ വിലാസം നല്‍കൂ", "All messages": "എല്ലാ സന്ദേശങ്ങളും", "All messages (loud)": "എല്ലാ സന്ദേശങ്ങളും (ഉച്ചത്തിൽ)", - "%(appName)s via %(browserName)s on %(osName)s": "%(osName)ല്‍ %(browserName) വഴി %(appName)" + "%(appName)s via %(browserName)s on %(osName)s": "%(osName)sല്‍ %(browserName)s വഴി %(appName)s" } diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index 3540194329..9d97d7cbbe 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -1,5 +1,5 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(osName) işletim sisteminde %(browserName) ile %(appName)", + "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s işletim sisteminde %(browserName)s ile %(appName)s", "Safari and Opera work too.": " Safari ve Opera da çalışıyor.", "A new version of Riot is available.": "Riot'un yeni bir versiyonu mevcuttur.", "Add an email address above to configure email notifications": "E-posta bildirimlerini yapılandırmak için yukarıya bir e-posta adresi ekleyin", @@ -23,13 +23,13 @@ "Custom Server Options": "Özel Sunucu Seçenekleri", "customServer_text": "Farklı bir Ana Sunucu URL'si belirleyerek başka bir Matrix sunucusunda oturum açmak için Özel Sunucu Seçeneklerini kullanabilirsiniz.
Bu , Riot'u mevcut Matrix hesabı ile farklı bir Ana Sunucuda kullanmanıza olanak tanır.

Ayrıca Özel Kimlik Sunucu'da ayarlayabilirsiniz ama kullanıcıları e-posta adresleriyle veya kendi e-posta adresinizle davet edemezsiniz.", "delete the alias.": "Tüm rumuzları sil.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "%(alias) oda rumuzu silinsin ve %(name) dizinden kaldırılsın mı ?", + "Delete the room alias %(alias)s and remove %(name)s from the directory?": "%(alias)s oda rumuzu silinsin ve %(name)s dizinden kaldırılsın mı ?", "Describe your problem here.": "Probleminizi burada açıklayın.", "Direct Chat": "Doğrudan Sohbet", "Directory": "Dizin", "Dismiss": "Reddet", "Download this file": "Bu dosyayı indir", - "Drop here %(toAction)s": "Yapılacakları buraya bırak", + "Drop here %(toAction)s": "Burayı terket %(toAction)s", "Enable audible notifications in web client": "Web istemcisinde sesli bildirimleri etkinleştir", "Enable desktop notifications": "Masaüstü bildirimlerini etkinleştir", "Enable email notifications": "E-posta bildirimlerini etkinleştir", @@ -41,14 +41,14 @@ "#example": "örnek", "Expand panel": "Genişletme paneli", "Failed to": "Başaramadı", - "Failed to add tag %(tagName)s to room": "%(tagName) etiketi odaya eklenemedi", + "Failed to add tag %(tagName)s to room": "%(tagName)s etiketi odaya eklenemedi", "Failed to change settings": "Ayarlar değiştirilemedi", - "Failed to forget room %(errCode)s": "Odayı unutma başarısız oldu %(errCode)", + "Failed to forget room %(errCode)s": "Odayı unutma başarısız oldu %(errCode)s", "Failed to update keywords": "Anahtar kelimeler güncellenemedi", "Failed to get protocol list from Home Server": "Ana Sunucu'dan protokol listesi alınamadı", "Failed to get public room list": "Genel odalar listesi alınamadı", "Failed to join the room": "Odaya girilemedi", - "Failed to remove tag %(tagName)s from room": "Odadan %(tagName) etiketi kaldırılamadı", + "Failed to remove tag %(tagName)s from room": "Odadan %(tagName)s etiketi kaldırılamadı", "Failed to send report: ": "Rapor gönderilemedi: ", "Failed to set direct chat tag": "Direkt sohbet etiketi ayarlanamadı", "Failed to set Direct Message status of room": "Odanın Direkt Mesaj durumu ayarlanamadı", @@ -62,7 +62,7 @@ "Guests can join": "Misafirler katılabilirler", "Guest users can't invite users. Please register to invite.": "Misafir kullanıcılar kullanıcıları davet edemezler . Davet etmek için lütfen kayıt olun.", "Hide panel": "Paneli gizle", - "(HTTP status %(httpStatus)s)": "(HTTP durumu &(httpStatus))", + "(HTTP status %(httpStatus)s)": "(HTTP durumu %(httpStatus)s)", "I understand the risks and wish to continue": "Riskleri anlıyorum ve devam etmek istiyorum", "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Sorunları teşhis etmek için , bu istemciden kayıtlar hata raporu ile beraber gönderilecek . Yalnızca yukarıdaki metni göndermek isterseniz , lütfen işareti kaldırın:", "Invite to this room": "Bu odaya davet et", @@ -100,13 +100,13 @@ "Quote": "Alıntı", "Redact": "Yazıya Dökme", "Reject": "Reddet", - "Remove %(name)s from the directory?": "%(name)'i dizinden kaldırılsın mı ?", + "Remove %(name)s from the directory?": "%(name)s'i dizinden kaldırılsın mı ?", "Remove": "Kaldır", - "remove %(name)s from the directory.": "%(name)'i dizinden kaldır.", + "remove %(name)s from the directory.": "%(name)s'i dizinden kaldır.", "Remove from Directory": "Dizinden Kaldır", "Report a bug": "Hata Bildir", "Resend": "Yeniden Gönder", - "Riot Desktop on %(platformName)s": "%(platformName) platformunda Riot Masaüstü", + "Riot Desktop on %(platformName)s": "%(platformName)s platformunda Riot Masaüstü", "Riot does not know how to join a room on this network": "Riot bu ağdaki bir odaya nasıl gireceğini bilmiyor", "Riot is not supported on mobile web. Install the app?": "Riot mobil web'de desteklenmiyor . Uygulamayı yükle ?", "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot geçerli tarayıcınızda mevcut olmayan veya denemelik olan birçok gelişmiş tarayıcı özelliği kullanıyor.", @@ -136,7 +136,7 @@ "unknown error code": "Bilinmeyen hata kodu", "Unnamed room": "İsimsiz oda", "Update": "Güncelleştirme", - "Uploaded on %(date)s by %(user)s": "%(user) tarafında %(date) e yüklendi", + "Uploaded on %(date)s by %(user)s": "%(user)s tarafında %(date)s e yüklendi", "Uploading report": "Rapor yükleniyor", "View Decrypted Source": "Şifresi Çözülmüş(Decrypted) Kaynağı Görüntüle", "View Source": "Kaynağı Görüntüle", @@ -145,8 +145,8 @@ "Waiting for response from server": "Sunucudan yanıt bekleniyor", "When I'm invited to a room": "Bir odaya davet edildiğimde", "World readable": "Okunabilir dünya", - "You cannot delete this image. (%(code)s)": "Bu resmi silemezsiniz. (%(code))", - "You cannot delete this message. (%(code)s)": "Bu mesajı silemezsiniz (%(code))", + "You cannot delete this image. (%(code)s)": "Bu resmi silemezsiniz. (%(code)s)", + "You cannot delete this message. (%(code)s)": "Bu mesajı silemezsiniz (%(code)s)", "You are not receiving desktop notifications": "Masaüstü bildirimleri almıyorsunuz", "You are Rioting as a guest. Register or sign in to access more rooms and features!": "Konuk olarak Riotluyorsunuz. Daha fazla odaya ve özelliğe erişmek için Kayıt Ol ya da Oturum Aç !", "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Onları Riot dışında bir istemciden yapılandırmış olabilirsiniz . Onları Riot içersinide ayarlayamazsınız ama hala geçerlidirler", diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index ca0a9ccda8..646cfc68d8 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -4,7 +4,7 @@ "Notifications": "通知", "OK": "确定", "Operation failed": "操作失败", - "%(appName)s via %(browserName)s on %(osName)s": "应用%(appName)通过%(osName)上的%(browserName)浏览器运行", + "%(appName)s via %(browserName)s on %(osName)s": "应用%(appName)s通过%(osName)s上的%(browserName)s浏览器运行", "Safari and Opera work too.": "SafariOpera均可运行。", "A new version of Riot is available.": "Riot 有更新可用。", "Add an email address above to configure email notifications": "请在上方输入电子邮件地址以接收邮件通知", @@ -26,7 +26,7 @@ "Custom Server Options": "自定义服务器选项", "customServer_text": "你可以通过指定自定义服务器选项中的其他 Home server URL 来登录其他 Matrix 服务器。
该选项允许你在 Riot 上使用其他 Home server 上的帐号。

你也可以自定义身份验证服务器,但你将不能通过邮件邀请其他用户,同样的,你也不能通过邮件被其他用户邀请。", "delete the alias.": "删除别名。", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "确定要删除房间别名 %(alias) 并将 %(name) 从列表中删除吗?", + "Delete the room alias %(alias)s and remove %(name)s from the directory?": "确定要删除房间别名 %(alias)s 并将 %(name)s 从列表中删除吗?", "Describe your problem here.": "在这里描述你的问题。", "Directory": "房间列表", "Dismiss": "设为已读", From 1a72d3134c42c9a66452df66d2648c582a188d81 Mon Sep 17 00:00:00 2001 From: Raul Date: Sun, 18 Jun 2017 23:00:43 +0000 Subject: [PATCH 064/202] Translated using Weblate (Esperanto) Currently translated at 90.0% (180 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/eo/ --- src/i18n/strings/eo.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index f873e9c011..feadadd603 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -174,5 +174,9 @@ "Announcements about Synapse releases": "Anoncoj pri eldonoj Synapse", "Support for those using and running matrix-appservice-irc": "Subteno por tiuj, kiuj uzas kaj funkciigas matrix-appservice-irc", "Building services on Matrix": "Konstruante servojn per Matrix", - "Support for those using the Matrix spec": "Subteno por tiuj, kiuj uzas la specifon Matrix" + "Support for those using the Matrix spec": "Subteno por tiuj, kiuj uzas la specifon Matrix", + "Design and implementation of E2E in Matrix": "Dizajno kaj realigo de E2E en Matrix", + "Implementing VR services with Matrix": "Realigi VR-servojn per Matrix", + "Implementing VoIP services with Matrix": "Realigi VoIP-servojn per Matrix", + "Discussion of the Identity Service API": "Diskutado pri la API de Identiga Servo" } From b7368fa93371c13c26af39a946186f447615399a Mon Sep 17 00:00:00 2001 From: Raul Date: Sun, 18 Jun 2017 23:29:54 +0000 Subject: [PATCH 065/202] Translated using Weblate (Esperanto) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/eo/ --- src/i18n/strings/eo.json | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index feadadd603..a7baa0430b 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -178,5 +178,25 @@ "Design and implementation of E2E in Matrix": "Dizajno kaj realigo de E2E en Matrix", "Implementing VR services with Matrix": "Realigi VR-servojn per Matrix", "Implementing VoIP services with Matrix": "Realigi VoIP-servojn per Matrix", - "Discussion of the Identity Service API": "Diskutado pri la API de Identiga Servo" + "Discussion of the Identity Service API": "Diskutado pri la API de Identiga Servo", + "Support for those using, running and writing other bridges": "Subteno por tiuj, kiuj uzas, funkciigas kaj skribas aliajn pontojn", + "Contributing code to Matrix and Riot": "Kontribui kodon al Matrix kaj Riot", + "Dev chat for the Riot/Web dev team": "Programista babilado por la programteamo de Riot/Web", + "Dev chat for the Dendrite dev team": "Programista babilado por la programteamo de Dendrite", + "Co-ordination for Riot/Web translators": "Kunordigado por tradukistoj de Riot/Web", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Multaj ejoj jam ekzistas en Matrix, ligitaj al ekzistantaj retoj (Slock, IRC, Gitter, ktp) aŭ sendependaj. Kontrolu la dosierujon!", + "Failed to change password. Is your password correct?": "Malsukcesis ŝanĝi la pasvorton. Ĉu via pasvorto pravas?", + "You have successfully set a password!": "Vi sukcese agordis pasvorton!", + "You can now return to your account after signing out, and sign in on other devices.": "Vi nun rajtas reiri al via konto post elsaluto, kaj ensaluti per aliaj aparatoj.", + "Continue": "Daŭrigi", + "Please set a password!": "Bonvolu agordi pasvorton!", + "This will allow you to return to your account after signing out, and sign in on other devices.": "Tio ĉi permesos vin reiri al via konto post elsaluto, kaj ensaluti per alia aparato.", + "You have successfully set a password and an email address!": "Vi sukcese agordis pasvorton kaj retpoŝtadreson!", + "Remember, you can always set an email address in user settings if you change your mind.": "Memoru, vi ĉiam povas agordi retpoŝtadreson en via uzanta agordo se vi decidas ŝanĝi ĝin poste.", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s per %(browserName)s je %(osName)s", + "Safari and Opera work too.": "Safari kaj Opera ankaŭ funkcias.", + "Drop here %(toAction)s": "Forlasi ĉi tie %(toAction)s", + "Favourite": "Plej ŝatata", + "Fetching third party location failed": "Venigado de ekstere liverita loko malsukcesis", + "Filter room names": "Filtri nomojn de ejoj" } From 1c82b7b0c3954ed9c5688081e7944efc33ce99e8 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Mon, 19 Jun 2017 00:54:07 +0100 Subject: [PATCH 066/202] add register button --- src/components/structures/LoginBox.js | 7 +++++++ .../vector/css/matrix-react-sdk/structures/_LoginBox.scss | 8 +++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/components/structures/LoginBox.js b/src/components/structures/LoginBox.js index 445585a758..c9f8e87a10 100644 --- a/src/components/structures/LoginBox.js +++ b/src/components/structures/LoginBox.js @@ -47,6 +47,10 @@ module.exports = React.createClass({ dis.dispatch({ action: 'start_login' }); }, + onRegisterClick: function() { + dis.dispatch({ action: 'start_registration' }); + }, + render: function() { var TintableSvg = sdk.getComponent('elements.TintableSvg'); @@ -71,6 +75,9 @@ module.exports = React.createClass({ { _t("Login") } + + { _t("Register") } +
); } diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_LoginBox.scss b/src/skins/vector/css/matrix-react-sdk/structures/_LoginBox.scss index 3c8091fe9e..92d8833bc6 100644 --- a/src/skins/vector/css/matrix-react-sdk/structures/_LoginBox.scss +++ b/src/skins/vector/css/matrix-react-sdk/structures/_LoginBox.scss @@ -19,13 +19,15 @@ limitations under the License. width: 100%; } -.mx_LoginBox_loginButton { +.mx_LoginBox_loginButton, +.mx_LoginBox_registerButton { margin-top: -8px; height: 40px; border: 0px; border-radius: 40px; - padding-left: 1em; - padding-right: 1em; + margin-left: 4px; + margin-right: 4px; + width: 80px; background-color: $accent-color; color: $primary-bg-color; From 641f20a4f62a30b9067f7ba20a4201655836fc68 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 13 Jun 2017 14:45:05 +0100 Subject: [PATCH 067/202] Tweak tests to match updates to matrixchat Mostly this is just making it look at the `view` state rather than the individual boolean flags. One other tweak merits explanation: we now implement the initial couldn't-register-as-guest login with an explicit switch to the LOGIN view, which means that the URL gets updated to #/login. We also now need to give the login panel a bit longer to appear. --- src/vector/index.js | 18 ++++++++---------- test/app-tests/loading.js | 24 ++++++++++++++---------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/vector/index.js b/src/vector/index.js index 9f16205164..da03327dab 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -216,18 +216,16 @@ function getConfig() { return deferred.promise; } -function onLoadCompleted() { +function onTokenLoginCompleted() { // if we did a token login, we're now left with the token, hs and is // url as query params in the url; a little nasty but let's redirect to // clear them. - if (window.location.search) { - var parsedUrl = url.parse(window.location.href); - parsedUrl.search = ""; - var formatted = url.format(parsedUrl); - console.log("Redirecting to " + formatted + " to drop loginToken " + - "from queryparams"); - window.location.href = formatted; - } + var parsedUrl = url.parse(window.location.href); + parsedUrl.search = ""; + var formatted = url.format(parsedUrl); + console.log("Redirecting to " + formatted + " to drop loginToken " + + "from queryparams"); + window.location.href = formatted; } async function loadApp() { @@ -288,7 +286,7 @@ async function loadApp() { realQueryParams={params} startingFragmentQueryParams={fragparts.params} enableGuest={true} - onLoadCompleted={onLoadCompleted} + onTokenLoginCompleted={onTokenLoginCompleted} initialScreenAfterLogin={getScreenFromLocation(window.location)} defaultDeviceDisplayName={PlatformPeg.get().getDefaultDeviceDisplayName()} />, diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index a323a26269..cad2b922a5 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -29,6 +29,7 @@ import jssdk from 'matrix-js-sdk'; import sdk from 'matrix-react-sdk'; import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg'; import * as languageHandler from 'matrix-react-sdk/lib/languageHandler'; +import {VIEWS} from 'matrix-react-sdk/lib/components/structures/MatrixChat'; import * as test_utils from '../test-utils'; import MockHttpBackend from '../mock-request'; @@ -47,7 +48,7 @@ describe('loading:', function () { // the mounted MatrixChat let matrixChat; - // a promise which resolves when the MatrixChat calls onLoadCompleted + // a promise which resolves when the MatrixChat calls onTokenLoginCompleted let loadCompletePromise; beforeEach(function() { @@ -135,7 +136,7 @@ describe('loading:', function () { realQueryParams={params} startingFragmentQueryParams={fragParts.params} enableGuest={true} - onLoadCompleted={loadCompleteDefer.resolve} + onTokenLoginCompleted={loadCompleteDefer.resolve} initialScreenAfterLogin={getScreenFromLocation(windowLocation)} makeRegistrationUrl={() => {throw new Error('Not implemented');}} />, parentDiv @@ -153,8 +154,8 @@ describe('loading:', function () { .check((r) => {syncRequest = r;}) .respond(200, response); - console.log("waiting for /sync"); for (let attempts = 10; attempts > 0; attempts--) { + console.log(Date.now() + " waiting for /sync"); if (syncRequest) { return syncRequest; } @@ -179,12 +180,12 @@ describe('loading:', function () { return httpBackend.flush(); }).then(() => { // Wait for another trip around the event loop for the UI to update - return q.delay(1); + return q.delay(10); }).then(() => { // we expect a single component following session load ReactTestUtils.findRenderedComponentWithType( matrixChat, sdk.getComponent('structures.login.Login')); - expect(windowLocation.hash).toEqual(""); + expect(windowLocation.hash).toEqual("#/login"); }).done(done, done); }); @@ -205,7 +206,7 @@ describe('loading:', function () { return httpBackend.flush(); }).then(() => { // Wait for another trip around the event loop for the UI to update - return q.delay(1); + return q.delay(10); }).then(() => { return completeLogin(matrixChat); }).then(() => { @@ -360,6 +361,9 @@ describe('loading:', function () { loadApp({ uriFragment: "#/login", }); + + // give the UI a chance to display + return q.delay(50); }); it('shows a login view', function() { @@ -513,7 +517,7 @@ describe('loading:', function () { return httpBackend.flush(); }).then(() => { - // at this point, MatrixChat should fire onLoadCompleted, which + // at this point, MatrixChat should fire onTokenLoginCompleted, which // makes index.js reload the app. We're not going to attempt to // simulate the reload - just check that things are left in the // right state for the reloaded app. @@ -589,7 +593,8 @@ function awaitSyncingSpinner(matrixChat, retryLimit, retryCount) { retryCount = 0; } - if (matrixChat.state.loading || matrixChat.state.loggingIn) { + if (matrixChat.state.view === VIEWS.LOADING || + matrixChat.state.view === VIEWS.LOGGING_IN) { console.log(Date.now() + " Awaiting sync spinner: still loading."); if (retryCount >= retryLimit) { throw new Error("MatrixChat still not loaded after " + @@ -628,8 +633,7 @@ function awaitRoomView(matrixChat, retryLimit, retryCount) { retryCount = 0; } - if (matrixChat.state.loading || - !(matrixChat.state.loggedIn && matrixChat.state.ready)) { + if (matrixChat.state.view !== VIEWS.LOGGED_IN || !matrixChat.state.ready) { console.log(Date.now() + " Awaiting room view: not ready yet."); if (retryCount >= retryLimit) { throw new Error("MatrixChat still not ready after " + From 60be24c66553adae0897f0a2197f886c21f71f47 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Mon, 19 Jun 2017 09:04:24 +0100 Subject: [PATCH 068/202] Rename promise --- test/app-tests/loading.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index 04c68377a9..974bd8974a 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -48,7 +48,7 @@ describe('loading:', function () { let matrixChat; // a promise which resolves when the MatrixChat calls onTokenLoginCompleted - let loadCompletePromise; + let tokenLoginCompletePromise; beforeEach(function() { test_utils.beforeEach(this); @@ -99,8 +99,8 @@ describe('loading:', function () { toString: function() { return this.search + this.hash; }, }; - let loadCompleteDefer = q.defer(); - loadCompletePromise = loadCompleteDefer.promise; + let tokenLoginCompleteDefer = q.defer(); + tokenLoginCompletePromise = tokenLoginCompleteDefer.promise; function onNewScreen(screen) { console.log(Date.now() + " newscreen "+screen); @@ -135,7 +135,7 @@ describe('loading:', function () { realQueryParams={params} startingFragmentQueryParams={fragParts.params} enableGuest={true} - onTokenLoginCompleted={loadCompleteDefer.resolve} + onTokenLoginCompleted={tokenLoginCompleteDefer.resolve} initialScreenAfterLogin={getScreenFromLocation(windowLocation)} makeRegistrationUrl={() => {throw new Error('Not implemented');}} />, parentDiv @@ -520,7 +520,7 @@ describe('loading:', function () { // simulate the reload - just check that things are left in the // right state for the reloaded app. - return loadCompletePromise; + return tokenLoginCompletePromise; }).then(() => { // check that the localstorage has been set up in such a way that // the reloaded app can pick up where we leave off. From 557d4ae4c1c3cc51dcdd7e463f92245ede9de045 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Wed, 14 Jun 2017 20:27:02 +0100 Subject: [PATCH 069/202] Test 'return-to-app' functionality Add a test for the 'log in as user' functionality, as well as the 'return to app' functionality. --- test/app-tests/loading.js | 71 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index 17e487a0fe..b814560756 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -30,6 +30,7 @@ import sdk from 'matrix-react-sdk'; import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg'; import * as languageHandler from 'matrix-react-sdk/lib/languageHandler'; import {VIEWS} from 'matrix-react-sdk/lib/components/structures/MatrixChat'; +import dis from 'matrix-react-sdk/lib/dispatcher'; import * as test_utils from '../test-utils'; import MockHttpBackend from '../mock-request'; @@ -493,6 +494,76 @@ describe('loading:', function () { expect(windowLocation.hash).toEqual("#/room/!room:id"); }).done(done, done); }); + + describe('Login as user', function() { + beforeEach(function() { + // first we have to load the homepage + loadApp(); + + httpBackend.when('POST', '/register').check(function(req) { + expect(req.queryParams.kind).toEqual('guest'); + }).respond(200, { + user_id: "@guest:localhost", + access_token: "secret_token", + }); + + return httpBackend.flush().then(() => { + return awaitSyncingSpinner(matrixChat); + }).then(() => { + // we got a sync spinner - let the sync complete + return expectAndAwaitSync(); + }).then(() => { + // once the sync completes, we should have a home page + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.HomePage')); + + // we simulate a click on the 'login' button by firing off + // the relevant dispatch. + // + // XXX: is it an anti-pattern to access the react-sdk's + // dispatcher in this way? Is it better to find the login + // button and simulate a click? (we might have to arrange + // for it to be shown - it's not always, due to the + // collapsing left panel + + dis.dispatch({ action: 'start_login' }); + + return q.delay(1); + }); + }); + + it('should give us a login page', function() { + expect(windowLocation.hash).toEqual("#/login"); + + // we expect a single component + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.login.Login') + ); + }); + + it('should allow us to return to the app', function() { + const login = ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.login.Login') + ); + + const linkText = 'Return to app'; + + const returnToApp = ReactTestUtils.scryRenderedDOMComponentsWithTag( + login, 'a').find((e) => e.innerText === linkText); + + if (!returnToApp) { + throw new Error(`Couldn't find '${linkText}' link`); + } + + ReactTestUtils.Simulate.click(returnToApp); + + return q.delay(1).then(() => { + // we should be straight back into the home page + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.HomePage')); + }); + }); + }); }); describe('Token login:', function() { From 3588ce7bc518177c0759893a229170ae68df8c14 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Mon, 19 Jun 2017 11:35:20 +0100 Subject: [PATCH 070/202] Fix app tile styling --- .../vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss index 798c9af102..dceff2a37a 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss @@ -147,5 +147,8 @@ limitations under the License. width: 100%; background-color: white; border-radius: 3px 3px 0 0; - max-height: 155px; + height: 155px; + display: flex; + justify-content: center; + align-items: center; } From 45bb74d8f6fcc2c0294866821bb9bd82d3127884 Mon Sep 17 00:00:00 2001 From: Nathan van Beelen Date: Mon, 19 Jun 2017 10:31:51 +0000 Subject: [PATCH 071/202] Translated using Weblate (Dutch) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/nl/ --- src/i18n/strings/nl.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 75c9cdfe3a..d3d9483c3f 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -31,7 +31,7 @@ "Failed to": "Mislukt om", "Failed to add tag %(tagName)s to room": "Mislukt om de label %(tagName)s aan de kamer toe te voegen", "Failed to change settings": "Instellingen wijzigen mislukt", - "Failed to forget room %(errCode)s": "Kamer vergeten mislukt %(errCode)s", + "Failed to forget room %(errCode)s": "Ruimte vergeten mislukt %(errCode)s", "Failed to update keywords": "Trefwoorden bijwerken mislukt", "Failed to get protocol list from Home Server": "Protocollijst ophalen van de homeserver mislukt", "Failed to get public room list": "Lijst met publieke kamers ophalen mislukt", @@ -70,7 +70,7 @@ "On": "Aan", "Operation failed": "Actie mislukt", "Permalink": "Permanente link", - "Please Register": "Registreer alstublieft", + "Please Register": "Registreer Alstublieft", "powered by Matrix": "mogelijk gemaakt door Matrix", "Quote": "Citeer", "Reject": "Afwijzen", From 78068bfaa0e17ead04d75a4fcf4f179333ba1bd4 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 19 Jun 2017 11:58:44 +0100 Subject: [PATCH 072/202] explicit convert to nativeImage to stabilise on Windows Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- electron_app/src/tray.js | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/electron_app/src/tray.js b/electron_app/src/tray.js index 039e7133fa..c2fa50c96b 100644 --- a/electron_app/src/tray.js +++ b/electron_app/src/tray.js @@ -54,33 +54,38 @@ exports.create = function(win, config) { }, ]); - trayIcon = new Tray(config.icon_path); + const defaultIcon = nativeImage.createFromPath(config.icon_path); + + trayIcon = new Tray(defaultIcon); trayIcon.setToolTip(config.brand); trayIcon.setContextMenu(contextMenu); trayIcon.on('click', toggleWin); let lastFavicon = null; win.webContents.on('page-favicon-updated', async function(ev, favicons) { - let newFavicon = config.icon_path; - if (favicons && favicons.length > 0 && favicons[0].startsWith('data:')) { - newFavicon = favicons[0]; + if (!favicons || favicons.length <= 0 || !favicons[0].startsWith('data:')) { + if (lastFavicon !== null) { + win.setIcon(defaultIcon); + trayIcon.setImage(defaultIcon); + lastFavicon = null; + } + return; } // No need to change, shortcut - if (newFavicon === lastFavicon) return; - lastFavicon = newFavicon; + if (favicons[0] === lastFavicon) return; + lastFavicon = favicons[0]; - // if its not default we have to construct into nativeImage - if (newFavicon !== config.icon_path) { - newFavicon = nativeImage.createFromDataURL(favicons[0]); + let newFavicon = nativeImage.createFromDataURL(favicons[0]); - if (process.platform === 'win32') { - try { - const icoPath = path.join(app.getPath('temp'), 'win32_riot_icon.ico') - const icoBuf = await pngToIco(newFavicon.toPNG()); - fs.writeFileSync(icoPath, icoBuf); - newFavicon = icoPath; - } catch (e) {console.error(e);} + // Windows likes ico's too much. + if (process.platform === 'win32') { + try { + const icoPath = path.join(app.getPath('temp'), 'win32_riot_icon.ico'); + fs.writeFileSync(icoPath, await pngToIco(newFavicon.toPNG())); + newFavicon = nativeImage.createFromPath(icoPath); + } catch (e) { + console.error("Failed to make win32 ico", e); } } From db70272902b607b19cb5ddcf5ff468788df55983 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Mon, 19 Jun 2017 12:05:57 +0100 Subject: [PATCH 073/202] Fix custom widget form styling --- .../vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss index dceff2a37a..0fcabac1f4 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss @@ -152,3 +152,8 @@ limitations under the License. justify-content: center; align-items: center; } + +form.mx_Custom_Widget_Form div { + margin-top: 10px; + margin-bottom: 10px; +} From 7523251098d6f8b9528f357dc47190bb731f2925 Mon Sep 17 00:00:00 2001 From: daniel tygel Date: Mon, 19 Jun 2017 13:22:43 +0000 Subject: [PATCH 074/202] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/pt_BR/ --- src/i18n/strings/pt_BR.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 17e3eaa778..e93fc1979b 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -199,5 +199,7 @@ "Please set a password!": "Por favor, defina uma senha!", "This will allow you to return to your account after signing out, and sign in on other devices.": "Isso permitirá que você possa retornar à sua conta após fazer logout, e também fazer login em outros dispositivos.", "(HTTP status %(httpStatus)s)": "(Status HTTP %(httpStatus)s)", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, criptografado e colaborativo impulsionado por [matrix]" + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, criptografado e colaborativo impulsionado por [matrix]", + "You have successfully set a password and an email address!": "Você definiu uma senha e um endereço de e-mail com sucesso!", + "Remember, you can always set an email address in user settings if you change your mind.": "Lembre-se: você pode sempre definir um endereço de e-mail nas configurações de usuário, se mudar de ideia." } From 8b7692cf3bb7791d7bf09dab543273c1ae9e5170 Mon Sep 17 00:00:00 2001 From: russian Date: Mon, 19 Jun 2017 13:24:27 +0000 Subject: [PATCH 075/202] Translated using Weblate (Russian) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ru/ --- src/i18n/strings/ru.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 1c3bb01638..1eb04f4b11 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -34,7 +34,7 @@ "Favourite": "Избранное", "Fetching third party location failed": "Не удалось получить местоположение", "Files": "Файлы", - "Filter room names": "Фильтр по назв. комнаты", + "Filter room names": "Поиск по названию комнат", "Forget": "Удалить", "from the directory": "из каталога", " from room": " из комнаты", From 241ebe50d24c595439739daabe7058d6bb4a1b2f Mon Sep 17 00:00:00 2001 From: Bamstam Date: Mon, 19 Jun 2017 15:54:57 +0000 Subject: [PATCH 076/202] Translated using Weblate (German) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/ --- src/i18n/strings/de_DE.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 19d43523ed..e6ae460ec4 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -86,7 +86,7 @@ "Cancel Sending": "Senden abbrechen", "Close": "Schließen", "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Soll der Raum-Alias %(alias)s gelöscht und der %(name)s aus dem Verzeichnis entfernt werden?", - "Download this file": "Diese Datei herunterladen", + "Download this file": "Datei herunterladen", "Failed to add tag %(tagName)s to room": "Das Hinzufügen des Tags %(tagName)s für den Raum ist fehlgeschlagen", "Failed to forget room %(errCode)s": "Das Entfernen des Raums ist fehlgeschlagen %(errCode)s", "Failed to remove tag %(tagName)s from room": "Das Entfernen des Tags %(tagName)s für den Raum ist fehlgeschlagen", @@ -95,14 +95,14 @@ "Mute": "Stummschalten", "Permalink": "Permanenter Link", "Quote": "Zitat", - "Redact": "Redaktionell entfernen", + "Redact": "Löschen", "Remove %(name)s from the directory?": "Soll der Raum %(name)s aus dem Verzeichnis entfernt werden?", "remove %(name)s from the directory.": "entferne %(name)s aus dem Verzeichnis.", "Resend": "Erneut senden", "Source URL": "Quell-URL", "Unable to look up room ID from server": "Es ist nicht möglich, die Raum-ID auf dem Server nachzuschlagen", "Unhide Preview": "Vorschau wieder anzeigen", - "Uploaded on %(date)s by %(user)s": "Hochgeladen am %(date)s durch %(user)s", + "Uploaded on %(date)s by %(user)s": "Hochgeladen am %(date)s von %(user)s", "View Decrypted Source": "Entschlüsselten Quellcode ansehen", "View Source": "Quellcode ansehen", "You cannot delete this image. (%(code)s)": "Das Bild kann nicht gelöscht werden. (%(code)s)", From 133f3d24f53eb01286216dfed38868e6ff12b512 Mon Sep 17 00:00:00 2001 From: GrigRUSS Date: Mon, 19 Jun 2017 17:18:11 +0000 Subject: [PATCH 077/202] Translated using Weblate (Russian) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ru/ --- src/i18n/strings/ru.json | 58 ++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 1eb04f4b11..d10c19b50e 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -5,8 +5,8 @@ "and remove": "и удалить", "Can't update user notification settings": "Не возможно обновить пользовательские настройки оповещения", "Create new room": "Создать новую комнату", - "Couldn't find a matching Matrix room": "Не возможно найти подходящую Матриксу комнату", - "Custom Server Options": "Расширенные настройки сервера", + "Couldn't find a matching Matrix room": "Не возможно найти подходящую комнату Matrix", + "Custom Server Options": "Собственные настройки сервера", "delete the alias.": "удалить псевдоним.", "Delete the room alias": "Удалить привязку комнаты", "Direct Chat": "Приватный чат", @@ -30,16 +30,16 @@ "Failed to get public room list": "Не удалось получить список открытых комнат", "Failed to join the room": "Не удалось войти в комнату", "Failed to remove tag ": "Не удалось удалить тег ", - "Failed to set Direct Message status of room": "Не удалось задать статус комнаты Персональное Сообщение", + "Failed to set Direct Message status of room": "Не удалось установить статус прямого сообщения в комнате", "Favourite": "Избранное", "Fetching third party location failed": "Не удалось получить местоположение", "Files": "Файлы", - "Filter room names": "Поиск по названию комнат", + "Filter room names": "Фильтр по названию комнат", "Forget": "Удалить", "from the directory": "из каталога", " from room": " из комнаты", "Guests can join": "Гость может присоединиться", - "Guest users can't invite users. Please register to invite.": "Гость не может приглашать пользователей. Зарегистрируйтесь для приглашений.", + "Guest users can't invite users. Please register to invite.": "Гость не может приглашать пользователей. Пожалуйста зарегистрируйтесь.", "Invite to this room": "Пригласить", "Keywords": "Ключевые слова", "Leave": "Покинуть", @@ -51,12 +51,12 @@ "Notifications": "Уведомления", "Notifications on the following keywords follow rules which can’t be displayed here:": "Уведомления по следующим ключевым словам соответствуют правилам, которые нельзя отобразить здесь:", "Notify for all other messages/rooms": "Уведомить обо всех других сообщениях/комнатах", - "Notify me for anything else": "Уведомить меня обо всем кроме", + "Notify me for anything else": "Уведомить меня о чем либо еще", "Off": "Выключить", "On": "Включить", "Operation failed": "Действие не удалось", "Please Register": "Пожалуйста, зарегистрируйтесь", - "powered by Matrix": "управляемый с Matrix", + "powered by Matrix": "Основано на Matrix", "Reject": "Отклонить", "Remove": "Удалить", "remove": "удалить", @@ -86,14 +86,14 @@ "Close": "Закрыть", "Download this file": "Скачать этот файл", "Drop here %(toAction)s": "Вставить сюда: %(toAction)s", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Удалить псевдоним комнаты %(alias)s и очистить %(name)s из каталога?", + "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Удалить псевдоним комнаты %(alias)s и удалить %(name)s из каталога?", "Failed to add tag %(tagName)s to room": "Не удалось добавить тег %(tagName)s в комнату", "Failed to forget room %(errCode)s": "Не удалось удалить комнату %(errCode)s", "Failed to remove tag %(tagName)s from room": "Не удалось убрать пометку %(tagName)s из комнаты", - "Failed to set direct chat tag": "Не удалось пометить прямую беседу", + "Failed to set direct chat tag": "Не удалось установить тег прямого чата", "Unhide Preview": "Показать анонс", "Uploaded on %(date)s by %(user)s": "Загружено %(date)s %(user)s", - "View Decrypted Source": "Просмотр зашифрованного источника", + "View Decrypted Source": "Просмотр расшифрованного источника", "View Source": "Просмотр источника", "You cannot delete this image. (%(code)s)": "Вы не можете удалить это изображение. (%(code)s)", "You cannot delete this message. (%(code)s)": "Вы не можете удалить это сообщение. (%(code)s)", @@ -113,7 +113,7 @@ "Redact": "Удалить", "Remove %(name)s from the directory?": "Удалить %(name)s из каталога?", "remove %(name)s from the directory.": "удалить %(name)s из каталога.", - "Resend": "Переслать снова", + "Resend": "Отправить снова", "Source URL": "Исходный URL", "Welcome page": "Домашняя страница", "Advanced notification settings": "Настройки уведомлений", @@ -131,31 +131,31 @@ "Cancel": "Отмена", "Changelog": "История изменений", "Collapse panel": "Свернуть панель", - "Collecting app version information": "Сбор информации о версиях программы", + "Collecting app version information": "Сбор информации о версии приложения", "Collecting logs": "Сбор протоколов", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s с %(browserName)s на %(osName)s", "Safari and Opera work too.": "Safari и Opera работают тоже.", "Describe your problem here.": "Опиши здесь свою проблему.", - "Expand panel": "Открыть панель", + "Expand panel": "Развернуть панель", "Failed to send report: ": "Не удалось отослать отчет: ", - "Forward Message": "Переслать сообщение дальше", + "Forward Message": "Переслать сообщение", "Hide panel": "Скрыть панель", - "I understand the risks and wish to continue": "Я понимаю риск и хочу продолжать", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Что бы выявить проблему, будет отослан журнал этого клиента с сообщением о ошибке. Если Вы только верхний текст отослать хотите, отключите следующее:", - "Loading bug report module": "Загрузи Модуль ошибок", + "I understand the risks and wish to continue": "Я понимаю риск и хочу продолжить", + "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Чтобы диагностировать проблемы, логи этого клиента будут отправляться с этим сообщением об ошибке. Если вы предпочитаете отправить только текст выше, пожалуйста, отключите:", + "Loading bug report module": "Загрузка Модуля отчета об ошибках", "Messages containing keywords": "Сообщения, которые содержат определенные ключевые слова", "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Пожалуйста опишите (на Английском) ошибку. Что Вы делали? Что Вы ожидали получить? Что произошло?", - "Please describe the bug and/or send logs.": "Пожалуйста опишите ошибку и/или перешлите протоколы.", - "Please install Chrome or Firefox for the best experience.": "Пожалуйста установите Chrome или Firefox для лучшего результата.", - "Report a bug": "Отчет о ошибке", + "Please describe the bug and/or send logs.": "Пожалуйста опишите ошибку и/или перешлите логи.", + "Please install Chrome or Firefox for the best experience.": "Пожалуйста установите Chrome или Firefox для корректной работы чата.", + "Report a bug": "Отчет об ошибке", "Riot Desktop on %(platformName)s": "Riot Desktop на %(platformName)s", - "Riot is not supported on mobile web. Install the app?": "Riot не будет на мобильном Интернете работать. Программу инсталлировать?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot использует некоторые расширенные функции интернет-проводника - некоторые из них отсутствуют или экспериментальные в этом проводнике.", + "Riot is not supported on mobile web. Install the app?": "Riot может некорректно работать в мобильном браузере. Установить мобильное приложение?", + "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot использует много расширенных функции интернет-браузера - некоторые из них отсутствуют или экспериментальные в этом браузере.", "Search": "Поиск", "Search…": "Поиск.…", "Send": "Отослать", - "Send logs": "Отослать протокол", - "Sorry, your browser is not able to run Riot.": "Извините, ваш браузер не может Riot запустить.", + "Send logs": "Отослать логи", + "Sorry, your browser is not able to run Riot.": "Извините, ваш браузер не может запустить Riot.", "This Room": "Эта комната", "Unavailable": "Недоступен", "Unknown device": "Неизвестное устройство", @@ -178,16 +178,16 @@ "Discussion of all things Matrix!": "Дискуссия обо всем Matrix!", "Riot/Web & Desktop chat": "Riot-Web & Desktop-Чат", "Matrix technical discussions": "Техническая дискуссия о Matrix", - "Running Matrix services": "Предлагать Matrix-Сервис", + "Running Matrix services": "Запуск сервиса Matrix", "Community-run support for Synapse": "Поддержка Synapse от сообщества", "Admin support for Dendrite": "Админ. помощь для Dendrite", - "Building services on Matrix": "Построить услуги для Matrix", + "Building services on Matrix": "Разработка сервисов на Matrix", "Implementing VoIP services with Matrix": "Внедрение услуги VoIP с Matrix", - "(HTTP status %(httpStatus)s)": "(HTTP-Состояние %(httpStatus)s)", + "(HTTP status %(httpStatus)s)": "(HTTP-статус %(httpStatus)s)", "Riot/iOS & matrix-ios-sdk chat": "Riot-iOS & \"matrix-ios-sdk\"-Чат", - "Riot/Android & matrix-android-sdk chat": "Riot-Android & matrix-android-sdk-Чат", + "Riot/Android & matrix-android-sdk chat": "Riot-Android & matrix-android-sdk чат", "Announcements about Synapse releases": "Объявления релизов Synapse", - "Support for those using and running matrix-appservice-irc": "Поддержка тех, кто matrix-appservice-irc эксплуатирует и использует", + "Support for those using and running matrix-appservice-irc": "Поддержка тех, кто использует matrix-appservice-irc", "You have successfully set a password!": "Вы успешно установили пароль!", "Continue": "Продолжить", "Please set a password!": "Задайте пароль!", From b9fc46fa412ccaa9ec49a396691fb1cdb1f286e8 Mon Sep 17 00:00:00 2001 From: turt2live Date: Mon, 19 Jun 2017 16:24:03 -0600 Subject: [PATCH 078/202] Change missed 'Redact' to 'Remove' in ImageView. Signed-off-by: Travis Ralston --- 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 dd0490ac0c..f9404eacd3 100644 --- a/src/components/views/elements/ImageView.js +++ b/src/components/views/elements/ImageView.js @@ -158,7 +158,7 @@ module.exports = React.createClass({ var eventRedact; if(showEventMeta) { eventRedact = (
- { _t('Redact') } + { _t('Remove') }
); } From 4ae6e9fdfdba8dd014e0559753ea47919583155a Mon Sep 17 00:00:00 2001 From: turt2live Date: Mon, 19 Jun 2017 16:31:59 -0600 Subject: [PATCH 079/202] Remove 'Redact' from en_US and en_EN as it is no longer needed Signed-off-by: Travis Ralston --- src/i18n/strings/en_EN.json | 1 - src/i18n/strings/en_US.json | 1 - 2 files changed, 2 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 4717e267ea..cc68228fe8 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -98,7 +98,6 @@ "Please Register": "Please Register", "powered by Matrix": "powered by Matrix", "Quote": "Quote", - "Redact": "Redact", "Reject": "Reject", "Remove %(name)s from the directory?": "Remove %(name)s from the directory?", "Remove": "Remove", diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index 2d7a5fa148..29e089ef60 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -96,7 +96,6 @@ "Please Register": "Please Register", "powered by Matrix": "powered by Matrix", "Quote": "Quote", - "Redact": "Redact", "Reject": "Reject", "Remove %(name)s from the directory?": "Remove %(name)s from the directory?", "Remove": "Remove", From 3ff0ed52b2d1c08e47cc47c9487b3715a547f15e Mon Sep 17 00:00:00 2001 From: GrigRUSS Date: Mon, 19 Jun 2017 17:28:59 +0000 Subject: [PATCH 080/202] Translated using Weblate (Russian) Currently translated at 100.0% (200 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ru/ --- src/i18n/strings/ru.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index d10c19b50e..aac71dfd9f 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -32,7 +32,7 @@ "Failed to remove tag ": "Не удалось удалить тег ", "Failed to set Direct Message status of room": "Не удалось установить статус прямого сообщения в комнате", "Favourite": "Избранное", - "Fetching third party location failed": "Не удалось получить местоположение", + "Fetching third party location failed": "Не удалось получить другую локацию", "Files": "Файлы", "Filter room names": "Фильтр по названию комнат", "Forget": "Удалить", @@ -166,17 +166,17 @@ "Waiting for response from server": "Подождите ответа от сервера", "You are Rioting as a guest. Register or sign in to access more rooms and features!": "Вы вошли в Riot как гость. Зарегистрируйтесь или войдите в систему и получите доступ к огромному количеству комнат и функций!", "OK": "ОК", - "You need to be using HTTPS to place a screen-sharing call.": "Вы должны пользоваться HTTPS чтобы пользоваться видео звонком.", + "You need to be using HTTPS to place a screen-sharing call.": "Используйте протокол HTTPS чтобы совершать видео вызов.", "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!": "Если Ваш браузер не корректно отображает информацию и все или некоторые функции отключены, Вы можете и дальше этим браузером пользоваться но ваши проблемы останутся с вами!", "Login": "Войти", - "Welcome to Riot.im": "Добро пожаловать на Riot.im", + "Welcome to Riot.im": "Добро пожаловать в Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализованное, шифрованное общение и сотрудничество на основе [matrix]", "Search the room directory": "Поиск по директории комнат", - "Chat with Riot Bot": "Пообщаться с Riot Bot", + "Chat with Riot Bot": "Пообщаться с ботом Riot", "Get started with some tips from Riot Bot!": "Начните с некоторых советов от Riot бота!", "General discussion about Matrix and Riot": "Общая дискуссия о Matrix и Riot", "Discussion of all things Matrix!": "Дискуссия обо всем Matrix!", - "Riot/Web & Desktop chat": "Riot-Web & Desktop-Чат", + "Riot/Web & Desktop chat": "Riot-Web & Desktop чат", "Matrix technical discussions": "Техническая дискуссия о Matrix", "Running Matrix services": "Запуск сервиса Matrix", "Community-run support for Synapse": "Поддержка Synapse от сообщества", @@ -184,7 +184,7 @@ "Building services on Matrix": "Разработка сервисов на Matrix", "Implementing VoIP services with Matrix": "Внедрение услуги VoIP с Matrix", "(HTTP status %(httpStatus)s)": "(HTTP-статус %(httpStatus)s)", - "Riot/iOS & matrix-ios-sdk chat": "Riot-iOS & \"matrix-ios-sdk\"-Чат", + "Riot/iOS & matrix-ios-sdk chat": "Riot-iOS & matrix-ios-sdk чат", "Riot/Android & matrix-android-sdk chat": "Riot-Android & matrix-android-sdk чат", "Announcements about Synapse releases": "Объявления релизов Synapse", "Support for those using and running matrix-appservice-irc": "Поддержка тех, кто использует matrix-appservice-irc", From f5d9af9b0b467dc53f75c4046dfe6e5e6058c7bc Mon Sep 17 00:00:00 2001 From: strixaluco Date: Tue, 20 Jun 2017 01:34:05 +0000 Subject: [PATCH 081/202] Translated using Weblate (Ukrainian) Currently translated at 98.0% (196 of 200 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/uk/ --- src/i18n/strings/uk.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index a16cd75167..59852cf1bc 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -3,7 +3,7 @@ "All messages": "Усі повідомлення", "All messages (loud)": "Усі повідомлення (гучно)", "All Rooms": "Усі кімнати", - "All notifications are currently disabled for all targets.": "Повідомлення для усіх цілей на даний момент вимкнені.", + "All notifications are currently disabled for all targets.": "Сповіщення для усіх цілей на даний момент вимкнені.", "An error occurred whilst saving your email notification preferences.": "Під час збереження налаштувань сповіщень е-поштою трапилася помилка.", "Cancel": "Скасувати", "Cancel Sending": "Скасувати надсилання", @@ -21,7 +21,7 @@ "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s через %(browserName)s на %(osName)s", "Safari and Opera work too.": "Safari та Opera також підтримуються.", "Add an email address above to configure email notifications": "Додайте вище адресу е-пошти щоб налаштувати сповіщення е-поштою", - "Advanced notification settings": "Додаткові налаштування повідомлень", + "Advanced notification settings": "Додаткові налаштування сповіщень", "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Видалити псевдонім %(alias)s та прибрати з каталогу %(name)s?", "Describe your problem here.": "Опишіть вашу проблему тут.", "Direct Chat": "Прямий чат", From d5d29c1c929c0e199b52c01b26cb69cfe2e30199 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Tue, 20 Jun 2017 11:23:34 +0100 Subject: [PATCH 082/202] Give _t to PasswordNagBar, add CSS for UserSettings password warning Codep https://github.com/matrix-org/matrix-react-sdk/pull/1123 --- src/components/views/globals/PasswordNagBar.js | 10 +++++----- .../matrix-react-sdk/structures/_UserSettings.scss | 13 +++++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/components/views/globals/PasswordNagBar.js b/src/components/views/globals/PasswordNagBar.js index 37d011a605..56eb7bd761 100644 --- a/src/components/views/globals/PasswordNagBar.js +++ b/src/components/views/globals/PasswordNagBar.js @@ -20,6 +20,7 @@ import React from 'react'; import sdk from 'matrix-react-sdk'; import Modal from 'matrix-react-sdk/lib/Modal'; import dis from 'matrix-react-sdk/lib/dispatcher'; +import { _t } from 'matrix-react-sdk/lib/languageHandler'; export default React.createClass({ onUpdateClicked: function() { @@ -33,12 +34,11 @@ export default React.createClass({ dis.dispatch({ action: 'password_changed', }); - } + }, }); }, render: function() { - const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); const toolbarClasses = "mx_MatrixToolbar mx_MatrixToolbar_clickable"; return (
@@ -49,12 +49,12 @@ export default React.createClass({ alt="Warning" />
- To return to your account in future you need to set a password + { _t("To return to your account in future you need to set a password") }
); - } + }, }); diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_UserSettings.scss b/src/skins/vector/css/matrix-react-sdk/structures/_UserSettings.scss index 9809a81ab1..7fa8ceb8c8 100644 --- a/src/skins/vector/css/matrix-react-sdk/structures/_UserSettings.scss +++ b/src/skins/vector/css/matrix-react-sdk/structures/_UserSettings.scss @@ -102,6 +102,19 @@ limitations under the License. padding-right: 1em; } +.mx_UserSettings_passwordWarning { + padding: 6px; + background-color: #76cfa6; + border-radius: 3px; + color: #fff; + margin-bottom: 5px; +} + +.mx_UserSettings_passwordWarning_icon { + vertical-align: -6px; + margin-right: 3px; +} + .mx_UserSettings_importExportButtons { padding-top: 10px; padding-left: 40px; From 047b255e144304858a6708792c6500ca876fcd4b Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Tue, 20 Jun 2017 13:33:38 +0100 Subject: [PATCH 083/202] Add en_EN translations --- src/i18n/strings/en_EN.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 4717e267ea..99b961a07a 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -198,5 +198,7 @@ "Please set a password!": "Please set a password!", "This will allow you to return to your account after signing out, and sign in on other devices.": "This will allow you to return to your account after signing out, and sign in on other devices.", "You have successfully set a password and an email address!": "You have successfully set a password and an email address!", - "Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind." + "Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.", + "To return to your account in future you need to set a password": "To return to your account in future you need to set a password", + "Set Password" } From 499b1c2e70197f12ad73ecf2b20d9eb02cb0ccff Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@googlemail.com> Date: Tue, 20 Jun 2017 14:05:17 +0100 Subject: [PATCH 084/202] add missing semicolon --- electron_app/src/electron-main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js index 5f9598afaf..c8dd6266a3 100644 --- a/electron_app/src/electron-main.js +++ b/electron_app/src/electron-main.js @@ -172,7 +172,7 @@ electron.app.on('ready', () => { if (vectorConfig.update_base_url) { console.log(`Starting auto update with base URL: ${vectorConfig.update_base_url}`); - updater.start(vectorConfig.update_base_url) + updater.start(vectorConfig.update_base_url); } else { console.log('No update_base_url is defined: auto update is disabled'); } From bbbb82351fe39816f77c620a5107354002740f81 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Tue, 20 Jun 2017 14:33:34 +0100 Subject: [PATCH 085/202] CSS for redeisng of password warning Now looks like red text --- .../css/matrix-react-sdk/structures/_UserSettings.scss | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_UserSettings.scss b/src/skins/vector/css/matrix-react-sdk/structures/_UserSettings.scss index 9809a81ab1..31686a7c43 100644 --- a/src/skins/vector/css/matrix-react-sdk/structures/_UserSettings.scss +++ b/src/skins/vector/css/matrix-react-sdk/structures/_UserSettings.scss @@ -102,6 +102,13 @@ limitations under the License. padding-right: 1em; } +.mx_UserSettings_passwordWarning { + /* To move the "Sign out" button out of the way */ + clear: both; + color: $warning-color; + margin-bottom: 5px; +} + .mx_UserSettings_importExportButtons { padding-top: 10px; padding-left: 40px; From 8f8b28425dc90aaa802458e65543d53a93cc87fe Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 20 Jun 2017 15:55:04 +0100 Subject: [PATCH 086/202] Fix json fail --- 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 99b961a07a..d6b05cbde3 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -200,5 +200,5 @@ "You have successfully set a password and an email address!": "You have successfully set a password and an email address!", "Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.", "To return to your account in future you need to set a password": "To return to your account in future you need to set a password", - "Set Password" + "Set Password": "Set Password" } From c70ad2fa65854399f77600b5b76dea0042306964 Mon Sep 17 00:00:00 2001 From: Krombel Date: Tue, 20 Jun 2017 15:15:04 +0000 Subject: [PATCH 087/202] Translated using Weblate (German) Currently translated at 100.0% (202 of 202 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/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 e6ae460ec4..806cf9bfb9 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -207,5 +207,7 @@ "General discussion about Matrix and Riot": "Allgemeine Diskussion über Matrix und Riot", "(HTTP status %(httpStatus)s)": "(HTTP-Status %(httpStatus)s)", "You have successfully set a password and an email address!": "Du hast erfolgreich ein Passwort und eine E-Mail-Adresse gesetzt!", - "Remember, you can always set an email address in user settings if you change your mind.": "Denk daran, dass du in den Benutzereinstellungen jederzeit eine E-Mail-Adresse setzen kannst." + "Remember, you can always set an email address in user settings if you change your mind.": "Denk daran, dass du in den Benutzereinstellungen jederzeit eine E-Mail-Adresse setzen kannst.", + "To return to your account in future you need to set a password": "Um in Zukunft zu deinem Konto zurückkehren zu können, musst du ein Passwort setzen", + "Set Password": "Setze ein Passwort" } From 8a17e3543a3d359db4fc819fba441925cb3b098a Mon Sep 17 00:00:00 2001 From: marekjedrzejewski Date: Tue, 20 Jun 2017 15:17:37 +0000 Subject: [PATCH 088/202] Translated using Weblate (Polish) Currently translated at 100.0% (202 of 202 strings) Translation: Riot Web/riot-web Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/pl/ --- src/i18n/strings/pl.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 2941f4b568..c6086c9820 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -198,5 +198,7 @@ "Please set a password!": "Proszę, ustaw hasło!", "This will allow you to return to your account after signing out, and sign in on other devices.": "To pozwoli Ci powrócić do Twojego konta po wylogowaniu i ponownym zalogowaniu się na innych urządzeniach.", "You have successfully set a password and an email address!": "Z powodzeniem ustawiono hasło i adres e-mail dla Twojego konta!", - "Remember, you can always set an email address in user settings if you change your mind.": "Pamiętaj, że zawsze możesz zmienić swój e-mail lub hasło w panelu ustawień użytkownika." + "Remember, you can always set an email address in user settings if you change your mind.": "Pamiętaj, że zawsze możesz zmienić swój e-mail lub hasło w panelu ustawień użytkownika.", + "To return to your account in future you need to set a password": "Aby wrócić do swojego konta w przyszłości musisz ustawić hasło ", + "Set Password": "Ustaw hasło" } From abf21675d50bf879cb6dd1b15e417e73ae7aeb56 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 20 Jun 2017 15:35:01 +0100 Subject: [PATCH 089/202] Add some more logging to the tests ... to help diagnose when they fail --- test/app-tests/loading.js | 3 ++- test/test-utils.js | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index b814560756..21e092e956 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -70,7 +70,8 @@ describe('loading:', function () { }); }); - afterEach(async function() { + afterEach(async function () { + console.log('loading: afterEach'); if (parentDiv) { ReactDOM.unmountComponentAtNode(parentDiv); parentDiv.remove(); diff --git a/test/test-utils.js b/test/test-utils.js index a1c1cd0ad5..3c697661e7 100644 --- a/test/test-utils.js +++ b/test/test-utils.js @@ -38,12 +38,12 @@ export function deleteIndexedDB(dbName) { const req = window.indexedDB.deleteDatabase(dbName); req.onblocked = () => { - console.log(`can't yet delete indexeddb because it is open elsewhere`); + console.log(`can't yet delete indexeddb ${dbName} because it is open elsewhere`); }; req.onerror = (ev) => { reject(new Error( - "unable to delete indexeddb: " + ev.target.error, + `unable to delete indexeddb ${dbName}: ${ev.target.error}`, )); }; @@ -51,5 +51,8 @@ export function deleteIndexedDB(dbName) { console.log(`Removed indexeddb instance: ${dbName}`); resolve(); }; + }).catch((e) => { + console.error(`Error removing indexeddb instance ${dbName}: ${e}`); + throw e; }); } From c4a3211cfc42ed42b003c08eda5a524e82a6296e Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Tue, 20 Jun 2017 16:28:40 +0100 Subject: [PATCH 090/202] Use _tJsx for PasswordNagBar (because it has ) --- src/components/views/globals/PasswordNagBar.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/views/globals/PasswordNagBar.js b/src/components/views/globals/PasswordNagBar.js index 56eb7bd761..873cefe16f 100644 --- a/src/components/views/globals/PasswordNagBar.js +++ b/src/components/views/globals/PasswordNagBar.js @@ -20,7 +20,7 @@ import React from 'react'; import sdk from 'matrix-react-sdk'; import Modal from 'matrix-react-sdk/lib/Modal'; import dis from 'matrix-react-sdk/lib/dispatcher'; -import { _t } from 'matrix-react-sdk/lib/languageHandler'; +import { _t, _tJsx } from 'matrix-react-sdk/lib/languageHandler'; export default React.createClass({ onUpdateClicked: function() { @@ -49,7 +49,11 @@ export default React.createClass({ alt="Warning" />
- { _t("To return to your account in future you need to set a password") } + { _tJsx( + "To return to your account in future you need to set a password", + /(.*?)<\/u>/, + (sub) => { return { sub }; }, + ) }
); From 48889b51b005319c83d0d3295172df4abc3ae91d Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 4 Jul 2017 16:38:19 +0100 Subject: [PATCH 125/202] Bump to matrix-mock-request 1.0.0 - for consistency with js-sdk updates --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 87b004ce1e..3d7e6935fc 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,7 @@ "karma-mocha": "^0.2.2", "karma-phantomjs-launcher": "^1.0.0", "karma-webpack": "^1.7.0", - "matrix-mock-request": "^0.1.3", + "matrix-mock-request": "^1.0.0", "minimist": "^1.2.0", "mkdirp": "^0.5.1", "mocha": "^2.4.5", From 1e569e67b17b4a6519d29776b39c3944a8ba8cab Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Tue, 4 Jul 2017 16:40:15 +0100 Subject: [PATCH 126/202] Do not truncate autocomplete provider names --- .../vector/css/matrix-react-sdk/views/rooms/_Autocomplete.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_Autocomplete.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_Autocomplete.scss index 704b3aa99f..9beb0a2c5f 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_Autocomplete.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_Autocomplete.scss @@ -50,7 +50,6 @@ margin: 0 3px; } -.mx_Autocomplete_provider_name, .mx_Autocomplete_Completion_title, .mx_Autocomplete_Completion_subtitle, .mx_Autocomplete_Completion_description { From b4b33ae06f8051fbef6317937c91bb5a4561f107 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Tue, 4 Jul 2017 16:49:11 +0100 Subject: [PATCH 127/202] Add CSS class to truncate certain autocompletions --- .../views/rooms/_Autocomplete.scss | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_Autocomplete.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_Autocomplete.scss index 9beb0a2c5f..6bf3f3b60a 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_Autocomplete.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_Autocomplete.scss @@ -50,14 +50,16 @@ margin: 0 3px; } -.mx_Autocomplete_Completion_title, -.mx_Autocomplete_Completion_subtitle, -.mx_Autocomplete_Completion_description { - /* Ellipsis for long names/subtitles/descriptions*/ - max-width: 150px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; +.mx_Autocomplete_Completion_container_truncate { + .mx_Autocomplete_Completion_title, + .mx_Autocomplete_Completion_subtitle, + .mx_Autocomplete_Completion_description { + /* Ellipsis for long names/subtitles/descriptions*/ + max-width: 150px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } } /* container for pill-style completions */ From 38b1ca9b901f2a9a1069d40e3d24561570428177 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Wed, 5 Jul 2017 09:35:51 +0100 Subject: [PATCH 128/202] Use headless chrome instead of phantomjs for tests --- karma.conf.js | 15 +++++++++++++++ package.json | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/karma.conf.js b/karma.conf.js index 1e04366313..d834987e83 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -113,8 +113,23 @@ module.exports = function (config) { browsers: [ 'Chrome', //'PhantomJS', + //'ChromeHeadless' ], + customLaunchers: { + 'ChromeHeadless': { + base: 'Chrome', + flags: [ + // '--no-sandbox', + // See https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md + '--headless', + '--disable-gpu', + // Without a remote debugging port, Google Chrome exits immediately. + '--remote-debugging-port=9222', + ], + } + }, + // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits // singleRun: false, diff --git a/package.json b/package.json index 3d7e6935fc..dc1058c9e4 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "lintall": "eslint src/ test/", "clean": "rimraf lib webapp electron_app/dist", "prepublish": "npm run build:compile", - "test": "karma start --single-run=true --autoWatch=false --browsers PhantomJS --colors=false", + "test": "karma start --single-run=true --autoWatch=false --browsers ChromeHeadless --colors=false", "test-multi": "karma start" }, "dependencies": { From 9969d6095d46488c0c56663da68b6d9e0ccaac68 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Wed, 5 Jul 2017 09:43:40 +0100 Subject: [PATCH 129/202] Remove phantomjs; add chrome --- .travis.yml | 4 +++- package.json | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0656064ec2..55744222b1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,9 @@ node_js: - 6.3 - 6 - 7 +addons: + chrome: stable install: # clone the deps with depth 1: we know we will only ever need that one # commit. - - scripts/fetch-develop.deps.sh --depth 1 && npm i phantomjs-prebuilt && npm install + - scripts/fetch-develop.deps.sh --depth 1 && npm install diff --git a/package.json b/package.json index dc1058c9e4..83d9bd16a8 100644 --- a/package.json +++ b/package.json @@ -119,14 +119,12 @@ "karma-cli": "^0.1.2", "karma-junit-reporter": "^0.4.1", "karma-mocha": "^0.2.2", - "karma-phantomjs-launcher": "^1.0.0", "karma-webpack": "^1.7.0", "matrix-mock-request": "^1.0.0", "minimist": "^1.2.0", "mkdirp": "^0.5.1", "mocha": "^2.4.5", "parallelshell": "^1.2.0", - "phantomjs-prebuilt": "^2.1.7", "postcss-extend": "^1.0.5", "postcss-import": "^9.0.0", "postcss-loader": "^1.2.2", From cfe9e762ad36556561c43a471b76de748a2ceb8d Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Wed, 5 Jul 2017 10:01:13 +0100 Subject: [PATCH 130/202] Use trusty dist --- .travis.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.travis.yml b/.travis.yml index 55744222b1..409fcd75d4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,10 @@ +# we need trusty for the chrome addon +dist: trusty + +# we don't need sudo, so can run in a container, which makes startup much +# quicker. +sudo: false + language: node_js node_js: # make sure we work with a range of node versions. From 60703bdcfcc3b7d6a996936ac00003383825646e Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Wed, 5 Jul 2017 10:54:10 +0100 Subject: [PATCH 131/202] Log errors thrown by getThirdpartyProtocols - so that it appears in rageshakes and test logs. --- src/components/structures/RoomDirectory.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js index 64a53d336d..e7d68c39f6 100644 --- a/src/components/structures/RoomDirectory.js +++ b/src/components/structures/RoomDirectory.js @@ -73,6 +73,7 @@ module.exports = React.createClass({ this.protocols = response; this.setState({protocolsLoading: false}); }, (err) => { + console.warn(`error loading thirdparty protocols: ${err}`); this.setState({protocolsLoading: false}); if (MatrixClientPeg.get().isGuest()) { // Guests currently aren't allowed to use this API, so From ba0073ca71af36e0f6ed671e35c4235b03286f88 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Wed, 5 Jul 2017 11:45:23 +0100 Subject: [PATCH 132/202] README: Add notes on running tests --- README.md | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 89f2148f5e..3334ad4ed4 100644 --- a/README.md +++ b/README.md @@ -282,19 +282,34 @@ If any of these steps error with, `file table overflow`, you are probably on a m which has a very low limit on max open files. Run `ulimit -Sn 1024` and try again. You'll need to do this in each new terminal you open before building Riot. -How to add a new translation? -============================= +Running the tests +----------------- + +There are a number of application-level tests in the `tests` directory; these +are designed to run in a browser instance under the control of +[karma](https://karma-runner.github.io). To run them: + +* Make sure you have Chrome installed (a recent version, like 59) +* Make sure you have `matrix-js-sdk` and `matrix-react-sdk` installed and + built, as above +* `npm run test` + +The above will run the tests under Chrome in a `headless` mode. + +You can also tell karma to run the tests in a loop (every time the source +changes), in an instance of Chrome on your desktop, with `npm run +test-multi`. This also gives you the option of running the tests in 'debug' +mode, which is useful for stepping through the tests in the developer tools. + +Translations +============ + +To add a new translation, head to the [translating doc](docs/translating.md). + +For a developer guide, see the [translating dev doc](docs/translating-dev.md). [translationsstatus](https://translate.riot.im/engage/riot-web/?utm_source=widget) - -Head to the [translating doc](docs/translating.md) - -Adding Strings to the translations (Developer Guide) -==================================================== - -Head to the [translating dev doc](docs/translating-dev.md) - Triaging issues =============== From a14bc9a9b1642b674b22afff10bc570d740c7b0d Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Wed, 5 Jul 2017 11:47:38 +0100 Subject: [PATCH 133/202] README: minor fixes --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 3334ad4ed4..d4b778b91e 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ to build. npm run build ``` However, we recommend setting up a proper development environment (see "Setting - up a development environment" below) if you want to run your own copy of the + up a dev environment" below) if you want to run your own copy of the `develop` branch, as it makes it much easier to keep these dependencies up-to-date. Or just use https://riot.im/develop - the continuous integration release of the develop branch. @@ -253,7 +253,6 @@ Finally, build and start Riot itself: 1. `rm -r node_modules/matrix-react-sdk; ln -s ../../matrix-react-sdk node_modules/` 1. `npm start` 1. Wait a few seconds for the initial build to finish; you should see something like: - ``` Hash: b0af76309dd56d7275c8 Version: webpack 1.12.14 From 07e8d4ef69a24704caaa0ef2e17d77993ec64dfe Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 5 Jul 2017 18:13:23 +0100 Subject: [PATCH 134/202] Add visual bell animation for RTE --- .../matrix-react-sdk/views/rooms/_MessageComposer.scss | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss index 49111afd74..89ae2d67ac 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss @@ -78,6 +78,16 @@ limitations under the License. margin-right: 6px; } +@keyframes visualbell +{ + from { background-color: #faa } + to { background-color: $primary-bg-color } +} + +.mx_MessageComposer_input_error { + animation: 0.2s visualbell; +} + .mx_MessageComposer_input_empty .public-DraftEditorPlaceholder-root { display: none; } From a8d5f7d5ebd7eae3cff68688ea68a35f522fdaac Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 6 Jul 2017 13:53:17 +0100 Subject: [PATCH 135/202] remove unused class Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../css/matrix-react-sdk/views/rooms/_MessageComposer.scss | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss index a4b26cc473..6c2216ddc6 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss @@ -194,11 +194,6 @@ limitations under the License. cursor: pointer; } -.mx_MessageComposer_format_button_disabled { - cursor: not-allowed; - opacity: 0.5; -} - .mx_MessageComposer_formatbar_cancel { margin-right: 22px; } From e04f34a202e3841903b38f1d2ede1f932a3840fb Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 6 Jul 2017 19:14:12 +0100 Subject: [PATCH 136/202] More CSS for group view --- .../structures/_GroupView.scss | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss index 459daa86c3..a93a050187 100644 --- a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss +++ b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss @@ -29,3 +29,24 @@ limitations under the License. font-size: initial; padding-left: 10px; } + +.mx_GroupView_featuredRooms { + margin-top: 20px; +} + +.mx_GroupView_featuredRooms_header { + font-weight: bold; + font-size: 120%; + margin-bottom: 20px; +} + +.mx_GroupView_featuredRooms_category { + font-weight: bold; + font-size: 110%; + margin-top: 10px; +} + +.mx_GroupView_featuredRoom { + cursor: pointer; + display: table-cell; +} From b4602fd2b106005229bf3a764cbc0ce7ee2ad9a6 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 7 Jul 2017 10:49:19 +0100 Subject: [PATCH 137/202] Comment --- src/skins/vector/css/matrix-react-sdk/structures/_MyGroups.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_MyGroups.scss b/src/skins/vector/css/matrix-react-sdk/structures/_MyGroups.scss index 9b7871e778..8de7b20fdf 100644 --- a/src/skins/vector/css/matrix-react-sdk/structures/_MyGroups.scss +++ b/src/skins/vector/css/matrix-react-sdk/structures/_MyGroups.scss @@ -35,6 +35,7 @@ limitations under the License. } .mx_MyGroups_joinCreateButton object { + /* Otherwise the SVG object absorbs clicks and the button doesn't work */ pointer-events: none; } From 5f5a802b44e8da36c4ec1f156a50417fb3936f69 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 7 Jul 2017 18:34:57 +0100 Subject: [PATCH 138/202] Add CSS from react-sdk PR feedback --- .../matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss index f946a07ab3..ebe89027a6 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss @@ -14,6 +14,11 @@ See the License for the specific language governing permissions and limitations under the License. */ +.mx_CreateGroupDialog_inputRow { + margin-top: 10px; + margin-bottom: 10px; +} + .mx_CreateGroupDialog_label { text-align: left; padding-bottom: 12px; From cefc3e6da9a6c3a5e43bfab8fc2c1e0cc63b28c3 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 10 Jul 2017 19:32:25 +0100 Subject: [PATCH 139/202] Make CSS more generic --- .../css/matrix-react-sdk/structures/_GroupView.scss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss index a93a050187..e56da68d2f 100644 --- a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss +++ b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss @@ -30,23 +30,23 @@ limitations under the License. padding-left: 10px; } -.mx_GroupView_featuredRooms { +.mx_GroupView_featuredThings { margin-top: 20px; } -.mx_GroupView_featuredRooms_header { +.mx_GroupView_featuredThings_header { font-weight: bold; font-size: 120%; margin-bottom: 20px; } -.mx_GroupView_featuredRooms_category { +.mx_GroupView_featuredThings_category { font-weight: bold; font-size: 110%; margin-top: 10px; } -.mx_GroupView_featuredRoom { +.mx_GroupView_featuredThing { cursor: pointer; display: table-cell; } From b375c71a28b510335748bebf7573dc4d648e4f38 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 11 Jul 2017 13:19:17 +0100 Subject: [PATCH 140/202] fix comments on node versions --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 409fcd75d4..94ed745cd8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,8 +12,9 @@ node_js: # - 4.x is still in LTS (until April 2018), but some of our deps (notably # extract-zip) don't work with it # - 5.x has been EOLed for nearly a year. - # - 6.x is the current 'LTS' version - # - 7.x is the current 'current' version (until October 2017) + # - 6.x is the active 'LTS' version + # - 7.x is no longer supported + # - 8.x is the current 'current' version (until October 2017) # # see: https://github.com/nodejs/LTS/ # From 8ac26dd19fd5576fa28c99bd5d71467dbd365956 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 11 Jul 2017 14:08:16 +0100 Subject: [PATCH 141/202] Give HomePage an unmounted guard Also add missing return in error-handling path --- src/components/structures/HomePage.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/components/structures/HomePage.js b/src/components/structures/HomePage.js index 2311cc1f30..292fc77a3a 100644 --- a/src/components/structures/HomePage.js +++ b/src/components/structures/HomePage.js @@ -52,6 +52,8 @@ module.exports = React.createClass({ }, componentWillMount: function() { + this._unmounted = false; + if (this.props.teamToken && this.props.teamServerUrl) { this.setState({ iframeSrc: `${this.props.teamServerUrl}/static/${this.props.teamToken}/home.html` @@ -67,9 +69,14 @@ module.exports = React.createClass({ request( { method: "GET", url: src }, (err, response, body) => { + if (this.unmounted) { + return; + } + if (err || response.status < 200 || response.status >= 300) { console.log(err); this.setState({ page: "Couldn't load home page" }); + return; } body = body.replace(/_t\(['"]([\s\S]*?)['"]\)/mg, (match, g1)=>this.translate(g1)); @@ -79,6 +86,10 @@ module.exports = React.createClass({ } }, + componentWillUnmount: function() { + this._unmounted = true; + }, + render: function() { if (this.state.iframeSrc) { return ( From d755903fdbbed4a2809eccb48633569ac0825743 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 11 Jul 2017 14:10:18 +0100 Subject: [PATCH 142/202] typo --- src/components/structures/HomePage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/HomePage.js b/src/components/structures/HomePage.js index 292fc77a3a..df8cc33ec9 100644 --- a/src/components/structures/HomePage.js +++ b/src/components/structures/HomePage.js @@ -69,7 +69,7 @@ module.exports = React.createClass({ request( { method: "GET", url: src }, (err, response, body) => { - if (this.unmounted) { + if (this._unmounted) { return; } From bc60fa81af90c5c5c5a91b4f3701f7a9154afe23 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 11 Jul 2017 14:29:47 +0100 Subject: [PATCH 143/202] more HomePage tweaks * Don't log errors with no context * i18nify the "Couldn't load home page" message --- src/components/structures/HomePage.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/structures/HomePage.js b/src/components/structures/HomePage.js index df8cc33ec9..bdba55eb0e 100644 --- a/src/components/structures/HomePage.js +++ b/src/components/structures/HomePage.js @@ -74,8 +74,8 @@ module.exports = React.createClass({ } if (err || response.status < 200 || response.status >= 300) { - console.log(err); - this.setState({ page: "Couldn't load home page" }); + console.warn(`Error loading home page: ${err}`); + this.setState({ page: _t("Couldn't load home page") }); return; } From 0bbce1c1403b7edd191a0ef39f39e7ab1a48c2a5 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 11 Jul 2017 17:00:04 +0100 Subject: [PATCH 144/202] Add missing i18n string This should have been part of https://github.com/vector-im/riot-web/pull/4557/files --- src/i18n/strings/en_EN.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 10c21a62d7..30ebd1bde0 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -204,5 +204,6 @@ "You have successfully set a password and an email address!": "You have successfully set a password and an email address!", "Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.", "To return to your account in future you need to set a password": "To return to your account in future you need to set a password", - "Set Password": "Set Password" + "Set Password": "Set Password", + "Couldn't load home page": "Couldn't load home page", } From 898725082acdd99127e24f852ffb29b8e2840c13 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 11 Jul 2017 17:35:25 +0100 Subject: [PATCH 145/202] Remove spurious comma I am messing this up - fix to 0bbce1c --- 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 30ebd1bde0..cecb248ce1 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -205,5 +205,5 @@ "Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.", "To return to your account in future you need to set a password": "To return to your account in future you need to set a password", "Set Password": "Set Password", - "Couldn't load home page": "Couldn't load home page", + "Couldn't load home page": "Couldn't load home page" } From 4fe4e10abb55d4735ecb3159731c77ea4f829981 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 12 Jul 2017 13:49:57 +0100 Subject: [PATCH 146/202] Implement the focus_room_filter action This is for ctrl+k room filtering and switching --- src/components/structures/SearchBox.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/components/structures/SearchBox.js b/src/components/structures/SearchBox.js index 99c4486690..6e47f7a57b 100644 --- a/src/components/structures/SearchBox.js +++ b/src/components/structures/SearchBox.js @@ -46,18 +46,22 @@ module.exports = React.createClass({ }, onAction: function(payload) { - // Disabling this as I find it really really annoying, and was used to the - // previous behaviour - see https://github.com/vector-im/riot-web/issues/3348 -/* switch (payload.action) { +/* Disabling this as I find it really really annoying, and was used to the + previous behaviour - see https://github.com/vector-im/riot-web/issues/3348 // Clear up the text field when a room is selected. case 'view_room': if (this.refs.search) { this._clearSearch(); } break; +*/ + case 'focus_room_filter': + if (this.refs.search) { + this.refs.search.focus(); + } + break; } -*/ }, onChange: function() { From 41cd238e0221f7243d83aeb8daca927c30fe165f Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 12 Jul 2017 17:10:43 +0100 Subject: [PATCH 147/202] Update to reflect previous implementation Which was https://github.com/vector-im/riot-web/pull/3654/commits/a74bbb424c7c07494d71329e8d4c6ef9fc37a7b9 --- src/components/structures/RoomSubList.js | 4 ++- src/components/structures/SearchBox.js | 33 ++++++++++++++++-------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/components/structures/RoomSubList.js b/src/components/structures/RoomSubList.js index 092ed9cca0..17febe02c7 100644 --- a/src/components/structures/RoomSubList.js +++ b/src/components/structures/RoomSubList.js @@ -30,6 +30,7 @@ var RoomNotifs = require('matrix-react-sdk/lib/RoomNotifs'); var FormattingUtils = require('matrix-react-sdk/lib/utils/FormattingUtils'); var AccessibleButton = require('matrix-react-sdk/lib/components/views/elements/AccessibleButton'); import Modal from 'matrix-react-sdk/lib/Modal'; +import KeyCode from 'matrix-react-sdk/lib/KeyCode'; // turn this on for drop & drag console debugging galore var debug = false; @@ -151,10 +152,11 @@ var RoomSubList = React.createClass({ } }, - onRoomTileClick(roomId) { + onRoomTileClick(roomId, ev) { dis.dispatch({ action: 'view_room', room_id: roomId, + clear_search: (ev && (ev.keyCode == KeyCode.ENTER || ev.keyCode == KeyCode.SPACE)), }); }, diff --git a/src/components/structures/SearchBox.js b/src/components/structures/SearchBox.js index 6e47f7a57b..e35d1e4899 100644 --- a/src/components/structures/SearchBox.js +++ b/src/components/structures/SearchBox.js @@ -16,12 +16,13 @@ limitations under the License. 'use strict'; -var React = require('react'); +import React from 'react'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; -var sdk = require('matrix-react-sdk') -var dis = require('matrix-react-sdk/lib/dispatcher'); -var rate_limited_func = require('matrix-react-sdk/lib/ratelimitedfunc'); -var AccessibleButton = require('matrix-react-sdk/lib/components/views/elements/AccessibleButton'); +import KeyCode from 'matrix-react-sdk/lib/KeyCode'; +import sdk from 'matrix-react-sdk'; +import dis from 'matrix-react-sdk/lib/dispatcher'; +import RateLimitedFunc from 'matrix-react-sdk/lib/ratelimitedfunc'; +import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton'; module.exports = React.createClass({ displayName: 'SearchBox', @@ -39,26 +40,25 @@ module.exports = React.createClass({ componentDidMount: function() { this.dispatcherRef = dis.register(this.onAction); + document.addEventListener('keydown', this._onKeyDown); }, componentWillUnmount: function() { dis.unregister(this.dispatcherRef); + document.removeEventListener('keydown', this._onKeyDown); }, onAction: function(payload) { switch (payload.action) { -/* Disabling this as I find it really really annoying, and was used to the - previous behaviour - see https://github.com/vector-im/riot-web/issues/3348 - // Clear up the text field when a room is selected. case 'view_room': - if (this.refs.search) { + if (this.refs.search && payload.clear_search) { this._clearSearch(); } break; -*/ case 'focus_room_filter': if (this.refs.search) { this.refs.search.focus(); + this.refs.search.select(); } break; } @@ -70,7 +70,7 @@ module.exports = React.createClass({ this.onSearch(); }, - onSearch: new rate_limited_func( + onSearch: new RateLimitedFunc( function() { this.props.onSearch(this.refs.search.value); }, @@ -90,6 +90,17 @@ module.exports = React.createClass({ } }, + _onKeyDown: function(ev) { + // Only do anything when the key event target is the search input + if(ev.target !== this.refs.search) return; + switch (ev.keyCode) { + case KeyCode.ESCAPE: + this._clearSearch(); + dis.dispatch({action: 'focus_composer'}); + break; + } + }, + _clearSearch: function() { this.refs.search.value = ""; this.onChange(); From 3e1a909b1d2ae7e6bea24514723c214dd2d845ef Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 12 Jul 2017 17:46:27 +0100 Subject: [PATCH 148/202] Just use the onKeyDown of the --- src/components/structures/SearchBox.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/components/structures/SearchBox.js b/src/components/structures/SearchBox.js index e35d1e4899..0499e60190 100644 --- a/src/components/structures/SearchBox.js +++ b/src/components/structures/SearchBox.js @@ -40,12 +40,10 @@ module.exports = React.createClass({ componentDidMount: function() { this.dispatcherRef = dis.register(this.onAction); - document.addEventListener('keydown', this._onKeyDown); }, componentWillUnmount: function() { dis.unregister(this.dispatcherRef); - document.removeEventListener('keydown', this._onKeyDown); }, onAction: function(payload) { @@ -91,8 +89,6 @@ module.exports = React.createClass({ }, _onKeyDown: function(ev) { - // Only do anything when the key event target is the search input - if(ev.target !== this.refs.search) return; switch (ev.keyCode) { case KeyCode.ESCAPE: this._clearSearch(); @@ -150,6 +146,7 @@ module.exports = React.createClass({ className="mx_SearchBox_search" value={ this.state.searchTerm } onChange={ this.onChange } + onKeyDown={ this._onKeyDown } placeholder={ _t('Filter room names') } /> ]; From 188a58e5c7b49ad99f89613affea86d7604b8bd9 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 12 Jul 2017 18:18:13 +0100 Subject: [PATCH 149/202] RateLimitedFunc -> rate_limited_func --- src/components/structures/SearchBox.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/structures/SearchBox.js b/src/components/structures/SearchBox.js index 0499e60190..7de3958a59 100644 --- a/src/components/structures/SearchBox.js +++ b/src/components/structures/SearchBox.js @@ -21,7 +21,7 @@ import { _t } from 'matrix-react-sdk/lib/languageHandler'; import KeyCode from 'matrix-react-sdk/lib/KeyCode'; import sdk from 'matrix-react-sdk'; import dis from 'matrix-react-sdk/lib/dispatcher'; -import RateLimitedFunc from 'matrix-react-sdk/lib/ratelimitedfunc'; +import rate_limited_func from 'matrix-react-sdk/lib/ratelimitedfunc'; import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton'; module.exports = React.createClass({ @@ -68,7 +68,7 @@ module.exports = React.createClass({ this.onSearch(); }, - onSearch: new RateLimitedFunc( + onSearch: new rate_limited_func( function() { this.props.onSearch(this.refs.search.value); }, From 0f8a2554dc85dc54c56e551373ef580818f52b4d Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 13 Jul 2017 00:18:10 +0100 Subject: [PATCH 150/202] Enable colours for karma test output I don't really know why we disable colours here. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 83d9bd16a8..3b4c16db9c 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "lintall": "eslint src/ test/", "clean": "rimraf lib webapp electron_app/dist", "prepublish": "npm run build:compile", - "test": "karma start --single-run=true --autoWatch=false --browsers ChromeHeadless --colors=false", + "test": "karma start --single-run=true --autoWatch=false --browsers ChromeHeadless", "test-multi": "karma start" }, "dependencies": { From b2403d59b79192900ab6becf7969c74805d0ed24 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 13 Jul 2017 00:18:49 +0100 Subject: [PATCH 151/202] loading tests: wait for login component Rather than a fixed delay, use matrix-react-test-utils to wait for the login component to appear. Hopefully this will deflakify some tests. --- package.json | 1 + test/app-tests/loading.js | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 3b4c16db9c..88c55bcd58 100644 --- a/package.json +++ b/package.json @@ -121,6 +121,7 @@ "karma-mocha": "^0.2.2", "karma-webpack": "^1.7.0", "matrix-mock-request": "^1.0.0", + "matrix-react-test-utils": "^0.2.0", "minimist": "^1.2.0", "mkdirp": "^0.5.1", "mocha": "^2.4.5", diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index d01836a36a..445105ddf4 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -23,6 +23,7 @@ import ReactDOM from 'react-dom'; import ReactTestUtils from 'react-addons-test-utils'; import expect from 'expect'; import q from 'q'; +import MatrixReactTestUtils from 'matrix-react-test-utils'; import jssdk from 'matrix-js-sdk'; @@ -183,11 +184,8 @@ describe('loading:', function () { return httpBackend.flush(); }).then(() => { // Wait for another trip around the event loop for the UI to update - return q.delay(10); + return awaitLoginComponent(matrixChat); }).then(() => { - // we expect a single component following session load - ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.login.Login')); expect(windowLocation.hash).toEqual("#/login"); }).done(done, done); }); @@ -232,7 +230,7 @@ describe('loading:', function () { uriFragment: "#/login", }); - return q.delay(100).then(() => { + return awaitLoginComponent(matrixChat).then(() => { // we expect a single component ReactTestUtils.findRenderedComponentWithType( matrixChat, sdk.getComponent('structures.login.Login')); @@ -366,7 +364,7 @@ describe('loading:', function () { }); // give the UI a chance to display - return q.delay(50); + return awaitLoginComponent(matrixChat); }); it('shows a login view', function() { @@ -530,7 +528,7 @@ describe('loading:', function () { dis.dispatch({ action: 'start_login' }); - return q.delay(1); + return awaitLoginComponent(matrixChat); }); }); @@ -607,7 +605,6 @@ describe('loading:', function () { }); }); - // check that we have a Login component, send a 'user:pass' login, // and await the HTTP requests. function completeLogin(matrixChat) { @@ -723,3 +720,9 @@ function awaitRoomView(matrixChat, retryLimit, retryCount) { matrixChat, sdk.getComponent('structures.RoomView')); return q(); } + +function awaitLoginComponent(matrixChat, attempts) { + return MatrixReactTestUtils.waitForRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.login.Login'), attempts, + ); +} From 10decf95f633a76d60898589bb4fa4a16eea8497 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 13 Jul 2017 00:48:31 +0100 Subject: [PATCH 152/202] replace imports of `q` with bluebird update `package.json` ``` find src test -name '*.js' | xargs perl -i -pe 'if (/require\(.[qQ].\)/) { $_ = "import Promise from '\''bluebird'\'';\n"; }' find src test -name '*.js' | xargs perl -i -pe 'if (/import [qQ] /) { $_ = "import Promise from '\''bluebird'\'';\n"; }' ``` --- package.json | 2 +- src/VectorConferenceHandler.js | 2 +- src/components/structures/RoomDirectory.js | 2 +- src/components/views/context_menus/RoomTileContextMenu.js | 2 +- src/components/views/settings/Notifications.js | 2 +- src/vector/index.js | 2 +- src/vector/platform/ElectronPlatform.js | 2 +- src/vector/platform/WebPlatform.js | 2 +- src/vector/rageshake.js | 2 +- src/vector/submit-rageshake.js | 2 +- test/app-tests/joining.js | 2 +- test/app-tests/loading.js | 2 +- test/test-utils.js | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 83d9bd16a8..06cd786b15 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "dependencies": { "babel-polyfill": "^6.5.0", "babel-runtime": "^6.11.6", + "bluebird": "^3.5.0", "browser-request": "^0.3.3", "classnames": "^2.1.2", "draft-js": "^0.8.1", @@ -69,7 +70,6 @@ "matrix-react-sdk": "0.9.7", "modernizr": "^3.1.0", "pako": "^1.0.5", - "q": "^1.4.1", "react": "^15.4.0", "react-dnd": "^2.1.4", "react-dnd-html5-backend": "^2.1.2", diff --git a/src/VectorConferenceHandler.js b/src/VectorConferenceHandler.js index f34a7b732b..807fbba0b7 100644 --- a/src/VectorConferenceHandler.js +++ b/src/VectorConferenceHandler.js @@ -16,7 +16,7 @@ limitations under the License. "use strict"; -var q = require("q"); +import Promise from 'bluebird'; var Matrix = require("matrix-js-sdk"); var Room = Matrix.Room; var CallHandler = require('matrix-react-sdk/lib/CallHandler'); diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js index e7d68c39f6..f487bbd196 100644 --- a/src/components/structures/RoomDirectory.js +++ b/src/components/structures/RoomDirectory.js @@ -28,7 +28,7 @@ var linkify = require('linkifyjs'); var linkifyString = require('linkifyjs/string'); var linkifyMatrix = require('matrix-react-sdk/lib/linkify-matrix'); var sanitizeHtml = require('sanitize-html'); -var q = require('q'); +import Promise from 'bluebird'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; diff --git a/src/components/views/context_menus/RoomTileContextMenu.js b/src/components/views/context_menus/RoomTileContextMenu.js index a7b19689fe..f4c369e021 100644 --- a/src/components/views/context_menus/RoomTileContextMenu.js +++ b/src/components/views/context_menus/RoomTileContextMenu.js @@ -17,7 +17,7 @@ limitations under the License. 'use strict'; -import q from 'q'; +import Promise from 'bluebird'; import React from 'react'; import classNames from 'classnames'; import sdk from 'matrix-react-sdk'; diff --git a/src/components/views/settings/Notifications.js b/src/components/views/settings/Notifications.js index 1b8de52d9d..12f77ba7f4 100644 --- a/src/components/views/settings/Notifications.js +++ b/src/components/views/settings/Notifications.js @@ -17,7 +17,7 @@ limitations under the License. 'use strict'; var React = require('react'); import { _t, _tJsx } from 'matrix-react-sdk/lib/languageHandler'; -var q = require("q"); +import Promise from 'bluebird'; var sdk = require('matrix-react-sdk'); var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); var UserSettingsStore = require('matrix-react-sdk/lib/UserSettingsStore'); diff --git a/src/vector/index.js b/src/vector/index.js index 81d329c004..fa640c59e4 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -65,7 +65,7 @@ var sdk = require("matrix-react-sdk"); const PlatformPeg = require("matrix-react-sdk/lib/PlatformPeg"); sdk.loadSkin(require('../component-index')); var VectorConferenceHandler = require('../VectorConferenceHandler'); -var q = require('q'); +import Promise from 'bluebird'; var request = require('browser-request'); import * as UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore'; import * as languageHandler from 'matrix-react-sdk/lib/languageHandler'; diff --git a/src/vector/platform/ElectronPlatform.js b/src/vector/platform/ElectronPlatform.js index 4f0ffae733..809abccd19 100644 --- a/src/vector/platform/ElectronPlatform.js +++ b/src/vector/platform/ElectronPlatform.js @@ -20,7 +20,7 @@ limitations under the License. import VectorBasePlatform, {updateCheckStatusEnum} from './VectorBasePlatform'; import dis from 'matrix-react-sdk/lib/dispatcher'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; -import q from 'q'; +import Promise from 'bluebird'; import {remote, ipcRenderer} from 'electron'; import rageshake from '../rageshake'; diff --git a/src/vector/platform/WebPlatform.js b/src/vector/platform/WebPlatform.js index ae1e54b307..5946a57ac8 100644 --- a/src/vector/platform/WebPlatform.js +++ b/src/vector/platform/WebPlatform.js @@ -21,7 +21,7 @@ import VectorBasePlatform, {updateCheckStatusEnum} from './VectorBasePlatform'; import request from 'browser-request'; import dis from 'matrix-react-sdk/lib/dispatcher.js'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; -import q from 'q'; +import Promise from 'bluebird'; import url from 'url'; import UAParser from 'ua-parser-js'; diff --git a/src/vector/rageshake.js b/src/vector/rageshake.js index 07726f6834..05f00d659e 100644 --- a/src/vector/rageshake.js +++ b/src/vector/rageshake.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import q from "q"; +import Promise from 'bluebird'; // This module contains all the code needed to log the console, persist it to // disk and submit bug reports. Rationale is as follows: diff --git a/src/vector/submit-rageshake.js b/src/vector/submit-rageshake.js index c6c551c61f..04fe69f6ee 100644 --- a/src/vector/submit-rageshake.js +++ b/src/vector/submit-rageshake.js @@ -15,7 +15,7 @@ limitations under the License. */ import pako from 'pako'; -import q from "q"; +import Promise from 'bluebird'; import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg'; import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg'; diff --git a/test/app-tests/joining.js b/test/app-tests/joining.js index 11fd3d4810..2f7c60707c 100644 --- a/test/app-tests/joining.js +++ b/test/app-tests/joining.js @@ -33,7 +33,7 @@ var React = require('react'); var ReactDOM = require('react-dom'); var ReactTestUtils = require('react-addons-test-utils'); var expect = require('expect'); -var q = require('q'); +import Promise from 'bluebird'; var test_utils = require('../test-utils'); var MockHttpBackend = require('matrix-mock-request'); diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index d01836a36a..d517c05f49 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -22,7 +22,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import ReactTestUtils from 'react-addons-test-utils'; import expect from 'expect'; -import q from 'q'; +import Promise from 'bluebird'; import jssdk from 'matrix-js-sdk'; diff --git a/test/test-utils.js b/test/test-utils.js index cda9a017b9..88ac9d99b6 100644 --- a/test/test-utils.js +++ b/test/test-utils.js @@ -1,6 +1,6 @@ "use strict"; -var q = require('q'); +import Promise from 'bluebird'; /** * Perform common actions before each test case, e.g. printing the test case From b29b4a959b8ea7f793e0d6494fb011a340ac7463 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 13 Jul 2017 00:32:07 +0100 Subject: [PATCH 153/202] q(...) -> Promise.resolve ``` find src test -name '*.js' | xargs perl -i -pe 's/\b[qQ]\(/Promise.resolve(/' ``` --- src/VectorConferenceHandler.js | 4 ++-- src/components/structures/RoomDirectory.js | 4 ++-- src/vector/platform/ElectronPlatform.js | 4 ++-- src/vector/platform/WebPlatform.js | 2 +- test/app-tests/joining.js | 2 +- test/app-tests/loading.js | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/VectorConferenceHandler.js b/src/VectorConferenceHandler.js index 807fbba0b7..de1aa2332d 100644 --- a/src/VectorConferenceHandler.js +++ b/src/VectorConferenceHandler.js @@ -57,7 +57,7 @@ ConferenceCall.prototype._joinConferenceUser = function() { } var member = groupRoom.getMember(this.confUserId); if (member && member.membership === "join") { - return q(); + return Promise.resolve(); } return this.client.invite(this.groupRoomId, this.confUserId); }; @@ -75,7 +75,7 @@ ConferenceCall.prototype._getConferenceUserRoom = function() { } } if (confRoom) { - return q(confRoom); + return Promise.resolve(confRoom); } return this.client.createRoom({ preset: "private_chat", diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js index f487bbd196..ea3aa5a29c 100644 --- a/src/components/structures/RoomDirectory.js +++ b/src/components/structures/RoomDirectory.js @@ -117,7 +117,7 @@ module.exports = React.createClass({ }, getMoreRooms: function() { - if (!MatrixClientPeg.get()) return q(); + if (!MatrixClientPeg.get()) return Promise.resolve(); const my_filter_string = this.state.filterString; const my_server = this.state.roomServer; @@ -266,7 +266,7 @@ module.exports = React.createClass({ }, onFillRequest: function(backwards) { - if (backwards || !this.nextBatch) return q(false); + if (backwards || !this.nextBatch) return Promise.resolve(false); return this.getMoreRooms(); }, diff --git a/src/vector/platform/ElectronPlatform.js b/src/vector/platform/ElectronPlatform.js index 809abccd19..8e97f23862 100644 --- a/src/vector/platform/ElectronPlatform.js +++ b/src/vector/platform/ElectronPlatform.js @@ -173,7 +173,7 @@ export default class ElectronPlatform extends VectorBasePlatform { } getAppVersion(): Promise { - return q(remote.app.getVersion()); + return Promise.resolve(remote.app.getVersion()); } startUpdateCheck() { @@ -201,7 +201,7 @@ export default class ElectronPlatform extends VectorBasePlatform { isElectron(): boolean { return true; } requestNotificationPermission(): Promise { - return q('granted'); + return Promise.resolve('granted'); } reload() { diff --git a/src/vector/platform/WebPlatform.js b/src/vector/platform/WebPlatform.js index 5946a57ac8..191876326d 100644 --- a/src/vector/platform/WebPlatform.js +++ b/src/vector/platform/WebPlatform.js @@ -132,7 +132,7 @@ export default class WebPlatform extends VectorBasePlatform { getAppVersion(): Promise { if (this.runningVersion !== null) { - return q(this.runningVersion); + return Promise.resolve(this.runningVersion); } return this._getVersion(); } diff --git a/test/app-tests/joining.js b/test/app-tests/joining.js index 2f7c60707c..6788b5342d 100644 --- a/test/app-tests/joining.js +++ b/test/app-tests/joining.js @@ -106,7 +106,7 @@ describe('joining a room', function () { .respond(200, {}); function awaitSync(attempts) { if (syncDone) { - return q(); + return Promise.resolve(); } if (!attempts) { throw new Error("Gave up waiting for /sync") diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index d517c05f49..e3291b0b9b 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -683,7 +683,7 @@ function awaitSyncingSpinner(matrixChat, retryLimit, retryCount) { // state looks good, check the rendered output assertAtSyncingSpinner(matrixChat); - return q(); + return Promise.resolve(); } function assertAtSyncingSpinner(matrixChat) { @@ -721,5 +721,5 @@ function awaitRoomView(matrixChat, retryLimit, retryCount) { // state looks good, check the rendered output ReactTestUtils.findRenderedComponentWithType( matrixChat, sdk.getComponent('structures.RoomView')); - return q(); + return Promise.resolve(); } From d5b550f89acab6c7016400174f19ac7cadc17208 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 13 Jul 2017 00:33:28 +0100 Subject: [PATCH 154/202] replace q method calls with bluebird ones ``` find src test -name '*.js' | xargs perl -i -pe 's/q\.(all|defer|reject|delay|try|isFulfilled)\(/Promise.$1(/' ``` --- src/VectorConferenceHandler.js | 2 +- .../context_menus/RoomTileContextMenu.js | 4 +-- .../views/settings/Notifications.js | 10 +++--- src/vector/index.js | 2 +- src/vector/platform/WebPlatform.js | 4 +-- src/vector/submit-rageshake.js | 2 +- test/app-tests/joining.js | 12 +++---- test/app-tests/loading.js | 34 +++++++++---------- 8 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/VectorConferenceHandler.js b/src/VectorConferenceHandler.js index de1aa2332d..933f59937e 100644 --- a/src/VectorConferenceHandler.js +++ b/src/VectorConferenceHandler.js @@ -53,7 +53,7 @@ ConferenceCall.prototype._joinConferenceUser = function() { // Make sure the conference user is in the group chat room var groupRoom = this.client.getRoom(this.groupRoomId); if (!groupRoom) { - return q.reject("Bad group room ID"); + return Promise.reject("Bad group room ID"); } var member = groupRoom.getMember(this.confUserId); if (member && member.membership === "join") { diff --git a/src/components/views/context_menus/RoomTileContextMenu.js b/src/components/views/context_menus/RoomTileContextMenu.js index f4c369e021..4d08e8332e 100644 --- a/src/components/views/context_menus/RoomTileContextMenu.js +++ b/src/components/views/context_menus/RoomTileContextMenu.js @@ -61,7 +61,7 @@ module.exports = React.createClass({ const roomId = this.props.room.roomId; var cli = MatrixClientPeg.get(); if (!cli.isGuest()) { - q.delay(500).then(function() { + Promise.delay(500).then(function() { if (tagNameOff !== null && tagNameOff !== undefined) { cli.deleteRoomTag(roomId, tagNameOff).finally(function() { // Close the context menu @@ -212,7 +212,7 @@ module.exports = React.createClass({ RoomNotifs.setRoomNotifsState(this.props.room.roomId, newState).done(() => { // delay slightly so that the user can see their state change // before closing the menu - return q.delay(500).then(() => { + return Promise.delay(500).then(() => { if (this._unmounted) return; // Close the context menu if (this.props.onFinished) { diff --git a/src/components/views/settings/Notifications.js b/src/components/views/settings/Notifications.js index 12f77ba7f4..e8ee543457 100644 --- a/src/components/views/settings/Notifications.js +++ b/src/components/views/settings/Notifications.js @@ -236,7 +236,7 @@ module.exports = React.createClass({ } } - q.all(deferreds).done(function() { + Promise.all(deferreds).done(function() { self._refreshFromServer(); }, function(error) { var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); @@ -306,7 +306,7 @@ module.exports = React.createClass({ } } - q.all(deferreds).done(function(resps) { + Promise.all(deferreds).done(function(resps) { self._refreshFromServer(); }, function(error) { var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); @@ -361,7 +361,7 @@ module.exports = React.createClass({ } // Then, add the new ones - q.all(removeDeferreds).done(function(resps) { + Promise.all(removeDeferreds).done(function(resps) { var deferreds = []; var pushRuleVectorStateKind = self.state.vectorContentRules.vectorState; @@ -399,7 +399,7 @@ module.exports = React.createClass({ } } - q.all(deferreds).done(function(resps) { + Promise.all(deferreds).done(function(resps) { self._refreshFromServer(); }, onError); }, onError); @@ -594,7 +594,7 @@ module.exports = React.createClass({ self.setState({pushers: resp.pushers}); }); - q.all([pushRulesPromise, pushersPromise]).then(function() { + Promise.all([pushRulesPromise, pushersPromise]).then(function() { self.setState({ phase: self.phases.DISPLAY }); diff --git a/src/vector/index.js b/src/vector/index.js index fa640c59e4..0cf8563f16 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -188,7 +188,7 @@ var makeRegistrationUrl = function(params) { window.addEventListener('hashchange', onHashChange); function getConfig() { - let deferred = q.defer(); + let deferred = Promise.defer(); request( { method: "GET", url: "config.json" }, diff --git a/src/vector/platform/WebPlatform.js b/src/vector/platform/WebPlatform.js index 191876326d..b88ee93f1d 100644 --- a/src/vector/platform/WebPlatform.js +++ b/src/vector/platform/WebPlatform.js @@ -68,7 +68,7 @@ export default class WebPlatform extends VectorBasePlatform { // annoyingly, the latest spec says this returns a // promise, but this is only supported in Chrome 46 // and Firefox 47, so adapt the callback API. - const defer = q.defer(); + const defer = Promise.defer(); global.Notification.requestPermission((result) => { defer.resolve(result); }); @@ -103,7 +103,7 @@ export default class WebPlatform extends VectorBasePlatform { } _getVersion(): Promise { - const deferred = q.defer(); + const deferred = Promise.defer(); // We add a cachebuster to the request to make sure that we know about // the most recent version on the origin server. That might not diff --git a/src/vector/submit-rageshake.js b/src/vector/submit-rageshake.js index 04fe69f6ee..b66ec9abe6 100644 --- a/src/vector/submit-rageshake.js +++ b/src/vector/submit-rageshake.js @@ -100,7 +100,7 @@ export default async function sendBugReport(bugReportEndpoint, opts) { } function _submitReport(endpoint, body, progressCallback) { - const deferred = q.defer(); + const deferred = Promise.defer(); const req = new XMLHttpRequest(); req.open("POST", endpoint); diff --git a/test/app-tests/joining.js b/test/app-tests/joining.js index 6788b5342d..34acd26aeb 100644 --- a/test/app-tests/joining.js +++ b/test/app-tests/joining.js @@ -118,7 +118,7 @@ describe('joining a room', function () { // wait for the directory requests httpBackend.when('POST', '/publicRooms').respond(200, {chunk: []}); httpBackend.when('GET', '/thirdparty/protocols').respond(200, {}); - return q.all([ + return Promise.all([ httpBackend.flush('/thirdparty/protocols'), httpBackend.flush('/publicRooms'), ]); @@ -139,14 +139,14 @@ describe('joining a room', function () { httpBackend.when('GET', '/rooms/'+encodeURIComponent(ROOM_ID)+"/initialSync") .respond(401, {errcode: 'M_GUEST_ACCESS_FORBIDDEN'}); - return q.all([ + return Promise.all([ httpBackend.flush('/directory/room/'+encodeURIComponent(ROOM_ALIAS), 1, 200), httpBackend.flush('/rooms/'+encodeURIComponent(ROOM_ID)+"/initialSync", 1, 200), ]); }).then(() => { httpBackend.verifyNoOutstandingExpectation(); - return q.delay(1); + return Promise.delay(1); }).then(() => { // we should now have a roomview, with a preview bar roomView = ReactTestUtils.findRenderedComponentWithType( @@ -164,14 +164,14 @@ describe('joining a room', function () { .respond(200, {room_id: ROOM_ID}); }).then(() => { // wait for the join request to be made - return q.delay(1); + return Promise.delay(1); }).then(() => { // and again, because the state update has to go to the store and // then one dispatch within the store, then to the view // XXX: This is *super flaky*: a better way would be to declare // that we expect a certain state transition to happen, then wait // for that transition to occur. - return q.delay(1); + return Promise.delay(1); }).then(() => { // the roomview should now be loading expect(roomView.state.room).toBe(null); @@ -186,7 +186,7 @@ describe('joining a room', function () { }).then(() => { httpBackend.verifyNoOutstandingExpectation(); - return q.delay(1); + return Promise.delay(1); }).then(() => { // We've joined, expect this to false expect(roomView.state.joining).toBe(false); diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index e3291b0b9b..558cbc5e97 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -103,7 +103,7 @@ describe('loading:', function () { toString: function() { return this.search + this.hash; }, }; - let tokenLoginCompleteDefer = q.defer(); + let tokenLoginCompleteDefer = Promise.defer(); tokenLoginCompletePromise = tokenLoginCompleteDefer.promise; function onNewScreen(screen) { @@ -171,7 +171,7 @@ describe('loading:', function () { it('gives a login panel by default', function (done) { loadApp(); - q.delay(1).then(() => { + Promise.delay(1).then(() => { // at this point, we're trying to do a guest registration; // we expect a spinner assertAtLoadingSpinner(matrixChat); @@ -183,7 +183,7 @@ describe('loading:', function () { return httpBackend.flush(); }).then(() => { // Wait for another trip around the event loop for the UI to update - return q.delay(10); + return Promise.delay(10); }).then(() => { // we expect a single component following session load ReactTestUtils.findRenderedComponentWithType( @@ -197,7 +197,7 @@ describe('loading:', function () { uriFragment: "#/room/!room:id", }); - q.delay(1).then(() => { + Promise.delay(1).then(() => { // at this point, we're trying to do a guest registration; // we expect a spinner assertAtLoadingSpinner(matrixChat); @@ -209,7 +209,7 @@ describe('loading:', function () { return httpBackend.flush(); }).then(() => { // Wait for another trip around the event loop for the UI to update - return q.delay(10); + return Promise.delay(10); }).then(() => { return completeLogin(matrixChat); }).then(() => { @@ -232,7 +232,7 @@ describe('loading:', function () { uriFragment: "#/login", }); - return q.delay(100).then(() => { + return Promise.delay(100).then(() => { // we expect a single component ReactTestUtils.findRenderedComponentWithType( matrixChat, sdk.getComponent('structures.login.Login')); @@ -339,7 +339,7 @@ describe('loading:', function () { }, }); - return q.delay(1).then(() => { + return Promise.delay(1).then(() => { // we expect a loading spinner while we log into the RTS assertAtLoadingSpinner(matrixChat); @@ -366,7 +366,7 @@ describe('loading:', function () { }); // give the UI a chance to display - return q.delay(50); + return Promise.delay(50); }); it('shows a login view', function() { @@ -403,7 +403,7 @@ describe('loading:', function () { it('shows a home page by default', function (done) { loadApp(); - q.delay(1).then(() => { + Promise.delay(1).then(() => { // at this point, we're trying to do a guest registration; // we expect a spinner assertAtLoadingSpinner(matrixChat); @@ -436,7 +436,7 @@ describe('loading:', function () { loadApp(); - q.delay(1).then(() => { + Promise.delay(1).then(() => { // at this point, we're trying to do a guest registration; // we expect a spinner assertAtLoadingSpinner(matrixChat); @@ -471,7 +471,7 @@ describe('loading:', function () { loadApp({ uriFragment: "#/room/!room:id" }); - q.delay(1).then(() => { + Promise.delay(1).then(() => { // at this point, we're trying to do a guest registration; // we expect a spinner assertAtLoadingSpinner(matrixChat); @@ -530,7 +530,7 @@ describe('loading:', function () { dis.dispatch({ action: 'start_login' }); - return q.delay(1); + return Promise.delay(1); }); }); @@ -559,7 +559,7 @@ describe('loading:', function () { ReactTestUtils.Simulate.click(returnToApp); - return q.delay(1).then(() => { + return Promise.delay(1).then(() => { // we should be straight back into the home page ReactTestUtils.findRenderedComponentWithType( matrixChat, sdk.getComponent('structures.HomePage')); @@ -574,7 +574,7 @@ describe('loading:', function () { queryString: "?loginToken=secretToken&homeserver=https%3A%2F%2Fhomeserver&identityServer=https%3A%2F%2Fidserver", }); - q.delay(1).then(() => { + Promise.delay(1).then(() => { // we expect a spinner while we're logging in assertAtLoadingSpinner(matrixChat); @@ -629,7 +629,7 @@ describe('loading:', function () { return httpBackend.flush().then(() => { // Wait for another trip around the event loop for the UI to update - return q.delay(1); + return Promise.delay(1); }).then(() => { // we expect a spinner ReactTestUtils.findRenderedComponentWithType( @@ -674,7 +674,7 @@ function awaitSyncingSpinner(matrixChat, retryLimit, retryCount) { } // loading can take quite a long time, because we delete the // indexedDB store. - return q.delay(5).then(() => { + return Promise.delay(5).then(() => { return awaitSyncingSpinner(matrixChat, retryLimit, retryCount + 1); }); } @@ -711,7 +711,7 @@ function awaitRoomView(matrixChat, retryLimit, retryCount) { throw new Error("MatrixChat still not ready after " + retryCount + " tries"); } - return q.delay(0).then(() => { + return Promise.delay(0).then(() => { return awaitRoomView(matrixChat, retryLimit, retryCount + 1); }); } From 4c5b5ca0ba8cd55316229b4d0bc6b697dfc24022 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 13 Jul 2017 00:37:04 +0100 Subject: [PATCH 155/202] replace `q.Promise` with `new Promise` --- src/vector/rageshake.js | 8 ++++---- test/test-utils.js | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/vector/rageshake.js b/src/vector/rageshake.js index 05f00d659e..d097741471 100644 --- a/src/vector/rageshake.js +++ b/src/vector/rageshake.js @@ -116,7 +116,7 @@ class IndexedDBLogStore { */ connect() { let req = this.indexedDB.open("logs"); - return q.Promise((resolve, reject) => { + return new Promise((resolve, reject) => { req.onsuccess = (event) => { this.db = event.target.result; // Periodically flush logs to local storage / indexeddb @@ -193,7 +193,7 @@ class IndexedDBLogStore { } // there is no flush promise or there was but it has finished, so do // a brand new one, destroying the chain which may have been built up. - this.flushPromise = q.Promise((resolve, reject) => { + this.flushPromise = new Promise((resolve, reject) => { if (!this.db) { // not connected yet or user rejected access for us to r/w to // the db. @@ -277,7 +277,7 @@ class IndexedDBLogStore { } function deleteLogs(id) { - return q.Promise((resolve, reject) => { + return new Promise((resolve, reject) => { const txn = db.transaction( ["logs", "logslastmod"], "readwrite" ); @@ -375,7 +375,7 @@ class IndexedDBLogStore { */ function selectQuery(store, keyRange, resultMapper) { const query = store.openCursor(keyRange); - return q.Promise((resolve, reject) => { + return new Promise((resolve, reject) => { let results = []; query.onerror = (event) => { reject(new Error("Query failed: " + event.target.errorCode)); diff --git a/test/test-utils.js b/test/test-utils.js index 88ac9d99b6..007883df69 100644 --- a/test/test-utils.js +++ b/test/test-utils.js @@ -28,7 +28,7 @@ export function browserSupportsWebRTC() { } export function deleteIndexedDB(dbName) { - return new q.Promise((resolve, reject) => { + return new Promise((resolve, reject) => { if (!window.indexedDB) { resolve(); return; From 1d2d086a58f6887f91c166f98e4314ebd2fa8c95 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 13 Jul 2017 00:41:18 +0100 Subject: [PATCH 156/202] Replace q.allSettled() Bluebird doesn't have an `allSettled` method, so instead catch the exceptions and use `all`. --- src/components/views/settings/Notifications.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/views/settings/Notifications.js b/src/components/views/settings/Notifications.js index e8ee543457..11ca2e39d2 100644 --- a/src/components/views/settings/Notifications.js +++ b/src/components/views/settings/Notifications.js @@ -431,7 +431,9 @@ module.exports = React.createClass({ 'global', kind, LEGACY_RULES[rule.rule_id], portLegacyActions(rule.actions) ).then( function() { return cli.deletePushRule('global', kind, rule.rule_id); - }) + }).catch( (e) => { + console.warn(`Error when porting legacy rule: ${e}`); + }); }(kind, rule)); } } @@ -440,7 +442,7 @@ module.exports = React.createClass({ if (needsUpdate.length > 0) { // If some of the rules need to be ported then wait for the porting // to happen and then fetch the rules again. - return q.allSettled(needsUpdate).then( function() { + return q.all(needsUpdate).then( function() { return cli.getPushRules(); }); } else { From 69eb1a49d45e28381df59a3f5c1018763807f611 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 13 Jul 2017 00:56:13 +0100 Subject: [PATCH 157/202] Fix a broken test turns out that you could call defer.resolve on q defers as an unbound function, whereas that doesn't work with bluebird promises. --- test/app-tests/loading.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index 558cbc5e97..0161a8262f 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -139,7 +139,7 @@ describe('loading:', function () { realQueryParams={params} startingFragmentQueryParams={fragParts.params} enableGuest={true} - onTokenLoginCompleted={tokenLoginCompleteDefer.resolve} + onTokenLoginCompleted={() => tokenLoginCompleteDefer.resolve()} initialScreenAfterLogin={getScreenFromLocation(windowLocation)} makeRegistrationUrl={() => {throw new Error('Not implemented');}} />, parentDiv From e15c8e473fd54a510947d28d75068ff5a6deaa23 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Thu, 13 Jul 2017 09:44:19 +0100 Subject: [PATCH 158/202] AppTile menu bar button styling. --- .../css/matrix-react-sdk/views/rooms/_AppsDrawer.scss | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss index 0fcabac1f4..7d1ac62818 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss @@ -76,6 +76,16 @@ limitations under the License. .mx_AppTileMenuBarWidget { // pointer-events: none; cursor: pointer; + width: 10px; + height: 10px; + padding: 1px; + transition-duration: 500ms; + border: 1px solid transparent; +} + +.mx_AppTileMenuBarWidget:hover { + border: 1px solid $primary-hairline-color; + border-radius: 2px; } .mx_AppTileBody iframe { From f5c4d903e67ab852017eb30d867186b0de635f9e Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Thu, 13 Jul 2017 10:11:58 +0100 Subject: [PATCH 159/202] Remove CSS for TabComplete --- .../structures/_RoomStatusBar.scss | 25 --------- .../views/rooms/_TabCompleteBar.scss | 56 ------------------- 2 files changed, 81 deletions(-) delete mode 100644 src/skins/vector/css/matrix-react-sdk/views/rooms/_TabCompleteBar.scss diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_RoomStatusBar.scss b/src/skins/vector/css/matrix-react-sdk/structures/_RoomStatusBar.scss index 1ae2a47c86..d4b425ee44 100644 --- a/src/skins/vector/css/matrix-react-sdk/structures/_RoomStatusBar.scss +++ b/src/skins/vector/css/matrix-react-sdk/structures/_RoomStatusBar.scss @@ -140,11 +140,6 @@ limitations under the License. cursor: pointer; } -.mx_RoomStatusBar_tabCompleteBar { - padding-top: 10px; - color: $primary-fg-color; -} - .mx_RoomStatusBar_typingBar { height: 50px; line-height: 50px; @@ -155,26 +150,6 @@ limitations under the License. display: block; } -.mx_RoomStatusBar_tabCompleteWrapper { - display: flex; - height: 26px; -} - -.mx_RoomStatusBar_tabCompleteWrapper .mx_TabCompleteBar { - flex: 1 1 auto; -} - -.mx_RoomStatusBar_tabCompleteEol { - flex: 0 0 auto; - color: $accent-color; -} - -.mx_RoomStatusBar_tabCompleteEol object { - vertical-align: middle; - margin-right: 8px; - margin-top: -2px; -} - .mx_MatrixChat_useCompactLayout { .mx_RoomStatusBar { min-height: 40px; diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_TabCompleteBar.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_TabCompleteBar.scss deleted file mode 100644 index 5dcbd21a47..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_TabCompleteBar.scss +++ /dev/null @@ -1,56 +0,0 @@ -/* -Copyright 2015, 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_TabCompleteBar { - overflow: hidden; -} - -.mx_TabCompleteBar_item { - display: inline-block; - margin-right: 15px; - margin-bottom: 2px; - cursor: pointer; -} - -.mx_TabCompleteBar_command { - margin-right: 8px; - background-color: $accent-color; - padding-left: 8px; - padding-right: 8px; - padding-top: 2px; - padding-bottom: 2px; - margin-bottom: 6px; - border-radius: 30px; - position: relative; - top: 1px; -} - -.mx_TabCompleteBar_command .mx_TabCompleteBar_text { - opacity: 1.0; - vertical-align: initial; - color: $accent-fg-color; -} - -.mx_TabCompleteBar_item img { - margin-right: 8px; - vertical-align: middle; -} - -.mx_TabCompleteBar_text { - color: $primary-fg-color; - vertical-align: middle; - opacity: 0.5; -} From d9015150597dba9938a5fa523c9c2c18afe93891 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Thu, 13 Jul 2017 10:16:23 +0100 Subject: [PATCH 160/202] rethemedex --- src/skins/vector/css/_components.scss | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/skins/vector/css/_components.scss b/src/skins/vector/css/_components.scss index a8ac18781b..00c19b13da 100644 --- a/src/skins/vector/css/_components.scss +++ b/src/skins/vector/css/_components.scss @@ -41,6 +41,7 @@ @import "./matrix-react-sdk/views/messages/_RoomAvatarEvent.scss"; @import "./matrix-react-sdk/views/messages/_TextualEvent.scss"; @import "./matrix-react-sdk/views/messages/_UnknownBody.scss"; +@import "./matrix-react-sdk/views/rooms/_AppsDrawer.scss"; @import "./matrix-react-sdk/views/rooms/_Autocomplete.scss"; @import "./matrix-react-sdk/views/rooms/_EntityTile.scss"; @import "./matrix-react-sdk/views/rooms/_EventTile.scss"; @@ -56,9 +57,7 @@ @import "./matrix-react-sdk/views/rooms/_RoomSettings.scss"; @import "./matrix-react-sdk/views/rooms/_RoomTile.scss"; @import "./matrix-react-sdk/views/rooms/_SearchableEntityList.scss"; -@import "./matrix-react-sdk/views/rooms/_TabCompleteBar.scss"; @import "./matrix-react-sdk/views/rooms/_TopUnreadMessagesBar.scss"; -@import "./matrix-react-sdk/views/rooms/_AppsDrawer.scss"; @import "./matrix-react-sdk/views/settings/_DevicesPanel.scss"; @import "./matrix-react-sdk/views/settings/_IntegrationsManager.scss"; @import "./matrix-react-sdk/views/voip/_CallView.scss"; From 7238c4dfacd2fcb07cdc2a1454a6d5a378721c85 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 13 Jul 2017 11:33:25 +0100 Subject: [PATCH 161/202] Fix overlooked `q` --- src/components/views/settings/Notifications.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/settings/Notifications.js b/src/components/views/settings/Notifications.js index 11ca2e39d2..451a28b8ee 100644 --- a/src/components/views/settings/Notifications.js +++ b/src/components/views/settings/Notifications.js @@ -442,7 +442,7 @@ module.exports = React.createClass({ if (needsUpdate.length > 0) { // If some of the rules need to be ported then wait for the porting // to happen and then fetch the rules again. - return q.all(needsUpdate).then( function() { + return Promise.all(needsUpdate).then( function() { return cli.getPushRules(); }); } else { From 32ef273f9d386506bbabfd158f29262c6bbc110b Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 13 Jul 2017 13:23:10 +0100 Subject: [PATCH 162/202] use flushAllExpected in joining test It won't do much to help with the vm stopping for 300ms, but it should make the code and logs clearer. --- test/app-tests/joining.js | 34 ++++++++++------------------------ 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/test/app-tests/joining.js b/test/app-tests/joining.js index 34acd26aeb..56e2820045 100644 --- a/test/app-tests/joining.js +++ b/test/app-tests/joining.js @@ -100,29 +100,17 @@ describe('joining a room', function () { // wait for /sync to happen. This may take some time, as the client // has to initialise indexeddb. console.log("waiting for /sync"); - let syncDone = false; httpBackend.when('GET', '/sync') - .check((r) => {syncDone = true;}) .respond(200, {}); - function awaitSync(attempts) { - if (syncDone) { - return Promise.resolve(); - } - if (!attempts) { - throw new Error("Gave up waiting for /sync") - } - return httpBackend.flush().then(() => awaitSync(attempts-1)); - } - return awaitSync(10).then(() => { + return httpBackend.flushAllExpected().then(() => { // wait for the directory requests httpBackend.when('POST', '/publicRooms').respond(200, {chunk: []}); httpBackend.when('GET', '/thirdparty/protocols').respond(200, {}); - return Promise.all([ - httpBackend.flush('/thirdparty/protocols'), - httpBackend.flush('/publicRooms'), - ]); + return httpBackend.flushAllExpected(); }).then(() => { + console.log(`${Date.now()} App made requests for directory view; switching to a room.`); + var roomDir = ReactTestUtils.findRenderedComponentWithType( matrixChat, RoomDirectory); @@ -139,19 +127,17 @@ describe('joining a room', function () { httpBackend.when('GET', '/rooms/'+encodeURIComponent(ROOM_ID)+"/initialSync") .respond(401, {errcode: 'M_GUEST_ACCESS_FORBIDDEN'}); - return Promise.all([ - httpBackend.flush('/directory/room/'+encodeURIComponent(ROOM_ALIAS), 1, 200), - httpBackend.flush('/rooms/'+encodeURIComponent(ROOM_ID)+"/initialSync", 1, 200), - ]); + return httpBackend.flushAllExpected(); }).then(() => { - httpBackend.verifyNoOutstandingExpectation(); + console.log(`${Date.now()} App made room preview request`); - return Promise.delay(1); - }).then(() => { - // we should now have a roomview, with a preview bar + // we should now have a roomview roomView = ReactTestUtils.findRenderedComponentWithType( matrixChat, RoomView); + // the preview bar may take a tick to be displayed + return Promise.delay(1); + }).then(() => { const previewBar = ReactTestUtils.findRenderedComponentWithType( roomView, RoomPreviewBar); From 3ec4b257938fce76055612581e9cd07f38805af1 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 13 Jul 2017 17:34:47 +0100 Subject: [PATCH 163/202] Transform `async` functions to bluebird promises It turns out that the assertion made in https://github.com/vector-im/riot-web/pull/4565 about `async` functions returning bluebird promises was only correct when babel used an inline version of the `asyncToGenerator` helper; in react-sdk we are using `babel-transform-runtime` which means that we use a separate `babel-runtime/helpers/asyncToGenerator`, which returns a native (or core-js) Promise. This meant that we were still in the situation where some methods returned native Promises, and some bluebird ones, which is exactly the situation I wanted to resolve by switching to bluebird in the first place: in short, unless/until we get rid of all code which assumes Promises have a `done` method etc, we need to make sure that everything returns a bluebird promise. (Aside: there was debate over whether in the long term we should be trying to wean ourselves off bluebird promises by assuming all promises are native. The conclusion was that the complexity hit involved in doing so outweighed any benefit of a potential future migration away from bluebird). --- .babelrc | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.babelrc b/.babelrc index 8c7b66269d..6ba0e0dae0 100644 --- a/.babelrc +++ b/.babelrc @@ -1,4 +1,4 @@ { "presets": ["react", "es2015", "es2016"], - "plugins": ["transform-class-properties", "transform-object-rest-spread", "transform-async-to-generator", "transform-runtime", "add-module-exports"] + "plugins": ["transform-class-properties", "transform-object-rest-spread", "transform-async-to-bluebird", "transform-runtime", "add-module-exports"] } diff --git a/package.json b/package.json index 5c11197eac..2d346f04f2 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "babel-eslint": "^6.1.0", "babel-loader": "^6.2.5", "babel-plugin-add-module-exports": "^0.2.1", - "babel-plugin-transform-async-to-generator": "^6.16.0", + "babel-plugin-transform-async-to-bluebird": "^1.1.1", "babel-plugin-transform-class-properties": "^6.16.0", "babel-plugin-transform-object-rest-spread": "^6.16.0", "babel-plugin-transform-runtime": "^6.15.0", From e60bf48134cb31fca5461d38ac4d32311a42ad9c Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 13 Jul 2017 18:42:14 +0100 Subject: [PATCH 164/202] CSS for start of group edit support --- .../structures/_GroupView.scss | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss index e56da68d2f..7ca03c6a9e 100644 --- a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss +++ b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss @@ -24,12 +24,63 @@ limitations under the License. margin: auto; } +.mx_GroupView_header { + max-width: 960px; + margin: auto; + height: 70px; + align-items: center; + display: flex; + border-bottom: 1px solid #e5e5e5; + margin-bottom: 20px; +} + +.mx_GroupView_header_avatar, .mx_GroupView_header_info { + display: table-cell; +} + +.mx_GroupView_header_leftCol { + flex: 1; +} + +.mx_GroupView_saveButton, .mx_GroupView_cancelButton { + display: table-cell; +} + .mx_GroupView_header_groupid { font-weight: normal; font-size: initial; padding-left: 10px; } +.mx_GroupView_header_name { + vertical-align: middle; + width: 100%; + height: 31px; + overflow: hidden; + color: $primary-fg-color; + font-weight: bold; + font-size: 22px; + padding-left: 19px; + padding-right: 16px; + /* why isn't text-overflow working? */ + text-overflow: ellipsis; + border-bottom: 1px solid transparent; +} + +.mx_GroupView_header_shortDesc { + vertical-align: bottom; + float: left; + max-height: 42px; + color: $settings-grey-fg-color; + font-weight: 300; + font-size: 13px; + margin-left: 19px; + margin-right: 16px; + overflow: hidden; + text-overflow: ellipsis; + border-bottom: 1px solid transparent; +} + .mx_GroupView_featuredThings { margin-top: 20px; } @@ -50,3 +101,7 @@ limitations under the License. cursor: pointer; display: table-cell; } + +.mx_GroupView_uploadInput { + display: none; +} From 01d954e4ab9e84831de212adabeb0a237b445081 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Fri, 14 Jul 2017 14:45:44 +0100 Subject: [PATCH 165/202] Bump react to 15.6 to fix build problems matrix-react-test-tools requires react 15.6 or later, so make sure we require it in riot-web too. --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 2d346f04f2..c0c4c6a21b 100644 --- a/package.json +++ b/package.json @@ -70,10 +70,10 @@ "matrix-react-sdk": "0.9.7", "modernizr": "^3.1.0", "pako": "^1.0.5", - "react": "^15.4.0", + "react": "^15.6.0", "react-dnd": "^2.1.4", "react-dnd-html5-backend": "^2.1.2", - "react-dom": "^15.4.0", + "react-dom": "^15.6.0", "react-gemini-scrollbar": "matrix-org/react-gemini-scrollbar#5e97aef", "sanitize-html": "^1.11.1", "text-encoding-utf-8": "^1.0.1", @@ -135,7 +135,7 @@ "postcss-simple-vars": "^3.0.0", "postcss-strip-inline-comments": "^0.1.5", "react-addons-perf": "^15.4.0", - "react-addons-test-utils": "^15.4.0", + "react-addons-test-utils": "^15.6.0", "rimraf": "^2.4.3", "source-map-loader": "^0.1.5", "webpack": "^1.12.14", From 40a47f8c7a842297da51abd37528d87ea108a744 Mon Sep 17 00:00:00 2001 From: Kegsay Date: Fri, 14 Jul 2017 15:05:07 +0100 Subject: [PATCH 166/202] Allow Riot to load up different configs depending on the domain (#4575) Initially try to load `config.$domain.json` and only if that fails, load `config.json`. Configs are not muxxed in any way, it either entirely uses the domain config, or entirely uses `config.json`. --- src/vector/index.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/vector/index.js b/src/vector/index.js index 0cf8563f16..c0cb64102e 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -187,11 +187,11 @@ var makeRegistrationUrl = function(params) { window.addEventListener('hashchange', onHashChange); -function getConfig() { +function getConfig(configJsonFilename) { let deferred = Promise.defer(); request( - { method: "GET", url: "config.json" }, + { method: "GET", url: configJsonFilename }, (err, response, body) => { if (err || response.status < 200 || response.status >= 300) { // Lack of a config isn't an error, we should @@ -261,10 +261,20 @@ async function loadApp() { } } + // Load the config file. First try to load up a domain-specific config of the + // form "config.$domain.json" and if that fails, fall back to config.json. let configJson; let configError; try { - configJson = await getConfig(); + try { + configJson = await getConfig(`config.${document.domain}.json`); + // 404s succeed with an empty json config, so check that there are keys + if (Object.keys(configJson).length === 0) { + throw new Error(); // throw to enter the catch + } + } catch (e) { + configJson = await getConfig("config.json"); + } } catch (e) { configError = e; } From 8c9afc2dfdd885dd13bb1c92ffe19d65f8f61c1c Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 14 Jul 2017 15:39:46 +0100 Subject: [PATCH 167/202] Make GroupView more consistent with RoomView --- .../vector/css/matrix-react-sdk/structures/_GroupView.scss | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss index 7ca03c6a9e..9593546ffc 100644 --- a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss +++ b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss @@ -17,7 +17,6 @@ limitations under the License. .mx_GroupView { max-width: 960px; width: 100%; - margin: 20px auto; } .mx_GroupView_error { @@ -36,6 +35,7 @@ limitations under the License. .mx_GroupView_header_avatar, .mx_GroupView_header_info { display: table-cell; + vertical-align: middle; } .mx_GroupView_header_leftCol { @@ -74,7 +74,6 @@ limitations under the License. color: $settings-grey-fg-color; font-weight: 300; font-size: 13px; - margin-left: 19px; margin-right: 16px; overflow: hidden; text-overflow: ellipsis; From 0c31c62a62622ec88bfd6793b0bf6f11dd8a928c Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Fri, 14 Jul 2017 15:41:13 +0100 Subject: [PATCH 168/202] build fix: bump to mock-request 1.1 This should have happened with 32ef273f: now that we are using flushAllExpected, we nee matrix-mock-request 1.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c0c4c6a21b..1db1708e27 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "karma-junit-reporter": "^0.4.1", "karma-mocha": "^0.2.2", "karma-webpack": "^1.7.0", - "matrix-mock-request": "^1.0.0", + "matrix-mock-request": "^1.1.0", "matrix-react-test-utils": "^0.2.0", "minimist": "^1.2.0", "mkdirp": "^0.5.1", From 66ddf25977e5db4c5d253c9f564bdb9fec832027 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Fri, 14 Jul 2017 16:14:42 +0100 Subject: [PATCH 169/202] Deflake the joining test Just give the client longer to get started (it seems to be taking a long time to get started talking to indexeddb) --- package.json | 2 +- test/app-tests/joining.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1db1708e27..2b1d6e82d2 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "karma-junit-reporter": "^0.4.1", "karma-mocha": "^0.2.2", "karma-webpack": "^1.7.0", - "matrix-mock-request": "^1.1.0", + "matrix-mock-request": "^1.2.0", "matrix-react-test-utils": "^0.2.0", "minimist": "^1.2.0", "mkdirp": "^0.5.1", diff --git a/test/app-tests/joining.js b/test/app-tests/joining.js index 56e2820045..9e0a84c773 100644 --- a/test/app-tests/joining.js +++ b/test/app-tests/joining.js @@ -103,7 +103,9 @@ describe('joining a room', function () { httpBackend.when('GET', '/sync') .respond(200, {}); - return httpBackend.flushAllExpected().then(() => { + return httpBackend.flushAllExpected({ + timeout: 1000, + }).then(() => { // wait for the directory requests httpBackend.when('POST', '/publicRooms').respond(200, {chunk: []}); httpBackend.when('GET', '/thirdparty/protocols').respond(200, {}); From 38899c6011b0496ac5a4c1e30c7d176e8b07d215 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Fri, 14 Jul 2017 17:23:16 +0100 Subject: [PATCH 170/202] CSS for decorated matrix.to links in the composer --- .../matrix-react-sdk/views/elements/_RichText.scss | 14 +++++++++----- .../views/rooms/_MessageComposer.scss | 5 +++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss index 2dcd813692..55819dbb49 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss @@ -5,15 +5,19 @@ .mx_UserPill { color: white; background-color: $accent-color; - padding: 2px 8px; + padding: 1px 5px 0px 2px; border-radius: 16px; } +.mx_UserPill img, .mx_RoomPill img { + vertical-align: -2px; + margin-right: 1px +} + .mx_RoomPill { - background-color: white; - color: $accent-color; - border: 1px solid $accent-color; - padding: 2px 8px; + background-color: #aaa; + color: white; + padding: 1px 5px 0px 2px; border-radius: 16px; } diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss index 6c2216ddc6..43a5803099 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss @@ -100,6 +100,11 @@ limitations under the License. word-break: break-word; } +.mx_MessageComposer_input .DraftEditor-root .DraftEditor-editorContainer { + /* Ensure mx_UserPill and mx_RoomPill (see _RichText) are not obscured from the top */ + padding-top: 2px; +} + .mx_MessageComposer_input blockquote { color: $blockquote-fg-color; margin: 0 0 16px; From 54f44af494101be1793104284c087fb5a9817c7e Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 14 Jul 2017 17:23:44 +0100 Subject: [PATCH 171/202] Make editing prettier --- .../structures/_GroupView.scss | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss index 9593546ffc..f60effb6de 100644 --- a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss +++ b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss @@ -29,8 +29,6 @@ limitations under the License. height: 70px; align-items: center; display: flex; - border-bottom: 1px solid #e5e5e5; - margin-bottom: 20px; } .mx_GroupView_header_avatar, .mx_GroupView_header_info { @@ -38,6 +36,16 @@ limitations under the License. vertical-align: middle; } +.mx_GroupView_avatarPicker { + position: relative; +} + +.mx_GroupView_avatarPicker_edit { + position: absolute; + top: 50px; + left: 15px; +} + .mx_GroupView_header_leftCol { flex: 1; } @@ -67,6 +75,10 @@ limitations under the License. border-bottom: 1px solid transparent; } +.mx_GroupView_header_name input, .mx_GroupView_header_shortDesc input { + width: 400px; +} + .mx_GroupView_header_shortDesc { vertical-align: bottom; float: left; @@ -74,12 +86,33 @@ limitations under the License. color: $settings-grey-fg-color; font-weight: 300; font-size: 13px; + padding-left: 19px; margin-right: 16px; overflow: hidden; text-overflow: ellipsis; border-bottom: 1px solid transparent; } +.mx_GroupView_cancelButton { + padding-left: 8px; +} + +.mx_GroupView_cancelButton img { + position: relative; + top: 5px; +} + +.mx_GroupView_header_viewBottom { + border-bottom: 1px solid #e5e5e5; + height: 0; + margin-bottom: 20px; +} + +.mx_GroupView_header_editBottom { + height: 0; + margin-top: 20px; +} + .mx_GroupView_featuredThings { margin-top: 20px; } @@ -104,3 +137,8 @@ limitations under the License. .mx_GroupView_uploadInput { display: none; } + +.mx_GroupView_editLongDesc { + width: 100%; + height: 150px; +} From de0fd588b66bcae31d9b65242135c0f58dbaac38 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Fri, 14 Jul 2017 17:51:25 +0100 Subject: [PATCH 172/202] Add $rte-room-pill-color: #aaa --- .../vector/css/matrix-react-sdk/views/elements/_RichText.scss | 2 +- src/skins/vector/css/themes/_base.scss | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss index 55819dbb49..4fa083eb38 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss @@ -15,7 +15,7 @@ } .mx_RoomPill { - background-color: #aaa; + background-color: $rte-room-pill-color; color: white; padding: 1px 5px 0px 2px; border-radius: 16px; diff --git a/src/skins/vector/css/themes/_base.scss b/src/skins/vector/css/themes/_base.scss index fc24af93e2..9701a48ffa 100644 --- a/src/skins/vector/css/themes/_base.scss +++ b/src/skins/vector/css/themes/_base.scss @@ -78,6 +78,7 @@ $voip-accept-color: #80f480; $rte-bg-color: #e9e9e9; $rte-code-bg-color: rgba(0, 0, 0, 0.04); +$rte-room-pill-color: #aaa; // ******************** From 18a6ee5a52c25ee7ed6421142d089cfe34657bdb Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Fri, 14 Jul 2017 17:52:11 +0100 Subject: [PATCH 173/202] white -> #fff --- .../vector/css/matrix-react-sdk/views/elements/_RichText.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss index 4fa083eb38..e04f6972c4 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss @@ -3,7 +3,7 @@ // --Matthew .mx_UserPill { - color: white; + color: #fff; background-color: $accent-color; padding: 1px 5px 0px 2px; border-radius: 16px; @@ -16,7 +16,7 @@ .mx_RoomPill { background-color: $rte-room-pill-color; - color: white; + color: #fff; padding: 1px 5px 0px 2px; border-radius: 16px; } From a1b4b9992e25f6f2341e0bda7006b92930817587 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Fri, 14 Jul 2017 17:59:53 +0100 Subject: [PATCH 174/202] Use $accent-fg-color instead of #fff --- .../vector/css/matrix-react-sdk/views/elements/_RichText.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss index e04f6972c4..1392ec6435 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss @@ -3,7 +3,7 @@ // --Matthew .mx_UserPill { - color: #fff; + color: $accent-fg-color; background-color: $accent-color; padding: 1px 5px 0px 2px; border-radius: 16px; @@ -16,7 +16,7 @@ .mx_RoomPill { background-color: $rte-room-pill-color; - color: #fff; + color: $accent-fg-color; padding: 1px 5px 0px 2px; border-radius: 16px; } From f272961fbdc177e4c971476e877ace399474fc35 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Fri, 14 Jul 2017 23:30:47 +0100 Subject: [PATCH 175/202] Styling for beta testing icon. --- src/skins/vector/css/_common.scss | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/skins/vector/css/_common.scss b/src/skins/vector/css/_common.scss index 5b1d1de6f1..c52204c5e9 100644 --- a/src/skins/vector/css/_common.scss +++ b/src/skins/vector/css/_common.scss @@ -306,3 +306,23 @@ textarea { .changelog_text { font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; } + +.mx_Beta { + color: red; + margin-right: 10px; + position: relative; + top: -3px; + background-color: white; + padding: 0 4px; + border-radius: 3px; + border: 1px solid darkred; + cursor: help; + transition-duration: 200ms; + font-size: smaller; +} + +.mx_Beta:hover { + color: white; + border: 1px solid gray; + background-color: darkred; +} From 0e71ea7a5af6f5816335bd7b8dfa44c15eb19e38 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Mon, 17 Jul 2017 14:52:08 +0100 Subject: [PATCH 176/202] Make some adjustments to mx_UserPill and mx_RoomPill So that they can appear correctly in the body of a text message. --- .../views/elements/_RichText.scss | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss index 1392ec6435..9b1e9cd82b 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss @@ -2,23 +2,34 @@ // naming scheme; it's completely unclear where or how they're being used // --Matthew +.mx_UserPill, +.mx_RoomPill { + padding: 0px 5px 0px 2px; + border-radius: 16px; + display: inline-block; + height: 20px; + line-height: 20px; +} + +/* More specific to override `.markdown-body a` color */ +.mx_EventTile_content .markdown-body a.mx_UserPill, .mx_UserPill { color: $accent-fg-color; background-color: $accent-color; - padding: 1px 5px 0px 2px; - border-radius: 16px; -} - -.mx_UserPill img, .mx_RoomPill img { - vertical-align: -2px; - margin-right: 1px } +/* More specific to override `.markdown-body a` color */ +.mx_EventTile_content .markdown-body a.mx_RoomPill, .mx_RoomPill { background-color: $rte-room-pill-color; color: $accent-fg-color; - padding: 1px 5px 0px 2px; - border-radius: 16px; +} + +.mx_UserPill .mx_BaseAvatar, +.mx_RoomPill .mx_BaseAvatar { + position: relative; + top: 2px; + margin-right: 1px; } .mx_Markdown_BOLD { From 65b9086f18c8f0f3053e1c33096a3998b0060695 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 17 Jul 2017 17:20:11 +0100 Subject: [PATCH 177/202] Add group header button css --- .../css/matrix-react-sdk/structures/_GroupView.scss | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss index f60effb6de..f822cd2e6e 100644 --- a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss +++ b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss @@ -36,6 +36,16 @@ limitations under the License. vertical-align: middle; } +.mx_GroupHeader_button { + margin-left: 12px; + cursor: pointer; +} + +.mx_GroupHeader_button object { + // prevents clicks from being swallowed by svg in 'object' tag + pointer-events: none; +} + .mx_GroupView_avatarPicker { position: relative; } From e7ba618bbe30ffd506a7f6ab255f523eba5f291d Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Tue, 18 Jul 2017 15:33:41 +0100 Subject: [PATCH 179/202] fix text in code blocks on dark theme --- .../vector/css/matrix-react-sdk/views/rooms/_EventTile.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss index 7d8e4ba2b7..9e42917617 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss @@ -316,7 +316,7 @@ limitations under the License. font-family: inherit ! important; white-space: normal ! important; line-height: inherit ! important; - color: inherit; + // color: inherit; // unclear why we ever had this? it breaks plain code blocks on dark theme... font-size: 14px; } From b45108d80d17d6de79b9a8679977ff16ac307ef1 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Tue, 18 Jul 2017 15:50:28 +0100 Subject: [PATCH 180/202] ooooops, fix dark theme code blocks correctly --- .../css/matrix-react-sdk/views/rooms/_EventTile.scss | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss index 9e42917617..38da1cc1bc 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss @@ -316,7 +316,7 @@ limitations under the License. font-family: inherit ! important; white-space: normal ! important; line-height: inherit ! important; - // color: inherit; // unclear why we ever had this? it breaks plain code blocks on dark theme... + color: inherit; font-size: 14px; } @@ -331,7 +331,9 @@ limitations under the License. .mx_EventTile_content .markdown-body code { background-color: #f8f8f8; + color: #333; } + .mx_EventTile_copyButton { position: absolute; display: inline-block; @@ -343,14 +345,17 @@ limitations under the License. height: 19px; background-image: url($copy-button-url); } + .mx_EventTile_body pre { position: relative; border: 1px solid transparent; } + .mx_EventTile:hover .mx_EventTile_body pre { border: 1px solid $primary-hairline-color; } + .mx_EventTile_body pre:hover .mx_EventTile_copyButton { visibility: visible; From bd693768ccb36794a38eadcf896e8a3fb9f7eed2 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Tue, 18 Jul 2017 17:45:17 +0100 Subject: [PATCH 181/202] deliberately de-theme pre tags --- .../vector/css/matrix-react-sdk/views/rooms/_EventTile.scss | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss index 38da1cc1bc..cf148603ca 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss @@ -316,7 +316,7 @@ limitations under the License. font-family: inherit ! important; white-space: normal ! important; line-height: inherit ! important; - color: inherit; + color: inherit; // inherit the colour from the dark or light theme by default (but not for code blocks) font-size: 14px; } @@ -330,6 +330,7 @@ limitations under the License. } .mx_EventTile_content .markdown-body code { + // deliberate constants as we're behind an invert filter background-color: #f8f8f8; color: #333; } @@ -353,7 +354,7 @@ limitations under the License. .mx_EventTile:hover .mx_EventTile_body pre { - border: 1px solid $primary-hairline-color; + border: 1px solid #e5e5e5; // deliberate constant as we're behind an invert filter } .mx_EventTile_body pre:hover .mx_EventTile_copyButton From ccc30fb52e0eca8b1346d7a95f2831738a84b7d3 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 19 Jul 2017 09:25:53 +0100 Subject: [PATCH 182/202] Apply CSS to
 tags to distinguish them from each
 other

---
 .../css/matrix-react-sdk/views/rooms/_MessageComposer.scss  | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
index 43a5803099..98c803fd87 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
@@ -112,6 +112,12 @@ limitations under the License.
     border-left: 4px solid $blockquote-bar-color;
 }
 
+.mx_MessageComposer_input pre.public-DraftStyleDefault-pre pre {
+    background-color: $rte-code-bg-color;
+    border-radius: 3px;
+    padding: 10px;
+}
+
 .mx_MessageComposer_input textarea {
     display: block;
     width: 100%;

From 871c9e6d3e6586fef48deeb1c1db74a20d6b1749 Mon Sep 17 00:00:00 2001
From: Luke Barnard 
Date: Wed, 19 Jul 2017 11:02:51 +0100
Subject: [PATCH 183/202] Add bing mention pill CSS

Useful with https://github.com/matrix-org/matrix-react-sdk/pull/1234
---
 .../css/matrix-react-sdk/views/elements/_RichText.scss      | 6 +++++-
 src/skins/vector/css/themes/_base.scss                      | 1 +
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss
index 9b1e9cd82b..4c72939349 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss
@@ -14,8 +14,12 @@
 /* More specific to override `.markdown-body a` color */
 .mx_EventTile_content .markdown-body a.mx_UserPill,
 .mx_UserPill {
+    color: $primary-fg-color;
+}
+
+.mx_EventTile_highlight .mx_EventTile_content .markdown-body a.mx_UserPill_me {
     color: $accent-fg-color;
-    background-color: $accent-color;
+    background-color: $mention-user-pill-bg-color;
 }
 
 /* More specific to override `.markdown-body a` color */
diff --git a/src/skins/vector/css/themes/_base.scss b/src/skins/vector/css/themes/_base.scss
index 9701a48ffa..545334d3df 100644
--- a/src/skins/vector/css/themes/_base.scss
+++ b/src/skins/vector/css/themes/_base.scss
@@ -19,6 +19,7 @@ $focus-brightness: 125%;
 
 // red warning colour
 $warning-color: #ff0064;
+$mention-user-pill-bg-color: #ff0064;
 
 $preview-bar-bg-color: #f7f7f7;
 

From 53ae42ed6808060ac957864a2860156802e945fd Mon Sep 17 00:00:00 2001
From: Luke Barnard 
Date: Wed, 19 Jul 2017 14:11:22 +0100
Subject: [PATCH 184/202] Use `catch` instead of `fail` to handle room tag
 error

Because bluebird doesn't support fail
---
 src/components/views/rooms/DNDRoomTile.js | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/src/components/views/rooms/DNDRoomTile.js b/src/components/views/rooms/DNDRoomTile.js
index 7857da9dbe..2f521028cd 100644
--- a/src/components/views/rooms/DNDRoomTile.js
+++ b/src/components/views/rooms/DNDRoomTile.js
@@ -130,10 +130,7 @@ var roomTileSource = {
             if (newTag && newTag !== 'im.vector.fake.direct' &&
                 (item.targetList !== item.originalList || newOrder)
             ) {
-                //component.state.set({ spinner: component.state.spinner ? component.state.spinner++ : 1 });
-                MatrixClientPeg.get().setRoomTag(item.room.roomId, newTag, newOrder).finally(function() {
-                    //component.state.set({ spinner: component.state.spinner-- });
-                }).fail(function(err) {
+                MatrixClientPeg.get().setRoomTag(item.room.roomId, newTag, newOrder).catch(function(err) {
                     var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
                     console.error("Failed to add tag " + newTag + " to room: " + err);
                     Modal.createDialog(ErrorDialog, {

From 238afde00a5f2ecf891741485f2d6c857129b3b9 Mon Sep 17 00:00:00 2001
From: Richard van der Hoff 
Date: Thu, 20 Jul 2017 11:01:27 +0100
Subject: [PATCH 185/202] Increase the timeout for clearing indexeddbs

Chrome seems to take ages (like, 1500ms regularly) to clear out the indexeddbs,
and that's causing test timeouts. Bump the timeout to hack around it.

Also: clear both dbs in parallel (can't hurt, right?) and improve diagnostics
on the process.
---
 test/app-tests/loading.js | 9 +++++++--
 test/test-utils.js        | 6 ++++--
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js
index c7151aca21..2161987688 100644
--- a/test/app-tests/loading.js
+++ b/test/app-tests/loading.js
@@ -82,9 +82,14 @@ describe('loading:', function () {
         // unmounting should have cleared the MatrixClientPeg
         expect(MatrixClientPeg.get()).toBe(null);
 
+        // chrome seems to take *ages* to delete the indexeddbs.
+        this.timeout(10000);
+
         // clear the indexeddbs so we can start from a clean slate next time.
-        await test_utils.deleteIndexedDB('matrix-js-sdk:crypto');
-        await test_utils.deleteIndexedDB('matrix-js-sdk:riot-web-sync');
+        await Promise.all([
+            test_utils.deleteIndexedDB('matrix-js-sdk:crypto'),
+            test_utils.deleteIndexedDB('matrix-js-sdk:riot-web-sync'),
+        ]);
         console.log(`${Date.now()}: loading: afterEach complete`);
     });
 
diff --git a/test/test-utils.js b/test/test-utils.js
index 007883df69..a5b22febfe 100644
--- a/test/test-utils.js
+++ b/test/test-utils.js
@@ -34,7 +34,8 @@ export function deleteIndexedDB(dbName) {
             return;
         }
 
-        console.log(`${Date.now()}: Removing indexeddb instance: ${dbName}`);
+        const startTime = Date.now();
+        console.log(`${startTime}: Removing indexeddb instance: ${dbName}`);
         const req = window.indexedDB.deleteDatabase(dbName);
 
         req.onblocked = () => {
@@ -48,7 +49,8 @@ export function deleteIndexedDB(dbName) {
         };
 
         req.onsuccess = () => {
-            console.log(`${Date.now()}: Removed indexeddb instance: ${dbName}`);
+            const now = Date.now();
+            console.log(`${now}: Removed indexeddb instance: ${dbName} in ${now-startTime} ms`);
             resolve();
         };
     }).catch((e) => {

From 9864ce5bb25bceb1cccaa410cd864581919383cb Mon Sep 17 00:00:00 2001
From: Kegsay 
Date: Thu, 20 Jul 2017 11:02:10 +0100
Subject: [PATCH 186/202] Support multiple config.json symlinks in redeploy.py
 (#4644)

* Support multiple config.json symlinks in redeploy.py

* Review comments
---
 scripts/deploy.py   | 18 +++++++++++-------
 scripts/redeploy.py | 19 +++++++++++++------
 2 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/scripts/deploy.py b/scripts/deploy.py
index c96b46e81f..cc350e4c9a 100755
--- a/scripts/deploy.py
+++ b/scripts/deploy.py
@@ -63,7 +63,8 @@ class Deployer:
         self.packages_path = "."
         self.bundles_path = None
         self.should_clean = False
-        self.config_location = None
+        # filename -> symlink path e.g 'config.localhost.json' => '../localhost/config.json'
+        self.config_locations = {}
         self.verify_signature = True
 
     def deploy(self, tarball, extract_path):
@@ -95,11 +96,12 @@ class Deployer:
 
         print ("Extracted into: %s" % extracted_dir)
 
-        if self.config_location:
-            create_relative_symlink(
-                target=self.config_location,
-                linkname=os.path.join(extracted_dir, 'config.json')
-            )
+        if self.config_locations:
+            for config_filename, config_loc in self.config_locations.iteritems():
+                create_relative_symlink(
+                    target=config_loc,
+                    linkname=os.path.join(extracted_dir, config_filename)
+                )
 
         if self.bundles_path:
             extracted_bundles = os.path.join(extracted_dir, 'bundles')
@@ -178,6 +180,8 @@ if __name__ == "__main__":
     deployer.packages_path = args.packages_dir
     deployer.bundles_path = args.bundles_dir
     deployer.should_clean = args.clean
-    deployer.config_location = args.config
+    deployer.config_locations = {
+        "config.json": args.config,
+    }
 
     deployer.deploy(args.tarball, args.extract_path)
diff --git a/scripts/redeploy.py b/scripts/redeploy.py
index 598f6c5265..a6e4bbc709 100755
--- a/scripts/redeploy.py
+++ b/scripts/redeploy.py
@@ -185,10 +185,16 @@ if __name__ == "__main__":
             to the /vector directory INSIDE the tarball."
         )
     )
+
+    def _raise(ex):
+        raise ex
+
+    # --config config.json=../../config.json --config config.localhost.json=./localhost.json
     parser.add_argument(
-        "--config", dest="config", help=(
-            "Write a symlink to config.json in the extracted tarball. \
-            To this location."
+        "--config", action="append", dest="configs",
+        type=lambda kv: kv.split("=", 1) if "=" in kv else _raise(Exception("Missing =")), help=(
+            "A list of configs to symlink into the extracted tarball. \
+            For example, --config config.json=../config.json config2.json=../test/config.json"
         )
     )
     parser.add_argument(
@@ -212,7 +218,8 @@ if __name__ == "__main__":
     deployer = Deployer()
     deployer.bundles_path = args.bundles_dir
     deployer.should_clean = args.clean
-    deployer.config_location = args.config
+    deployer.config_locations = dict(args.configs) if args.configs else {}
+
 
     # we don't pgp-sign jenkins artifacts; instead we rely on HTTPS access to
     # the jenkins server (and the jenkins server not being compromised and/or
@@ -225,13 +232,13 @@ if __name__ == "__main__":
         deploy_tarball(args.tarball_uri, build_dir)
     else:
         print(
-            "Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Config location: %s" %
+            "Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Config locations: %s" %
             (args.port,
              arg_extract_path,
              " (clean after)" if deployer.should_clean else "",
              arg_symlink,
              arg_jenkins_url,
-             deployer.config_location,
+             deployer.config_locations,
             )
         )
         app.run(host="0.0.0.0", port=args.port, debug=True)

From ccf5d6fc90b2136fc52abcadd1715fa30f665e31 Mon Sep 17 00:00:00 2001
From: Luke Barnard 
Date: Thu, 20 Jul 2017 11:14:54 +0100
Subject: [PATCH 187/202] Adjust pill CSS

-Remove space after mentions without pill background colour
-Increase space between pill avatar and first letter of the pill by 1px
---
 .../css/matrix-react-sdk/views/elements/_RichText.scss    | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss
index 4c72939349..788955e31d 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss
@@ -4,7 +4,6 @@
 
 .mx_UserPill,
 .mx_RoomPill {
-    padding: 0px 5px 0px 2px;
     border-radius: 16px;
     display: inline-block;
     height: 20px;
@@ -20,20 +19,23 @@
 .mx_EventTile_highlight .mx_EventTile_content .markdown-body a.mx_UserPill_me {
     color: $accent-fg-color;
     background-color: $mention-user-pill-bg-color;
+    padding-right: 5px;
 }
 
 /* More specific to override `.markdown-body a` color */
 .mx_EventTile_content .markdown-body a.mx_RoomPill,
 .mx_RoomPill {
-    background-color: $rte-room-pill-color;
     color: $accent-fg-color;
+    background-color: $rte-room-pill-color;
+    padding-right: 5px;
 }
 
 .mx_UserPill .mx_BaseAvatar,
 .mx_RoomPill .mx_BaseAvatar {
     position: relative;
     top: 2px;
-    margin-right: 1px;
+    margin-left: 2px;
+    margin-right: 2px;
 }
 
 .mx_Markdown_BOLD {

From 62579ed6b0bf730e3bea4d8580771df3581e054a Mon Sep 17 00:00:00 2001
From: Kegan Dougal 
Date: Thu, 20 Jul 2017 11:25:19 +0100
Subject: [PATCH 188/202] Add tracebacks to deploy exceptions

---
 scripts/redeploy.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/scripts/redeploy.py b/scripts/redeploy.py
index a6e4bbc709..e10a48c008 100755
--- a/scripts/redeploy.py
+++ b/scripts/redeploy.py
@@ -13,6 +13,7 @@
 from __future__ import print_function
 import json, requests, tarfile, argparse, os, errno
 import time
+import traceback
 from urlparse import urljoin
 
 from flask import Flask, jsonify, request, abort
@@ -124,6 +125,7 @@ def fetch_jenkins_build(job_name, build_num):
     try:
         extracted_dir = deploy_tarball(tar_gz_url, build_dir)
     except DeployException as e:
+        traceback.print_exc()
         abort(400, e.message)
 
     create_symlink(source=extracted_dir, linkname=arg_symlink)

From 5ba3453dcc204e94507cb866e29cc413466d221c Mon Sep 17 00:00:00 2001
From: David Baker 
Date: Fri, 21 Jul 2017 11:12:46 +0100
Subject: [PATCH 189/202] cursor: pointer on avatar picker

---
 .../vector/css/matrix-react-sdk/structures/_GroupView.scss    | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss
index f822cd2e6e..7cae7664d8 100644
--- a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss
+++ b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss
@@ -103,6 +103,10 @@ limitations under the License.
     border-bottom: 1px solid transparent;
 }
 
+.mx_GroupView_avatarPicker_label {
+    cursor: pointer;
+}
+
 .mx_GroupView_cancelButton {
     padding-left: 8px;
 }

From d2f02e8e997c143fe14ae263353ed6ddb57fb68a Mon Sep 17 00:00:00 2001
From: David Baker 
Date: Fri, 21 Jul 2017 14:14:27 +0100
Subject: [PATCH 190/202] Swap classes instead of using 0 height elements

---
 .../structures/_GroupView.scss                | 21 +++++++++----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss
index 7cae7664d8..ae9f97b223 100644
--- a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss
+++ b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss
@@ -29,6 +29,11 @@ limitations under the License.
     height: 70px;
     align-items: center;
     display: flex;
+    margin-bottom: 20px;
+}
+
+.mx_GroupView_header_view {
+    border-bottom: 1px solid #e5e5e5;
 }
 
 .mx_GroupView_header_avatar, .mx_GroupView_header_info {
@@ -56,6 +61,11 @@ limitations under the License.
     left: 15px;
 }
 
+.mx_GroupView_avatarPicker .mx_Spinner {
+    width: 48px;
+    height: 48px ! important;
+}
+
 .mx_GroupView_header_leftCol {
     flex: 1;
 }
@@ -116,17 +126,6 @@ limitations under the License.
     top: 5px;
 }
 
-.mx_GroupView_header_viewBottom {
-    border-bottom: 1px solid #e5e5e5;
-    height: 0;
-    margin-bottom: 20px;
-}
-
-.mx_GroupView_header_editBottom {
-    height: 0;
-    margin-top: 20px;
-}
-
 .mx_GroupView_featuredThings {
     margin-top: 20px;
 }

From e923847dac54f7996e71782ab00019e92334e464 Mon Sep 17 00:00:00 2001
From: Luke Barnard 
Date: Mon, 24 Jul 2017 14:49:43 +0100
Subject: [PATCH 191/202] Make user mentions more pill-like

By adding subtle background-colors
---
 .../vector/css/matrix-react-sdk/views/elements/_RichText.scss   | 2 ++
 src/skins/vector/css/themes/_base.scss                          | 1 +
 src/skins/vector/css/themes/_dark.scss                          | 2 ++
 3 files changed, 5 insertions(+)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss
index 788955e31d..55faab8473 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss
@@ -14,6 +14,8 @@
 .mx_EventTile_content .markdown-body a.mx_UserPill,
 .mx_UserPill {
     color: $primary-fg-color;
+    background-color: $other-user-pill-bg-color;
+    padding-right: 5px;
 }
 
 .mx_EventTile_highlight .mx_EventTile_content .markdown-body a.mx_UserPill_me {
diff --git a/src/skins/vector/css/themes/_base.scss b/src/skins/vector/css/themes/_base.scss
index 545334d3df..6f613e38f8 100644
--- a/src/skins/vector/css/themes/_base.scss
+++ b/src/skins/vector/css/themes/_base.scss
@@ -20,6 +20,7 @@ $focus-brightness: 125%;
 // red warning colour
 $warning-color: #ff0064;
 $mention-user-pill-bg-color: #ff0064;
+$other-user-pill-bg-color: rgba(0, 0, 0, 0.1);
 
 $preview-bar-bg-color: #f7f7f7;
 
diff --git a/src/skins/vector/css/themes/_dark.scss b/src/skins/vector/css/themes/_dark.scss
index fe2e7591cf..f92c89bdbe 100644
--- a/src/skins/vector/css/themes/_dark.scss
+++ b/src/skins/vector/css/themes/_dark.scss
@@ -20,6 +20,8 @@ $focus-brightness: 200%;
 // red warning colour
 $warning-color: #ff0064;
 
+$other-user-pill-bg-color: rgba(255, 255, 255, 0.15);
+
 $preview-bar-bg-color: #333;
 
 // left-panel style muted accent color

From bc2f639aaecdb655756fe5aa47e853eed7e43989 Mon Sep 17 00:00:00 2001
From: Richard van der Hoff 
Date: Mon, 24 Jul 2017 17:19:46 +0100
Subject: [PATCH 192/202] Fix a couple of minor errors in the room list

bluebird promises don't support .fail, so some operations didn't work quite
right. We should use .catch instead.
---
 src/components/structures/RoomSubList.js                  | 2 +-
 src/components/views/context_menus/RoomTileContextMenu.js | 4 ++--
 src/components/views/rooms/DNDRoomTile.js                 | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/components/structures/RoomSubList.js b/src/components/structures/RoomSubList.js
index 17febe02c7..4844f0ed35 100644
--- a/src/components/structures/RoomSubList.js
+++ b/src/components/structures/RoomSubList.js
@@ -511,7 +511,7 @@ var RoomSubList = React.createClass({
                 if (list[i].tags[self.props.tagName] && list[i].tags[self.props.tagName].order === undefined) {
                     MatrixClientPeg.get().setRoomTag(list[i].roomId, self.props.tagName, {order: (order + 1.0) / 2.0}).finally(function() {
                         // Do any final stuff here
-                    }).fail(function(err) {
+                    }).catch(function(err) {
                         var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
                         console.error("Failed to add tag " + self.props.tagName + " to room" + err);
                         Modal.createDialog(ErrorDialog, {
diff --git a/src/components/views/context_menus/RoomTileContextMenu.js b/src/components/views/context_menus/RoomTileContextMenu.js
index 4d08e8332e..3ef0646237 100644
--- a/src/components/views/context_menus/RoomTileContextMenu.js
+++ b/src/components/views/context_menus/RoomTileContextMenu.js
@@ -68,7 +68,7 @@ module.exports = React.createClass({
                         if (self.props.onFinished) {
                             self.props.onFinished();
                         };
-                    }).fail(function(err) {
+                    }).catch(function(err) {
                         var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
                         Modal.createDialog(ErrorDialog, {
                             title: _t('Failed to remove tag %(tagName)s from room', {tagName: tagNameOff}),
@@ -85,7 +85,7 @@ module.exports = React.createClass({
                         if (self.props.onFinished) {
                             self.props.onFinished();
                         };
-                    }).fail(function(err) {
+                    }).catch(function(err) {
                         var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
                         Modal.createDialog(ErrorDialog, {
                             title: _t('Failed to remove tag %(tagName)s from room', {tagName: tagNameOn}),
diff --git a/src/components/views/rooms/DNDRoomTile.js b/src/components/views/rooms/DNDRoomTile.js
index 2f521028cd..cd5e54f071 100644
--- a/src/components/views/rooms/DNDRoomTile.js
+++ b/src/components/views/rooms/DNDRoomTile.js
@@ -111,7 +111,7 @@ var roomTileSource = {
                 //component.state.set({ spinner: component.state.spinner ? component.state.spinner++ : 1 });
                 MatrixClientPeg.get().deleteRoomTag(item.room.roomId, prevTag).finally(function() {
                     //component.state.set({ spinner: component.state.spinner-- });
-                }).fail(function(err) {
+                }).catch(function(err) {
                     var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
                     console.error("Failed to remove tag " + prevTag + " from room: " + err);
                     Modal.createDialog(ErrorDialog, {

From dbeeacf11c025b6c05644e6abd3aad0638d086a9 Mon Sep 17 00:00:00 2001
From: Matthew Hodgson 
Date: Mon, 24 Jul 2017 22:13:29 +0100
Subject: [PATCH 193/202] tweak pill colours some more

---
 src/skins/vector/css/themes/_base.scss | 2 +-
 src/skins/vector/css/themes/_dark.scss | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/skins/vector/css/themes/_base.scss b/src/skins/vector/css/themes/_base.scss
index 6f613e38f8..3b1bf9e8e5 100644
--- a/src/skins/vector/css/themes/_base.scss
+++ b/src/skins/vector/css/themes/_base.scss
@@ -20,7 +20,7 @@ $focus-brightness: 125%;
 // red warning colour
 $warning-color: #ff0064;
 $mention-user-pill-bg-color: #ff0064;
-$other-user-pill-bg-color: rgba(0, 0, 0, 0.1);
+$other-user-pill-bg-color: rgba(0, 0, 0, 0.05);
 
 $preview-bar-bg-color: #f7f7f7;
 
diff --git a/src/skins/vector/css/themes/_dark.scss b/src/skins/vector/css/themes/_dark.scss
index f92c89bdbe..a8f162d9f9 100644
--- a/src/skins/vector/css/themes/_dark.scss
+++ b/src/skins/vector/css/themes/_dark.scss
@@ -20,7 +20,7 @@ $focus-brightness: 200%;
 // red warning colour
 $warning-color: #ff0064;
 
-$other-user-pill-bg-color: rgba(255, 255, 255, 0.15);
+$other-user-pill-bg-color: rgba(255, 255, 255, 0.1);
 
 $preview-bar-bg-color: #333;
 

From bcedc206e124b338a2b7aab31d7962753169fd11 Mon Sep 17 00:00:00 2001
From: Matthew Hodgson 
Date: Tue, 25 Jul 2017 09:55:34 +0100
Subject: [PATCH 194/202] seems folk prefer darker pills

---
 src/skins/vector/css/themes/_base.scss | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/skins/vector/css/themes/_base.scss b/src/skins/vector/css/themes/_base.scss
index 3b1bf9e8e5..6f613e38f8 100644
--- a/src/skins/vector/css/themes/_base.scss
+++ b/src/skins/vector/css/themes/_base.scss
@@ -20,7 +20,7 @@ $focus-brightness: 125%;
 // red warning colour
 $warning-color: #ff0064;
 $mention-user-pill-bg-color: #ff0064;
-$other-user-pill-bg-color: rgba(0, 0, 0, 0.05);
+$other-user-pill-bg-color: rgba(0, 0, 0, 0.1);
 
 $preview-bar-bg-color: #f7f7f7;
 

From 35c239aae8ee0b1c0fb7f98e6860b00e2d6aac6e Mon Sep 17 00:00:00 2001
From: Luke Barnard 
Date: Wed, 26 Jul 2017 16:45:00 +0100
Subject: [PATCH 195/202] CSS required for composer autoscroll

for https://github.com/matrix-org/matrix-react-sdk/pull/1248
---
 .../css/matrix-react-sdk/views/rooms/_MessageComposer.scss | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
index 98c803fd87..d85ce58a15 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
@@ -95,8 +95,6 @@ limitations under the License.
 .mx_MessageComposer_input .DraftEditor-root {
     width: 100%;
     flex: 1;
-    max-height: 120px;
-    overflow: auto;
     word-break: break-word;
 }
 
@@ -105,6 +103,11 @@ limitations under the License.
     padding-top: 2px;
 }
 
+.mx_MessageComposer_input .public-DraftEditor-content {
+    max-height: 120px;
+    overflow: auto;
+}
+
 .mx_MessageComposer_input blockquote {
     color: $blockquote-fg-color;
     margin: 0 0 16px;

From ff2554c8a6c6a04efe39a71c3c47b56d160d628a Mon Sep 17 00:00:00 2001
From: Richard Lewis 
Date: Wed, 26 Jul 2017 16:48:24 +0100
Subject: [PATCH 196/202] App permission component styling.

---
 .../views/rooms/_AppsDrawer.scss              | 34 +++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
index 7d1ac62818..41efe4c8c2 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
@@ -167,3 +167,37 @@ form.mx_Custom_Widget_Form div {
     margin-top: 10px;
     margin-bottom: 10px;
 }
+
+.mx_AppPermissionWarning {
+    text-align: center;
+    padding: 30px 0;
+    background-color: $lightbox-bg-color;
+}
+
+.mx_AppPermissionWarningImage {
+    margin: 10px 0;
+}
+
+.mx_AppPermissionWarningImage img {
+    width: 150px;
+}
+
+.mx_AppPermissionWarningText {
+    max-width: 300px;
+    margin: 10px auto 10px auto;
+    color: $primary-fg-color;
+}
+
+.mx_AppPermissionWarningTextLabel {
+    font-weight: bold;
+}
+
+.mx_AppPermissionWarningTextURL {
+    color: $accent-color;
+}
+
+.mx_AppPermissionButton {
+    padding: 5px;
+    border-radius: 5px;
+    color: $warning-color;
+}

From 0bee03e86f7f191c465099eb70cb8f7d08d6aef9 Mon Sep 17 00:00:00 2001
From: Richard Lewis 
Date: Thu, 27 Jul 2017 16:40:33 +0100
Subject: [PATCH 197/202] Fix App body height. App warning colours. App loading
 styling.

---
 .../views/rooms/_AppsDrawer.scss              | 23 +++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
index 41efe4c8c2..07eeba70d0 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
@@ -88,6 +88,11 @@ limitations under the License.
     border-radius: 2px;
 }
 
+.mx_AppTileBody{
+    height: 350px;
+    overflow: hidden;
+}
+
 .mx_AppTileBody iframe {
     width: 100%;
     height: 350px;
@@ -171,7 +176,7 @@ form.mx_Custom_Widget_Form div {
 .mx_AppPermissionWarning {
     text-align: center;
     padding: 30px 0;
-    background-color: $lightbox-bg-color;
+    background-color: $primary-bg-color;
 }
 
 .mx_AppPermissionWarningImage {
@@ -183,7 +188,7 @@ form.mx_Custom_Widget_Form div {
 }
 
 .mx_AppPermissionWarningText {
-    max-width: 300px;
+    max-width: 400px;
     margin: 10px auto 10px auto;
     color: $primary-fg-color;
 }
@@ -200,4 +205,18 @@ form.mx_Custom_Widget_Form div {
     padding: 5px;
     border-radius: 5px;
     color: $warning-color;
+    background-color: $primary-bg-color;
+}
+
+.mx_AppPermissionButton:hover {
+    background-color: $primary-fg-color;
+}
+
+.mx_AppLoading {
+    min-height: 305px;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    font-weight: bold;
 }

From c1fe3533c4eb247ad2a4147dd6369a57faffcbbd Mon Sep 17 00:00:00 2001
From: Richard Lewis 
Date: Thu, 27 Jul 2017 18:10:56 +0100
Subject: [PATCH 198/202] Add red cancel icon and styling.

---
 .../css/matrix-react-sdk/views/rooms/_AppsDrawer.scss  |  4 ++++
 src/skins/vector/img/cancel-red.svg                    | 10 ++++++++++
 2 files changed, 14 insertions(+)
 create mode 100644 src/skins/vector/img/cancel-red.svg

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
index 07eeba70d0..c8556b0d28 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
@@ -83,6 +83,10 @@ limitations under the License.
     border: 1px solid transparent;
 }
 
+.mx_AppTileMenuBarWidgetDelete {
+    filter: none;
+}
+
 .mx_AppTileMenuBarWidget:hover {
     border: 1px solid $primary-hairline-color;
     border-radius: 2px;
diff --git a/src/skins/vector/img/cancel-red.svg b/src/skins/vector/img/cancel-red.svg
new file mode 100644
index 0000000000..a72a970b62
--- /dev/null
+++ b/src/skins/vector/img/cancel-red.svg
@@ -0,0 +1,10 @@
+
+
+    
+    Slice 1
+    Created with Sketch.
+    
+    
+        
+    
+

From 50f5abf53565a02efc26537b25b47b845c82025a Mon Sep 17 00:00:00 2001
From: Richard Lewis 
Date: Thu, 27 Jul 2017 20:19:08 +0100
Subject: [PATCH 199/202] Permissions button cursor.

---
 .../vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss     | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
index c8556b0d28..73c59c6efa 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
@@ -214,6 +214,7 @@ form.mx_Custom_Widget_Form div {
 
 .mx_AppPermissionButton:hover {
     background-color: $primary-fg-color;
+    cursor: pointer;
 }
 
 .mx_AppLoading {

From 317ff8c6af40bd93a474f188d177878b89082c4c Mon Sep 17 00:00:00 2001
From: Richard Lewis 
Date: Thu, 27 Jul 2017 23:02:19 +0100
Subject: [PATCH 200/202] Beta tag styling

---
 src/skins/vector/css/_common.scss | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/skins/vector/css/_common.scss b/src/skins/vector/css/_common.scss
index c52204c5e9..3189deb0b2 100644
--- a/src/skins/vector/css/_common.scss
+++ b/src/skins/vector/css/_common.scss
@@ -319,6 +319,7 @@ textarea {
     cursor: help;
     transition-duration: 200ms;
     font-size: smaller;
+    filter: opacity(0.5);
 }
 
 .mx_Beta:hover {

From 397523f4aca739dbf05ced70f8c47320df6585e8 Mon Sep 17 00:00:00 2001
From: Luke Barnard 
Date: Fri, 28 Jul 2017 15:13:36 +0100
Subject: [PATCH 201/202] Make pills, emoji translucent when sending

also fix header colours, which now inherit the font colour of the event tile (so all headers have the correct colour when sending or when the event tile is highlighted for a mention)
---
 .../css/matrix-react-sdk/views/rooms/_EventTile.scss       | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss
index cf148603ca..57d4a180b5 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss
@@ -128,6 +128,12 @@ limitations under the License.
     color: $event-sending-color;
 }
 
+.mx_EventTile_sending .mx_UserPill,
+.mx_EventTile_sending .mx_RoomPill,
+.mx_EventTile_sending .mx_emojione {
+    opacity: 0.5;
+}
+
 .mx_EventTile_notSent {
     color: $event-notsent-color;
 }
@@ -370,6 +376,7 @@ limitations under the License.
 .mx_EventTile_content .markdown-body h6
 {
     font-family: inherit ! important;
+    color: inherit;
 }
 
 

From af85f18eae78d95614195c97ff8f9c66bdf940cc Mon Sep 17 00:00:00 2001
From: Richard Lewis 
Date: Tue, 1 Aug 2017 17:30:22 +0100
Subject: [PATCH 202/202] Styling tweaks

---
 .../vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss   | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
index 73c59c6efa..75064d9324 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
@@ -188,7 +188,7 @@ form.mx_Custom_Widget_Form div {
 }
 
 .mx_AppPermissionWarningImage img {
-    width: 150px;
+    width: 100px;
 }
 
 .mx_AppPermissionWarningText {
@@ -199,6 +199,7 @@ form.mx_Custom_Widget_Form div {
 
 .mx_AppPermissionWarningTextLabel {
     font-weight: bold;
+    display: block;
 }
 
 .mx_AppPermissionWarningTextURL {