diff --git a/.github/ISSUE_TEMPLATE/redesign_issue.md b/.github/ISSUE_TEMPLATE/redesign_issue.md deleted file mode 100644 index 162d0a1285..0000000000 --- a/.github/ISSUE_TEMPLATE/redesign_issue.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Redesign Issue -about: Bugs, feedback or feature requests specifically associated with the Redesign - project (https://riot.im/experimental) -title: '' -labels: redesign -assignees: '' - ---- - - - -- **Browser**: Chrome, Safari, Firefox? which version? -- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? - -### Description - -Describe here the problem that you are experiencing, or the feature you are requesting. -Include screenshots if possible: you can drag and drop images below. - -### Steps to reproduce - -- For bugs, list the steps -- that reproduce the bug -- using hyphens as bullet points - -Describe how what happens differs from what you expected. - -Log: sent/not sent? diff --git a/.travis.yml b/.travis.yml index 3b201c1e95..6d8b348e4c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,5 +24,5 @@ install: # commit. - npm install && scripts/fetch-develop.deps.sh --depth 1 script: - - npm run test + - CHROME_BIN='/usr/bin/google-chrome-stable' npm run test - npm run lint diff --git a/CHANGELOG.md b/CHANGELOG.md index ba5de17582..522b7f5b36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,113 @@ +Changes in [1.0.1](https://github.com/vector-im/riot-web/releases/tag/v1.0.1) (2019-02-15) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.0...v1.0.1) + + +Changes in [1.0.0](https://github.com/vector-im/riot-web/releases/tag/v1.0.0) (2019-02-14) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.0-rc.2...v1.0.0) + + * Add snipping lines to welcome page without guests + [\#8634](https://github.com/vector-im/riot-web/pull/8634) + * Add home page to fix loading tests + [\#8625](https://github.com/vector-im/riot-web/pull/8625) + +Changes in [1.0.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.0.0-rc.2) (2019-02-14) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.0-rc.1...v1.0.0-rc.2) + + * Update from Weblate. + [\#8615](https://github.com/vector-im/riot-web/pull/8615) + * Replace favicon assets to ones with transparent backgrounds + [\#8600](https://github.com/vector-im/riot-web/pull/8600) + * Refreshed icons + [\#8594](https://github.com/vector-im/riot-web/pull/8594) + * Fix order of fetch-develop-deps / npm install + [\#8566](https://github.com/vector-im/riot-web/pull/8566) + * Revive building dark theme + [\#8540](https://github.com/vector-im/riot-web/pull/8540) + * Update from Weblate. + [\#8546](https://github.com/vector-im/riot-web/pull/8546) + * Repair app loading tests after welcome page + [\#8525](https://github.com/vector-im/riot-web/pull/8525) + * Support configurable welcome background and logo + [\#8528](https://github.com/vector-im/riot-web/pull/8528) + * Update from Weblate. + [\#8518](https://github.com/vector-im/riot-web/pull/8518) + * Document `embeddedPages` configuration + [\#8514](https://github.com/vector-im/riot-web/pull/8514) + * README.md : Syntax Coloring + [\#8502](https://github.com/vector-im/riot-web/pull/8502) + +Changes in [1.0.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.0.0-rc.1) (2019-02-08) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.9...v1.0.0-rc.1) + + * Update from Weblate. + [\#8475](https://github.com/vector-im/riot-web/pull/8475) + * Add configurable welcome page + [\#8466](https://github.com/vector-im/riot-web/pull/8466) + * fix app tests after force enabling lazy loading + removing feature flag + [\#8464](https://github.com/vector-im/riot-web/pull/8464) + * Allow Electron to zoom with CommandOrControl+= + [\#8381](https://github.com/vector-im/riot-web/pull/8381) + * Hide sign in / create account for logged in users + [\#8368](https://github.com/vector-im/riot-web/pull/8368) + * Fix home page link target + [\#8365](https://github.com/vector-im/riot-web/pull/8365) + * Add auth background image and update Riot logo + [\#8364](https://github.com/vector-im/riot-web/pull/8364) + * New homepage + [\#8363](https://github.com/vector-im/riot-web/pull/8363) + * Spell homeserver correctly + [\#8358](https://github.com/vector-im/riot-web/pull/8358) + * Merge redesign into develop + [\#8321](https://github.com/vector-im/riot-web/pull/8321) + * Disable room directory test because it doesn't work + [\#8318](https://github.com/vector-im/riot-web/pull/8318) + * Tweak auth overflow on Windows and Linux + [\#8307](https://github.com/vector-im/riot-web/pull/8307) + * Clean up Custom Server Help dialog + [\#8296](https://github.com/vector-im/riot-web/pull/8296) + * Cache-bust olm.wasm + [\#8283](https://github.com/vector-im/riot-web/pull/8283) + * Completely disable other themes for now (#8277) + [\#8280](https://github.com/vector-im/riot-web/pull/8280) + * Remove support for team servers + [\#8271](https://github.com/vector-im/riot-web/pull/8271) + * Add target="_blank" to footer links + [\#8248](https://github.com/vector-im/riot-web/pull/8248) + * Fix device names on desktop + [\#8241](https://github.com/vector-im/riot-web/pull/8241) + * Fix literal </> in notifications + [\#8238](https://github.com/vector-im/riot-web/pull/8238) + * Fix registration nextLink on desktop + [\#8239](https://github.com/vector-im/riot-web/pull/8239) + * Add returns to fetch-develop-deps + [\#8233](https://github.com/vector-im/riot-web/pull/8233) + * Update electron builder + [\#8231](https://github.com/vector-im/riot-web/pull/8231) + * Try fetching more branches for PRs + [\#8225](https://github.com/vector-im/riot-web/pull/8225) + * Use content hashing for font and image URLs + [\#8159](https://github.com/vector-im/riot-web/pull/8159) + * Develop->Experimental + [\#8156](https://github.com/vector-im/riot-web/pull/8156) + * Update from Weblate. + [\#8150](https://github.com/vector-im/riot-web/pull/8150) + * Correct the copying of e-mail addresses in the electron app + [\#8124](https://github.com/vector-im/riot-web/pull/8124) + * Start documenting keyboard shortcuts + [\#7165](https://github.com/vector-im/riot-web/pull/7165) + * Update issue templates + [\#7948](https://github.com/vector-im/riot-web/pull/7948) + * Added new colour var to all themes + [\#7927](https://github.com/vector-im/riot-web/pull/7927) + * Redesign: apply changes from dharma theme to status theme + [\#7541](https://github.com/vector-im/riot-web/pull/7541) + * Redesign: ignore setting and always show dharma theme for now + [\#7540](https://github.com/vector-im/riot-web/pull/7540) + Changes in [0.17.9](https://github.com/vector-im/riot-web/releases/tag/v0.17.9) (2019-01-22) ============================================================================================ [Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.9-rc.1...v0.17.9) diff --git a/README.md b/README.md index 6ef79cd434..d7c7ba96eb 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,27 @@ Riot ==== -Riot (formerly known as Vector) is a Matrix web client built using the Matrix -React SDK (https://github.com/matrix-org/matrix-react-sdk). +Riot (formerly known as Vector) is a Matrix web client built using the [Matrix React SDK](https://github.com/matrix-org/matrix-react-sdk). Getting Started =============== -The easiest way to test Riot is to just use the hosted copy at -https://riot.im/app. The develop branch is continuously deployed by Jenkins at -https://riot.im/develop for those who like living dangerously. +The easiest way to test Riot is to just use the hosted copy at https://riot.im/app. +The `develop` branch is continuously deployed by Jenkins at https://riot.im/develop +for those who like living dangerously. To host your own copy of Riot, the quickest bet is to use a pre-built released version of Riot: 1. Download the latest version from https://github.com/vector-im/riot-web/releases 1. Untar the tarball on your web server -1. Move (or symlink) the riot-x.x.x directory to an appropriate name +1. Move (or symlink) the `riot-x.x.x` directory to an appropriate name 1. If desired, copy `config.sample.json` to `config.json` and edit it as desired. See below for details. 1. Enter the URL into your browser and log into Riot! Releases are signed by PGP, and can be checked against the public key -at https://riot.im/packages/keys/riot.asc +at https://riot.im/packages/keys/riot.asc . Note that Chrome does not allow microphone or webcam access for sites served over http (except localhost), so for working VoIP you will need to serve Riot @@ -69,16 +68,22 @@ to build. is at least v5.x). 1. Clone the repo: `git clone https://github.com/vector-im/riot-web.git`. 1. Switch to the riot-web directory: `cd riot-web`. +1. Install the prerequisites: `npm install`. 1. If you're using the `develop` branch then it is recommended to set up a proper development environment ("Setting up a dev environment" below) however one can install the develop versions of the dependencies instead: - ``` + ```bash scripts/fetch-develop.deps.sh ``` + Note that running `npm install` will undo the symlinks put in place by + `scripts/fetch-develop.deps.sh` so you should run `npm install` first, or + run `npm link matrix-js-sdk` and `npm link matrix-react-sdk` after running + `npm install`. + Whenever you git pull on riot-web you will also probably need to force an update to these dependencies - the simplest way is to re-run the script, but you can also manually update and rebuild them: - ``` + ```bash cd matrix-js-sdk git pull npm install # re-run to pull in any new dependencies @@ -94,18 +99,16 @@ to build. Or just use https://riot.im/develop - the continuous integration release of the develop branch. (Note that we don't reference the develop versions in git directly due to https://github.com/npm/npm/issues/3055.) -1. Install the prerequisites: `npm install`. 1. Configure the app by copying `config.sample.json` to `config.json` and modifying it (see below for details). 1. `npm run dist` to build a tarball to deploy. Untaring this file will give a version-specific directory containing all the files that need to go on your web server. -Note that `npm run dist` is not supported on Windows, so Windows users can run `npm -run build`, which will build all the necessary files into the `webapp` -directory. The version of Riot will not appear in Settings without -using the dist script. You can then mount the `webapp` directory on your -webserver to actually serve up the app, which is entirely static content. +Note that `npm run dist` is not supported on Windows, so Windows users can run `npm run build`, +which will build all the necessary files into the `webapp` directory. The version of Riot +will not appear in Settings without using the dist script. You can then mount the +`webapp` directory on your webserver to actually serve up the app, which is entirely static content. config.json =========== @@ -113,22 +116,34 @@ config.json You can configure the app by copying `config.sample.json` to `config.json` and customising it: -For a good example, see https://riot.im/develop/config.json +For a good example, see https://riot.im/develop/config.json. -1. `default_hs_url` is the default homeserver url. -1. `default_is_url` is the default identity server url (this is the server used - for verifying third party identifiers like email addresses). If this is blank, - registering with an email address, adding an email address to your account, - or inviting users via email address will not work. Matrix identity servers are - very simple web services which map third party identifiers (currently only email - addresses) to matrix IDs: see http://matrix.org/docs/spec/identity_service/unstable.html - for more details. Currently the only public matrix identity servers are https://matrix.org - and https://vector.im. In future identity servers will be decentralised. +1. `default_server_name` sets the default server name to use for authentication. + This will trigger Riot to ask + `https:///.well-known/matrix/client` for the homeserver and + identity server URLs to use. This is the recommended approach for setting a + default server. However, it is also possible to use the following to directly + configure each of the URLs: + * `default_hs_url` sets the default homeserver URL. + * `default_is_url` sets the default identity server URL (this is the server used + for verifying third party identifiers like email addresses). If this is blank, + registering with an email address, adding an email address to your account, + or inviting users via email address will not work. Matrix identity servers are + very simple web services which map third party identifiers (currently only email + addresses) to matrix IDs: see http://matrix.org/docs/spec/identity_service/unstable.html + for more details. Currently the only public matrix identity servers are https://matrix.org + and https://vector.im. In the future, identity servers will be decentralised. + * Riot will report an error if you accidentally configure both `default_server_name` _and_ `default_hs_url` since it's unclear which should take priority. 1. `features`: Lookup of optional features that may be `enable`d, `disable`d, or exposed to the user in the `labs` section of settings. The available optional experimental features vary from release to release. 1. `brand`: String to pass to your homeserver when configuring email notifications, to let the homeserver know what email template to use when talking to you. +1. `branding`: Configures various branding and logo details, such as: + 1. `welcomeBackgroundUrl`: An image to use as a wallpaper outside the app + during authentication flows + 1. `authHeaderLogoUrl`: An logo image that is shown in the header during + authentication flows 1. `integrations_ui_url`: URL to the web interface for the integrations server. The integrations server is not Riot and normally not your homeserver either. The integration server settings may be left blank to disable integrations. @@ -158,6 +173,13 @@ For a good example, see https://riot.im/develop/config.json 1. `whitelistedISUrls`: a list of IS URLs to not redact from the analytics 1. `siteId`: The Piwik Site ID to use when sending analytics to the Piwik server configured above 1. `welcomeUserId`: the user ID of a bot to invite whenever users register that can give them a tour +1. `embeddedPages`: Configures the pages displayed in portions of Riot that + embed static files, such as: + 1. `welcomeUrl`: Initial content shown on the outside of the app when not + logged in. Defaults to `welcome.html` supplied with Riot. + 1. `homeUrl`: Content shown on the inside of the app when a specific room is + not selected. By default, no home page is configured. If one is set, a + button to access it will be shown in the top left menu. Note that `index.html` also has an og:image meta tag that is set to an image @@ -183,15 +205,15 @@ To run as a desktop app: `npm run build` instead of `npm run dist` (since we don't need the tarball). 2. Install electron and run it: - ``` + ```bash npm install electron npm run electron ``` To build packages, use electron-builder. This is configured to output: - * dmg + zip for macOS - * exe + nupkg for Windows - * deb for Linux + * `dmg` + `zip` for macOS + * `exe` + `nupkg` for Windows + * `deb` for Linux But this can be customised by editing the `build` section of package.json as per https://github.com/electron-userland/electron-builder/wiki/Options @@ -199,7 +221,7 @@ See https://github.com/electron-userland/electron-builder/wiki/Multi-Platform-Bu for dependencies required for building packages for various platforms. The only platform that can build packages for all three platforms is macOS: -``` +```bash brew install wine --without-x11 brew install mono brew install gnu-tar @@ -213,7 +235,7 @@ for 64 bit Linux: 1. Follow the instructions in 'Building From Source' above 2. `node_modules/.bin/build -l --x64` -All electron packages go into `electron/dist/` +All electron packages go into `electron_app/dist/` Many thanks to @aviraldg for the initial work on the electron integration. @@ -221,7 +243,7 @@ Other options for running as a desktop app: * https://github.com/krisak/vector-electron-desktop * @asdf:matrix.org points out that you can use nativefier and it just works(tm) -``` +```bash sudo npm install nativefier -g nativefier https://riot.im/app/ ``` @@ -229,13 +251,13 @@ nativefier https://riot.im/app/ Development =========== -Before attempting to develop on Riot you **must** read the developer guide -for `matrix-react-sdk` at https://github.com/matrix-org/matrix-react-sdk, which +Before attempting to develop on Riot you **must** read the [developer guide +for `matrix-react-sdk`](https://github.com/matrix-org/matrix-react-sdk), which also defines the design, architecture and style for Riot too. -You should also familiarise yourself with the "Here be Dragons" guide to the -tame & not-so-tame dragons (gotchas) which exist in the codebase: -https://docs.google.com/document/d/12jYzvkidrp1h7liEuLIe6BMdU0NUjndUYI971O06ooM +You should also familiarise yourself with the ["Here be Dragons" guide +](https://docs.google.com/document/d/12jYzvkidrp1h7liEuLIe6BMdU0NUjndUYI971O06ooM) +to the tame & not-so-tame dragons (gotchas) which exist in the codebase. The idea of Riot is to be a relatively lightweight "skin" of customisations on top of the underlying `matrix-react-sdk`. `matrix-react-sdk` provides both the @@ -260,46 +282,57 @@ having to manually rebuild each time. First clone and build `matrix-js-sdk`: -1. `git clone https://github.com/matrix-org/matrix-js-sdk.git` -1. `pushd matrix-js-sdk` -1. `git checkout develop` -1. `npm install` -1. `npm install source-map-loader` # because webpack is made of fail (https://github.com/webpack/webpack/issues/1472) -1. `popd` +``` bash +git clone https://github.com/matrix-org/matrix-js-sdk.git +pushd matrix-js-sdk +git checkout develop +npm install +npm install source-map-loader # because webpack is made of fail +# see https://github.com/webpack/webpack/issues/1472 +popd +``` Then similarly with `matrix-react-sdk`: -1. `git clone https://github.com/matrix-org/matrix-react-sdk.git` -1. `pushd matrix-react-sdk` -1. `git checkout develop` -1. `npm link ../matrix-js-sdk` -1. `popd` +```bash +git clone https://github.com/matrix-org/matrix-react-sdk.git +pushd matrix-react-sdk +git checkout develop +npm link ../matrix-js-sdk +popd +``` Finally, build and start Riot itself: -1. `git clone https://github.com/vector-im/riot-web.git` -1. `cd riot-web` -1. `git checkout develop` -1. `npm install` -1. `npm link ../matrix-js-sdk` -1. `npm link ../matrix-react-sdk` -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 - Time: 14533ms - Asset Size Chunks Chunk Names - bundle.js 4.2 MB 0 [emitted] main - bundle.css 91.5 kB 0 [emitted] main - bundle.js.map 5.29 MB 0 [emitted] main - bundle.css.map 116 kB 0 [emitted] main - + 1013 hidden modules - ``` +```bash +git clone https://github.com/vector-im/riot-web.git +cd riot-web +git checkout develop +npm install +npm link ../matrix-js-sdk +npm link ../matrix-react-sdk +npm start +``` + +Wait a few seconds for the initial build to finish; you should see something like: +``` +Hash: b0af76309dd56d7275c8 +Version: webpack 1.12.14 +Time: 14533ms + Asset Size Chunks Chunk Names + bundle.js 4.2 MB 0 [emitted] main + bundle.css 91.5 kB 0 [emitted] main + bundle.js.map 5.29 MB 0 [emitted] main +bundle.css.map 116 kB 0 [emitted] main + + 1013 hidden modules +``` Remember, the command will not terminate since it runs the web server and rebuilds source files when they change. This development server also disables caching, so do NOT use it in production. -1. Open http://127.0.0.1:8080/ in your browser to see your newly built Riot. + +Open http://127.0.0.1:8080/ in your browser to see your newly built Riot. + +___ When you make changes to `matrix-react-sdk` or `matrix-js-sdk` they should be automatically picked up by webpack and built. diff --git a/config.sample.json b/config.sample.json index a50eaf7d26..4208438d53 100644 --- a/config.sample.json +++ b/config.sample.json @@ -15,7 +15,6 @@ "feature_pinning": "labs" }, "default_federate": true, - "welcomePageUrl": "home.html", "default_theme": "light", "roomDirectory": { "servers": [ diff --git a/electron_app/build/icon.icns b/electron_app/build/icon.icns index d74e97e738..eba95ecf4f 100644 Binary files a/electron_app/build/icon.icns and b/electron_app/build/icon.icns differ diff --git a/electron_app/build/icon.ico b/electron_app/build/icon.ico index 8f8ff94eea..1305b7dd9a 100644 Binary files a/electron_app/build/icon.ico and b/electron_app/build/icon.ico differ diff --git a/electron_app/build/icons/128x128.png b/electron_app/build/icons/128x128.png index 54149b1ae2..9c52d6695b 100644 Binary files a/electron_app/build/icons/128x128.png and b/electron_app/build/icons/128x128.png differ diff --git a/electron_app/build/icons/16x16.png b/electron_app/build/icons/16x16.png index def4ec5eee..7435c1b5be 100644 Binary files a/electron_app/build/icons/16x16.png and b/electron_app/build/icons/16x16.png differ diff --git a/electron_app/build/icons/24x24.png b/electron_app/build/icons/24x24.png index 6fe144ea13..f484995e72 100644 Binary files a/electron_app/build/icons/24x24.png and b/electron_app/build/icons/24x24.png differ diff --git a/electron_app/build/icons/256x256.png b/electron_app/build/icons/256x256.png index 563e6d5edc..f52d02c88b 100644 Binary files a/electron_app/build/icons/256x256.png and b/electron_app/build/icons/256x256.png differ diff --git a/electron_app/build/icons/48x48.png b/electron_app/build/icons/48x48.png index 9cd225d402..fcbcbc495f 100644 Binary files a/electron_app/build/icons/48x48.png and b/electron_app/build/icons/48x48.png differ diff --git a/electron_app/build/icons/512x512.png b/electron_app/build/icons/512x512.png index 328a723c97..801e1504db 100644 Binary files a/electron_app/build/icons/512x512.png and b/electron_app/build/icons/512x512.png differ diff --git a/electron_app/build/icons/64x64.png b/electron_app/build/icons/64x64.png index 20a7a6cff3..4a86e56efe 100644 Binary files a/electron_app/build/icons/64x64.png and b/electron_app/build/icons/64x64.png differ diff --git a/electron_app/build/icons/96x96.png b/electron_app/build/icons/96x96.png index eb48c2c91e..8a998989fe 100644 Binary files a/electron_app/build/icons/96x96.png and b/electron_app/build/icons/96x96.png differ diff --git a/electron_app/build/install-spinner.gif b/electron_app/build/install-spinner.gif index c4f832c342..4a685294b6 100644 Binary files a/electron_app/build/install-spinner.gif and b/electron_app/build/install-spinner.gif differ diff --git a/electron_app/img/riot.ico b/electron_app/img/riot.ico index 8f8ff94eea..1305b7dd9a 100644 Binary files a/electron_app/img/riot.ico and b/electron_app/img/riot.ico differ diff --git a/electron_app/img/riot.png b/electron_app/img/riot.png index 85e9f8ca74..aacfc1a8a5 100644 Binary files a/electron_app/img/riot.png and b/electron_app/img/riot.png differ diff --git a/electron_app/package.json b/electron_app/package.json index 4259efee99..bf29ef0eae 100644 --- a/electron_app/package.json +++ b/electron_app/package.json @@ -2,33 +2,19 @@ "name": "riot-web", "productName": "Riot", "main": "src/electron-main.js", - "version": "0.17.9", + "version": "1.0.1", "description": "A feature-rich client for Matrix.org", "author": "New Vector Ltd.", "dependencies": { "auto-launch": "^5.0.1", + "electron-store": "^2.0.0", "electron-window-state": "^4.1.0", - "iohook": "^0.2.4", + "iohook": "^0.3.1", "minimist": "^1.2.0", "png-to-ico": "^1.0.2" }, - "iohook": { - "targets": [ - "node-64", - "electron-64" - ], - "platforms": [ - "win32", - "darwin", - "linux" - ], - "arches": [ - "x64", - "ia32" - ] - }, "cmake-js": { "runtime": "electron", - "runtimeVersion": "3.0.5" + "runtimeVersion": "4.0.6" } } diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js index 04544693e6..32f271097f 100644 --- a/electron_app/src/electron-main.js +++ b/electron_app/src/electron-main.js @@ -28,6 +28,7 @@ const {app, ipcMain, powerSaveBlocker, BrowserWindow, Menu, autoUpdater, protoco const AutoLaunch = require('auto-launch'); const ioHook = require('iohook'); const path = require('path'); +const ioHook = require('iohook'); const tray = require('./tray'); const vectorMenu = require('./vectormenu'); @@ -36,6 +37,7 @@ const updater = require('./updater'); const { migrateFromOldOrigin } = require('./originMigrator'); const windowStateKeeper = require('electron-window-state'); +const Store = require('electron-store'); // boolean flag set whilst we are doing one-time origin migration // We only serve the origin migration script while we're actually @@ -56,8 +58,19 @@ try { // Continue with the defaults (ie. an empty config) } +try { + // Load local config and use it to override values from the one baked with the build + const localConfig = require(path.join(app.getPath('userData'), 'config.json')); + vectorConfig = Object.assign(vectorConfig, localConfig); +} catch (e) { + // Could not load local config, this is expected in most cases. +} + +const store = new Store({ name: "electron-config" }); + let mainWindow = null; global.appQuitting = false; +global.minimizeToTray = store.get('minimizeToTray', true); // handle uncaught errors otherwise it displays @@ -137,6 +150,12 @@ ipcMain.on('ipcCall', async function(ev, payload) { launcher.disable(); } break; + case 'getMinimizeToTrayEnabled': + ret = global.minimizeToTray; + break; + case 'setMinimizeToTrayEnabled': + store.set('minimizeToTray', global.minimizeToTray = args[0]); + break; case 'getAppVersion': ret = app.getVersion(); break; @@ -148,6 +167,7 @@ ipcMain.on('ipcCall', async function(ev, payload) { } else { mainWindow.focus(); } + break; case 'origin_migrate': migratingOrigin = true; await migrateFromOldOrigin(); @@ -263,10 +283,12 @@ app.on('ready', () => { path: absTarget, }); }, (error) => { - if (error) console.error('Failed to register protocol') + if (error) console.error('Failed to register protocol'); }); - if (vectorConfig['update_base_url']) { + if (argv['no-update']) { + console.log('Auto update disabled via command line flag "--no-update"'); + } else if (vectorConfig['update_base_url']) { console.log(`Starting auto update with base URL: ${vectorConfig['update_base_url']}`); updater.start(vectorConfig['update_base_url']); } else { @@ -332,7 +354,7 @@ app.on('ready', () => { mainWindow = global.mainWindow = null; }); mainWindow.on('close', (e) => { - if (!global.appQuitting && (tray.hasTray() || process.platform === 'darwin')) { + if (global.minimizeToTray && !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) @@ -476,6 +498,92 @@ app.on('second-instance', (ev, commandLine, workingDirectory) => { } }); +// Counter for keybindings we have registered +let ioHookTasks = 0; + +// Limit for amount of keybindings that can be +// registered at once. +const keybindingRegistrationLimit = 1; + +// Fires when a global keybinding is being registered +ipcMain.on('register-keybinding', function(ev, keybinding) { + // Prevent registering more than the defined limit + if (ioHookTasks >= keybindingRegistrationLimit) { + ioHookTasks = keybindingRegistrationLimit; + return; + } + + // Start listening for global keyboard shortcuts + if (ioHookTasks <= 0) { + ioHookTasks = 0; + ioHook.start(); + } + ioHookTasks++; + + ioHook.registerShortcut(keybinding.code, () => { + ev.sender.send('keybinding-pressed', keybinding.name); + }, () => { + ev.sender.send('keybinding-released', keybinding.name); + }); +}); + +// Fires when a global keybinding is being unregistered +ipcMain.on('unregister-keybinding', function(ev, keybindingCode) { + // Stop listening for global keyboard shortcuts if we're + // unregistering the last one + if (ioHookTasks <= 1) { + ioHook.stop(); + } + ioHookTasks--; + + ioHook.unregisterShortcutByKeys(keybindingCode); +}); + +// Tell renderer process what key was pressed +// iohook has its own encoding for keys, so we can't just use a +// listener in the renderer process to register iohook shortcuts +let renderProcessID = null; +const reportKeyEvent = function(keyEvent) { + // "this" is the renderer process because we call this method with .bind() + renderProcessID.sender.send('keypress', { + keydown: keyEvent.type == 'keydown', + keycode: keyEvent.keycode, + }); +}; + +// Fires when listening on all keys +// !!Security note: Ensure iohook is only allowed to listen to keybindings +// when the browser window is in focus, else an XSS could lead to keylogging +// Currently, this is achieved by leveraging browserWindow to act on focus loss +ipcMain.on('start-listening-keys', function(ev, keybindingCode) { + // Start recording keypresses + if (ioHookTasks <= 0) { + ioHookTasks = 0; + ioHook.start(); + } + ioHookTasks++; + + renderProcessID = ev; + ioHook.on('keydown', reportKeyEvent); + ioHook.on('keyup', reportKeyEvent); +}); + +const stopListeningKeys = () => { + // Stop recording keypresses + ioHook.off('keydown', reportKeyEvent); + ioHook.off('keyup', reportKeyEvent); +}; + +ipcMain.on('stop-listening-keys', () => { + if (ioHookTasks <= 1) { + ioHookTasks = 1; + ioHook.stop(); + } + ioHookTasks--; + + stopListeningKeys(); +}); + // Set the App User Model ID to match what the squirrel // installer uses for the shortcut icon. // This makes notifications work on windows 8.1 (and is diff --git a/electron_app/src/vectormenu.js b/electron_app/src/vectormenu.js index 14f91a5268..ce35cf7c83 100644 --- a/electron_app/src/vectormenu.js +++ b/electron_app/src/vectormenu.js @@ -37,7 +37,7 @@ const template = [ submenu: [ { type: 'separator' }, { role: 'resetzoom' }, - { role: 'zoomin' }, + { role: 'zoomin', accelerator: 'CommandOrControl+=' }, { role: 'zoomout' }, { type: 'separator' }, { role: 'togglefullscreen' }, diff --git a/karma.conf.js b/karma.conf.js index d982aa2421..ae666a455b 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -78,7 +78,7 @@ module.exports = function (config) { watched: false, included: false, served: true, nocache: false, }, { - pattern: 'res/themes/**', + pattern: 'res/**', watched: false, included: false, served: true, nocache: false, }, ], @@ -87,6 +87,8 @@ module.exports = function (config) { // redirect img links to the karma server. See above. "/img/": "/base/node_modules/matrix-react-sdk/res/img/", "/themes/": "/base/res/themes/", + "/welcome.html": "/base/res/welcome.html", + "/welcome/": "/base/res/welcome/", }, // preprocess matching files before serving them to the browser diff --git a/package-lock.json b/package-lock.json index 46f716045f..c1d6d2dcef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "riot-web", - "version": "0.17.8", + "version": "1.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -16,27 +16,6 @@ "integrity": "sha512-AsnBZN3a8/JcNt+KPkGGODaA4c7l3W5+WpeKgGSbstSLxqWtTXqd1ieJGBQ8IFCtRg8DmmKUcSkIkUc0A4p3YA==", "dev": true }, - "7zip-bin-linux": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/7zip-bin-linux/-/7zip-bin-linux-1.3.1.tgz", - "integrity": "sha512-Wv1uEEeHbTiS1+ycpwUxYNuIcyohU6Y6vEqY3NquBkeqy0YhVdsNUGsj0XKSRciHR6LoJSEUuqYUexmws3zH7Q==", - "dev": true, - "optional": true - }, - "7zip-bin-mac": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/7zip-bin-mac/-/7zip-bin-mac-1.0.1.tgz", - "integrity": "sha1-Pmh3i78JJq3GgVlCcHRQXUdVXAI=", - "dev": true, - "optional": true - }, - "7zip-bin-win": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/7zip-bin-win/-/7zip-bin-win-2.1.1.tgz", - "integrity": "sha512-6VGEW7PXGroTsoI2QW3b0ea95HJmbVBHvfANKLLMzSzFA1zKqVX5ybNuhmeGpf6vA0x8FJTt6twpprDANsY5WQ==", - "dev": true, - "optional": true - }, "@babel/code-frame": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", @@ -114,9 +93,9 @@ } }, "@babel/runtime": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", - "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz", + "integrity": "sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==", "requires": { "regenerator-runtime": "^0.12.0" }, @@ -692,20 +671,18 @@ "dev": true }, "archiver": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", - "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.0.0.tgz", + "integrity": "sha512-5QeR6Xc5hSA9X1rbQfcuQ6VZuUXOaEdB65Dhmk9duuRJHYif/ZyJfuyJqsQrj34PFjU5emv5/MmfgA8un06onw==", "dev": true, "requires": { - "archiver-utils": "^1.3.0", + "archiver-utils": "^2.0.0", "async": "^2.0.0", "buffer-crc32": "^0.2.1", "glob": "^7.0.0", - "lodash": "^4.8.0", "readable-stream": "^2.0.0", "tar-stream": "^1.5.0", - "walkdir": "^0.0.11", - "zip-stream": "^1.1.0" + "zip-stream": "^2.0.1" }, "dependencies": { "glob": { @@ -724,7 +701,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -740,16 +717,22 @@ } }, "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.0.0.tgz", + "integrity": "sha512-JRBgcVvDX4Mwu2RBF8bBaHcQCSxab7afsxAPYDQ5W+19quIPP5CfKE7Ql+UHs9wYvwsaNR8oDuhtf5iqrKmzww==", "dev": true, "requires": { "glob": "^7.0.0", "graceful-fs": "^4.1.0", "lazystream": "^1.0.0", - "lodash": "^4.8.0", - "normalize-path": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.toarray": "^4.4.0", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", "readable-stream": "^2.0.0" }, "dependencies": { @@ -767,9 +750,15 @@ "path-is-absolute": "^1.0.0" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -2239,9 +2228,9 @@ } }, "base-x": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", - "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", + "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", "requires": { "safe-buffer": "^5.0.1" } @@ -2290,7 +2279,8 @@ "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true }, "binary-extensions": { "version": "1.12.0", @@ -2300,7 +2290,7 @@ }, "bl": { "version": "1.2.2", - "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { @@ -2310,7 +2300,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -2326,9 +2316,9 @@ } }, "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "dev": true }, "bluebird": { @@ -2345,15 +2335,6 @@ "bluebird": "^3.5.2" } }, - "bluebird-lst-c": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/bluebird-lst-c/-/bluebird-lst-c-1.0.6.tgz", - "integrity": "sha1-gfiB0T+d9wD2fVd/E0gLwy2Eu6k=", - "dev": true, - "requires": { - "bluebird": "^3.4.7" - } - }, "blueimp-canvas-to-blob": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.14.0.tgz", @@ -3512,7 +3493,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -4065,7 +4046,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -4395,9 +4376,9 @@ "dev": true }, "date-names": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/date-names/-/date-names-0.1.12.tgz", - "integrity": "sha512-HYc4+Rl53sOHh9R0pgpgqzZy471E4cFXLOjJDQImGOAeacbAV87+RUO70iE1Mfvnp1yuS2V8Y+/n1nS7OoMYiw==" + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/date-names/-/date-names-0.1.13.tgz", + "integrity": "sha512-IxxoeD9tdx8pXVcmqaRlPvrXIsSrSrIZzfzlOkm9u+hyzKp5Wk/odt9O/gd7Ockzy8n/WHeEpTVJ2bF3mMV4LA==" }, "date-now": { "version": "0.1.4", @@ -5070,208 +5051,177 @@ } } }, - "electron-builder-core": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/electron-builder-core/-/electron-builder-core-11.2.1.tgz", - "integrity": "sha1-HcqMGhzui1F1C3cIoEkTrv+s+Kg=", - "dev": true - }, - "electron-builder-http": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/electron-builder-http/-/electron-builder-http-11.5.0.tgz", - "integrity": "sha1-t3OWY0kDREMp7aO7zQIyFEDgYDg=", - "dev": true, - "requires": { - "debug": "2.6.0", - "fs-extra-p": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.0", - "resolved": "http://registry.npmjs.org/debug/-/debug-2.6.0.tgz", - "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" - } - }, - "fs-extra-p": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-3.1.0.tgz", - "integrity": "sha1-7d97uNk4XXkBTeyyH0Wx0MV5ANM=", - "dev": true, - "requires": { - "bluebird-lst-c": "^1.0.6", - "fs-extra": "^2.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, "electron-builder-squirrel-windows": { - "version": "11.6.1", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-11.6.1.tgz", - "integrity": "sha1-pRYS0oiDuesK8IQuPrJoRM9aalI=", + "version": "20.39.0", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-20.39.0.tgz", + "integrity": "sha512-WE7gGtj6jXbKEmH2lAVaGX/SNZijZKIrBI4W8Lyu2zWOO5/Zhy4Vcnh7vw036s4g0ikqiD7Uvju9kYOXvown6A==", "dev": true, "requires": { - "archiver": "^1.3.0", - "bluebird-lst-c": "^1.0.6", - "electron-builder-core": "~11.2.1", - "electron-builder-util": "~11.6.1", - "fs-extra-p": "^3.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" - } - }, - "fs-extra-p": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-3.1.0.tgz", - "integrity": "sha1-7d97uNk4XXkBTeyyH0Wx0MV5ANM=", - "dev": true, - "requires": { - "bluebird-lst-c": "^1.0.6", - "fs-extra": "^2.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - } - } - }, - "electron-builder-util": { - "version": "11.6.1", - "resolved": "https://registry.npmjs.org/electron-builder-util/-/electron-builder-util-11.6.1.tgz", - "integrity": "sha1-D1VvZ6cOTI11GFVp7yp1ZtsBXsw=", - "dev": true, - "requires": { - "7zip-bin": "^2.0.4", - "bluebird-lst-c": "^1.0.6", - "chalk": "^1.1.3", - "debug": "2.6.0", - "electron-builder-http": "~11.5.0", - "fs-extra-p": "^3.1.0", - "is-ci": "^1.0.10", - "node-emoji": "^1.5.1", - "source-map-support": "^0.4.10", - "stat-mode": "^0.2.2" + "7zip-bin": "~4.0.2", + "archiver": "^3.0.0", + "bluebird-lst": "^1.0.7", + "builder-util": "~9.7.0", + "fs-extra-p": "^7.0.1", + "sanitize-filename": "^1.6.1" }, "dependencies": { "7zip-bin": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-2.4.1.tgz", - "integrity": "sha512-QU3oR1dLLVrYGRkb7LU17jMCpIkWtXXW7q71ECXWXkR9vOv37VjykqpvFgs29HgSCNLZHnNKJzdG6RwAW0LwIA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-4.0.2.tgz", + "integrity": "sha512-XtGk+IF57pr852UK1AhQJXqmm1WmSgS5uISL+LPs0z/iAxXouMvdlLJrHPeukP6gd7yR2rDTMSMkHNODgwIq7A==", "dev": true, - "requires": { - "7zip-bin-linux": "~1.3.1", - "7zip-bin-mac": "~1.0.1", - "7zip-bin-win": "~2.1.1" - } + "optional": true }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "app-builder-bin": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.6.4.tgz", + "integrity": "sha512-wC9HYqiC1XqpunT/9y2VuF90KbarnIHL90Tv8BD3TITTgbVIdRTXAsvWvmaR/ImvAX0+l5Z3jZtXjdJ7Pw3bLQ==", "dev": true }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "sprintf-js": "~1.0.2" } }, - "debug": { - "version": "2.6.0", - "resolved": "http://registry.npmjs.org/debug/-/debug-2.6.0.tgz", - "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "dev": true + }, + "bluebird-lst": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.7.tgz", + "integrity": "sha512-5ix04IbXVIZ6nSRM4aZnwQfk40Td0D57WAl8LfhnICF6XwT4efCZYh0veOHvfDmgpbqE4ju5L5XEAMIcAe13Kw==", "dev": true, "requires": { - "ms": "0.7.2" + "bluebird": "^3.5.3" + } + }, + "builder-util": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-9.7.0.tgz", + "integrity": "sha512-QA2RxbaSKvaFVNGcYsjmlkTn03tcdPxgIxHCOgw38G7NK91QWc76RBY9+T1sU8BLVEZJ4qNRWx+pd5rG9tTi+Q==", + "dev": true, + "requires": { + "7zip-bin": "~4.1.0", + "app-builder-bin": "2.6.4", + "bluebird-lst": "^1.0.7", + "builder-util-runtime": "^8.2.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "fs-extra-p": "^7.0.1", + "is-ci": "^2.0.0", + "js-yaml": "^3.12.1", + "source-map-support": "^0.5.10", + "stat-mode": "^0.2.2", + "temp-file": "^3.3.2" + }, + "dependencies": { + "7zip-bin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-4.1.0.tgz", + "integrity": "sha512-AsnBZN3a8/JcNt+KPkGGODaA4c7l3W5+WpeKgGSbstSLxqWtTXqd1ieJGBQ8IFCtRg8DmmKUcSkIkUc0A4p3YA==", + "dev": true + } + } + }, + "builder-util-runtime": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.2.0.tgz", + "integrity": "sha512-2Q3YrxANTrDs2NjSG5mbNGLPuUhPnSNYF9w5i4jWfHcNfQ3TgRrGXq4UfnkCiZVX8Axp4eAOSscaLLScKp/XLg==", + "dev": true, + "requires": { + "bluebird-lst": "^1.0.7", + "debug": "^4.1.1", + "fs-extra-p": "^7.0.1", + "sax": "^1.2.4" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" } }, "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-extra-p": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-3.1.0.tgz", - "integrity": "sha1-7d97uNk4XXkBTeyyH0Wx0MV5ANM=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-7.0.1.tgz", + "integrity": "sha512-yhd2OV0HnHt2oitlp+X9hl2ReX4X/7kQeL7/72qzPHTZj5eUPGzAKOvEglU02Fa1OeG2rSy/aKB4WGVaLiF8tw==", "dev": true, "requires": { - "bluebird-lst-c": "^1.0.6", - "fs-extra": "^2.0.0" + "bluebird-lst": "^1.0.7", + "fs-extra": "^7.0.1" } }, - "jsonfile": { - "version": "2.4.0", - "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "supports-color": { + "is-ci": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "js-yaml": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "source-map-support": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true } } @@ -5408,9 +5358,9 @@ } }, "engine.io": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", - "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", "dev": true, "requires": { "accepts": "~1.3.4", @@ -5475,15 +5425,15 @@ } }, "engine.io-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", - "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", "dev": true, "requires": { "after": "0.8.2", "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", + "blob": "0.0.5", "has-binary2": "~1.0.2" } }, @@ -6304,6 +6254,12 @@ "write": "^0.2.1" } }, + "flatted": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "dev": true + }, "flush-write-stream": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", @@ -6606,7 +6562,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -7021,7 +6978,8 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -7077,6 +7035,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -7120,12 +7079,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -7286,7 +7247,7 @@ }, "got": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { @@ -7335,9 +7296,9 @@ }, "dependencies": { "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "6.9.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.2.tgz", + "integrity": "sha512-4UFy0/LgDo7Oa/+wOAlj44tp9K78u38E5/359eSrqEp1Z5PdVfimCcs7SluXMP755RUQu6d2b4AvF0R1C9RZjg==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -7494,11 +7455,11 @@ } }, "hoist-non-react-statics": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.2.1.tgz", - "integrity": "sha512-TFsu3TV3YLY+zFTZDrN8L2DTFanObwmBLpWvJs1qfUuEQ5bTAdFcwfx2T/bsCXfM9QHSLvjfP+nihEl0yvozxw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", "requires": { - "react-is": "^16.3.2" + "react-is": "^16.7.0" } }, "home-or-tmp": { @@ -8300,8 +8261,7 @@ "ip-regex": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" }, "ipaddr.js": { "version": "1.8.0", @@ -8514,6 +8474,14 @@ "is-path-inside": "^1.0.0" } }, + "is-ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-2.0.0.tgz", + "integrity": "sha1-aO6gfooKCpTC0IDdZ0xzGrKkYas=", + "requires": { + "ip-regex": "^2.0.0" + } + }, "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", @@ -8805,7 +8773,8 @@ "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true }, "jsonfile": { "version": "4.0.0", @@ -8843,9 +8812,9 @@ } }, "karma": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.1.tgz", - "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.4.tgz", + "integrity": "sha512-31Vo8Qr5glN+dZEVIpnPCxEGleqE0EY6CtC2X9TagRV3rRQ3SNrvfhddICkJgUK3AgqpeKSZau03QumTGhGoSw==", "dev": true, "requires": { "bluebird": "^3.3.0", @@ -8858,11 +8827,12 @@ "di": "^0.0.1", "dom-serialize": "^2.2.0", "expand-braces": "^0.1.1", + "flatted": "^2.0.0", "glob": "^7.1.1", "graceful-fs": "^4.1.2", "http-proxy": "^1.13.0", "isbinaryfile": "^3.0.0", - "lodash": "^4.17.4", + "lodash": "^4.17.5", "log4js": "^3.0.0", "mime": "^2.3.1", "minimatch": "^3.0.2", @@ -8874,7 +8844,7 @@ "socket.io": "2.1.1", "source-map": "^0.6.1", "tmp": "0.0.33", - "useragent": "2.2.1" + "useragent": "2.3.0" }, "dependencies": { "glob": { @@ -9053,7 +9023,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -9087,9 +9057,9 @@ } }, "linkifyjs": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-2.1.7.tgz", - "integrity": "sha512-Cbn77BnYEslpAObZZoP6GVQHF1j5T6RsDydNq5RVxIy4eiZAiADRx7qHfWzfEMQecc1PtZFog1AsCGGX2WjQLA==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-2.1.8.tgz", + "integrity": "sha512-j3QpiEr4UYzN5foKhrr9Sr06VI9vSlI4HisDWt+7Mq+TWDwpJ6H/LLpogYsXcyUIJLVhGblXXdUnblHsVNMPpg==", "requires": { "jquery": "^3.3.1", "react": "^16.4.2", @@ -9097,27 +9067,27 @@ }, "dependencies": { "react": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.7.0.tgz", - "integrity": "sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A==", + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.3.tgz", + "integrity": "sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA==", "optional": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.12.0" + "scheduler": "^0.13.3" } }, "react-dom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.7.0.tgz", - "integrity": "sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg==", + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.3.tgz", + "integrity": "sha512-ttMem9yJL4/lpItZAQ2NTFAbV7frotHk5DZEHXUOws2rMmrsvh1Na7ThGT0dTzUIl6pqTOi5tYREfL8AEna3lA==", "optional": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.12.0" + "scheduler": "^0.13.3" } } } @@ -9141,13 +9111,28 @@ "dev": true }, "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "requires": { - "big.js": "^3.1.3", + "big.js": "^5.2.2", "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "json5": "^1.0.1" + }, + "dependencies": { + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } } }, "locate-path": { @@ -9178,6 +9163,12 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.11.tgz", "integrity": "sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q==" }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -9189,11 +9180,29 @@ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, "lodash.escaperegexp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -9215,6 +9224,12 @@ "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", "dev": true }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true + }, "log4js": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", @@ -9324,19 +9339,21 @@ "dev": true }, "matrix-js-sdk": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/matrix-js-sdk/-/matrix-js-sdk-0.14.2.tgz", - "integrity": "sha512-6Wvzv3fKjlmNz/tqGlvBy2RouqyK8VfR2elXaJlFpPnSOiE6+CNeF8vJZC7Ch4e+/W3LDnpG6IIVZ55iMEULyg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/matrix-js-sdk/-/matrix-js-sdk-1.0.0.tgz", + "integrity": "sha512-VeLAtD8qC83bUg2Yp4rdngDkO653gXK5Xr4/L7ny75FRHG09y5ps8Vm8Q08FV0Mr3vSPfO9h92R5m5oQ5AwB9g==", "requires": { "another-json": "^0.2.0", "babel-runtime": "^6.26.0", + "base-x": "3.0.4", "bluebird": "^3.5.0", "browser-request": "^0.3.3", "bs58": "^4.0.1", "content-type": "^1.0.2", "loglevel": "1.6.1", "qs": "^6.5.2", - "request": "^2.88.0" + "request": "^2.88.0", + "unhomoglyph": "^1.0.2" } }, "matrix-mock-request": { @@ -9350,9 +9367,9 @@ } }, "matrix-react-sdk": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/matrix-react-sdk/-/matrix-react-sdk-0.14.7.tgz", - "integrity": "sha512-CbgX/OxdjvRKQ8TPzeJH0RD3kAMPk8lFxzmfgSzR9gWQ0bdXeBT6iadWQLe9dujjBviU1rMDl+Wy8NYgd8FmdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/matrix-react-sdk/-/matrix-react-sdk-1.0.1.tgz", + "integrity": "sha512-FTT74tXoeJPhH/P+Sk5ju50lHyABi0ozrOGJB3+L/uS2qc0OexyBlrEW+QBGbK+nXVosdAEDFQkdeUwDa8svEw==", "requires": { "babel-plugin-syntax-dynamic-import": "^6.18.0", "babel-runtime": "^6.26.0", @@ -9369,13 +9386,16 @@ "flux": "2.1.1", "focus-trap-react": "^3.0.5", "fuse.js": "^2.2.0", + "gemini-scrollbar": "github:matrix-org/gemini-scrollbar#b302279810d05319ac5ff1bd34910bff32325c7b", "gfm.css": "^1.1.1", "glob": "^5.0.14", "highlight.js": "^9.13.0", + "is-ip": "^2.0.0", "isomorphic-fetch": "^2.2.1", "linkifyjs": "^2.1.6", "lodash": "^4.13.1", "lolex": "2.3.2", + "matrix-js-sdk": "1.0.0", "optimist": "^0.6.1", "pako": "^1.0.5", "prop-types": "^15.5.8", @@ -9385,45 +9405,20 @@ "react-addons-css-transition-group": "15.3.2", "react-beautiful-dnd": "^4.0.1", "react-dom": "^15.6.0", + "react-gemini-scrollbar": "github:matrix-org/react-gemini-scrollbar#5e97aef7e034efc8db1431f4b0efe3b26e249ae9", "resize-observer-polyfill": "^1.5.0", "sanitize-html": "^1.18.4", "slate": "^0.41.2", "slate-html-serializer": "^0.6.1", + "slate-md-serializer": "github:matrix-org/slate-md-serializer#f7c4ad394f5af34d4c623de7909ce95ab78072d3", "slate-react": "^0.18.10", "text-encoding-utf-8": "^1.0.1", "url": "^0.11.0", + "velocity-vector": "github:vector-im/velocity#059e3b2348f1110888d033974d3109fd5a3af00f", "whatwg-fetch": "^1.1.1", "zxcvbn": "^4.4.2" }, "dependencies": { - "gemini-scrollbar": { - "version": "github:matrix-org/gemini-scrollbar#b302279810d05319ac5ff1bd34910bff32325c7b", - "from": "github:matrix-org/gemini-scrollbar#b302279810d05319ac5ff1bd34910bff32325c7b" - }, - "react-gemini-scrollbar": { - "version": "github:matrix-org/react-gemini-scrollbar#5e97aef7e034efc8db1431f4b0efe3b26e249ae9", - "from": "github:matrix-org/react-gemini-scrollbar#5e97aef7e034efc8db1431f4b0efe3b26e249ae9", - "requires": { - "gemini-scrollbar": "github:matrix-org/gemini-scrollbar#b302279810d05319ac5ff1bd34910bff32325c7b" - }, - "dependencies": { - "gemini-scrollbar": { - "version": "github:matrix-org/gemini-scrollbar#b302279810d05319ac5ff1bd34910bff32325c7b", - "from": "github:matrix-org/gemini-scrollbar#b302279" - } - } - }, - "slate-md-serializer": { - "version": "github:matrix-org/slate-md-serializer#f7c4ad394f5af34d4c623de7909ce95ab78072d3", - "from": "github:matrix-org/slate-md-serializer#f7c4ad394f5af34d4c623de7909ce95ab78072d3" - }, - "velocity-vector": { - "version": "github:vector-im/velocity#059e3b2348f1110888d033974d3109fd5a3af00f", - "from": "github:vector-im/velocity#059e3b2348f1110888d033974d3109fd5a3af00f", - "requires": { - "jquery": ">= 1.4.3" - } - }, "whatwg-fetch": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz", @@ -9866,15 +9861,6 @@ "lower-case": "^1.1.1" } }, - "node-emoji": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.8.1.tgz", - "integrity": "sha512-+ktMAh1Jwas+TnGodfCfjUbJKoANqPaJFN0z0iqh41eqD8dvguNzcitVSBSVK1pidz0AqGbLKcoVuVLRVZ/aVg==", - "dev": true, - "requires": { - "lodash.toarray": "^4.4.0" - } - }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -10122,6 +10108,12 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, + "olm": { + "version": "3.1.0-pre1", + "resolved": "https://matrix.org/packages/npm/olm/olm-3.1.0-pre1.tgz", + "integrity": "sha512-buQmmmZlpTYxj9p/U/Jn9QIVdyaoOE5Hq7/K9MPDjeyxHbnOfv40NxeriCUIH+sQdy4LFnHYDoXyyjicT9tR6g==", + "optional": true + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -11455,15 +11447,22 @@ "prop-types": "^15.5.10" } }, + "react-gemini-scrollbar": { + "version": "github:matrix-org/react-gemini-scrollbar#5e97aef7e034efc8db1431f4b0efe3b26e249ae9", + "from": "github:matrix-org/react-gemini-scrollbar#5e97aef", + "requires": { + "gemini-scrollbar": "github:matrix-org/gemini-scrollbar#b302279810d05319ac5ff1bd34910bff32325c7b" + } + }, "react-immutable-proptypes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/react-immutable-proptypes/-/react-immutable-proptypes-2.1.0.tgz", "integrity": "sha1-Aj1vObsVyXwHHp5g0A0TbqxfoLQ=" }, "react-is": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.7.0.tgz", - "integrity": "sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==" + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.3.tgz", + "integrity": "sha512-Y4rC1ZJmsxxkkPuMLwvKvlL1Zfpbcu+Bf4ZigkHup3v9EfdYhAlWAaVyA19olXq2o2mGn0w+dFKvk3pVVlYcIA==" }, "react-lifecycles-compat": { "version": "3.0.4", @@ -12390,9 +12389,9 @@ "dev": true }, "scheduler": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz", - "integrity": "sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.3.tgz", + "integrity": "sha512-UxN5QRYWtpR1egNWzJcVLk8jlegxAugswQc984lD3kU7NuobsO37/sRfbpTdBjtnD5TBNFA2Q2oLV5+UmPSmEQ==", "optional": true, "requires": { "loose-envify": "^1.1.0", @@ -12645,9 +12644,9 @@ } }, "slate-base64-serializer": { - "version": "0.2.94", - "resolved": "https://registry.npmjs.org/slate-base64-serializer/-/slate-base64-serializer-0.2.94.tgz", - "integrity": "sha512-jltk0PwOS1lu/TRHTN/qW67+VSXlbX1d0GottPloKjYwHBbH47GVT/G+hmkOdrGXzV7P6220BvQwN8Xq2RaJ5A==", + "version": "0.2.95", + "resolved": "https://registry.npmjs.org/slate-base64-serializer/-/slate-base64-serializer-0.2.95.tgz", + "integrity": "sha512-WK8roQUQBM7lHXNS6HYNmMSJ5tJmuoLeZkHJEHWCEl+1op1m5sC2onzBfpIRNP8AijlZ3m+lGlxfLO+3VtBMxw==", "requires": { "isomorphic-base64": "^1.0.2" } @@ -12688,10 +12687,14 @@ "type-of": "^2.0.1" } }, + "slate-md-serializer": { + "version": "github:matrix-org/slate-md-serializer#f7c4ad394f5af34d4c623de7909ce95ab78072d3", + "from": "github:matrix-org/slate-md-serializer#f7c4ad3" + }, "slate-plain-serializer": { - "version": "0.6.33", - "resolved": "https://registry.npmjs.org/slate-plain-serializer/-/slate-plain-serializer-0.6.33.tgz", - "integrity": "sha512-dkbWQvB9FA/qN3HfkQ++xksaBHZsa6NCBG42OV70Y2wLSjN7Ym8NzQMR4bb5i67kL+ko+TXJ0Qg2sNiOEATCNQ==" + "version": "0.6.34", + "resolved": "https://registry.npmjs.org/slate-plain-serializer/-/slate-plain-serializer-0.6.34.tgz", + "integrity": "sha512-NuP00YRZxepDWB3c+SUW0aKsA+RFLw3Lrl3g6011SKNsBlPR9TZlvOy8VqyNCHhBdpyiT9IoIDuA69D+r5q7TA==" }, "slate-prop-types": { "version": "0.4.67", @@ -13203,9 +13206,9 @@ } }, "sshpk": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", - "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -13347,7 +13350,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -13517,7 +13520,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -13897,6 +13900,11 @@ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=" }, + "unhomoglyph": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unhomoglyph/-/unhomoglyph-1.0.2.tgz", + "integrity": "sha1-1p5fWmocayEZQaCIm4HrqGWVwlM=" + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -14115,21 +14123,13 @@ "dev": true }, "useragent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", - "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", "dev": true, "requires": { - "lru-cache": "2.2.x", + "lru-cache": "4.1.x", "tmp": "0.0.x" - }, - "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - } } }, "utf8-byte-length": { @@ -14209,6 +14209,13 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, + "velocity-vector": { + "version": "github:vector-im/velocity#059e3b2348f1110888d033974d3109fd5a3af00f", + "from": "github:vector-im/velocity#059e3b2", + "requires": { + "jquery": ">= 1.4.3" + } + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -14234,12 +14241,6 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, - "walkdir": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", - "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=", - "dev": true - }, "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", @@ -15239,7 +15240,7 @@ }, "xmlbuilder": { "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", "dev": true }, @@ -15312,20 +15313,19 @@ "dev": true }, "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.0.1.tgz", + "integrity": "sha512-c+eUhhkDpaK87G/py74wvWLtz2kzMPNCCkUApkun50ssE0oQliIQzWpTnwjB+MTKVIf2tGzIgHyqW/Y+W77ecQ==", "dev": true, "requires": { - "archiver-utils": "^1.3.0", + "archiver-utils": "^2.0.0", "compress-commons": "^1.2.0", - "lodash": "^4.8.0", "readable-stream": "^2.0.0" }, "dependencies": { "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { diff --git a/package.json b/package.json index f63f57a2db..a90e8490ec 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "riot-web", "productName": "Riot", "main": "electron_app/src/electron-main.js", - "version": "0.17.9", + "version": "1.0.1", "description": "A feature-rich client for Matrix.org", "author": "New Vector Ltd.", "repository": { @@ -42,7 +42,7 @@ "build:dev": "npm run build:js-sdk && npm run build:react-sdk && npm run reskindex && npm run build:res && npm run build:bundle:dev", "dist": "scripts/package.sh", "install:electron": "install-app-deps", - "electron": "npm run install:electron && electron .", + "electron": "npm run install:electron && npx electron .", "start:res": "node scripts/copy-res.js -w", "start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development", "start:js:prod": "cross-env NODE_ENV=production webpack-dev-server -w --progress", @@ -70,8 +70,8 @@ "gemini-scrollbar": "github:matrix-org/gemini-scrollbar#b302279", "gfm.css": "^1.1.2", "highlight.js": "^9.13.1", - "matrix-js-sdk": "0.14.3", - "matrix-react-sdk": "0.14.8", + "matrix-js-sdk": "1.0.0", + "matrix-react-sdk": "1.0.1", "modernizr": "^3.6.0", "prop-types": "^15.6.2", "react": "^15.6.0", @@ -102,7 +102,7 @@ "cross-env": "^4.0.0", "css-loader": "^2.1.0", "electron-builder": "^20.38.5", - "electron-builder-squirrel-windows": "^11.6.1", + "electron-builder-squirrel-windows": "^20.38.5", "electron-devtools-installer": "^2.2.4", "emojione": "^2.2.7", "eslint": "^5.8.0", @@ -115,7 +115,7 @@ "fs-extra": "^0.30.0", "html-webpack-plugin": "^3.2.0", "json-loader": "^0.5.3", - "karma": "^3.1.1", + "karma": "^3.1.2", "karma-chrome-launcher": "^0.2.3", "karma-cli": "^1.0.1", "karma-junit-reporter": "^2.0.0", @@ -125,6 +125,7 @@ "karma-spec-reporter": "0.0.31", "karma-summary-reporter": "^1.5.1", "karma-webpack": "4.0.0-beta.0", + "loader-utils": "^1.2.3", "matrix-mock-request": "^1.2.2", "matrix-react-test-utils": "^0.2.0", "minimist": "^1.2.0", @@ -151,7 +152,7 @@ }, "build": { "appId": "im.riot.app", - "electronVersion": "4.0.1", + "electronVersion": "4.0.6", "files": [ "node_modules/**", "src/**", diff --git a/res/home-status.html b/res/home-status.html deleted file mode 100644 index 7d50470a22..0000000000 --- a/res/home-status.html +++ /dev/null @@ -1,192 +0,0 @@ - - -
-
-
-

Welcome to Status Community Chat, powered by Riot.

-

For contributors, developers and Ethereum-enthusiasts who care about the movement for decentralization.

-
-
- -
-

Our rooms

-

Please abide by the channels discussion categories and remain on topic to the specific category details listed.

-

Before posting please refer to our Code of Conduct

-
- - -
- - #announcements - Company wide announcements. - Join -
-
- - #introductions - Newcomer introductions. - Join -
-
- - #general - General discussions of Status. - Join -
-
- - #dev-status - Contributing to our codebase? Building a DApp or a chatbot? We're here to help. - Join -
-
- - #news-articles - Share news, articles related to Ethereum or projects you're excited about - Join -
-
-

- Interested in market and cryptocurrency type discussions? -

- Join Telegram -
-
diff --git a/res/home.html b/res/home.html deleted file mode 100644 index 7819d2e18c..0000000000 --- a/res/home.html +++ /dev/null @@ -1,200 +0,0 @@ - - -
- - - -

_t("Welcome to Riot.im")

-

_t("Decentralised, encrypted chat & collaboration powered by [matrix]")

- -
diff --git a/res/home/images/icons-directory.svg b/res/home/images/icons-directory.svg deleted file mode 100644 index 2688b84713..0000000000 --- a/res/home/images/icons-directory.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - icons_directory - Created with Sketch. - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/home/rooms/bridging.png b/res/home/rooms/bridging.png deleted file mode 100644 index 6b3a55e7bb..0000000000 Binary files a/res/home/rooms/bridging.png and /dev/null differ diff --git a/res/home/rooms/dendrite-dev.png b/res/home/rooms/dendrite-dev.png deleted file mode 100644 index 1d96bd84a7..0000000000 Binary files a/res/home/rooms/dendrite-dev.png and /dev/null differ diff --git a/res/home/rooms/dendrite.png b/res/home/rooms/dendrite.png deleted file mode 100644 index 1d96bd84a7..0000000000 Binary files a/res/home/rooms/dendrite.png and /dev/null differ diff --git a/res/home/rooms/e2e.png b/res/home/rooms/e2e.png deleted file mode 100644 index a2bda4bc68..0000000000 Binary files a/res/home/rooms/e2e.png and /dev/null differ diff --git a/res/home/rooms/homeowners.png b/res/home/rooms/homeowners.png deleted file mode 100644 index ed45f11ceb..0000000000 Binary files a/res/home/rooms/homeowners.png and /dev/null differ diff --git a/res/home/rooms/identity.jpg b/res/home/rooms/identity.jpg deleted file mode 100644 index f2e1505634..0000000000 Binary files a/res/home/rooms/identity.jpg and /dev/null differ diff --git a/res/home/rooms/identity.png b/res/home/rooms/identity.png deleted file mode 100644 index de1ea60d54..0000000000 Binary files a/res/home/rooms/identity.png and /dev/null differ diff --git a/res/home/rooms/irc.png b/res/home/rooms/irc.png deleted file mode 100644 index 5f611d12a4..0000000000 Binary files a/res/home/rooms/irc.png and /dev/null differ diff --git a/res/home/rooms/matrix-dev.png b/res/home/rooms/matrix-dev.png deleted file mode 100644 index fa54f00cb2..0000000000 Binary files a/res/home/rooms/matrix-dev.png and /dev/null differ diff --git a/res/home/rooms/matrix.png b/res/home/rooms/matrix.png deleted file mode 100644 index fa54f00cb2..0000000000 Binary files a/res/home/rooms/matrix.png and /dev/null differ diff --git a/res/home/rooms/riot-android.png b/res/home/rooms/riot-android.png deleted file mode 100644 index fa2bec8e3e..0000000000 Binary files a/res/home/rooms/riot-android.png and /dev/null differ diff --git a/res/home/rooms/riot-bot.png b/res/home/rooms/riot-bot.png deleted file mode 100644 index 9efd4a3c21..0000000000 Binary files a/res/home/rooms/riot-bot.png and /dev/null differ diff --git a/res/home/rooms/riot-dev.png b/res/home/rooms/riot-dev.png deleted file mode 100644 index ff8b21ad1a..0000000000 Binary files a/res/home/rooms/riot-dev.png and /dev/null differ diff --git a/res/home/rooms/riot-ios.png b/res/home/rooms/riot-ios.png deleted file mode 100644 index 6a0c598fe5..0000000000 Binary files a/res/home/rooms/riot-ios.png and /dev/null differ diff --git a/res/home/rooms/riot-translations.png b/res/home/rooms/riot-translations.png deleted file mode 100644 index 2ae95836e7..0000000000 Binary files a/res/home/rooms/riot-translations.png and /dev/null differ diff --git a/res/home/rooms/riot.png b/res/home/rooms/riot.png deleted file mode 100644 index 4daa2e4ef7..0000000000 Binary files a/res/home/rooms/riot.png and /dev/null differ diff --git a/res/home/rooms/synapse.png b/res/home/rooms/synapse.png deleted file mode 100644 index ee0f855895..0000000000 Binary files a/res/home/rooms/synapse.png and /dev/null differ diff --git a/res/home/rooms/vr.png b/res/home/rooms/vr.png deleted file mode 100644 index 98b77802df..0000000000 Binary files a/res/home/rooms/vr.png and /dev/null differ diff --git a/res/home/rooms/webrtc.png b/res/home/rooms/webrtc.png deleted file mode 100644 index 98b790f9ae..0000000000 Binary files a/res/home/rooms/webrtc.png and /dev/null differ diff --git a/res/themes/status/css/_StatusLogin.scss b/res/themes/status/css/_StatusLogin.scss deleted file mode 100644 index d3d9914ff5..0000000000 --- a/res/themes/status/css/_StatusLogin.scss +++ /dev/null @@ -1,232 +0,0 @@ -/* -Copyright 2017 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// overrides for mx_Login* specific to Status. -// Ideally this would be all Status prefixes for a Status specific version of the component -// but given we're not doing Status as a dedicated 'skin' yet... - -.mx_StatusLogin { - - width: 100%; - height: 100%; - - display: flex; - align-items: center; - justify-content: center; - - overflow: auto; - - .mx_StatusLogin_brand { - position: absolute; - top: 30px; - left: 30px; - } - - .mx_StatusLogin_content { - margin: auto; - } - - .mx_StatusLogin_header { - text-align: center; - margin-top: 70px; - margin-bottom: 50px; - } - - .mx_StatusLogin_header h1 { - font-size: 29px; - margin-bottom: 3px; - } - - .mx_StatusLogin_subtitle { - font-size: 18px; - } - - .mx_StatusLogin_subtitle a { - color: $riot-link-color; - } - - .mx_StatusLogin_footer { - margin-top: 30px; - margin-bottom: 30px; - text-align: center; - font-size: 16px; - color: $footer-color; - } - - .mx_StatusLogin_footer p { - margin-top: 0.5em; - margin-bottom: 0.5em; - } - - .mx_StatusLogin_footer_cta { - color: $callout-color; - font-family: $header-font-family; - letter-spacing: 1px; - font-size: 13px; - text-transform: uppercase; - opacity: 1.0; - transition: opacity .2s ease; - } - - .mx_StatusLogin_footer_cta:hover { - opacity: 0.5; - text-decoration: none; - } - - // overrides of .mx_Login - - .mx_AuthPage_modal { - width: 330px; - min-height: initial; - padding-top: 40px; - padding-bottom: 20px; - padding-left: 10px; - padding-right: 10px; - border-radius: 8px; - color: $form-fg-color; - font-size: 16px; - line-height: 25px; - background-color: $form-bg-color; - background-image: url("$(status)/img/dot.svg"); - box-shadow: 0px 5px 16px 0px rgba(25,12,46,0.16); - position: relative; - text-align: center; - } - - .mx_AuthHeader_logo { - background-color: #fff; - width: 74px; - height: 74px; - border-radius: 37px; - box-shadow: 0px 5px 16px 0px rgba(0,0,0,0.2); - position: absolute; - top: -36px; - left: 50%; - margin-left: -36px; - } - - .mx_AuthHeader_logo img { - width: 36px; - height: 36px; - padding: 19px; - } - - .mx_AuthPage_modal h2 { - text-align: center; - color: $form-fg-color; - font-size: 25px; - margin-bottom: 24px; - } - - .mx_Login_field { - width: 260px; - height: 27px; - padding: 8px 20px 10px 20px; - border-radius: 10px; - text-align: left; - border: 1px solid transparent; - background-color: $form-field-bg-color; - color: $form-field-fg-color; - font-weight: 300; - font-size: 15px; - margin-bottom: 14px; - transition: background-color .2s ease; - } - - .mx_Login_field:focus { - border: 1px solid transparent; - background-color: $form-field-bg-hover-color; - } - - .mx_Login_field::-webkit-input-placeholder { - font-family: $font-family; - color: $form-field-fg-color; - opacity: 0.6; - } - - .mx_Login_field::-moz-placeholder { - font-family: $font-family; - color: $form-field-fg-color; - opacity: 0.6; - } - - .mx_Login_field_disabled { - opacity: 0.3; - } - - .mx_Login_prompt { - font-size: 16px; - } - - .mx_Login_submit { - min-width: 200px; - width: auto; - margin-top: 13px; - margin-bottom: 10px; - } - - .mx_Login_submit:disabled { - opacity: 0.3; - } - - .mx_Login_create { - margin-top: 10px; - display: block; - text-align: center; - width: 100%; - font-size: 15px; - opacity: 1.0; - } - - .mx_Login_create:link, - .mx_Login_create:hover, - .mx_Login_create:visited - { - color: $form-fg-color; - } - - .mx_Login_forgot { - display: block; - font-size: 15px; - } - - .mx_Login_forgot:link, - .mx_Login_forgot:hover, - .mx_Login_forgot:visited - { - color: $form-fg-color; - } - - .mx_Login_error { - color: $warning-color; - font-size: 18px; - width: 300px; - height: 44px; - display: flex; - justify-content: center; - align-items: center; - margin: auto; - text-align: center; - margin-top: 12px; - margin-bottom: 16px; - } - - .mx_Login_smallError { - font-size: 13px; - line-height: initial; - } - -} diff --git a/res/themes/status/css/_fonts.scss b/res/themes/status/css/_fonts.scss deleted file mode 100644 index e53b463839..0000000000 --- a/res/themes/status/css/_fonts.scss +++ /dev/null @@ -1,15 +0,0 @@ -@font-face { - font-family:PostGrotesk-Medium; - src:url('https://status.im/fonts/PostGrotesk-Medium.eot'); - src:url('https://status.im/fonts/PostGrotesk-Medium.eot?#iefix') format("embedded-opentype"),url('https://status.im/fonts/PostGrotesk-Medium.woff') format("woff"),url('https://status.im/fonts/PostGrotesk-Medium.svg#PostGrotesk-Medium') format("svg"); - font-weight: 400; - font-style: normal; -} - -@font-face { - font-family:PostGrotesk-Book; - src:url('https://status.im/fonts/PostGrotesk-Book.eot'); - src:url('https://status.im/fonts/PostGrotesk-Book.eot?#iefix') format("embedded-opentype"),url('https://status.im/fonts/PostGrotesk-Book.woff') format("woff"),url('https://status.im/fonts/PostGrotesk-Book.svg#PostGrotesk-Book') format("svg"); - font-weight: 400; - font-style: normal; -} diff --git a/res/themes/status/css/_paths.scss b/res/themes/status/css/_paths.scss deleted file mode 100644 index 3a1140ecf9..0000000000 --- a/res/themes/status/css/_paths.scss +++ /dev/null @@ -1,5 +0,0 @@ -// Path from root SCSS file (such as `status.scss`) to `res` dir in `matrix-react-sdk` -$res: ../../../../node_modules/matrix-react-sdk/res; - -// Path from root SCSS file (such as `status.scss`) to `status` dir in `riot-web` -$status: ..; diff --git a/res/themes/status/css/_status.scss b/res/themes/status/css/_status.scss deleted file mode 100644 index c2ce5dd281..0000000000 --- a/res/themes/status/css/_status.scss +++ /dev/null @@ -1,292 +0,0 @@ -// We deliberately prioritise Arial over Helvetica here due to diacritic problems (see _base.scss) -// N.B. that the status.im website uses: -// font-family:PostGrotesk-Book,-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif; -// ...but can't be bothered to work out how the apple fonts & segoe interact, so keepingn it simple for now. - -$font-family: PostGrotesk-Book, Arial, Helvetica, Sans-Serif; - -// typical text (dark-on-white in light skin) -$primary-fg-color: #70808D; -$primary-bg-color: #EEF2F5; - -// ***** Start of Status theme specifics ****** -$header-color: #49555F; -$header-font-family: PostGrotesk-Medium, Arial, Helvetica, Sans-Serif; - -$footer-color: #8D99A4; - -$riot-link-color: #A26988; - -a { - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -h1,h2,h3,h4,h5 { - color: $header-color; - font-family: $header-font-family; - font-weight: 400 ! important; -} - -$callout-color: #4360DF; // or #4957b8 from status.im homepage - -$form-bg-color: $callout-color; -$form-fg-color: #ffffff; - -$form-field-bg-color: rgba(244, 242, 247, 0.12); -$form-field-bg-hover-color: rgba(255, 255, 255, 0.2); -$form-field-fg-color: #ffffff; - -// ***** End of Status theme specifics ****** - - -// used for dialog box text -$light-fg-color: #747474; - -// used for focusing form controls -$focus-bg-color: #dddddd; - -// button UI (white-on-green in light skin) -$accent-fg-color: #ffffff; -$accent-color: #6CC1F6; -$accent-color-alt: $accent-color; -$accent-color-50pct: #6CC1F67F; -$accent-hover-color: #84cfff; - -$selection-fg-color: $primary-bg-color; - -$focus-brightness: 125%; - -// red warning colour -$warning-color: #F69E98; -$warning-bg-color: #DF2A8B; -$info-bg-color: #2A9EDF; -$mention-user-pill-bg-color: #ff0064; -$other-user-pill-bg-color: rgba(0, 0, 0, 0.1); - -$group-alert-color: #774f7e; - -$preview-bar-bg-color: #f7f7f7; - -// left-panel style muted accent color -$secondary-accent-color: #586C7B; -$tertiary-accent-color: #DBEBF6; - -// stop the tinter trying to change the secondary accent color -// by overriding the key to something untintable -// XXX: this is a bit of a hack. -#mx_theme_secondaryAccentColor { - color: #c0ffee ! important; -} - -#mx_theme_tertiaryAccentColor { - color: #c0ffee ! important; -} - -// used by RoomDirectory permissions -$plinth-bg-color: $secondary-accent-color; - -// used by RoomDropTarget -$droptarget-bg-color: rgba(255,255,255,0.5); - -// used by AddressSelector -$selected-color: #eaf5f0; - -// selected for hoverover & selected event tiles -$event-selected-color: #f7f7f7; - -// used for the hairline dividers in RoomView -$primary-hairline-color: #e5e5e5; - -// used for the border of input text fields -$input-border-color: #c9cfd4; -$input-darker-bg-color: #c1c9d6; -$input-darker-fg-color: #9fa9ba; - -$button-bg-color: #7ac9a1; -$button-fg-color: white; -// apart from login forms, which have stronger border -$strong-input-border-color: #c7c7c7; - -// used for UserSettings EditableText -$input-underline-color: rgba(151, 151, 151, 0.5); -$input-fg-color: rgba(74, 74, 74, 0.9); - -// context menus -$menu-border-color: rgba(187, 187, 187, 0.5); -$menu-bg-color: #f6f6f6; -$menu-selected-color: #f5f8fa; - -$avatar-initial-color: #ffffff; -$avatar-bg-color: transparent; - -$h3-color: #3d3b39; - -$dialog-background-bg-color: #e9e9e9; -$lightbox-background-bg-color: #000; - -$greyed-fg-color: #888; - -$neutral-badge-color: #dbdbdb; - -$preview-widget-bar-color: #ddd; -$preview-widget-fg-color: $greyed-fg-color; - -$blockquote-bar-color: #ddd; -$blockquote-fg-color: #777; - -$settings-grey-fg-color: #a2a2a2; - -$voip-decline-color: #f48080; -$voip-accept-color: #80f480; - -$rte-bg-color: #e9e9e9; -$rte-code-bg-color: rgba(0, 0, 0, 0.04); -$rte-room-pill-color: #aaa; - -// ******************** - -$roomtile-name-color: #ffffff; -$roomtile-selected-bg-color: #465561; -$roomtile-focused-bg-color: #6d8597; - -$username-variant1-color: #1e7ddc; -$username-variant2-color: #a756a8; -$username-variant3-color: #7ac9a1; -$username-variant4-color: #f2809d; -$username-variant5-color: #ffc666; -$username-variant6-color: #76ddd7; -$username-variant7-color: #45529b; -$username-variant8-color: #bfd251; - -$roomsublist-background: rgba(0, 0, 0, 0.2); -$roomsublist-label-fg-color: #ffffff; -$roomsublist-label-bg-color: $secondary-accent-color; -$roomsublist-chevron-color: #ffffff; - -$panel-divider-color: rgba(0, 0, 0, 0.2); - -// ******************** - -$widget-menu-bar-bg-color: #f7f7f7; - -// ******************** - -// event tile lifecycle -$event-encrypting-color: #abddbc; -$event-sending-color: #ddd; -$event-notsent-color: #f44; - -// event redaction -$event-redacted-fg-color: #e2e2e2; -$event-redacted-border-color: #cccccc; - -// event timestamp -$event-timestamp-color: #acacac; - -$edit-button-url: "$(res)/img/icon_context_message.svg"; -$copy-button-url: "$(res)/img/icon_copy_message.svg"; - -// e2e -$e2e-verified-color: #76cfa5; // N.B. *NOT* the same as $accent-color -$e2e-unverified-color: #e8bf37; -$e2e-warning-color: #ba6363; - -/*** ImageView ***/ -$lightbox-bg-color: #454545; -$lightbox-fg-color: #ffffff; -$lightbox-border-color: #ffffff; - -// unused? -$progressbar-color: #000; - -@define-mixin mx_DialogButton { - /* align images in buttons (eg spinners) */ - vertical-align: middle; - border-radius: 8px; - border: 1px solid rgba(199, 206, 209, 0.12); - background-color: $accent-color; - font-size: 13px; - font-family: $header-font-family; - text-transform: uppercase; - letter-spacing: 1px; - color: $accent-fg-color; - cursor: pointer; - outline: none; - padding: 14px; - box-sizing: border-box; - padding-left: 1.5em; - padding-right: 1.5em; - display: inline-block; - transition: background-color .2s ease; -} - -@define-mixin mx_DialogButton_hover { - background-color: $accent-hover-color; -} - -@define-mixin mx_DialogButton_small { - @mixin mx_DialogButton; - height: auto; - padding-top: 7px; - padding-bottom: 7px; - padding-left: 1em; - padding-right: 1em; -} - -.mx_RoomSubList_label { - font-size: 13px; - font-family: $header-font-family; - letter-spacing: 1px; -} - -// FIXME: all these ! importants are horrid - we should instead go and define -// variables or something. -.mx_SearchBox_search { - color: #fff ! important; -} - -.mx_SearchBox_search::-webkit-input-placeholder { - color: rgba(255, 255, 255, 0.6) ! important; -} - -.mx_SearchBox_search::-moz-placeholder { - color: rgba(255, 255, 255, 0.6) ! important; -} - -.mx_RoomList_emptySubListTip, -.mx_RoomDropTarget { - font-size: 14px ! important; - border: 1.5px dashed rgba(0,0,0,0.2) ! important; - color: #fff ! important; - background-color: transparent ! important; - border-radius: 6px ! important; - margin-left: 6px ! important; - margin-right: 6px ! important; - margin-top: 8px ! important; - margin-bottom: 7px ! important; - padding: 8px ! important; -} - -.mx_RoomDirectory_perm { - font-family: $header-font-family ! important; - background-color: #fff ! important; -} - -.mx_RoomTile_badge, -.mx_RoomSubList_badge { - height: 12px ! important; - padding-top: 1px ! important; - padding-bottom: 1px ! important; -} - -.mx_RoomSubList_chevron { - top: 8px ! important; -} - -.mx_MemberInfo .mx_RoomTile_name { - color: $primary-fg-color ! important; -} diff --git a/res/themes/status/css/status.scss b/res/themes/status/css/status.scss deleted file mode 100644 index c5fa1fe114..0000000000 --- a/res/themes/status/css/status.scss +++ /dev/null @@ -1,6 +0,0 @@ -@import "_paths.scss"; -@import "_fonts.scss"; -@import "../../../../node_modules/matrix-react-sdk/res/themes/light/css/_base.scss"; -@import "_status.scss"; -@import "../../../../node_modules/matrix-react-sdk/res/css/_components.scss"; -@import "_StatusLogin.scss"; diff --git a/res/themes/status/fonts/README b/res/themes/status/fonts/README deleted file mode 100644 index d7900145ed..0000000000 --- a/res/themes/status/fonts/README +++ /dev/null @@ -1 +0,0 @@ -We link out to status.im for fonts, although ideally we'd put them here. diff --git a/res/themes/status/img/a.png b/res/themes/status/img/a.png deleted file mode 100644 index defbcc4bcd..0000000000 Binary files a/res/themes/status/img/a.png and /dev/null differ diff --git a/res/themes/status/img/d.png b/res/themes/status/img/d.png deleted file mode 100644 index daeb0b0785..0000000000 Binary files a/res/themes/status/img/d.png and /dev/null differ diff --git a/res/themes/status/img/dot.svg b/res/themes/status/img/dot.svg deleted file mode 100644 index 45df23c049..0000000000 --- a/res/themes/status/img/dot.svg +++ /dev/null @@ -1 +0,0 @@ -Artboard \ No newline at end of file diff --git a/res/themes/status/img/g.png b/res/themes/status/img/g.png deleted file mode 100644 index f675a33022..0000000000 Binary files a/res/themes/status/img/g.png and /dev/null differ diff --git a/res/themes/status/img/i.png b/res/themes/status/img/i.png deleted file mode 100644 index b63eeae13b..0000000000 Binary files a/res/themes/status/img/i.png and /dev/null differ diff --git a/res/themes/status/img/logo.svg b/res/themes/status/img/logo.svg deleted file mode 100644 index 68e4a77a5c..0000000000 --- a/res/themes/status/img/logo.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - Status logo - Created with Sketch. - - - - - \ No newline at end of file diff --git a/res/themes/status/img/n.png b/res/themes/status/img/n.png deleted file mode 100644 index b8e33d41f7..0000000000 Binary files a/res/themes/status/img/n.png and /dev/null differ diff --git a/res/vector-icons/android-chrome-144x144.png b/res/vector-icons/android-chrome-144x144.png index 30c8cf18dc..5dbbd0ff11 100644 Binary files a/res/vector-icons/android-chrome-144x144.png and b/res/vector-icons/android-chrome-144x144.png differ diff --git a/res/vector-icons/android-chrome-192x192.png b/res/vector-icons/android-chrome-192x192.png index 560e20ad8c..93a4e9c8ad 100644 Binary files a/res/vector-icons/android-chrome-192x192.png and b/res/vector-icons/android-chrome-192x192.png differ diff --git a/res/vector-icons/android-chrome-36x36.png b/res/vector-icons/android-chrome-36x36.png index ee41772f4d..344157fe50 100644 Binary files a/res/vector-icons/android-chrome-36x36.png and b/res/vector-icons/android-chrome-36x36.png differ diff --git a/res/vector-icons/android-chrome-48x48.png b/res/vector-icons/android-chrome-48x48.png index 9cd225d402..70115c65c1 100644 Binary files a/res/vector-icons/android-chrome-48x48.png and b/res/vector-icons/android-chrome-48x48.png differ diff --git a/res/vector-icons/android-chrome-72x72.png b/res/vector-icons/android-chrome-72x72.png index d9de0c5715..e61b36e248 100644 Binary files a/res/vector-icons/android-chrome-72x72.png and b/res/vector-icons/android-chrome-72x72.png differ diff --git a/res/vector-icons/android-chrome-96x96.png b/res/vector-icons/android-chrome-96x96.png index eb48c2c91e..3a32b6c839 100644 Binary files a/res/vector-icons/android-chrome-96x96.png and b/res/vector-icons/android-chrome-96x96.png differ diff --git a/res/vector-icons/apple-touch-icon-114x114.png b/res/vector-icons/apple-touch-icon-114x114.png index e07fa43752..019780fd95 100644 Binary files a/res/vector-icons/apple-touch-icon-114x114.png and b/res/vector-icons/apple-touch-icon-114x114.png differ diff --git a/res/vector-icons/apple-touch-icon-120x120.png b/res/vector-icons/apple-touch-icon-120x120.png index 8265091318..4979a63e4e 100644 Binary files a/res/vector-icons/apple-touch-icon-120x120.png and b/res/vector-icons/apple-touch-icon-120x120.png differ diff --git a/res/vector-icons/apple-touch-icon-144x144.png b/res/vector-icons/apple-touch-icon-144x144.png index 30c8cf18dc..5dbbd0ff11 100644 Binary files a/res/vector-icons/apple-touch-icon-144x144.png and b/res/vector-icons/apple-touch-icon-144x144.png differ diff --git a/res/vector-icons/apple-touch-icon-152x152.png b/res/vector-icons/apple-touch-icon-152x152.png index 5bc63546c8..6aac26012f 100644 Binary files a/res/vector-icons/apple-touch-icon-152x152.png and b/res/vector-icons/apple-touch-icon-152x152.png differ diff --git a/res/vector-icons/apple-touch-icon-180x180.png b/res/vector-icons/apple-touch-icon-180x180.png index 85e9f8ca74..aacfc1a8a5 100644 Binary files a/res/vector-icons/apple-touch-icon-180x180.png and b/res/vector-icons/apple-touch-icon-180x180.png differ diff --git a/res/vector-icons/apple-touch-icon-57x57.png b/res/vector-icons/apple-touch-icon-57x57.png index 253c3db70a..e52c99c609 100644 Binary files a/res/vector-icons/apple-touch-icon-57x57.png and b/res/vector-icons/apple-touch-icon-57x57.png differ diff --git a/res/vector-icons/apple-touch-icon-60x60.png b/res/vector-icons/apple-touch-icon-60x60.png index 192a34675b..edaecda6b6 100644 Binary files a/res/vector-icons/apple-touch-icon-60x60.png and b/res/vector-icons/apple-touch-icon-60x60.png differ diff --git a/res/vector-icons/apple-touch-icon-72x72.png b/res/vector-icons/apple-touch-icon-72x72.png index d9de0c5715..e61b36e248 100644 Binary files a/res/vector-icons/apple-touch-icon-72x72.png and b/res/vector-icons/apple-touch-icon-72x72.png differ diff --git a/res/vector-icons/apple-touch-icon-76x76.png b/res/vector-icons/apple-touch-icon-76x76.png index b94716457b..1432fee38f 100644 Binary files a/res/vector-icons/apple-touch-icon-76x76.png and b/res/vector-icons/apple-touch-icon-76x76.png differ diff --git a/res/vector-icons/apple-touch-icon-precomposed.png b/res/vector-icons/apple-touch-icon-precomposed.png index 85e9f8ca74..aacfc1a8a5 100644 Binary files a/res/vector-icons/apple-touch-icon-precomposed.png and b/res/vector-icons/apple-touch-icon-precomposed.png differ diff --git a/res/vector-icons/apple-touch-icon.png b/res/vector-icons/apple-touch-icon.png index 85e9f8ca74..aacfc1a8a5 100644 Binary files a/res/vector-icons/apple-touch-icon.png and b/res/vector-icons/apple-touch-icon.png differ diff --git a/res/vector-icons/favicon-16x16.png b/res/vector-icons/favicon-16x16.png index def4ec5eee..c9b0f23e29 100644 Binary files a/res/vector-icons/favicon-16x16.png and b/res/vector-icons/favicon-16x16.png differ diff --git a/res/vector-icons/favicon-32x32.png b/res/vector-icons/favicon-32x32.png index c999923ac1..48bf1dc890 100644 Binary files a/res/vector-icons/favicon-32x32.png and b/res/vector-icons/favicon-32x32.png differ diff --git a/res/vector-icons/favicon-96x96.png b/res/vector-icons/favicon-96x96.png index eb48c2c91e..ea21306c0d 100644 Binary files a/res/vector-icons/favicon-96x96.png and b/res/vector-icons/favicon-96x96.png differ diff --git a/res/vector-icons/favicon.ico b/res/vector-icons/favicon.ico index 8f8ff94eea..619b51aaad 100644 Binary files a/res/vector-icons/favicon.ico and b/res/vector-icons/favicon.ico differ diff --git a/res/vector-icons/mstile-144x144.png b/res/vector-icons/mstile-144x144.png index 30c8cf18dc..5dbbd0ff11 100644 Binary files a/res/vector-icons/mstile-144x144.png and b/res/vector-icons/mstile-144x144.png differ diff --git a/res/vector-icons/mstile-150x150.png b/res/vector-icons/mstile-150x150.png index 5b8fca8a48..da0c101c94 100644 Binary files a/res/vector-icons/mstile-150x150.png and b/res/vector-icons/mstile-150x150.png differ diff --git a/res/vector-icons/mstile-310x150.png b/res/vector-icons/mstile-310x150.png index d809f00a05..c627adc2a1 100644 Binary files a/res/vector-icons/mstile-310x150.png and b/res/vector-icons/mstile-310x150.png differ diff --git a/res/vector-icons/mstile-310x310.png b/res/vector-icons/mstile-310x310.png index ec62f8ee9d..e96300293e 100644 Binary files a/res/vector-icons/mstile-310x310.png and b/res/vector-icons/mstile-310x310.png differ diff --git a/res/vector-icons/mstile-70x70.png b/res/vector-icons/mstile-70x70.png index 820a909e21..c4f306c5ff 100644 Binary files a/res/vector-icons/mstile-70x70.png and b/res/vector-icons/mstile-70x70.png differ diff --git a/res/welcome.html b/res/welcome.html new file mode 100644 index 0000000000..ba368b317b --- /dev/null +++ b/res/welcome.html @@ -0,0 +1,190 @@ + + +
+ + + +

_t("Welcome to Riot.im")

+

_t("Decentralised, encrypted chat & collaboration powered by [matrix]")

+
+ + + +
+
+
_t("Need help?")
+ +
_t("Chat with Riot Bot")
+
+
+
+
_t("Explore rooms")
+ +
_t("Room Directory")
+
+
+
+ +
+
diff --git a/res/home/images/icon-create-account.svg b/res/welcome/images/icon-create-account.svg similarity index 100% rename from res/home/images/icon-create-account.svg rename to res/welcome/images/icon-create-account.svg diff --git a/res/home/images/icon-help.svg b/res/welcome/images/icon-help.svg similarity index 100% rename from res/home/images/icon-help.svg rename to res/welcome/images/icon-help.svg diff --git a/res/home/images/icon-room-directory.svg b/res/welcome/images/icon-room-directory.svg similarity index 100% rename from res/home/images/icon-room-directory.svg rename to res/welcome/images/icon-room-directory.svg diff --git a/res/home/images/icon-sign-in.svg b/res/welcome/images/icon-sign-in.svg similarity index 100% rename from res/home/images/icon-sign-in.svg rename to res/welcome/images/icon-sign-in.svg diff --git a/res/home/images/logo.svg b/res/welcome/images/logo.svg similarity index 100% rename from res/home/images/logo.svg rename to res/welcome/images/logo.svg diff --git a/res/home/images/matrix.svg b/res/welcome/images/matrix.svg similarity index 99% rename from res/home/images/matrix.svg rename to res/welcome/images/matrix.svg index 5c7dfbb5e3..13adcab25a 100644 --- a/res/home/images/matrix.svg +++ b/res/welcome/images/matrix.svg @@ -1,153 +1,153 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scripts/cleanup.sh b/scripts/cleanup.sh new file mode 100755 index 0000000000..3e7923a5c1 --- /dev/null +++ b/scripts/cleanup.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# +# script to clean up the deployments made by redeploy.py for vectorwebdev and vectorwebexp +set -e + +# currently live deployment (full path) +live=`dirname $(readlink -f "$HOME/live")` + +# currently live bundle (just the name of the bundle) +live_bundle=`grep 'script src="bundles' live/index.html | sed -e 's#.*bundles/##' -e 's#/.*##'` + +# clean up 'extracted': find things which are older than 7 days, exclude the +# current live one, and remove +find $HOME/extracted -mindepth 1 -maxdepth 1 -type d -ctime +7 \ + \! -path "$live" -exec rm -r {} \; + +# clean up 'bundles': ditto +find $HOME/bundles -mindepth 1 -maxdepth 1 -type d -ctime +7 \ + \! -name "$live_bundle" -exec rm -r {} \; diff --git a/scripts/copy-res.js b/scripts/copy-res.js index 012cdf794b..4a2c6707d0 100755 --- a/scripts/copy-res.js +++ b/scripts/copy-res.js @@ -1,5 +1,7 @@ #!/usr/bin/env node +const loaderUtils = require("loader-utils"); + // copies the resources into the webapp directory. // @@ -50,9 +52,8 @@ const INCLUDE_LANGS = [ // "dest/b/...". const COPY_LIST = [ ["res/manifest.json", "webapp"], - ["res/home.html", "webapp"], - ["res/home-status.html", "webapp"], - ["res/home/**", "webapp/home"], + ["res/welcome.html", "webapp"], + ["res/welcome/**", "webapp/welcome"], ["res/themes/**", "webapp/themes"], ["res/vector-icons/**", "webapp/vector-icons"], ["node_modules/matrix-react-sdk/res/media/**", "webapp/media"], @@ -62,12 +63,6 @@ const COPY_LIST = [ ["./config.json", "webapp", { directwatch: 1 }], ]; -INCLUDE_LANGS.forEach(function(l) { - COPY_LIST.push([ - l.value, "webapp/i18n/", { lang: 1 }, - ]); -}); - const parseArgs = require('minimist'); const Cpx = require('cpx'); const chokidar = require('chokidar'); @@ -78,8 +73,8 @@ const argv = parseArgs( process.argv.slice(2), {} ); -var watch = argv.w; -var verbose = argv.v; +const watch = argv.w; +const verbose = argv.v; function errCheck(err) { if (err) { @@ -137,39 +132,11 @@ function next(i, err) { .on('change', copy) .on('ready', cb) .on('error', errCheck); - } else if (opts.lang) { - const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + source + '.json'; - const riotWebFile = 'src/i18n/strings/' + source + '.json'; - - // XXX: Use a debounce because for some reason if we read the language - // file immediately after the FS event is received, the file contents - // appears empty. Possibly https://github.com/nodejs/node/issues/6112 - let makeLangDebouncer; - const makeLang = () => { - if (makeLangDebouncer) { - clearTimeout(makeLangDebouncer); - } - makeLangDebouncer = setTimeout(() => { - genLangFile(source, dest); - }, 500); - }; - - [reactSdkFile, riotWebFile].forEach(function(f) { - chokidar.watch(f) - .on('add', makeLang) - .on('change', makeLang) - //.on('ready', cb) We'd have to do this when both files are ready - .on('error', errCheck); - }); - next(i + 1, err); } else { cpx.on('watch-ready', cb); cpx.on("watch-error", cb); cpx.watch(); } - } else if (opts.lang) { - genLangFile(source, dest); - next(i + 1, err); } else { cpx.copy(cb); } @@ -196,21 +163,28 @@ function genLangFile(lang, dest) { translations = weblateToCounterpart(translations); - fs.writeFileSync(dest + lang + '.json', JSON.stringify(translations, null, 4)); + const json = JSON.stringify(translations, null, 4); + const jsonBuffer = Buffer.from(json); + const digest = loaderUtils.getHashDigest(jsonBuffer, null, null, 7); + const filename = `${lang}.${digest}.json`; + + fs.writeFileSync(dest + filename, json); if (verbose) { - console.log("Generated language file: " + lang); + console.log("Generated language file: " + filename); } + + return filename; } -function genLangList() { +function genLangList(langFileMap) { const languages = {}; INCLUDE_LANGS.forEach(function(lang) { const normalizedLanguage = lang.value.toLowerCase().replace("_", "-"); const languageParts = normalizedLanguage.split('-'); if (languageParts.length == 2 && languageParts[0] == languageParts[1]) { - languages[languageParts[0]] = {'fileName': lang.value + '.json', 'label': lang.label}; + languages[languageParts[0]] = {'fileName': langFileMap[lang.value], 'label': lang.label}; } else { - languages[normalizedLanguage] = {'fileName': lang.value + '.json', 'label': lang.label}; + languages[normalizedLanguage] = {'fileName': langFileMap[lang.value], 'label': lang.label}; } }); fs.writeFile('webapp/i18n/languages.json', JSON.stringify(languages, null, 4), function(err) { @@ -258,5 +232,50 @@ function weblateToCounterpart(inTrs) { return outTrs; } -genLangList(); +/** +watch the input files for a given language, +regenerate the file, adding its content-hashed filename to langFileMap +and regenerating languages.json with the new filename +*/ +function watchLanguage(lang, dest, langFileMap) { + const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + lang + '.json'; + const riotWebFile = 'src/i18n/strings/' + lang + '.json'; + + // XXX: Use a debounce because for some reason if we read the language + // file immediately after the FS event is received, the file contents + // appears empty. Possibly https://github.com/nodejs/node/issues/6112 + let makeLangDebouncer; + const makeLang = () => { + if (makeLangDebouncer) { + clearTimeout(makeLangDebouncer); + } + makeLangDebouncer = setTimeout(() => { + const filename = genLangFile(lang, dest); + langFileMap[lang]=filename; + genLangList(langFileMap); + }, 500); + }; + + [reactSdkFile, riotWebFile].forEach(function(f) { + chokidar.watch(f) + .on('add', makeLang) + .on('change', makeLang) + .on('error', errCheck); + }); +} + +// language resources +const I18N_DEST = "webapp/i18n/"; +const I18N_FILENAME_MAP = INCLUDE_LANGS.reduce((m, l) => { + const filename = genLangFile(l.value, I18N_DEST); + m[l.value] = filename; + return m; +}, {}); +genLangList(I18N_FILENAME_MAP); + +if (watch) { + INCLUDE_LANGS.forEach(l => watchLanguage(l.value, I18N_DEST, I18N_FILENAME_MAP)); +} + +// non-language resources next(0); diff --git a/scripts/electron-package.sh b/scripts/electron-package.sh index bd68d9c2cc..bffb6b00ec 100755 --- a/scripts/electron-package.sh +++ b/scripts/electron-package.sh @@ -104,10 +104,12 @@ cp $distdir/*.dmg "$pubdir/install/macos/" # Windows installers go to the dist dir because they need signing mkdir -p "$pubdir/install/win32/ia32/" -cp $distdir/win-ia32/*.exe "$projdir/electron_app/dist/unsigned/" +mkdir -p "$projdir/electron_app/dist/unsigned/ia32/" +cp $distdir/squirrel-windows-ia32/*.exe "$projdir/electron_app/dist/unsigned/ia32/" mkdir -p "$pubdir/install/win32/x64/" -cp $distdir/win/*.exe "$projdir/electron_app/dist/unsigned/" +mkdir -p "$projdir/electron_app/dist/unsigned/x64/" +cp $distdir/squirrel-windows/*.exe "$projdir/electron_app/dist/unsigned/x64/" # Packages for auto-update mkdir -p "$pubdir/update/macos" @@ -115,12 +117,12 @@ cp $distdir/*-mac.zip "$pubdir/update/macos/" echo "$vername" > "$pubdir/update/macos/latest" mkdir -p "$pubdir/update/win32/ia32/" -cp $distdir/win-ia32/*.nupkg "$pubdir/update/win32/ia32/" -cp $distdir/win-ia32/RELEASES "$pubdir/update/win32/ia32/" +cp $distdir/squirrel-windows-ia32/*.nupkg "$pubdir/update/win32/ia32/" +cp $distdir/squirrel-windows-ia32/RELEASES "$pubdir/update/win32/ia32/" mkdir -p "$pubdir/update/win32/x64/" -cp $distdir/win/*.nupkg "$pubdir/update/win32/x64/" -cp $distdir/win/RELEASES "$pubdir/update/win32/x64/" +cp $distdir/squirrel-windows/*.nupkg "$pubdir/update/win32/x64/" +cp $distdir/squirrel-windows/RELEASES "$pubdir/update/win32/x64/" # Move the debs to the main project dir's dist folder cp $distdir/*.deb "$projdir/electron_app/dist/" diff --git a/scripts/make-icons.sh b/scripts/make-icons.sh index 19e48895df..2db5293df3 100755 --- a/scripts/make-icons.sh +++ b/scripts/make-icons.sh @@ -1,4 +1,10 @@ #!/bin/bash +# +# Converts an svg logo into the various image resources required by +# the various platforms deployments. +# +# On debian-based systems you need these deps: +# apt-get install xmlstarlet python3-cairosvg icnsutils if [ $# != 1 ] then @@ -52,7 +58,23 @@ cp "$tmpdir/256.png" "$tmpdir/Riot.iconset/icon_256x256.png" cp "$tmpdir/512.png" "$tmpdir/Riot.iconset/icon_256x256@2x.png" cp "$tmpdir/512.png" "$tmpdir/Riot.iconset/icon_512x512.png" cp "$tmpdir/1024.png" "$tmpdir/Riot.iconset/icon_512x512@2x.png" -iconutil -c icns -o electron_app/build/icon.icns "$tmpdir/Riot.iconset" + +if [ -x "$(command -v iconutil)" ]; then + # available on macos + iconutil -c icns -o electron_app/build/icon.icns "$tmpdir/Riot.iconset" +elif [ -x "$(command -v png2icns)" ]; then + # available on linux + # png2icns is more finicky about its input than iconutil + # 1. it doesn't support a 64x64 (aka 32x32@2x) + # 2. it doesn't like duplicates (128x128@2x == 256x256) + rm "$tmpdir/Riot.iconset/icon_128x128@2x.png" + rm "$tmpdir/Riot.iconset/icon_256x256@2x.png" + rm "$tmpdir/Riot.iconset/icon_16x16@2x.png" + rm "$tmpdir/Riot.iconset/icon_32x32@2x.png" + png2icns electron_app/build/icon.icns "$tmpdir"/Riot.iconset/*png +else + echo "WARNING: Unsupported platform. Skipping icns build" +fi cp "$tmpdir/36.png" "res/vector-icons/android-chrome-36x36.png" cp "$tmpdir/48.png" "res/vector-icons/android-chrome-48x48.png" diff --git a/scripts/package.sh b/scripts/package.sh index 23d0925b05..008803cac9 100755 --- a/scripts/package.sh +++ b/scripts/package.sh @@ -14,7 +14,11 @@ else fi npm run clean -npm run build$dev +# riot-web is at `workspace`. +# matrix-react-sdk is at `workspace/node_modules/matrix-react-sdk`, but this is +# symlinked to a repo at `workspace/matrix-react-sdk`. +# To get from `workspace/matrix-react-sdk/lib` up to the lang file, we use: +RIOT_LANGUAGES_FILE="../../webapp/i18n/languages.json" npm run build$dev # include the sample config in the tarball. Arguably this should be done by # `npm run build`, but it's just too painful. diff --git a/src/components/structures/VectorHomePage.js b/src/components/structures/VectorEmbeddedPage.js similarity index 75% rename from src/components/structures/VectorHomePage.js rename to src/components/structures/VectorEmbeddedPage.js index a2e5fe05ea..ab093135a8 100644 --- a/src/components/structures/VectorHomePage.js +++ b/src/components/structures/VectorEmbeddedPage.js @@ -1,6 +1,7 @@ /* Copyright 2016 OpenMarket Ltd Copyright 2017 Vector Creations Ltd +Copyright 2019 New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,22 +18,18 @@ limitations under the License. 'use strict'; -import HomePage from 'matrix-react-sdk/lib/components/structures/HomePage'; +import EmbeddedPage from 'matrix-react-sdk/lib/components/structures/EmbeddedPage'; import sanitizeHtml from 'sanitize-html'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; -class VectorHomePage extends HomePage { - static displayName = 'VectorHomePage'; - static replaces = 'HomePage'; +export default class VectorEmbeddedPage extends EmbeddedPage { + static replaces = 'EmbeddedPage'; // we're overriding the base component here, for Riot-specific tweaks translate(s) { s = sanitizeHtml(_t(s)); // ugly fix for https://github.com/vector-im/riot-web/issues/4243 - s = s.replace(/Riot\.im/, 'Riot.im'); - s = s.replace(/\[matrix\]/, '[matrix]'); + s = s.replace(/\[matrix\]/, '[matrix]'); return s; } } - -module.exports = VectorHomePage; diff --git a/src/components/views/auth/VectorAuthFooter.js b/src/components/views/auth/VectorAuthFooter.js index ded8e22976..6467485387 100644 --- a/src/components/views/auth/VectorAuthFooter.js +++ b/src/components/views/auth/VectorAuthFooter.js @@ -19,7 +19,6 @@ limitations under the License. const React = require('react'); import { _t } from 'matrix-react-sdk/lib/languageHandler'; -import SettingsStore from 'matrix-react-sdk/lib/settings/SettingsStore'; module.exports = React.createClass({ displayName: 'VectorAuthFooter', @@ -28,10 +27,6 @@ module.exports = React.createClass({ }, render: function() { - // FIXME: replace this with a proper Status skin - // ...except then we wouldn't be able to switch to the Status theme at runtime. - if (SettingsStore.getValue("theme") === 'status') return
; - return (
blog diff --git a/src/components/views/auth/VectorAuthHeaderLogo.js b/src/components/views/auth/VectorAuthHeaderLogo.js index 7a40f44559..0161fc3ffb 100644 --- a/src/components/views/auth/VectorAuthHeaderLogo.js +++ b/src/components/views/auth/VectorAuthHeaderLogo.js @@ -19,23 +19,26 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; +import SdkConfig from 'matrix-react-sdk/lib/SdkConfig'; -const LOGO_URI = "themes/riot/img/logos/riot-im-logo-black-text.svg"; +export default class VectorAuthHeaderLogo extends React.PureComponent { + static replaces = 'AuthHeaderLogo' -module.exports = React.createClass({ - displayName: 'VectorAuthHeaderLogo', - statics: { - replaces: 'AuthHeaderLogo', - }, - propTypes: { + static propTypes = { icon: PropTypes.string, - }, + } + + render() { + const brandingConfig = SdkConfig.get().branding; + let logoUrl = "themes/riot/img/logos/riot-im-logo-black-text.svg"; + if (brandingConfig && brandingConfig.authHeaderLogoUrl) { + logoUrl = brandingConfig.authHeaderLogoUrl; + } - render: function() { return (
- Riot + Riot
); - }, -}); + } +} diff --git a/src/components/views/auth/VectorAuthPage.js b/src/components/views/auth/VectorAuthPage.js index e277cb18c8..bae685b951 100644 --- a/src/components/views/auth/VectorAuthPage.js +++ b/src/components/views/auth/VectorAuthPage.js @@ -16,21 +16,24 @@ limitations under the License. 'use strict'; -const React = require('react'); +import React from 'react'; import sdk from 'matrix-react-sdk/lib/index'; +import SdkConfig from 'matrix-react-sdk/lib/SdkConfig'; -module.exports = React.createClass({ - displayName: 'VectorAuthPage', +export default class VectorAuthPage extends React.PureComponent { + static replaces = 'AuthPage' - statics: { - replaces: 'AuthPage', - }, - - render: function() { + render() { const AuthFooter = sdk.getComponent('auth.AuthFooter'); + const brandingConfig = SdkConfig.get().branding; + let backgroundUrl = "themes/riot/img/backgrounds/valley.jpg"; + if (brandingConfig && brandingConfig.welcomeBackgroundUrl) { + backgroundUrl = brandingConfig.welcomeBackgroundUrl; + } + const pageStyle = { - background: 'center/cover fixed url(themes/riot/img/backgrounds/valley.jpg)', + background: `center/cover fixed url(${backgroundUrl})`, }; const modalStyle = { @@ -66,5 +69,5 @@ module.exports = React.createClass({
); - }, -}); + } +} diff --git a/src/i18n/strings/ar.json b/src/i18n/strings/ar.json index 8f7d60b0d4..96702c4d86 100644 --- a/src/i18n/strings/ar.json +++ b/src/i18n/strings/ar.json @@ -5,7 +5,7 @@ "Riot Desktop on %(platformName)s": "الواجهة المكتبية لرايوت على %(platformName)s", "Unknown device": "جهاز مجهول", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s عبر %(browserName)s على %(osName)s", - "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) للسماح بمشاركة الشاشة.", "Co-ordination for Riot translators": "التنسيق لمترجمين Riot", "powered by Matrix": "مشغل بواسطة Matrix", "Welcome to Riot.im": "مرحبا بك في Riot.im", @@ -28,5 +28,10 @@ "Running Matrix services": "تشغيل خدمات Matrix", "Community-run support for Synapse": "الدعم المجتمعي لـ Synapse", "Admin support for Dendrite": "الدعم الاداري لـDendrite", - "Announcements about Synapse releases": "إعلانات حول إصدارات Synaps" + "Announcements about Synapse releases": "إعلانات حول إصدارات Synaps", + "Create Account": "انشاء حساب", + "Need help?": "بحاجة إلى مساعدة؟", + "Explore rooms": "استكشف غرف المحادثات", + "Room Directory": "دليل غرف المحادثات", + "Sign In": "التسجيل" } diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json index 24233360e0..fdf6a83517 100644 --- a/src/i18n/strings/bg.json +++ b/src/i18n/strings/bg.json @@ -12,7 +12,7 @@ "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализиран, шифрован чат и колаборация базирани на [matrix]", "Search the room directory": "Търсене в директорията със стаи", "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 и т.н.) или независими такива. Разгледайте директорията!", - "Chat with Riot Bot": "Чат с Riot Bot", + "Chat with Riot Bot": "Чати с Riot Bot", "Get started with some tips from Riot Bot!": "Започнете с някои съвети от Riot Bot!", "General discussion about Matrix and Riot": "Обща дискусия относно Matrix и Riot", "Discussion of all things Matrix!": "Дискусия за всичко свързано с Matrix!", @@ -35,5 +35,12 @@ "Contributing code to Matrix and Riot": "Допринасяне с код към Matrix и Riot", "Dev chat for the Riot/Web dev team": "Чат за разработващия екип на Riot/Web", "Dev chat for the Dendrite dev team": "Чат за разработващия екип на Dendrite", - "Co-ordination for Riot translators": "Координация за преводачи на Riot" + "Co-ordination for Riot translators": "Координация за преводачи на Riot", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Може да настроите и собствен сървър за самоличност, но така няма да можете да каните потребители по имейл адрес или да бъдете поканени посредством вашия имейл адрес.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Може да използвате настройките за собствен сървър за да влезете в друг Matrix сървър, чрез указване на адреса му. Това Ви позволява да използвате Riot със съществуващ Matrix акаунт принадлежащ към друг сървър.", + "Sign In": "Вход", + "Create Account": "Създай акаунт", + "Need help?": "Нужда от помощ?", + "Explore rooms": "Открий стаи", + "Room Directory": "Директория със стаи" } diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json index d450f16621..7d6b1e58d8 100644 --- a/src/i18n/strings/ca.json +++ b/src/i18n/strings/ca.json @@ -5,7 +5,7 @@ "Unknown device": "Dispositiu desconegut", "Welcome to Riot.im": "Us donem la benvinguda a Riot.im", "Chat with Riot Bot": "Conversa amb el Bot de Riot", - "Riot is not supported on mobile web. Install the app?": "Riot no és compatible amb la web per a mòbils. Voleu instal·lar l'aplicació per a mòbils?", + "Riot is not supported on mobile web. Install the app?": "El Riot no és compatible amb la web per a mòbils. Voleu instal·lar l'aplicació per a mòbils?", "Riot Desktop on %(platformName)s": "Riot d'escriptori per a %(platformName)s", "You need to be using HTTPS to place a screen-sharing call.": "Heu d'utilitzar HTTPS per poder fer una trucada amb pantalla compartida.", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Podeu utilitzar opcions de servidor personalitzades per iniciar sessió en altres servidors Matrix especificant una URL diferent a la del servidor principal.
Això us permet utilitzar Riot amb un compte de Matrix existent en un servidor d'origen diferent.

També podeu establir un servidor d'identitat personalitzat, però no podreu convidar o ser convidat per correu electrònic.", @@ -21,18 +21,26 @@ "Riot/Android & matrix-android-sdk chat": "Riot/Android & Xat matrix-android-sdk", "Matrix technical discussions": "Debats tècnics sobre Matrix", "Running Matrix services": "Serveis de Matrix en marxa", - "Community-run support for Synapse": "Suport de la comunitat per a Synapse", - "Admin support for Dendrite": "Suport dels administrador per a Dendrite", + "Community-run support for Synapse": "Suport comunitari per a Synapse", + "Admin support for Dendrite": "Suport dels administradors per a Dendrite", "Announcements about Synapse releases": "Anuncis sobre llançaments de Synapse", "Support for those using and running matrix-appservice-irc": "Suport per a aquells que utilitzen i executen matrix-appservice-irc", - "Building services on Matrix": "Construir serveis a Matrix", - "Support for those using the Matrix spec": "Suport per a aquells que utilitzen l'especificació Matrix", + "Building services on Matrix": "Construcció de serveis a Matrix", + "Support for those using the Matrix spec": "Suport per a aquells que utilitzen l'especificació de Matrix", "Design and implementation of E2E in Matrix": "Disseny i implementació de l'E2E a Matrix", "Implementing VR services with Matrix": "Implementació de serveis VR amb Matrix", "Implementing VoIP services with Matrix": "Implementació de serveis VoIP amb Matrix", - "Discussion of the Identity Service API": "Debat sobre l'API Identity Service", + "Discussion of the Identity Service API": "Discussió sobre l'API Identity Service", "Support for those using, running and writing other bridges": "Suport per a aquells que utilitzen, executen i escriuen altres ponts", - "Contributing code to Matrix and Riot": "Contribuir amb codi a Matrix i Riot", - "Dev chat for the Riot/Web dev team": "Xat de l'equip de desenvolupadors Riot/Web per a desenvolupadors", - "Dev chat for the Dendrite dev team": "Xat de l'equip Dendrite per a desenvolupadors" + "Contributing code to Matrix and Riot": "Contribuir codi a Matrix i Riot", + "Dev chat for the Riot/Web dev team": "Xat de l'equip de desenvolupadors Riot/Web", + "Dev chat for the Dendrite dev team": "Xat de l'equip Dendrite per a desenvolupadors", + "Co-ordination for Riot translators": "Coordinació dels traductors del Riot", + "Create Account": "Crea un compte", + "Need help?": "Necessiteu ajuda?", + "Explore rooms": "Exploreu les sales", + "Room Directory": "Directori de sales", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Podeu emprar les opcions personalitzades del servidor per iniciar la sessió en altres servidors de Matrix especificant un URL de servidor personal diferent. Això us permet emprar el Riot amb un compte de Matrix existent en un servidor personal diferent.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "També podeu establir un servidor d'identitat personalitzat, però no podreu convidar usuaris o ser convidats vosaltres mateixos per adreça de correu electrònic.", + "Sign In": "Inicia la sessió" } diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index e2a5e50ef1..a2ab2af438 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -4,7 +4,7 @@ "Riot is not supported on mobile web. Install the app?": "Riot není podporovaný na mobilním webu. Nainstalovat aplikaci?", "You need to be using HTTPS to place a screen-sharing call.": "Pro uskutečnění hovoru se sdílením obrazovky musíte používat HTTPS.", "Search the room directory": "Prohledat adresář místností", - "Chat with Riot Bot": "Chatujte s Riot Botem", + "Chat with Riot Bot": "Konverzovat s Riot Botem", "Get started with some tips from Riot Bot!": "Začněte s radami od Riot Bota!", "General discussion about Matrix and Riot": "Obecná diskuse o Matrixu a Riotu", "Discussion of all things Matrix!": "Diskuse o všem okolo Matrixu!", @@ -35,5 +35,12 @@ "Riot/Android & matrix-android-sdk chat": "Riot/Android a matrix-android-sdk chat", "Discussion of the Identity Service API": "Diskuze o API služby identity", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Přes vlastní serverové volby se můžete přihlásit k dalším Matrix serverům tak, že zadáte jinou adresu domovského serveru.
Díky tomu můžete v Riotu používat Matrix účet z jiného domovského serveru.

Můžete nastavit i vlastní server identity, ale pak už nebudete moci zvát ani být zván/a skrze e-mailovou adresu.", - "Co-ordination for Riot translators": "Spolupráce pro překladatele Riot" + "Co-ordination for Riot translators": "Spolupráce pro překladatele Riot", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Také je možné nastavit vlastní server identity, ale pak nebude možné pozvat uživatele pomocí emailové adresy ani být pozván pomocí emailové adresy.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Ve vlastních serverových volbách si můžete nastavit použití vlastního domovského serveru. To Vám umožní používat Riot s existujícím Matrix účtem na jiném serveru.", + "Sign In": "Přihlásit se", + "Create Account": "Vytvořit účet", + "Need help?": "Chcete pomoct?", + "Explore rooms": "Objevit místnosti", + "Room Directory": "Adresář místností" } diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index c9c4f76737..6d1223f9d8 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -10,7 +10,7 @@ "Welcome to Riot.im": "Willkommen bei Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung unterstützt von [matrix]", "Search the room directory": "Raum-Verzeichnis durchsuchen", - "Chat with Riot Bot": "Mit dem Riot-Bot chatten", + "Chat with Riot Bot": "Chatte mit dem Riot Bot", "Get started with some tips from Riot Bot!": "Lass Dir vom Riot-Bot eine Einführung geben!", "Discussion of all things Matrix!": "\"Diskussion über alle Dinge\"-Matrix!", "Riot/Web & Desktop chat": "Riot/Web & Desktop-Chat", @@ -35,5 +35,12 @@ "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", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Die benutzerdefinierten Server-Einstellungen kannst du verwenden, um dich auf anderen Matrix-Servern anzumelden, indem du eine abweichende Heimserver-URL eingibst.
Somit ist es möglich, Riot mit einem bereits bestehendem Matrix-Benutzerkonto auf einem anderen Heimserver zu verwenden.

Außerdem kannst du einen benutzerdefinierten Identitätsserver eingeben. Allerdings kannst du in diesem Fall Benutzer nicht mehr per E-Mail-Adresse einladen und auch selbst nicht mehr per E-Mail-Adresse eingeladen werden.", - "Co-ordination for Riot translators": "Koordination für Riot-Übersetzer" + "Co-ordination for Riot translators": "Koordination für Riot-Übersetzer", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Du kannst die erweiterte Serveroption nutzen um dich an einem anderen Matrixserver anzumelden, indem du eine andere Heimserver-URL angibst. Dies erlaubt dir, Riot mit einem existierenden Matrix-Konto auf einem anderen Heimserver zu nutzen.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kannst auch einen anderen Identitätsserver setzen. Dieser hat einen anderen Wissensstand als der Standardserver, weswegen es beim Einladen oder Eingeladen werden mittels E-Mail-Adresse Probleme geben kann.", + "Sign In": "Anmelden", + "Create Account": "Konto erstellen", + "Need help?": "Brauchst du Hilfe?", + "Explore rooms": "Räume erkunden", + "Room Directory": "Raumverzeichnis" } diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index b34c3b1174..3a8d21d2e0 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -6,13 +6,13 @@ "Unknown device": "Άγνωστη συσκευή", "You need to be using HTTPS to place a screen-sharing call.": "Απαιτείται η χρήση HTTPS για το διαμοιρασμό της επιφάνειας εργασίας μέσω κλήσης.", "Riot is not supported on mobile web. Install the app?": "Το Riot δεν υποστηρίζεται από περιηγητές κινητών. Θέλετε να εγκαταστήσετε την εφαρμογή;", - "powered by Matrix": "βασισμένο στο Matrix", + "powered by Matrix": "με τη βοήθεια του Matrix", "Welcome to Riot.im": "Καλώς ήλθατε στο Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία & συνεργασία με τη βοήθεια του [matrix]", - "Search the room directory": "Αναζήτηση του ευρετηρίου δωματίων", + "Search the room directory": "Αναζήτηση στο ευρετήριο δωματίων", "Chat with Riot Bot": "Συνομιλία με το Riot Bot", "Get started with some tips from Riot Bot!": "Ξεκινήστε με μερικές συμβουλές από το Riot Bot!", - "General discussion about Matrix and Riot": "Γενική συζήτηση σχετικά με Matrix και Riot", + "General discussion about Matrix and Riot": "Γενική συζήτηση σχετικά με το Matrix και το Riot", "Discussion of all things Matrix!": "Συζήτηση για όλα τα πράγματα του Matrix!", "Riot/Web & Desktop chat": "Συζήτηση για το Riot/Web & Desktop", "Riot/iOS & matrix-ios-sdk chat": "Συζήτηση για το Riot/iOS & matrix-ios-sdk", @@ -35,5 +35,9 @@ "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 κ.λπ) ή αυτόνομα. Ρίξτε μια ματιά στο ευρετήριο!", "Support for those using, running and writing other bridges": "Υποστήριξη για τους χρήστες που χρησιμοποιούν ή αναπτύσσουν εφαρμογές ενσωμάτωσης για το Matrix", "Co-ordination for Riot translators": "Συντονισμός για μεταφραστές του Riot", - "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Μπορείτε να χρησιμοποιήσετε τις προσαρμοσμένες ρυθμίσεις διακομιστή για να συνδεθείτε σε άλλους διακομιστές Matrix δίνοντας ένα διαφορετικό URL διακομιστή.
Αυτό σας επιτρέπει να χρησιμοποιήσετε το Riot με έναν υπάρχοντα λογαριασμό Matrix σε έναν διαφορετικό διακομιστή.

Μπορείτε επίσης να ορίσετε έναν προσαρμοσμένο διακομιστή ταυτοποίησης αλλά δεν θα μπορείτε να προσκαλέσετε χρήστες ή να προσκληθείτε εσείς μέσω διεύθυνσης ηλεκτρονικού ταχυδρομίου." + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Μπορείτε να χρησιμοποιήσετε τις προσαρμοσμένες ρυθμίσεις διακομιστή για να συνδεθείτε σε άλλους διακομιστές Matrix δίνοντας ένα διαφορετικό URL διακομιστή.
Αυτό σας επιτρέπει να χρησιμοποιήσετε το Riot με έναν υπάρχοντα λογαριασμό Matrix σε έναν διαφορετικό διακομιστή.

Μπορείτε επίσης να ορίσετε έναν προσαρμοσμένο διακομιστή ταυτοποίησης αλλά δεν θα μπορείτε να προσκαλέσετε χρήστες ή να προσκληθείτε εσείς μέσω διεύθυνσης ηλεκτρονικού ταχυδρομίου.", + "Sign In": "Σύνδεση", + "Create Account": "Δημιουργία Λογαριασμού", + "Need help?": "Χρειάζεστε βοήθεια;", + "Room Directory": "Ευρετήριο δωματίων" } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 9c467cfc2f..4840fccb06 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -17,5 +17,6 @@ "Explore rooms": "Explore rooms", "Room Directory": "Room Directory", "Search the room directory": "Search the room directory", - "Get started with some tips from Riot Bot!": "Get started with some tips from Riot Bot!" + "Get started with some tips from Riot Bot!": "Get started with some tips from Riot Bot!", + "Push-to-Talk": "Push-to-Talk" } diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 921b4566d8..3c949426e7 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -10,7 +10,7 @@ "Welcome to Riot.im": "Bienvenido a Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones cifradas y descentralizadas & colaboración 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", + "Chat with Riot Bot": "Hablar con Riot Bot", "Get started with some tips from Riot Bot!": "¡Comenzar con algunos consejos 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!", @@ -35,5 +35,12 @@ "Dev chat for the Dendrite dev team": "Conversaciones del equipo de desarrollo de Dendrite", "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 use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Puedes usar las opciones del servidor personalizado para acceder a otros servidores Matrix especificando su URL.
Esto te permite usar Riot con una cuenta Matrix existente en un servidor doméstico distinto.

También puedes establecer un servidor de identidad personalizado pero no podrás invitar a otros usuarios usando su dirección de correo electrónico, y tampoco ser invitado por el tuyo.", - "Co-ordination for Riot translators": "Co-odinación de traductores de Riot" + "Co-ordination for Riot translators": "Co-odinación de traductores de Riot", + "Sign In": "Iniciar sesión", + "Create Account": "Crear cuenta", + "Need help?": "Ayuda?", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "También puedes definir un servidor de identidad personalizado, pero no podrás invitar a usuarios o ser inivitado usando direcciones de correo.", + "Explore rooms": "Explorar salas", + "Room Directory": "Directorio de salas", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Puedes usar la opción de servidor personalizado para iniciar sesión en otros servidores Matrix, especificando la dirección URL del servidor. Esto te permite usar una cuenta Matrix en un servidor diferente." } diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index bd9edc8a95..7b42bd410a 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -35,5 +35,12 @@ "Dev chat for the Dendrite dev team": "Dendrite garapen taldearen txata", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Badauden sareetara lotutako gela ugari daude Matrixen (Slack, IRC, Gitter eta abar), baita independienteak. Begiratu direktorioa!", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Zerbitzari pertsonalizatuaren aukerak erabili ditzakezu beste Matrix zerbitzarietan saioa hasteko, han beste hasiera-zerbitzari baten URLa sartuz.
Horrela Riot aurretik duzun kontu batekin erabili dezakezu beste hasiera-zerbitzari batean.

Identitate-zerbitzari pertsonalizatu bat ezarri dezakezu ere, baina orduan ezin izango dituzu erabiltzaileak e-mail helbidea erabiliz gonbidatu, edo ezin izan izango zaituzte zu e-mail helbidea erabiliz gonbidatu.", - "Co-ordination for Riot translators": "Riot itzultzaileen koordinazioa" + "Co-ordination for Riot translators": "Riot itzultzaileen koordinazioa", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Zerbitzari pertsonalizatuaren aukera erabili dezakezu bestelako Matrix zerbitzari batera konektatzeko, bere URL-a adierazita. Honek Riot beste zerbitzari batean duzun Matrix kontuarekin erabiltzea ahalbidetzen dizu.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Identitate zerbitzari pertsonalizatu bat ere ezarri dezakezu, baina orduan ezin izango dituzu erabiltzaileak e-mail helbidearen bidez gonbidatu, edo ezin izango zaituzte e-mail helbidearen bidez zu gonbidatu.", + "Sign In": "Hasi saioa", + "Create Account": "Sortu kontua", + "Need help?": "Laguntza behar?", + "Explore rooms": "Arakatu gelak", + "Room Directory": "Gelen direktorioa" } diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index ad99f01fba..596ff51f3f 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -6,7 +6,7 @@ "Custom Server Options": "Palvelinasetukset", "Riot Desktop on %(platformName)s": "Riot Desktop %(platformName)s", "You need to be using HTTPS to place a screen-sharing call.": "Sinun täytyy käyttää HTTPS -yhteyttä, jotta voit jakaa ruudun.", - "Chat with Riot Bot": "Keskustele Riot Botin kanssa", + "Chat with Riot Bot": "Keskustele Riot-botin kanssa", "Get started with some tips from Riot Bot!": "Aloita Riot Botin vinkkien avulla!", "General discussion about Matrix and Riot": "Matrix- ja Riot keskustelut", "Discussion of all things Matrix!": "Keskustelu kaikesta Matrixiin liittyvästä!", @@ -34,5 +34,12 @@ "Contributing code to Matrix and Riot": "Osallistu kehitystyöhön", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s %(browserName)s %(osName)s", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Salattua ja vikasietoista viestintää Matrix -teknologialla", - "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Voit käyttää edistyksellisiä asetuksia kirjautuaksesi muille Matrix palvelimille, määrittelemällä kotipalvelimen URL-osoitteen.
Tämän avulla voit käyttää Riot:ia olemassa olevalla toisen Matrix palvelimen käyttäjätilillä.

Voit myös asettaa valinnaisen identiteettipalvelimen, mutta et voi kutsua käyttäjiä sähköpostiosoitteella tai tulla kutsutuksi." + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Voit käyttää edistyksellisiä asetuksia kirjautuaksesi muille Matrix palvelimille, määrittelemällä kotipalvelimen URL-osoitteen.
Tämän avulla voit käyttää Riot:ia olemassa olevalla toisen Matrix palvelimen käyttäjätilillä.

Voit myös asettaa valinnaisen identiteettipalvelimen, mutta et voi kutsua käyttäjiä sähköpostiosoitteella tai tulla kutsutuksi.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Voit käyttää mukautettuja palvelinasetuksia kirjautuaksesi muihin Matrix-palvelimiin. Tämä mahdollistaa Riotin käyttämisen toisella palvelimella olevalla Matrix-tunnuksella.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Voit myös määrittää toisen identiteettipalvelimen, mutta et voi kutsua muita käyttäjiä sähköpostin perusteella, eivätkä se voi kutsua sinua.", + "Sign In": "Kirjaudu sisään", + "Create Account": "Luo tunnus", + "Need help?": "Tarvitsetko apua?", + "Explore rooms": "Etsi huoneita", + "Room Directory": "Huonehakemisto" } diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 3bdf9466e4..b7401ea434 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -8,7 +8,7 @@ "Unknown device": "Appareil inconnu", "You need to be using HTTPS to place a screen-sharing call.": "Vous devez utiliser HTTPS pour effectuer un appel avec partage d’écran.", "Welcome to Riot.im": "Bienvenue sur Riot.im", - "Chat with Riot Bot": "Discussion avec Riot Bot", + "Chat with Riot Bot": "Discuter avec le bot Riot", "Search the room directory": "Rechercher dans le répertoire de salons", "Get started with some tips from Riot Bot!": "Démarrer avec quelques astuces de Riot Bot !", "Riot/Android & matrix-android-sdk chat": "Discussions sur Riot/Android & matrix-android-sdk", @@ -35,5 +35,12 @@ "Dev chat for the Dendrite dev team": "Discussion pour l'équipe de développeurs de Dendrite", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "De nombreux salons existent déjà dans Matrix, liés à des réseaux existants (Slack, IRC, Gitter etc) ou indépendants. Jetez un œil au répertoire !", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vous pouvez utiliser les options de serveur personnalisé pour vous connecter à d'autres serveurs Matrix en précisant un serveur d'accueil différent.
Cela vous permet d'utiliser Riot avec un compte Matrix existant sur un autre serveur d'accueil.

Vous pouvez aussi renseigner un serveur d'identité personnalisé mais vous ne pourrez pas inviter d'utilisateurs avec leur adresse e-mail, ou être invité avec votre adresse e-mail.", - "Co-ordination for Riot translators": "Coordination des traducteurs de Riot" + "Co-ordination for Riot translators": "Coordination des traducteurs de Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Vous pouvez utiliser les options de serveur personnalisé pour vous connecter à d'autres serveurs Matrix en renseignant l'URL d'un autre serveur d'accueil. Cela vous permet d'utiliser Riot avec un compte Matrix existant sur un serveur d'accueil différent.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Vous pouvez aussi renseigner un serveur d'identité personnalisé, mais vous ne pourrez pas inviter d'utilisateurs avec leur adresse e-mail, ou être vous-même invité avec votre adresse e-mail.", + "Sign In": "Se connecter", + "Create Account": "Créer un compte", + "Need help?": "Besoin d'aide ?", + "Explore rooms": "Explorer les salons", + "Room Directory": "Répertoire de salons" } diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index be3e3cc072..37e9c8887b 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -35,5 +35,12 @@ "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Xa existen multitude de salas en Matrix ben ligadas a redes existentes (Slack, IRC, Gitter etc) ou ben independentes. Busque no directorio!", "Riot/Android & matrix-android-sdk chat": "Riot/Android & sala de conversas matrix-android-sdk", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Pode utilizar as opcións persoais de servidor para conectarse a outros servidores Matrix indicando o enderezo URL dese servidor.
Isto permítelle utilizar Riot cunha conta Matrix existente en outro servidor.

Tamén pode empregar un servidor personalizado de identidade mais nese caso nin se poderán convidar a outros usuarios empregando os correo electrónicos nin tampouco eles o poderán convidar a vostede por correo.", - "Co-ordination for Riot translators": "Coordinación para tradutora/es de Riot" + "Co-ordination for Riot translators": "Coordinación para tradutora/es de Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Podes usar as opcións de servidor personalizado para iniciar sesión en outros servidores Matrix especificando unha dirección diferente de servidor doméstico. Con esto podes usar Riot cunha conta Matrix existente noutro servidor doméstico.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Tamén podes fixar un servidor de identidade, pero non poderás invitar a usuarios polo enderezo de correo, e tampouco que te inviten.", + "Sign In": "Entrar", + "Create Account": "Crear conta", + "Need help?": "¿Precisas axuda?", + "Explore rooms": "Explorar salas", + "Room Directory": "Directorio de salas" } diff --git a/src/i18n/strings/hi.json b/src/i18n/strings/hi.json index 82b716bd00..172796d032 100644 --- a/src/i18n/strings/hi.json +++ b/src/i18n/strings/hi.json @@ -35,5 +35,12 @@ "Contributing code to Matrix and Riot": "मैट्रिक्स और रायट में कोड योगदान करना", "Dev chat for the Riot/Web dev team": "रायट / वेब डेव टीम के लिए डेवलपर चैट", "Dev chat for the Dendrite dev team": "डेन्ड्राइट देव टीम के लिए डेवलपर चैट", - "Co-ordination for Riot translators": "रायट अनुवादकों के लिए समन्वय" + "Co-ordination for Riot translators": "रायट अनुवादकों के लिए समन्वय", + "Sign In": "साइन करना", + "Create Account": "खाता बनाएं", + "Need help?": "मदद चाहिए?", + "Explore rooms": "रूम का अन्वेषण करें", + "Room Directory": "कक्ष निर्देशिका", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "आप एक अलग होमसर्वर URL निर्दिष्ट करके अन्य मैट्रिक्स सर्वर में साइन इन करने के लिए कस्टम सर्वर विकल्पों का उपयोग कर सकते हैं। यह आपको एक अलग होमसर्वर पर मौजूदा मैट्रिक्स खाते के साथ रायट का उपयोग करने की अनुमति देता है।", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "आप एक कस्टम पहचान सर्वर भी सेट कर सकते हैं, लेकिन आप उपयोगकर्ताओं को ईमेल पते से आमंत्रित नहीं कर पाएंगे, या स्वयं ईमेल पते से आमंत्रित नहीं किया जाएगा।" } diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index ad20927eec..3d58c10b4d 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -35,5 +35,12 @@ "Dev chat for the Dendrite dev team": "Csevegés a Dendrite fejlesztői csapatával fejlesztőknek", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Már sok szoba van a Matrixon: más hálózatokkal (Slack, IRC, Gitter stb.) összekapcsolt és függetlenek szobák is. Nézd meg a szobajegyzéket!", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Bejelentkezhetsz más Matrix szerverre is az egyedi szerverbeállításoknál megadott Matrix szerver URL-jével.
Így használhatod a Riotot egy már máshol meglévő Matrix fiókkal is.

Beállíthatsz egyéni identitásszervert is, de akkor nem tudsz más felhasználókat e-mail címmel meghívni, illetve ők sem tudnak téged.", - "Co-ordination for Riot translators": "Koordináció Riot fordítók számára" + "Co-ordination for Riot translators": "Koordináció Riot fordítók számára", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Más azonosítási szervert is használhatsz, de akkor nem tudsz másokat e-mail cím alapján meghívni és téged sem fognak tudni.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Használhatod az egyedi szerver beállítást más Matrix szerverre való belépéshez, azzal, hogy megadod a Matrix szerver URL-jét. Ezzel a Riot-ot használhatod más Matrix szerveren lévő fiókkal.", + "Sign In": "Bejelentkezés", + "Create Account": "Fiók készítés", + "Need help?": "Segíthetünk?", + "Explore rooms": "Szobák felfedezése", + "Room Directory": "Szoba lista" } diff --git a/src/i18n/strings/nb_NO.json b/src/i18n/strings/nb_NO.json index 44f2bf2f95..97898f522c 100644 --- a/src/i18n/strings/nb_NO.json +++ b/src/i18n/strings/nb_NO.json @@ -1,16 +1,34 @@ { - "Custom Server Options": "Tilpassede serveralternativer", - "powered by Matrix": "benytter seg av Matrix", + "Custom Server Options": "Server-instillinger", + "powered by Matrix": "Drevet av Matrix", "Riot is not supported on mobile web. Install the app?": "Riot er ikke støttet av mobil-nettlesere. Ønsker De å innstalere appen?", - "Riot Desktop on %(platformName)s": "Riot på skrivebordet er på %(platformName)s", + "Riot Desktop on %(platformName)s": "Riot Desktop på %(platformName)s", "Unknown device": "Ukjent enhet", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s på %(osName)s", - "You need to be using HTTPS to place a screen-sharing call.": "De er nødt til å benytte HTTPS for å kunne ha en samtale med skjermdeling.", + "You need to be using HTTPS to place a screen-sharing call.": "Du er nødt til å bruke HTTPS for å ha en samtale med skjermdeling.", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "De kan benytte brukerdefinerte server-innstillinger for å kunne logge Dem inn på andre Matrix-servere ved å spesifisere en annen hjemmeserver-adresse.
Dette tillater Dem til å bruke Riot med en eksisterende Matrix-konto på en annen hjemmeserver.

De kan i tillegg definere en egen hjemmeserver-identitet, men De kan da ikke invitere andre brukere via email, og De kan heller ikke bli invitert via email selv.", "Dismiss": "Avvis", - "Welcome to Riot.im": "Velkommen skal De være til Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Desentralisert, kryptert nettprat & sammabeid drevet av [matrix]", - "Search the room directory": "Søk i romutvalget", + "Welcome to Riot.im": "Velkommen til Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Desentralisert, kryptert chat & sammabeid drevet av [matrix]", + "Search the room directory": "Søk i alle rom", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Allerede finnes det alskens rom i Matrix, sammenkoblet til eksisterende nettverk (Slack, IRC, Gitter osv.) eller selvstendig. Dersom De formoder, kan De kikke på utvalget!", - "Chat with Riot Bot": "Nettprat med Riot Bot" + "Chat with Riot Bot": "Chat med Riot Bot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Du kan bruke instillinger for «egendefinert tjener» til å logge inn på andre Matrix tjenere ved å spesifisere en annen URL. Dette lar deg bruke Riot med en eksisterende Matrix konto på en annen hjemmetjener.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan også bruke din egen identitetstjener, men du kommer ikke til å kunne invitere andre brukere med e-post, eller bli invitert med e-post selv.", + "Get started with some tips from Riot Bot!": "Kom i gang med noen tips fra Riot Bot!", + "General discussion about Matrix and Riot": "Generelle diskusjoner om Matrix og Riot", + "Discussion of all things Matrix!": "Diskusjoner om alt Matrix!", + "Riot/Web & Desktop chat": "Riot/Web- & Skrivebordsprat", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk", + "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk", + "Matrix technical discussions": "Tekniske Matrix-diskusjoner", + "Running Matrix services": "Kjør Matrix servicer", + "Community-run support for Synapse": "Samfunnsholdt hjelpetjeneste for Synapse", + "Admin support for Dendrite": "Administrator hjelp for Dendrite", + "Announcements about Synapse releases": "Kunngjøring om Synapse utgivelser", + "Sign In": "Logg inn", + "Create Account": "Lag konto", + "Need help?": "Trenger du hjelp?", + "Room Directory": "Alle rom", + "Explore rooms": "Se alle rom" } diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json index a94e77e599..a07747ba57 100644 --- a/src/i18n/strings/nn.json +++ b/src/i18n/strings/nn.json @@ -7,16 +7,16 @@ "Dismiss": "Avvis", "powered by Matrix": "Matrixdriven", "Welcome to Riot.im": "Velkomen til Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Desentralisert, kryptert nettprat & samarbeid driven av [matrix]", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Desentralisert, kryptert nettprat & samarbeid drive av [matrix]", "Search the room directory": "Søk i romutvalet", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Det finst allereie massevis av rom på Matrix, anten lenkja til nettverk som allereie finst (Slack, IRC, Gitter osv.) eller uavhengige. Tak ein titt på utvalet!", "Chat with Riot Bot": "Nettprat med Riot Bot", "Get started with some tips from Riot Bot!": "Kom i gang med nokre råd frå Riot Bot!", "General discussion about Matrix and Riot": "Allmenn meiningsutveksling om Matrix og Riot", "Discussion of all things Matrix!": "Meiningsutveksling om alt som gjeld Matrix!", - "Riot/Web & Desktop chat": "Riot/Web & Skrivebordsprat", - "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk-prat", - "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk-prat", + "Riot/Web & Desktop chat": "Riot/Web og Skrivebord", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS og matrix-ios-sdk", + "Riot/Android & matrix-android-sdk chat": "Riot/Android og matrix-android-sdk", "Matrix technical discussions": "Teknisk meiningsutveksling om Matrix", "Running Matrix services": "Å køyra Matrix-tenestar", "Community-run support for Synapse": "Samfunnsdriven støtte for Synapse", @@ -35,5 +35,12 @@ "Dev chat for the Dendrite dev team": "Utviklar-prat for Dendrite-utviklargruppa", "Co-ordination for Riot translators": "Samordning for Riot-omsetjare", "Custom Server Options": "Eigentenar-innstillingar", - "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan bruka eigentenarinnstillingar til å logga inn på andre Matrixtenarar ved å oppgje ein annan Heimtenar-URL.
Dette gjer at du kan bruka Riot med ein Matrixbrukar som allereie finst på ein annan heimtenar.

Du kan òg setja ein eigen identitetstenar men du kjem i so fall ikkje til å kunna byda brukare inn med epost, eller å sjølv verta boden inn med epost." + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan bruka eigentenarinnstillingar til å logga inn på andre Matrixtenarar ved å oppgje ein annan Heimtenar-URL.
Dette gjer at du kan bruka Riot med ein Matrixbrukar som allereie finst på ein annan heimtenar.

Du kan òg setja ein eigen identitetstenar men du kjem i so fall ikkje til å kunna byda brukare inn med epost, eller å sjølv verta boden inn med epost.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Du kan nytta dei eigendefinerte tenarinstillingane for å logga inn på andre Matrix-tenarar ved å uppgje ein annan heimtenar-URL. Dette lèt deg bruka Riot med ein Matrix-konto som allereie finst på ein annan heimtenar.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan òg velja ein eigendefinert identitetstenar, men då kjem du ikkje til å innvitere brukarar gjennom e-post, eller verta invitert med e-post sjølv.", + "Sign In": "Logg inn", + "Create Account": "Lag brukar", + "Need help?": "Treng du hjelp?", + "Explore rooms": "Vert kjend med romma", + "Room Directory": "Romutval" } diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index b182eeb894..85d9a5dd8a 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -35,5 +35,9 @@ "Dev chat for the Dendrite dev team": "Czat deweloperów zespołu Dendrite", "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!", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Możesz skorzystać z opcji niestandardowego serwera, aby zalogować się na inne serwery Matrix, podając inny adres URL serwera domowego.
Pozwala to na używanie Riot z istniejącym kontem Matrix na innym serwerze domowym.

Możesz również ustawić niestandardowy serwer tożsamości, ale nie będziesz w stanie zapraszać użytkowników przez adres e-mail ani otrzymywać zaproszeń na adres e-mail.", - "Co-ordination for Riot translators": "Koordynacja tłumaczy Riot" + "Co-ordination for Riot translators": "Koordynacja tłumaczy Riot", + "Create Account": "Stwórz konto", + "Sign In": "Zaloguj", + "Need help?": "Potrzebujesz pomocy?", + "Room Directory": "Katalog pokojów" } diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 2bbf5c4a19..f1fa48fb6c 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -4,7 +4,7 @@ "powered by Matrix": "oferecido por Matrix", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s em %(osName)s", "Riot Desktop on %(platformName)s": "Riot para computadores desktop em %(platformName)s", - "Riot is not supported on mobile web. Install the app?": "Riot versão web não é suportado a partir de celular. Quer instalar o app para celular?", + "Riot is not supported on mobile web. Install the app?": "Riot não funciona em navegador de smartphone. Quer instalar o aplicativo?", "Unknown device": "Dispositivo desconhecido", "You need to be using HTTPS to place a screen-sharing call.": "Você precisa estar usando HTTPS para poder iniciar uma chamada com compartilhamento de tela.", "Welcome to Riot.im": "Seja bem-vinda(o) a Riot.im", @@ -19,7 +19,7 @@ "Matrix technical discussions": "Discussões técnicas do Matrix", "Running Matrix services": "Rodando serviços Matrix", "Community-run support for Synapse": "Apoio ao Synapse gerido pela comunidade", - "Admin support for Dendrite": "Suporte de administração para Dendrite", + "Admin support for Dendrite": "Suporte administrativo para o Dendrite", "Announcements about Synapse releases": "Anúncios sobre lançamentos do Synapse", "Support for those using and running matrix-appservice-irc": "Apoio para as pessoas usando e rodando matrix-appservice-irc", "Building services on Matrix": "Construindo serviços no Matrix", @@ -35,5 +35,12 @@ "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Muitas salas já existem no Matrix, algumas independentes, e outras relacionadas a redes existentes (tais como Slack, IRC, Gitter, entre outras). Dê uma olhada na lista de salas públicas!", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, criptografado e colaborativo oferecido por [matrix]", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Você pode usar as opções customizadas de servidor para conectar-se a outros servidores Matrix ao especificar uma outra URL de Servidor de Base (homeserver).
Isso permite que você use o Riot com uma conta Matrix existente em outro servidor de base.

Você também pode definir um servidor de identidade customizado, mas neste caso você não poderá convidar outras pesoas por endereço de email, ou ser convidada/o pelo seu endereço de email.", - "Co-ordination for Riot translators": "Coordenação para tradutores Riot" + "Co-ordination for Riot translators": "Coordenação para tradutores Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Você pode usar as opções personalizadas do servidor para entrar em outros servidores Matrix, especificando um URL diferente de homeserver. Isso permite que você use o Riot com uma conta Matrix existente em um homeserver diferente.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Você também pode definir um servidor de identidade personalizado, mas não poderá convidar usuários por endereço de e-mail nem ser convidado por endereço de e-mail.", + "Sign In": "Entrar", + "Create Account": "Criar Conta", + "Need help?": "Precisa de ajuda?", + "Explore rooms": "Explore as salas", + "Room Directory": "Diretório de salas" } diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 95242e83b8..0e473bf6e2 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -1,32 +1,32 @@ { "Custom Server Options": "Выбор другого сервера", "Dismiss": "Отклонить", - "powered by Matrix": "Основано на Matrix", + "powered by Matrix": "основано на Matrix", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s с %(browserName)s на %(osName)s", "Riot Desktop on %(platformName)s": "Riot Desktop на %(platformName)s", "Riot is not supported on mobile web. Install the app?": "Веб-сайт Riot не адаптирован для мобильных устройств. Установить приложение?", "Unknown device": "Неизвестное устройство", "You need to be using HTTPS to place a screen-sharing call.": "Для трансляции рабочего стола требуется использование HTTPS.", - "Welcome to Riot.im": "Добро пожаловать на Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализованный, зашифрованный чат и совместное рабочее пространство на основе [matrix]", + "Welcome to Riot.im": "Добро пожаловать в Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализованный, шифрованный чат и совместное рабочее пространство на основе [matrix]", "Search the room directory": "Поиск в каталоге комнат", - "Chat with Riot Bot": "Пообщаться с ботом Riot", + "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", - "Matrix technical discussions": "Технические разговоры о Matrix", - "Running Matrix services": "Запуск и обслуживание своих серверов Matrix", - "Community-run support for Synapse": "Поддержка Synapse от сообщества", - "Admin support for Dendrite": "Поддержка администраторов Dendrite", + "Matrix technical discussions": "Технические обсуждения Matrix", + "Running Matrix services": "Запуск Matrix сервисов", + "Community-run support for Synapse": "Общественная поддержка Synapse", + "Admin support for Dendrite": "Административная поддержка Dendrite", "Building services on Matrix": "Разработка сервисов на основе Matrix", - "Implementing VoIP services with Matrix": "Реализация VoIP-служб на основе Matrix", + "Implementing VoIP services with Matrix": "Реализация VoIP сервисов на основе Matrix", "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", + "Announcements about Synapse releases": "Уведомление о релизах Synapse", "Support for those using and running matrix-appservice-irc": "Поддержка пользователей и администраторов matrix-appservice-irc", "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 и пр.), так и самостоятельных. Загляните в каталог!", - "Support for those using the Matrix spec": "Поддержка по вопросам спецификации Matrix", + "Support for those using the Matrix spec": "Поддержка по спецификации Matrix", "Design and implementation of E2E in Matrix": "Разработка и внедрение сквозного шифрования в Matrix", "Implementing VR services with Matrix": "Реализация сервисов виртуальной реальности (VR) на основе Matrix", "Discussion of the Identity Service API": "Обсуждение API серверов идентификации", @@ -35,5 +35,12 @@ "Dev chat for the Riot/Web dev team": "Чат для команды разработчиков Riot/Web", "Dev chat for the Dendrite dev team": "Чат для команды разработчиков Dendrite", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Вы можете войти на другой сервер Matrix, указав его URL-адрес.
Это позволяет использовать Riot с учетной записью Matrix на другом сервере.

Кроме того, можно выбрать другой сервер идентификации, однако в таком случае вы не сможете приглашать пользователей или быть приглашенным по адресу электронной почты.", - "Co-ordination for Riot translators": "Координационный чат для переводчиков Riot" + "Co-ordination for Riot translators": "Координационный чат для переводчиков Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Вы можете изменить параметры для входа на другие Matrix серверы, указав другой URL.\nЭто позволит использовать Riot с учетной записью Matrix, существующей на другом сервере.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Также можно изменить сервер идентификации, но без возможности приглашать (или быть приглашённым) по адресу электронной почты.", + "Sign In": "Вход", + "Create Account": "Создать аккаунт", + "Need help?": "Помочь?", + "Room Directory": "Каталог комнат", + "Explore rooms": "Исследовать комнаты" } diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 134585b385..22862b5809 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -35,5 +35,12 @@ "Contributing code to Matrix and Riot": "Kontribut me kod te Matrix dhe te Riot", "Dev chat for the Riot/Web dev team": "Fjalosje mbi zhvillimin, për ekipin e zhvilluesve të Riot/Web-i", "Dev chat for the Dendrite dev team": "Fjalosje mbi zhvillimi, për ekipin e zhvilluesve të Dendrite-it", - "Co-ordination for Riot translators": "Bashkërendim për përkthyes të Riot-it" + "Co-ordination for Riot translators": "Bashkërendim për përkthyes të Riot-it", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Mund të përdorni mundësitë mbi shërbyes vetjak, për të bërë hyrjen në shërbyes të tjerë Matrix, duke dhënë një tjetër URL shërbyesi Home. Kjo ju lejon ta përdorni këtë aplikacion në një tjetër shërbyes Home, me një llogari ekzistuese Matrix.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Mundeni edhe të caktoni një shërbyes vetjak identitetesh, por s’do të jeni në gjendje të ftoni përdorues përmes adresash email, ose të ftoheni ju vetë përmes adrese email.", + "Sign In": "Hyni", + "Create Account": "Krijoni Llogari", + "Need help?": "Ju duhet ndihmë?", + "Explore rooms": "Eksploroni dhoma", + "Room Directory": "Listë Dhomash" } diff --git a/src/i18n/strings/sr.json b/src/i18n/strings/sr.json index 053ceb64e9..612c01babc 100644 --- a/src/i18n/strings/sr.json +++ b/src/i18n/strings/sr.json @@ -35,5 +35,12 @@ "Contributing code to Matrix and Riot": "Додавање кода у Матрикс и Riot", "Dev chat for the Riot/Web dev team": "Програмерско ћаскање за Riot/веб програмерски тим", "Dev chat for the Dendrite dev team": "Програмерско ћаскање за Dendrite програмерски тим", - "Co-ordination for Riot translators": "Координација за Riot преводиоце" + "Co-ordination for Riot translators": "Координација за Riot преводиоце", + "Sign In": "Пријава", + "Create Account": "Направи налог", + "Need help?": "Потребна помоћ?", + "Explore rooms": "Истражи собе", + "Room Directory": "Фасцикла са собама", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Можете користити опције прилагођеног сервера да бисте се пријавили на друге Матрикс сервере тако што ћете навести другачију адресу кућног сервера. Ово вам омогућава да користите Riot са постојећим Матрикс налогом на другом кућном серверу.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Такође, можете подесити прилагођени сервер идентитета али у том случају нећете моћи да позивате кориснике преко мејла адресе или да сами будете позвани преко мејл адресе." } diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index 44fa9818d0..45f9a91a56 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -35,5 +35,12 @@ "Admin support for Dendrite": "Hjälp för administratörer av Dendrite", "Building services on Matrix": "Bygga tjänster med Matrix", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan använda anpassade serverinställningar för att logga in på andra Matrix-servrar genom att ange en annan hemserver-URL.
Du kan då använda Riot med ett befintligt Matrix-konto på en annan hemserver.

Du kan också ange en anpassad identitetsserver men kommer då inte kunna bjuda in användare med epostadress, eller själv bli inbjuden med epostadress.", - "Co-ordination for Riot translators": "Koordination för Riot-översättare" + "Co-ordination for Riot translators": "Koordination för Riot-översättare", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan använda en egen identitetsserver, men då kan du inte bjuda in användare via epostadress eller själv bjudas in med din epostadress.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Under anpassade serverinställningar kan du logga in på andra Matrixservrar genom att ange en egen hemserveradress. På så sätt kan du använda Riot med ett Matrixkonto du redan har på en annan hemserver.", + "Sign In": "Logga in", + "Create Account": "Skapa konto", + "Need help?": "Behöver du hjälp?", + "Explore rooms": "Utforska rum", + "Room Directory": "Rumslista" } diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index 6833276a67..85531a46c1 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -1,5 +1,5 @@ { - "Custom Server Options": "Нетипові параметри сервера", + "Custom Server Options": "Власні параметри сервера", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s через %(browserName)s на %(osName)s", "Dismiss": "Відхилити", "powered by Matrix": "працює на Matrix", @@ -10,7 +10,7 @@ "Welcome to Riot.im": "Ласкаво просимо до Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентралізований, шифрований чат та засіб для співробітництва, що працює на [matrix]", "Search the room directory": "Шукати у каталозі кімнат", - "Chat with Riot Bot": "Розмовляти з Riot-ботом", + "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!", @@ -35,5 +35,12 @@ "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 тощо), так і незалежними. Подивіться у каталозі кімнат!", "Running Matrix services": "Запуск служби Matrix", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Ви можете використовувати параметри користувача сервера для входа на другі сервера Matrix, вказав другий URL-адресу домашнього сервера.
Це дозволяє використовувати Riot з обліковим записом Matrix який існує на другому домашньому сервері.

Окрім цього, можливо встановити ідентифікаційний сервер користувача, але ви не зможете запросити других користувачів та бути запрошенному використовуючи адресу електронної пошти.", - "Co-ordination for Riot translators": "Координаційний чат для перекладачів Riot" + "Co-ordination for Riot translators": "Координаційний чат для перекладачів Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Ви можете використати власні параметри сервера для входу в інші Matrix сервери, вказавши інший URL. Це дозволить використовувати Riot з наявним обліковим записом Matrix на іншому сервері.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Ви також можете встановити власний сервер ідентифікації, але Ви не зможете запрошувати користувачів або бути запрошеним за адресою електронної пошти.", + "Need help?": "Допомогти?", + "Sign In": "Вхід", + "Create Account": "Створити аккаунт", + "Explore rooms": "Дослідити кімнати", + "Room Directory": "Каталог кімнат" } diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index 863c22457e..0e65cb60ca 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -35,5 +35,11 @@ "Dev chat for the Dendrite dev team": "Dendrite 的开发团队的开发讨论", "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 等)或独立的网络,请查看目录!", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "你可以修改主服务器 URL 以登录其他的 Matrix 服务器。
这样,你就可以使用你在其他 Matrix 服务器上的账号。

你也可以修改身份认证服务器,但你可能因此无法使用电子邮件地址来邀请其他用户,或者被其他用户通过电子邮件邀请。", - "Co-ordination for Riot translators": "Riot 翻译人员的合作讨论" + "Co-ordination for Riot translators": "Riot 翻译人员的合作讨论", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "您也可以自定义身份服务器,但是您将不能用电子邮箱地址邀请他人或被邀请。", + "Sign In": "登入", + "Create Account": "创建帐号", + "Need help?": "需要帮助?", + "Explore rooms": "探索房间", + "Room Directory": "房间目录" } diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 8670b7b2af..9e28f840ee 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -35,5 +35,12 @@ "Dev chat for the Dendrite dev team": "Dendrite 開發團隊的開發聊天室", "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 等等)或是獨立的網路。來看看聊天室目錄吧!", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
This allows you to use Riot with an existing Matrix account on a different home server.

You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "您可以使用自訂的伺服器選項,並指定不同的家伺服器 URL 來登入其他的 Matrix 伺服器。
這讓您可以在不同的伺服器上以既有的 Matrix 帳號使用 Riot。

您也可以設定一個自訂的識別伺服器,但您可能無法透過電子郵件地址來邀請使用者,或是讓別人透過電子郵件邀請您。", - "Co-ordination for Riot translators": "Riot 翻譯的協作" + "Co-ordination for Riot translators": "Riot 翻譯的協作", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "您可以以使用自訂伺服器選項指定不同的家伺服器 URL 以登入其他 Matrix 伺服器。這讓您可以在不同的家伺服器上使用既有的 Matrix 帳號登入 Riot。", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "您也可以設定自訂的身份識別伺服器,但您無法透過電子郵件地址邀請使用者,或是被邀請。", + "Sign In": "登入", + "Create Account": "建立帳號", + "Need help?": "需要協助?", + "Explore rooms": "探索聊天室", + "Room Directory": "聊天室目錄" } diff --git a/src/vector/index.html b/src/vector/index.html index 5451ec5232..f24007c964 100644 --- a/src/vector/index.html +++ b/src/vector/index.html @@ -3,22 +3,22 @@ Riot - - - - - - - - - + + + + + + + + + - + - - + + <% for (var i=0; i < htmlWebpackPlugin.files.css.length; i++) { diff --git a/src/vector/index.js b/src/vector/index.js index af9ee7fd0c..6a70b76719 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -281,7 +281,7 @@ async function loadApp() { // as quickly as we possibly can, set a default theme... let a; - const theme = "dharma";//SettingsStore.getValue("theme"); + const theme = SettingsStore.getValue("theme"); for (let i = 0; (a = document.getElementsByTagName("link")[i]); i++) { const href = a.getAttribute("href"); if (!href) continue; diff --git a/src/vector/platform/ElectronPlatform.js b/src/vector/platform/ElectronPlatform.js index ca43b22dfd..fdfbfa9e87 100644 --- a/src/vector/platform/ElectronPlatform.js +++ b/src/vector/platform/ElectronPlatform.js @@ -25,6 +25,7 @@ import Promise from 'bluebird'; import rageshake from 'matrix-react-sdk/lib/rageshake/rageshake'; const ipcRenderer = window.ipcRenderer; +var globalKeybindings = {}; remote.autoUpdater.on('update-downloaded', onUpdateDownloaded); @@ -120,7 +121,11 @@ export default class ElectronPlatform extends VectorBasePlatform { this.stopUpdateCheck = this.stopUpdateCheck.bind(this); ipcRenderer.on('keybinding-pressed', (event, keybindName) => { +<<<<<<< HEAD // Prevent holding down a shortcut meaning multiple presses +======= + // Prevent holding down a shortcut meaning multiple presses +>>>>>>> fa72152a96b083180efbda662f9b0eb9f720e0b2 if (globalKeybindings[keybindName].pressed) { return; } @@ -212,18 +217,30 @@ export default class ElectronPlatform extends VectorBasePlatform { return await this._ipcCall('getAppVersion'); } - supportsAutoLaunch() { + supportsAutoLaunch(): boolean { return true; } - async getAutoLaunchEnabled() { + async getAutoLaunchEnabled(): boolean { return await this._ipcCall('getAutoLaunchEnabled'); } - async setAutoLaunchEnabled(enabled) { + async setAutoLaunchEnabled(enabled: boolean): void { return await this._ipcCall('setAutoLaunchEnabled', enabled); } + supportsMinimizeToTray(): boolean { + return true; + } + + async getMinimizeToTrayEnabled(): boolean { + return await this._ipcCall('getMinimizeToTrayEnabled'); + } + + async setMinimizeToTrayEnabled(enabled: boolean): void { + return await this._ipcCall('setMinimizeToTrayEnabled', enabled); + } + async canSelfUpdate(): boolean { const feedUrl = await this._ipcCall('getUpdateFeedUrl'); return Boolean(feedUrl); @@ -236,6 +253,28 @@ export default class ElectronPlatform extends VectorBasePlatform { ipcRenderer.send('check_updates'); } +<<<<<<< HEAD +======= + startListeningKeys() { + // Tell iohook to start listening for key events + ipcRenderer.send('start-listening-keys'); + } + + stopListeningKeys() { + // Tell iohook to stop listening for key events + ipcRenderer.send('stop-listening-keys'); + } + + onKeypress(self: any, callback: (ev, event) => void ) { + ipcRenderer.on('keypress', callback.bind(self)); + } + + onWindowBlurred(callback: () => void) { + // Callback to run on window blur (window loses focus) + ipcRenderer.on('window-blurred', callback); + } + +>>>>>>> fa72152a96b083180efbda662f9b0eb9f720e0b2 addGlobalKeybinding(keybindName: string, keybindCode: string, callback: () => void, releaseCallback: () => void) { // Add a keybinding that works even when the app is minimized const keybinding = {name: keybindName, code: keybindCode}; @@ -290,7 +329,7 @@ export default class ElectronPlatform extends VectorBasePlatform { const ipcCallId = ++this._nextIpcCallId; return new Promise((resolve, reject) => { this._pendingIpcCalls[ipcCallId] = {resolve, reject}; - window.ipcRenderer.send('ipcCall', {id: ipcCallId, name, args}); + ipcRenderer.send('ipcCall', {id: ipcCallId, name, args}); // Maybe add a timeout to these? Probably not necessary. }); } diff --git a/src/vector/platform/VectorBasePlatform.js b/src/vector/platform/VectorBasePlatform.js index 602a0c27c9..cfdeeacbe4 100644 --- a/src/vector/platform/VectorBasePlatform.js +++ b/src/vector/platform/VectorBasePlatform.js @@ -88,19 +88,6 @@ export default class VectorBasePlatform extends BasePlatform { this._updateFavicon(); } - supportsAutoLaunch() { - return false; - } - - // XXX: Surely this should be a setting like any other? - async getAutoLaunchEnabled() { - return false; - } - - async setAutoLaunchEnabled(enabled) { - throw new Error("Unimplemented"); - } - /** * Begin update polling, if applicable */ diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js index ed87403d7b..7840d776cd 100644 --- a/test/app-tests/loading.js +++ b/test/app-tests/loading.js @@ -149,6 +149,9 @@ describe('loading:', function() { const config = Object.assign({ default_hs_url: DEFAULT_HS_URL, default_is_url: DEFAULT_IS_URL, + embeddedPages: { + homeUrl: 'data:text/html;charset=utf-8;base64,PGh0bWw+PC9odG1sPg==', + }, }, opts.config || {}); PlatformPeg.set(new WebPlatform()); @@ -172,12 +175,23 @@ describe('loading:', function() { // http requests until we do. // // returns a promise resolving to the received request - async function expectAndAwaitSync(response) { - response = response || {}; + async function expectAndAwaitSync(opts) { let syncRequest = null; + const isGuest = opts && opts.isGuest; + if (!isGuest) { + httpBackend.when('GET', '/_matrix/client/versions') + .respond(200, { + "versions": ["r0.3.0"], + "unstable_features": { + "m.lazy_load_members": true + } + }); + // the call to create the LL filter + httpBackend.when('POST', '/filter').respond(200, { filter_id: 'llfid' }); + } httpBackend.when('GET', '/sync') .check((r) => {syncRequest = r;}) - .respond(200, response); + .respond(200, {}); for (let attempts = 10; attempts > 0; attempts--) { console.log(Date.now() + " waiting for /sync"); @@ -190,7 +204,7 @@ describe('loading:', function() { } describe("Clean load with no stored credentials:", function() { - it('gives a login panel by default', function(done) { + it('gives a welcome page by default', function(done) { loadApp(); Promise.delay(1).then(() => { @@ -205,9 +219,9 @@ describe('loading:', function() { return httpBackend.flush(); }).then(() => { // Wait for another trip around the event loop for the UI to update - return awaitLoginComponent(matrixChat); + return awaitWelcomeComponent(matrixChat); }).then(() => { - expect(windowLocation.hash).toEqual("#/login"); + expect(windowLocation.hash).toEqual("#/welcome"); }).done(done, done); }); @@ -229,6 +243,8 @@ describe('loading:', function() { }).then(() => { // Wait for another trip around the event loop for the UI to update return Promise.delay(10); + }).then(() => { + return moveFromWelcomeToLogin(matrixChat); }).then(() => { return completeLogin(matrixChat); }).then(() => { @@ -270,7 +286,7 @@ describe('loading:', function() { }).then(() => { // once the sync completes, we should have a room view ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.HomePage')); + matrixChat, sdk.getComponent('structures.EmbeddedPage')); expect(windowLocation.hash).toEqual("#/home"); }); }); @@ -318,7 +334,7 @@ describe('loading:', function() { // once the sync completes, we should have a home page httpBackend.verifyNoOutstandingExpectation(); ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.HomePage')); + matrixChat, sdk.getComponent('structures.EmbeddedPage')); expect(windowLocation.hash).toEqual("#/home"); }).done(done, done); }); @@ -376,7 +392,7 @@ describe('loading:', function() { // we should see a home page, even though we previously had // a stored mx_last_room_id ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.HomePage')); + matrixChat, sdk.getComponent('structures.EmbeddedPage')); expect(windowLocation.hash).toEqual("#/home"); }); }); @@ -384,7 +400,7 @@ describe('loading:', function() { }); describe('Guest auto-registration:', function() { - it('shows a home page by default', function(done) { + it('shows a welcome page by default', function(done) { loadApp(); Promise.delay(1).then(() => { @@ -404,13 +420,13 @@ describe('loading:', function() { return awaitSyncingSpinner(matrixChat); }).then(() => { // we got a sync spinner - let the sync complete - return expectAndAwaitSync(); + return expectAndAwaitSync({isGuest: true}); }).then(() => { - // once the sync completes, we should have a home page + // once the sync completes, we should have a welcome page httpBackend.verifyNoOutstandingExpectation(); ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.HomePage')); - expect(windowLocation.hash).toEqual("#/home"); + matrixChat, sdk.getComponent('auth.Welcome')); + expect(windowLocation.hash).toEqual("#/welcome"); }).done(done, done); }); @@ -434,15 +450,15 @@ describe('loading:', function() { }).then(() => { return awaitSyncingSpinner(matrixChat); }).then(() => { - return expectAndAwaitSync(); + return expectAndAwaitSync({isGuest: true}); }).then((req) => { expect(req.path).toStartWith(DEFAULT_HS_URL); - // once the sync completes, we should have a home page + // once the sync completes, we should have a welcome page httpBackend.verifyNoOutstandingExpectation(); ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.HomePage')); - expect(windowLocation.hash).toEqual("#/home"); + matrixChat, sdk.getComponent('auth.Welcome')); + expect(windowLocation.hash).toEqual("#/welcome"); expect(MatrixClientPeg.get().baseUrl).toEqual(DEFAULT_HS_URL); expect(MatrixClientPeg.get().idBaseUrl).toEqual(DEFAULT_IS_URL); }).done(done, done); @@ -468,7 +484,7 @@ describe('loading:', function() { }).then(() => { return awaitSyncingSpinner(matrixChat); }).then(() => { - return expectAndAwaitSync(); + return expectAndAwaitSync({isGuest: true}); }).then(() => { // once the sync completes, we should have a room view return awaitRoomView(matrixChat); @@ -498,7 +514,7 @@ describe('loading:', function() { }).then(() => { // once the sync completes, we should have a home page ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.HomePage')); + matrixChat, sdk.getComponent('structures.EmbeddedPage')); // we simulate a click on the 'login' button by firing off // the relevant dispatch. @@ -545,7 +561,7 @@ describe('loading:', function() { return Promise.delay(1).then(() => { // we should be straight back into the home page ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.HomePage')); + matrixChat, sdk.getComponent('structures.EmbeddedPage')); }); }); */ @@ -664,8 +680,6 @@ function awaitSyncingSpinner(matrixChat, retryLimit, retryCount) { console.log(Date.now() + " Awaiting sync spinner: load complete."); - // state looks good, check the rendered output - assertAtSyncingSpinner(matrixChat); return Promise.resolve(); } @@ -712,3 +726,16 @@ function awaitLoginComponent(matrixChat, attempts) { matrixChat, sdk.getComponent('structures.auth.Login'), attempts, ); } + +function awaitWelcomeComponent(matrixChat, attempts) { + return MatrixReactTestUtils.waitForRenderedComponentWithType( + matrixChat, sdk.getComponent('auth.Welcome'), attempts, + ); +} + +function moveFromWelcomeToLogin(matrixChat) { + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('auth.Welcome')); + dis.dispatch({ action: 'start_login' }); + return awaitLoginComponent(matrixChat); +} diff --git a/webpack.config.js b/webpack.config.js index d0711eaf40..70ef0574a7 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -6,6 +6,12 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); let og_image_url = process.env.RIOT_OG_IMAGE_URL; if (!og_image_url) og_image_url = 'https://riot.im/app/themes/riot/img/logos/riot-im-logo-black-text.png'; +// relative to languageHandler.js in matrix-react-sdk +let RIOT_LANGUAGES_FILE = process.env.RIOT_LANGUAGES_FILE; +if (!RIOT_LANGUAGES_FILE) { + RIOT_LANGUAGES_FILE = "../../riot-web/webapp/i18n/languages.json"; +} + module.exports = { entry: { // Load babel-polyfill first to avoid issues where some imports (namely react) @@ -16,10 +22,8 @@ module.exports = { "mobileguide": "./src/vector/mobile_guide/index.js", // CSS themes - //"theme-light": "./node_modules/matrix-react-sdk/res/themes/light/css/light.scss", - //"theme-dark": "./node_modules/matrix-react-sdk/res/themes/dark/css/dark.scss", - "theme-dharma": "./node_modules/matrix-react-sdk/res/themes/dharma/css/dharma.scss", - //"theme-status": "./res/themes/status/css/status.scss", + "theme-light": "./node_modules/matrix-react-sdk/res/themes/light/css/light.scss", + "theme-dark": "./node_modules/matrix-react-sdk/res/themes/dark/css/dark.scss", }, module: { rules: [ @@ -63,7 +67,17 @@ module.exports = { }), }, { - test: /\.(gif|png|svg|ttf)$/, + // cache-bust languages.json file placed in + // riot-web/webapp/i18n during build by copy-res.js + test: /\.*languages.json$/, + type: "javascript/auto", + loader: 'file-loader', + options: { + name: 'i18n/[name].[hash:7].[ext]', + }, + }, + { + test: /\.(gif|png|svg|ttf|xml|ico)$/, // Use a content-based hash in the name so that we can set a long cache // lifetime for assets while still delivering changes quickly. oneOf: [ @@ -150,8 +164,8 @@ module.exports = { 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), }, + 'LANGUAGES_FILE': JSON.stringify(RIOT_LANGUAGES_FILE), }), - new ExtractTextPlugin("bundles/[hash]/[name].css", { allChunks: true, }),