diff --git a/.dockerignore b/.dockerignore index 45ead65e15..ced02564a8 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,7 +3,6 @@ test/ webapp/ lib/ node_modules/ -electron_app/ karma-reports/ .idea/ .tmp/ diff --git a/.eslintrc.js b/.eslintrc.js index c181384fd5..b59ea416ad 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,3 +1,30 @@ module.exports = { - extends: ["./node_modules/matrix-react-sdk/.eslintrc.js"], -} + plugins: ["matrix-org"], + extends: [ + "plugin:matrix-org/babel", + "plugin:matrix-org/react", + ], + env: { + browser: true, + node: true, + }, + rules: { + // Things we do that break the ideal style + "quotes": "off", + }, + overrides: [{ + files: ["src/**/*.{ts,tsx}"], + extends: [ + "plugin:matrix-org/typescript", + "plugin:matrix-org/react", + ], + rules: { + // Things we do that break the ideal style + "prefer-promise-reject-errors": "off", + "quotes": "off", + + // We disable this while we're transitioning + "@typescript-eslint/no-explicit-any": "off", + }, + }], +}; diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index a2042975e1..a8cd508d3a 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,3 +1,5 @@ + + -### Description +#### Description Describe here the problem that you are experiencing, or the feature you are requesting. -### Steps to reproduce +#### Steps to reproduce - For bugs, list the steps - that reproduce the bug @@ -28,7 +30,7 @@ file a bug here too! --> -### Version information +#### Version information @@ -36,9 +38,9 @@ file a bug here too! --> For the web app: -- **Browser**: Chrome, Safari, Firefox? which version? +- **Browser**: Chrome, Firefox, Safari, Edge? which version? - **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? -- **URL**: riot.im/develop / riot.im/app / somewhere else? If a private server, what version of riot-web? +- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web? For the desktop app: diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 5f472303dd..d05466c6c0 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -2,11 +2,13 @@ name: Bug report about: Create a report to help us improve title: '' -labels: bug +labels: T-Defect assignees: '' --- + + -### Description +#### Description Describe here the problem that you are experiencing, or the feature you are requesting. -### Steps to reproduce +#### Steps to reproduce - For bugs, list the steps - that reproduce the bug @@ -38,7 +40,7 @@ Logs being sent: yes/no -### Version information +#### Version information @@ -46,9 +48,9 @@ Logs being sent: yes/no For the web app: -- **Browser**: Chrome, Safari, Firefox? which version? +- **Browser**: Chrome, Firefox, Safari, Edge? which version? - **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? -- **URL**: riot.im/develop / riot.im/app / somewhere else? If a private server, what version of riot-web? +- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web? For the desktop app: diff --git a/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md b/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md index b27af8faeb..ffa31c6cf1 100644 --- a/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md +++ b/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md @@ -2,19 +2,19 @@ name: Suggestion or Feature request about: Suggest an idea for this project title: '' -labels: suggestion +labels: T-Enhancement assignees: '' --- -**Is your suggestion related to a problem? Please describe.** +#### Is your suggestion related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -**Describe the solution you'd like** +#### Describe the solution you'd like. A clear and concise description of what you want to happen. -**Describe alternatives you've considered** +#### Describe alternatives you've considered. A clear and concise description of any alternative solutions or features you've considered. -**Additional context** +#### Additional context Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md b/.github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md deleted file mode 100644 index b3e68ccec9..0000000000 --- a/.github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -name: User Interface or Usability Bug report -about: Please include screenshots in UI/UX bug reports -title: '' -labels: bug, ui/ux -assignees: '' - ---- - - - - - - - -### Description - -Describe here the problem that you are experiencing, or the feature you are requesting. - -### 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. - - -Logs being sent: yes/no - - - -### Version information - - - -- **Platform**: web (in-browser) or desktop? - -For the web app: - -- **Browser**: Chrome, Safari, Firefox? which version? -- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? -- **URL**: riot.im/develop / riot.im/app / somewhere else? If a private server, what version of riot-web? - -For the desktop app: - -- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? -- **Version**: 1.x.y diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..f1d5476c5d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,11 @@ + + + + + diff --git a/.gitignore b/.gitignore index 4dd3a26213..bc6255165b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,9 +4,6 @@ /key.pem /lib /node_modules -/electron_app/node_modules -/electron_app/dist -/electron_app/pub /packages/ /webapp /.npmrc @@ -22,3 +19,5 @@ electron/pub /src/component-index.js /.tmp /webpack-stats.json +.vscode +.vscode/ diff --git a/.modernizr.json b/.modernizr.json index 9b3990345d..fcfd7124f3 100644 --- a/.modernizr.json +++ b/.modernizr.json @@ -1,9 +1,6 @@ { "minify": true, - "classPrefix": "modernizr_", - "options": [ - "setClasses" - ], + "enableClasses": false, "feature-detects": [ "test/css/animations", "test/css/displaytable", @@ -29,6 +26,7 @@ "test/url/urlsearchparams", "test/cors", + "test/crypto", "test/iframe/sandbox", "test/json", "test/network/fetch", diff --git a/.stylelintrc.js b/.stylelintrc.js index 7296210285..1e03f2fbf6 100644 --- a/.stylelintrc.js +++ b/.stylelintrc.js @@ -19,7 +19,7 @@ module.exports = { "at-rule-no-unknown": null, "no-descending-specificity": null, "scss/at-rule-no-unknown": [true, { - // https://github.com/vector-im/riot-web/issues/10544 + // https://github.com/vector-im/element-web/issues/10544 "ignoreAtRules": ["define-mixin"], }], } diff --git a/AUTHORS.rst b/AUTHORS.rst index a92ca066cc..d027b59c99 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -16,3 +16,6 @@ include: * Alexandr Korsak (https://github.com/oivoodoo) Improved multiple file uploading + +* Thom Cleary (https://github.com/thomcatdotrocks) + Small update for tarball deployment diff --git a/CHANGELOG.md b/CHANGELOG.md index a5bc6cda88..91f28127e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,1208 @@ +Changes in [1.7.32](https://github.com/vector-im/element-web/releases/tag/v1.7.32) (2021-07-05) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.32-rc.1...v1.7.32) + + * No changes from rc.1 + +Changes in [1.7.32-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.32-rc.1) (2021-06-29) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.31...v1.7.32-rc.1) + + * Update to react-sdk v3.25.0-rc.1 and js-sdk v12.0.1-rc.1 + * Translations update from Weblate + [\#17832](https://github.com/vector-im/element-web/pull/17832) + * Fix canvas-filter-polyfill mock path + [\#17785](https://github.com/vector-im/element-web/pull/17785) + * Mock context-filter-polyfill for app-tests + [\#17774](https://github.com/vector-im/element-web/pull/17774) + * Add libera.chat to default room directory + [\#17772](https://github.com/vector-im/element-web/pull/17772) + * Improve typing of Event Index Manager / Seshat + [\#17704](https://github.com/vector-im/element-web/pull/17704) + * Bump dns-packet from 1.3.1 to 1.3.4 + [\#17478](https://github.com/vector-im/element-web/pull/17478) + * Update matrix-widget-api to fix build issues + [\#17747](https://github.com/vector-im/element-web/pull/17747) + * Fix whitespace in Dockerfile + [\#17742](https://github.com/vector-im/element-web/pull/17742) + * Upgrade @types/react and @types/react-dom + [\#17723](https://github.com/vector-im/element-web/pull/17723) + * Spaces keyboard shortcuts first cut + [\#17457](https://github.com/vector-im/element-web/pull/17457) + * Labs: feature_report_to_moderators + [\#17694](https://github.com/vector-im/element-web/pull/17694) + +Changes in [1.7.31](https://github.com/vector-im/element-web/releases/tag/v1.7.31) (2021-06-21) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.31-rc.1...v1.7.31) + + * Upgrade to React SDK 3.24.0 and JS SDK 12.0.0 + +Changes in [1.7.31-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.31-rc.1) (2021-06-15) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.30...v1.7.31-rc.1) + + * Upgrade to React SDK 3.24.0-rc.1 and JS SDK 12.0.0-rc.1 + * Translations update from Weblate + [\#17655](https://github.com/vector-im/element-web/pull/17655) + * Upgrade matrix-react-test-utils for React 17 peer deps + [\#17653](https://github.com/vector-im/element-web/pull/17653) + * Fix lint errors in Webpack config + [\#17626](https://github.com/vector-im/element-web/pull/17626) + * Preload only `woff2` fonts + [\#17614](https://github.com/vector-im/element-web/pull/17614) + * ⚛️ Upgrade to React@17 + [\#17601](https://github.com/vector-im/element-web/pull/17601) + +Changes in [1.7.30](https://github.com/vector-im/element-web/releases/tag/v1.7.30) (2021-06-07) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.30-rc.1...v1.7.30) + + * Upgrade to React SDK 3.23.0 and JS SDK 11.2.0 + +Changes in [1.7.30-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.30-rc.1) (2021-06-01) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.29...v1.7.30-rc.1) + + * Upgrade to React SDK 3.23.0-rc.1 and JS SDK 11.2.0-rc.1 + * Translations update from Weblate + [\#17526](https://github.com/vector-im/element-web/pull/17526) + * Add Modernizr test for Promise.allSettled given js-sdk and react-sdk depend + on it + [\#17464](https://github.com/vector-im/element-web/pull/17464) + * Bump libolm dependency, and update package name. + [\#17433](https://github.com/vector-im/element-web/pull/17433) + * Remove logo spinner + [\#17423](https://github.com/vector-im/element-web/pull/17423) + +Changes in [1.7.29](https://github.com/vector-im/element-web/releases/tag/v1.7.29) (2021-05-24) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.29-rc.1...v1.7.29) + +## Security notice + +Element Web 1.7.29 fixes (by upgrading to olm 3.2.3) an issue in code used for +decrypting server-side stored secrets. The issue could potentially allow a +malicious homeserver to cause a stack buffer overflow in the affected function +and to control that function's local variables. + +## All changes + + * Upgrade to React SDK 3.22.0 and JS SDK 11.1.0 + * [Release] Bump libolm dependency, and update package name + [\#17456](https://github.com/vector-im/element-web/pull/17456) + +Changes in [1.7.29-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.29-rc.1) (2021-05-19) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.28...v1.7.29-rc.1) + + * Upgrade to React SDK 3.22.0-rc.1 and JS SDK 11.1.0-rc.1 + * Translations update from Weblate + [\#17384](https://github.com/vector-im/element-web/pull/17384) + * Prevent minification of `.html` files + [\#17349](https://github.com/vector-im/element-web/pull/17349) + * Update matrix-widget-api/react-sdk dependency reference + [\#17346](https://github.com/vector-im/element-web/pull/17346) + * Add `yarn start:https` + [\#16989](https://github.com/vector-im/element-web/pull/16989) + * Translations update from Weblate + [\#17239](https://github.com/vector-im/element-web/pull/17239) + * Remove "in development" flag from voice messages labs documentation + [\#17204](https://github.com/vector-im/element-web/pull/17204) + * Add required webpack+jest config to load Safari support modules + [\#17193](https://github.com/vector-im/element-web/pull/17193) + +Changes in [1.7.28](https://github.com/vector-im/element-web/releases/tag/v1.7.28) (2021-05-17) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.28-rc.1...v1.7.28) + +## Security notice + +Element Web 1.7.28 fixes (by upgrading to matrix-react-sdk 3.21.0) a low +severity issue (GHSA-8796-gc9j-63rv) related to file upload. When uploading a +file, the local file preview can lead to execution of scripts embedded in the +uploaded file, but only after several user interactions to open the preview in +a separate tab. This only impacts the local user while in the process of +uploading. It cannot be exploited remotely or by other users. Thanks to +[Muhammad Zaid Ghifari](https://github.com/MR-ZHEEV) for responsibly disclosing +this via Matrix's Security Disclosure Policy. + +## All changes + + * Upgrade to React SDK 3.21.0 and JS SDK 11.0.0 + +Changes in [1.7.28-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.28-rc.1) (2021-05-11) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.27...v1.7.28-rc.1) + + * Upgrade to React SDK 3.21.0-rc.1 and JS SDK 11.0.0-rc.1 + * Switch back to release version of `sanitize-html` + [\#17231](https://github.com/vector-im/element-web/pull/17231) + * Bump url-parse from 1.4.7 to 1.5.1 + [\#17199](https://github.com/vector-im/element-web/pull/17199) + * Bump lodash from 4.17.20 to 4.17.21 + [\#17205](https://github.com/vector-im/element-web/pull/17205) + * Bump hosted-git-info from 2.8.8 to 2.8.9 + [\#17219](https://github.com/vector-im/element-web/pull/17219) + * Disable host checking on the webpack dev server + [\#17194](https://github.com/vector-im/element-web/pull/17194) + * Bump ua-parser-js from 0.7.23 to 0.7.24 + [\#17190](https://github.com/vector-im/element-web/pull/17190) + +Changes in [1.7.27](https://github.com/vector-im/element-web/releases/tag/v1.7.27) (2021-05-10) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.27-rc.1...v1.7.27) + + * Upgrade to React SDK 3.20.0 and JS SDK 10.1.0 + +Changes in [1.7.27-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.27-rc.1) (2021-05-04) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.26...v1.7.27-rc.1) + + * Upgrade to React SDK 3.20.0-rc.1 and JS SDK 10.1.0-rc.1 + * Translations update from Weblate + [\#17160](https://github.com/vector-im/element-web/pull/17160) + * Document option for obeying asserted identity + [\#17008](https://github.com/vector-im/element-web/pull/17008) + * Implement IPC call to Electron to set language + [\#17052](https://github.com/vector-im/element-web/pull/17052) + * Convert Vector skin react components to Typescript + [\#17061](https://github.com/vector-im/element-web/pull/17061) + * Add code quality review policy + [\#16980](https://github.com/vector-im/element-web/pull/16980) + * Register RecorderWorklet from react-sdk + [\#17013](https://github.com/vector-im/element-web/pull/17013) + * Preload Inter font to avoid FOIT on slow connections + [\#17039](https://github.com/vector-im/element-web/pull/17039) + * Disable `postcss-calc`'s noisy `warnWhenCannotResolve` option + [\#17041](https://github.com/vector-im/element-web/pull/17041) + +Changes in [1.7.26](https://github.com/vector-im/element-web/releases/tag/v1.7.26) (2021-04-26) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.26-rc.1...v1.7.26) + + * Upgrade to React SDK 3.19.0 and JS SDK 10.0.0 + +Changes in [1.7.26-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.26-rc.1) (2021-04-21) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.25...v1.7.26-rc.1) + + * Upgrade to React SDK 3.19.0-rc.1 and JS SDK 10.0.0-rc.1 + * Translations update from Weblate + [\#17031](https://github.com/vector-im/element-web/pull/17031) + * Bump ssri from 6.0.1 to 6.0.2 + [\#17010](https://github.com/vector-im/element-web/pull/17010) + * Fix `NODE_ENV` value for CI environments + [\#17003](https://github.com/vector-im/element-web/pull/17003) + * Use React production mode in CI builds + [\#16969](https://github.com/vector-im/element-web/pull/16969) + * Labs documentation for DND mode + [\#16962](https://github.com/vector-im/element-web/pull/16962) + * Rename blackboxing to new option ignore list + [\#16965](https://github.com/vector-im/element-web/pull/16965) + * Remove velocity-animate from lockfile + [\#16963](https://github.com/vector-im/element-web/pull/16963) + * Add mobile download link configuration + [\#16890](https://github.com/vector-im/element-web/pull/16890) + * Switch develop to not-staging Scalar by default + [\#16883](https://github.com/vector-im/element-web/pull/16883) + * Support a config option to skip login/welcome and go to SSO + [\#16880](https://github.com/vector-im/element-web/pull/16880) + +Changes in [1.7.25](https://github.com/vector-im/element-web/releases/tag/v1.7.25) (2021-04-12) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.25-rc.1...v1.7.25) + + * Upgrade to React SDK 3.18.0 and JS SDK 9.11.0 + +Changes in [1.7.25-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.25-rc.1) (2021-04-07) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.24...v1.7.25-rc.1) + + * Upgrade to React SDK 3.18.0-rc.1 and JS SDK 9.11.0-rc.1 + * Translations update from Weblate + [\#16882](https://github.com/vector-im/element-web/pull/16882) + * Revert "Docker image: serve pre-compressed assets using gzip_static" + [\#16838](https://github.com/vector-im/element-web/pull/16838) + * Move native node modules documentation to element-desktop + [\#16814](https://github.com/vector-im/element-web/pull/16814) + * Add user settings for warn before exit + [\#16781](https://github.com/vector-im/element-web/pull/16781) + * Change ISSUE_TEMPLATE bold lines to proper headers + [\#16768](https://github.com/vector-im/element-web/pull/16768) + * Add example for deployment into Kubernetes + [\#16447](https://github.com/vector-im/element-web/pull/16447) + * Create bare-bones `PULL_REQUEST_TEMPLATE.md` + [\#16770](https://github.com/vector-im/element-web/pull/16770) + * Add webpack config and labs flag docs for voice messages + [\#16705](https://github.com/vector-im/element-web/pull/16705) + +Changes in [1.7.24](https://github.com/vector-im/element-web/releases/tag/v1.7.24) (2021-03-29) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.24-rc.1...v1.7.24) + + * Upgrade to React SDK 3.17.0 and JS SDK 9.10.0 + +Changes in [1.7.24-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.24-rc.1) (2021-03-25) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.23...v1.7.24-rc.1) + + * Upgrade to React SDK 3.17.0-rc.2 and JS SDK 9.10.0-rc.1 + * Translations update from Weblate + [\#16766](https://github.com/vector-im/element-web/pull/16766) + * Docker image: serve pre-compressed assets using gzip_static + [\#16698](https://github.com/vector-im/element-web/pull/16698) + * Fix style lint issues + [\#16732](https://github.com/vector-im/element-web/pull/16732) + * Updated expected webpack output in setup guide + [\#16740](https://github.com/vector-im/element-web/pull/16740) + * Docs for `loginForWelcome` + [\#16468](https://github.com/vector-im/element-web/pull/16468) + * Disable rageshake persistence if no logs would be submitted + [\#16697](https://github.com/vector-im/element-web/pull/16697) + +Changes in [1.7.23](https://github.com/vector-im/element-web/releases/tag/v1.7.23) (2021-03-15) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.23-rc.1...v1.7.23) + + * Upgrade to React SDK 3.16.0 and JS SDK 9.9.0 + +Changes in [1.7.23-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.23-rc.1) (2021-03-10) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.22...v1.7.23-rc.1) + + * Upgrade to React SDK 3.16.0-rc.2 and JS SDK 9.9.0-rc.1 + * Translations update from Weblate + [\#16655](https://github.com/vector-im/element-web/pull/16655) + * Improve docs for customisations + [\#16652](https://github.com/vector-im/element-web/pull/16652) + * Update triage guide to match the new label scheme + [\#16612](https://github.com/vector-im/element-web/pull/16612) + * Remove a couple useless 'use strict' calls + [\#16650](https://github.com/vector-im/element-web/pull/16650) + * Remove old conferencing doc + [\#16648](https://github.com/vector-im/element-web/pull/16648) + * Bump elliptic from 6.5.3 to 6.5.4 + [\#16644](https://github.com/vector-im/element-web/pull/16644) + * Add option for audio live streaming + [\#16604](https://github.com/vector-im/element-web/pull/16604) + * Update velocity-animate dependency + [\#16605](https://github.com/vector-im/element-web/pull/16605) + * Add Edge to the supported tier + [\#16611](https://github.com/vector-im/element-web/pull/16611) + * Add multi language spell check + [\#15851](https://github.com/vector-im/element-web/pull/15851) + * Document feature_spaces + [\#16538](https://github.com/vector-im/element-web/pull/16538) + +Changes in [1.7.22](https://github.com/vector-im/element-web/releases/tag/v1.7.22) (2021-03-01) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.22-rc.1...v1.7.22) + +## Security notice + +Element Web 1.7.22 fixes (by upgrading to matrix-react-sdk 3.15.0) a moderate +severity issue (CVE-2021-21320) where the user content sandbox can be abused to +trick users into opening unexpected documents after several user interactions. +The content can be opened with a `blob` origin from the Matrix client, so it is +possible for a malicious document to access user messages and secrets. Thanks to +@keerok for responsibly disclosing this via Matrix's Security Disclosure Policy. + +## All changes + + * Upgrade to React SDK 3.15.0 and JS SDK 9.8.0 + +Changes in [1.7.22-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.22-rc.1) (2021-02-24) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.21...v1.7.22-rc.1) + + * Upgrade to React SDK 3.15.0-rc.1 and JS SDK 9.8.0-rc.1 + * Translations update from Weblate + [\#16529](https://github.com/vector-im/element-web/pull/16529) + * Add hostSignup config for element.io clients + [\#16515](https://github.com/vector-im/element-web/pull/16515) + * VoIP virtual rooms, mkII + [\#16442](https://github.com/vector-im/element-web/pull/16442) + * Jitsi widget: Read room name from query parameters + [\#16456](https://github.com/vector-im/element-web/pull/16456) + * fix / sso: make sure to delete only loginToken after redirect + [\#16415](https://github.com/vector-im/element-web/pull/16415) + * Disable Countly + [\#16433](https://github.com/vector-im/element-web/pull/16433) + +Changes in [1.7.21](https://github.com/vector-im/element-web/releases/tag/v1.7.21) (2021-02-16) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.21-rc.1...v1.7.21) + + * Upgrade to React SDK 3.14.0 and JS SDK 9.7.0 + +Changes in [1.7.21-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.21-rc.1) (2021-02-10) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.20...v1.7.21-rc.1) + + * Upgrade to React SDK 3.14.0-rc.1 and JS SDK 9.7.0-rc.1 + * Translations update from Weblate + [\#16427](https://github.com/vector-im/element-web/pull/16427) + * Add RegExp dotAll feature test + [\#16408](https://github.com/vector-im/element-web/pull/16408) + * Fix Electron type merging + [\#16405](https://github.com/vector-im/element-web/pull/16405) + * README: remove Jenkins reference + [\#16381](https://github.com/vector-im/element-web/pull/16381) + * Enable PostCSS Calc in webpack builds + [\#16307](https://github.com/vector-im/element-web/pull/16307) + * Add configuration security best practices to the README. + [\#16367](https://github.com/vector-im/element-web/pull/16367) + * Upgrade matrix-widget-api + [\#16347](https://github.com/vector-im/element-web/pull/16347) + +Changes in [1.7.20](https://github.com/vector-im/element-web/releases/tag/v1.7.20) (2021-02-04) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.19...v1.7.20) + + * Upgrade to React SDK 3.13.1 + +Changes in [1.7.19](https://github.com/vector-im/element-web/releases/tag/v1.7.19) (2021-02-03) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.19-rc.1...v1.7.19) + + * Upgrade to React SDK 3.13.0 and JS SDK 9.6.0 + * [Release] Upgrade matrix-widget-api + [\#16348](https://github.com/vector-im/element-web/pull/16348) + +Changes in [1.7.19-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.19-rc.1) (2021-01-29) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.18...v1.7.19-rc.1) + + * Upgrade to React SDK 3.13.0-rc.1 and JS SDK 9.6.0-rc.1 + * Translations update from Weblate + [\#16314](https://github.com/vector-im/element-web/pull/16314) + * Use history replaceState instead of redirect for SSO flow + [\#16292](https://github.com/vector-im/element-web/pull/16292) + * Document the mobile guide toast option + [\#16301](https://github.com/vector-im/element-web/pull/16301) + * Update widget-api to beta.12 + [\#16303](https://github.com/vector-im/element-web/pull/16303) + * Upgrade deps 2021-01 + [\#16294](https://github.com/vector-im/element-web/pull/16294) + * Move to newer base image for Docker builds + [\#16275](https://github.com/vector-im/element-web/pull/16275) + * Docs for the VoIP translate pattern option + [\#16236](https://github.com/vector-im/element-web/pull/16236) + * Fix Riot->Element in permalinkPrefix docs + [\#16227](https://github.com/vector-im/element-web/pull/16227) + * Supply server_name for optional federation-capable Jitsi auth + [\#16215](https://github.com/vector-im/element-web/pull/16215) + * Fix Widget API version confusion + [\#16212](https://github.com/vector-im/element-web/pull/16212) + * Add Hebrew language + [\#16210](https://github.com/vector-im/element-web/pull/16210) + * Update widget-api to beta 11 + [\#16177](https://github.com/vector-im/element-web/pull/16177) + * Fix develop Docker builds + [\#16192](https://github.com/vector-im/element-web/pull/16192) + * Skip the service worker for Electron + [\#16157](https://github.com/vector-im/element-web/pull/16157) + * Use isolated IPC API + [\#16137](https://github.com/vector-im/element-web/pull/16137) + +Changes in [1.7.18](https://github.com/vector-im/element-web/releases/tag/v1.7.18) (2021-01-26) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.17...v1.7.18) + + * Upgrade to React SDK 3.12.1 and JS SDK 9.5.1 + +Changes in [1.7.17](https://github.com/vector-im/element-web/releases/tag/v1.7.17) (2021-01-18) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.17-rc.1...v1.7.17) + + * Upgrade to React SDK 3.12.0 and JS SDK 9.5.0 + +Changes in [1.7.17-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.17-rc.1) (2021-01-13) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.16...v1.7.17-rc.1) + + * Upgrade to React SDK 3.12.0-rc.1 and JS SDK 9.5.0-rc.1 + * Translations update from Weblate + [\#16131](https://github.com/vector-im/element-web/pull/16131) + * webplatform: Fix notification closing + [\#16028](https://github.com/vector-im/element-web/pull/16028) + * Stop building code and types for Element layer + [\#15999](https://github.com/vector-im/element-web/pull/15999) + +Changes in [1.7.16](https://github.com/vector-im/element-web/releases/tag/v1.7.16) (2020-12-21) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.16-rc.1...v1.7.16) + + * Upgrade to React SDK 3.11.1 and JS SDK 9.4.1 + +Changes in [1.7.16-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.16-rc.1) (2020-12-16) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.15...v1.7.16-rc.1) + + * Upgrade to React SDK 3.11.0-rc.2 and JS SDK 9.4.0-rc.2 + * Translations update from Weblate + [\#15979](https://github.com/vector-im/element-web/pull/15979) + * Bump ini from 1.3.5 to 1.3.7 + [\#15949](https://github.com/vector-im/element-web/pull/15949) + * Document pull request previews + [\#15937](https://github.com/vector-im/element-web/pull/15937) + * Improve asset path for KaTeX fonts + [\#15939](https://github.com/vector-im/element-web/pull/15939) + * Fix an important semicolon + [\#15912](https://github.com/vector-im/element-web/pull/15912) + * Bump highlight.js from 10.1.2 to 10.4.1 + [\#15898](https://github.com/vector-im/element-web/pull/15898) + * Add gitter.im to room directory + [\#15894](https://github.com/vector-im/element-web/pull/15894) + * Extend Platform to support idpId for SSO flows + [\#15771](https://github.com/vector-im/element-web/pull/15771) + * Include KaTeX CSS as a dependency + [\#15843](https://github.com/vector-im/element-web/pull/15843) + +Changes in [1.7.15](https://github.com/vector-im/element-web/releases/tag/v1.7.15) (2020-12-07) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.15-rc.1...v1.7.15) + + * Upgrade to React SDK 3.10.0 and JS SDK 9.3.0 + +Changes in [1.7.15-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.15-rc.1) (2020-12-02) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.14...v1.7.15-rc.1) + + * Upgrade to React SDK 3.10.0-rc.1 and JS SDK 9.3.0-rc.1 + * Include KaTeX CSS as a dependency + [\#15843](https://github.com/vector-im/element-web/pull/15843) + * Translations update from Weblate + [\#15884](https://github.com/vector-im/element-web/pull/15884) + * added katex.min.css to webpack for math support (main PR in matrix-react- + sdk) + [\#15277](https://github.com/vector-im/element-web/pull/15277) + * Rebrand package name and other details + [\#15828](https://github.com/vector-im/element-web/pull/15828) + * Bump highlight.js from 9.18.1 to 10.1.2 + [\#15819](https://github.com/vector-im/element-web/pull/15819) + * Update branding of packaging artifacts + [\#15810](https://github.com/vector-im/element-web/pull/15810) + * Update the react-sdk reference in the lockfile + [\#15814](https://github.com/vector-im/element-web/pull/15814) + * Update widget API for good measure in Element Web + [\#15812](https://github.com/vector-im/element-web/pull/15812) + * Stop publishing Element to NPM + [\#15811](https://github.com/vector-im/element-web/pull/15811) + * Add inotify instance limit info to README + [\#15795](https://github.com/vector-im/element-web/pull/15795) + +Changes in [1.7.14](https://github.com/vector-im/element-web/releases/tag/v1.7.14) (2020-11-23) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.14-rc.1...v1.7.14) + + * Upgrade to React SDK 3.9.0 and JS SDK 9.2.0 + +Changes in [1.7.14-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.14-rc.1) (2020-11-18) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.13...v1.7.14-rc.1) + + * Upgrade to React SDK 3.9.0-rc.1 and JS SDK 9.2.0-rc.1 + * Translations update from Weblate + [\#15767](https://github.com/vector-im/element-web/pull/15767) + * Update the widget-api for element-web + [\#15717](https://github.com/vector-im/element-web/pull/15717) + +Changes in [1.7.13](https://github.com/vector-im/element-web/releases/tag/v1.7.13) (2020-11-09) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.13-rc.1...v1.7.13) + + * Upgrade to React SDK 3.8.0 and JS SDK 9.1.0 + +Changes in [1.7.13-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.13-rc.1) (2020-11-04) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.12...v1.7.13-rc.1) + + * Upgrade to React SDK 3.8.0-rc.1 and JS SDK 9.1.0-rc.1 + * Translations update from Weblate + [\#15644](https://github.com/vector-im/element-web/pull/15644) + * Add countly experiment to develop/nightly configs + [\#15614](https://github.com/vector-im/element-web/pull/15614) + * Add documentation for new UIFeature flag regarding room history settings + [\#15592](https://github.com/vector-im/element-web/pull/15592) + * Rename Docker repo in docs + [\#15590](https://github.com/vector-im/element-web/pull/15590) + * Fix Jitsi regressions with custom themes + [\#15575](https://github.com/vector-im/element-web/pull/15575) + +Changes in [1.7.12](https://github.com/vector-im/element-web/releases/tag/v1.7.12) (2020-10-28) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.11...v1.7.12) + + * Upgrade to React SDK 3.7.1 and JS SDK 9.0.1 + * [Release] Fix Jitsi regressions with custom themes + [\#15577](https://github.com/vector-im/element-web/pull/15577) + +Changes in [1.7.11](https://github.com/vector-im/element-web/releases/tag/v1.7.11) (2020-10-26) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.11-rc.1...v1.7.11) + + * Upgrade to React SDK 3.7.0 and JS SDK 9.0.0 + +Changes in [1.7.11-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.11-rc.1) (2020-10-21) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.10...v1.7.11-rc.1) + + * Upgrade to React SDK 3.7.0-rc.2 and JS SDK 9.0.0-rc.1 + * Update Weblate URL + [\#15516](https://github.com/vector-im/element-web/pull/15516) + * Translations update from Weblate + [\#15517](https://github.com/vector-im/element-web/pull/15517) + * Jitsi accept theme variable and restyle + [\#15499](https://github.com/vector-im/element-web/pull/15499) + * Skip editor confirmation of upgrades + [\#15506](https://github.com/vector-im/element-web/pull/15506) + * Adjust for new widget messaging APIs + [\#15495](https://github.com/vector-im/element-web/pull/15495) + * Use HTTPS_PROXY environment variable for downloading external_api.min… + [\#15479](https://github.com/vector-im/element-web/pull/15479) + * Document customisation points + [\#15475](https://github.com/vector-im/element-web/pull/15475) + * Don't fatally end the Jitsi widget when it's not being used as a widget + [\#15466](https://github.com/vector-im/element-web/pull/15466) + * electron-platform: Pass the user/devce id pair when initializing the event + index. + [\#15455](https://github.com/vector-im/element-web/pull/15455) + +Changes in [1.7.10](https://github.com/vector-im/element-web/releases/tag/v1.7.10) (2020-10-20) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.9...v1.7.10) + + * [Release] Adjust for new widget messaging APIs + [\#15497](https://github.com/vector-im/element-web/pull/15497) + * Upgrade to React SDK 3.6.1 + +Changes in [1.7.9](https://github.com/vector-im/element-web/releases/tag/v1.7.9) (2020-10-12) +============================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.9-rc.1...v1.7.9) + + * Upgrade to React SDK 3.6.0 and JS SDK 8.5.0 + +Changes in [1.7.9-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.9-rc.1) (2020-10-07) +======================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.8...v1.7.9-rc.1) + + * Upgrade to React SDK 3.6.0-rc.1 and JS SDK 8.5.0-rc.1 + * Update from Weblate + [\#15406](https://github.com/vector-im/element-web/pull/15406) + * Update Jest and JSDOM + [\#15402](https://github.com/vector-im/element-web/pull/15402) + * Add support for dehydration/fallback keys + [\#15398](https://github.com/vector-im/element-web/pull/15398) + * Remove riot-bot from sample config + [\#15376](https://github.com/vector-im/element-web/pull/15376) + * Switch to using the Widget API SDK for Jitsi widgets + [\#15102](https://github.com/vector-im/element-web/pull/15102) + * Remove workbox + [\#15352](https://github.com/vector-im/element-web/pull/15352) + * Disable workbox when running in webpack dev server, not in dev mode + [\#15345](https://github.com/vector-im/element-web/pull/15345) + * Update Riot -> Element in contribute.json + [\#15326](https://github.com/vector-im/element-web/pull/15326) + * Update Riot -> Element in redeploy.py + [\#15336](https://github.com/vector-im/element-web/pull/15336) + * Update Riot -> Element in docs/feature-flags.md + [\#15325](https://github.com/vector-im/element-web/pull/15325) + * Update Riot -> Element in element.io/README.md + [\#15327](https://github.com/vector-im/element-web/pull/15327) + * Update Riot -> Element in VectorAuthFooter + [\#15328](https://github.com/vector-im/element-web/pull/15328) + * Update Riot -> Element in VectorEmbeddedPage + [\#15329](https://github.com/vector-im/element-web/pull/15329) + * Update Riot -> Element in docs/review.md + [\#15330](https://github.com/vector-im/element-web/pull/15330) + * Update Riot -> Element in welcome.html + [\#15332](https://github.com/vector-im/element-web/pull/15332) + * Update Riot -> Element in issues-burndown.pl + [\#15333](https://github.com/vector-im/element-web/pull/15333) + * Update Riot -> Element in redeploy.py + [\#15334](https://github.com/vector-im/element-web/pull/15334) + * Update Riot -> Element in index.ts + [\#15335](https://github.com/vector-im/element-web/pull/15335) + * Update Riot -> Element Web in issue templates + [\#15324](https://github.com/vector-im/element-web/pull/15324) + * Give the Jitsi widget an icon to help with discovery + [\#15316](https://github.com/vector-im/element-web/pull/15316) + * Jitsi widget wrapper updates for hangup button + [\#15219](https://github.com/vector-im/element-web/pull/15219) + * Tidy up Service Worker, only run Workbox in production + [\#15271](https://github.com/vector-im/element-web/pull/15271) + * Remove conference handler + [\#15274](https://github.com/vector-im/element-web/pull/15274) + * Rebrand the webpack pipeline for Element + [\#15266](https://github.com/vector-im/element-web/pull/15266) + * Replace dummy sw.js with pre-caching and runtime-caching workbox SW + [\#15196](https://github.com/vector-im/element-web/pull/15196) + +Changes in [1.7.8](https://github.com/vector-im/element-web/releases/tag/v1.7.8) (2020-09-28) +============================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.8-rc.1...v1.7.8) + + * Upgrade to React SDK 3.5.0 and JS SDK 8.4.1 + +Changes in [1.7.8-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.8-rc.1) (2020-09-23) +======================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.7...v1.7.8-rc.1) + + * Upgrade to React SDK 3.5.0-rc.1 and JS SDK 8.4.0-rc.1 + * Update from Weblate + [\#15262](https://github.com/vector-im/element-web/pull/15262) + * Upgrade sanitize-html + [\#15260](https://github.com/vector-im/element-web/pull/15260) + * Document config for preferring Secure Backup setup methods + [\#15251](https://github.com/vector-im/element-web/pull/15251) + * Add end-user documentation for UI features + [\#15190](https://github.com/vector-im/element-web/pull/15190) + * Update git checkout instructions + [\#15218](https://github.com/vector-im/element-web/pull/15218) + * If no bug_report_endpoint_url, hide rageshaking from the App + [\#15201](https://github.com/vector-im/element-web/pull/15201) + * Bump node-fetch from 2.6.0 to 2.6.1 + [\#15153](https://github.com/vector-im/element-web/pull/15153) + * Remove references to Travis CI + [\#15137](https://github.com/vector-im/element-web/pull/15137) + * Fix onNewScreen to use replace when going from roomId->roomAlias + [\#15127](https://github.com/vector-im/element-web/pull/15127) + * Enable Estonian in language menu + [\#15136](https://github.com/vector-im/element-web/pull/15136) + +Changes in [1.7.7](https://github.com/vector-im/element-web/releases/tag/v1.7.7) (2020-09-14) +============================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.6...v1.7.7) + + * Upgrade to React SDK 3.4.1 + +Changes in [1.7.6](https://github.com/vector-im/element-web/releases/tag/v1.7.6) (2020-09-14) +============================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.6-rc.1...v1.7.6) + + * Upgrade to React SDK 3.4.0 and JS SDK 8.3.0 + +Changes in [1.7.6-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.6-rc.1) (2020-09-09) +======================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.5...v1.7.6-rc.1) + + * Upgrade to React SDK 3.4.0-rc.1 and JS SDK 8.3.0-rc.1 + * Update from Weblate + [\#15125](https://github.com/vector-im/element-web/pull/15125) + * Support usage of Jitsi widgets with "openidtoken-jwt" auth + [\#15114](https://github.com/vector-im/element-web/pull/15114) + * Fix eslint ts override tsx matching and delint + [\#15064](https://github.com/vector-im/element-web/pull/15064) + * Add testing to review guidelines + [\#15050](https://github.com/vector-im/element-web/pull/15050) + +Changes in [1.7.5](https://github.com/vector-im/element-web/releases/tag/v1.7.5) (2020-09-01) +============================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.5-rc.1...v1.7.5) + +## Security notice + +Element Web 1.7.5 fixes an issue where encrypted state events could break incoming call handling. +Thanks to @awesome-michael from Awesome Technologies for responsibly disclosing this via Matrix's +Security Disclosure Policy. + +## All changes + + * Upgrade to React SDK 3.3.0 and JS SDK 8.2.0 + +Changes in [1.7.5-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.5-rc.1) (2020-08-26) +======================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.4...v1.7.5-rc.1) + + * Upgrade to React SDK 3.3.0-rc.1 and JS SDK 8.2.0-rc.1 + * Update from Weblate + [\#15045](https://github.com/vector-im/element-web/pull/15045) + * Document .well-known E2EE secure backup setting + [\#15003](https://github.com/vector-im/element-web/pull/15003) + * Add docs for communities v2 prototyping feature flag + [\#15013](https://github.com/vector-im/element-web/pull/15013) + * Update links in README.md to point to Element + [\#14973](https://github.com/vector-im/element-web/pull/14973) + * Make kabyle translation available + [\#15027](https://github.com/vector-im/element-web/pull/15027) + * Change Riot to Element in readme + [\#15016](https://github.com/vector-im/element-web/pull/15016) + * Update links to element in the readme + [\#15014](https://github.com/vector-im/element-web/pull/15014) + * Link to Element in F-Droid as well + [\#15002](https://github.com/vector-im/element-web/pull/15002) + * Settings v3: Update documentation and configs for new feature flag behaviour + [\#14986](https://github.com/vector-im/element-web/pull/14986) + * Update jitsi.md with Element Android details + [\#14952](https://github.com/vector-im/element-web/pull/14952) + * TypeScript: enable es2019 lib for newer definitions + [\#14983](https://github.com/vector-im/element-web/pull/14983) + * Add reaction preview labs flags to develop + [\#14979](https://github.com/vector-im/element-web/pull/14979) + * Document new labs tweaks + [\#14958](https://github.com/vector-im/element-web/pull/14958) + +Changes in [1.7.4](https://github.com/vector-im/element-web/releases/tag/v1.7.4) (2020-08-17) +============================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.4-rc.1...v1.7.4) + + * Upgrade to React SDK 3.2.0 and JS SDK 8.1.0 + +Changes in [1.7.4-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.4-rc.1) (2020-08-13) +======================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.3...v1.7.4-rc.1) + + * Upgrade to React SDK 3.2.0-rc.1 and JS SDK 8.1.0-rc.1 + * Update policy links to element.io + [\#14905](https://github.com/vector-im/element-web/pull/14905) + * Update from Weblate + [\#14949](https://github.com/vector-im/element-web/pull/14949) + * Try to close notification on all platforms which support it, not just + electron + [\#14939](https://github.com/vector-im/element-web/pull/14939) + * Update bug report submission URL + [\#14903](https://github.com/vector-im/element-web/pull/14903) + * Fix arm docker build + [\#14522](https://github.com/vector-im/element-web/pull/14522) + +Changes in [1.7.3](https://github.com/vector-im/element-web/releases/tag/v1.7.3) (2020-08-05) +============================================================================================= + +## Security notice + +Element Web 1.7.3 (as well as the earlier release 1.7.2) fixes an issue where +replying to a specially formatted message would make it seem like the replier +said something they did not. Thanks to Sorunome for responsibly disclosing this +via Matrix's Security Disclosure Policy. + +Element Web 1.7.3 (as well as the earlier release 1.7.2) fixes an issue where an +unexpected language ID in a code block could cause Element to crash. Thanks to +SakiiR for responsibly disclosing this via Matrix's Security Disclosure Policy. + +## All changes + +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.3-rc.1...v1.7.3) + + * Upgrade to React SDK 3.1.0 and JS SDK 8.0.1 + +Changes in [1.7.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.7.3-rc.1) (2020-07-31) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.7.2...v1.7.3-rc.1) + + * Upgrade to React SDK 3.1.0-rc.1 and JS SDK 8.0.1-rc.1 + * Make Lojban translation available + [\#14703](https://github.com/vector-im/riot-web/pull/14703) + * Update from Weblate + [\#14841](https://github.com/vector-im/riot-web/pull/14841) + * Remove redundant lint dependencies + [\#14810](https://github.com/vector-im/riot-web/pull/14810) + * Bump elliptic from 6.5.2 to 6.5.3 + [\#14826](https://github.com/vector-im/riot-web/pull/14826) + * Update mobile config intercept URL + [\#14796](https://github.com/vector-im/riot-web/pull/14796) + * Fix typo in https:// + [\#14791](https://github.com/vector-im/riot-web/pull/14791) + +Changes in [1.7.2](https://github.com/vector-im/riot-web/releases/tag/v1.7.2) (2020-07-27) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.7.1...v1.7.2) + + * Upgrade to React SDK 3.0.0 and JS SDK 8.0.0 + * Update from Weblate + [\#14778](https://github.com/vector-im/riot-web/pull/14778) + * Capitalize letters + [\#14566](https://github.com/vector-im/riot-web/pull/14566) + * Configure eslint package and fix lint issues + [\#14673](https://github.com/vector-im/riot-web/pull/14673) + * Riot → Element + [\#14581](https://github.com/vector-im/riot-web/pull/14581) + * Remove labs info for the new room list + [\#14603](https://github.com/vector-im/riot-web/pull/14603) + * Convince Webpack to use development on CI + [\#14593](https://github.com/vector-im/riot-web/pull/14593) + * Move dev dep to the right place + [\#14572](https://github.com/vector-im/riot-web/pull/14572) + * Bump lodash from 4.17.15 to 4.17.19 + [\#14552](https://github.com/vector-im/riot-web/pull/14552) + * Update all mobile links to match marketing site + [\#14541](https://github.com/vector-im/riot-web/pull/14541) + +Changes in [1.7.1](https://github.com/vector-im/riot-web/releases/tag/v1.7.1) (2020-07-16) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.7.0...v1.7.1) + + * Upgrade to React SDK 2.10.1 + * Fix SSO session ID paramater + [\#14544](https://github.com/vector-im/riot-web/pull/14544) + * Run pngcrush on vector-icons + [\#14488](https://github.com/vector-im/riot-web/pull/14488) + * Fix hosting signup link + [\#14502](https://github.com/vector-im/riot-web/pull/14502) + * Use the right protocol for SSO URLs + [\#14513](https://github.com/vector-im/riot-web/pull/14513) + * Fix mstile-310x150 by renaming it + [\#14485](https://github.com/vector-im/riot-web/pull/14485) + * Update blog and twitter links to point to Element + [\#14478](https://github.com/vector-im/riot-web/pull/14478) + +Changes in [1.7.0](https://github.com/vector-im/riot-web/releases/tag/v1.7.0) (2020-07-15) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.8...v1.7.0) + + * App name changed from Riot to Element + * Upgrade to React SDK 2.10.0 + * Remove redundant enum + [\#14472](https://github.com/vector-im/riot-web/pull/14472) + * Remove font scaling from labs + [\#14355](https://github.com/vector-im/riot-web/pull/14355) + * Update documentation and remove labs flag for new room list + [\#14375](https://github.com/vector-im/riot-web/pull/14375) + * Update from Weblate + [\#14434](https://github.com/vector-im/riot-web/pull/14434) + * Release the irc layout from labs + [\#14350](https://github.com/vector-im/riot-web/pull/14350) + * Fix welcomeBackgroundUrl array causing background to change during use + [\#14368](https://github.com/vector-im/riot-web/pull/14368) + * Be more explicit about type when calling platform startUpdater + [\#14299](https://github.com/vector-im/riot-web/pull/14299) + +Changes in [1.6.8](https://github.com/vector-im/riot-web/releases/tag/v1.6.8) (2020-07-03) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.8-rc.1...v1.6.8) + + * Upgrade to JS SDK 7.1.0 and React SDK 2.9.0 + +Changes in [1.6.8-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.8-rc.1) (2020-07-01) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.7...v1.6.8-rc.1) + + * Upgrade to JS SDK 7.1.0-rc.1 and React SDK 2.9.0-rc.1 + * Update from Weblate + [\#14282](https://github.com/vector-im/riot-web/pull/14282) + * Show a download completed toast in electron + [\#14248](https://github.com/vector-im/riot-web/pull/14248) + * Add the new spinner feature labs flag + [\#14213](https://github.com/vector-im/riot-web/pull/14213) + * Fix loading-test for SSO plaf changes + [\#14212](https://github.com/vector-im/riot-web/pull/14212) + * Fix spelling on startup error page + [\#14199](https://github.com/vector-im/riot-web/pull/14199) + * Document fonts in custom theme + [\#14175](https://github.com/vector-im/riot-web/pull/14175) + * Update from Weblate + [\#14129](https://github.com/vector-im/riot-web/pull/14129) + * ElectronPlatform: Implement the isRoomIndexed method. + [\#13957](https://github.com/vector-im/riot-web/pull/13957) + * ElectronPlatform: Add support to set and get the index user version. + [\#14080](https://github.com/vector-im/riot-web/pull/14080) + * Mark the new room list as ready for general testing + [\#14102](https://github.com/vector-im/riot-web/pull/14102) + +Changes in [1.6.7](https://github.com/vector-im/riot-web/releases/tag/v1.6.7) (2020-06-29) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.6...v1.6.7) + + * Upgrade to React SDK 2.8.1 + +Changes in [1.6.6](https://github.com/vector-im/riot-web/releases/tag/v1.6.6) (2020-06-23) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.6-rc.1...v1.6.6) + + * Upgrade to JS SDK 7.0.0 and React SDK 2.8.0 + +Changes in [1.6.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.6-rc.1) (2020-06-17) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.5...v1.6.6-rc.1) + + * Upgrade to JS SDK 7.0.0-rc.1 and React SDK 2.8.0-rc.1 + * Update from Weblate + [\#14067](https://github.com/vector-im/riot-web/pull/14067) + * Update from Weblate + [\#14032](https://github.com/vector-im/riot-web/pull/14032) + * Attempt to fix decoder ring for relative hosted riots + [\#13987](https://github.com/vector-im/riot-web/pull/13987) + * Upgrade deps + [\#13952](https://github.com/vector-im/riot-web/pull/13952) + * Fix riot-desktop manual update check getting stuck on Downloading... + [\#13946](https://github.com/vector-im/riot-web/pull/13946) + * Bump websocket-extensions from 0.1.3 to 0.1.4 + [\#13943](https://github.com/vector-im/riot-web/pull/13943) + * Add e2ee-default:false docs + [\#13914](https://github.com/vector-im/riot-web/pull/13914) + * make IPC calls to get pickle key + [\#13846](https://github.com/vector-im/riot-web/pull/13846) + * fix loading test for new sso pattern + [\#13913](https://github.com/vector-im/riot-web/pull/13913) + * Fix login loop where the sso flow returns to `#/login` + [\#13889](https://github.com/vector-im/riot-web/pull/13889) + * Fix typo in docs + [\#13905](https://github.com/vector-im/riot-web/pull/13905) + * Remove cross-signing from labs + [\#13904](https://github.com/vector-im/riot-web/pull/13904) + * Add PWA Platform with PWA-specific badge controls + [\#13890](https://github.com/vector-im/riot-web/pull/13890) + * Modernizr check for subtle crypto as we require it all over the place + [\#13828](https://github.com/vector-im/riot-web/pull/13828) + +Changes in [1.6.5](https://github.com/vector-im/riot-web/releases/tag/v1.6.5) (2020-06-16) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.4...v1.6.5) + +* Upgrade to JS SDK 6.2.2 and React SDK 2.7.2 + +Changes in [1.6.4](https://github.com/vector-im/riot-web/releases/tag/v1.6.4) (2020-06-05) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.3...v1.6.4) + +* Upgrade to JS SDK 6.2.1 and React SDK 2.7.1 + +Changes in [1.6.3](https://github.com/vector-im/riot-web/releases/tag/v1.6.3) (2020-06-04) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.3-rc.1...v1.6.3) + +## Security notice + +Riot Web 1.6.3 fixes a vulnerability in single sign-on (SSO) deployments where Riot Web could be confused into sending authentication details to an attacker-controlled server. Thanks to Quentin Gliech for responsibly disclosing this via Matrix's Security Disclosure Policy. + +## All changes + + * Fix login loop where the sso flow returns to `#/login` to release + [\#13915](https://github.com/vector-im/riot-web/pull/13915) + +Changes in [1.6.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.3-rc.1) (2020-06-02) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.2...v1.6.3-rc.1) + + * Upgrade to JS SDK 6.2.0-rc.1 and React SDK 2.7.0-rc.2 + * Get rid of welcome.html's Chat with Riot Bot button + [\#13842](https://github.com/vector-im/riot-web/pull/13842) + * Update from Weblate + [\#13886](https://github.com/vector-im/riot-web/pull/13886) + * Allow deferring of Update Toast until the next morning + [\#13864](https://github.com/vector-im/riot-web/pull/13864) + * Give contextual feedback for manual update check instead of banner + [\#13862](https://github.com/vector-im/riot-web/pull/13862) + * Add app-load doc + [\#13834](https://github.com/vector-im/riot-web/pull/13834) + * Update Modular hosting link + [\#13777](https://github.com/vector-im/riot-web/pull/13777) + * Replace New Version Bar with a Toast + [\#13776](https://github.com/vector-im/riot-web/pull/13776) + * Remove webpack-build-notifier from lockfile + [\#13814](https://github.com/vector-im/riot-web/pull/13814) + * Add media queries and mobile viewport (#12142) + [\#13818](https://github.com/vector-im/riot-web/pull/13818) + * Fix @types/react conflict in matrix-react-sdk + [\#13809](https://github.com/vector-im/riot-web/pull/13809) + * Fix manual update checking, super in arrow funcs doesn't work + [\#13808](https://github.com/vector-im/riot-web/pull/13808) + * Update from Weblate + [\#13806](https://github.com/vector-im/riot-web/pull/13806) + * Convert platforms to Typescript + [\#13756](https://github.com/vector-im/riot-web/pull/13756) + * Fix EventEmitter typescript signature in node typings + [\#13764](https://github.com/vector-im/riot-web/pull/13764) + * Add docs and labs flag for new room list implementation + [\#13675](https://github.com/vector-im/riot-web/pull/13675) + * Add font scaling labs setting. + [\#13352](https://github.com/vector-im/riot-web/pull/13352) + * Add labs flag for alternate message layouts + [\#13350](https://github.com/vector-im/riot-web/pull/13350) + * Move dispatcher references in support of TypeScript conversion + [\#13666](https://github.com/vector-im/riot-web/pull/13666) + * Update from Weblate + [\#13704](https://github.com/vector-im/riot-web/pull/13704) + * Replace favico.js dependency with simplified variant grown from it + [\#13649](https://github.com/vector-im/riot-web/pull/13649) + * Remove Electron packaging scripts + [\#13688](https://github.com/vector-im/riot-web/pull/13688) + * Fix postcss order to allow mixin variables to work + [\#13674](https://github.com/vector-im/riot-web/pull/13674) + * Pass screenAfterLogin through SSO in the callback url + [\#13650](https://github.com/vector-im/riot-web/pull/13650) + +Changes in [1.6.2](https://github.com/vector-im/riot-web/releases/tag/v1.6.2) (2020-05-22) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.1...v1.6.2) + + * Upgrade to React SDK 2.6.1 + +Changes in [1.6.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.1) (2020-05-19) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.1-rc.1...v1.6.1) + + * Upgrade to React SDK 2.6.0 and JS SDK 6.1.0 + +Changes in [1.6.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.1-rc.1) (2020-05-14) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0...v1.6.1-rc.1) + + * Upgrade to React SDK 2.6.0-rc.1 and JS SDK 6.1.0-rc.1 + * Update from Weblate + [\#13673](https://github.com/vector-im/riot-web/pull/13673) + * Add notranslate class to matrixchat to prevent translation by Google + Translate + [\#13669](https://github.com/vector-im/riot-web/pull/13669) + * Added Anchor Link to the development of matrix sdk + [\#13638](https://github.com/vector-im/riot-web/pull/13638) + * Prefetch the formatting button mask svg images + [\#13631](https://github.com/vector-im/riot-web/pull/13631) + * use a different image in previews + [\#13488](https://github.com/vector-im/riot-web/pull/13488) + * Update from Weblate + [\#13625](https://github.com/vector-im/riot-web/pull/13625) + * Remove electron_app as we now have riot-desktop repo + [\#13544](https://github.com/vector-im/riot-web/pull/13544) + * add new images for PWA icons + [\#13556](https://github.com/vector-im/riot-web/pull/13556) + * Remove unused feature flag from config + [\#13504](https://github.com/vector-im/riot-web/pull/13504) + * Update from Weblate + [\#13486](https://github.com/vector-im/riot-web/pull/13486) + * Developer tool: convert rageshake error locations back to sourcecode + locations + [\#13357](https://github.com/vector-im/riot-web/pull/13357) + * App load tweaks, improve error pages + [\#13329](https://github.com/vector-im/riot-web/pull/13329) + * Tweak default device name to be more compact + [\#13465](https://github.com/vector-im/riot-web/pull/13465) + * Tweak default device name on macOS + [\#13460](https://github.com/vector-im/riot-web/pull/13460) + * Update docs with custom theming changes + [\#13406](https://github.com/vector-im/riot-web/pull/13406) + * Update from Weblate + [\#13395](https://github.com/vector-im/riot-web/pull/13395) + * Remove docs and config for invite only padlocks + [\#13374](https://github.com/vector-im/riot-web/pull/13374) + * Revert "Add font scaling labs setting." + [\#13351](https://github.com/vector-im/riot-web/pull/13351) + * Expand feature flag docs to cover additional release channels + [\#13341](https://github.com/vector-im/riot-web/pull/13341) + * Optimized image assets by recompressing without affecting quality. + [\#13034](https://github.com/vector-im/riot-web/pull/13034) + * Add font scaling labs setting. + [\#13199](https://github.com/vector-im/riot-web/pull/13199) + * Remove encrypted message search feature flag + [\#13325](https://github.com/vector-im/riot-web/pull/13325) + * Fix `default_federate` settting description + [\#13312](https://github.com/vector-im/riot-web/pull/13312) + * Clarify that the .well-known method for Jitsi isn't available yet + [\#13314](https://github.com/vector-im/riot-web/pull/13314) + * add config option to tsc resolveJsonModule + [\#13296](https://github.com/vector-im/riot-web/pull/13296) + * Fix dispatcher import to be extension agnostic + [\#13297](https://github.com/vector-im/riot-web/pull/13297) + * Document more config options in config.md (fixes #13089) + [\#13260](https://github.com/vector-im/riot-web/pull/13260) + * Fix tests post-js-sdk-filters change + [\#13295](https://github.com/vector-im/riot-web/pull/13295) + * Make Jitsi download script a JS script + [\#13227](https://github.com/vector-im/riot-web/pull/13227) + * Use matrix-react-sdk type extensions as a base + [\#13271](https://github.com/vector-im/riot-web/pull/13271) + * Allow Riot Web to randomly pick welcome backgrounds + [\#13235](https://github.com/vector-im/riot-web/pull/13235) + * Update cross-signing feature docs and document fallback procedures + [\#13224](https://github.com/vector-im/riot-web/pull/13224) + +Changes in [1.6.0](https://github.com/vector-im/riot-web/releases/tag/v1.6.0) (2020-05-05) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.6...v1.6.0) + + * Cross-signing and E2EE by default for DMs and private rooms enabled + * Upgrade to React SDK 2.5.0 and JS SDK 6.0.0 + +Changes in [1.6.0-rc.6](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.6) (2020-05-01) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.5...v1.6.0-rc.6) + + * Upgrade to React SDK 2.5.0-rc.6 and JS SDK 6.0.0-rc.2 + +Changes in [1.6.0-rc.5](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.5) (2020-04-30) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.4...v1.6.0-rc.5) + + * Upgrade to React SDK 2.5.0-rc.5 and JS SDK 6.0.0-rc.1 + * Remove feature flag docs from docs on release + [\#13375](https://github.com/vector-im/riot-web/pull/13375) + +Changes in [1.6.0-rc.4](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.4) (2020-04-23) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.3...v1.6.0-rc.4) + + * Upgrade to React SDK 2.5.0-rc.4 and JS SDK 5.3.1-rc.4 + +Changes in [1.6.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.3) (2020-04-17) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.2...v1.6.0-rc.3) + + * Upgrade to React SDK 2.5.0-rc.3 and JS SDK 5.3.1-rc.3 + +Changes in [1.6.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.2) (2020-04-16) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.1...v1.6.0-rc.2) + + * Upgrade to React SDK 2.5.0-rc.2 and JS SDK 5.3.1-rc.2 + * Enable cross-signing / E2EE by default for DM without config changes + +Changes in [1.6.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.1) (2020-04-15) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.16-rc.1...v1.6.0-rc.1) + + * Enable cross-signing / E2EE by default for DM on release + [\#13179](https://github.com/vector-im/riot-web/pull/13179) + * Upgrade to React SDK 2.5.0-rc.1 and JS SDK 5.3.1-rc.1 + * Add instruction to resolve the inotify watch limit issue + [\#13128](https://github.com/vector-im/riot-web/pull/13128) + * docs: labs: add a pointer to config.md + [\#13149](https://github.com/vector-im/riot-web/pull/13149) + * Fix Electron SSO handling to support multiple profiles + [\#13028](https://github.com/vector-im/riot-web/pull/13028) + * Add riot-desktop shortcuts for forward/back matching browsers&slack + [\#13133](https://github.com/vector-im/riot-web/pull/13133) + * Allow rageshake to fail in init + [\#13164](https://github.com/vector-im/riot-web/pull/13164) + * Fix broken yarn install link in README.md + [\#13125](https://github.com/vector-im/riot-web/pull/13125) + * fix build:jitsi scripts crash caused by a missing folder + [\#13122](https://github.com/vector-im/riot-web/pull/13122) + * App load order changes to catch errors better + [\#13095](https://github.com/vector-im/riot-web/pull/13095) + * Upgrade deps + [\#13080](https://github.com/vector-im/riot-web/pull/13080) + +Changes in [1.5.16-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.16-rc.1) (2020-04-08) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.15...v1.5.16-rc.1) + + * Upgrade React SDK to 2.4.0-rc.1 and JS SDK to 5.3.0-rc.1 + * Update from Weblate + [\#13078](https://github.com/vector-im/riot-web/pull/13078) + * Mention Jitsi support at the .well-known level in Jitsi docs + [\#13047](https://github.com/vector-im/riot-web/pull/13047) + * Add new default home page fallback + [\#13049](https://github.com/vector-im/riot-web/pull/13049) + * App load order tweaks for code splitting + [\#13032](https://github.com/vector-im/riot-web/pull/13032) + * Add some docs about Jitsi widgets and Jitsi configuration + [\#13027](https://github.com/vector-im/riot-web/pull/13027) + * Bump minimist from 1.2.2 to 1.2.3 in /electron_app + [\#13030](https://github.com/vector-im/riot-web/pull/13030) + * Fix Electron mac-specific shortcut being registered on Web too. + [\#13020](https://github.com/vector-im/riot-web/pull/13020) + * Add a console warning that errors from Jitsi Meet are fine + [\#12968](https://github.com/vector-im/riot-web/pull/12968) + * Fix popout support for jitsi widgets + [\#12975](https://github.com/vector-im/riot-web/pull/12975) + * Some grammar and clarifications + [\#12925](https://github.com/vector-im/riot-web/pull/12925) + * Don't immediately remove notifications from notification trays + [\#12861](https://github.com/vector-im/riot-web/pull/12861) + * Remove welcome user from config + [\#12894](https://github.com/vector-im/riot-web/pull/12894) + Changes in [1.5.15](https://github.com/vector-im/riot-web/releases/tag/v1.5.15) (2020-04-01) ============================================================================================ [Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.14...v1.5.15) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..3af9d3945b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,4 @@ +Contributing code to Element +============================ + +Element follows the same pattern as https://github.com/matrix-org/matrix-js-sdk/blob/master/CONTRIBUTING.rst. diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst deleted file mode 100644 index f084b474bd..0000000000 --- a/CONTRIBUTING.rst +++ /dev/null @@ -1,4 +0,0 @@ -Contributing code to Riot -========================= - -Riot follows the same pattern as https://github.com/matrix-org/matrix-js-sdk/blob/master/CONTRIBUTING.rst. diff --git a/Dockerfile b/Dockerfile index 8f584b8109..e62b867d38 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,8 @@ # Builder -FROM node:10 as builder +FROM node:14-buster as builder # Support custom branches of the react-sdk and js-sdk. This also helps us build -# images of riot-web develop. +# images of element-web develop. ARG USE_CUSTOM_SDKS=false ARG REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git" ARG REACT_SDK_BRANCH="master" @@ -34,4 +34,4 @@ COPY --from=builder /src/webapp /app RUN sed -i '3i\ \ \ \ application/wasm wasm\;' /etc/nginx/mime.types RUN rm -rf /usr/share/nginx/html \ - && ln -s /app /usr/share/nginx/html + && ln -s /app /usr/share/nginx/html diff --git a/README.md b/README.md index b506948c8a..8bf6ecd8cf 100644 --- a/README.md +++ b/README.md @@ -1,80 +1,122 @@ -Riot -==== +Element +======= -Riot (formerly known as Vector) is a Matrix web client built using the [Matrix +Element (formerly known as Vector and Riot) is a Matrix web client built using the [Matrix React SDK](https://github.com/matrix-org/matrix-react-sdk). Supported Environments ====================== -Riot has several tiers of support for different environments: +Element has several tiers of support for different environments: * Supported * Definition: Issues **actively triaged**, regressions **block** the release - * Last 2 major versions of Chrome, Firefox, and Safari on desktop OSes - * Latest release of official Riot Desktop app on desktop OSes + * Last 2 major versions of Chrome, Firefox, Safari, and Edge on desktop OSes + * Latest release of official Element Desktop app on desktop OSes * Desktop OSes means macOS, Windows, and Linux versions for desktop devices that are actively supported by the OS vendor and receive security updates * Experimental * Definition: Issues **accepted**, regressions **do not block** the release - * Riot as an installed PWA via current stable version of Chrome, Firefox, and Safari + * Element as an installed PWA via current stable version of Chrome, Firefox, and Safari * Mobile web for current stable version of Chrome, Firefox, and Safari on Android, iOS, and iPadOS * Not supported * Definition: Issues only affecting unsupported environments are **closed** * Everything else -For accessing Riot on an Android or iOS device, we currently recommend the -native apps [riot-android](https://github.com/vector-im/riot-android) -and [riot-ios](https://github.com/vector-im/riot-ios). +For accessing Element on an Android or iOS device, we currently recommend the +native apps [element-android](https://github.com/vector-im/element-android) +and [element-ios](https://github.com/vector-im/element-ios). 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 +The easiest way to test Element is to just use the hosted copy at https://app.element.io. +The `develop` branch is continuously deployed to https://develop.element.io 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: +To host your own copy of Element, the quickest bet is to use a pre-built +released version of Element: -1. Download the latest version from https://github.com/vector-im/riot-web/releases +1. Download the latest version from https://github.com/vector-im/element-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 `element-x.x.x` directory to an appropriate name 1. Configure the correct caching headers in your webserver (see below) 1. If desired, copy `config.sample.json` to `config.json` and edit it as desired. See the [configuration docs](docs/config.md) for details. -1. Enter the URL into your browser and log into Riot! +1. Enter the URL into your browser and log into Element! Releases are signed using gpg and the OpenPGP standard, and can be checked against the public key located -at https://packages.riot.im/riot-release-key.asc. +at https://packages.riot.im/element-release-key.asc. -Note that for the security of your chats will need to serve Riot +Note that for the security of your chats will need to serve Element over HTTPS. Major browsers also do not allow you to use VoIP/video chats over HTTP, as WebRTC is only usable over HTTPS. There are some exceptions like when using localhost, which is considered a [secure context](https://developer.mozilla.org/docs/Web/Security/Secure_Contexts) and thus allowed. -To install Riot as a desktop application, see [Running as a desktop +To install Element as a desktop application, see [Running as a desktop app](#running-as-a-desktop-app) below. -Important Security Note -======================= +Important Security Notes +======================== -We do not recommend running Riot from the same domain name as your Matrix +Separate domains +---------------- + +We do not recommend running Element from the same domain name as your Matrix homeserver. The reason is the risk of XSS (cross-site-scripting) -vulnerabilities that could occur if someone caused Riot to load and render +vulnerabilities that could occur if someone caused Element to load and render malicious user generated content from a Matrix API which then had trusted -access to Riot (or other apps) due to sharing the same domain. +access to Element (or other apps) due to sharing the same domain. We have put some coarse mitigations into place to try to protect against this situation, but it's still not good practice to do it in the first place. See -https://github.com/vector-im/riot-web/issues/1977 for more details. +https://github.com/vector-im/element-web/issues/1977 for more details. + +Configuration best practices +---------------------------- + +Unless you have special requirements, you will want to add the following to +your web server configuration when hosting Element Web: + +- The `X-Frame-Options: SAMEORIGIN` header, to prevent Element Web from being + framed and protect from [clickjacking][owasp-clickjacking]. +- The `frame-ancestors 'none'` directive to your `Content-Security-Policy` + header, as the modern replacement for `X-Frame-Options` (though both should be + included since not all browsers support it yet, see + [this][owasp-clickjacking-csp]). +- The `X-Content-Type-Options: nosniff` header, to [disable MIME + sniffing][mime-sniffing]. +- The `X-XSS-Protection: 1; mode=block;` header, for basic XSS protection in + legacy browsers. + +[mime-sniffing]: + + +[owasp-clickjacking-csp]: + + +[owasp-clickjacking]: + + +If you are using nginx, this would look something like the following: + +``` +add_header X-Frame-Options SAMEORIGIN; +add_header X-Content-Type-Options nosniff; +add_header X-XSS-Protection "1; mode=block"; +add_header Content-Security-Policy "frame-ancestors 'none'"; +``` + +Note: In case you are already setting a `Content-Security-Policy` header +elsewhere, you should modify it to include the `frame-ancestors` directive +instead of adding that last line. Building From Source ==================== -Riot is a modular webapp built with modern ES6 and uses a Node.js build system. +Element is a modular webapp built with modern ES6 and uses a Node.js build system. Ensure you have the latest LTS version of Node.js installed. Using `yarn` instead of `npm` is recommended. Please see the Yarn [install @@ -82,13 +124,13 @@ guide](https://classic.yarnpkg.com/en/docs/install) if you do not have it alread 1. Install or update `node.js` so that your `node` is at least v10.x. 1. Install `yarn` if not present already. -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. Clone the repo: `git clone https://github.com/vector-im/element-web.git`. +1. Switch to the element-web directory: `cd element-web`. 1. Install the prerequisites: `yarn install`. * If you're using the `develop` branch, then it is recommended to set up a proper development environment (see [Setting up a dev environment](#setting-up-a-dev-environment) below). Alternatively, you - can use https://riot.im/develop - the continuous integration release of + can use https://develop.element.io - the continuous integration release of the develop branch. 1. Configure the app by copying `config.sample.json` to `config.json` and modifying it. See the [configuration docs](docs/config.md) for details. @@ -97,51 +139,19 @@ guide](https://classic.yarnpkg.com/en/docs/install) if you do not have it alread web server. Note that `yarn dist` is not supported on Windows, so Windows users can run `yarn build`, -which will build all the necessary files into the `webapp` directory. The version of Riot +which will build all the necessary files into the `webapp` directory. The version of Element 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. +`webapp` directory on your web server to actually serve up the app, which is +entirely static content. Running as a Desktop app ======================== -Riot can also be run as a desktop app, wrapped in Electron. You can download a -pre-built version from https://riot.im/download/desktop/ or, if you prefer, +Element can also be run as a desktop app, wrapped in Electron. You can download a +pre-built version from https://element.io/get-started or, if you prefer, build it yourself. -To build it yourself, follow the instructions below. - -1. Follow the instructions in 'Building From Source' above, but run - `yarn build` instead of `yarn dist` (since we don't need the tarball). -2. Install Electron and run it: - - ```bash - yarn electron - ``` - -To build packages, use `electron-builder`. This is configured to output: - * `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 - -See https://github.com/electron-userland/electron-builder/wiki/Multi-Platform-Build -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 mono -yarn install -yarn build:electron -``` - -For other packages, use `electron-builder` manually. For example, to build a -package 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_app/dist/` +To build it yourself, follow the instructions at https://github.com/vector-im/element-desktop. Many thanks to @aviraldg for the initial work on the Electron integration. @@ -150,7 +160,7 @@ Other options for running as a desktop app: ```bash yarn global add nativefier -nativefier https://riot.im/app/ +nativefier https://app.element.io/ ``` The [configuration docs](docs/config.md#desktop-app-configuration) show how to @@ -159,31 +169,31 @@ override the desktop app's default settings if desired. Running from Docker =================== -The Docker image can be used to serve riot-web as a web server. The easiest way to use +The Docker image can be used to serve element-web as a web server. The easiest way to use it is to use the prebuilt image: ```bash -docker run -p 80:80 vectorim/riot-web +docker run -p 80:80 vectorim/element-web ``` To supply your own custom `config.json`, map a volume to `/app/config.json`. For example, -if your custom config was located at `/etc/riot-web/config.json` then your Docker command +if your custom config was located at `/etc/element-web/config.json` then your Docker command would be: ```bash -docker run -p 80:80 -v /etc/riot-web/config.json:/app/config.json vectorim/riot-web +docker run -p 80:80 -v /etc/element-web/config.json:/app/config.json vectorim/element-web ``` To build the image yourself: ```bash -git clone https://github.com/vector-im/riot-web.git riot-web -cd riot-web +git clone https://github.com/vector-im/element-web.git element-web +cd element-web git checkout master -docker build -t vectorim/riot-web . +docker build . ``` If you're building a custom branch, or want to use the develop branch, check out the appropriate -riot-web branch and then run: +element-web branch and then run: ```bash -docker build -t vectorim/riot-web:develop \ +docker build -t \ --build-arg USE_CUSTOM_SDKS=true \ --build-arg REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git" \ --build-arg REACT_SDK_BRANCH="develop" \ @@ -192,22 +202,28 @@ docker build -t vectorim/riot-web:develop \ . ``` +Running in Kubernetes +===================== + +The provided element-web docker image can also be run from within a Kubernetes cluster. +See the [Kubernetes example](docs/kubernetes.md) for more details. + config.json =========== -Riot supports a variety of settings to configure default servers, behaviour, themes, etc. +Element supports a variety of settings to configure default servers, behaviour, themes, etc. See the [configuration docs](docs/config.md) for more details. Labs Features ============= -Some features of Riot may be enabled by flags in the `Labs` section of the settings. -Some of these features are described in [labs.md](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md). +Some features of Element may be enabled by flags in the `Labs` section of the settings. +Some of these features are described in [labs.md](https://github.com/vector-im/element-web/blob/develop/docs/labs.md). Caching requirements ==================== -Riot requires the following URLs not to be cached, when/if you are serving Riot from your own webserver: +Element requires the following URLs not to be cached, when/if you are serving Element from your own webserver: ``` /config.*.json /i18n @@ -219,20 +235,20 @@ Riot requires the following URLs not to be cached, when/if you are serving Riot Development =========== -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. +Before attempting to develop on Element you **must** read the [developer guide +for `matrix-react-sdk`](https://github.com/matrix-org/matrix-react-sdk#developer-guide), which +also defines the design, architecture and style for Element too. Before starting work on a feature, it's best to ensure your plan aligns well -with our vision for Riot. Please chat with the team in -[#riot-dev:matrix.org](https://matrix.to/#/#riot-dev:matrix.org) before you +with our vision for Element. Please chat with the team in +[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) before you start so we can ensure it's something we'd be willing to merge. 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 +The idea of Element is to be a relatively lightweight "skin" of customisations on top of the underlying `matrix-react-sdk`. `matrix-react-sdk` provides both the higher and lower level React components useful for building Matrix communication apps using React. @@ -240,15 +256,15 @@ apps using React. After creating a new component you must run `yarn reskindex` to regenerate the `component-index.js` for the app (used in future for skinning). -Please note that Riot is intended to run correctly without access to the public +Please note that Element is intended to run correctly without access to the public internet. So please don't depend on resources (JS libs, CSS, images, fonts) hosted by external CDNs or servers but instead please package all dependencies -into Riot itself. +into Element itself. Setting up a dev environment ============================ -Much of the functionality in Riot is actually in the `matrix-react-sdk` and +Much of the functionality in Element is actually in the `matrix-react-sdk` and `matrix-js-sdk` modules. It is possible to set these up in a way that makes it easy to track the `develop` branches in git and to make local changes without having to manually rebuild each time. @@ -258,7 +274,6 @@ First clone and build `matrix-js-sdk`: ``` bash git clone https://github.com/matrix-org/matrix-js-sdk.git pushd matrix-js-sdk -git checkout develop yarn link yarn install popd @@ -269,36 +284,31 @@ Then similarly with `matrix-react-sdk`: ```bash git clone https://github.com/matrix-org/matrix-react-sdk.git pushd matrix-react-sdk -git checkout develop yarn link yarn link matrix-js-sdk yarn install popd ``` -Finally, build and start Riot itself: +Finally, build and start Element itself: ```bash -git clone https://github.com/vector-im/riot-web.git -cd riot-web -git checkout develop +git clone https://github.com/vector-im/element-web.git +cd element-web yarn link matrix-js-sdk yarn link matrix-react-sdk yarn install +yarn reskindex yarn 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 +[element-js] [webpack.Progress] 100% +[element-js] +[element-js] ℹ 「wdm」: 1840 modules +[element-js] ℹ 「wdm」: Compiled successfully. ``` Remember, the command will not terminate since it runs the web server and rebuilds source files when they change. This development server also @@ -307,19 +317,43 @@ bundle.css.map 116 kB 0 [emitted] main Configure the app by copying `config.sample.json` to `config.json` and modifying it. See the [configuration docs](docs/config.md) for details. -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 Element. + +**Note**: The build script uses inotify by default on Linux to monitor directories +for changes. If the inotify limits are too low your build will fail silently or with +`Error: EMFILE: too many open files`. To avoid these issues, we recommend a watch limit +of at least `128M` and instance limit around `512`. + +You may be interested in issues [#15750](https://github.com/vector-im/element-web/issues/15750) and +[#15774](https://github.com/vector-im/element-web/issues/15774) for further details. + +To set a new inotify watch and instance limit, execute: + +``` +sudo sysctl fs.inotify.max_user_watches=131072 +sudo sysctl fs.inotify.max_user_instances=512 +sudo sysctl -p +``` + +If you wish, you can make the new limits permanent, by executing: + +``` +echo fs.inotify.max_user_watches=131072 | sudo tee -a /etc/sysctl.conf +echo fs.inotify.max_user_instances=512 | sudo tee -a /etc/sysctl.conf +sudo sysctl -p +``` ___ When you make changes to `matrix-react-sdk` or `matrix-js-sdk` they should be automatically picked up by webpack and built. -If you add or remove any components from the Riot skin, you will need to rebuild +If you add or remove any components from the Element skin, you will need to rebuild the skin's index by running, `yarn reskindex`. If any of these steps error with, `file table overflow`, you are probably on a mac which has a very low limit on max open files. Run `ulimit -Sn 1024` and try again. -You'll need to do this in each new terminal you open before building Riot. +You'll need to do this in each new terminal you open before building Element. Running the tests ----------------- @@ -351,56 +385,81 @@ To add a new translation, head to the [translating doc](docs/translating.md). For a developer guide, see the [translating dev doc](docs/translating-dev.md). -[translationsstatus](https://translate.riot.im/engage/riot-web/?utm_source=widget) +[translationsstatus](https://translate.element.io/engage/element-web/?utm_source=widget) Triaging issues =============== -Issues will be triaged by the core team using the below set of tags. +We strive to completely cover all applicable issues with these core labels: -Tags are meant to be used in combination - e.g.: - * P1 critical bug == really urgent stuff that should be next in the bugfixing todo list - * "release blocker" == stuff which is blocking us from cutting the next release. - * P1 feature type:voip == what VoIP features should we be working on next? +1. __Type__ — Every issue is assigned a type: + - __[T-Defect](https://github.com/vector-im/element-web/labels/T-Defect):__ + Bugs, crashes, hangs, vulnerabilities, or other reported problems + - __[T-Enhancement](https://github.com/vector-im/element-web/labels/T-Enhancement):__ + New features, changes in functionality, performance boosts, user-facing + improvements + - __[T-Task](https://github.com/vector-im/element-web/labels/T-Task):__ + Refactoring, enabling or disabling functionality, other engineering tasks + - __[T-Other](https://github.com/vector-im/element-web/labels/T-Other):__ + Questions, user support, anything else -priority: **compulsory** +2. __Severity__ — All issues labeled `T-Defect` are also assigned a severity: + * __[S-Critical](https://github.com/vector-im/element-web/labels/S-Critical):__ + Prevents work, causes data loss, affects many users, and/or has no + workaround + * __[S-Major](https://github.com/vector-im/element-web/labels/S-Major):__ + Severely degrades major functionality or product features, with no + satisfactory workaround + * __[S-Minor](https://github.com/vector-im/element-web/labels/S-Minor):__ + Impairs non-critical functionality, or suitable workarounds exist + * __[S-Tolerable](https://github.com/vector-im/element-web/labels/S-Tolerable):__ + Purely cosmetic or low / no impact to users -* P1: top priority - i.e. pool of stuff which we should be working on next -* P2: still need to fix, but lower than P1 -* P3: non-urgent -* P4: interesting idea - bluesky some day -* P5: recorded for posterity/to avoid duplicates. No intention to resolves right now. +3. __Priority__ — All issues which are not `T-Other` are assigned a priority: + * __[P1](https://github.com/vector-im/element-web/labels/P1):__ Next + * __[P2](https://github.com/vector-im/element-web/labels/P2):__ Later + * __[P3](https://github.com/vector-im/element-web/labels/P3):__ Eventually + * __[P4](https://github.com/vector-im/element-web/labels/P4):__ Interesting — + Not yet scheduled, will accept patches + * __[P5](https://github.com/vector-im/element-web/labels/P5):__ Dubious — + Will not schedule, would consider patches -bug or feature: **compulsory** +4. __Area__ — Most issues are assigned one or several "areas" using one of the + many `A-` prefixed labels, e.g. `A-Composer` or `A-Spaces`. Each area label + maps to a group of features or portion of the UI surface in the app. -* bug -* feature +### Other common labels -bug severity: **compulsory, if bug** +We have a handful of other labels which are added on an as-needed basis, and not expected to be exhaustive: -* critical - whole app doesn't work -* major - entire feature doesn't work -* minor - partially broken feature (but still usable) -* cosmetic - feature works functionally but UI/UX is broken +* __Exceptions__ — Special flags for issues and pull requests: + * __[X-Needs-Info](https://github.com/vector-im/element-web/labels/X-Needs-Info):__ + This issue is blocked pending further information from the reporter + * __[X-Regression](https://github.com/vector-im/element-web/labels/X-Regression):__ + Denotes things breaking which previously worked + * __[X-Release-Blocker](https://github.com/vector-im/element-web/labels/X-Release-Blocker):__ + Issues which must be resolved before making a release -types -* type:* - refers to a particular part of the app; used to filter bugs - on a given topic - e.g. VOIP, signup, timeline, etc. +* __[Easy](https://github.com/vector-im/element-web/labels/Easy)__ / __[Help + Wanted](https://github.com/vector-im/element-web/labels/Help%20Wanted)__ — + Well-defined issues which are suitable for folks new to the codebase -additional categories (self-explanatory): +* __[A11y](https://github.com/vector-im/element-web/labels/A11y)__ / + __[Meta](https://github.com/vector-im/element-web/labels/Meta)__ / + __[I18n](https://github.com/vector-im/element-web/labels/I18n)__ / + __[Privacy](https://github.com/vector-im/element-web/labels/Privacy)__ / + __[Security](https://github.com/vector-im/element-web/labels/Security)__ — + Issues which fall under these conceptual themes (which apply to many software + projects and are not specific to Element) -* release blocker -* ui/ux (think of this as cosmetic) -* network (specific to network conditions) -* platform specific -* accessibility -* maintenance -* performance -* i18n -* blocked - whether this issue currently can't be progressed due to outside factors +* __[Sponsored](https://github.com/vector-im/element-web/labels/Sponsored)__ — + Used internally by Element to denote issues with external funding -community engagement -* easy -* hacktoberfest -* bounty? - proposal to be included in a bounty programme -* bounty - included in Status Open Bounty +### Ad hoc labels (`Z-`) + +We have reserved the `Z-` prefix for ad hoc labels. + +Any member of the core team is welcome to create labels beginning with `Z-` for +any purpose, such as tracking personal areas of interest or providing a common +way to label cross-repo initiatives. The prefix avoids interference with the +project's main labels. diff --git a/__mocks__/cssMock.js b/__mocks__/cssMock.js new file mode 100644 index 0000000000..9b5d9b3476 --- /dev/null +++ b/__mocks__/cssMock.js @@ -0,0 +1 @@ +module.exports = "css-file-stub"; diff --git a/babel.config.js b/babel.config.js index 8d98fffcf8..fe720e0a4d 100644 --- a/babel.config.js +++ b/babel.config.js @@ -3,12 +3,14 @@ module.exports = { "presets": [ ["@babel/preset-env", { "targets": [ - "last 2 Chrome versions", "last 2 Firefox versions", "last 2 Safari versions" + "last 2 Chrome versions", + "last 2 Firefox versions", + "last 2 Safari versions", + "last 2 Edge versions", ], }], "@babel/preset-typescript", - "@babel/preset-flow", - "@babel/preset-react" + "@babel/preset-react", ], "plugins": [ ["@babel/plugin-proposal-decorators", {legacy: true}], @@ -16,8 +18,9 @@ module.exports = { "@babel/plugin-proposal-numeric-separator", "@babel/plugin-proposal-class-properties", "@babel/plugin-proposal-object-rest-spread", - "@babel/plugin-transform-flow-comments", + "@babel/plugin-proposal-optional-chaining", + "@babel/plugin-proposal-nullish-coalescing-operator", "@babel/plugin-syntax-dynamic-import", - "@babel/plugin-transform-runtime" - ] + "@babel/plugin-transform-runtime", + ], }; diff --git a/config.sample.json b/config.sample.json index 87fc63de03..adf33174b2 100644 --- a/config.sample.json +++ b/config.sample.json @@ -12,7 +12,7 @@ "disable_guests": false, "disable_login_language_selector": false, "disable_3pid_login": false, - "brand": "Riot", + "brand": "Element", "integrations_ui_url": "https://scalar.vector.im/", "integrations_rest_url": "https://scalar.vector.im/api", "integrations_widgets_urls": [ @@ -22,15 +22,10 @@ "https://scalar-staging.vector.im/api", "https://scalar-staging.riot.im/scalar/api" ], - "bug_report_endpoint_url": "https://riot.im/bugreports/submit", + "bug_report_endpoint_url": "https://element.io/bugreports/submit", "defaultCountryCode": "GB", "showLabsSettings": false, - "features": { - "feature_pinning": "labs", - "feature_custom_status": "labs", - "feature_custom_tags": "labs", - "feature_state_counters": "labs" - }, + "features": { }, "default_federate": true, "default_theme": "light", "roomDirectory": { @@ -38,7 +33,6 @@ "matrix.org" ] }, - "welcomeUserId": "@riot-bot:matrix.org", "piwik": { "url": "https://piwik.riot.im/", "whitelistedHSUrls": ["https://matrix.org"], diff --git a/contribute.json b/contribute.json index 0f9ceed38c..0ac40ea378 100644 --- a/contribute.json +++ b/contribute.json @@ -1,13 +1,13 @@ { - "name": "Riot", + "name": "Element", "description": "A glossy Matrix collaboration client for the web.", "repository": { - "url": "https://github.com/vector-im/riot-web", + "url": "https://github.com/vector-im/element-web", "license": "Apache License 2.0" }, "bugs": { - "list": "https://github.com/vector-im/riot-web/issues", - "report": "https://github.com/vector-im/riot-web/issues/new/choose" + "list": "https://github.com/vector-im/element-web/issues", + "report": "https://github.com/vector-im/element-web/issues/new/choose" }, "keywords": [ "chat", diff --git a/docs/app-load.md b/docs/app-load.md new file mode 100644 index 0000000000..7908ce68b0 --- /dev/null +++ b/docs/app-load.md @@ -0,0 +1,81 @@ +# App load order + +Old slow flow: +![image](https://user-images.githubusercontent.com/2403652/73848963-00a2a080-4821-11ea-97d4-1200fc2638f3.png) + +Current more parallel flow: +![image](https://user-images.githubusercontent.com/2403652/83146440-303a2900-a0ee-11ea-806b-4f53f039b957.png) + +
Code +

+


+digraph G {
+  node [shape=box];
+
+  subgraph cluster_0 {
+    color=orange;
+    node [style=filled];
+    label = "index.ts";
+
+    entrypoint, s0, ready [shape=point];
+    rageshake, config, i18n, theme, skin, olm [shape=parallelogram];
+    mobile [shape=diamond, label="mobile"];
+    modernizr [shape=diamond];
+    redirect, incompatible [shape=egg];
+
+    entrypoint -> rageshake;
+    rageshake -> mobile [color=blue];
+    mobile -> s0 [label="No"];
+    mobile -> redirect [label="Yes"];
+
+    s0 -> platform;
+    s0 -> olm;
+    platform -> config;
+
+    config -> i18n [color=blue];
+    config -> theme [color=blue];
+    config -> skin [color=blue];
+
+    i18n -> modernizr [color=blue];
+    theme -> modernizr [color=blue];
+    skin -> modernizr [color=blue];
+
+    modernizr -> ready [label="Yes"];
+    modernizr -> incompatible [label="No"];
+    incompatible -> ready [label="user ignore"];
+
+    olm -> ready [color=red];
+    config -> ready [color=red];
+    skin -> ready [color=red];
+    theme -> ready [color=red];
+    i18n -> ready [color=red];
+  }
+
+  subgraph cluster_1 {
+    color = green;
+    node [style=filled];
+    label = "init.tsx";
+
+    ready -> loadApp;
+    loadApp -> matrixchat;
+  }
+}
+
+

+
+ +Key: ++ Parallelogram: async/await task ++ Box: sync task ++ Diamond: conditional branch ++ Egg: user interaction ++ Blue arrow: async task is allowed to settle but allowed to fail ++ Red arrow: async task success is asserted + +Notes: ++ A task begins when all its dependencies (arrows going into it) are fulfilled. ++ The success of setting up rageshake is never asserted, element-web has a fallback path for running without IDB (and thus rageshake). ++ Everything is awaited to be settled before the Modernizr check, to allow it to make use of things like i18n if they are successful. + +Underlying dependencies: +![image](https://user-images.githubusercontent.com/2403652/73848977-08624500-4821-11ea-9830-bb0317c41086.png) diff --git a/docs/conferencing.md b/docs/conferencing.md deleted file mode 100644 index 874ce4cfd0..0000000000 --- a/docs/conferencing.md +++ /dev/null @@ -1,52 +0,0 @@ -# VoIP Conferencing - -This is a draft proposal for a naive voice/video conferencing implementation for -Matrix clients. There are many possible conferencing architectures possible for -Matrix (Multipoint Conferencing Unit (MCU); Stream Forwarding Unit (SFU); Peer- -to-Peer mesh (P2P), etc; events shared in the group room; events shared 1:1; -possibly even out-of-band signalling). - -This is a starting point for a naive MCU implementation which could provide one -possible Matrix-wide solution in future, which retains backwards compatibility -with standard 1:1 calling. - - * A client chooses to initiate a conference for a given room by starting a - voice or video call with a 'conference focus' user. This is a virtual user - (typically Application Service) which implements a conferencing bridge. It - isn't defined how the client discovers or selects this user. - - * The conference focus user MUST join the room in which the client has - initiated the conference - this may require the client to invite the - conference focus user to the room, depending on the room's `join_rules`. The - conference focus user needs to be in the room to let the bridge eject users - from the conference who have left the room in which it was initiated, and aid - discovery of the conference by other users in the room. The bridge - identifies the room to join based on the user ID by which it was invited. - The format of this identifier is implementation dependent for now. - - * If a client leaves the group chat room, they MUST be ejected from the - conference. If a client leaves the 1:1 room with the conference focus user, - they SHOULD be ejected from the conference. - - * For now, rooms can contain multiple conference focus users - it's left to - user or client implementation to select which to converge on. In future this - could be mediated using a state event (e.g. `im.vector.call.mcu`), but we - can't do that right now as by default normal users can't set arbitrary state - events on a room. - - * To participate in the conference, other clients initiates a standard 1:1 - voice or video call to the conference focus user. - - * For best UX, clients SHOULD show the ongoing voice/video call in the UI - context of the group room rather than 1:1 with the focus user. If a client - recognises a conference user present in the room, it MAY chose to highlight - this in the UI (e.g. with a "conference ongoing" notification, to aid - discovery). Clients MAY hide the 1:1 room with the focus user (although in - future this room could be used for floor control or other direct - communication with the conference focus) - - * When all users have left the conference, the 'conference focus' user SHOULD - leave the room. - - * If a conference focus user joins a room but does not receive a 1:1 voice or - video call, it SHOULD time out after a period of time and leave the room. diff --git a/docs/config.md b/docs/config.md index 3102eaf83e..1ca4bf48ff 100644 --- a/docs/config.md +++ b/docs/config.md @@ -4,13 +4,13 @@ Configuration 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://develop.element.io/config.json. 1. `default_server_config` sets the default homeserver and identity server URL for - Riot to use. The object is the same as returned by [https:///.well-known/matrix/client](https://matrix.org/docs/spec/client_server/latest.html#get-well-known-matrix-client), + Element to use. The object is the same as returned by [https:///.well-known/matrix/client](https://matrix.org/docs/spec/client_server/latest.html#get-well-known-matrix-client), with added support for a `server_name` under the `m.homeserver` section to display a custom homeserver name. Alternatively, the config can contain a `default_server_name` - instead which is where Riot will go to get that same object, although this option is + instead which is where Element will go to get that same object, although this option is deprecated - see the `.well-known` link above for more information on using this option. Note that the `default_server_name` is used to get a complete server configuration whereas the `server_name` in the `default_server_config` is for display purposes only. @@ -18,21 +18,24 @@ For a good example, see https://riot.im/develop/config.json. `default_is_url`, however these are deprecated. They are maintained for backwards compatibility with older configurations. `default_is_url` is respected only if `default_hs_url` is used. - * Riot will fail to load if a mix of `default_server_config`, `default_server_name`, or + * Element will fail to load if a mix of `default_server_config`, `default_server_name`, or `default_hs_url` is specified. When multiple sources are specified, it is unclear which should take priority and therefore the application cannot continue. - * As of Riot 1.4.0, identity servers are optional. See [Identity servers](#identity-servers) below. -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 and are [documented](labs.md). The feature flag process is - [documented](feature-flags.md) as well. -1. `showLabsSettings`: Shows the "labs" tab of user settings even when no `features` are enabled - or present. Useful for getting at settings which may be otherwise hidden. + * As of Element 1.4.0, identity servers are optional. See [Identity servers](#identity-servers) below. +1. `sso_immediate_redirect`: When `true`, Element will assume the default server supports SSO + and attempt to send the user there to continue (if they aren't already logged in). Default + `false`. Note that this disables all usage of the welcome page. +1. `features`: Lookup of optional features that may be force-enabled (`true`) or force-disabled (`false`). + When features are not listed here, their defaults will be used, and users can turn them on/off if `showLabsSettings` + allows them to. The available optional experimental features vary from release to release and are + [documented](labs.md). The feature flag process is [documented](feature-flags.md) as well. +1. `showLabsSettings`: Shows the "labs" tab of user settings. Useful to allow users to turn on experimental features + they might not otherwise have access to. 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 + during authentication flows. If an array is passed, an image is chosen randomly for each visit. 1. `authHeaderLogoUrl`: An logo image that is shown in the header during authentication flows 1. `authFooterLinks`: a list of links to show in the authentication page footer: @@ -42,13 +45,13 @@ For a good example, see https://riot.im/develop/config.json. 1. `adminMessageMD`: An extra message to show on the reporting dialog to mention homeserver-specific policies. Accepts Markdown. 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 + server is not Element and normally not your homeserver either. The integration server settings may be left blank to disable integrations. 1. `integrations_rest_url`: URL to the REST interface for the integrations server. 1. `integrations_widgets_urls`: list of URLs to the REST interface for the widget integrations server. 1. `bug_report_endpoint_url`: endpoint to send bug reports to (must be running a https://github.com/matrix-org/rageshake server). Bug reports are sent when a user clicks - "Send Logs" within the application. Bug reports can be disabled by leaving the + "Send Logs" within the application. Bug reports can be disabled/hidden by leaving the `bug_report_endpoint_url` out of your config file. 1. `roomDirectory`: config for the public room directory. This section is optional. 1. `roomDirectory.servers`: List of other homeservers' directories to include in the drop @@ -65,13 +68,16 @@ 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 +1. `embeddedPages`: Configures the pages displayed in portions of Element 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. + logged in. Defaults to `welcome.html` supplied with Element. 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. + 1. `loginForWelcome`: Overrides `welcomeUrl` to make the welcome page be the + same page as the login page when `true`. This effectively disables the + welcome page. 1. `defaultCountryCode`: The ISO 3166 alpha2 country code to use when showing country selectors, like the phone number input on the registration page. Defaults to `GB` if the given code is unknown or not provided. @@ -80,25 +86,66 @@ For a good example, see https://riot.im/develop/config.json. is special cased to the `default_theme` in the config file). 1. `disable_custom_urls`: disallow the user to change the default homeserver when signing up or logging in. -1. `permalinkPrefix`: Used to change the URL that Riot generates permalinks with. +1. `permalinkPrefix`: Used to change the URL that Element generates permalinks with. By default, this is "https://matrix.to" to generate matrix.to (spec) permalinks. - Set this to your Riot instance URL if you run an unfederated server (eg: - "https://riot.example.org"). + Set this to your Element instance URL if you run an unfederated server (eg: + "https://element.example.org"). 1. `jitsi`: Used to change the default conference options. Learn more about the Jitsi options at [jitsi.md](./jitsi.md). 1. `preferredDomain`: The domain name of the preferred Jitsi instance. Defaults to `jitsi.riot.im`. This is used whenever a user clicks on the voice/video call buttons - integration managers may use a different domain. +1. `enable_presence_by_hs_url`: The property key should be the URL of the homeserver + and its value defines whether to enable/disable the presence status display + from that homeserver. If no options are configured, presence is shown for all + homeservers. +1. `disable_guests`: Disables guest access tokens and auto-guest registrations. + Defaults to false (guests are allowed). +1. `disable_login_language_selector`: Disables the login language selector. Defaults + to false (language selector is shown). +1. `disable_3pid_login`: Disables 3rd party identity options on login and registration form + Defaults to false (3rd party identity options are shown). +1. `default_federate`: Default option for room federation when creating a room + Defaults to true (room federation enabled). +1. `desktopBuilds`: Used to alter promotional links to the desktop app. By default + the builds are considered available and accessible from https://element.io. This + config option is typically used in the context of encouraging encrypted message + search capabilities (Seshat). All the options listed below are required if this + option is specified. + 1. `available`: When false, the desktop app will not be promoted to the user. + 1. `logo`: An HTTP URL to the avatar for the desktop build. Should be 24x24, ideally + an SVG. + 1. `url`: An HTTP URL for where to send the user to download the desktop build. +1. `mobileBuilds`: Used to alter promotional links to the mobile app. By default the + builds are considered available and accessible from https://element.io. This config + option is typically used in a context of encouraging the user to try the mobile app + instead of a mobile/incompatible browser. + 1. `ios`: The URL to the iOS build. If `null`, it will be assumed to be not available. + If not set, the default element.io builds will be used. + 1. `android`: The URL to the Android build. If `null`, it will be assumed to be not available. + If not set, the default element.io builds will be used. + 1. `fdroid`: The URL to the FDroid build. If `null`, it will be assumed to be not available. + If not set, the default element.io builds will be used. +1. `mobileGuideToast`: Whether to show a toast a startup which nudges users on + iOS and Android towards the native mobile apps. The toast redirects to the + mobile guide if they accept. Defaults to false. +1. `audioStreamUrl`: If supplied, show an option on Jitsi widgets to stream + audio using Jitsi's live streaming feature. This option is experimental and + may be removed at any time without notice. +1. `voip`: Behaviour related to calls + 1. `obeyAssertedIdentity`: If set, MSC3086 asserted identity messages sent + on VoIP calls will cause the call to appear in the room corresponding to the + asserted identity. This *must* only be set in trusted environments. Note that `index.html` also has an og:image meta tag that is set to an image -hosted on riot.im. This is the image used if links to your copy of Riot -appear in some websites like Facebook, and indeed Riot itself. This has to be +hosted on riot.im. This is the image used if links to your copy of Element +appear in some websites like Facebook, and indeed Element itself. This has to be static in the HTML and an absolute URL (and HTTP rather than HTTPS), so it's not possible for this to be an option in config.json. If you'd like to change -it, you can build Riot, but run +it, you can build Element, but run `RIOT_OG_IMAGE_URL="http://example.com/logo.png" yarn build`. Alternatively, you can edit the `og:image` meta tag in `index.html` directly -each time you download a new version of Riot. +each time you download a new version of Element. Identity servers ================ @@ -107,10 +154,10 @@ The identity server is used for inviting other users to a room via third party identifiers like emails and phone numbers. It is not used to store your password or account information. -As of Riot 1.4.0, all identity server functions are optional and you are +As of Element 1.4.0, all identity server functions are optional and you are prompted to agree to terms before data is sent to the identity server. -Riot will check multiple sources when looking for an identity server to use in +Element will check multiple sources when looking for an identity server to use in the following order of preference: 1. The identity server set in the user's account data @@ -120,28 +167,56 @@ the following order of preference: login 3. The identity server provided by the Riot config file -If none of these sources have an identity server set, then Riot will prompt the +If none of these sources have an identity server set, then Element will prompt the user to set an identity server first when attempting to use features that require one. -Currently the only two public identity servers are https://vector.im and +Currently, the only two public identity servers are https://vector.im and https://matrix.org, however in the future identity servers will be decentralised. Desktop app configuration ========================= -To run multiple instances of the desktop app for different accounts, you can -launch the executable with the `--profile` argument followed by a unique -identifier, e.g `riot-web --profile Work` for it to run a separate profile and -not interfere with the default one. +See https://github.com/vector-im/element-desktop#user-specified-configjson -Alternatively, a custom location for the profile data can be specified using the -`--profile-dir` flag followed by the desired path. +UI Features +=========== -+ `%APPDATA%\$NAME\config.json` on Windows -+ `$XDG_CONFIG_HOME\$NAME\config.json` or `~/.config/$NAME/config.json` on Linux -+ `~Library/Application Support/$NAME/config.json` on macOS +Parts of the UI can be disabled using UI features. These are settings which appear +under `settingDefaults` and can only be `true` (default) or `false`. When `false`, +parts of the UI relating to that feature will be disabled regardless of the user's +preferences. -In the paths above, `$NAME` is typically `Riot`, unless you use `--profile -$PROFILE` in which case it becomes `Riot-$PROFILE`. +Currently, the following UI feature flags are supported: + +* `UIFeature.urlPreviews` - Whether URL previews are enabled across the entire application. +* `UIFeature.feedback` - Whether prompts to supply feedback are shown. +* `UIFeature.voip` - Whether or not VoIP is shown readily to the user. When disabled, + Jitsi widgets will still work though they cannot easily be added. +* `UIFeature.widgets` - Whether or not widgets will be shown. +* `UIFeature.flair` - Whether or not community flair is shown in rooms. +* `UIFeature.communities` - Whether or not to show any UI related to communities. Implicitly + disables `UIFeature.flair` when disabled. +* `UIFeature.advancedSettings` - Whether or not sections titled "advanced" in room and + user settings are shown to the user. +* `UIFeature.shareQrCode` - Whether or not the QR code on the share room/event dialog + is shown. +* `UIFeature.shareSocial` - Whether or not the social icons on the share room/event dialog + are shown. +* `UIFeature.identityServer` - Whether or not functionality requiring an identity server + is shown. When disabled, the user will not be able to interact with the identity + server (sharing email addresses, 3PID invites, etc). +* `UIFeature.thirdPartyId` - Whether or not UI relating to third party identifiers (3PIDs) + is shown. Typically this is considered "contact information" on the homeserver, and is + not directly related to the identity server. +* `UIFeature.registration` - Whether or not the registration page is accessible. Typically + useful if accounts are managed externally. +* `UIFeature.passwordReset` - Whether or not the password reset page is accessible. Typically + useful if accounts are managed externally. +* `UIFeature.deactivate` - Whether or not the deactivate account button is accessible. Typically + useful if accounts are managed externally. +* `UIFeature.advancedEncryption` - Whether or not advanced encryption options are shown to the + user. +* `UIFeature.roomHistorySettings` - Whether or not the room history settings are shown to the user. + This should only be used if the room history visibility options are managed by the server. diff --git a/docs/customisations.md b/docs/customisations.md new file mode 100644 index 0000000000..39748ebcf6 --- /dev/null +++ b/docs/customisations.md @@ -0,0 +1,34 @@ +# Customisations + +Element Web and the React SDK support "customisation points" that can be used to +easily add custom logic specific to a particular deployment of Element Web. + +An example of this is the [security customisations +module](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/customisations/Security.ts). +This module in the React SDK only defines some empty functions and their types: +it does not do anything by default. + +To make use of these customisation points, you will first need to fork Element +Web so that you can add your own code. Even though the default module is part of +the React SDK, you can still override it from the Element Web layer: + +1. Copy the default customisation module to + `element-web/src/customisations/YourNameSecurity.ts` +2. Edit customisations points and make sure export the ones you actually want to + activate +3. Tweak the Element build process to use the customised module instead of the + default by adding this to the `additionalPlugins` array in `webpack.config.js`: + +```js +new webpack.NormalModuleReplacementPlugin( + /src[\/\\]customisations[\/\\]Security\.ts/, + path.resolve(__dirname, 'src/customisations/YourNameSecurity.ts'), +), +``` + +If we add more customisation modules in the future, we'll likely improve these +steps to remove the need for build changes like the above. + +By isolating customisations to their own module, this approach should remove the +chance of merge conflicts when updating your fork, and thus simplify ongoing +maintenance. diff --git a/docs/e2ee.md b/docs/e2ee.md new file mode 100644 index 0000000000..5e7d505c62 --- /dev/null +++ b/docs/e2ee.md @@ -0,0 +1,63 @@ +# End to end encryption by default + +By default, Element will create encrypted DM rooms if the user you are chatting with has keys uploaded on their account. +For private room creation, Element will default to encryption on but give you the choice to opt-out. + +## Disabling encryption by default + +Set the following on your homeserver's +`/.well-known/matrix/client` config: + +```json +{ + "io.element.e2ee": { + "default": false + } +} +``` + +# Secure backup + +By default, Element strongly encourages (but does not require) users to set up +Secure Backup so that cross-signing identity key and message keys can be +recovered in case of a disaster where you lose access to all active devices. + +## Requiring secure backup + +To require Secure Backup to be configured before Element can be used, set the +following on your homeserver's `/.well-known/matrix/client` config: + +```json +{ + "io.element.e2ee": { + "secure_backup_required": true + } +} +``` + +## Preferring setup methods + +By default, Element offers users a choice of a random key or user-chosen +passphrase when setting up Secure Backup. If a homeserver admin would like to +only offer one of these, you can signal this via the +`/.well-known/matrix/client` config, for example: + +```json +{ + "io.element.e2ee": { + "secure_backup_setup_methods": ["passphrase"] + } +} +``` + +The field `secure_backup_setup_methods` is an array listing the methods the +client should display. Supported values currently include `key` and +`passphrase`. If the `secure_backup_setup_methods` field is not present or +exists but does not contain any supported methods, Element will fallback to the +default value of: `["key", "passphrase"]`. + +# Compatibility + +The settings above were first proposed under a `im.vector.riot.e2ee` key, which +is now deprecated. Element will check for either key, preferring +`io.element.e2ee` if both exist. diff --git a/docs/feature-flags.md b/docs/feature-flags.md index 8d31afec10..1e7e5cce37 100644 --- a/docs/feature-flags.md +++ b/docs/feature-flags.md @@ -1,6 +1,6 @@ # Feature flags -When developing new features for Riot, we use feature flags to give us more +When developing new features for Element, we use feature flags to give us more flexibility and control over when and where those features are enabled. For example, flags make the following things possible: @@ -8,7 +8,7 @@ For example, flags make the following things possible: * Extended testing of a feature via labs on develop * Enabling features when ready instead of the first moment the code is released * Testing a feature with a specific set of users (by enabling only on a specific - Riot instance) + Element instance) The size of the feature controlled by a feature flag may vary widely: it could be a large project like reactions or a smaller change to an existing algorithm. @@ -35,7 +35,7 @@ clients commit to doing the associated clean up work once a feature stabilises. When starting work on a feature, we should create a matching feature flag: 1. Add a new - [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.js) + [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts) of the form: ```js "feature_cats": { @@ -47,66 +47,61 @@ When starting work on a feature, we should create a matching feature flag: ``` 2. Check whether the feature is enabled as appropriate: ```js - SettingsStore.isFeatureEnabled("feature_cats") + SettingsStore.getValue("feature_cats") ``` -3. Add the feature to the [set of labs on develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json): -```json - "features": { - "feature_cats": "labs" - }, -``` -4. Document the feature in the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md) +3. Document the feature in the [labs documentation](https://github.com/vector-im/element-web/blob/develop/docs/labs.md) With these steps completed, the feature is disabled by default, but can be -enabled on develop by interested users for testing. +enabled on develop and nightly by interested users for testing. Different features may have different deployment plans for when to enable where. The following lists a few common options. -## Enabling by default on develop +## Enabling by default on develop and nightly -Set the feature to `enable` in the [develop config](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json): +Set the feature to `true` in the +[develop](https://github.com/vector-im/element-web/blob/develop/element.io/develop/config.json) +and +[nightly](https://github.com/vector-im/element-desktop/blob/develop/element.io/nightly/config.json) +configs: ```json "features": { - "feature_cats": "enable" + "feature_cats": true }, ``` -## Enabling by default on staging and app +## Enabling by default on staging, app, and release -Set the feature to `enable` in the [app -config](https://github.com/vector-im/riot-web/blob/develop/riot.im/app/config.json). +Set the feature to `true` in the +[staging / app](https://github.com/vector-im/element-web/blob/develop/element.io/app/config.json) +and +[release](https://github.com/vector-im/element-desktop/blob/develop/element.io/release/config.json) +configs. + +**Note:** The above will only enable the feature for https://app.element.io and official Element +Desktop builds. It will not be enabled for self-hosted installed, custom desktop builds, etc. To +cover these cases, change the setting's `default` in `Settings.ts` to `true`. ## Feature deployed successfully -Once we're confident that a feature is working well, we should remove the flag: +Once we're confident that a feature is working well, we should remove or convert the flag. -1. Remove the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.js) -2. Remove all `isFeatureEnabled` lines that test for the feature's setting -3. Remove the feature from the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md) -4. Remove feature state from - [develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json) - and [app](https://github.com/vector-im/riot-web/blob/develop/riot.im/app/config.json) +If the feature is meant to be turned off/on by the user: +1. Remove `isFeature` from the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts) +2. Change the `default` to `true` (if desired). +3. Remove the feature from the [labs documentation](https://github.com/vector-im/element-web/blob/develop/docs/labs.md) +4. Celebrate! 🥳 + +If the feature is meant to be forced on (non-configurable): +1. Remove the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts) +2. Remove all `getValue` lines that test for the feature. +3. Remove the feature from the [labs documentation](https://github.com/vector-im/element-web/blob/develop/docs/labs.md) +4. If applicable, remove the feature state from + [develop](https://github.com/vector-im/element-web/blob/develop/element.io/develop/config.json), + [nightly](https://github.com/vector-im/element-desktop/blob/develop/element.io/nightly/config.json), + [staging / app](https://github.com/vector-im/element-web/blob/develop/element.io/app/config.json), + and + [release](https://github.com/vector-im/element-desktop/blob/develop/element.io/release/config.json) configs 5. Celebrate! 🥳 - -## Convert to a regular setting (optional) - -Sometimes we decide a feature should always be user-controllable as a setting -even after it has been fully deployed. In that case, we would craft a new, -regular setting: - -1. Remove the feature flag from - [settings](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.js) - and add a regular setting with the appropriate levels for your feature -2. Replace the `isFeatureEnabled` lines with `getValue` or similar calls - according to the [settings - docs](https://github.com/matrix-org/matrix-react-sdk/blob/develop/docs/settings.md) - (checking carefully, as we may want a different mix of code paths when the - feature is always present but gated by a setting) -3. Remove the feature from the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md) -4. Remove feature state from - [develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json) - and [app](https://github.com/vector-im/riot-web/blob/develop/riot.im/app/config.json) - configs diff --git a/docs/img/pr-checks.png b/docs/img/pr-checks.png new file mode 100644 index 0000000000..08d441c19d Binary files /dev/null and b/docs/img/pr-checks.png differ diff --git a/docs/jitsi-dev.md b/docs/jitsi-dev.md index 093fd79bef..d685a22154 100644 --- a/docs/jitsi-dev.md +++ b/docs/jitsi-dev.md @@ -1,10 +1,10 @@ # Jitsi wrapper developer docs -*If you're looking for information on how to set up Jitsi in your Riot, see +*If you're looking for information on how to set up Jitsi in your Element, see [jitsi.md](./jitsi.md) instead.* These docs are for developers wondering how the different conference buttons work -within Riot. If you're not a developer, you're probably looking for [jitsi.md](./jitsi.md). +within Element. If you're not a developer, you're probably looking for [jitsi.md](./jitsi.md). ## Brief introduction to widgets @@ -17,8 +17,8 @@ in the react-sdk), though for some widgets special integration can be done. v2 w have a `data` object which helps achieve that special integration, though v1 widgets are best iframed and left alone. -Widgets have a `postMessage` API they can use to interact with Riot, which also allows -Riot to interact with them. Typically this is most used by the sticker picker (an +Widgets have a `postMessage` API they can use to interact with Element, which also allows +Element to interact with them. Typically this is most used by the sticker picker (an account-level widget), though widgets like the Jitsi widget will request permissions to get 'stuck' into the room list during a conference. @@ -28,7 +28,7 @@ Widgets can be added with the `/addwidget ` command. Integration managers (like Scalar and Dimension) are accessible via the 4 squares in the top right of the room and provide a simple UI over top of bridges, bots, and other -stuff to plug into a room. They are a separate service to Riot and are thus iframed +stuff to plug into a room. They are a separate service to Element and are thus iframed in a dialog as well. They also have a `postMessage` API they can use to interact with the client to create things like widgets, give permissions to bridges, and generally set everything up for the integration the user is working with. @@ -51,7 +51,7 @@ over `postMessage`, even if they aren't going to be using the widget APIs). Widgets added with the `/addwidget` command will *not* be wrapped as they are not going through an integration manager. The widgets themselves *should* also work outside of -Riot. Widgets currently have a "pop out" button which opens them in a new tab and +Element. Widgets currently have a "pop out" button which opens them in a new tab and therefore have no connection back to Riot. ## Jitsi widgets from integration managers @@ -65,27 +65,27 @@ server they specified in their config.json - this is expected. Some integration managers allow the user to change the conference name while others will generate one for the user. -## Jitsi widgets generated by Riot itself +## Jitsi widgets generated by Element itself When the user clicks on the call buttons by the composer, the integration manager is -not involved in the slightest. Instead, Riot itself generates a widget event, this time +not involved in the slightest. Instead, Element itself generates a widget event, this time using the config.json parameters, and publishes that to the room. If there's only two people in the room, a plain WebRTC call is made instead of using a widget at all - these are defined in the Matrix specification. -The Jitsi widget created by Riot uses a local `jitsi.html` wrapper (or one hosted by -`https://riot.im/app` for desktop users or those on non-https domains) as the widget -`url`. The wrapper has some basic functionality for talking to Riot to ensure the +The Jitsi widget created by Element uses a local `jitsi.html` wrapper (or one hosted by +`https://app.element.io` for desktop users or those on non-https domains) as the widget +`url`. The wrapper has some basic functionality for talking to Element to ensure the required `postMessage` calls are fulfilled. **Note**: Per [jitsi.md](./jitsi.md) the `preferredDomain` can also come from the server's client .well-known data. -## The Jitsi wrapper in Riot +## The Jitsi wrapper in Element -Whenever Riot sees a Jitsi widget, it ditches the `url` and instead replaces it with +Whenever Element sees a Jitsi widget, it ditches the `url` and instead replaces it with its local wrapper, much like what it would do when creating a widget. However, instead -of using one from riot.im/app, it will use one local to the client instead. +of using one from [app.element.io](https://app.element.io), it will use one local to the client instead. The wrapper is used to provide a consistent experience to users, as well as being faster and less risky to load. The local wrapper URL is populated with the conference information diff --git a/docs/jitsi.md b/docs/jitsi.md index 1d2c5536a7..57d9f064cb 100644 --- a/docs/jitsi.md +++ b/docs/jitsi.md @@ -1,6 +1,6 @@ -# Jitsi in Riot +# Jitsi in Element -Riot uses [Jitsi](https://jitsi.org/) for conference calls, which provides options for +Element uses [Jitsi](https://jitsi.org/) for conference calls, which provides options for self-hosting your own server and supports most major platforms. 1:1 calls, or calls between you and one other person, do not use Jitsi. Instead, those @@ -14,13 +14,13 @@ will add a Jitsi widget which allows anyone in the room to join. Integration managers (available through the 4 squares in the top right of the room) may provide their own approaches for adding Jitsi widgets. -## Configuring Riot to use your self-hosted Jitsi server +## Configuring Element to use your self-hosted Jitsi server -Riot will use the Jitsi server that is embedded in the widget, even if it is not the +Element will use the Jitsi server that is embedded in the widget, even if it is not the one you configured. This is because conference calls must be held on a single Jitsi server and cannot be split over multiple servers. -However, you can configure Riot to *start* a conference with your Jitsi server by adding +However, you can configure Element to *start* a conference with your Jitsi server by adding to your [config](./config.md) the following: ```json { @@ -30,17 +30,18 @@ to your [config](./config.md) the following: } ``` -The default is `jitsi.riot.im` (a free service offered by Riot), and the demo site for +The default is `jitsi.riot.im` (a free service offered by Element), and the demo site for Jitsi uses `meet.jit.si` (also free). -Once you've applied the config change, refresh Riot and press the call button. This +Once you've applied the config change, refresh Element and press the call button. This should start a new conference on your Jitsi server. -**Note**: The widget URL will point to a `jitsi.html` page hosted by Riot. The Jitsi +**Note**: The widget URL will point to a `jitsi.html` page hosted by Element. The Jitsi domain will appear later in the URL as a configuration parameter. **Hint**: If you want everyone on your homeserver to use the same Jitsi server by -default, set the following on your homeserver's `/.well-known/matrix/client` config: +default, and you are using element-web 1.6 or newer, set the following on your homeserver's +`/.well-known/matrix/client` config: ```json { "im.vector.riot.jitsi": { @@ -49,9 +50,24 @@ default, set the following on your homeserver's `/.well-known/matrix/client` con } ``` -## Mobile app support +## Element Android -Currently the Riot mobile apps do not support custom Jitsi servers and will instead +Element Android (1.0.5+) supports custom Jitsi domains, similar to Element Web above. + +1:1 calls, or calls between you and one other person, do not use Jitsi. Instead, those +calls work directly between clients or via TURN servers configured on the respective +homeservers. + +For rooms with more than 2 joined members, when creating a Jitsi conference via call/video buttons of the toolbar (not via integration manager), Element Android will create a widget using the [wrapper](https://github.com/vector-im/element-web/blob/develop/docs/jitsi-dev.md) hosted on `app.element.io`. +The domain used is the one specified by the `/.well-known/matrix/client` endpoint, and if not present it uses the fallback defined in `config.xml` (jitsi.riot.im) + +For active Jitsi widgets in the room, a native Jitsi widget UI is created and points to the instance specified in the `domain` key of the widget content data. + +Element Android manages allowed native widgets permissions a bit differently than web widgets (as the data shared are different and never shared with the widget URL). For Jitsi widgets, permissions are requested only once per domain (consent saved in account data). + +## Element iOS + +Currently the Element mobile apps do not support custom Jitsi servers and will instead use the default `jitsi.riot.im` server. When users on the mobile apps join the call, they will be joining a different conference which has the same name, but not the same participants. This is a known bug and which needs to be fixed. diff --git a/docs/kubernetes.md b/docs/kubernetes.md new file mode 100644 index 0000000000..803a72e09d --- /dev/null +++ b/docs/kubernetes.md @@ -0,0 +1,187 @@ +Running in Kubernetes +===================== + +In case you would like to deploy element-web in a kubernetes cluster you can use +the provided Kubernetes example below as a starting point. Note that this example assumes the +Nginx ingress to be installed. + +Note that the content of the required `config.json` is defined inside this yaml because it needs +to be put in your Kubernetes cluster as a `ConfigMap`. + +So to use it you must create a file with this content as a starting point and modify it so it meets +the requirements of your environment. + +Then you can deploy it to your cluster with something like `kubectl apply -f my-element-web.yaml`. + + # This is an example of a POSSIBLE config for deploying a single element-web instance in Kubernetes + + # Use the element-web namespace to put it all in. + + apiVersion: v1 + kind: Namespace + metadata: + name: element-web + + --- + + # The config.json file is to be put into Kubernetes as a config file in such a way that + # the element web instance can read it. + # The code below shows how this can be done with the config.sample.json content. + + apiVersion: v1 + kind: ConfigMap + metadata: + name: element-config + namespace: element-web + data: + config.json: | + { + "default_server_config": { + "m.homeserver": { + "base_url": "https://matrix-client.matrix.org", + "server_name": "matrix.org" + }, + "m.identity_server": { + "base_url": "https://vector.im" + } + }, + "disable_custom_urls": false, + "disable_guests": false, + "disable_login_language_selector": false, + "disable_3pid_login": false, + "brand": "Element", + "integrations_ui_url": "https://scalar.vector.im/", + "integrations_rest_url": "https://scalar.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "bug_report_endpoint_url": "https://element.io/bugreports/submit", + "defaultCountryCode": "GB", + "showLabsSettings": false, + "features": { }, + "default_federate": true, + "default_theme": "light", + "roomDirectory": { + "servers": [ + "matrix.org" + ] + }, + "piwik": { + "url": "https://piwik.riot.im/", + "whitelistedHSUrls": ["https://matrix.org"], + "whitelistedISUrls": ["https://vector.im", "https://matrix.org"], + "siteId": 1 + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false, + "https://matrix-client.matrix.org": false + }, + "settingDefaults": { + "breadcrumbs": true + }, + "jitsi": { + "preferredDomain": "jitsi.riot.im" + } + } + + + --- + + # A deployment of the element-web for a single instance + + apiVersion: apps/v1 + kind: Deployment + metadata: + name: element + namespace: element-web + spec: + selector: + matchLabels: + app: element + replicas: 1 + template: + metadata: + labels: + app: element + spec: + containers: + - name: element + image: vectorim/element-web:latest + volumeMounts: + - name: config-volume + mountPath: /app/config.json + subPath: config.json + ports: + - containerPort: 80 + name: element + protocol: TCP + readinessProbe: + httpGet: + path: / + port: element + initialDelaySeconds: 2 + periodSeconds: 3 + livenessProbe: + httpGet: + path: / + port: element + initialDelaySeconds: 10 + periodSeconds: 10 + volumes: + - name: config-volume + configMap: + name: element-config + + --- + + # Wrap it all in a Service + + apiVersion: v1 + kind: Service + metadata: + name: element + namespace: element-web + spec: + selector: + app: element + ports: + - name: default + protocol: TCP + port: 80 + targetPort: 80 + + --- + + # An ingress definition to expose the service via a hostname + + apiVersion: networking.k8s.io/v1 + kind: Ingress + metadata: + name: element + namespace: element-web + annotations: + kubernetes.io/ingress.class: nginx + nginx.ingress.kubernetes.io/configuration-snippet: | + add_header X-Frame-Options SAMEORIGIN; + add_header X-Content-Type-Options nosniff; + add_header X-XSS-Protection "1; mode=block"; + add_header Content-Security-Policy "frame-ancestors 'none'"; + spec: + rules: + - host: element.example.nl + http: + paths: + - pathType: Prefix + path: / + backend: + service: + name: element + port: + number: 80 + + --- + diff --git a/docs/labs.md b/docs/labs.md index f7c0822a42..1051f29597 100644 --- a/docs/labs.md +++ b/docs/labs.md @@ -1,11 +1,29 @@ # Labs features -Some notes on the features you can enable by going to `Settings->Labs`. Not exhaustive, chat in -[#riot-web:matrix.org](https://matrix.to/#/#riot-web:matrix.org) for more information. +If Labs is enabled in the [Element config](config.md), you can enable some of these features by going +to `Settings->Labs`. This list is non-exhaustive and subject to change, chat in +[#element-web:matrix.org](https://matrix.to/#/#element-web:matrix.org) for more information. **Be warned! Labs features are not finalised, they may be fragile, they may change, they may be dropped. Ask in the room if you are unclear about any details here.** +## Submit Abuse Report to Moderators [MSC3215](https://github.com/matrix-org/matrix-doc/pull/3215) support (`feature_report_to_moderators`) + +A new version of the "Report" dialog that lets users send abuse reports directly to room moderators, +if the room supports it. + +## Matrix Spaces [MSC1772](https://github.com/matrix-org/matrix-doc/pull/1772) support (`feature_spaces`) + +Enables showing, using, creating, and managing spaces. Create Spaces from the all new Space Panel (to left of Room List). + +Incompatible with (will disable) `feature_custom_tags`, `feature_communities_v2_prototypes` and stable Communities/Groups support. + +Still in heavy development. + +## Render LaTeX maths in messages (`feature_latex_maths`) + +Enables rendering of LaTeX maths in messages using [KaTeX](https://katex.org/). LaTeX between single dollar-signs is interpreted as inline maths and double dollar-signs as display maths (i.e. centred on its own line). + ## Message pinning (`feature_pinning`) Allows you to pin messages in the room. To pin a message, use the 3 dots to the right of the message @@ -21,7 +39,7 @@ your avatar next to the message composer. An experimental approach for dealing with custom tags. Custom tags will appear in the bottom portion of the community filter panel. -Setting custom tags is not supported by Riot. +Setting custom tags is not supported by Element. ## Render simple counters in room header (`feature_state_counters`) @@ -48,7 +66,7 @@ That's it. Now should see your new counter under the header. ## Multiple integration managers (`feature_many_integration_managers`) -Exposes a way to access all the integration managers known to Riot. This is an implementation of [MSC1957](https://github.com/matrix-org/matrix-doc/pull/1957). +Exposes a way to access all the integration managers known to Element. This is an implementation of [MSC1957](https://github.com/matrix-org/matrix-doc/pull/1957). ## New ways to ignore people (`feature_mjolnir`) @@ -66,21 +84,8 @@ An implementation of [MSC2241](https://github.com/matrix-org/matrix-doc/pull/224 This also includes a new implementation of the user & member info panel, designed to share more code between showing community members & room members. Built on top of this new panel is also a new UX for verification from the member panel. -## Cross-signing (in development) (`feature_cross_signing`) - -Cross-signing ([MSC1756](https://github.com/matrix-org/matrix-doc/pull/1756)) -improves the device verification experience by allowing you to verify a user -instead of verifying each of their devices. - -This feature is still in development and will be landing in several chunks. - -## Event indexing and E2EE search support using Seshat (`feature_event_indexing`) - -Adds support for search in E2E encrypted rooms. This enables an event indexer -that downloads, stores, and indexes room messages for E2E encrypted rooms. - -The existing search will transparently work for encrypted rooms just like it -does for non-encrypted. +The setting will be removed in a future release, enabling it non-optionally for +all users. ## Bridge info tab (`feature_bridge_state`) @@ -94,16 +99,41 @@ tab as the single source of truth just yet. This adds a presence indicator in the room list next to DM rooms where the other person is online. -## Show padlocks on invite only rooms (`feature_invite_only_padlocks`) - -This adds padlocks to room list tiles and room header for invite only rooms. -This feature flag (unlike most) is enabled by default. - ## Custom themes (`feature_custom_themes`) -Custom themes are possible through Riot's [theme support](./theming.md), though -normally these themes need to be defined in the config for Riot. This labs flag +Custom themes are possible through Element's [theme support](./theming.md), though +normally these themes need to be defined in the config for Element. This labs flag adds an ability for end users to add themes themselves by using a URL to the JSON theme definition. -For some sample themes, check out [aaronraimist/riot-web-themes](https://github.com/aaronraimist/riot-web-themes). +For some sample themes, check out [aaronraimist/element-themes](https://github.com/aaronraimist/element-themes). + +## Message preview tweaks + +To enable message previews for reactions in all rooms, enable `feature_roomlist_preview_reactions_all`. +To enable message previews for reactions in DMs, enable `feature_roomlist_preview_reactions_dms`, ignored when it is enabled for all rooms. + +## Communities v2 prototyping (`feature_communities_v2_prototypes`) [In Development] + +**This is a highly experimental implementation for parts of the communities v2 experience.** It does not +represent what communities v2 will look/feel like and can/will change without notice. Due to the early +stages this feature is in and the requirement for a compatible homeserver, we will not be accepting issues +or feedback for this functionality at this time. + +## Dehydrated devices (`feature_dehydration`) + +Allows users to receive encrypted messages by creating a device that is stored +encrypted on the server, as described in [MSC2697](https://github.com/matrix-org/matrix-doc/pull/2697). + +## Voice messages (`feature_voice_messages`) + +Offers a way to send more time-sensitive information through the power of voice. When enabled, use the microphone +icon on the lower right to start recording your message. You will have a chance to review after you're done recording, +and if it sounds fine then send it off for the rest of the room to hear. + +Voice messages are automatically downloaded to ensure they are ready for playback as soon as possible. + +## Do not disturb (`feature_dnd`) + +Enables UI for turning on "do not disturb" mode for the current device. When DND mode is engaged, popups +and notification noises are suppressed. Not perfect, but can help reduce noise. diff --git a/docs/memory-profiles-and-leaks.md b/docs/memory-profiles-and-leaks.md index 3f8492d4d1..49acd0fdba 100644 --- a/docs/memory-profiles-and-leaks.md +++ b/docs/memory-profiles-and-leaks.md @@ -1,6 +1,6 @@ ## Memory leaks -Riot usually emits slow behaviour just before it is about to crash. Getting a +Element usually emits slow behaviour just before it is about to crash. Getting a memory snapshot (below) just before that happens is ideal in figuring out what is going wrong. @@ -14,14 +14,14 @@ this happens though so we can try and narrow down what might have gone wrong. ## Memory profiles/snapshots When investigating memory leaks/problems it's usually important to compare snapshots -from different points in the Riot session lifecycle. Most importantly, a snapshot +from different points in the Element session lifecycle. Most importantly, a snapshot to establish the baseline or "normal" memory usage is useful. Taking a snapshot -roughly 30-60 minutes after starting Riot is a good time to establish "normal" +roughly 30-60 minutes after starting Element is a good time to establish "normal" memory usage for the app - anything after that is at risk of hiding the memory leak and anything newer is still in the warmup stages of the app. **Memory profiles can contain sensitive information.** If you are submitting a memory -profile to us for debugging purposes, please pick the appropriate Riot developer and +profile to us for debugging purposes, please pick the appropriate Element developer and send them over an encrypted private message. *Do not share your memory profile in public channels or with people you do not trust.* @@ -42,7 +42,7 @@ While the profile is in progress, the tab might be frozen or unresponsive. 1. Press CTRL+SHIFT+I (I as in eye). 2. Click the Memory tab. -3. Select "Heap Snapshot" and the riot.im VM instance (not the indexeddb one). +3. Select "Heap Snapshot" and the app.element.io VM instance (not the indexeddb one). 4. Click "Take Snapshot". 5. Wait a bit (coffee is a good option). 6. When the save button appears on the left side of the panel, click it to save the diff --git a/docs/native-node-modules.md b/docs/native-node-modules.md index 8daa51f93e..eaf84ecae9 100644 --- a/docs/native-node-modules.md +++ b/docs/native-node-modules.md @@ -1,60 +1,3 @@ # Native Node Modules -For some features, the desktop version of Riot can make use of native Node -modules. These allow Riot to integrate with the desktop in ways that a browser -cannot. - -While native modules enable powerful new features, they must be complied for -each operating system. For official Riot releases, we will always build these -modules from source to ensure we can trust the compiled output. In the future, -we may offer a pre-compiled path for those who want to use these features in a -custom build of Riot without installing the various build tools required. - -Do note that compiling a module for a particular operating system -(Linux/macOS/Windows) will need to be done on that operating system. -Cross-compiling from a host OS for a different target OS may be possible, but -we don't support this flow with Riot dependencies at this time. - -At the moment, we need to make some changes to the Riot release process before -we can support native Node modules at release time, so these features are -currently disabled by default until that is resolved. The following sections -explain the manual steps you can use with a custom build of Riot to enable -these features if you'd like to try them out. - -## Adding Seshat for search in E2E encrypted rooms - -Seshat is a native Node module that adds support for local event indexing and -full text search in E2E encrypted rooms. - -Since Seshat is written in Rust, the Rust compiler and related tools need to be -installed before installing Seshat itself. To install Rust please consult the -official Rust [documentation](https://www.rust-lang.org/tools/install). - -Seshat also depends on the SQLCipher library to store its data in encrypted form -on disk. You'll need to install it via your OS package manager. - -After installing the Rust compiler and SQLCipher, Seshat support can be added -using yarn inside the `electron_app/` directory: - - yarn add matrix-seshat - -You will have to rebuild the native libraries against electron's version of -of node rather than your system node, using the `electron-build-env` tool. -This is also needed to when pulling in changes to Seshat using `yarn link`. -Again from the `electron_app/` directory: - - yarn add electron-build-env - -Recompiling Seshat itself can be done like so: - - yarn run electron-build-env -- --electron 6.1.1 -- neon build matrix-seshat --release - -Please make sure to include all the `--` as well as the `--release` command line -switch at the end. Modify your electron version accordingly depending on the -version that is installed on your system. - -After this is done the Electron version of Riot can be run from the main folder -as usual using: - - yarn electron - +This documentation moved to the [`element-desktop`](https://github.com/vector-im/element-desktop/blob/develop/docs/native-node-modules.md) repository. diff --git a/docs/pr-previews.md b/docs/pr-previews.md new file mode 100644 index 0000000000..dd1d6e220a --- /dev/null +++ b/docs/pr-previews.md @@ -0,0 +1,33 @@ +# Pull Request Previews + +Pull requests to the React SDK layer (and in the future other layers as well) +automatically set up a preview site with a full deployment of Element with the +changes from the pull request added in so that anyone can easily test and review +them. This is especially useful for checking visual and interactive changes. + +To access the preview site, scroll down to the bottom of the PR where the +various CI results are displayed: + +![Pull request: checks section](./img/pr-checks.png) + +The checks section could be collapsed at first, so you may need to click "Show +all checks" to reveal them. Look for an entry that mentions `deploy-preview`. It +may be at the end of the list, so you may need scroll a bit to see it. To access +the preview site, click the "Details" link in the deploy preview row. + +**Important:** Please always use test accounts when logging into preview sites, +as they may contain unreviewed and potentially dangerous code that could damage +your account, exfiltrate encryption keys, etc. + +## FAQs + +### Are preview sites created for pull requests from contributors? + +Yes, they are created for all PRs from any author. + +### Do preview sites expire after some time period? + +No, there is no expiry date, so they should remain accessible indefinitely, but +of course they obviously aren't meant to live beyond the development workflow, +so please don't rely on them for anything important. They may disappear at any +time without notice. diff --git a/docs/review.md b/docs/review.md index 7e0b413a5c..b84f422dca 100644 --- a/docs/review.md +++ b/docs/review.md @@ -1,7 +1,7 @@ # Review Guidelines The following summarises review guidelines that we follow for pull requests in -Riot Web and other supporting repos. These are just guidelines (not strict +Element Web and other supporting repos. These are just guidelines (not strict rules) and may be updated over time. ## Code Review @@ -14,6 +14,7 @@ When reviewing code, here are some things we look for and also things we avoid: * Performance * Accessibility * Security +* Quality via automated and manual testing * Comments and documentation where needed * Sharing knowledge of different areas among the team * Ensuring it's something we're comfortable maintaining for the long term @@ -34,6 +35,7 @@ When reviewing code, here are some things we look for and also things we avoid: * Reviewers should be explicit about required versus optional changes * Reviews are conversations and the PR author should feel comfortable discussing and pushing back on changes before making them +* Reviewers are encouraged to ask for tests where they believe it is reasonable * Core team should lead by example through their tone and language * Take the time to thank and point out good code changes * Using softer language like "please" and "what do you think?" goes a long way @@ -41,7 +43,7 @@ When reviewing code, here are some things we look for and also things we avoid: ### Workflow -* Authors should request review from the riot-web team by default (if someone on +* Authors should request review from the element-web team by default (if someone on the team is clearly the expert in an area, a direct review request to them may be more appropriate) * Reviewers should remove the team review request and request review from @@ -56,9 +58,46 @@ When reviewing code, here are some things we look for and also things we avoid: * Assign issues only when in progress to indicate to others what can be picked up +## Code Quality + +In the past, we have occasionally written different kinds of tests for +Element and the SDKs, but it hasn't been a consistent focus. Going forward, we'd +like to change that. + +* For new features, code reviewers will expect some form of automated testing to + be included by default +* For bug fixes, regression tests are of course great to have, but we don't want + to block fixes on this, so we won't require them at this time + +The above policy is not a strict rule, but instead it's meant to be a +conversation between the author and reviewer. As an author, try to think about +writing a test when making your next change. As a reviewer, try to think about +how you might test the area of code you are reviewing. If the reviewer agrees +it would be quite difficult to test some new feature, then it's okay for them to +accept the change without tests for now, but we'd eventually like to be more +strict about this further down the road. + +If you do spot areas that are quite hard to test today, please let us know in +[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org). We can +work on improving the app architecture and testing helpers so that future tests +are easier for everyone to write, but we won't know which parts are difficult +unless people shout when stumbling through them. + +We recognise that this testing policy will slow things down a bit, but overall +it should encourage better long-term health of the app and give everyone more +confidence when making changes as coverage increases over time. + +For changes guarded by a feature flag, we currently lean towards prioritising +our ability to evolve quickly using such flags and thus we will not currently +require tests to appear at the same time as the initial landing of features +guarded by flags, as long as (for new flagged features going forward) the +feature author understands that they are effectively deferring part of their +work (adding tests) until later and tests are expected to appear before the +feature can be enabled by default. + ## Design and Product Review -We want to ensure that all changes to Riot fit with our design and product +We want to ensure that all changes to Element fit with our design and product vision. We often request review from those teams so they can provide their perspective. @@ -71,12 +110,11 @@ functionality is: required (though may still be useful) since we can continue tweaking As it can be difficult to review design work from looking at just the changed -files in a PR, authors should be prepared for Design and / or Product teams to -request a link to an ad-hoc build of Riot (hosted anywhere) that can be used for -the review. In the future, we [hope to automate -this](https://github.com/vector-im/riot-web/issues/12624) for every PR. +files in a PR, a [preview site](./pr-previews.md) that includes your changes +will be added automatically so that anyone who's interested can try them out +easily. Before starting work on a feature, it's best to ensure your plan aligns well -with our vision for Riot. Please chat with the team in -[#riot-dev:matrix.org](https://matrix.to/#/#riot-dev:matrix.org) before you -start so we can ensure it's something we'd be willing to merge. +with our vision for Element. Please chat with the team in +[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) before +you start so we can ensure it's something we'd be willing to merge. diff --git a/docs/skinning thoughts.md b/docs/skinning thoughts.md index bbaf18a284..0466aaa035 100644 --- a/docs/skinning thoughts.md +++ b/docs/skinning thoughts.md @@ -5,14 +5,14 @@ matrix-react-sdk - base CSS - all the components needed to build a workable app (including the top layer) -riot-web: the riot skin - - riot-specific classes (e.g. login header/footer) - - riot-specific themes +element-web: the Element skin + - Element-specific classes (e.g. login header/footer) + - Element-specific themes - light - dark -i.e. the only things which should go into riot-web are bits which apply vector-specific skinning -specifically "Stuff that any other brand would not want to use. (e.g. riot logos, links, T&Cs)" +i.e. the only things which should go into element-web are bits which apply vector-specific skinning +specifically "Stuff that any other brand would not want to use. (e.g. Element logos, links, T&Cs)" - Questions: - Electron app? (should probably be a separate repo in its own right? but might as well go here for now) - index.html & index.js? (should be in matrix-react-sdk, given the SDK is useless without them?) @@ -21,7 +21,7 @@ ideally matrix-react-sdk itself should ship with a default skin which actually w status skin (can go in the same app for now) - has status theme - - which inherits from riot light theme + - which inherits from Element light theme - how do we share graphics between skins? - shove them into react-sdk, or... - guess we do ../../vector/img @@ -52,7 +52,7 @@ other changes: - skins/vector/themes/foo/css - skins/vector/themes/foo/img - skins/vector/themes/foo/fonts - - ideally riot-web would contain almost nothing but skins/vector directory. + - ideally element-web would contain almost nothing but skins/vector directory. - ability to entirely replace CSS rather than override it for a given theme - e.g. if we replace `Login.js` with `StatusLogin.js`, then we should similarly be able to replace `_Login.scss` with `_StatusLogin.scss`. @@ -64,5 +64,5 @@ random thoughts; ----------------- Immediate plan for Status: - * Implement it as a theme for the riot skin + * Implement it as a theme for the Element skin * Ideally move skins to a sensible level (possibly even including src?) diff --git a/docs/theming.md b/docs/theming.md index 19967067de..9b90fb2606 100644 --- a/docs/theming.md +++ b/docs/theming.md @@ -1,14 +1,14 @@ -Theming Riot +Theming Element ============ Themes are a very basic way of providing simple alternative look & feels to the -riot-web app via CSS & custom imagery. +Element app via CSS & custom imagery. They are *NOT* co be confused with 'skins', which describe apps which sit on top -of matrix-react-sdk - e.g. in theory Riot itself is a react-sdk skin. -As of Jan 2017, skins are not fully supported; riot is the only available skin. +of matrix-react-sdk - e.g. in theory Element itself is a react-sdk skin. +As of Jan 2017, skins are not fully supported; Element is the only available skin. -To define a theme for Riot: +To define a theme for Element: 1. Pick a name, e.g. `teal`. at time of writing we have `light` and `dark`. 2. Fork `src/skins/vector/css/themes/dark.scss` to be `teal.scss` @@ -41,6 +41,16 @@ eg. in config.json: { "name": "Electric Blue", "is_dark": false, + "fonts": { + "faces": [ + { + "font-family": "Inter", + "src": [{"url": "/fonts/Inter.ttf", "format": "ttf"}] + } + ], + "general": "Inter, sans", + "monospace": "'Courier New'" + }, "colors": { "accent-color": "#3596fc", "primary-color": "#368bd6", @@ -54,7 +64,9 @@ eg. in config.json: "timeline-background-color": "#ffffff", "timeline-text-color": "#2e2f32", "timeline-text-secondary-color": "#61708b", - "timeline-highlights-color": "#f3f8fd" + "timeline-highlights-color": "#f3f8fd", + "username-colors": ["#ff0000", ...] + "avatar-background-colors": ["#cc0000", ...] } }, { "name": "Deep Purple", @@ -78,3 +90,9 @@ eg. in config.json: ] } ``` + +`username-colors` is expected to contain 8 colors. `avatar-background-colors` is expected to contain 3 colors. Both values are optional and have fallbacks from the built-in theme. + +These are exposed as `--username-colors_0`, ... and `--avatar-background-colors_0`, ... respectively in CSS. + +All properties in `fonts` are optional, and will default to the standard Riot fonts. diff --git a/docs/translating-dev.md b/docs/translating-dev.md index ae5735e8af..1653b8c615 100644 --- a/docs/translating-dev.md +++ b/docs/translating-dev.md @@ -1,4 +1,4 @@ -# How to translate riot-web (Dev Guide) +# How to translate Element (Dev Guide) ## Requirements @@ -6,7 +6,7 @@ - Including up-to-date versions of matrix-react-sdk and matrix-js-sdk - Latest LTS version of Node.js installed - Be able to understand English -- Be able to understand the language you want to translate riot-web into +- Be able to understand the language you want to translate Element into ## Translating strings vs. marking strings for translation diff --git a/docs/translating.md b/docs/translating.md index 5cfd9eaadd..cdfb48f25e 100644 --- a/docs/translating.md +++ b/docs/translating.md @@ -1,32 +1,32 @@ -# How to translate riot-web +# How to translate Element ## Requirements - Web Browser - Be able to understand English -- Be able to understand the language you want to translate riot-web into +- Be able to understand the language you want to translate Element into -## Step 0: Join #riotweb-translations:matrix.org +## Step 0: Join #element-translations:matrix.org -1. Come and join https://matrix.to/#/#riotweb-translations:matrix.org +1. Come and join https://matrix.to/#/#element-translations:matrix.org 2. Read scrollback and/or ask if anyone else is working on your language, and co-ordinate if needed. In general little-or-no coordination is needed though :) ## Step 1: Preparing your Weblate Profile -1. Head to https://translate.riot.im and register either via Github or email +1. Head to https://translate.element.io and register either via Github or email 2. After registering check if you got an email to verify your account and click the link (if there is none head to step 1.4) 3. Log into weblate -4. Head to https://translate.riot.im/accounts/profile/ and select the languages you know and maybe another language you know too. -6. Head to https://translate.riot.im/accounts/profile/#subscriptions and select Riot Web as Project +4. Head to https://translate.element.io/accounts/profile/ and select the languages you know and maybe another language you know too. +6. Head to https://translate.element.io/accounts/profile/#subscriptions and select Element Web as Project ## How to check if your language already is being translated -Go to https://translate.riot.im/projects/riot-web/ and visit the 2 sub-projects. +Go to https://translate.element.io/projects/element-web/ and visit the 2 sub-projects. If your language is listed go to Step 2a and if not go to Step 2b ## Step 2a: Helping on existing languages. -1. Head to one of the projects listed https://translate.riot.im/projects/riot-web/ +1. Head to one of the projects listed https://translate.element.io/projects/element-web/ 2. Click on the ``translate`` button on the right side of your language 3. Fill in the translations in the writeable field. You will see the original English string and the string of your second language above. @@ -34,7 +34,7 @@ Head to the explanations under Steb 2b ## Step 2b: Adding a new language -1. Go to one of the projects listed https://translate.riot.im/projects/riot-web/ +1. Go to one of the projects listed https://translate.element.io/projects/element-web/ 2. Click the ``Start new translation`` button at the bottom 3. Select a language 4. Start translating like in 2a.3 @@ -50,7 +50,7 @@ The yellow button has to be used if you are unsure about the translation but you ### What are "%(something)s"? -These things are variables that are expanded when displayed by Riot. They can be room names, usernames or similar. If you find one, you can move to the right place for your language, but not delete it as the variable will be missing if you do. +These things are variables that are expanded when displayed by Element. They can be room names, usernames or similar. If you find one, you can move to the right place for your language, but not delete it as the variable will be missing if you do. A special case is `%(urlStart)s` and `%(urlEnd)s` which are used to mark the beginning of a hyperlink (i.e. `` and ``. You must keep these markers surrounding the equivalent string in your language that needs to be hyperlinked. diff --git a/electron_app/build/entitlements.mac.plist b/electron_app/build/entitlements.mac.plist deleted file mode 100644 index 3fdab97494..0000000000 --- a/electron_app/build/entitlements.mac.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - com.apple.security.cs.allow-jit - - com.apple.security.cs.allow-unsigned-executable-memory - - - com.apple.security.cs.disable-library-validation - - - - com.apple.security.device.camera - - com.apple.security.device.audio-input - - - diff --git a/electron_app/build/icon.icns b/electron_app/build/icon.icns deleted file mode 100644 index eba95ecf4f..0000000000 Binary files a/electron_app/build/icon.icns and /dev/null differ diff --git a/electron_app/build/icon.ico b/electron_app/build/icon.ico deleted file mode 100644 index 1305b7dd9a..0000000000 Binary files a/electron_app/build/icon.ico and /dev/null differ diff --git a/electron_app/build/icons/128x128.png b/electron_app/build/icons/128x128.png deleted file mode 100644 index 9c52d6695b..0000000000 Binary files a/electron_app/build/icons/128x128.png and /dev/null differ diff --git a/electron_app/build/icons/16x16.png b/electron_app/build/icons/16x16.png deleted file mode 100644 index 7435c1b5be..0000000000 Binary files a/electron_app/build/icons/16x16.png and /dev/null differ diff --git a/electron_app/build/icons/24x24.png b/electron_app/build/icons/24x24.png deleted file mode 100644 index f484995e72..0000000000 Binary files a/electron_app/build/icons/24x24.png and /dev/null differ diff --git a/electron_app/build/icons/256x256.png b/electron_app/build/icons/256x256.png deleted file mode 100644 index f52d02c88b..0000000000 Binary files a/electron_app/build/icons/256x256.png and /dev/null differ diff --git a/electron_app/build/icons/48x48.png b/electron_app/build/icons/48x48.png deleted file mode 100644 index fcbcbc495f..0000000000 Binary files a/electron_app/build/icons/48x48.png and /dev/null differ diff --git a/electron_app/build/icons/512x512.png b/electron_app/build/icons/512x512.png deleted file mode 100644 index 801e1504db..0000000000 Binary files a/electron_app/build/icons/512x512.png and /dev/null differ diff --git a/electron_app/build/icons/64x64.png b/electron_app/build/icons/64x64.png deleted file mode 100644 index 4a86e56efe..0000000000 Binary files a/electron_app/build/icons/64x64.png and /dev/null differ diff --git a/electron_app/build/icons/96x96.png b/electron_app/build/icons/96x96.png deleted file mode 100644 index 8a998989fe..0000000000 Binary files a/electron_app/build/icons/96x96.png and /dev/null differ diff --git a/electron_app/build/install-spinner.gif b/electron_app/build/install-spinner.gif deleted file mode 100644 index 4a685294b6..0000000000 Binary files a/electron_app/build/install-spinner.gif and /dev/null differ diff --git a/electron_app/img/riot.ico b/electron_app/img/riot.ico deleted file mode 100644 index 1305b7dd9a..0000000000 Binary files a/electron_app/img/riot.ico and /dev/null differ diff --git a/electron_app/img/riot.png b/electron_app/img/riot.png deleted file mode 100644 index f52d02c88b..0000000000 Binary files a/electron_app/img/riot.png and /dev/null differ diff --git a/electron_app/package.json b/electron_app/package.json deleted file mode 100644 index 390b61d8d3..0000000000 --- a/electron_app/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "riot-web", - "productName": "Riot", - "main": "src/electron-main.js", - "version": "1.5.15", - "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", - "minimist": "^1.2.0", - "png-to-ico": "^1.0.2" - } -} diff --git a/electron_app/riot.im/New_Vector_Ltd.pem b/electron_app/riot.im/New_Vector_Ltd.pem deleted file mode 100644 index 1a34127210..0000000000 --- a/electron_app/riot.im/New_Vector_Ltd.pem +++ /dev/null @@ -1,34 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIF0jCCBLqgAwIBAgIRAISYBqZi3VvCUeSfHXF+cbwwDQYJKoZIhvcNAQELBQAw -gZExCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO -BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTcwNQYD -VQQDEy5DT01PRE8gUlNBIEV4dGVuZGVkIFZhbGlkYXRpb24gQ29kZSBTaWduaW5n -IENBMB4XDTE3MDgyMzAwMDAwMFoXDTIwMDgyMjIzNTk1OVowgdgxETAPBgNVBAUT -CDEwODczNjYxMRMwEQYLKwYBBAGCNzwCAQMTAkdCMR0wGwYDVQQPExRQcml2YXRl -IE9yZ2FuaXphdGlvbjELMAkGA1UEBhMCR0IxETAPBgNVBBEMCFdDMVIgNEFHMQ8w -DQYDVQQIDAZMb25kb24xDzANBgNVBAcMBkxvbmRvbjEbMBkGA1UECQwSMjYgUmVk -IExpb24gU3F1YXJlMRcwFQYDVQQKDA5OZXcgVmVjdG9yIEx0ZDEXMBUGA1UEAwwO -TmV3IFZlY3RvciBMdGQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7 -X0HP3oM/SVr6PboD03ndtYTONZDcJ/GJ3EyYi6UNrcbKjuDHwPktx9hjAhNjcVkG -lmuTEPluPj9DbvjaTrers0cQsAS1vJ0RHjLfA93Flg1ys9Q6OThUMw77FtFPtiJU -z5cSYzfFAhn/4dv7BcgGptn+Mv/8CaTu+RUZJUgoSlRWcT1TREmxkzWotbblqsHO -zjDmUg20tL5/qpt6BSWsNespf5udKQFXMtqkczBcLvBLmql0vurVcQy8BibB+Q89 -QKwRzwLgaIa7O8WEssFcW8uJe9s0SNtUy8ehbuoSxpA/DbHFwsiDbNA78vp7HrqM -qY6t6OIgLtDYBFCfe/btAgMBAAGjggHaMIIB1jAfBgNVHSMEGDAWgBTfj/MgDOnK -pgTYW1g3Kj2rRtyDSTAdBgNVHQ4EFgQUH+mDOdRkF3bYDxCWEaGB4lxiCxcwDgYD -VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMw -EQYJYIZIAYb4QgEBBAQDAgQQMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQYBMCsw -KQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMFUGA1Ud -HwROMEwwSqBIoEaGRGh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0NPTU9ET1JTQUV4 -dGVuZGVkVmFsaWRhdGlvbkNvZGVTaWduaW5nQ0EuY3JsMIGGBggrBgEFBQcBAQR6 -MHgwUAYIKwYBBQUHMAKGRGh0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9ET1JT -QUV4dGVuZGVkVmFsaWRhdGlvbkNvZGVTaWduaW5nQ0EuY3J0MCQGCCsGAQUFBzAB -hhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wJgYDVR0RBB8wHaAbBggrBgEFBQcI -A6APMA0MC0dCLTEwODczNjYxMA0GCSqGSIb3DQEBCwUAA4IBAQBJ2aH4aixh0aiz -4WKlK+LMVLHpQ2POE3FZYNpAW7o1q2YDGEADXdGrygPE9NCGNBXKo0CAemCYNWfX -Ov/jdoiMfeqW3vrZ66oEy8OqbvJSwK1xmomWuYw3wYPWcPVG+YbWYD2CGdQu8jTz -fzAJCpvAuY3Wji3fQjiecAC7JCSB4fBHa0ALJOmiSqKQUUpkXs5kW7O0lPBnHzNF -2tQGltXMSIrq1QfFtcreMyKlwDOxPIh360dv5aHhaeSRDRKxq7uq5ikQF2gjKx4k -ieg2HRbAW6fVPpFr4zRS5umpeZV3i06i11VQQPS/mA/OBEXyaqzx4mr6B7U6ptrp -jMqiUv2w ------END CERTIFICATE----- diff --git a/electron_app/riot.im/README b/electron_app/riot.im/README deleted file mode 100644 index 8e463c25ec..0000000000 --- a/electron_app/riot.im/README +++ /dev/null @@ -1,6 +0,0 @@ -This directory contains the config file for the official riot.im distribution -of Riot Desktop. - -You probably do not want to build with this config unless you're building the -official riot.im distribution, or you'll find your builds will replace -themselves with the riot.im build. diff --git a/electron_app/riot.im/config.json b/electron_app/riot.im/config.json deleted file mode 100644 index 85e2d223af..0000000000 --- a/electron_app/riot.im/config.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "update_base_url": "https://packages.riot.im/desktop/update/", - "default_server_name": "matrix.org", - "brand": "Riot", - "integrations_ui_url": "https://scalar.vector.im/", - "integrations_rest_url": "https://scalar.vector.im/api", - "integrations_widgets_urls": [ - "https://scalar.vector.im/_matrix/integrations/v1", - "https://scalar.vector.im/api", - "https://scalar-staging.vector.im/_matrix/integrations/v1", - "https://scalar-staging.vector.im/api", - "https://scalar-staging.riot.im/scalar/api" - ], - "hosting_signup_link": "https://modular.im/?utm_source=riot-web&utm_medium=web", - "bug_report_endpoint_url": "https://riot.im/bugreports/submit", - "roomDirectory": { - "servers": [ - "matrix.org" - ] - }, - "piwik": { - "url": "https://piwik.riot.im/", - "siteId": 1, - "policyUrl": "https://matrix.org/legal/riot-im-cookie-policy" - }, - "phasedRollOut": { - "feature_lazyloading": { - "offset": 1539684000000, - "period": 604800000 - } - }, - "features": { - "feature_lazyloading": "enable" - }, - "enable_presence_by_hs_url": { - "https://matrix.org": false, - "https://matrix-client.matrix.org": false - } -} diff --git a/electron_app/riot.im/env.sh b/electron_app/riot.im/env.sh deleted file mode 100644 index 0ee810521d..0000000000 --- a/electron_app/riot.im/env.sh +++ /dev/null @@ -1 +0,0 @@ -export OSSLSIGNCODE_SIGNARGS='-pkcs11module /Library/Frameworks/eToken.framework/Versions/Current/libeToken.dylib -pkcs11engine /usr/local/lib/engines/engine_pkcs11.so -certs electron_app/riot.im/New_Vector_Ltd.pem -key 0a3271cbc1ec0fd8afb37f6bbe0cd65ba08d3b4d -t http://timestamp.comodoca.com -verbose' diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js deleted file mode 100644 index 91258c6cfd..0000000000 --- a/electron_app/src/electron-main.js +++ /dev/null @@ -1,641 +0,0 @@ -/* -Copyright 2016 Aviral Dasgupta -Copyright 2016 OpenMarket Ltd -Copyright 2018, 2019 New Vector Ltd -Copyright 2017, 2019 Michael Telatynski <7t3chguy@gmail.com> - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -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. -*/ - -// Squirrel on windows starts the app with various flags -// as hooks to tell us when we've been installed/uninstalled -// etc. -const checkSquirrelHooks = require('./squirrelhooks'); -if (checkSquirrelHooks()) return; - -const argv = require('minimist')(process.argv, { - alias: {help: "h"}, -}); - -const {app, ipcMain, powerSaveBlocker, BrowserWindow, Menu, autoUpdater, protocol} = require('electron'); -const AutoLaunch = require('auto-launch'); -const path = require('path'); - -const tray = require('./tray'); -const vectorMenu = require('./vectormenu'); -const webContentsHandler = require('./webcontents-handler'); -const updater = require('./updater'); -const protocolInit = require('./protocol'); - -const windowStateKeeper = require('electron-window-state'); -const Store = require('electron-store'); - -const fs = require('fs'); -const afs = fs.promises; - -let Seshat = null; - -try { - Seshat = require('matrix-seshat'); -} catch (e) { - if (e.code === "MODULE_NOT_FOUND") { - console.log("Seshat isn't installed, event indexing is disabled."); - } else { - console.warn("Seshat unexpected error:", e); - } -} - -if (argv["help"]) { - console.log("Options:"); - console.log(" --profile-dir {path}: Path to where to store the profile."); - console.log(" --profile {name}: Name of alternate profile to use, allows for running multiple accounts."); - console.log(" --devtools: Install and use react-devtools and react-perf."); - console.log(" --no-update: Disable automatic updating."); - console.log(" --hidden: Start the application hidden in the system tray."); - console.log(" --help: Displays this help message."); - console.log("And more such as --proxy, see:" + - "https://electronjs.org/docs/api/chrome-command-line-switches#supported-chrome-command-line-switches"); - app.exit(); -} - -if (argv['profile-dir']) { - app.setPath('userData', argv['profile-dir']); -} else if (argv['profile']) { - app.setPath('userData', `${app.getPath('userData')}-${argv['profile']}`); -} - -let vectorConfig = {}; -try { - vectorConfig = require('../../webapp/config.json'); -} catch (e) { - // it would be nice to check the error code here and bail if the config - // is unparseable, but we get MODULE_NOT_FOUND in the case of a missing - // file or invalid json, so node is just very unhelpful. - // 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')); - - // If the local config has a homeserver defined, don't use the homeserver from the build - // config. This is to avoid a problem where Riot thinks there are multiple homeservers - // defined, and panics as a result. - const homeserverProps = ['default_is_url', 'default_hs_url', 'default_server_name', 'default_server_config']; - if (Object.keys(localConfig).find(k => homeserverProps.includes(k))) { - // Rip out all the homeserver options from the vector config - vectorConfig = Object.keys(vectorConfig) - .filter(k => !homeserverProps.includes(k)) - .reduce((obj, key) => {obj[key] = vectorConfig[key]; return obj;}, {}); - } - - vectorConfig = Object.assign(vectorConfig, localConfig); -} catch (e) { - // Could not load local config, this is expected in most cases. -} - -const eventStorePath = path.join(app.getPath('userData'), 'EventStore'); -const store = new Store({ name: "electron-config" }); - -let eventIndex = null; - -let mainWindow = null; -global.appQuitting = false; - -// It's important to call `path.join` so we don't end up with the packaged asar in the final path. -const iconFile = `riot.${process.platform === 'win32' ? 'ico' : 'png'}`; -const iconPath = path.join(__dirname, "..", "..", "img", iconFile); -const trayConfig = { - icon_path: iconPath, - brand: vectorConfig.brand || 'Riot', -}; - -// handle uncaught errors otherwise it displays -// stack traces in popup dialogs, which is terrible (which -// it will do any time the auto update poke fails, and there's -// no other way to catch this error). -// Assuming we generally run from the console when developing, -// this is far preferable. -process.on('uncaughtException', function(error) { - console.log('Unhandled exception', error); -}); - -let focusHandlerAttached = false; -ipcMain.on('setBadgeCount', function(ev, count) { - app.setBadgeCount(count); - if (count === 0 && mainWindow) { - mainWindow.flashFrame(false); - } -}); - -ipcMain.on('loudNotification', function() { - if (process.platform === 'win32' && mainWindow && !mainWindow.isFocused() && !focusHandlerAttached) { - mainWindow.flashFrame(true); - mainWindow.once('focus', () => { - mainWindow.flashFrame(false); - focusHandlerAttached = false; - }); - focusHandlerAttached = true; - } -}); - -let powerSaveBlockerId = null; -ipcMain.on('app_onAction', function(ev, payload) { - switch (payload.action) { - case 'call_state': - if (powerSaveBlockerId !== null && powerSaveBlocker.isStarted(powerSaveBlockerId)) { - if (payload.state === 'ended') { - powerSaveBlocker.stop(powerSaveBlockerId); - powerSaveBlockerId = null; - } - } else { - if (powerSaveBlockerId === null && payload.state === 'connected') { - powerSaveBlockerId = powerSaveBlocker.start('prevent-display-sleep'); - } - } - break; - } -}); - -autoUpdater.on('update-downloaded', (ev, releaseNotes, releaseName, releaseDate, updateURL) => { - if (!mainWindow) return; - // forward to renderer - mainWindow.webContents.send('update-downloaded', { - releaseNotes, - releaseName, - releaseDate, - updateURL, - }); -}); - -ipcMain.on('ipcCall', async function(ev, payload) { - if (!mainWindow) return; - - const args = payload.args || []; - let ret; - - switch (payload.name) { - case 'getUpdateFeedUrl': - ret = autoUpdater.getFeedURL(); - break; - case 'getAutoLaunchEnabled': - ret = await launcher.isEnabled(); - break; - case 'setAutoLaunchEnabled': - if (args[0]) { - launcher.enable(); - } else { - launcher.disable(); - } - break; - case 'getMinimizeToTrayEnabled': - ret = tray.hasTray(); - break; - case 'setMinimizeToTrayEnabled': - if (args[0]) { - // Create trayIcon icon - tray.create(trayConfig); - } else { - tray.destroy(); - } - store.set('minimizeToTray', args[0]); - break; - case 'getAutoHideMenuBarEnabled': - ret = global.mainWindow.isMenuBarAutoHide(); - break; - case 'setAutoHideMenuBarEnabled': - store.set('autoHideMenuBar', args[0]); - global.mainWindow.setAutoHideMenuBar(args[0]); - global.mainWindow.setMenuBarVisibility(!args[0]); - break; - case 'getAppVersion': - ret = app.getVersion(); - break; - case 'focusWindow': - if (mainWindow.isMinimized()) { - mainWindow.restore(); - } else if (!mainWindow.isVisible()) { - mainWindow.show(); - } else { - mainWindow.focus(); - } - break; - case 'getConfig': - ret = vectorConfig; - break; - - default: - mainWindow.webContents.send('ipcReply', { - id: payload.id, - error: "Unknown IPC Call: " + payload.name, - }); - return; - } - - mainWindow.webContents.send('ipcReply', { - id: payload.id, - reply: ret, - }); -}); - -ipcMain.on('seshat', async function(ev, payload) { - if (!mainWindow) return; - - const sendError = (id, e) => { - const error = { - message: e.message - } - - mainWindow.webContents.send('seshatReply', { - id:id, - error: error - }); - } - - const args = payload.args || []; - let ret; - - switch (payload.name) { - case 'supportsEventIndexing': - if (Seshat === null) ret = false; - else ret = true; - break; - - case 'initEventIndex': - if (eventIndex === null) { - try { - await afs.mkdir(eventStorePath, {recursive: true}); - eventIndex = new Seshat(eventStorePath, {passphrase: "DEFAULT_PASSPHRASE"}); - } catch (e) { - sendError(payload.id, e); - return; - } - } - break; - - case 'closeEventIndex': - eventIndex = null; - break; - - case 'deleteEventIndex': - const deleteFolderRecursive = async(p) => { - for (let entry of await afs.readdir(p)) { - const curPath = path.join(p, entry); - await afs.unlink(curPath); - } - } - - try { - await deleteFolderRecursive(eventStorePath); - } catch (e) { - } - - break; - - case 'isEventIndexEmpty': - if (eventIndex === null) ret = true; - else ret = await eventIndex.isEmpty(); - break; - - case 'addEventToIndex': - try { - eventIndex.addEvent(args[0], args[1]); - } catch (e) { - sendError(payload.id, e); - return; - } - break; - - case 'commitLiveEvents': - try { - ret = await eventIndex.commit(); - } catch (e) { - sendError(payload.id, e); - return; - } - break; - - case 'searchEventIndex': - try { - ret = await eventIndex.search(args[0]); - } catch (e) { - sendError(payload.id, e); - return; - } - break; - - case 'addHistoricEvents': - if (eventIndex === null) ret = false; - else { - try { - ret = await eventIndex.addHistoricEvents( - args[0], args[1], args[2]); - } catch (e) { - sendError(payload.id, e); - return; - } - } - break; - - case 'getStats': - if (eventIndex === null) ret = 0; - else { - try { - ret = await eventIndex.getStats(); - } catch (e) { - sendError(payload.id, e); - return; - } - } - break; - - case 'removeCrawlerCheckpoint': - if (eventIndex === null) ret = false; - else { - try { - ret = await eventIndex.removeCrawlerCheckpoint(args[0]); - } catch (e) { - sendError(payload.id, e); - return; - } - } - break; - - case 'addCrawlerCheckpoint': - if (eventIndex === null) ret = false; - else { - try { - ret = await eventIndex.addCrawlerCheckpoint(args[0]); - } catch (e) { - sendError(payload.id, e); - return; - } - } - break; - - case 'loadFileEvents': - if (eventIndex === null) ret = []; - else { - try { - ret = await eventIndex.loadFileEvents(args[0]); - } catch (e) { - sendError(payload.id, e); - return; - } - } - break; - - case 'loadCheckpoints': - if (eventIndex === null) ret = []; - else { - try { - ret = await eventIndex.loadCheckpoints(); - } catch (e) { - ret = []; - } - } - break; - - default: - mainWindow.webContents.send('seshatReply', { - id: payload.id, - error: "Unknown IPC Call: " + payload.name, - }); - return; - } - - mainWindow.webContents.send('seshatReply', { - id: payload.id, - reply: ret, - }); -}); - -app.commandLine.appendSwitch('--enable-usermedia-screen-capturing'); - -const gotLock = app.requestSingleInstanceLock(); -if (!gotLock) { - console.log('Other instance detected: exiting'); - app.exit(); -} - -// do this after we know we are the primary instance of the app -protocolInit(); - -const launcher = new AutoLaunch({ - name: vectorConfig.brand || 'Riot', - isHidden: true, - mac: { - useLaunchAgent: true, - }, -}); - -// Register the scheme the app is served from as 'standard' -// which allows things like relative URLs and IndexedDB to -// work. -// Also mark it as secure (ie. accessing resources from this -// protocol and HTTPS won't trigger mixed content warnings). -protocol.registerSchemesAsPrivileged([{ - scheme: 'vector', - privileges: { - standard: true, - secure: true, - supportFetchAPI: true, - }, -}]); - -app.on('ready', () => { - if (argv['devtools']) { - try { - const { default: installExt, REACT_DEVELOPER_TOOLS, REACT_PERF } = require('electron-devtools-installer'); - installExt(REACT_DEVELOPER_TOOLS) - .then((name) => console.log(`Added Extension: ${name}`)) - .catch((err) => console.log('An error occurred: ', err)); - installExt(REACT_PERF) - .then((name) => console.log(`Added Extension: ${name}`)) - .catch((err) => console.log('An error occurred: ', err)); - } catch (e) { - console.log(e); - } - } - - protocol.registerFileProtocol('vector', (request, callback) => { - if (request.method !== 'GET') { - callback({error: -322}); // METHOD_NOT_SUPPORTED from chromium/src/net/base/net_error_list.h - return null; - } - - const parsedUrl = new URL(request.url); - if (parsedUrl.protocol !== 'vector:') { - callback({error: -302}); // UNKNOWN_URL_SCHEME - return; - } - if (parsedUrl.host !== 'vector') { - callback({error: -105}); // NAME_NOT_RESOLVED - return; - } - - const target = parsedUrl.pathname.split('/'); - - // path starts with a '/' - if (target[0] !== '') { - callback({error: -6}); // FILE_NOT_FOUND - return; - } - - if (target[target.length - 1] == '') { - target[target.length - 1] = 'index.html'; - } - - let baseDir; - // first part of the path determines where we serve from - if (target[1] === 'webapp') { - baseDir = __dirname + "/../../webapp"; - } else { - callback({error: -6}); // FILE_NOT_FOUND - return; - } - - // Normalise the base dir and the target path separately, then make sure - // the target path isn't trying to back out beyond its root - baseDir = path.normalize(baseDir); - - const relTarget = path.normalize(path.join(...target.slice(2))); - if (relTarget.startsWith('..')) { - callback({error: -6}); // FILE_NOT_FOUND - return; - } - const absTarget = path.join(baseDir, relTarget); - - callback({ - path: absTarget, - }); - }, (error) => { - if (error) console.error('Failed to register protocol'); - }); - - 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 { - console.log('No update_base_url is defined: auto update is disabled'); - } - - // Load the previous window state with fallback to defaults - const mainWindowState = windowStateKeeper({ - defaultWidth: 1024, - defaultHeight: 768, - }); - - const preloadScript = path.normalize(`${__dirname}/preload.js`); - mainWindow = global.mainWindow = new BrowserWindow({ - icon: iconPath, - show: false, - autoHideMenuBar: store.get('autoHideMenuBar', true), - - x: mainWindowState.x, - y: mainWindowState.y, - width: mainWindowState.width, - height: mainWindowState.height, - webPreferences: { - preload: preloadScript, - nodeIntegration: false, - sandbox: true, - enableRemoteModule: false, - // We don't use this: it's useful for the preload script to - // share a context with the main page so we can give select - // objects to the main page. The sandbox option isolates the - // main page from the background script. - contextIsolation: false, - webgl: false, - }, - }); - mainWindow.loadURL('vector://vector/webapp/'); - Menu.setApplicationMenu(vectorMenu); - - // Create trayIcon icon - if (store.get('minimizeToTray', true)) tray.create(trayConfig); - - mainWindow.once('ready-to-show', () => { - mainWindowState.manage(mainWindow); - - if (!argv['hidden']) { - mainWindow.show(); - } else { - // hide here explicitly because window manage above sometimes shows it - mainWindow.hide(); - } - }); - - mainWindow.on('closed', () => { - mainWindow = global.mainWindow = null; - }); - mainWindow.on('close', (e) => { - // If we are not quitting and have a tray icon then minimize to tray - if (!global.appQuitting && (tray.hasTray() || process.platform === 'darwin')) { - // On Mac, closing the window just hides it - // (this is generally how single-window Mac apps - // behave, eg. Mail.app) - e.preventDefault(); - mainWindow.hide(); - return false; - } - }); - - if (process.platform === 'win32') { - // Handle forward/backward mouse buttons in Windows - mainWindow.on('app-command', (e, cmd) => { - if (cmd === 'browser-backward' && mainWindow.webContents.canGoBack()) { - mainWindow.webContents.goBack(); - } else if (cmd === 'browser-forward' && mainWindow.webContents.canGoForward()) { - mainWindow.webContents.goForward(); - } - }); - } - - webContentsHandler(mainWindow.webContents); -}); - -app.on('window-all-closed', () => { - app.quit(); -}); - -app.on('activate', () => { - mainWindow.show(); -}); - -app.on('before-quit', () => { - global.appQuitting = true; - if (mainWindow) { - mainWindow.webContents.send('before-quit'); - } -}); - -app.on('second-instance', (ev, commandLine, workingDirectory) => { - // If other instance launched with --hidden then skip showing window - if (commandLine.includes('--hidden')) return; - - // Someone tried to run a second instance, we should focus our window. - if (mainWindow) { - if (!mainWindow.isVisible()) mainWindow.show(); - if (mainWindow.isMinimized()) mainWindow.restore(); - mainWindow.focus(); - } -}); - -// 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 -// a noop on other platforms). -app.setAppUserModelId('com.squirrel.riot-web.Riot'); diff --git a/electron_app/src/protocol.js b/electron_app/src/protocol.js deleted file mode 100644 index 153ff64084..0000000000 --- a/electron_app/src/protocol.js +++ /dev/null @@ -1,53 +0,0 @@ -/* -Copyright 2020 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -const {app} = require('electron'); - -const processUrl = (url) => { - if (!global.mainWindow) return; - console.log("Handling link: ", url); - global.mainWindow.loadURL(url.replace("riot://", "vector://")); -}; - -module.exports = () => { - // get all args except `hidden` as it'd mean the app would not get focused - // XXX: passing args to protocol handlers only works on Windows, - // so unpackaged deep-linking and --profile passing won't work on Mac/Linux - const args = process.argv.slice(1).filter(arg => arg !== "--hidden" && arg !== "-hidden"); - if (app.isPackaged) { - app.setAsDefaultProtocolClient('riot', process.execPath, args); - } else if (process.platform === 'win32') { // on Mac/Linux this would just cause the electron binary to open - // special handler for running without being packaged, e.g `electron .` by passing our app path to electron - app.setAsDefaultProtocolClient('riot', process.execPath, [app.getAppPath(), ...args]); - } - - if (process.platform === 'darwin') { - // Protocol handler for macos - app.on('open-url', function(ev, url) { - ev.preventDefault(); - processUrl(url); - }); - } else { - // Protocol handler for win32/Linux - app.on('second-instance', (ev, commandLine) => { - const url = commandLine[commandLine.length - 1]; - if (!url.startsWith("riot://")) return; - processUrl(url); - }); - } -}; - - diff --git a/electron_app/src/squirrelhooks.js b/electron_app/src/squirrelhooks.js deleted file mode 100644 index 728c9cfb2c..0000000000 --- a/electron_app/src/squirrelhooks.js +++ /dev/null @@ -1,51 +0,0 @@ -/* -Copyright 2017 OpenMarket Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -const path = require('path'); -const spawn = require('child_process').spawn; -const {app} = require('electron'); - -function runUpdateExe(args, done) { - // Invokes Squirrel's Update.exe which will do things for us like create shortcuts - // Note that there's an Update.exe in the app-x.x.x directory and one in the parent - // directory: we need to run the one in the parent directory, because it discovers - // information about the app by inspecting the directory it's run from. - const updateExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe'); - console.log(`Spawning '${updateExe}' with args '${args}'`); - spawn(updateExe, args, { - detached: true, - }).on('close', done); -} - -function checkSquirrelHooks() { - if (process.platform !== 'win32') return false; - - const cmd = process.argv[1]; - const target = path.basename(process.execPath); - if (cmd === '--squirrel-install' || cmd === '--squirrel-updated') { - runUpdateExe(['--createShortcut=' + target + ''], app.quit); - return true; - } else if (cmd === '--squirrel-uninstall') { - runUpdateExe(['--removeShortcut=' + target + ''], app.quit); - return true; - } else if (cmd === '--squirrel-obsolete') { - app.quit(); - return true; - } - return false; -} - -module.exports = checkSquirrelHooks; diff --git a/electron_app/src/tray.js b/electron_app/src/tray.js deleted file mode 100644 index 04aaa1f179..0000000000 --- a/electron_app/src/tray.js +++ /dev/null @@ -1,106 +0,0 @@ -/* -Copyright 2017 Karl Glatz -Copyright 2017 OpenMarket Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -const {app, Tray, Menu, nativeImage} = require('electron'); -const pngToIco = require('png-to-ico'); -const path = require('path'); -const fs = require('fs'); - -let trayIcon = null; - -exports.hasTray = function hasTray() { - return (trayIcon !== null); -}; - -exports.destroy = function() { - if (trayIcon) { - trayIcon.destroy(); - trayIcon = null; - } -}; - -exports.create = function(config) { - // no trays on darwin - if (process.platform === 'darwin' || trayIcon) return; - - const toggleWin = function() { - if (global.mainWindow.isVisible() && !global.mainWindow.isMinimized()) { - global.mainWindow.hide(); - } else { - if (global.mainWindow.isMinimized()) global.mainWindow.restore(); - if (!global.mainWindow.isVisible()) global.mainWindow.show(); - global.mainWindow.focus(); - } - }; - - const contextMenu = Menu.buildFromTemplate([ - { - label: `Show/Hide ${config.brand}`, - click: toggleWin, - }, - { type: 'separator' }, - { - label: 'Quit', - click: function() { - app.quit(); - }, - }, - ]); - - const defaultIcon = nativeImage.createFromPath(config.icon_path); - - trayIcon = new Tray(defaultIcon); - trayIcon.setToolTip(config.brand); - trayIcon.setContextMenu(contextMenu); - trayIcon.on('click', toggleWin); - - let lastFavicon = null; - global.mainWindow.webContents.on('page-favicon-updated', async function(ev, favicons) { - if (!favicons || favicons.length <= 0 || !favicons[0].startsWith('data:')) { - if (lastFavicon !== null) { - global.mainWindow.setIcon(defaultIcon); - trayIcon.setImage(defaultIcon); - lastFavicon = null; - } - return; - } - - // No need to change, shortcut - if (favicons[0] === lastFavicon) return; - lastFavicon = favicons[0]; - - let newFavicon = nativeImage.createFromDataURL(favicons[0]); - - // Windows likes ico's too much. - if (process.platform === 'win32') { - try { - const icoPath = path.join(app.getPath('temp'), 'win32_riot_icon.ico'); - fs.writeFileSync(icoPath, await pngToIco(newFavicon.toPNG())); - newFavicon = nativeImage.createFromPath(icoPath); - } catch (e) { - console.error("Failed to make win32 ico", e); - } - } - - trayIcon.setImage(newFavicon); - global.mainWindow.setIcon(newFavicon); - }); - - global.mainWindow.webContents.on('page-title-updated', function(ev, title) { - trayIcon.setToolTip(title); - }); -}; diff --git a/electron_app/src/updater.js b/electron_app/src/updater.js deleted file mode 100644 index 49fa4e0419..0000000000 --- a/electron_app/src/updater.js +++ /dev/null @@ -1,84 +0,0 @@ -const { app, autoUpdater, ipcMain } = require('electron'); - -const UPDATE_POLL_INTERVAL_MS = 60 * 60 * 1000; -const INITIAL_UPDATE_DELAY_MS = 30 * 1000; - -function installUpdate() { - // for some reason, quitAndInstall does not fire the - // before-quit event, so we need to set the flag here. - global.appQuitting = true; - autoUpdater.quitAndInstall(); -} - -function pollForUpdates() { - try { - autoUpdater.checkForUpdates(); - } catch (e) { - console.log('Couldn\'t check for update', e); - } -} - -module.exports = {}; -module.exports.start = function startAutoUpdate(updateBaseUrl) { - if (updateBaseUrl.slice(-1) !== '/') { - updateBaseUrl = updateBaseUrl + '/'; - } - try { - let url; - // For reasons best known to Squirrel, the way it checks for updates - // is completely different between macOS and windows. On macOS, it - // hits a URL that either gives it a 200 with some json or - // 204 No Content. On windows it takes a base path and looks for - // files under that path. - if (process.platform === 'darwin') { - // include the current version in the URL we hit. Electron doesn't add - // it anywhere (apart from the User-Agent) so it's up to us. We could - // (and previously did) just use the User-Agent, but this doesn't - // rely on NSURLConnection setting the User-Agent to what we expect, - // and also acts as a convenient cache-buster to ensure that when the - // app updates it always gets a fresh value to avoid update-looping. - url = `${updateBaseUrl}macos/?localVersion=${encodeURIComponent(app.getVersion())}`; - - } else if (process.platform === 'win32') { - url = `${updateBaseUrl}win32/${process.arch}/`; - } else { - // Squirrel / electron only supports auto-update on these two platforms. - // I'm not even going to try to guess which feed style they'd use if they - // implemented it on Linux, or if it would be different again. - console.log('Auto update not supported on this platform'); - } - - if (url) { - autoUpdater.setFeedURL(url); - // We check for updates ourselves rather than using 'updater' because we need to - // do it in the main process (and we don't really need to check every 10 minutes: - // every hour should be just fine for a desktop app) - // However, we still let the main window listen for the update events. - // We also wait a short time before checking for updates the first time because - // of squirrel on windows and it taking a small amount of time to release a - // lock file. - setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS); - setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS); - } - } catch (err) { - // will fail if running in debug mode - console.log('Couldn\'t enable update checking', err); - } -} - -ipcMain.on('install_update', installUpdate); -ipcMain.on('check_updates', pollForUpdates); - -function ipcChannelSendUpdateStatus(status) { - if (global.mainWindow) { - global.mainWindow.webContents.send('check_updates', status); - } -} - -autoUpdater.on('update-available', function() { - ipcChannelSendUpdateStatus(true); -}).on('update-not-available', function() { - ipcChannelSendUpdateStatus(false); -}).on('error', function(error) { - ipcChannelSendUpdateStatus(error.message); -}); diff --git a/electron_app/src/vectormenu.js b/electron_app/src/vectormenu.js deleted file mode 100644 index b6e00d509d..0000000000 --- a/electron_app/src/vectormenu.js +++ /dev/null @@ -1,144 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -const {app, shell, Menu} = require('electron'); - -// Menu template from http://electron.atom.io/docs/api/menu/, edited -const template = [ - { - label: '&Edit', - submenu: [ - { role: 'undo' }, - { role: 'redo' }, - { type: 'separator' }, - { role: 'cut' }, - { role: 'copy' }, - { role: 'paste' }, - { role: 'pasteandmatchstyle' }, - { role: 'delete' }, - { role: 'selectall' }, - ], - }, - { - label: '&View', - submenu: [ - { type: 'separator' }, - { role: 'resetzoom' }, - { role: 'zoomin', accelerator: 'CommandOrControl+=' }, - { role: 'zoomout' }, - { type: 'separator' }, - { - label: 'Preferences', - accelerator: 'Command+,', // Mac-only accelerator - click() { global.mainWindow.webContents.send('preferences'); }, - }, - { role: 'togglefullscreen' }, - { role: 'toggledevtools' }, - ], - }, - { - label: '&Window', - role: 'window', - submenu: [ - { role: 'minimize' }, - { role: 'close' }, - ], - }, - { - label: '&Help', - role: 'help', - submenu: [ - { - label: 'Riot Help', - click() { shell.openExternal('https://about.riot.im/help'); }, - }, - ], - }, -]; - -// macOS has specific menu conventions... -if (process.platform === 'darwin') { - // first macOS menu is the name of the app - const name = app.getName(); - template.unshift({ - label: name, - submenu: [ - { role: 'about' }, - { type: 'separator' }, - { - role: 'services', - submenu: [], - }, - { type: 'separator' }, - { role: 'hide' }, - { role: 'hideothers' }, - { role: 'unhide' }, - { type: 'separator' }, - { role: 'quit' }, - ], - }); - // Edit menu. - // This has a 'speech' section on macOS - template[1].submenu.push( - { type: 'separator' }, - { - label: 'Speech', - submenu: [ - { role: 'startspeaking' }, - { role: 'stopspeaking' }, - ], - }); - - // Window menu. - // This also has specific functionality on macOS - template[3].submenu = [ - { - label: 'Close', - accelerator: 'CmdOrCtrl+W', - role: 'close', - }, - { - label: 'Minimize', - accelerator: 'CmdOrCtrl+M', - role: 'minimize', - }, - { - label: 'Zoom', - role: 'zoom', - }, - { - type: 'separator', - }, - { - label: 'Bring All to Front', - role: 'front', - }, - ]; -} else { - template.unshift({ - label: '&File', - submenu: [ - // For some reason, 'about' does not seem to work on windows. - /*{ - role: 'about' - },*/ - { role: 'quit' }, - ], - }); -} - -module.exports = Menu.buildFromTemplate(template); - diff --git a/electron_app/src/webcontents-handler.js b/electron_app/src/webcontents-handler.js deleted file mode 100644 index 782d12e56b..0000000000 --- a/electron_app/src/webcontents-handler.js +++ /dev/null @@ -1,191 +0,0 @@ -const {clipboard, nativeImage, Menu, MenuItem, shell, dialog} = require('electron'); -const url = require('url'); -const fs = require('fs'); -const request = require('request'); - -const MAILTO_PREFIX = "mailto:"; - -const PERMITTED_URL_SCHEMES = [ - 'http:', - 'https:', - MAILTO_PREFIX, -]; - -function safeOpenURL(target) { - // openExternal passes the target to open/start/xdg-open, - // so put fairly stringent limits on what can be opened - // (for instance, open /bin/sh does indeed open a terminal - // with a shell, albeit with no arguments) - const parsedUrl = url.parse(target); - if (PERMITTED_URL_SCHEMES.indexOf(parsedUrl.protocol) > -1) { - // explicitly use the URL re-assembled by the url library, - // so we know the url parser has understood all the parts - // of the input string - const newTarget = url.format(parsedUrl); - shell.openExternal(newTarget); - } -} - -function onWindowOrNavigate(ev, target) { - // always prevent the default: if something goes wrong, - // we don't want to end up opening it in the electron - // app, as we could end up opening any sort of random - // url in a window that has node scripting access. - ev.preventDefault(); - safeOpenURL(target); -} - -function onLinkContextMenu(ev, params) { - let url = params.linkURL || params.srcURL; - - if (url.startsWith('vector://vector/webapp')) { - url = "https://riot.im/app/" + url.substring(23); - } - - const popupMenu = new Menu(); - // No point trying to open blob: URLs in an external browser: it ain't gonna work. - if (!url.startsWith('blob:')) { - popupMenu.append(new MenuItem({ - label: url, - click() { - safeOpenURL(url); - }, - })); - } - - let addSaveAs = false; - if (params.mediaType && params.mediaType === 'image' && !url.startsWith('file://')) { - popupMenu.append(new MenuItem({ - label: '&Copy image', - click() { - if (url.startsWith('data:')) { - clipboard.writeImage(nativeImage.createFromDataURL(url)); - } else { - ev.sender.copyImageAt(params.x, params.y); - } - }, - })); - - // We want the link to be ordered below the copy stuff, but don't want to duplicate - // the `if` statement, so use a flag. - addSaveAs = true; - } - - // No point offering to copy a blob: URL either - if (!url.startsWith('blob:')) { - // Special-case e-mail URLs to strip the `mailto:` like modern browsers do - if (url.startsWith(MAILTO_PREFIX)) { - popupMenu.append(new MenuItem({ - label: 'Copy email &address', - click() { - clipboard.writeText(url.substr(MAILTO_PREFIX.length)); - }, - })); - } else { - popupMenu.append(new MenuItem({ - label: 'Copy link &address', - click() { - clipboard.writeText(url); - }, - })); - } - } - - if (addSaveAs) { - popupMenu.append(new MenuItem({ - label: 'Sa&ve image as...', - click() { - const targetFileName = params.titleText || "image.png"; - const filePath = dialog.showSaveDialog({ - defaultPath: targetFileName, - }); - - if (!filePath) return; // user cancelled dialog - - try { - if (url.startsWith("data:")) { - fs.writeFileSync(filePath, nativeImage.createFromDataURL(url)); - } else { - request.get(url).pipe(fs.createWriteStream(filePath)); - } - } catch (err) { - console.error(err); - dialog.showMessageBox({ - type: "error", - title: "Failed to save image", - message: "The image failed to save", - }); - } - }, - })); - } - - // popup() requires an options object even for no options - popupMenu.popup({}); - ev.preventDefault(); -} - -function _CutCopyPasteSelectContextMenus(params) { - return [{ - role: 'cut', - label: 'Cu&t', - enabled: params.editFlags.canCut, - }, { - role: 'copy', - label: '&Copy', - enabled: params.editFlags.canCopy, - }, { - role: 'paste', - label: '&Paste', - enabled: params.editFlags.canPaste, - }, { - role: 'pasteandmatchstyle', - enabled: params.editFlags.canPaste, - }, { - role: 'selectall', - label: "Select &All", - enabled: params.editFlags.canSelectAll, - }]; -} - -function onSelectedContextMenu(ev, params) { - const items = _CutCopyPasteSelectContextMenus(params); - const popupMenu = Menu.buildFromTemplate(items); - - // popup() requires an options object even for no options - popupMenu.popup({}); - ev.preventDefault(); -} - -function onEditableContextMenu(ev, params) { - const items = [ - { role: 'undo' }, - { role: 'redo', enabled: params.editFlags.canRedo }, - { type: 'separator' }, - ].concat(_CutCopyPasteSelectContextMenus(params)); - - const popupMenu = Menu.buildFromTemplate(items); - - // popup() requires an options object even for no options - popupMenu.popup({}); - ev.preventDefault(); -} - - -module.exports = (webContents) => { - webContents.on('new-window', onWindowOrNavigate); - webContents.on('will-navigate', (ev, target) => { - if (target.startsWith("vector://")) return; - return onWindowOrNavigate(ev, target); - }); - - webContents.on('context-menu', function(ev, params) { - if (params.linkURL || params.srcURL) { - onLinkContextMenu(ev, params); - } else if (params.selectionText) { - onSelectedContextMenu(ev, params); - } else if (params.isEditable) { - onEditableContextMenu(ev, params); - } - }); -}; diff --git a/electron_app/yarn.lock b/electron_app/yarn.lock deleted file mode 100644 index eb4b54caa1..0000000000 --- a/electron_app/yarn.lock +++ /dev/null @@ -1,837 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@types/node@^9.4.0": - version "9.6.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.45.tgz#a9e5cfd026a3abaaf17e3c0318a470da9f2f178e" - integrity sha512-9scD7xI1kpIoMs3gVFMOWsWDyRIQ1AOZwe56i1CQPE6N/P4POYkn9UtW5F66t8C2AIoPtVfOFycQ2r11t3pcyg== - -ajv@^6.5.5: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" - integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -applescript@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/applescript/-/applescript-1.0.0.tgz#bb87af568cad034a4e48c4bdaf6067a3a2701317" - integrity sha1-u4evVoytA0pOSMS9r2Bno6JwExc= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -auto-launch@^5.0.1: - version "5.0.5" - resolved "https://registry.yarnpkg.com/auto-launch/-/auto-launch-5.0.5.tgz#d14bd002b1ef642f85e991a6195ff5300c8ad3c0" - integrity sha512-ppdF4mihhYzMYLuCcx9H/c5TUOCev8uM7en53zWVQhyYAJrurd2bFZx3qQVeJKF2jrc7rsPRNN5cD+i23l6PdA== - dependencies: - applescript "^1.0.0" - mkdirp "^0.5.1" - path-is-absolute "^1.0.0" - untildify "^3.0.2" - winreg "1.2.4" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -bignumber.js@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-2.4.0.tgz#838a992da9f9d737e0f4b2db0be62bb09dd0c5e8" - integrity sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg= - -bmp-js@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.0.3.tgz#64113e9c7cf1202b376ed607bf30626ebe57b18a" - integrity sha1-ZBE+nHzxICs3btYHvzBibr5XsYo= - -buffer-equal@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" - integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" - integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== - dependencies: - delayed-stream "~1.0.0" - -conf@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/conf/-/conf-2.2.0.tgz#ee282efafc1450b61e205372041ad7d866802d9a" - integrity sha512-93Kz74FOMo6aWRVpAZsonOdl2I57jKtHrNmxhumehFQw4X8Sk37SohNY11PG7Q8Okta+UnrVaI006WLeyp8/XA== - dependencies: - dot-prop "^4.1.0" - env-paths "^1.0.0" - make-dir "^1.0.0" - pkg-up "^2.0.0" - write-file-atomic "^2.3.0" - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" - integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= - -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== - dependencies: - is-obj "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -electron-store@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-2.0.0.tgz#1035cca2a95409d1f54c7466606345852450d64a" - integrity sha512-1WCFYHsYvZBqDsoaS0Relnz0rd81ZkBAI0Fgx7Nq2UWU77rSNs1qxm4S6uH7TCZ0bV3LQpJFk7id/is/ZgoOPA== - dependencies: - conf "^2.0.0" - -electron-window-state@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/electron-window-state/-/electron-window-state-4.1.1.tgz#6b34fdc31b38514dfec8b7c8f7b5d4addb67632d" - integrity sha1-azT9wxs4UU3+yLfI97XUrdtnYy0= - dependencies: - deep-equal "^1.0.1" - jsonfile "^2.2.3" - mkdirp "^0.5.1" - -env-paths@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" - integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= - -es-abstract@^1.5.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@^3.0.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" - integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM= - -exif-parser@^0.1.9: - version "0.1.12" - resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" - integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI= - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -file-type@^3.1.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" - integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -function-bind@^1.0.2, function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -global@~4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" - integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= - dependencies: - min-document "^2.19.0" - process "~0.5.1" - -graceful-fs@^4.1.11, graceful-fs@^4.1.6: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -ip-regex@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd" - integrity sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0= - -is-callable@^1.1.3, is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-function@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== - dependencies: - has-symbols "^1.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -jimp@^0.2.28: - version "0.2.28" - resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.2.28.tgz#dd529a937190f42957a7937d1acc3a7762996ea2" - integrity sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI= - dependencies: - bignumber.js "^2.1.0" - bmp-js "0.0.3" - es6-promise "^3.0.2" - exif-parser "^0.1.9" - file-type "^3.1.0" - jpeg-js "^0.2.0" - load-bmfont "^1.2.3" - mime "^1.3.4" - mkdirp "0.5.1" - pixelmatch "^4.0.0" - pngjs "^3.0.0" - read-chunk "^1.0.1" - request "^2.65.0" - stream-to-buffer "^0.1.0" - tinycolor2 "^1.1.2" - url-regex "^3.0.0" - -jpeg-js@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.2.0.tgz#53e448ec9d263e683266467e9442d2c5a2ef5482" - integrity sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII= - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -jsonfile@^2.2.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -load-bmfont@^1.2.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b" - integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g== - dependencies: - buffer-equal "0.0.1" - mime "^1.3.4" - parse-bmfont-ascii "^1.0.3" - parse-bmfont-binary "^1.0.5" - parse-bmfont-xml "^1.1.4" - phin "^2.9.1" - xhr "^2.0.1" - xtend "^4.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -mime-db@~1.38.0: - version "1.38.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" - integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.22" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" - integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== - dependencies: - mime-db "~1.38.0" - -mime@^1.3.4: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= - dependencies: - dom-walk "^0.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.2.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.3.tgz#3db5c0765545ab8637be71f333a104a965a9ca3f" - integrity sha512-+bMdgqjMN/Z77a6NlY/I3U5LlRDbnmaAk6lDveAPKwSpcPM4tKAuYsvYF8xjhOPXhOYGe/73vVLVez5PW+jqhw== - -mkdirp@0.5.1, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-keys@^1.0.12: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" - integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -parse-bmfont-ascii@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" - integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU= - -parse-bmfont-binary@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" - integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY= - -parse-bmfont-xml@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389" - integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ== - dependencies: - xml-parse-from-string "^1.0.0" - xml2js "^0.4.5" - -parse-headers@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.2.tgz#9545e8a4c1ae5eaea7d24992bca890281ed26e34" - integrity sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg== - dependencies: - for-each "^0.3.3" - string.prototype.trim "^1.1.2" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -phin@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" - integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pixelmatch@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" - integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ= - dependencies: - pngjs "^3.0.0" - -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - -png-to-ico@^1.0.2: - version "1.0.7" - resolved "https://registry.yarnpkg.com/png-to-ico/-/png-to-ico-1.0.7.tgz#9346b5f4d6fd7e94cb08fd49eeb585f501c3e5f2" - integrity sha512-heHiZjPFhVgLiuSG4C4wwKN9YPGLpPJvOfXRyI+cEJf0vPutjJ4XDaeI2f/hzTFs+2juihDw3pP8R5JtTuQTGg== - dependencies: - "@types/node" "^9.4.0" - jimp "^0.2.28" - minimist "^1.2.0" - -pngjs@^3.0.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" - integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== - -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= - -psl@^1.1.24: - version "1.1.31" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" - integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -read-chunk@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-1.0.1.tgz#5f68cab307e663f19993527d9b589cace4661194" - integrity sha1-X2jKswfmY/GZk1J9m1icrORmEZQ= - -request@^2.65.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -safe-buffer@^5.0.1, safe-buffer@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stream-to-buffer@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz#26799d903ab2025c9bd550ac47171b00f8dd80a9" - integrity sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk= - dependencies: - stream-to "~0.2.0" - -stream-to@~0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/stream-to/-/stream-to-0.2.2.tgz#84306098d85fdb990b9fa300b1b3ccf55e8ef01d" - integrity sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0= - -string.prototype.trim@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" - integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.0" - function-bind "^1.0.2" - -tinycolor2@^1.1.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" - integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -untildify@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" - integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA== - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -url-regex@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-3.2.0.tgz#dbad1e0c9e29e105dd0b1f09f6862f7fdb482724" - integrity sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ= - dependencies: - ip-regex "^1.0.1" - -uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -winreg@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.4.tgz#ba065629b7a925130e15779108cf540990e98d1b" - integrity sha1-ugZWKbepJRMOFXeRCM9UCZDpjRs= - -write-file-atomic@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9" - integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -xhr@^2.0.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" - integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ== - dependencies: - global "~4.3.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xml-parse-from-string@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" - integrity sha1-qQKekp09vN7RafPG4oI42VpdWig= - -xml2js@^0.4.5: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= - -xtend@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= diff --git a/riot.im/README b/element.io/README similarity index 51% rename from riot.im/README rename to element.io/README index 2186e48dee..140a3fc0c8 100644 --- a/riot.im/README +++ b/element.io/README @@ -1,11 +1,12 @@ This directory contains the config files and deployment scripts for the official -riot.im distribution of Riot Web at https://riot.im. +element.io distribution of Element Web. You probably do not want to build with this config unless you're building the -official riot.im distribution, but these files may be useful if you want to +official element.io distribution, but these files may be useful if you want to inspect the configuration used there. -Riot Desktop uses a separate config (see electron_app/riot.im/config.json). +Element Desktop uses a separate config (see +https://github.com/vector-im/element-desktop/tree/develop/element.io). Deployment scripts (such as app/deploy.py) are meant to be run on the web server -hosting the Riot installation. +hosting the Element installation. diff --git a/element.io/app/config.json b/element.io/app/config.json new file mode 100644 index 0000000000..5922fcf504 --- /dev/null +++ b/element.io/app/config.json @@ -0,0 +1,52 @@ +{ + "default_server_name": "matrix.org", + "brand": "Element", + "integrations_ui_url": "https://scalar.vector.im/", + "integrations_rest_url": "https://scalar.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web", + "bug_report_endpoint_url": "https://element.io/bugreports/submit", + "showLabsSettings": false, + "piwik": { + "url": "https://piwik.riot.im/", + "siteId": 1, + "policyUrl": "https://element.io/cookie-policy" + }, + "roomDirectory": { + "servers": [ + "matrix.org", + "gitter.im", + "libera.chat" + ] + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false, + "https://matrix-client.matrix.org": false + }, + "terms_and_conditions_links": [ + { + "url": "https://element.io/privacy", + "text": "Privacy Policy" + }, + { + "url": "https://element.io/cookie-policy", + "text": "Cookie Policy" + } + ], + "hostSignup": { + "brand": "Element Home", + "cookiePolicyUrl": "https://element.io/cookie-policy", + "domains": [ + "matrix.org" + ], + "privacyPolicyUrl": "https://element.io/privacy", + "termsOfServiceUrl": "https://element.io/terms-of-service", + "url": "https://ems.element.io/element-home/in-app-loader" + } +} diff --git a/riot.im/app/deploy.py b/element.io/app/deploy.py similarity index 99% rename from riot.im/app/deploy.py rename to element.io/app/deploy.py index 33aa0af017..a0e8d96dcb 100755 --- a/riot.im/app/deploy.py +++ b/element.io/app/deploy.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# download and unpack a riot-web tarball. +# download and unpack a element-web tarball. # # Allows `bundles` to be extracted to a common directory, and a link to # config.json to be added. diff --git a/riot.im/app/config.json b/element.io/develop/config.json similarity index 51% rename from riot.im/app/config.json rename to element.io/develop/config.json index 100051537e..58da5283db 100644 --- a/riot.im/app/config.json +++ b/element.io/develop/config.json @@ -1,6 +1,6 @@ { "default_server_name": "matrix.org", - "brand": "Riot", + "brand": "Element", "integrations_ui_url": "https://scalar.vector.im/", "integrations_rest_url": "https://scalar.vector.im/api", "integrations_widgets_urls": [ @@ -10,18 +10,19 @@ "https://scalar-staging.vector.im/api", "https://scalar-staging.riot.im/scalar/api" ], - "hosting_signup_link": "https://modular.im/?utm_source=riot-web&utm_medium=web", - "bug_report_endpoint_url": "https://riot.im/bugreports/submit", - "features": { - }, + "hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web", + "bug_report_endpoint_url": "https://element.io/bugreports/submit", + "showLabsSettings": true, "piwik": { "url": "https://piwik.riot.im/", "siteId": 1, - "policyUrl": "https://matrix.org/legal/riot-im-cookie-policy" + "policyUrl": "https://element.io/cookie-policy" }, "roomDirectory": { "servers": [ - "matrix.org" + "matrix.org", + "gitter.im", + "libera.chat" ] }, "enable_presence_by_hs_url": { @@ -30,12 +31,22 @@ }, "terms_and_conditions_links": [ { - "url": "https://riot.im/privacy", + "url": "https://element.io/privacy", "text": "Privacy Policy" }, { - "url": "https://matrix.org/legal/riot-im-cookie-policy", + "url": "https://element.io/cookie-policy", "text": "Cookie Policy" } - ] + ], + "hostSignup": { + "brand": "Element Home", + "cookiePolicyUrl": "https://element.io/cookie-policy", + "domains": [ + "matrix.org" + ], + "privacyPolicyUrl": "https://element.io/privacy", + "termsOfServiceUrl": "https://element.io/terms-of-service", + "url": "https://ems.element.io/element-home/in-app-loader" + } } diff --git a/package.json b/package.json index 0b83a69f9b..82d78d3310 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,11 @@ { - "name": "riot-web", - "productName": "Riot", - "main": "electron_app/src/electron-main.js", - "version": "1.5.15", + "name": "element-web", + "version": "1.7.32", "description": "A feature-rich client for Matrix.org", "author": "New Vector Ltd.", "repository": { "type": "git", - "url": "https://github.com/vector-im/riot-web" + "url": "https://github.com/vector-im/element-web" }, "license": "Apache-2.0", "files": [ @@ -31,195 +29,150 @@ "scripts": { "i18n": "matrix-gen-i18n", "prunei18n": "matrix-prune-i18n", - "diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && yarn i18n && node scripts/compare-file.js src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json", + "diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && matrix-gen-i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json", "reskindex": "reskindex -h src/header", "reskindex:watch": "reskindex -h src/header -w", "reskindex:watch-react": "node scripts/yarn-sub.js matrix-react-sdk reskindex:watch", - "clean": "rimraf lib webapp electron_app/dist", - "build": "yarn clean && yarn build:genfiles && yarn build:compile && yarn build:types && yarn build:bundle", - "build-stats": "yarn clean && yarn build:genfiles && yarn build:compile && yarn build:types && yarn build:bundle-stats", - "build:jitsi": "scripts/build-jitsi.sh", + "clean": "rimraf lib webapp", + "build": "yarn clean && yarn build:genfiles && yarn build:bundle", + "build-stats": "yarn clean && yarn build:genfiles && yarn build:bundle-stats", + "build:jitsi": "node scripts/build-jitsi.js", "build:res": "node scripts/copy-res.js", "build:genfiles": "yarn reskindex && yarn build:res && yarn build:jitsi", "build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js", - "build:compile": "babel -d lib --verbose --extensions \".ts,.js,.tsx\" src", - "build:bundle": "cross-env NODE_ENV=production webpack -p --progress --bail --mode production", - "build:bundle-stats": "cross-env NODE_ENV=production webpack -p --progress --bail --mode production --json > webpack-stats.json", - "build:electron": "yarn build && yarn install:electron && electron-builder -wml --ia32 --x64", - "build:electron:linux": "yarn build && electron-builder -l --x64", - "build:electron:macos": "yarn build && electron-builder -m --x64", - "build:electron:windows": "yarn build && electron-builder -w --ia32 --x64", - "build:types": "tsc --emitDeclarationOnly --jsx react", - "install:electron": "electron-builder install-app-deps", + "build:bundle": "webpack --progress --bail --mode production", + "build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json", "dist": "scripts/package.sh", - "start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,riot-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"", + "start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"", + "start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js --https\"", "start:res": "yarn build:jitsi && 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", - "electron": "yarn build && yarn install:electron && electron .", - "lint": "yarn lint:types && yarn lint:ts && yarn lint:js && yarn lint:style", + "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 --disable-host-check", + "lint": "yarn lint:types && yarn lint:js && yarn lint:style", "lint:js": "eslint src", - "lint:ts": "echo 'We don't actually have a typescript linter at this layer because tslint is being removed from our stack. Presumably your TS is fine.'", "lint:types": "tsc --noEmit --jsx react", "lint:style": "stylelint 'res/css/**/*.scss'", "test": "jest" }, "dependencies": { + "@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.3.tgz", "browser-request": "^0.3.3", - "favico.js": "^0.3.10", "gfm.css": "^1.1.2", - "highlight.js": "^9.13.1", + "highlight.js": "^10.5.0", + "jsrsasign": "^10.2.0", + "katex": "^0.12.0", "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop", "matrix-react-sdk": "github:matrix-org/matrix-react-sdk#develop", - "olm": "https://packages.matrix.org/npm/olm/olm-3.1.4.tgz", - "postcss-easings": "^2.0.0", + "matrix-widget-api": "^0.1.0-beta.15", "prop-types": "^15.7.2", - "react": "^16.9.0", - "react-dom": "^16.9.0", - "sanitize-html": "^1.19.1", - "ua-parser-js": "^0.7.19" + "react": "^17.0.2", + "react-dom": "^17.0.2", + "sanitize-html": "^2.3.2", + "ua-parser-js": "^0.7.24" }, "devDependencies": { - "@babel/cli": "^7.7.5", - "@babel/core": "^7.7.5", - "@babel/plugin-proposal-class-properties": "^7.7.4", - "@babel/plugin-proposal-decorators": "^7.7.4", - "@babel/plugin-proposal-export-default-from": "^7.7.4", - "@babel/plugin-proposal-numeric-separator": "^7.7.4", - "@babel/plugin-proposal-object-rest-spread": "^7.7.4", - "@babel/plugin-syntax-dynamic-import": "^7.7.4", - "@babel/plugin-transform-flow-comments": "^7.7.4", - "@babel/plugin-transform-runtime": "^7.7.6", - "@babel/preset-env": "^7.7.6", - "@babel/preset-flow": "^7.7.4", - "@babel/preset-react": "^7.7.4", - "@babel/preset-typescript": "^7.7.4", - "@babel/register": "^7.7.4", - "@babel/runtime": "^7.7.6", - "@types/jest": "^25.2.1", - "@types/react": "16.9", - "@types/react-dom": "^16.9.4", - "autoprefixer": "^9.7.3", - "babel-eslint": "^10.0.3", - "babel-jest": "^24.9.0", - "babel-loader": "^8.0.6", - "canvas": "^2.6.1", - "chokidar": "^3.3.1", - "concurrently": "^4.0.1", - "cpx": "^1.3.2", - "cross-env": "^6.0.3", - "css-loader": "^3.3.2", - "electron-builder": "^22.3.2", - "electron-builder-squirrel-windows": "^22.3.2", - "electron-devtools-installer": "^2.2.4", - "electron-notarize": "^0.2.0", - "eslint": "^5.8.0", - "eslint-config-google": "^0.7.1", - "eslint-plugin-babel": "^4.1.2", - "eslint-plugin-flowtype": "^2.50.3", - "eslint-plugin-jest": "^23.0.4", - "eslint-plugin-react": "^7.11.1", - "eslint-plugin-react-hooks": "^2.2.0", + "@babel/core": "^7.12.10", + "@babel/eslint-parser": "^7.12.10", + "@babel/eslint-plugin": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.10", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@babel/register": "^7.12.10", + "@babel/runtime": "^7.12.5", + "@principalstudio/html-webpack-inject-preload": "^1.2.7", + "@types/flux": "^3.1.9", + "@types/modernizr": "^3.5.3", + "@types/node": "^14.14.22", + "@types/react": "^17.0.2", + "@types/react-dom": "^17.0.2", + "@types/sanitize-html": "^2.3.1", + "@typescript-eslint/eslint-plugin": "^4.17.0", + "@typescript-eslint/parser": "^4.17.0", + "autoprefixer": "^9.8.6", + "babel-jest": "^26.6.3", + "babel-loader": "^8.2.2", + "chokidar": "^3.5.1", + "concurrently": "^5.3.0", + "cpx": "^1.5.0", + "css-loader": "^3.6.0", + "eslint": "7.18.0", + "eslint-config-google": "^0.14.0", + "eslint-plugin-matrix-org": "github:matrix-org/eslint-plugin-matrix-org#main", + "eslint-plugin-react": "^7.22.0", + "eslint-plugin-react-hooks": "^4.2.0", "extract-text-webpack-plugin": "^4.0.0-beta.0", - "fake-indexeddb": "^3.0.0", - "file-loader": "^5.0.2", + "fake-indexeddb": "^3.1.2", + "file-loader": "^5.1.0", "fs-extra": "^0.30.0", - "html-webpack-plugin": "^3.2.0", - "jest": "^24.9.0", - "jest-environment-jsdom-fourteen": "^1.0.1", - "json-loader": "^0.5.3", - "loader-utils": "^1.2.3", + "html-webpack-plugin": "^4.5.2", + "jest": "^26.6.3", + "jest-environment-jsdom-sixteen": "^1.0.3", + "json-loader": "^0.5.7", + "loader-utils": "^1.4.0", "matrix-mock-request": "^1.2.3", - "matrix-react-test-utils": "^0.2.2", - "mini-css-extract-plugin": "^0.8.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "modernizr": "^3.6.0", - "optimize-css-assets-webpack-plugin": "^5.0.3", + "matrix-react-test-utils": "^0.2.3", + "matrix-web-i18n": "github:matrix-org/matrix-web-i18n", + "mini-css-extract-plugin": "^0.12.0", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "modernizr": "^3.11.7", + "node-fetch": "^2.6.1", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "postcss-easings": "^2.0.0", "postcss-extend": "^1.0.5", - "postcss-hexrgba": "^2.0.0", + "postcss-hexrgba": "^2.0.1", "postcss-import": "^12.0.1", "postcss-loader": "^3.0.0", "postcss-mixins": "^6.2.3", - "postcss-nested": "^4.2.1", + "postcss-nested": "^4.2.3", "postcss-preset-env": "^6.7.0", - "postcss-scss": "^2.0.0", + "postcss-scss": "^2.1.1", "postcss-simple-vars": "^5.0.2", "postcss-strip-inline-comments": "^0.1.5", - "rimraf": "^2.4.3", + "rimraf": "^3.0.2", "shell-escape": "^0.2.0", - "stylelint": "^12.0.1", - "terser-webpack-plugin": "^2.3.0", - "typescript": "^3.7.3", - "webpack": "^4.41.2", - "webpack-cli": "^3.3.10", - "webpack-dev-server": "^3.9.0" - }, - "build": { - "appId": "im.riot.app", - "electronVersion": "7.1.14", - "files": [ - "node_modules/**", - "src/**" - ], - "extraResources": [ - { - "from": "electron_app/img", - "to": "img" - }, - "webapp/**/*" - ], - "linux": { - "target": "deb", - "category": "Network;InstantMessaging;Chat", - "maintainer": "support@riot.im", - "desktop": { - "StartupWMClass": "riot" - } - }, - "mac": { - "category": "public.app-category.social-networking", - "darkModeSupport": true - }, - "win": { - "target": { - "target": "squirrel" - }, - "sign": "scripts/electron_winSign" - }, - "directories": { - "buildResources": "electron_app/build", - "output": "electron_app/dist", - "app": "electron_app" - }, - "afterSign": "scripts/electron_afterSign.js", - "protocols": [ - { - "name": "riot", - "schemes": [ - "riot" - ] - } - ] + "simple-proxy-agent": "^1.1.0", + "stylelint": "^13.9.0", + "stylelint-config-standard": "^20.0.0", + "stylelint-scss": "^3.18.0", + "terser-webpack-plugin": "^2.3.8", + "typescript": "^4.1.3", + "webpack": "^4.46.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.2", + "worker-loader": "^2.0.0" }, "jest": { - "modulePathIgnorePatterns": [ - "/electron_app" - ], - "testEnvironment": "jest-environment-jsdom-fourteen", + "testEnvironment": "jest-environment-jsdom-sixteen", "testMatch": [ - "/test/**/*-test.*" + "/test/**/*-test.js" ], "setupFilesAfterEnv": [ "/node_modules/matrix-react-sdk/test/setupTests.js" ], "moduleNameMapper": { + "\\.(css|scss)$": "/__mocks__/cssMock.js", "\\.(gif|png|svg|ttf|woff2)$": "/node_modules/matrix-react-sdk/__mocks__/imageMock.js", "\\$webapp/i18n/languages.json": "/node_modules/matrix-react-sdk/__mocks__/languages.json", "^browser-request$": "/node_modules/matrix-react-sdk/__mocks__/browser-request.js", "^react$": "/node_modules/react", "^react-dom$": "/node_modules/react-dom", "^matrix-js-sdk$": "/node_modules/matrix-js-sdk/src", - "^matrix-react-sdk$": "/node_modules/matrix-react-sdk/src" + "^matrix-react-sdk$": "/node_modules/matrix-react-sdk/src", + "decoderWorker\\.min\\.js": "/node_modules/matrix-react-sdk/__mocks__/empty.js", + "decoderWorker\\.min\\.wasm": "/node_modules/matrix-react-sdk/__mocks__/empty.js", + "waveWorker\\.min\\.js": "/node_modules/matrix-react-sdk/__mocks__/empty.js", + "context-filter-polyfill": "/node_modules/matrix-react-sdk/__mocks__/empty.js", + "FontManager.ts": "/node_modules/matrix-react-sdk/__mocks__/FontManager.js", + "workers/(.+)\\.worker\\.ts": "/node_modules/matrix-react-sdk/__mocks__/workerMock.js" }, "transformIgnorePatterns": [ "/node_modules/(?!matrix-js-sdk).+$", diff --git a/release.sh b/release.sh index fada07f728..9886fb7478 100755 --- a/release.sh +++ b/release.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Script to perform a release of riot-web. +# Script to perform a release of element-web. # # Requires github-changelog-generator; to install, do # pip install git+https://github.com/matrix-org/github-changelog-generator.git @@ -38,13 +38,13 @@ do echo "Upgrading $i to $latestver..." yarn add -E $i@$latestver git add -u - # The `-e` flag opens the editor and gives you a chance to check - # the upgrade for correctness. - git commit -m "Upgrade $i to $latestver" -e + git commit -m "Upgrade $i to $latestver" fi fi done +./node_modules/matrix-js-sdk/release.sh -n -z "$orig_args" + release="${1#v}" tag="v${release}" prerelease=0 @@ -54,16 +54,6 @@ prerelease=0 # with a hyphen is a prerelease. echo $release | grep -q '-' && prerelease=1 -# bump Electron's package.json first -echo "electron yarn version" -cd electron_app -yarn version --no-git-tag-version --new-version "$release" -git commit package.json -m "$tag" - -cd .. - -./node_modules/matrix-js-sdk/release.sh -u vector-im -z "$orig_args" - if [ $prerelease -eq 0 ] then # For a release, reset SDK deps back to the `develop` branch. diff --git a/res/css/structures/ErrorView.scss b/res/css/structures/ErrorView.scss new file mode 100644 index 0000000000..4fbb2b00a8 --- /dev/null +++ b/res/css/structures/ErrorView.scss @@ -0,0 +1,101 @@ +/* +Copyright 2020 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// import font-size variables manually, ideally this scss would get loaded by the theme which has all variables in context +@import "../../../node_modules/matrix-react-sdk/res/css/_font-sizes.scss"; + +.mx_ErrorView { + background: #c5e0f7; + background: -moz-linear-gradient(top, #c5e0f7 0%, #ffffff 100%); + background: -webkit-linear-gradient(top, #c5e0f7 0%, #ffffff 100%); + background: linear-gradient(to bottom, #c5e0f7 0%, #ffffff 100%); + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#c5e0f7', endColorstr='#ffffff', GradientType=0); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + width: 100%; + min-height: 100%; + height: auto; + color: #000; + + .mx_ErrorView_container { + max-width: 680px; + margin: auto; + } + + .mx_Button { + border: 0; + border-radius: 4px; + font-size: $font-18px; + margin-left: 4px; + margin-right: 4px; + min-width: 80px; + background-color: #03b381; + color: #fff; + cursor: pointer; + padding: 12px 22px; + word-break: break-word; + text-decoration: none; + } + + .mx_Center { + justify-content: center; + } + + .mx_HomePage_header { + color: #2e2f32; + display: flex; + align-items: center; + justify-content: center; + } + + font-size: $font-16px; + h1 { + font-size: $font-32px; + } + h2 { + font-size: $font-24px; + color: #000; + } + + .mx_HomePage_col { + display: flex; + flex-direction: row; + } + + .mx_HomePage_row { + flex: 1 1 0; + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + + .mx_HomePage_logo { + margin: auto 20px auto 0; + } + + h1, h2 { + font-weight: 600; + margin-bottom: 32px; + } + + .mx_Spacer { + margin-top: 24px; + } + + .mx_FooterLink { + color: #368bd6; + text-decoration: none; + } +} diff --git a/res/decoder-ring/datatypes.js b/res/decoder-ring/datatypes.js new file mode 100644 index 0000000000..93a779e079 --- /dev/null +++ b/res/decoder-ring/datatypes.js @@ -0,0 +1,107 @@ +/* + * Quick-n-dirty algebraic datatypes. + * + * These let us handle the possibility of failure without having to constantly write code to check for it. + * We can apply all of the transformations we need as if the data is present using `map`. + * If there's a None, or a FetchError, or a Pending, those are left untouched. + * + * I've used perhaps an odd bit of terminology from scalaz in `fold`. This is basically a `switch` statement: + * You pass it a set of functions to handle the various different states of the datatype, and if it finds the + * function it'll call it on its value. + * + * It's handy to have this in functional style when dealing with React as we can dispatch different ways of rendering + * really simply: + * ``` + * bundleFetchStatus.fold({ + * some: (fetchStatus) => , + * }), + * ``` + */ + + +class Optional { + static from(value) { + return value && Some.of(value) || None; + } + map(f) { + return this; + } + flatMap(f) { + return this; + } + fold({ none }) { + return none && none(); + } +} +class Some extends Optional { + constructor(value) { + super(); + this.value = value; + } + map(f) { + return Some.of(f(this.value)); + } + flatMap(f) { + return f(this.value); + } + fold({ some }) { + return some && some(this.value); + } + static of(value) { + return new Some(value); + } +} +const None = new Optional(); + +class FetchStatus { + constructor(opt = {}) { + this.opt = { at: Date.now(), ...opt }; + } + map(f) { + return this; + } + flatMap(f) { + return this; + } +} +class Success extends FetchStatus { + static of(value) { + return new Success(value); + } + constructor(value, opt) { + super(opt); + this.value = value; + } + map(f) { + return new Success(f(this.value), this.opt); + } + flatMap(f) { + return f(this.value, this.opt); + } + fold({ success }) { + return success instanceof Function ? success(this.value, this.opt) : undefined; + } +} +class Pending extends FetchStatus { + static of(opt) { + return new Pending(opt); + } + constructor(opt) { + super(opt); + } + fold({ pending }) { + return pending instanceof Function ? pending(this.opt) : undefined; + } +} +class FetchError extends FetchStatus { + static of(reason, opt) { + return new FetchError(reason, opt); + } + constructor(reason, opt) { + super(opt); + this.reason = reason; + } + fold({ error }) { + return error instanceof Function ? error(this.reason, this.opt) : undefined; + } +} diff --git a/res/decoder-ring/decoder.js b/res/decoder-ring/decoder.js new file mode 100644 index 0000000000..b0cbd3c2e9 --- /dev/null +++ b/res/decoder-ring/decoder.js @@ -0,0 +1,336 @@ +class StartupError extends Error {} + +/* + * We need to know the bundle path before we can fetch the sourcemap files. In a production environment, we can guess + * it using this. + */ +async function getBundleName(baseUrl) { + const res = await fetch(new URL("index.html", baseUrl).toString()); + if (!res.ok) { + throw new StartupError(`Couldn't fetch index.html to prefill bundle; ${res.status} ${res.statusText}`); + } + const index = await res.text(); + return index.split("\n").map((line) => + line.match(/ + + + + + + + + + + + +

Decoder ring

+ Waiting for javascript to run... + + + diff --git a/res/manifest.json b/res/manifest.json index 75b182122d..69465591e0 100644 --- a/res/manifest.json +++ b/res/manifest.json @@ -1,56 +1,85 @@ { - "name": "Riot - open team collaboration", - "short_name": "Riot", + "name": "Element", + "short_name": "Element", "display": "standalone", "theme_color": "#76CFA6", "start_url": "index.html", "icons": [ { - "src": "vector-icons/android-chrome-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": "0.75" + "src": "/vector-icons/44.png", + "sizes": "44x44", + "type": "image/png" }, { - "src": "vector-icons/android-chrome-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": "1.0" + "src": "/vector-icons/1240x600.png", + "sizes": "1240x600", + "type": "image/png" }, { - "src": "vector-icons/android-chrome-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": "1.5" + "src": "/vector-icons/300.png", + "sizes": "300x300", + "type": "image/png" }, { - "src": "vector-icons/android-chrome-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": "2.0" + "src": "/vector-icons/150.png", + "sizes": "150x150", + "type": "image/png" }, { - "src": "vector-icons/android-chrome-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": "3.0" + "src": "/vector-icons/88.png", + "sizes": "88x88", + "type": "image/png" }, { - "src": "vector-icons/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": "4.0" + "src": "/vector-icons/24.png", + "sizes": "24x24", + "type": "image/png" + }, + { + "src": "/vector-icons/50.png", + "sizes": "50x50", + "type": "image/png" + }, + { + "src": "/vector-icons/620x300.png", + "sizes": "620x300", + "type": "image/png" + }, + { + "src": "/vector-icons/1024.png", + "sizes": "1024x1024", + "type": "image/png" + }, + { + "src": "/vector-icons/180.png", + "sizes": "180x180", + "type": "image/png" + }, + { + "src": "/vector-icons/152.png", + "sizes": "152x152", + "type": "image/png" + }, + { + "src": "/vector-icons/120.png", + "sizes": "120x120", + "type": "image/png" + }, + { + "src": "/vector-icons/76.png", + "sizes": "76x76", + "type": "image/png" } ], "related_applications": [ { "platform": "play", - "url": "https://play.google.com/store/apps/details?id=im.vector.alpha", - "id": "im.vector.alpha" + "url": "https://play.google.com/store/apps/details?id=im.vector.app", + "id": "im.vector.app" }, { "platform": "itunes", - "url": "https://itunes.apple.com/gb/app/riot-open-source-team-collaboration-via-matrix/id1083446067" + "url": "https://apps.apple.com/app/vector/id1083446067" } ] } diff --git a/res/sw.js b/res/sw.js index 038b82c9b4..dfe665a16f 100644 --- a/res/sw.js +++ b/res/sw.js @@ -1 +1 @@ -self.addEventListener('fetch',() => {}); +self.addEventListener('fetch', () => {}); diff --git a/res/themes/element/img/backgrounds/lake.jpg b/res/themes/element/img/backgrounds/lake.jpg new file mode 100644 index 0000000000..eb3d19a7cc Binary files /dev/null and b/res/themes/element/img/backgrounds/lake.jpg differ diff --git a/res/themes/element/img/download/apple.svg b/res/themes/element/img/download/apple.svg new file mode 100644 index 0000000000..9de39edc8f --- /dev/null +++ b/res/themes/element/img/download/apple.svg @@ -0,0 +1,97 @@ + + Download on the App Store. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/themes/element/img/download/fdroid.svg b/res/themes/element/img/download/fdroid.svg new file mode 100644 index 0000000000..847196f54b --- /dev/null +++ b/res/themes/element/img/download/fdroid.svg @@ -0,0 +1,135 @@ + + Get it on F-Droid. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/themes/element/img/download/google.svg b/res/themes/element/img/download/google.svg new file mode 100644 index 0000000000..d54aca167c --- /dev/null +++ b/res/themes/element/img/download/google.svg @@ -0,0 +1,70 @@ + + Download on the Google Play Store. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/themes/element/img/logos/element-logo.svg b/res/themes/element/img/logos/element-logo.svg new file mode 100644 index 0000000000..b30aafe1f6 --- /dev/null +++ b/res/themes/element/img/logos/element-logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/res/themes/element/img/logos/opengraph.png b/res/themes/element/img/logos/opengraph.png new file mode 100644 index 0000000000..d1b9d70e08 Binary files /dev/null and b/res/themes/element/img/logos/opengraph.png differ diff --git a/res/themes/riot/img/backgrounds/valley.jpg b/res/themes/riot/img/backgrounds/valley.jpg deleted file mode 100644 index 4779c9d7cf..0000000000 Binary files a/res/themes/riot/img/backgrounds/valley.jpg and /dev/null differ diff --git a/res/themes/riot/img/logos/riot-im-logo-black-text.png b/res/themes/riot/img/logos/riot-im-logo-black-text.png deleted file mode 100644 index 2b4334616e..0000000000 Binary files a/res/themes/riot/img/logos/riot-im-logo-black-text.png and /dev/null differ diff --git a/res/themes/riot/img/logos/riot-im-logo-black-text.svg b/res/themes/riot/img/logos/riot-im-logo-black-text.svg deleted file mode 100644 index ce50d65d49..0000000000 --- a/res/themes/riot/img/logos/riot-im-logo-black-text.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - alt black logotype - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/res/themes/riot/img/logos/riot-im-logo.png b/res/themes/riot/img/logos/riot-im-logo.png deleted file mode 100644 index 66651582de..0000000000 Binary files a/res/themes/riot/img/logos/riot-im-logo.png and /dev/null differ diff --git a/res/themes/riot/img/logos/riot-im-logo.svg b/res/themes/riot/img/logos/riot-im-logo.svg deleted file mode 100644 index 8a7956cc65..0000000000 --- a/res/themes/riot/img/logos/riot-im-logo.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - animatedLogo-0 - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/res/themes/riot/img/logos/riot-logo.svg b/res/themes/riot/img/logos/riot-logo.svg deleted file mode 100644 index ac1e547234..0000000000 --- a/res/themes/riot/img/logos/riot-logo.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/res/vector-icons/1024.png b/res/vector-icons/1024.png new file mode 100644 index 0000000000..83d6a16b11 Binary files /dev/null and b/res/vector-icons/1024.png differ diff --git a/res/vector-icons/120.png b/res/vector-icons/120.png new file mode 100644 index 0000000000..48b8ecf91c Binary files /dev/null and b/res/vector-icons/120.png differ diff --git a/res/vector-icons/1240x600.png b/res/vector-icons/1240x600.png new file mode 100644 index 0000000000..aeaa12de42 Binary files /dev/null and b/res/vector-icons/1240x600.png differ diff --git a/res/vector-icons/150.png b/res/vector-icons/150.png new file mode 100644 index 0000000000..14d589a026 Binary files /dev/null and b/res/vector-icons/150.png differ diff --git a/res/vector-icons/152.png b/res/vector-icons/152.png new file mode 100644 index 0000000000..65d42b33e9 Binary files /dev/null and b/res/vector-icons/152.png differ diff --git a/res/vector-icons/180.png b/res/vector-icons/180.png new file mode 100644 index 0000000000..7de76f75e3 Binary files /dev/null and b/res/vector-icons/180.png differ diff --git a/res/vector-icons/24.png b/res/vector-icons/24.png new file mode 100644 index 0000000000..87355fe9bb Binary files /dev/null and b/res/vector-icons/24.png differ diff --git a/res/vector-icons/300.png b/res/vector-icons/300.png new file mode 100644 index 0000000000..1f1b42f352 Binary files /dev/null and b/res/vector-icons/300.png differ diff --git a/res/vector-icons/44.png b/res/vector-icons/44.png new file mode 100644 index 0000000000..a60d3a02f2 Binary files /dev/null and b/res/vector-icons/44.png differ diff --git a/res/vector-icons/50.png b/res/vector-icons/50.png new file mode 100644 index 0000000000..23e1eaa397 Binary files /dev/null and b/res/vector-icons/50.png differ diff --git a/res/vector-icons/620x300.png b/res/vector-icons/620x300.png new file mode 100644 index 0000000000..2bf3805f57 Binary files /dev/null and b/res/vector-icons/620x300.png differ diff --git a/res/vector-icons/76.png b/res/vector-icons/76.png new file mode 100644 index 0000000000..e44a47fc08 Binary files /dev/null and b/res/vector-icons/76.png differ diff --git a/res/vector-icons/88.png b/res/vector-icons/88.png new file mode 100644 index 0000000000..98e44a9176 Binary files /dev/null and b/res/vector-icons/88.png differ diff --git a/res/vector-icons/android-chrome-144x144.png b/res/vector-icons/android-chrome-144x144.png deleted file mode 100644 index 5dbbd0ff11..0000000000 Binary files a/res/vector-icons/android-chrome-144x144.png and /dev/null differ diff --git a/res/vector-icons/android-chrome-192x192.png b/res/vector-icons/android-chrome-192x192.png deleted file mode 100644 index 93a4e9c8ad..0000000000 Binary files a/res/vector-icons/android-chrome-192x192.png and /dev/null differ diff --git a/res/vector-icons/android-chrome-36x36.png b/res/vector-icons/android-chrome-36x36.png deleted file mode 100644 index 344157fe50..0000000000 Binary files a/res/vector-icons/android-chrome-36x36.png and /dev/null differ diff --git a/res/vector-icons/android-chrome-48x48.png b/res/vector-icons/android-chrome-48x48.png deleted file mode 100644 index 70115c65c1..0000000000 Binary files a/res/vector-icons/android-chrome-48x48.png and /dev/null differ diff --git a/res/vector-icons/android-chrome-72x72.png b/res/vector-icons/android-chrome-72x72.png deleted file mode 100644 index e61b36e248..0000000000 Binary files a/res/vector-icons/android-chrome-72x72.png and /dev/null differ diff --git a/res/vector-icons/android-chrome-96x96.png b/res/vector-icons/android-chrome-96x96.png deleted file mode 100644 index 3a32b6c839..0000000000 Binary files a/res/vector-icons/android-chrome-96x96.png and /dev/null differ diff --git a/res/vector-icons/apple-touch-icon-114.png b/res/vector-icons/apple-touch-icon-114.png new file mode 100644 index 0000000000..16b0b289d5 Binary files /dev/null and b/res/vector-icons/apple-touch-icon-114.png differ diff --git a/res/vector-icons/apple-touch-icon-114x114.png b/res/vector-icons/apple-touch-icon-114x114.png deleted file mode 100644 index 019780fd95..0000000000 Binary files a/res/vector-icons/apple-touch-icon-114x114.png and /dev/null differ diff --git a/res/vector-icons/apple-touch-icon-120.png b/res/vector-icons/apple-touch-icon-120.png new file mode 100644 index 0000000000..1c91a55ef1 Binary files /dev/null and b/res/vector-icons/apple-touch-icon-120.png differ diff --git a/res/vector-icons/apple-touch-icon-120x120.png b/res/vector-icons/apple-touch-icon-120x120.png deleted file mode 100644 index 4979a63e4e..0000000000 Binary files a/res/vector-icons/apple-touch-icon-120x120.png and /dev/null differ diff --git a/res/vector-icons/apple-touch-icon-144.png b/res/vector-icons/apple-touch-icon-144.png new file mode 100644 index 0000000000..354259f5d7 Binary files /dev/null and b/res/vector-icons/apple-touch-icon-144.png differ diff --git a/res/vector-icons/apple-touch-icon-144x144.png b/res/vector-icons/apple-touch-icon-144x144.png deleted file mode 100644 index 5dbbd0ff11..0000000000 Binary files a/res/vector-icons/apple-touch-icon-144x144.png and /dev/null differ diff --git a/res/vector-icons/apple-touch-icon-152.png b/res/vector-icons/apple-touch-icon-152.png new file mode 100644 index 0000000000..dace2c8bc2 Binary files /dev/null and b/res/vector-icons/apple-touch-icon-152.png differ diff --git a/res/vector-icons/apple-touch-icon-152x152.png b/res/vector-icons/apple-touch-icon-152x152.png deleted file mode 100644 index 6aac26012f..0000000000 Binary files a/res/vector-icons/apple-touch-icon-152x152.png and /dev/null differ diff --git a/res/vector-icons/apple-touch-icon-180.png b/res/vector-icons/apple-touch-icon-180.png new file mode 100644 index 0000000000..e9409c84b9 Binary files /dev/null and b/res/vector-icons/apple-touch-icon-180.png differ diff --git a/res/vector-icons/apple-touch-icon-180x180.png b/res/vector-icons/apple-touch-icon-180x180.png deleted file mode 100644 index aacfc1a8a5..0000000000 Binary files a/res/vector-icons/apple-touch-icon-180x180.png and /dev/null differ diff --git a/res/vector-icons/apple-touch-icon-57.png b/res/vector-icons/apple-touch-icon-57.png new file mode 100644 index 0000000000..d2e5a516b8 Binary files /dev/null and b/res/vector-icons/apple-touch-icon-57.png differ diff --git a/res/vector-icons/apple-touch-icon-57x57.png b/res/vector-icons/apple-touch-icon-57x57.png deleted file mode 100644 index e52c99c609..0000000000 Binary files a/res/vector-icons/apple-touch-icon-57x57.png and /dev/null differ diff --git a/res/vector-icons/apple-touch-icon-60.png b/res/vector-icons/apple-touch-icon-60.png new file mode 100644 index 0000000000..7c37f2ec31 Binary files /dev/null and b/res/vector-icons/apple-touch-icon-60.png differ diff --git a/res/vector-icons/apple-touch-icon-60x60.png b/res/vector-icons/apple-touch-icon-60x60.png deleted file mode 100644 index edaecda6b6..0000000000 Binary files a/res/vector-icons/apple-touch-icon-60x60.png and /dev/null differ diff --git a/res/vector-icons/apple-touch-icon-72.png b/res/vector-icons/apple-touch-icon-72.png new file mode 100644 index 0000000000..b580cc52c0 Binary files /dev/null and b/res/vector-icons/apple-touch-icon-72.png differ diff --git a/res/vector-icons/apple-touch-icon-72x72.png b/res/vector-icons/apple-touch-icon-72x72.png deleted file mode 100644 index e61b36e248..0000000000 Binary files a/res/vector-icons/apple-touch-icon-72x72.png and /dev/null differ diff --git a/res/vector-icons/apple-touch-icon-76.png b/res/vector-icons/apple-touch-icon-76.png new file mode 100644 index 0000000000..e37586cc99 Binary files /dev/null and b/res/vector-icons/apple-touch-icon-76.png differ diff --git a/res/vector-icons/apple-touch-icon-76x76.png b/res/vector-icons/apple-touch-icon-76x76.png deleted file mode 100644 index 1432fee38f..0000000000 Binary files a/res/vector-icons/apple-touch-icon-76x76.png and /dev/null differ diff --git a/res/vector-icons/apple-touch-icon-precomposed.png b/res/vector-icons/apple-touch-icon-precomposed.png deleted file mode 100644 index aacfc1a8a5..0000000000 Binary files a/res/vector-icons/apple-touch-icon-precomposed.png and /dev/null differ diff --git a/res/vector-icons/apple-touch-icon.png b/res/vector-icons/apple-touch-icon.png deleted file mode 100644 index aacfc1a8a5..0000000000 Binary files a/res/vector-icons/apple-touch-icon.png and /dev/null differ diff --git a/res/vector-icons/browserconfig.xml b/res/vector-icons/browserconfig.xml index 012a1dad28..0ac493167d 100644 --- a/res/vector-icons/browserconfig.xml +++ b/res/vector-icons/browserconfig.xml @@ -1,12 +1,12 @@ - - - - - - - - - #da532c - - - + + + + + + + + + #da532c + + + diff --git a/res/vector-icons/favicon-16x16.png b/res/vector-icons/favicon-16x16.png deleted file mode 100644 index c9b0f23e29..0000000000 Binary files a/res/vector-icons/favicon-16x16.png and /dev/null differ diff --git a/res/vector-icons/favicon-32x32.png b/res/vector-icons/favicon-32x32.png deleted file mode 100644 index 48bf1dc890..0000000000 Binary files a/res/vector-icons/favicon-32x32.png and /dev/null differ diff --git a/res/vector-icons/favicon-96x96.png b/res/vector-icons/favicon-96x96.png deleted file mode 100644 index ea21306c0d..0000000000 Binary files a/res/vector-icons/favicon-96x96.png and /dev/null differ diff --git a/res/vector-icons/favicon.ico b/res/vector-icons/favicon.ico index 619b51aaad..6ad5fb0865 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 deleted file mode 100644 index 5dbbd0ff11..0000000000 Binary files a/res/vector-icons/mstile-144x144.png and /dev/null differ diff --git a/res/vector-icons/mstile-150.png b/res/vector-icons/mstile-150.png new file mode 100644 index 0000000000..79fe7a1bd1 Binary files /dev/null and b/res/vector-icons/mstile-150.png differ diff --git a/res/vector-icons/mstile-150x150.png b/res/vector-icons/mstile-150x150.png deleted file mode 100644 index da0c101c94..0000000000 Binary files a/res/vector-icons/mstile-150x150.png and /dev/null differ diff --git a/res/vector-icons/mstile-310.png b/res/vector-icons/mstile-310.png new file mode 100644 index 0000000000..cfafd744d7 Binary files /dev/null and b/res/vector-icons/mstile-310.png differ diff --git a/res/vector-icons/mstile-310x150.png b/res/vector-icons/mstile-310x150.png index c627adc2a1..bd001159ec 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 deleted file mode 100644 index e96300293e..0000000000 Binary files a/res/vector-icons/mstile-310x310.png and /dev/null differ diff --git a/res/vector-icons/mstile-70.png b/res/vector-icons/mstile-70.png new file mode 100644 index 0000000000..7470321851 Binary files /dev/null and b/res/vector-icons/mstile-70.png differ diff --git a/res/vector-icons/mstile-70x70.png b/res/vector-icons/mstile-70x70.png deleted file mode 100644 index c4f306c5ff..0000000000 Binary files a/res/vector-icons/mstile-70x70.png and /dev/null differ diff --git a/res/welcome.html b/res/welcome.html index 5331a934f0..bb3f84fe64 100644 --- a/res/welcome.html +++ b/res/welcome.html @@ -96,19 +96,10 @@ h1::after { color: #2e2f32 !important; } -.mx_ButtonHeadline { - margin-bottom: 14px; -} - .mx_ButtonLabel { margin-left: 20px; } -.mx_ButtonWrapperText { - font-size: 13px; - margin-bottom: 10px; -} - .mx_Header_title { font-size: 24px; font-weight: 600; @@ -127,7 +118,7 @@ h1::after { } .mx_ButtonCreateAccount { - background-color: #03B381; + background-color: #0DBD8B; color: white !important; } @@ -158,13 +149,30 @@ we don't have an account and should hide them. No account == no guest account ei display: none; } +.mx_ButtonRow.mx_WelcomePage_guestFunctions { + margin-top: 20px; +} +.mx_ButtonRow.mx_WelcomePage_guestFunctions > div { + margin: 0 auto; +} + +@media only screen and (max-width: 480px) { + .mx_ButtonRow { + flex-direction: column; + } + + .mx_ButtonRow > * { + margin: 0 0 10px 0; + } +} +
- + -

_t("Welcome to Riot.im")

+

_t("Welcome to Element")

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

@@ -177,20 +185,13 @@ we don't have an account and should hide them. No account == no guest account ei
diff --git a/res/welcome/images/icon-create-account.svg b/res/welcome/images/icon-create-account.svg index c9d25f2fa9..7bbef7f632 100644 --- a/res/welcome/images/icon-create-account.svg +++ b/res/welcome/images/icon-create-account.svg @@ -1,17 +1,3 @@ - - - - - - - - - - - - - - - - + + diff --git a/res/welcome/images/icon-room-directory.svg b/res/welcome/images/icon-room-directory.svg index 6f888611f1..3786ce1153 100644 --- a/res/welcome/images/icon-room-directory.svg +++ b/res/welcome/images/icon-room-directory.svg @@ -1,19 +1,4 @@ - - - - - - - - - - - - - - - - - - + + + diff --git a/res/welcome/images/icon-sign-in.svg b/res/welcome/images/icon-sign-in.svg index 584b2f0add..9bc2fefa3f 100644 --- a/res/welcome/images/icon-sign-in.svg +++ b/res/welcome/images/icon-sign-in.svg @@ -1,16 +1,4 @@ - - - - - - - - - - - - - - - + + + diff --git a/res/welcome/images/logo.svg b/res/welcome/images/logo.svg index 79039b70d0..b30aafe1f6 100644 --- a/res/welcome/images/logo.svg +++ b/res/welcome/images/logo.svg @@ -1,16 +1,6 @@ - - - - - - - - - + + + + + diff --git a/riot.im/develop/config.json b/riot.im/develop/config.json deleted file mode 100644 index cf193a6cfb..0000000000 --- a/riot.im/develop/config.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "default_server_name": "matrix.org", - "brand": "Riot", - "integrations_ui_url": "https://scalar-staging.vector.im/", - "integrations_rest_url": "https://scalar-staging.vector.im/api", - "integrations_widgets_urls": [ - "https://scalar.vector.im/_matrix/integrations/v1", - "https://scalar.vector.im/api", - "https://scalar-staging.vector.im/_matrix/integrations/v1", - "https://scalar-staging.vector.im/api", - "https://scalar-staging.riot.im/scalar/api" - ], - "hosting_signup_link": "https://modular.im/?utm_source=riot-web&utm_medium=web", - "bug_report_endpoint_url": "https://riot.im/bugreports/submit", - "features": { - "feature_pinning": "labs", - "feature_custom_status": "labs", - "feature_custom_tags": "labs", - "feature_state_counters": "labs", - "feature_many_integration_managers": "labs", - "feature_mjolnir": "labs", - "feature_dm_verification": "labs", - "feature_cross_signing": "enable", - "feature_invite_only_padlocks": "enable", - "feature_event_indexing": "disable", - "feature_bridge_state": "labs", - "feature_presence_in_room_list": "labs", - "feature_custom_themes": "labs" - }, - "piwik": { - "url": "https://piwik.riot.im/", - "siteId": 1, - "policyUrl": "https://matrix.org/legal/riot-im-cookie-policy" - }, - "roomDirectory": { - "servers": [ - "matrix.org" - ] - }, - "enable_presence_by_hs_url": { - "https://matrix.org": false, - "https://matrix-client.matrix.org": false - }, - "terms_and_conditions_links": [ - { - "url": "https://riot.im/privacy", - "text": "Privacy Policy" - }, - { - "url": "https://matrix.org/legal/riot-im-cookie-policy", - "text": "Cookie Policy" - } - ] -} diff --git a/scripts/build-jitsi.js b/scripts/build-jitsi.js new file mode 100644 index 0000000000..3f2ba29906 --- /dev/null +++ b/scripts/build-jitsi.js @@ -0,0 +1,31 @@ +// This is a JS script so that the directory is created in-process on Windows. +// If the script isn't run in-process, there's a risk of it racing or never running +// due to file associations in Windows. +// Sorry. + +const fs = require("fs"); +const path = require("path"); +const mkdirp = require("mkdirp"); +const fetch = require("node-fetch"); +const ProxyAgent = require("simple-proxy-agent"); + +console.log("Making webapp directory"); +mkdirp.sync("webapp"); + +// curl -s https://jitsi.riot.im/libs/external_api.min.js > ./webapp/jitsi_external_api.min.js +console.log("Downloading Jitsi script"); +const fname = path.join("webapp", "jitsi_external_api.min.js"); + +const options = {}; +if (process.env.HTTPS_PROXY) { + options.agent = new ProxyAgent(process.env.HTTPS_PROXY, {tunnel: true}); +} + +fetch("https://jitsi.riot.im/libs/external_api.min.js", options).then(res => { + const stream = fs.createWriteStream(fname); + return new Promise((resolve, reject) => { + res.body.pipe(stream); + res.body.on('error', err => reject(err)); + res.body.on('finish', () => resolve()); + }); +}).then(() => console.log('Done with Jitsi download')); diff --git a/scripts/build-jitsi.sh b/scripts/build-jitsi.sh deleted file mode 100755 index 5d4bdafe12..0000000000 --- a/scripts/build-jitsi.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -if [[ ! -f "./webapp" ]]; then - mkdir "./webapp" -fi - -curl -s https://jitsi.riot.im/libs/external_api.min.js > ./webapp/jitsi_external_api.min.js diff --git a/scripts/ci_package.sh b/scripts/ci_package.sh index 604a1a08ae..41d82016e7 100755 --- a/scripts/ci_package.sh +++ b/scripts/ci_package.sh @@ -1,12 +1,12 @@ #!/bin/bash -# Runs package.sh setting the version to git hashes of the riot-web, +# Runs package.sh setting the version to git hashes of the element-web, # react-sdk & js-sdk checkouts, for the case where these dependencies # are git checkouts. set -ex -rm dist/riot-*.tar.gz || true # rm previous artifacts without failing if it doesn't exist +rm dist/element-*.tar.gz || true # rm previous artifacts without failing if it doesn't exist # Since the deps are fetched from git, we can rev-parse REACT_SHA=$(cd node_modules/matrix-react-sdk; git rev-parse --short=12 HEAD) @@ -14,4 +14,4 @@ JSSDK_SHA=$(cd node_modules/matrix-js-sdk; git rev-parse --short=12 HEAD) VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop -CI_PACKAGE=true DIST_VERSION=$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA scripts/package.sh -d +CI_PACKAGE=true DIST_VERSION=$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA scripts/package.sh diff --git a/scripts/compare-file.js b/scripts/compare-file.js deleted file mode 100644 index f53275ebfa..0000000000 --- a/scripts/compare-file.js +++ /dev/null @@ -1,10 +0,0 @@ -const fs = require("fs"); - -if (process.argv.length < 4) throw new Error("Missing source and target file arguments"); - -const sourceFile = fs.readFileSync(process.argv[2], 'utf8'); -const targetFile = fs.readFileSync(process.argv[3], 'utf8'); - -if (sourceFile !== targetFile) { - throw new Error("Files do not match"); -} diff --git a/scripts/copy-res.js b/scripts/copy-res.js index e25d07fffc..297e905b52 100755 --- a/scripts/copy-res.js +++ b/scripts/copy-res.js @@ -21,15 +21,19 @@ const INCLUDE_LANGS = [ {'value': 'en_US', 'label': 'English (US)'}, {'value': 'eo', 'label': 'Esperanto'}, {'value': 'es', 'label': 'Español'}, + {'value': 'et', 'label': 'Eesti'}, {'value': 'eu', 'label': 'Euskara'}, {'value': 'fi', 'label': 'Suomi'}, {'value': 'fr', 'label': 'Français'}, {'value': 'gl', 'label': 'Galego'}, + {'value': 'he', 'label': 'עברית'}, {'value': 'hi', 'label': 'हिन्दी'}, {'value': 'hu', 'label': 'Magyar'}, {'value': 'is', 'label': 'íslenska'}, {'value': 'it', 'label': 'Italiano'}, {'value': 'ja', 'label': '日本語'}, + {'value': 'jbo', 'label': 'banjubu\'o'}, + {'value': 'kab', 'label': 'Taqbaylit'}, {'value': 'ko', 'label': '한국어'}, {'value': 'lt', 'label': 'Lietuvių'}, {'value': 'lv', 'label': 'Latviešu'}, @@ -63,8 +67,9 @@ const COPY_LIST = [ ["res/welcome/**", "webapp/welcome"], ["res/themes/**", "webapp/themes"], ["res/vector-icons/**", "webapp/vector-icons"], + ["res/decoder-ring/**", "webapp/decoder-ring"], ["node_modules/matrix-react-sdk/res/media/**", "webapp/media"], - ["node_modules/olm/olm_legacy.js", "webapp", { directwatch: 1 }], + ["node_modules/@matrix-org/olm/olm_legacy.js", "webapp", { directwatch: 1 }], ["./config.json", "webapp", { directwatch: 1 }], ["contribute.json", "webapp"], ]; diff --git a/scripts/deploy.py b/scripts/deploy.py index 33aa0af017..a0e8d96dcb 100755 --- a/scripts/deploy.py +++ b/scripts/deploy.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# download and unpack a riot-web tarball. +# download and unpack a element-web tarball. # # Allows `bundles` to be extracted to a common directory, and a link to # config.json to be added. diff --git a/scripts/docker-link-repos.sh b/scripts/docker-link-repos.sh index 229258e805..54c89bacae 100644 --- a/scripts/docker-link-repos.sh +++ b/scripts/docker-link-repos.sh @@ -32,8 +32,9 @@ cd react-sdk yarn link yarn link matrix-js-sdk yarn --network-timeout=100000 install +yarn reskindex cd ../ -echo "Setting up riot-web with react-sdk and js-sdk packages" +echo "Setting up element-web with react-sdk and js-sdk packages" yarn link matrix-js-sdk yarn link matrix-react-sdk diff --git a/scripts/electron-package.sh b/scripts/electron-package.sh deleted file mode 100755 index f92c138745..0000000000 --- a/scripts/electron-package.sh +++ /dev/null @@ -1,170 +0,0 @@ -#!/bin/bash - -usage() { - echo "Usage: $0 -v -d [-n]" - echo - echo "version: commit-ish to check out and build" - echo "config directory: a path to a directory containing" - echo "config.json, a json config file to ship with the build" - echo "and env.sh, a file to source environment variables" - echo "from." - echo "-n: build with no config file." - echo - echo "The update_base_url value from config.json is used to set up auto-update." - echo - echo "Environment variables:" - echo " OSSLSIGNCODE_SIGNARGS: Arguments to pass to osslsigncode when signing" - echo " NOTARIZE_APPLE_ID: Apple ID to use for notarisation. The password for" - echo " this account must be set in NOTARIZE_CREDS in the keychain." -} - -confdir= -version= -skipcfg=0 -while getopts "d:v:n" opt; do - case $opt in - d) - confdir=$OPTARG - ;; - v) - version=$OPTARG - ;; - n) - skipcfg=1 - ;; - \?) - echo "Invalid option: -$OPTARG" >&2 - usage - exit - ;; - esac -done - -if [ -z "$version" ]; then - echo "No version supplied" - usage - exit -fi - -conffile="$confdir/config.json" - -if [ -z "$conffile" ] && [ "$skipcfg" = 0 ]; then - echo "No config file given. Use -c to supply a config file or" - echo "-n to build with no config file (and no auto update)." - exit -fi - -if [ -n "$conffile" ]; then - update_base_url=`jq -r .update_base_url $conffile` - - if [ -z "$update_base_url" ]; then - echo "No update URL supplied. Use update_base_url: null if you really" - echo "want a build with no auto-update." - usage - exit - fi - # Make sure the base URL ends in a slash if it doesn't already - update_base_url=`echo $update_base_url | sed -e 's#\([^\/]\)$#\1\/#'` -fi - -if [ ! -f package.json ]; then - echo "No package.json found. This script must be run from" - echo "the riot-web directory." - exit -fi - -[ -f "$confdir/env.sh" ] && . "$confdir/env.sh" - -if [ -z "$NOTARIZE_APPLE_ID" ]; then - echo "NOTARIZE_APPLE_ID is not set" - exit -fi - -osslsigncode -h 2> /dev/null -if [ $? -ne 255 ]; then # osslsigncode exits with 255 after printing usage... - echo "osslsigncode not found" - exit -fi - -# Test that altool can get its credentials for notarising the mac app -xcrun altool -u "$NOTARIZE_APPLE_ID" -p '@keychain:NOTARIZE_CREDS' --list-apps || exit - -# Get the token password: we'll need it later, but get it now so we fail early if it's not there -token_password=`security find-generic-password -s riot_signing_token -w` -if [ $? -ne 0 ]; then - echo "riot_signing_token not found in keychain" - exit -fi - -set -e - -echo "Building $version using Update base URL $update_base_url" - -projdir=`pwd` -builddir=`mktemp -d 2>/dev/null || mktemp -d -t 'buildtmp'` -pushd "$builddir" - -git clone "$projdir" . -git checkout "$version" - -# Figure out what version we're building -vername=`jq -r .version package.json` - -if [ -n "$conffile" ]; then - popd - cp "$conffile" "$builddir/" - pushd "$builddir" -fi - -# We use Git branch / commit dependencies for some packages, and Yarn seems -# to have a hard time getting that right. See also -# https://github.com/yarnpkg/yarn/issues/4734. As a workaround, we clean the -# global cache here to ensure we get the right thing. -yarn cache clean -yarn install -yarn build:electron - -popd - -distdir="$builddir/electron_app/dist" -pubdir="$projdir/electron_app/pub" -rm -r "$pubdir" || true -mkdir -p "$pubdir" -rm -r "$projdir/electron_app/dist" || true -mkdir -p "$projdir/electron_app/dist" - -# Install packages: what the user downloads the first time, -# (DMGs for mac, exe installer for windows) -mkdir -p "$pubdir/install/macos" -cp $distdir/*.dmg "$pubdir/install/macos/" - -mkdir -p "$pubdir/install/win32/ia32/" -cp $distdir/squirrel-windows-ia32/*.exe "$pubdir/install/win32/ia32/" - -mkdir -p "$pubdir/install/win32/x64/" -cp $distdir/squirrel-windows/*.exe "$pubdir/install/win32/x64/" - -# Packages for auto-update -mkdir -p "$pubdir/update/macos" -cp $distdir/*-mac.zip "$pubdir/update/macos/" -echo "$vername" > "$pubdir/update/macos/latest" - -mkdir -p "$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/squirrel-windows/*.nupkg "$pubdir/update/win32/x64/" -cp $distdir/squirrel-windows/RELEASES "$pubdir/update/win32/x64/" - -# Move the deb to the main project dir's dist folder -# (just the 64 bit one - the 32 bit one still gets built because -# it's one arch argument for all platforms and we still want 32 bit -# windows, but 32 bit linux is unsupported as of electron 4 and no -# longer appears to work). -cp $distdir/*_amd64.deb "$projdir/electron_app/dist/" - -rm -rf "$builddir" - -echo "$pubdir can now be hosted on your web server." -echo "deb archives are in electron_app/dist/ - these should be added into your debian repository" diff --git a/scripts/electron_afterSign.js b/scripts/electron_afterSign.js deleted file mode 100644 index 0aeedb7383..0000000000 --- a/scripts/electron_afterSign.js +++ /dev/null @@ -1,30 +0,0 @@ -const { notarize } = require('electron-notarize'); - -exports.default = async function(context) { - const { electronPlatformName, appOutDir } = context; - - if (electronPlatformName === 'darwin') { - const appName = context.packager.appInfo.productFilename; - // We get the password from keychain. The keychain stores - // user IDs too, but apparently altool can't get the user ID - // from the keychain, so we need to get it from the environment. - const userId = process.env.NOTARIZE_APPLE_ID; - if (userId === undefined) { - console.warn( - "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" + - "! Skipping macOS notarisation. !\n" + - "! User ID not found, set NOTARIZE_APPLE_ID. !\n" + - "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", - ); - return; - } - - console.log("Notarising macOS app. This may be some time."); - return await notarize({ - appBundleId: 'im.riot.app', - appPath: `${appOutDir}/${appName}.app`, - appleId: userId, - appleIdPassword: '@keychain:NOTARIZE_CREDS', - }); - } -}; diff --git a/scripts/electron_winSign.js b/scripts/electron_winSign.js deleted file mode 100644 index 65aa6a075e..0000000000 --- a/scripts/electron_winSign.js +++ /dev/null @@ -1,77 +0,0 @@ -const { exec, execFile } = require('child_process'); -const fs = require('fs'); -const path = require('path'); -const shellescape = require('shell-escape'); - -exports.default = async function(options) { - const inPath = options.path; - const appOutDir = path.dirname(inPath); - - // get the token passphrase from the keychain - let tokenPassphrase; - try { - tokenPassphrase = await new Promise((resolve, reject) => { - execFile( - 'security', - ['find-generic-password', '-s', 'riot_signing_token', '-w'], - {}, - (err, stdout) => { - if (err) { - reject(err); - } else { - resolve(stdout.trim()); - } - }, - ); - }); - } catch (err) { - console.warn( - "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" + - "! Skipping Windows signing. !\n" + - "! Signing token not found in keychain. !\n" + - "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", - ); - return; - } - - return new Promise((resolve, reject) => { - let cmdLine = 'osslsigncode sign '; - if (process.env.OSSLSIGNCODE_SIGNARGS) { - cmdLine += process.env.OSSLSIGNCODE_SIGNARGS + ' '; - } - const tmpFile = path.join( - appOutDir, - 'tmp_' + Math.random().toString(36).substring(2, 15) + '.exe', - ); - const args = [ - '-h', options.hash, - '-pass', tokenPassphrase, - '-in', inPath, - '-out', tmpFile, - ]; - if (options.isNest) args.push('-nest'); - cmdLine += shellescape(args); - - let signStdout; - const signproc = exec(cmdLine, {}, (error, stdout) => { - signStdout = stdout; - }); - signproc.on('exit', (code) => { - if (code !== 0) { - console.log("Running", cmdLine); - console.log(signStdout); - console.error("osslsigncode failed with code " + code); - reject("osslsigncode failed with code " + code); - return; - } - fs.rename(tmpFile, inPath, (err) => { - if (err) { - console.error("Error renaming file", err); - reject(err); - } else { - resolve(); - } - }); - }); - }); -}; diff --git a/scripts/fetch-develop.deps.sh b/scripts/fetch-develop.deps.sh index a45159c256..421656ed94 100755 --- a/scripts/fetch-develop.deps.sh +++ b/scripts/fetch-develop.deps.sh @@ -70,24 +70,19 @@ function dodep() { ############################## -echo -en 'travis_fold:start:matrix-js-sdk\r' echo 'Setting up matrix-js-sdk' dodep matrix-org matrix-js-sdk pushd matrix-js-sdk yarn link -yarn install -yarn build +yarn install --pure-lockfile popd yarn link matrix-js-sdk -echo -en 'travis_fold:end:matrix-js-sdk\r' - ############################## -echo -en 'travis_fold:start:matrix-react-sdk\r' echo 'Setting up matrix-react-sdk' dodep matrix-org matrix-react-sdk @@ -95,14 +90,12 @@ dodep matrix-org matrix-react-sdk pushd matrix-react-sdk yarn link yarn link matrix-js-sdk -yarn install -yarn build +yarn install --pure-lockfile +yarn reskindex popd yarn link matrix-react-sdk -echo -en 'travis_fold:end:matrix-react-sdk\r' - ############################## # Link the reskindex binary in place: if we used `yarn link`, diff --git a/scripts/issues-burndown.pl b/scripts/issues-burndown.pl index 03af5ed7cc..f7cc413e78 100755 --- a/scripts/issues-burndown.pl +++ b/scripts/issues-burndown.pl @@ -18,7 +18,7 @@ my $gh = Net::GitHub->new( login => 'ara4n', pass => read_password("github password: "), ); -$gh->set_default_user_repo('vector-im', 'riot-web'); +$gh->set_default_user_repo('vector-im', 'element-web'); #my @issues = $gh->issue->repos_issues({ state => 'all', milestone => 3 }); my @issues = $gh->issue->repos_issues({ state => 'all' }); diff --git a/scripts/issues-no-state.pl b/scripts/issues-no-state.pl index 748809c59a..f1f71f581d 100755 --- a/scripts/issues-no-state.pl +++ b/scripts/issues-no-state.pl @@ -18,7 +18,7 @@ my $gh = Net::GitHub->new( login => 'ara4n', pass => read_password("github password: "), ); -$gh->set_default_user_repo('vector-im', 'riot-web'); +$gh->set_default_user_repo('vector-im', 'element-web'); #my @issues = $gh->issue->repos_issues({ state => 'all', milestone => 3 }); my @issues = $gh->issue->repos_issues({ state => 'all' }); diff --git a/scripts/package.sh b/scripts/package.sh index 70569fdacb..3960208e28 100755 --- a/scripts/package.sh +++ b/scripts/package.sh @@ -16,20 +16,20 @@ yarn build cp config.sample.json webapp/ mkdir -p dist -cp -r webapp riot-$version +cp -r webapp element-$version # Just in case you have a local config, remove it before packaging -rm riot-$version/config.json || true +rm element-$version/config.json || true # if $version looks like semver with leading v, strip it before writing to file if [[ ${version} =~ ^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+(-.+)?$ ]]; then - echo ${version:1} > riot-$version/version + echo ${version:1} > element-$version/version else - echo ${version} > riot-$version/version + echo ${version} > element-$version/version fi -tar chvzf dist/riot-$version.tar.gz riot-$version -rm -r riot-$version +tar chvzf dist/element-$version.tar.gz element-$version +rm -r element-$version echo -echo "Packaged dist/riot-$version.tar.gz" +echo "Packaged dist/element-$version.tar.gz" diff --git a/scripts/redeploy.py b/scripts/redeploy.py index 064bbfaa29..e5f2cff6be 100755 --- a/scripts/redeploy.py +++ b/scripts/redeploy.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# auto-deploy script for https://riot.im/develop +# auto-deploy script for https://develop.element.io # # Listens for buildkite webhook pokes (https://buildkite.com/docs/apis/webhooks) # When it gets one, downloads the artifact from buildkite @@ -191,7 +191,7 @@ def deploy_tarball(artifact, build_dir): # Download the tarball here as buildkite needs auth to do this # we don't pgp-sign buildkite artifacts, relying on HTTPS and buildkite - # not being evil. If that's not good enough for you, don't use riot.im/develop. + # not being evil. If that's not good enough for you, don't use develop.element.io. resp = requests.get(artifact['download_url'], stream=True, headers=req_headers()) resp.raise_for_status() with open(artifact['filename'], 'wb') as ofp: diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index 2e2f35f602..805639310e 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -1,5 +1,5 @@ /* -Copyright 2020 New Vector Ltd +Copyright 2020, 2021 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. @@ -14,15 +14,60 @@ See the License for the specific language governing permissions and limitations under the License. */ -import "matrix-react-sdk/src/@types/global"; -import {Renderer} from "react-dom"; +import "matrix-react-sdk/src/@types/global"; // load matrix-react-sdk's type extensions first +import type { Renderer } from "react-dom"; + +type ElectronChannel = + "app_onAction" | + "before-quit" | + "check_updates" | + "install_update" | + "ipcCall" | + "ipcReply" | + "loudNotification" | + "preferences" | + "seshat" | + "seshatReply" | + "setBadgeCount" | + "update-downloaded" | + "userDownloadCompleted" | + "userDownloadOpen"; declare global { interface Window { + Modernizr: ModernizrAPI & FeatureDetects; + Olm: { + init: () => Promise; + }; + mxSendRageshake: (text: string, withLogs?: boolean) => void; matrixChat: ReturnType; // electron-only - ipcRenderer: any; + electron?: Electron; + + // opera-only + opera?: any; + + // https://developer.mozilla.org/en-US/docs/Web/API/InstallTrigger + InstallTrigger: any; + } + + interface Electron { + on(channel: ElectronChannel, listener: (event: Event, ...args: any[]) => void): void; + send(channel: ElectronChannel, ...args: any[]): void; + } + + interface Navigator { + // PWA badging extensions https://w3c.github.io/badging/ + setAppBadge?(count: number): Promise; + clearAppBadge?(): Promise; + } +} + +// add method which is missing from the node typing +declare module "url" { + interface Url { + format(): string; } } diff --git a/src/async-components/structures/CompatibilityView.tsx b/src/async-components/structures/CompatibilityView.tsx new file mode 100644 index 0000000000..7a781ab459 --- /dev/null +++ b/src/async-components/structures/CompatibilityView.tsx @@ -0,0 +1,145 @@ +/* +Copyright 2020 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import * as React from "react"; +import { _t } from "matrix-react-sdk/src/languageHandler"; +import SdkConfig from 'matrix-react-sdk/src/SdkConfig'; + +// directly import the style here as this layer does not support rethemedex at this time so no matrix-react-sdk +// scss variables will be accessible. +import "../../../res/css/structures/ErrorView.scss"; + +interface IProps { + onAccept(): void; +} + +const CompatibilityView: React.FC = ({ onAccept }) => { + const { brand, mobileBuilds } = SdkConfig.get(); + + let ios = null; + const iosCustomUrl = mobileBuilds?.ios; + if (iosCustomUrl !== null) { // could be undefined or a string + ios = <> +

iOS (iPhone or iPad)

+ + Apple App Store + + ; + } + + let android = [

Android

]; + const andCustomUrl = mobileBuilds?.android; + const fdroidCustomUrl = mobileBuilds?.fdroid; + if (andCustomUrl !== null) { // undefined or string + android.push( + Google Play Store + ); + } + if (fdroidCustomUrl !== null) { // undefined or string + android.push( + F-Droid + ); + } + if (android.length === 1) { // just a header, meaning no links + android = []; + } + + let mobileHeader =

{_t("Use %(brand)s on mobile", { brand })}

; + if (!android.length && !ios) { + mobileHeader = null; + } + + return
+
+
+ + Element + +

{ _t("Unsupported browser") }

+
+ +
+
+
+

{ _t("Your browser can't run %(brand)s", { brand }) }

+

+ { _t( + "%(brand)s uses advanced browser features which aren't " + + "supported by your current browser.", + { brand }, + ) } +

+

+ { _t( + 'Please install Chrome, Firefox, ' + + 'or Safari for the best experience.', + {}, + { + 'chromeLink': (sub) => {sub}, + 'firefoxLink': (sub) => {sub}, + 'safariLink': (sub) => {sub}, + }, + )} +

+

+ { _t( + "You can continue using your current browser, but some or all features may not work " + + "and the look and feel of the application may be incorrect.", + ) } +

+ +
+
+
+ +
+
+
+ {mobileHeader} + {ios} + {android} +
+
+
+ + +
+
; +}; + +export default CompatibilityView; diff --git a/src/async-components/structures/ErrorView.tsx b/src/async-components/structures/ErrorView.tsx new file mode 100644 index 0000000000..195bb37f26 --- /dev/null +++ b/src/async-components/structures/ErrorView.tsx @@ -0,0 +1,61 @@ +/* +Copyright 2020 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import * as React from "react"; +import { _t } from "matrix-react-sdk/src/languageHandler"; + +// directly import the style here as this layer does not support rethemedex at this time so no matrix-react-sdk +// scss variables will be accessible. +import "../../../res/css/structures/ErrorView.scss"; + +interface IProps { + // both of these should already be internationalised + title: string; + messages?: string[]; +} + +const ErrorView: React.FC = ({ title, messages }) => { + return
+
+
+ + Element + +

{ _t("Failed to start") }

+
+
+
+
+

{ title }

+ {messages && messages.map(msg =>

+ { msg } +

)} +
+
+
+ +
+
; +}; + +export default ErrorView; + diff --git a/src/components/structures/ErrorView.tsx b/src/components/structures/ErrorView.tsx deleted file mode 100644 index 6941dbf16a..0000000000 --- a/src/components/structures/ErrorView.tsx +++ /dev/null @@ -1,46 +0,0 @@ -/* -Copyright 2020 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import * as React from "react"; -import * as PropTypes from "prop-types"; - -import { _t } from "matrix-react-sdk/src/languageHandler"; - -interface IProps { - title: string; - messages?: string[]; -} - -const ErrorView: React.FC = ({title, messages}) => { - return
-
-

{title}

-
- {messages && messages.map(msg =>

- { _t(msg) } -

)} -
-
-
; -}; - -ErrorView.propTypes = { - title: PropTypes.string.isRequired, - messages: PropTypes.arrayOf(PropTypes.string.isRequired), -}; - -export default ErrorView; - diff --git a/src/components/structures/VectorEmbeddedPage.js b/src/components/structures/VectorEmbeddedPage.tsx similarity index 76% rename from src/components/structures/VectorEmbeddedPage.js rename to src/components/structures/VectorEmbeddedPage.tsx index fc3b41a504..85adb2fb3f 100644 --- a/src/components/structures/VectorEmbeddedPage.js +++ b/src/components/structures/VectorEmbeddedPage.tsx @@ -16,8 +16,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -'use strict'; - import EmbeddedPage from 'matrix-react-sdk/src/components/structures/EmbeddedPage'; import sanitizeHtml from 'sanitize-html'; import { _t } from 'matrix-react-sdk/src/languageHandler'; @@ -25,11 +23,12 @@ import { _t } from 'matrix-react-sdk/src/languageHandler'; export default class VectorEmbeddedPage extends EmbeddedPage { static replaces = 'EmbeddedPage'; - // we're overriding the base component here, for Riot-specific tweaks - translate(s) { + // we're overriding the base component here, for Element-specific tweaks + translate(s: string) { s = sanitizeHtml(_t(s)); - // ugly fix for https://github.com/vector-im/riot-web/issues/4243 - s = s.replace(/\[matrix\]/, '[matrix]'); + // ugly fix for https://github.com/vector-im/element-web/issues/4243 + // eslint-disable-next-line max-len + s = s.replace(/\[matrix\]/, 'Matrix'); return s; } } diff --git a/src/components/views/auth/VectorAuthFooter.js b/src/components/views/auth/VectorAuthFooter.tsx similarity index 84% rename from src/components/views/auth/VectorAuthFooter.js rename to src/components/views/auth/VectorAuthFooter.tsx index de38b00a7e..7d940cf049 100644 --- a/src/components/views/auth/VectorAuthFooter.js +++ b/src/components/views/auth/VectorAuthFooter.tsx @@ -22,9 +22,9 @@ import { _t } from 'matrix-react-sdk/src/languageHandler'; const VectorAuthFooter = () => { const brandingConfig = SdkConfig.get().branding; let links = [ - {"text": "blog", "url": "https://blog.riot.im"}, - {"text": "twitter", "url": "https://twitter.com/@RiotChat"}, - {"text": "github", "url": "https://github.com/vector-im/riot-web"}, + { "text": "Blog", "url": "https://element.io/blog" }, + { "text": "Twitter", "url": "https://twitter.com/element_hq" }, + { "text": "GitHub", "url": "https://github.com/vector-im/element-web" }, ]; if (brandingConfig && brandingConfig.authFooterLinks) { @@ -43,7 +43,7 @@ const VectorAuthFooter = () => { return ( ); }; diff --git a/src/components/views/auth/VectorAuthHeaderLogo.js b/src/components/views/auth/VectorAuthHeaderLogo.tsx similarity index 79% rename from src/components/views/auth/VectorAuthHeaderLogo.js rename to src/components/views/auth/VectorAuthHeaderLogo.tsx index 04973fe2ed..976bd9a2f7 100644 --- a/src/components/views/auth/VectorAuthHeaderLogo.js +++ b/src/components/views/auth/VectorAuthHeaderLogo.tsx @@ -15,29 +15,22 @@ See the License for the specific language governing permissions and limitations under the License. */ -'use strict'; - import React from 'react'; -import PropTypes from 'prop-types'; import SdkConfig from 'matrix-react-sdk/src/SdkConfig'; export default class VectorAuthHeaderLogo extends React.PureComponent { - static replaces = 'AuthHeaderLogo' - - static propTypes = { - icon: PropTypes.string, - } + static replaces = 'AuthHeaderLogo'; render() { const brandingConfig = SdkConfig.get().branding; - let logoUrl = "themes/riot/img/logos/riot-im-logo-black-text.svg"; + let logoUrl = "themes/element/img/logos/element-logo.svg"; if (brandingConfig && brandingConfig.authHeaderLogoUrl) { logoUrl = brandingConfig.authHeaderLogoUrl; } return (
- Riot + Element
); } diff --git a/src/components/views/auth/VectorAuthPage.js b/src/components/views/auth/VectorAuthPage.tsx similarity index 59% rename from src/components/views/auth/VectorAuthPage.js rename to src/components/views/auth/VectorAuthPage.tsx index 98ddb8ba0f..c1ccdcf9a0 100644 --- a/src/components/views/auth/VectorAuthPage.js +++ b/src/components/views/auth/VectorAuthPage.tsx @@ -1,5 +1,5 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019, 2020 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. @@ -14,54 +14,66 @@ See the License for the specific language governing permissions and limitations under the License. */ -'use strict'; - -import React from 'react'; +import React, { CSSProperties } from 'react'; import * as sdk from 'matrix-react-sdk/src/index'; import SdkConfig from 'matrix-react-sdk/src/SdkConfig'; export default class VectorAuthPage extends React.PureComponent { - static replaces = 'AuthPage' + static replaces = 'AuthPage'; + + static welcomeBackgroundUrl; + + // cache the url as a static to prevent it changing without refreshing + static getWelcomeBackgroundUrl() { + if (VectorAuthPage.welcomeBackgroundUrl) return VectorAuthPage.welcomeBackgroundUrl; + + const brandingConfig = SdkConfig.get().branding; + VectorAuthPage.welcomeBackgroundUrl = "themes/element/img/backgrounds/lake.jpg"; + if (brandingConfig && brandingConfig.welcomeBackgroundUrl) { + if (Array.isArray(brandingConfig.welcomeBackgroundUrl)) { + const index = Math.floor(Math.random() * brandingConfig.welcomeBackgroundUrl.length); + VectorAuthPage.welcomeBackgroundUrl = brandingConfig.welcomeBackgroundUrl[index]; + } else { + VectorAuthPage.welcomeBackgroundUrl = brandingConfig.welcomeBackgroundUrl; + } + } + + return VectorAuthPage.welcomeBackgroundUrl; + } 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(${backgroundUrl})`, + background: `center/cover fixed url(${VectorAuthPage.getWelcomeBackgroundUrl()})`, }; - const modalStyle = { + const modalStyle: CSSProperties = { position: 'relative', background: 'initial', }; - const blurStyle = { + const blurStyle: CSSProperties = { position: 'absolute', top: 0, right: 0, bottom: 0, left: 0, - filter: 'blur(10px)', + filter: 'blur(40px)', background: pageStyle.background, }; - const modalContentStyle = { + const modalContentStyle: CSSProperties = { display: 'flex', zIndex: 1, background: 'rgba(255, 255, 255, 0.59)', - borderRadius: '4px', + borderRadius: '8px', }; return (
-
+
{ this.props.children }
diff --git a/src/components/views/auth/VectorCustomServerDialog.js b/src/components/views/auth/VectorCustomServerDialog.js deleted file mode 100644 index c4f4e7495a..0000000000 --- a/src/components/views/auth/VectorCustomServerDialog.js +++ /dev/null @@ -1,50 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017, 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. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import React from "react"; -import { _t } from 'matrix-react-sdk/src/languageHandler'; - -/** - * This is identical to `CustomServerDialog` except for replacing "this app" - * with "Riot". - */ -const VectorCustomServerDialog = ({onFinished}) => { - return ( -
-
- { _t('Custom Server Options') } -
-
-

{_t( - "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.", - )}

-
-
- -
-
- ); -}; - -VectorCustomServerDialog.replaces = 'CustomServerDialog'; - -export default VectorCustomServerDialog; diff --git a/src/customisations/README.md b/src/customisations/README.md new file mode 120000 index 0000000000..cacf116604 --- /dev/null +++ b/src/customisations/README.md @@ -0,0 +1 @@ +../../docs/customisations.md \ No newline at end of file diff --git a/src/favicon.ts b/src/favicon.ts new file mode 100644 index 0000000000..bec13c7866 --- /dev/null +++ b/src/favicon.ts @@ -0,0 +1,255 @@ +/* +Copyright 2020 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. +*/ + +interface IParams { + // colour parameters + bgColor: string; + textColor: string; + // font styling parameters + fontFamily: string; + fontWeight: "normal" | "italic" | "bold" | "bolder" | "lighter" | number; + + // positioning parameters + isUp: boolean; + isLeft: boolean; +} + +const defaults: IParams = { + bgColor: "#d00", + textColor: "#fff", + fontFamily: "sans-serif", // Arial,Verdana,Times New Roman,serif,sans-serif,... + fontWeight: "bold", // normal,italic,oblique,bold,bolder,lighter,100,200,300,400,500,600,700,800,900 + + isUp: false, + isLeft: false, +}; + +// Allows dynamic rendering of a circular badge atop the loaded favicon +// supports colour, font and basic positioning parameters. +// Based upon https://github.com/ejci/favico.js/blob/master/favico.js [MIT license] +export default class Favicon { + private readonly browser = { + ff: typeof window.InstallTrigger !== "undefined", + opera: !!window.opera || navigator.userAgent.includes("Opera"), + }; + + private readonly params: IParams; + private readonly canvas: HTMLCanvasElement; + private readonly baseImage: HTMLImageElement; + private context: CanvasRenderingContext2D; + private icons: HTMLLinkElement[]; + + private isReady = false; + // callback to run once isReady is asserted, allows for a badge to be queued for when it can be shown + private readyCb = () => {}; + + constructor(params: Partial = {}) { + this.params = { ...defaults, ...params }; + + this.icons = Favicon.getIcons(); + // create work canvas + this.canvas = document.createElement("canvas"); + // create clone of favicon as a base + this.baseImage = document.createElement("img"); + + const lastIcon = this.icons[this.icons.length - 1]; + if (lastIcon.hasAttribute("href")) { + this.baseImage.setAttribute("crossOrigin", "anonymous"); + this.baseImage.onload = () => { + // get height and width of the favicon + this.canvas.height = (this.baseImage.height > 0) ? this.baseImage.height : 32; + this.canvas.width = (this.baseImage.width > 0) ? this.baseImage.width : 32; + this.context = this.canvas.getContext("2d"); + this.ready(); + }; + this.baseImage.setAttribute("src", lastIcon.getAttribute("href")); + } else { + this.canvas.height = this.baseImage.height = 32; + this.canvas.width = this.baseImage.width = 32; + this.context = this.canvas.getContext("2d"); + this.ready(); + } + } + + private reset() { + this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + this.context.drawImage(this.baseImage, 0, 0, this.canvas.width, this.canvas.height); + } + + private options(n: number | string, params: IParams) { + const opt = { + n: ((typeof n) === "number") ? Math.abs(n as number | 0) : n, + len: ("" + n).length, + // badge positioning constants as percentages + x: 0.4, + y: 0.4, + w: 0.6, + h: 0.6, + }; + + // apply positional transformations + if (params.isUp) { + if (opt.y < 0.6) { + opt.y = opt.y - 0.4; + } else { + opt.y = opt.y - 2 * opt.y + (1 - opt.w); + } + } + if (params.isLeft) { + if (opt.x < 0.6) { + opt.x = opt.x - 0.4; + } else { + opt.x = opt.x - 2 * opt.x + (1 - opt.h); + } + } + + // scale the position to the canvas + opt.x = this.canvas.width * opt.x; + opt.y = this.canvas.height * opt.y; + opt.w = this.canvas.width * opt.w; + opt.h = this.canvas.height * opt.h; + return opt; + } + + private circle(n: number | string, opts?: Partial) { + const params = { ...this.params, ...opts }; + const opt = this.options(n, params); + + let more = false; + if (opt.len === 2) { + opt.x = opt.x - opt.w * 0.4; + opt.w = opt.w * 1.4; + more = true; + } else if (opt.len >= 3) { + opt.x = opt.x - opt.w * 0.65; + opt.w = opt.w * 1.65; + more = true; + } + + this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + this.context.drawImage(this.baseImage, 0, 0, this.canvas.width, this.canvas.height); + this.context.beginPath(); + const fontSize = Math.floor(opt.h * (opt.n > 99 ? 0.85 : 1)) + "px"; + this.context.font = `${params.fontWeight} ${fontSize} ${params.fontFamily}`; + this.context.textAlign = "center"; + + if (more) { + this.context.moveTo(opt.x + opt.w / 2, opt.y); + this.context.lineTo(opt.x + opt.w - opt.h / 2, opt.y); + this.context.quadraticCurveTo(opt.x + opt.w, opt.y, opt.x + opt.w, opt.y + opt.h / 2); + this.context.lineTo(opt.x + opt.w, opt.y + opt.h - opt.h / 2); + this.context.quadraticCurveTo(opt.x + opt.w, opt.y + opt.h, opt.x + opt.w - opt.h / 2, opt.y + opt.h); + this.context.lineTo(opt.x + opt.h / 2, opt.y + opt.h); + this.context.quadraticCurveTo(opt.x, opt.y + opt.h, opt.x, opt.y + opt.h - opt.h / 2); + this.context.lineTo(opt.x, opt.y + opt.h / 2); + this.context.quadraticCurveTo(opt.x, opt.y, opt.x + opt.h / 2, opt.y); + } else { + this.context.arc(opt.x + opt.w / 2, opt.y + opt.h / 2, opt.h / 2, 0, 2 * Math.PI); + } + + this.context.fillStyle = params.bgColor; + this.context.fill(); + this.context.closePath(); + this.context.beginPath(); + this.context.stroke(); + this.context.fillStyle = params.textColor; + + if ((typeof opt.n) === "number" && opt.n > 999) { + const count = ((opt.n > 9999) ? 9 : Math.floor(opt.n as number / 1000)) + "k+"; + this.context.fillText(count, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.2)); + } else { + this.context.fillText("" + opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15)); + } + + this.context.closePath(); + } + + private ready() { + if (this.isReady) return; + this.isReady = true; + this.readyCb(); + } + + private setIcon(canvas) { + setImmediate(() => { + this.setIconSrc(canvas.toDataURL("image/png")); + }); + } + + private setIconSrc(url) { + // if is attached to fav icon + if (this.browser.ff || this.browser.opera) { + // for FF we need to "recreate" element, attach to dom and remove old + const old = this.icons[this.icons.length - 1]; + const newIcon = window.document.createElement("link"); + this.icons = [newIcon]; + newIcon.setAttribute("rel", "icon"); + newIcon.setAttribute("type", "image/png"); + window.document.getElementsByTagName("head")[0].appendChild(newIcon); + newIcon.setAttribute("href", url); + if (old.parentNode) { + old.parentNode.removeChild(old); + } + } else { + this.icons.forEach(icon => { + icon.setAttribute("href", url); + }); + } + } + + public badge(content: number | string, opts?: Partial) { + if (!this.isReady) { + this.readyCb = () => { + this.badge(content, opts); + }; + return; + } + + if (typeof content === "string" || content > 0) { + this.circle(content, opts); + } else { + this.reset(); + } + + this.setIcon(this.canvas); + } + + private static getLinks() { + const icons: HTMLLinkElement[] = []; + const links = window.document.getElementsByTagName("head")[0].getElementsByTagName("link"); + for (let i = 0; i < links.length; i++) { + if ((/(^|\s)icon(\s|$)/i).test(links[i].getAttribute("rel"))) { + icons.push(links[i]); + } + } + return icons; + } + + private static getIcons() { + // get favicon link elements + let elms = Favicon.getLinks(); + if (elms.length === 0) { + elms = [window.document.createElement("link")]; + elms[0].setAttribute("rel", "icon"); + window.document.getElementsByTagName("head")[0].appendChild(elms[0]); + } + + elms.forEach(item => { + item.setAttribute("type", "image/png"); + }); + return elms; + } +} diff --git a/src/i18n/strings/ar.json b/src/i18n/strings/ar.json index 0942600eca..44758f656e 100644 --- a/src/i18n/strings/ar.json +++ b/src/i18n/strings/ar.json @@ -1,17 +1,36 @@ { - "Custom Server Options": "الإعدادات الشخصية للخادوم", - "Dismiss": "تجاهل", - "Riot Desktop on %(platformName)s": "الواجهة المكتبية لرايوت على %(platformName)s", + "Dismiss": "أهمِل", "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 للاتصال بمشاركة الشاشة.", "powered by Matrix": "مشغل بواسطة Matrix", - "Welcome to Riot.im": "مرحبا بك في Riot.im", - "Chat with Riot Bot": "الدردشة مع Riot Bot", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "[matrix] تعاون مدعوم مواسطة & دردشة لا مركزية ومشفرة", - "Create Account": "انشاء حساب", - "Need help?": "بحاجة إلى مساعدة؟", - "Explore rooms": "استكشف غرف المحادثات", - "Room Directory": "دليل غرف المحادثات", - "Sign In": "التسجيل" + "Welcome to Element": "مرحبًا بك في Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "دردشة وتعاون غير مركزي معمّى، تدعمه [matrix]", + "Create Account": "أنشِئ حسابًا", + "Explore rooms": "استكشِف الغرف", + "Sign In": "لِج", + "Missing indexeddb worker script!": "سكربت عامل indexeddb ناقص!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "الضبط غير صالح: يمكنك تحديد واحدًا من الآتي فقط: default_server_config أو default_server_name أو default_hs_url.", + "Invalid configuration: no default server specified.": "الضبط غير صالح: لم تحدّد خادومًا مبدئيًا.", + "Your Element is misconfigured": "لم يُضبط تطبيق Element كما ينبغي", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "يحتوي ضبط تطبيق Element على تنسيق JSON غير صالح. من فضلك صحّح المشكلة وأعِد تحميل الصفحة.", + "The message from the parser is: %(message)s": "الرسالة القادمة من المحلّل: %(message)s", + "Invalid JSON": "تنسيق JSON غير صالح", + "Unable to load config file: please refresh the page to try again.": "تعذّر تحميل ملف الضبط: من فضلك أنعِش الصفحة لمعاودة المحاولة.", + "Unexpected error preparing the app. See console for details.": "حدث عُطل غير متوقع أثناء تجهيز التطبيق. طالِع المِعراض للتفاصيل.", + "Download Completed": "اكتمل التنزيل", + "Open": "افتح", + "Open user settings": "افتح إعدادات المستخدم", + "Previous/next recently visited room or community": "الغرفة أو المجتمع التالي/السابق الذي زرته حديثًا", + "%(brand)s Desktop (%(platformName)s)": "‏‏%(brand)s لسطح المكتب (%(platformName)s)", + "Go to your browser to complete Sign In": "افتح المتصفح لإكمال الولوج", + "%(appName)s (%(browserName)s, %(osName)s)": "‏‏%(appName)s (‏‏%(browserName)s، ‏‏%(osName)s)", + "Unsupported browser": "متصفح غير مدعوم", + "Your browser can't run %(brand)s": "لا يمكن لمتصفحك تشغيل %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "يستعمل %(brand)s ميزات متقدمة في المتصفحات لا يدعمها متصفحك الحالي.", + "Please install Chrome, Firefox, or Safari for the best experience.": "من فضلك ثبّت كروم أو فَيَرفُكس أو سفاري لأفضل تجربة.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "يمكنك مواصل استعمال متصفحك الحالي ولكن قد لا تعمل بعض المزايا (أو كلها) وقد لا يظهر التطبيق كما ينبغي له أن يظهر.", + "I understand the risks and wish to continue": "أفهم المخاطرة وأود المواصلة", + "Go to element.io": "انتقل إلى element.io", + "Failed to start": "فشل البدء", + "Powered by Matrix": "تدعمه «ماترِكس»" } diff --git a/src/i18n/strings/az.json b/src/i18n/strings/az.json index 9773436fa1..6958694e77 100644 --- a/src/i18n/strings/az.json +++ b/src/i18n/strings/az.json @@ -1,25 +1,16 @@ { - "Riot Desktop on %(platformName)s": "%(platformName)s-da Riot Desktop", "Unknown device": "Naməlum qurğu", "You need to be using HTTPS to place a screen-sharing call.": "İş stolunun birgə istifadəsi üçün HTTPS-dan istifadə tələb olunur.", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot konfiqurasiyanızda yanlış JSON var. Lütfən, xətanı düzəldin və səhifəni yeniləyin.", "Invalid JSON": "Yanlış JSON", "Sign In": "Daxil ol", "Create Account": "Hesab Aç", - "Need help?": "Kömək lazımdır?", - "Chat with Riot Bot": "Riot Bot-la söhbət edin", "Explore rooms": "Otaqları kəşf edin", - "Your Riot is misconfigured": "Riot yanlış quraşdırılıb", "Unexpected error preparing the app. See console for details.": "Proqramın başlanmasında gözlənilməz xəta. İzah üçün konsola baxın", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Yanlış konfiqurasiya: bunlardan yalnız birini təyin edin - default_server_config, default_server_name, və ya default_hs_url.", "Invalid configuration: no default server specified.": "Yanlış konfiqurasiya: ilkin server təyin edilməyib", - "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s-da %(browserName)s ilə %(appName)s", "The message from the parser is: %(message)s": "Sözügedən mesaj: %(message)s", "powered by Matrix": "Matrix tərəfindən təchiz edilmişdir", - "Custom Server Options": "Fərdi Server Seçimləri", - "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.": "Fərqli server URL-ni təyin etməklə digər Matrix serverlərinə daxil olmaq üçün fərdi server seçimlərini istifadə edə bilərsiniz. Bu sizə başqa serverdə qaldırılmış mövcud Matrix hesabınızla Riot-u işlətməyə imkan verir.", "Dismiss": "Nəzərə almayın", - "Room Directory": "Otaq kataloqu", - "Welcome to Riot.im": "Riot.im-ə xoş gəlmişsiniz", + "Welcome to Element": "Element-ə xoş gəlmişsiniz", "Decentralised, encrypted chat & collaboration powered by [matrix]": "[matrix] tərəfindən təchiz edilmiş mərkəziləşdirilməmiş, şifrələnmiş çat və əməkdaşlıq platforması" } diff --git a/src/i18n/strings/be.json b/src/i18n/strings/be.json index c9ddc6426a..2078f53ee6 100644 --- a/src/i18n/strings/be.json +++ b/src/i18n/strings/be.json @@ -1,5 +1,4 @@ { - "Custom Server Options": "Карыстальніцкія параметры сервера", "Dismiss": "Aдхіліць", "powered by Matrix": "працуе на Matrix" } diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json index 7e1892a1c5..b2d0bd2d48 100644 --- a/src/i18n/strings/bg.json +++ b/src/i18n/strings/bg.json @@ -1,27 +1,37 @@ { - "Riot Desktop on %(platformName)s": "Riot Desktop под %(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, за да споделите екрана си.", - "Custom Server Options": "Потребителски опции за сървър", "Dismiss": "Затвори", "powered by Matrix": "базирано на Matrix", - "Welcome to Riot.im": "Добре дошли в Riot.im", + "Welcome to Element": "Добре дошли в Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализиран, шифрован чат и съвместна работа, базирани на [matrix]", - "Chat with Riot Bot": "Чати с 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.": "Може да използвате настройките за собствен сървър за да влезете в друг Matrix сървър, чрез указване на адреса му. Това ви позволява да използвате Riot със съществуващ Matrix акаунт, принадлежащ към друг сървър.", "Sign In": "Вписване", "Create Account": "Създай профил", - "Need help?": "Нужда от помощ?", "Explore rooms": "Открий стаи", - "Room Directory": "Директория със стаи", "Unexpected error preparing the app. See console for details.": "Неочаквана грешка при подготвянето на приложението. Вижте конзолата за подробности.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Невалидна конфигурация: може да е указано само едно от: default_server_config, default_server_name, или default_hs_url.", "Invalid configuration: no default server specified.": "Невалидна конфигурация: не е указан сървър по подразбиране.", - "Your Riot is misconfigured": "Riot не е конфигуриран правилно", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot конфигурацията ви съдържа невалиден JSON. Коригирайте проблема и презаредете страницата.", "The message from the parser is: %(message)s": "Грешката от парсъра е: %(message)s", "Invalid JSON": "Невалиден JSON", "Open user settings": "Отвори потребителските настройки", - "Go to your browser to complete Sign In": "Отидете в браузъра за да завършите влизането" + "Go to your browser to complete Sign In": "Отидете в браузъра за да завършите влизането", + "Missing indexeddb worker script!": "Липсва indexdb worker скриптът!", + "Unable to load config file: please refresh the page to try again.": "Неуспешно зареждане на конфигурационния файл: презаредете страницата за да опитате пак.", + "Previous/next recently visited room or community": "Предишна/следваща наскоро-посетена стая или общност", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Неподдържан браузър", + "Please install Chrome, Firefox, or Safari for the best experience.": "Инсталирайте Chrome, Firefox или Safari за най-добра работа.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Може да продължите да използвате сегашния си браузър, но някои или всички функции може да се окажат неработещи, или пък външния вид на приложението да изглежда неправилен.", + "I understand the risks and wish to continue": "Разбирам рисковете и желая да продължа", + "Go to element.io": "Отиди на element.io", + "Failed to start": "Неуспешно стартиране", + "Your Element is misconfigured": "Вашият Element не е конфигуриран правилно", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Вашата Element конфигурация съдържа невалиден JSON. Коригирайте проблема и презаредете страницата.", + "Download Completed": "Свалянето завърши", + "Open": "Отвори", + "Your browser can't run %(brand)s": "Браузърът ви не може да изпълни %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s използва модерни функции на браузъра, които не се поддържат от Вашия.", + "Powered by Matrix": "Базирано на Matrix", + "Use %(brand)s on mobile": "Използвайте %(brand)s на мобилен телефон" } diff --git a/src/i18n/strings/bs.json b/src/i18n/strings/bs.json index 9e26dfeeb6..a423a49f75 100644 --- a/src/i18n/strings/bs.json +++ b/src/i18n/strings/bs.json @@ -1 +1,35 @@ -{} \ No newline at end of file +{ + "Missing indexeddb worker script!": "Nedostaje indexeddb radna skripta!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neispravna konfiguracija: navesti se samo može jedan od default_server_config, default_server_name ili default_hs_url.", + "Invalid configuration: no default server specified.": "Neispravna konfiguracija: nije naveden zadani server.", + "Your Element is misconfigured": "Vaš element je pogrešno konfiguriran", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracija vašeg elementa sadrži nevažeći JSON. Ispravite problem i ponovo učitajte stranicu.", + "The message from the parser is: %(message)s": "Poruka parsera je: %(message)s", + "Invalid JSON": "Nevažeći JSON", + "Unable to load config file: please refresh the page to try again.": "Nije moguće učitati konfiguracijsku datoteku: osvježite stranicu i pokušajte ponovo.", + "Unexpected error preparing the app. See console for details.": "Neočekivana greška prilikom pripreme aplikacije. Pogledajte konzolu za detalje.", + "Download Completed": "Preuzimanje završeno", + "Open": "Otvori", + "Dismiss": "Odbaci", + "Open user settings": "Otvori korisničke postavke", + "Previous/next recently visited room or community": "Prethodna / sljedeća nedavno posjećena soba ili zajednica", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Radna povrsina (%(platformName)s)", + "Go to your browser to complete Sign In": "Idite na svoj pretraživač da biste dovršili prijavu", + "Unknown device": "Nepoznat uređaj", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "You need to be using HTTPS to place a screen-sharing call.": "Morate koristiti HTTPS za upućivanje poziva za dijeljenje ekrana.", + "Powered by Matrix": "Pokretano uz Matrix", + "Unsupported browser": "Nepodržani pretraživač", + "Your browser can't run %(brand)s": "Vaš pretraživač ne može pokretati %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s koristi napredne funkcije pretraživača koje vaš trenutni pretraživač ne podržava.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Molimo instalirajte Chrome, Firefox ili Safari za najbolje iskustvo.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Možete nastaviti koristiti svoj trenutni pretraživač, ali neke ili sve funkcije možda neće raditi, a izgled i dojam aplikacije mogu biti neispravani.", + "I understand the risks and wish to continue": "Razumijem rizike i želim nastaviti", + "Go to element.io": "Idite na element.io", + "Failed to start": "Pokretanje nije uspjelo", + "Welcome to Element": "Dobrodošli u Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizirani, šifrirani razgovor & suradnja pokrenuta [matrix]", + "Sign In": "Prijavite se", + "Create Account": "Otvori račun", + "Explore rooms": "Istražite sobe" +} diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json index 9e4c2899a3..0cae81931a 100644 --- a/src/i18n/strings/ca.json +++ b/src/i18n/strings/ca.json @@ -1,19 +1,36 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s per a %(osName)s", - "Custom Server Options": "Opcions de servidor personalitzat", "Dismiss": "Omet", "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 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.", + "Welcome to Element": "Benvingut/da a Element", + "You need to be using HTTPS to place a screen-sharing call.": "Has d'utilitzar HTTPS per poder fer una trucada amb pantalla compartida.", "powered by Matrix": "amb tecnologia de Matrix", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Xat descentralitzat, encriptat i col·laboratiu amb tecnologia de [matrix]", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Xat descentralitzat, xifrat i col·laboratiu amb tecnologia de [matrix]", "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.", - "Sign In": "Inicia la sessió", - "Invalid configuration: no default server specified.": "Configuració no vàlida: no s'ha especificat cap servidor per defecte." + "Explore rooms": "Explora sales", + "Sign In": "Inicia sessió", + "Invalid configuration: no default server specified.": "Configuració invàlida: no s'ha especificat cap servidor predeterminat.", + "Invalid JSON": "JSON invàlid", + "Go to your browser to complete Sign In": "Vés al navegador per completar l'inici de sessió", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuració invàlida: només pots especificar una únic default_server_config, default_server_name, o default_hs_url.", + "Your Element is misconfigured": "Element està mal configurat", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configuració d'Element conté un JSON invàlid. Soluciona el problema i actualitza la pàgina.", + "The message from the parser is: %(message)s": "El missatge de l'analitzador és: %(message)s", + "Unable to load config file: please refresh the page to try again.": "No s'ha pogut carregar el fitxer de configuració: actualitza la pàgina per tornar-ho a provar.", + "Unexpected error preparing the app. See console for details.": "Error inesperat durant la preparació de l'aplicació. Consulta la consola pels a més detalls.", + "Download Completed": "Baixada completada", + "Open": "Obre", + "Open user settings": "Obre la configuració d'usuari", + "Previous/next recently visited room or community": "Anterior/següent sala o comunitat visitada recentment", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s d'escriptori (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Powered by Matrix": "Amb tecnologia de Matrix", + "Unsupported browser": "Navegador no compatible", + "Your browser can't run %(brand)s": "El teu navegador no pot executar %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s utilitza funcions del navegador avançades que no són compatibles amb el teu navegador actual.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Instal·la Chrome, Firefox, o Safari per obtenir la millor experiència.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Pots continuar utilitzant el teu navegador actual, però algunes o totes les funcions podrien no funcionar i l'aspecte de l'aplicació podria ser incorrecte.", + "I understand the risks and wish to continue": "Entenc els riscos i vull continuar", + "Go to element.io": "Vés a element.io", + "Failed to start": "Ha fallat l'inici", + "Missing indexeddb worker script!": "Falta l'script del treballador indexeddb!" } diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index 334cf3f940..e6a15d3cdf 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -1,27 +1,38 @@ { - "Welcome to Riot.im": "Vítá vás Riot.im", + "Welcome to Element": "Vítá vás Element", "Unknown device": "Neznámé zařízení", "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.", - "Chat with Riot Bot": "Konverzovat s Riot Botem", - "Dismiss": "Zahodit", + "Dismiss": "Zavřít", "powered by Matrix": "používá protokol Matrix", - "Riot Desktop on %(platformName)s": "Riot Desktop pro %(platformName)s", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s přes %(browserName)s na %(osName)s", - "Custom Server Options": "Vlastní nastavení serveru", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráce na platformě [matrix]", - "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ím nastavení serveru 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?": "Potřebujete pomoc?", "Explore rooms": "Procházet místnosti", - "Room Directory": "Adresář místností", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfigurace Riotu obsahuje neplatný JSON. Opravte prosím tento problém a obnovte stránku.", "The message from the parser is: %(message)s": "Zpráva z parseru je: %(message)s", "Invalid JSON": "Neplatný JSON", - "Your Riot is misconfigured": "Riot je špatně nakonfigurován", "Unexpected error preparing the app. See console for details.": "Neočekávaná chyba při přípravě aplikace. Podrobnosti najdete v konzoli.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neplatná konfigurace: je možné specifikovat pouze jednu volbu z default_server_config, default_server_name, nebo default_hs_url.", "Invalid configuration: no default server specified.": "Neplatná konfigurace: není zadán výchozí server.", "Open user settings": "Otevřít uživatelské nastavení", - "Go to your browser to complete Sign In": "Přejděte do prohlížeče a dokončete přihlášení" + "Go to your browser to complete Sign In": "Přejděte do prohlížeče a dokončete přihlášení", + "Your Element is misconfigured": "Váš Element je nesprávně nastaven", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Vaše konfigurace Elementu obsahuje nesprávná data JSON. Vyřešte prosím problém a načtěte znovu stránku.", + "Unable to load config file: please refresh the page to try again.": "Nepodařilo se načíst konfigurační soubor: abyste to zkusili znovu, načtěte prosím znovu stránku.", + "Download Completed": "Stahování dokončeno", + "Open": "Otevřít", + "Previous/next recently visited room or community": "Předchozí/další nedávno navštívená místnost či skupina", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Nepodporovaný prohlížeč", + "Your browser can't run %(brand)s": "Váš prohlížeč nedokáže spustit %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s využívá pokročilých funkcí prohlížeče, které ten váš nepodporuje.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Pro nejlepší zážitek si prosím nainstalujte prohlížeč Chrome, Firefox, nebo Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Můžete pokračovat v užívání vašeho současného prohlížeče, ale některé (nebo dokonce všechny) funkce nemusí fungovat a vzhled a chování aplikace nemusí být správné.", + "I understand the risks and wish to continue": "Rozumím a přesto chci pokračovat", + "Go to element.io": "Přejít na element.io", + "Failed to start": "Nepovedlo se nastartovat", + "Powered by Matrix": "Běží na Matrixu", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s pro desktopový počítač (%(platformName)s)", + "Missing indexeddb worker script!": "Nenačetl se skript spravující indexdb!", + "Use %(brand)s on mobile": "Používání %(brand)s v mobilních zařízeních", + "Switch to space by number": "Přepnout na prostor podle čísla" } diff --git a/src/i18n/strings/cy.json b/src/i18n/strings/cy.json index 85986d02da..dcee3439ad 100644 --- a/src/i18n/strings/cy.json +++ b/src/i18n/strings/cy.json @@ -1,26 +1,17 @@ { - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Mae eich gosodiadau Riot yn cynnwys JSON annilys. Cywirwch y broblem ac ail-lwythwch y dudalen.", "The message from the parser is: %(message)s": "Y neges gan y dosrannudd yn: %(message)s", "Invalid JSON": "JSON annilys", - "Your Riot is misconfigured": "Mae eich Riot wedi'i gamosod", "Unexpected error preparing the app. See console for details.": "Gwall annisgwyl wrth baratoi'r app. Gweler y consol am fanylion.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Gosodiad annilys: dim ond un o default_server_config, default_server_name, neu default_hs_url y gall ei nodi.", "Invalid configuration: no default server specified.": "Gosodiad annilys: ni nodwyd gweinydd diofyn.", - "Riot Desktop on %(platformName)s": "Riot Cyfrifiadur ar %(platformName)s", "Unknown device": "Dyfais anhysbys", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s trwy %(browserName)s ar %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Mae angen i chi fod yn defnyddio HTTPS i osod galwad rhannu sgrin.", "powered by Matrix": "pwerwyd gan Matrix", - "Custom Server Options": "Opsiynau Gweinydd Addasadwy", - "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.": "Gallwch ddefnyddio'r opsiynau gweinydd addasadwy i mewngofnodi i mewn i weinyddion Matrix eraill trwy rhoi URL hafanweinydd gwahanol. Mae hyn yn caniatáu ichi ddefnyddio Riot gyda chyfrif Matrix sy'n bodoli eisoes ar hafanweinydd gwahanol.", "Dismiss": "Wfftio", - "Welcome to Riot.im": "Croeso i Riot.im", + "Welcome to Element": "Croeso i Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Sgwrsio a chydweithredu datganoledig a amgryptiedig â phwerwyd gan [matrix]", "Sign In": "Mewngofnodi", "Create Account": "Creu Cyfrif", - "Need help?": "Angen cymorth?", - "Chat with Riot Bot": "Sgwrsio gyda Riot Bot", "Explore rooms": "Archwilio Ystafelloedd", - "Room Directory": "Cyfeiriadur Ystafelloedd", "Go to your browser to complete Sign In": "Ewch i'ch porwr i gwblhau Mewngofnodi" } diff --git a/src/i18n/strings/da.json b/src/i18n/strings/da.json index 04819b0250..866fc36353 100644 --- a/src/i18n/strings/da.json +++ b/src/i18n/strings/da.json @@ -1,25 +1,36 @@ { - "Custom Server Options": "Brugerdefinerede serverindstillinger", - "Dismiss": "Afskedige", + "Dismiss": "Afslut", "powered by Matrix": "Drevet af Matrix", - "Riot Desktop on %(platformName)s": "Riot Desktop på %(platformName)s", "Unknown device": "Ukendt enhed", - "%(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.": "Du skal bruge HTTPS for at lave skærm-delings-opkald.", - "Welcome to Riot.im": "Velkommen til Riot.im", + "You need to be using HTTPS to place a screen-sharing call.": "Du skal bruge HTTPS for at lave skærmdelings opkald.", + "Welcome to Element": "Velkommen til Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentraliseret, krypteret chat & samarbejde baseret på [matrix]", - "Chat with Riot Bot": "Chat med Riot Bot", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Din Riot konfiguration indeholder ugyldig JSON. Venligst korrigér problemet og opdatér siden.", "The message from the parser is: %(message)s": "Beskeden fra parseren er: %(message)s", "Invalid JSON": "Ugyldig JSON", - "Your Riot is misconfigured": "Din Riot er konfigureret forkert", "Unexpected error preparing the app. See console for details.": "Uventet fejl ved forberedelse af appen. Se konsollen for detaljer.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig konfiguration: kan kun angive en af default_server_config, default_server_name eller default_hs_url.", - "Invalid configuration: no default server specified.": "Ugyldig konfiguration: ingen standardserver angivet.", - "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 bruge de brugertilpassede serverindstillinger til at logge på andre Matrix servere ved at angive en anden homeserver URL. Dette giver dig mulighed for at bruge Riot med en eksisterende Matrix konto på en anden homeserver.", - "Sign In": "Log på", - "Create Account": "Opret konto", - "Need help?": "Brug for hjælp?", + "Invalid configuration: no default server specified.": "Ugyldig konfiguration: Ingen standardserver er angivet.", + "Sign In": "Log ind", + "Create Account": "Opret brugerkonto", "Explore rooms": "Udforsk rum", - "Room Directory": "Rumliste" + "Missing indexeddb worker script!": "Manglende indexeddb worker script!", + "Unable to load config file: please refresh the page to try again.": "Ikke i stand til at indlæse konfigurationsfil: Genopfrisk venligst siden for at prøve igen.", + "Open user settings": "Åbn brugerindstillinger", + "Previous/next recently visited room or community": "Forrige/næste besøgte rum eller fællesskab", + "Go to your browser to complete Sign In": "Gå til din browser for at færdiggøre Log ind", + "Go to element.io": "Gå til element.io", + "I understand the risks and wish to continue": "Jeg forstår risikoen og ønsker at fortsætte", + "Unsupported browser": "Browser ikke understøttet", + "Open": "Åbn", + "Download Completed": "Hentning færdig", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Din Element konfiguration indeholder ugyldig JSON. Løs venligst problemet og genindlæs siden.", + "Your Element is misconfigured": "Din Element er konfigureret forkert", + "Your browser can't run %(brand)s": "Din browser kan ikke køre %(brand)s", + "Powered by Matrix": "Drevet af Matrix", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Failed to start": "Opstart mislykkedes", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop %(platformName)s", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kan fortsætte med at bruge din nuværende browser, men du kan opleve at visse eller alle funktioner ikke vil fungere korrekt.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Venligst installer Chrome,Firefox eller Safari for den bedste oplevelse.", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s bruger avanceret browser funktioner som ikke er understøttet af din nuværende browser." } diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index b501e70a4d..51d8054251 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1,27 +1,38 @@ { "powered by Matrix": "betrieben mit Matrix", - "Custom Server Options": "Benutzerdefinierte Server-Optionen", - "Dismiss": "Ablehnen", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s auf %(osName)s", - "Riot Desktop on %(platformName)s": "Riot Desktop auf %(platformName)s", + "Dismiss": "Ausblenden", "Unknown device": "Unbekanntes Gerät", - "You need to be using HTTPS to place a screen-sharing call.": "Du musst HTTPS nutzen um einen Anruf mit Bildschirmfreigabe durchzuführen.", - "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]", - "Chat with Riot Bot": "Chatte mit dem 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 kannst benutzerdefinierte Server-Optionen nutzen, um dich an anderen Matrix Servern anzumelden, indem du eine andere Heimserver-URL angibst. Dies erlaubt dir, Riot mit einem existierenden Matrix-Konto auf einem anderen Heimserver zu nutzen.", + "You need to be using HTTPS to place a screen-sharing call.": "Du musst HTTPS nutzen, um einen Anruf mit Bildschirmfreigabe durchzuführen.", + "Welcome to Element": "Willkommen bei Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung basierend auf [matrix]", "Sign In": "Anmelden", - "Create Account": "Account erstellen", - "Need help?": "Brauchst du Hilfe?", - "Explore rooms": "Erkunde Räume", - "Room Directory": "Raumverzeichnis", - "Unexpected error preparing the app. See console for details.": "Unerwarteter Fehler bei der Vorbereitung der App. Siehe Konsole für Details.", + "Create Account": "Konto erstellen", + "Explore rooms": "Räume erkunden", + "Unexpected error preparing the app. See console for details.": "Unerwarteter Fehler bei der Vorbereitung der App. Siehe in die Konsole für mehr Details.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ungültige Konfiguration: Es kann nur eine der Optionen default_server_config, default_server_name oder default_hs_url angegeben werden.", "Invalid configuration: no default server specified.": "Ungültige Konfiguration: Es wurde kein Standardserver angegeben.", - "Your Riot is misconfigured": "Dein Riot ist falsch konfiguriert", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Deine Riot Konfiguration enthält ungültiges JSON. Bitte korrigiere das Problem und lade die Seite neu.", "The message from the parser is: %(message)s": "Die Nachricht des Parsers ist: %(message)s", "Invalid JSON": "Ungültiges JSON", "Go to your browser to complete Sign In": "Gehe zu deinem Browser, um die Anmeldung abzuschließen", - "Open user settings": "Öffne Nutzer-Einstellungen" + "Open user settings": "Benutzereinstellungen öffnen", + "Unable to load config file: please refresh the page to try again.": "Konfigurationsdatei kann nicht geladen werden: Bitte aktualisiere die Seite, um es erneut zu versuchen.", + "Missing indexeddb worker script!": "Fehlendes indexeddb-Arbeitsskript!", + "Previous/next recently visited room or community": "Vorheriger/nächster kürzlich besuchter Raum oder Community", + "Unsupported browser": "Nicht unterstützter Browser", + "Go to element.io": "Gehe zu element.io", + "Failed to start": "Start fehlgeschlagen", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Please install Chrome, Firefox, or Safari for the best experience.": "Bitte installiere Chrome, Firefox oder Safari für das beste Erlebnis.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kannst deinen aktuellen Browser weiterhin verwenden. Es ist aber möglich, dass nicht alles richtig funktioniert oder das Aussehen der App inkorrekt ist.", + "I understand the risks and wish to continue": "Ich verstehe die Risiken und möchte fortfahren", + "Your Element is misconfigured": "Dein Element ist falsch konfiguriert", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Deine Elementkonfiguration enthält ungültiges JSON. Bitte korrigiere das Problem und lade die Seite neu.", + "Download Completed": "Herunterladen fertiggestellt", + "Open": "Öffnen", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s verwendet erweiterte Browserfunktionen, die von deinem Browser nicht unterstützt werden.", + "Your browser can't run %(brand)s": "Dein Browser kann %(brand)s nicht ausführen", + "Powered by Matrix": "Betrieben mit Matrix", + "Use %(brand)s on mobile": "Verwende %(brand)s am Handy", + "Switch to space by number": "Zum n-ten Space wechseln" } diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index d4b2268ec9..6535583321 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -1,25 +1,36 @@ { - "Custom Server Options": "Προσαρμοσμένες ρυθμίσεις διακομιστή", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s μέσω %(browserName)s σε %(osName)s", "Dismiss": "Απόρριψη", - "Riot Desktop on %(platformName)s": "Riot Desktop σε %(platformName)s", "Unknown device": "Άγνωστη συσκευή", "You need to be using HTTPS to place a screen-sharing call.": "Απαιτείται η χρήση HTTPS για την πραγματοποίηση κλήσης διαμοιρασμού επιφάνειας εργασίας.", "powered by Matrix": "λειτουργεί με το Matrix", - "Welcome to Riot.im": "Καλώς ήλθατε στο Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία και συνεργασία χρησιμοποιώντας το [matrix]", - "Chat with Riot Bot": "Συνομιλία με το Riot Bot", + "Welcome to Element": "Καλώς ήλθατε στο Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Αποκεντρωμένη, κρυπτογραφημένη συνεργασία συνομιλίας χρησιμοποιώντας το [matrix]", "Sign In": "Σύνδεση", "Create Account": "Δημιουργία Λογαριασμού", - "Need help?": "Χρειάζεστε βοήθεια;", - "Room Directory": "Ευρετήριο δωματίων", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Η ρύθμιση παραμέτρων σας του Riot περιλαμβάνει μη έγκυρο JSON. Παρακαλώ διορθώστε το πρόβλημα και επαναφορτώστε την σελίδα.", "The message from the parser is: %(message)s": "Το μήνυμα από τον αναλυτή είναι: %(message)s", "Invalid JSON": "Μη έγκυρο JSON", - "Your Riot is misconfigured": "Οι παράμετροι του Riot σας είναι λανθασμένα ρυθμισμένοι", "Unexpected error preparing the app. See console for details.": "Απρόοπτο σφάλμα κατά την προετοιμασία της εφαρμογής. Δείτε το τερματικό για λεπτομέρειες.", - "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Μη έγκυρη ρύθμιση παραμέτρων: δυνατότητα ορισμού μόνο ένα από τα default_server_config, default_server_name, ή default_hs_url.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Μη έγκυρη ρύθμιση: δυνατότητα ορισμού μόνο ένα από τα default_server_config, default_server_name, ή default_hs_url.", "Invalid configuration: no default server specified.": "Μη έγκυρη ρύθμιση παραμέτρων: δεν έχει οριστεί προκαθορισμένος διακομιστής.", - "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 σε ένα διαφορετικό διακομιστή φιλοξενίας.", - "Explore rooms": "Εξερευνήστε δωμάτια" + "Explore rooms": "Εξερευνήστε δωμάτια", + "Open": "Άνοιγμα", + "Go to your browser to complete Sign In": "Μεταβείτε στο πρόγραμμα περιήγησής σας για να ολοκληρώσετε τη σύνδεση", + "Powered by Matrix": "Με την υποστήριξη του Matrix", + "Please install Chrome, Firefox, or Safari for the best experience.": "Παρακαλούμε εγκαταστήστε Chrome, Firefox, ή Safari για καλύτερη εμπειρία χρήσης.", + "Your Element is misconfigured": "Το Element σας δεν εχει ρυθμιστεί σωστά", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Η ρύθμιση του Element περιέχει μη έγκυρο JSON. Διορθώστε το πρόβλημα και φορτώστε ξανά τη σελίδα.", + "Unable to load config file: please refresh the page to try again.": "Δεν είναι δυνατή η φόρτωση του αρχείου config: ανανεώστε τη σελίδα για να δοκιμάσετε ξανά.", + "Download Completed": "Η λήψη ολοκληρώθηκε", + "Open user settings": "Ανοίξτε τις ρυθμίσεις χρήστη", + "Previous/next recently visited room or community": "Προηγούμενο / επόμενο δωμάτιο ή κοινότητα που επισκεφτήκατε πρόσφατα", + "Unsupported browser": "Μη υποστηριζόμενο πρόγραμμα περιήγησης", + "Your browser can't run %(brand)s": "Το πρόγραμμα περιήγησής σας δεν μπορεί να εκτελέσει %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s χρησιμοποιεί προηγμένες δυνατότητες προγράμματος περιήγησης που δεν υποστηρίζονται από το τρέχον πρόγραμμα περιήγησής σας.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Μπορείτε να συνεχίσετε να χρησιμοποιείτε το τρέχον πρόγραμμα περιήγησής σας, αλλά ορισμένες ή όλες οι λειτουργίες ενδέχεται να μην λειτουργούν και η εμφάνιση και η αίσθηση της εφαρμογής ενδέχεται να είναι λανθασμένη.", + "I understand the risks and wish to continue": "Κατανοώ τους κινδύνους και επιθυμώ να συνεχίσω", + "Go to element.io": "Πήγαινε στο element.io", + "Failed to start": "Αποτυχία έναρξης", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "Missing indexeddb worker script!": "Απουσία indexeddb worker script!" } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index a7f2f40cce..f5e220b36a 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1,29 +1,36 @@ { - "Missing indexeddb worker script!": "Missing indexeddb worker script!", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.", "Invalid configuration: no default server specified.": "Invalid configuration: no default server specified.", - "Your Riot is misconfigured": "Your Riot is misconfigured", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.", + "Your Element is misconfigured": "Your Element is misconfigured", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.", "The message from the parser is: %(message)s": "The message from the parser is: %(message)s", "Invalid JSON": "Invalid JSON", "Unable to load config file: please refresh the page to try again.": "Unable to load config file: please refresh the page to try again.", "Unexpected error preparing the app. See console for details.": "Unexpected error preparing the app. See console for details.", + "Download Completed": "Download Completed", + "Open": "Open", + "Dismiss": "Dismiss", + "Switch to space by number": "Switch to space by number", "Open user settings": "Open user settings", - "Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s", + "Previous/next recently visited room or community": "Previous/next recently visited room or community", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", "Go to your browser to complete Sign In": "Go to your browser to complete Sign In", "Unknown device": "Unknown device", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", "You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.", - "powered by Matrix": "powered by Matrix", - "Custom Server Options": "Custom Server Options", - "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.": "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.", - "Dismiss": "Dismiss", - "Welcome to Riot.im": "Welcome to Riot.im", + "Powered by Matrix": "Powered by Matrix", + "Use %(brand)s on mobile": "Use %(brand)s on mobile", + "Unsupported browser": "Unsupported browser", + "Your browser can't run %(brand)s": "Your browser can't run %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uses advanced browser features which aren't supported by your current browser.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Please install Chrome, Firefox, or Safari for the best experience.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.", + "I understand the risks and wish to continue": "I understand the risks and wish to continue", + "Go to element.io": "Go to element.io", + "Failed to start": "Failed to start", + "Welcome to Element": "Welcome to Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]", "Sign In": "Sign In", "Create Account": "Create Account", - "Need help?": "Need help?", - "Chat with Riot Bot": "Chat with Riot Bot", - "Explore rooms": "Explore rooms", - "Room Directory": "Room Directory" + "Explore rooms": "Explore rooms" } diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index fb3b824aa6..8b47936fbc 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -1,25 +1,36 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s", - "Custom Server Options": "Custom Server Options", "Dismiss": "Dismiss", "powered by Matrix": "powered by Matrix", - "Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s", "Unknown device": "Unknown device", "You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.", - "Welcome to Riot.im": "Welcome to Riot.im", + "Welcome to Element": "Welcome to Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]", - "Chat with Riot Bot": "Chat with 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.": "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.", "Sign In": "Sign In", "Create Account": "Create Account", - "Need help?": "Need help?", "Explore rooms": "Explore rooms", - "Room Directory": "Room Directory", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.", "The message from the parser is: %(message)s": "The message from the parser is: %(message)s", "Invalid JSON": "Invalid JSON", - "Your Riot is misconfigured": "Your Riot is misconfigured", "Unexpected error preparing the app. See console for details.": "Unexpected error preparing the app. See console for details.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.", - "Invalid configuration: no default server specified.": "Invalid configuration: no default server specified." + "Invalid configuration: no default server specified.": "Invalid configuration: no default server specified.", + "Failed to start": "Failed to start", + "Go to element.io": "Go to element.io", + "I understand the risks and wish to continue": "I understand the risks and wish to continue", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Please install Chrome, Firefox, or Safari for the best experience.", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uses advanced browser features which aren't supported by your current browser.", + "Your browser can't run %(brand)s": "Your browser can't run %(brand)s", + "Unsupported browser": "Unsupported browser", + "Powered by Matrix": "Powered by Matrix", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Go to your browser to complete Sign In": "Go to your browser to complete Sign In", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "Previous/next recently visited room or community": "Previous/next recently visited room or community", + "Open user settings": "Open user settings", + "Open": "Open", + "Download Completed": "Download Completed", + "Unable to load config file: please refresh the page to try again.": "Unable to load config file: please refresh the page to try again.", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.", + "Your Element is misconfigured": "Your Element is misconfigured", + "Missing indexeddb worker script!": "Missing indexeddb worker script!" } diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 56fe44f420..544ec5eb94 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -1,27 +1,37 @@ { "Dismiss": "Rezigni", "powered by Matrix": "povigita per Matrix", - "Custom Server Options": "Propraj servilaj elektoj", - "Riot Desktop on %(platformName)s": "Riot Labortablo sur %(platformName)s", "Unknown device": "Nekonata aparato", "You need to be using HTTPS to place a screen-sharing call.": "Vi devas uzi HTTPS por ekranvidadi.", - "Welcome to Riot.im": "Bonvenon al Riot.im", + "Welcome to Element": "Bonvenon al Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Malcentra, ĉifrita babilado & kunlaboro povigita per [matrix]", - "Chat with Riot Bot": "Babilu kun la roboto Riot Bot", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s per %(browserName)s je %(osName)s", "Sign In": "Saluti", "Create Account": "Krei konton", - "Need help?": "Ĉu vi bezonas helpon?", "Explore rooms": "Esplori ĉambrojn", - "Room Directory": "Ĉambra dosierujo", - "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.": "Vi povas uzi proprajn servilajn elekteblojn por saluti al aliaj serviloj de Matrix per doni alian hejmeservilan URL-on. Tio povigos vin uzi Riot kun jama konto de Matrix en alia hejmservilo.", "Unexpected error preparing the app. See console for details.": "Neatendita eraro okazis dum la preparado de la aplikaĵo. Rigardu la konzolon por detaloj.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Nevalida agordo: vi povas specifi nur unu elekteblon el « default_server_config », « default_server_name », aŭ « default_hs_url ».", "Invalid configuration: no default server specified.": "Nevalida agordo: neniu implicita servilo estas specifita.", - "Your Riot is misconfigured": "Via kliento Riot estas misagordita", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Viaj Riot-agordoj enhavas nevalidan JSON-on. Bonvolu korekti la problemon kaj reŝarĝi la paĝon.", "The message from the parser is: %(message)s": "La mesaĝo el la analizilo estas: %(message)s", "Invalid JSON": "Nevalida JSON", "Go to your browser to complete Sign In": "Iru al via foliumilo por fini la saluton", - "Open user settings": "Malfermi agordojn de uzanto" + "Open user settings": "Malfermi agordojn de uzanto", + "Unable to load config file: please refresh the page to try again.": "Ne povas enlegi agordan dosieron: bonvolu reprovi per aktualigo de la paĝo.", + "Previous/next recently visited room or community": "Antaŭa/sekva freŝe vizitita ĉambro aŭ komunumo", + "Missing indexeddb worker script!": "Mankas fonskripto «indexeddb»!", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s labortabla (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Nesubtenata foliumilo", + "Please install Chrome, Firefox, or Safari for the best experience.": "Bonvolu instali foliumilon Chrome, Firefox, aŭ Safari, por la plej bona sperto.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Vi povas daŭre uzadi vian nunan foliumilon, sed iuj (eĉ ĉiuj) funkcioj eble ne funkcios, kaj la aspekto de la aplikaĵo eble ne estos ĝusta.", + "I understand the risks and wish to continue": "Mi komprenas la riskon kaj volas pluiĝi", + "Go to element.io": "Iri al element.io", + "Failed to start": "Malsukcesis starti", + "Download Completed": "Elŝuto finiĝis", + "Open": "Malfermi", + "Your Element is misconfigured": "Via Elemento estas misagordita", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Via agordaro de Elemento enhavas nevalidajn datumojn de JSON. Bonvolu korekti la problemon kaj aktualigi la paĝon.", + "Your browser can't run %(brand)s": "Via foliumilo ne povas ruli %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uzas specialajn funkciojn de foliumilo, kiujn via nuna foliumilo ne subtenas.", + "Powered by Matrix": "Povigata de Matrix", + "Use %(brand)s on mobile": "Uzi %(brand)s telefone" } diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 7a004f0b3a..8bbfe59aef 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -1,27 +1,38 @@ { - "Custom Server Options": "Opciones de Servidor Personalizado", "Unknown device": "Dispositivo desconocido", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s en %(osName)s", "Dismiss": "Omitir", "powered by Matrix": "con el poder de Matrix", - "Riot Desktop on %(platformName)s": "Riot Desktop en %(platformName)s", "You need to be using HTTPS to place a screen-sharing call.": "Debes usar HTTPS para hacer una llamada con pantalla compartida.", - "Welcome to Riot.im": "Bienvenido a Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones cifradas y descentralizadas y colaboración con el poder de [matrix]", - "Chat with Riot Bot": "Hablar con Riot Bot", + "Welcome to Element": "Te damos la bienvenida a Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones cifradas y descentralizadas. Funciona con [matrix]", "Sign In": "Iniciar sesión", "Create Account": "Crear cuenta", - "Need help?": "Ayuda?", "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.", - "Unexpected error preparing the app. See console for details.": "Error inesperado preparando la aplicación. Vea la consola para más detalles.", - "Your Riot is misconfigured": "Riot tiene un error de configuración", + "Unexpected error preparing the app. See console for details.": "Error inesperado preparando la aplicación. Ver la consola para más detalles.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuración errónea: sólo puede especificar uno de default_server_config, default_server_name, o default_hs_url.", "Invalid configuration: no default server specified.": "Configuración errónea: no se ha especificado servidor.", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Tu configuración de Riot contiene JSON inválido. Por favor corrige el error y recarga la página.", "The message from the parser is: %(message)s": "El mensaje del parser es: %(message)s", "Invalid JSON": "JSON inválido", "Open user settings": "Abrir opciones de usuario", - "Go to your browser to complete Sign In": "Abre tu navegador web para completar el registro" + "Go to your browser to complete Sign In": "Abre tu navegador web para completar el registro", + "Missing indexeddb worker script!": "¡Falta el Worker script “indexeddb”!", + "Unable to load config file: please refresh the page to try again.": "No se ha podido cargar el archivo de configuración. Recarga la página para intentarlo otra vez.", + "Previous/next recently visited room or community": "Anterior/siguiente sala o comunidad visitada recientemente", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s de escritorio (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Navegador no compatible", + "Please install Chrome, Firefox, or Safari for the best experience.": "Por favor, instale Chrome, Firefox, o Safari para la mejor experiencia.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Puedes seguir utilizando tu navegador actual, pero puede que algunas funcionalidades no estén disponibles o que algunas partes de la aplicación se muestren de forma incorrecta.", + "I understand the risks and wish to continue": "Entiendo los riesgos y quiero continuar", + "Go to element.io": "Ir a element.io", + "Failed to start": "Fallo al iniciar", + "Your Element is misconfigured": "Tu aplicación Element está mal configurada", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Tu configuración de Element contiene JSON inválido. Por favor corrígelo e inténtelo de nuevo.", + "Download Completed": "Descarga completada", + "Open": "Abrir", + "Your browser can't run %(brand)s": "Tu navegador no es compatible con %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funciones avanzadas que su navegador actual no soporta.", + "Powered by Matrix": "Funciona con Matrix", + "Use %(brand)s on mobile": "Usar %(brand)s en modo móvil", + "Switch to space by number": "Cambiar a espacio por número" } diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 75d4f02347..4a9eb8450a 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -1,7 +1,38 @@ { - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Sinu Rioti seadetes on vigane JSON. Palun, tee see korda ja laadi leht uuesti!", "The message from the parser is: %(message)s": "Sõnum parserist on: %(message)s", "Invalid JSON": "Vigane JSON", - "Your Riot is misconfigured": "Sinu Riot on valesti seadistatud", - "Unknown device": "Tundmatu seade" + "Unknown device": "Tundmatu seade", + "Invalid configuration: no default server specified.": "Vigane seadistus: vaikimisi server on määramata.", + "Unable to load config file: please refresh the page to try again.": "Seadistuste faili laadimine ei õnnestunud: uuesti proovimiseks palun laadi leht uuesti.", + "Unexpected error preparing the app. See console for details.": "Rakenduse ettevalmistamisel tekkis ootamatu viga. Täpsema teabe leiad konsoolist.", + "Open user settings": "Ava kasutaja seadistused", + "Go to your browser to complete Sign In": "Sisselogimiseks ava oma brauser", + "Dismiss": "Loobu", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Matrix'i protokollil põhinev hajutatud ja krüpteeritud suhtlus- ning ühistöörakendus", + "Explore rooms": "Uuri jututubasid", + "Missing indexeddb worker script!": "Lahendusest puudub indexeddb skript!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Vigane seadistus. Sa võid määrata vaid ühe alljärgnevatest: default_server_config, default_server_name või default_hs_url.", + "Previous/next recently visited room or community": "Eelmine/järgmine hiljuti kasutatud jututuba või kogukond", + "You need to be using HTTPS to place a screen-sharing call.": "Ekraani jagava kõne jaoks pead kasutama HTTPS-ühendust.", + "powered by Matrix": "põhineb Matrix'il", + "Welcome to Element": "Tere tulemast kasutama suhtlusrakendust Element", + "Sign In": "Logi sisse", + "Create Account": "Loo konto", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s'i töölauaversioon (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Sellele brauserile puudub tugi", + "Please install Chrome, Firefox, or Safari for the best experience.": "Parima kasutuskogemuse jaoks palun paigalda Chrome, Firefox või Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Sa võid jätkata praeguse brauseri kasutamist, kuid mõned või kõik funktsionaalsused ei pruugi toimida ning rakenduse välimus võib vigane olla.", + "I understand the risks and wish to continue": "Ma mõistan riske ja soovin jätkata", + "Go to element.io": "Mine element.io lehele", + "Failed to start": "Käivitamine ei õnnestunud", + "Download Completed": "Allalaadimine on lõpetatud", + "Open": "Ava", + "Your Element is misconfigured": "Sinu Element on valesti seadistatud", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Sinu Element'i seadistustes on vigased JSON-vormingus andmed. Palun paranda see viga ja laadi leht uuesti.", + "Your browser can't run %(brand)s": "%(brand)s ei toimi sinu brauseris", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s kasutab mitmeid uusi brauseri-põhiseid tehnoloogiaid, mis ei ole veel sinu veebibrauseris toetatud.", + "Powered by Matrix": "Põhineb Matrix'il", + "Use %(brand)s on mobile": "Kasuta %(brand)s rakendust nutiseadmes", + "Switch to space by number": "Vaata kogukonnakeskust tema numbri alusel" } diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index f8e204c34f..030f1138b0 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -1,27 +1,36 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s %(browserName)s bidez %(osName)s ostalarian", - "Custom Server Options": "Zerbitzari pertsonalizatuaren aukerak", "Dismiss": "Baztertu", - "powered by Matrix": "Matrix mamian", - "Riot Desktop on %(platformName)s": "Riot Desktop %(platformName)s plataforman", + "powered by Matrix": "Matrix-ekin egina", "Unknown device": "Gailu ezezaguna", "You need to be using HTTPS to place a screen-sharing call.": "HTTPS erabili behar duzu sekretuak partekatzeko dei bat ezartzeko.", - "Welcome to Riot.im": "Ongi etorri Riot.im mezularitzara", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Deszentralizatutako eta zifratutako txat eta elkarlana [matrix] sareari esker", - "Chat with Riot Bot": "Txateatu Riot botarekin", - "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.", + "Welcome to Element": "Ongi etorri Element mezularitzara", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Txat eta elkarlan deszentralizatua eta zifratua [matrix] sarean", "Sign In": "Hasi saioa", "Create Account": "Sortu kontua", - "Need help?": "Laguntza behar?", "Explore rooms": "Arakatu gelak", - "Room Directory": "Gelen direktorioa", "Unexpected error preparing the app. See console for details.": "Ustekabeko errorea aplikazioa prestatzean. Ikusi xehetasunak kontsolan.", - "Your Riot is misconfigured": "Zure Riot gaizki konfiguratuta dago", "Invalid configuration: no default server specified.": "Konfigurazio baliogabea: Ez da lehenetsitako zerbitzaririk zehaztu.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Konfigurazio baliogabea: default_server_config, default_server_name, edo default_hs_url bat bakarra zehaztu daiteke.", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Zure Riot konfigurazioak baliogabeko JSON kodea du. Zuzendu arazoa eta kargatu orria berriro.", "The message from the parser is: %(message)s": "Prozesatzailearen mezua hau da: %(message)s", "Invalid JSON": "JSON baliogabea", "Go to your browser to complete Sign In": "Joan zure nabigatzailera izena ematen bukatzeko", - "Open user settings": "Ireki erabiltzailearen ezarpenak" + "Open user settings": "Ireki erabiltzailearen ezarpenak", + "Missing indexeddb worker script!": "indexeddb langile scripta falta da!", + "Unable to load config file: please refresh the page to try again.": "Ezin izan da konfigurazio fitxategia kargatu: Saiatu orria birkargatzen.", + "Previous/next recently visited room or community": "Berriki bisitatutako aurreko/hurrengo gela edo komunitatea", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Onartu gabeko nabigatzailea", + "Please install Chrome, Firefox, or Safari for the best experience.": "Instalatu Chrome, Firefox, edo Safari esperientzia hobe baterako.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Zure oraingo nabigatzailea erabiltzen jarraitu dezakezu, baina ezaugarri batzuk agian ez dute funtzionatuko eta itxura desegokia izan daiteke.", + "I understand the risks and wish to continue": "Arriskuak ulertzen ditut eta jarraitu nahi dut", + "Go to element.io": "Joan element.io gunera", + "Failed to start": "Huts egin du abiatzean", + "Your Element is misconfigured": "Zure Element ez dago ondo konfiguratuta", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Zure Element-en konfigurazioak JSON baliogabea dauka. Mesedez, konpondu arazoa eta birkargatu orria.", + "Download Completed": "Deskarga burututa", + "Open": "Ireki", + "Your browser can't run %(brand)s": "Zure nabigatzaileak ezin du %(brand)s exekutatu", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s-(e)k zure oraingo nabigatzaile honek euskarririk ematen ez dien ezaugarri aurreratuak erabiltzen ditu.", + "Powered by Matrix": "Matrixekin egina" } diff --git a/src/i18n/strings/fa.json b/src/i18n/strings/fa.json index 4b0496ebb8..38b4441b00 100644 --- a/src/i18n/strings/fa.json +++ b/src/i18n/strings/fa.json @@ -1,19 +1,37 @@ { "powered by Matrix": "قدرت‌یافته از ماتریکس", - "Riot Desktop on %(platformName)s": "رایوت دسکتاپ بر %(platformName)s", "Unknown device": "دستگاه ناشناخته", - "Welcome to Riot.im": "به Riot.im خوش‌آمدید", - "Chat with Riot Bot": "با رایوت‌بات چت کنید", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "چت مرکزگریز و رمزنگاری‌شده & ارائه‌ای از ماتریکس", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s از طریق %(browserName)s بر %(osName)s", - "Custom Server Options": "تنظیمات سفارشی برای سرور", + "Welcome to Element": "به Element خوش‌آمدید", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "چت غیر‌متمرکز، رمزنگاری‌شده & قدرت‌گرفته از ماتریکس", "Dismiss": "نادیده بگیر", "You need to be using HTTPS to place a screen-sharing call.": "شما باید از ارتباط امن HTTPS برای به‌راه‌اندازی یک چتِ شامل به اشتراک‌گذاری صفحه‌ی کامیپوتر استفاده کنید.", "Invalid JSON": "JSON اشتباه", - "Open user settings": "تنظییمات کاربری", + "Open user settings": "تنظیمات کاربر", "Go to your browser to complete Sign In": "برای تکمیل ورود به مرورگر خود بروید", "Sign In": "ورود", "Create Account": "ایجاد اکانت", - "Need help?": "به کمک نیازمندید؟", - "Explore rooms": "کاوش اتاق" + "Explore rooms": "کاوش اتاق", + "Missing indexeddb worker script!": "اسکریپت کارگر نمایه پایگاه داده از دست رفته است!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "پیکربندی نامعتبر: فقط میتوانید یکی از default_server_config، default_server_name یا default_hs_url را مشخص کنید.", + "Invalid configuration: no default server specified.": "پیکربندی نامعتبر: سرور پیشفرض مشخص نشده است.", + "Your Element is misconfigured": "Element شما پیکربندی نشده است", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "پیکربندی المنت شما شامل JSON نا معتبر است. لطفا مشکل را اصلاح کنید و صفحه را بارگذاری مجدد کنید.", + "The message from the parser is: %(message)s": "پیام از طرف تجزیه کننده: %(message)s", + "Unable to load config file: please refresh the page to try again.": "قادر به بارگذاری فایل پیکربندی نیست: لطفا برای تلاش مجدد صفحه را تازه کنید.", + "Unexpected error preparing the app. See console for details.": "خطای غیر منتظره در آماده سازی برنامه. کنسول را برای جزئیات مشاهده کنید.", + "Download Completed": "بارگیری کامل شد", + "Open": "باز", + "Previous/next recently visited room or community": "قبلی/بعدی اتاق ها یا اجتماع های اخیرا بازدید شده", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s میزکار %(platformName)s", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s%(browserName)s، %(osName)s", + "Unsupported browser": "مرورگر پش‬تبانی نشده", + "Your browser can't run %(brand)s": "مرورگر شما نمیتواند %(brand)s را اجرا کند", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s از ویژگی های پیشرفته مرورگر استفاده میکند که در مرورگر فعلی شما پشتیبانی نمیشوند.", + "Please install Chrome, Firefox, or Safari for the best experience.": "لطفا برای تجربه بهتر کروم، فایرفاکس، یا سافاری را نصب کنید.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "شما میتوانید با مرورگر فعلی خود ادامه دهید، اما ممکن است برخی یا کل ویژگی ها کار نکنند و نگاه و احساس از برنامه ممکن است درست نباشد.", + "I understand the risks and wish to continue": "از خطرات این کار آگاهم و مایلم که ادامه بدهم", + "Go to element.io": "برو به element.io", + "Failed to start": "مشکل در آغاز", + "Powered by Matrix": "قدرت‌گرفته از ماتریکس", + "Use %(brand)s on mobile": "استفاده از %(brand)s روی گوشی" } diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 63dd8854ec..64b60b0753 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -1,25 +1,36 @@ { "Dismiss": "Hylkää", "Unknown device": "Tuntematon laite", - "Welcome to Riot.im": "Tervetuloa Riot.im-palveluun", - "Custom Server Options": "Palvelinasetukset", - "Riot Desktop on %(platformName)s": "Riot Desktop, %(platformName)s", + "Welcome to Element": "Tervetuloa Element-sovellukseen", "You need to be using HTTPS to place a screen-sharing call.": "Sinun täytyy käyttää HTTPS-yhteyttä, jotta voit jakaa ruudun puhelussa.", - "Chat with Riot Bot": "Keskustele Riot-botin kanssa", "powered by Matrix": "moottorina Matrix", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s, %(browserName)s, %(osName)s", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Hajautettua ja salattua viestintää Matrix-teknologialla", - "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 kotipalvelimella olevalla Matrix-tilillä.", "Sign In": "Kirjaudu", "Create Account": "Luo tili", - "Need help?": "Tarvitsetko apua?", "Explore rooms": "Selaa huoneita", - "Room Directory": "Huoneluettelo", "Unexpected error preparing the app. See console for details.": "Odottamaton virhe sovellusta valmisteltaessa. Katso konsolista lisätietoja.", - "Your Riot is misconfigured": "Riotin asetukset ovat pielessä", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Virheellinen asetus. Vain yhden seuraavista voi määrittää: default_server_config, default_server_name, tai default_hs_url.", "Invalid configuration: no default server specified.": "Virheellinen asetus: oletuspalvelinta ei ole määritetty.", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot-asetuksissasi on virheellistä JSONia. Korjaa ongelma ja lataa sivu uudelleen.", "The message from the parser is: %(message)s": "Viesti jäsentimeltä: %(message)s", - "Invalid JSON": "Virheellinen JSON" + "Invalid JSON": "Virheellinen JSON", + "Missing indexeddb worker script!": "Indexeddb-suorittajan skripti puuttuu!", + "Unable to load config file: please refresh the page to try again.": "Asetustiedostoa ei voi ladata. Yritä uudelleen lataamalla sivu uudelleen.", + "Open user settings": "Avaa käyttäjäasetukset", + "Previous/next recently visited room or community": "Edellinen/seuraava hiljattain vierailtu huone tai yhteisö", + "%(brand)s Desktop (%(platformName)s)": "%(brand)sin työpöytäversio (%(platformName)s)", + "Go to your browser to complete Sign In": "Tee kirjautuminen loppuun selaimessasi", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Selainta ei tueta", + "Please install Chrome, Firefox, or Safari for the best experience.": "Asenna Chrome, Firefox tai Safari, jotta kaikki toimii parhaiten.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Voit käyttää edelleen nykyistä selaintasi, mutta jotkut tai kaikki ominaisuudet eivät ehkä toimi ja sovelluksen ulkoasu voi olla virheellinen.", + "I understand the risks and wish to continue": "Ymmärrän riskit ja haluan jatkaa", + "Failed to start": "Käynnistys ei onnistunut", + "Download Completed": "Lataus valmis", + "Open": "Avaa", + "Go to element.io": "Mene osoitteeseen riot.im", + "Your Element is misconfigured": "Elementisi asetukset ovat pielessä", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element-asetuksesi sisältävät epäkelpoa JSONia. Korjaa ongelma ja lataa sivu uudelleen.", + "Powered by Matrix": "Moottorina Matrix", + "Your browser can't run %(brand)s": "%(brand)s ei toimi selaimessasi", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s käyttää edistyneitä selaimen ominaisuuksia, joita nykyinen selaimesi ei tue." } diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 7deba39b82..a64ffb3c9e 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -1,27 +1,37 @@ { - "Custom Server Options": "Options de serveur personnalisées", "Dismiss": "Ignorer", "powered by Matrix": "propulsé par Matrix", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s dans %(browserName)s sous %(osName)s", - "Riot Desktop on %(platformName)s": "Version bureau de Riot sur %(platformName)s", "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": "Discuter avec le bot Riot", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Discussion & collaboration décentralisées et chiffrées, propulsées par [matrix]", - "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.", + "Welcome to Element": "Bienvenue sur Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Messagerie et collaboration décentralisées et chiffrées, propulsées par [matrix]", "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", + "Explore rooms": "Parcourir les salons", "Unexpected error preparing the app. See console for details.": "Une erreur inattendue est survenue pendant la préparation de l’application. Consultez la console pour avoir des détails.", - "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuration invalide : il ne faut spécifier qu’un des trois champs entre default_server_config, default_server_name et default_hs_url.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuration invalide : il ne faut spécifier qu’un des trois champs parmis default_server_config, default_server_name et default_hs_url.", "Invalid configuration: no default server specified.": "Configuration invalide : aucun serveur par défaut spécifié.", - "Your Riot is misconfigured": "Votre Riot est mal configuré", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Votre configuration de Riot contient du JSON non valide. Corrigez ce problème et rechargez la page.", "The message from the parser is: %(message)s": "Le message de l’analyseur est : %(message)s", "Invalid JSON": "JSON non valide", "Go to your browser to complete Sign In": "Utilisez votre navigateur pour terminer la connexion", - "Open user settings": "Ouvrir les paramètres utilisateur" + "Open user settings": "Ouvrir les paramètres utilisateur", + "Missing indexeddb worker script!": "Script du worker IndexedDB manquant !", + "Unable to load config file: please refresh the page to try again.": "Impossible de charger le fichier de configuration : rafraichissez la page pour réessayer.", + "Previous/next recently visited room or community": "Salon ou communauté visité récemment précédent/suivant", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Navigateur non pris en charge", + "Please install Chrome, Firefox, or Safari for the best experience.": "Veuillez installer Chrome, Firefox ou Safari pour une expérience optimale.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Vous pouvez continuer à utiliser votre navigateur actuel, mais vous risquez de trouver que certaines fonctionnalités et/ou l’apparence de l’application sont incorrectes.", + "I understand the risks and wish to continue": "Je comprends les risques et souhaite continuer", + "Go to element.io": "Aller vers element.io", + "Failed to start": "Échec au démarrage", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s pour bureau (%(platformName)s)", + "Download Completed": "Téléchargement terminé", + "Open": "Ouvrir", + "Your Element is misconfigured": "Votre Element est mal configuré", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configuration de votre Element contient du JSON invalide. Veuillez corriger le problème et recharger la page.", + "Your browser can't run %(brand)s": "Votre navigateur ne peut pas exécuter %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s nécessite des fonctionnalités avancées que votre navigateur actuel ne prend pas en charge.", + "Powered by Matrix": "Propulsé par Matrix", + "Use %(brand)s on mobile": "Utiliser %(brand)s sur téléphone" } diff --git a/src/i18n/strings/ga.json b/src/i18n/strings/ga.json index fe8bfaf7be..53a6fdc9b6 100644 --- a/src/i18n/strings/ga.json +++ b/src/i18n/strings/ga.json @@ -1,18 +1,37 @@ { - "Riot Desktop on %(platformName)s": "Leagan gnáthríomhaire Riot ar %(platformName)s", "Unknown device": "Gléas nár aithníodh", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s trí %(browserName)s ar %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Ní mór HTTPS a úsáid chun glaoch comhroinnt scáileáin a chur.", "powered by Matrix": "cumhachtaithe ag Matrix", - "Custom Server Options": "Socruithe do fhreastalaí saincheaptha", - "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.": "Is féidir na socruithe do fhreastalaí saincheaptha a úsáid chun síniú isteach le freastalaithe Matrix eile ach URL freastalaí ar leith a shainiú. Cuirfidh sé seo ar do chumas Riot a úsáid le cuntas Matrix atá ar taifead ag an bhfreastalaí eile sin.", "Dismiss": "Cuir uait", - "Welcome to Riot.im": "Fáilte romhat chuig Riot.im", + "Welcome to Element": "Fáilte romhat chuig Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Meán comhrá agus comhoibriú, díláraithe agus criptithe, cumhachtaithe ag [matrix]", "Sign In": "Sínigh Isteach", "Create Account": "Déan cuntas a chruthú", - "Need help?": "An bhfuil cabhair uait?", - "Chat with Riot Bot": "Labhair le Riot Bot", "Explore rooms": "Breathnaigh thart ar na seomraí", - "Room Directory": "Eolaire na Seomraí" + "Your browser can't run %(brand)s": "Níl do bhrabhsálaí comhoiriúnach do %(brand)s", + "Go to your browser to complete Sign In": "Oscail do bhrabhsálaí agus críochnaigh an clárú", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Coinníonn do chumraíocht JSON neamhbhailí. Ceartaigh an fadhb agus athlódáil an leathanach le do thoil.", + "Your Element is misconfigured": "Níl do fheidhmchlár Element cumraithe i gceart", + "Previous/next recently visited room or community": "roimhe/chéad eile, seomra nó pobal is déanaí", + "Failed to start": "Theip chun tosú", + "I understand the risks and wish to continue": "Tuigim na rioscaí agus ba mhaith liom lean ar aghaidh", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "An féidir leat úsáid do bhrabhsálaí reatha, ach nár oibrí roinnt nó gach gné agus nár thaispeántar an feidhmchlár i gceart.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Suiteáil Chrome, Firefox, or Safari chun an taithí is fearr a fháil.", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "Úsáideann %(brand)s gnéithe ardforbartha nach bhfuil ar fáil faoi do bhrabhsálaí reatha.", + "Unsupported browser": "Brabhsálaí gan tacaíocht", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s deisce (%(platformName)s)", + "Unexpected error preparing the app. See console for details.": "Earráid nuair an feidhmchlár a hullmhú. Feic sa consól le haghaidh eolas.", + "Unable to load config file: please refresh the page to try again.": "Ní féidir an comhad cumraíochta a lódáil. Athnuaigh an leathanach chun déanamh iarracht arís le do thoil.", + "Download Completed": "Íoslódáil críochnaithe", + "Invalid JSON": "JSON neamhbhailí", + "The message from the parser is: %(message)s": "Is í an teachtaireacht as an parsálaí: %(message)s", + "Invalid configuration: no default server specified.": "Cumraíocht neamhbhailí: Níl aon freastalaí réamhshocraithe a sonrú.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Cumraíocht neamhbhailí: ní féidir ach ceann de default_server_config, default_server_name, nó default_hs_url a shonrú.", + "Missing indexeddb worker script!": "An script oibrí \"indexeddb\" ag iarraidh!", + "Powered by Matrix": "Cumhachtaithe ag Matrix", + "Go to element.io": "Téigh go element.io", + "Open user settings": "Oscail socruithe úsáideora", + "Open": "Oscail", + "Use %(brand)s on mobile": "Úsáid %(brand)s ar guthán póca" } diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 922610546e..c9b18d3cf2 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -1,25 +1,38 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s vía %(browserName)s en %(osName)s", - "Custom Server Options": "Opcións personalizadas do servidor", "Dismiss": "Rexeitar", "powered by Matrix": "funciona grazas a Matrix", - "Riot Desktop on %(platformName)s": "Riot Desktop en %(platformName)s", "Unknown device": "Dispositivo descoñecido", "You need to be using HTTPS to place a screen-sharing call.": "Precisa utilizar HTTPS para establecer unha chamada de pantalla compartida.", - "Welcome to Riot.im": "Benvida/o a Riot.im", + "Welcome to Element": "Benvida/o a Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversas e colaboración descentralizada e cifrada grazas a [matrix]", - "Chat with Riot Bot": "Conversa co bot 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.", - "Sign In": "Entrar", + "Sign In": "Conectar", "Create Account": "Crear conta", - "Need help?": "¿Precisas axuda?", "Explore rooms": "Explorar salas", - "Room Directory": "Directorio de salas", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "A configuración de Riot contén JSON non válido. Corrixe o problema e recarga a páxina.", "The message from the parser is: %(message)s": "A mensaxe desde o intérprete é: %(message)s", "Invalid JSON": "JSON non válido", - "Your Riot is misconfigured": "Riot está mal configurado", "Unexpected error preparing the app. See console for details.": "Fallo non agardado ao preparar a app. Detalles na consola.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuración non válida: só se pode indicar un de default_server_config, default_server_name, ou default_hs_url.", - "Invalid configuration: no default server specified.": "Configuración non válida: non se indicou servidor por omisión." + "Invalid configuration: no default server specified.": "Configuración non válida: non se indicou servidor por defecto.", + "Missing indexeddb worker script!": "Falta o script indexeddb!", + "Unable to load config file: please refresh the page to try again.": "Non se cargou o ficheiro de configuración: actualiza a páxina para reintentalo.", + "Open user settings": "Abrir axustes da usuaria", + "Previous/next recently visited room or community": "Anterior/seguinte sala ou comunidade recentes", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "Go to your browser to complete Sign In": "Abre o navegador para realizar a Conexión", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Navegador non soportado", + "Please install Chrome, Firefox, or Safari for the best experience.": "Instala Chrome, Firefox, ou Safari para ter unha mellor experiencia.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Podes continuar co teu navegador, pero algunhas características poderían non funcionar e o aspecto da aplicación podería non ser o correcto.", + "I understand the risks and wish to continue": "Entendo os riscos e desexo continuar", + "Go to element.io": "Ir a element.io", + "Failed to start": "Fallou o inicio", + "Download Completed": "Descarga realizada", + "Open": "Abrir", + "Your Element is misconfigured": "Element non está ben configurado", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "A configuración de Element contén JSON non válido. Corrixe o problema e recarga a páxina.", + "Your browser can't run %(brand)s": "O teu navegador non pode executar %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s utiliza características avanzadas do navegador que non están dispoñibles no teu navegador.", + "Powered by Matrix": "Funciona grazas a Matrix", + "Use %(brand)s on mobile": "Utiliza %(brand)s no móbil", + "Switch to space by number": "Cambiar a espazo polo número" } diff --git a/src/i18n/strings/he.json b/src/i18n/strings/he.json index f70f77fadb..29aaf5f218 100644 --- a/src/i18n/strings/he.json +++ b/src/i18n/strings/he.json @@ -1,19 +1,37 @@ { - "Custom Server Options": "הגדרות שרת מותאמות אישית", - "Dismiss": "שחרר", + "Dismiss": "התעלם", "powered by Matrix": "מופעל ע\"י Matrix", - "Riot Desktop on %(platformName)s": "רייוט לשולחן העבודה על גבי %(platformName)s", "Unknown device": "מכשיר לא ידוע", "You need to be using HTTPS to place a screen-sharing call.": "עליך להשתמש ב HTTPS בכדי לבצע שיחת ווידאו משותפת.", - "Welcome to Riot.im": "ברוכים הבאים ל Riot.im", - "Chat with Riot Bot": "שיחה עם Riot בוט", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s באמצעות הדפדפן %(browserName)s על גבי %(osName)s", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "צ'ט מוצפן & ושת\"פ נעשה ע\"י ה [matrix]", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "תצורת Riot שלך מכילה JSON לא חוקי. אנא תקן את הבעיה וטען מחדש את הדף.", + "Welcome to Element": "ברוכים הבאים ל Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "צא'ט וכלי שיתוף פעולה מבוזר ומוצפן & מופעל ע\"י [matrix]", "Invalid JSON": "JSON לא חוקי", - "Your Riot is misconfigured": "ה Riot שלך מוגדר באופן שגוי", - "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "תצורה שגויה: ניתן לציין רק אחד מהבאים, default_server_config, default_server_name, או default_hs_url.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "תצורה שגויה: ניתן לציין רק אחד מהערכים הבאים, default_server_config, default_server_name, או default_hs_url.", "Invalid configuration: no default server specified.": "תצורה שגויה: לא צוין שרת ברירת מחדל.", - "Open user settings": "פתיחת הגדרות משתמש", - "Go to your browser to complete Sign In": "עבור לדפדפן להמשך ההתחברות" + "Open user settings": "פתח הגדרות משתמש", + "Go to your browser to complete Sign In": "עבור לדפדפן להמשך ההתחברות", + "Explore rooms": "שיטוט בחדרים", + "Create Account": "יצירת חשבון", + "Sign In": "כניסה", + "Previous/next recently visited room or community": "הבא\\קודם חדרים וקהילות שביקרתם לאחרונה", + "Open": "פתח", + "Download Completed": "ההורדה הושלמה", + "Unexpected error preparing the app. See console for details.": "שגיאה לא צפויה במהלך הכנת האפליקציה. ראו קונסול לפרטים נוספים.", + "Unable to load config file: please refresh the page to try again.": "לא יכול לטעון את קובץ ההגדרות: יש לרענן את הדף כדי לנסות שנית.", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "האלמנט מכיל הגדרת JSON שגויה, אנא תקנו את הבעיה ואתחלו את הדף.", + "Your Element is misconfigured": "האלמנט מוגדר באופן שגוי", + "Go to element.io": "חזור לאתר הראשי: element.io", + "I understand the risks and wish to continue": "הסיכונים מובנים לי ואני מעוניינ/ת להמשיך", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "ניתן להמשיך ולהשתמש בדפדפן זה, אך ייתכן שחלק מן התכונות והמאפיינים לא יעבדו כשורה או ייראו כשגויים.", + "Please install Chrome, Firefox, or Safari for the best experience.": "נא התקן את דפדפן כרום, פיירפוקס או סאפרי בשביל החוויה הטובה ביותר.", + "Failed to start": "כשל בהעלאת התוכנה", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s משתמש בתכונות דפדפן מתקדמות שאינן נתמכות בדפדפן הנוכחי שלך.", + "Your browser can't run %(brand)s": "הדפדפן שלך לא יכול להריץ %(brand)s", + "Unsupported browser": "דפדפן לא נתמך", + "Powered by Matrix": "מופעל על ידי מטריקס", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s שולחן עבודה %(platformName)s", + "The message from the parser is: %(message)s": "ההודעה מהמנתח היא: %(message)s", + "Missing indexeddb worker script!": "סקריפט indexeddb worker חסר!", + "Switch to space by number": "עבור אל 'Space' על פי מספרו" } diff --git a/src/i18n/strings/hi.json b/src/i18n/strings/hi.json index 7a66bef501..8aa012a860 100644 --- a/src/i18n/strings/hi.json +++ b/src/i18n/strings/hi.json @@ -1,18 +1,11 @@ { - "Riot Desktop on %(platformName)s": "%(platformName)s पर रायट डेस्कटॉप", "Unknown device": "अज्ञात यन्त्र", - "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s पर %(browserName)s के माध्यम से %(appName)s", "You need to be using HTTPS to place a screen-sharing call.": "स्क्रीन साझा की कॉल करने के लिए आपको HTTPS का उपयोग करने की आवश्यकता है।", - "Custom Server Options": "कस्टम सर्वर विकल्प", "Dismiss": "खारिज", "powered by Matrix": "मैट्रिक्स द्वारा संचालित", - "Welcome to Riot.im": "Riot.im में आपका स्वागत है", + "Welcome to Element": "Element में आपका स्वागत है", "Decentralised, encrypted chat & collaboration powered by [matrix]": "[मैट्रिक्स] द्वारा संचालित विकेंद्रीकृत, एन्क्रिप्टेड चैट और सहयोगिता", - "Chat with Riot Bot": "रायट बॉट के साथ चैट करें", "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 निर्दिष्ट करके अन्य मैट्रिक्स सर्वर में साइन इन करने के लिए कस्टम सर्वर विकल्पों का उपयोग कर सकते हैं। यह आपको एक अलग होमसर्वर पर मौजूदा मैट्रिक्स खाते के साथ रायट का उपयोग करने की अनुमति देता है।" + "Explore rooms": "रूम का अन्वेषण करें" } diff --git a/src/i18n/strings/hr.json b/src/i18n/strings/hr.json index 694579423f..a3dfce0429 100644 --- a/src/i18n/strings/hr.json +++ b/src/i18n/strings/hr.json @@ -1,12 +1,8 @@ { - "Riot Desktop on %(platformName)s": "Riot Desktop na %(platformName)s", "Unknown device": "Nepoznati uređaj", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s preko %(browserName)s na %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Morate koristiti HTTPS kako biste pokrenuli poziv s dijeljenjem ekrana.", - "Custom Server Options": "Prilagođene opcije poslužitelja", "Dismiss": "Odbaci", "powered by Matrix": "powered by Matrix", - "Welcome to Riot.im": "Dobrodošli u Riot.im", - "Chat with Riot Bot": "Razgovor s Riot Botom", + "Welcome to Element": "Dobrodošli u Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizirani, enkriptirani chat & kolaboracija powered by [matrix]" } diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 510d3c8115..a0785675c9 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -1,27 +1,38 @@ { - "Custom Server Options": "Egyedi szerverbeállítások", "Dismiss": "Eltüntetés", - "powered by Matrix": "Matrix hajtja", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s alkalmazás %(browserName)s böngészőn %(osName)s rendszeren", - "Riot Desktop on %(platformName)s": "Riot Desktop itt: %(platformName)s", + "powered by Matrix": "a gépházban: Matrix", "Unknown device": "Ismeretlen eszköz", - "You need to be using HTTPS to place a screen-sharing call.": "Képernyőmegosztás indításához HTTPS-t kell használnod.", - "Welcome to Riot.im": "Üdvözöl a Riot.im", + "You need to be using HTTPS to place a screen-sharing call.": "Képernyőmegosztás indításához HTTPS-t kell használnia.", + "Welcome to Element": "Üdvözli az Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizált, titkosított csevegés és kollaboráció [matrix] alapokon", - "Chat with Riot Bot": "Csevegés a Riot Robottal", - "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 létrehozása", - "Need help?": "Segíthetünk?", "Explore rooms": "Szobák felderítése", - "Room Directory": "Szobalista", - "Unexpected error preparing the app. See console for details.": "Váratlan hiba történt az alkalmazás előkészítésénél. A részletekért nézd meg a konzolt.", + "Unexpected error preparing the app. See console for details.": "Váratlan hiba történt az alkalmazás előkészítésénél. A részletekért lásd a konzolt.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Érvénytelen konfiguráció: csak egyet lehet megadni a default_server_config, default_server_name és default_hs_url közül.", - "Invalid configuration: no default server specified.": "Érvénytelen konfiguráció: nincs megadva alapértelmezett szerver.", - "Your Riot is misconfigured": "A Riotod hibásan van beállítva", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "A Riot beállításod érvénytelen JSON szöveget tartalmaz. Kérlek javítsd és töltsd újra az oldalt.", + "Invalid configuration: no default server specified.": "Érvénytelen konfiguráció: nincs megadva alapértelmezett kiszolgáló.", "The message from the parser is: %(message)s": "A feldolgozó algoritmus üzenete: %(message)s", "Invalid JSON": "Érvénytelen JSON", - "Go to your browser to complete Sign In": "A böngészőben fejezd be a bejelentkezést", - "Open user settings": "Felhasználói beállítások megnyitása" + "Go to your browser to complete Sign In": "A böngészőben fejezze be a bejelentkezést", + "Open user settings": "Felhasználói beállítások megnyitása", + "Missing indexeddb worker script!": "Hiányzó indexeddb worker parancsfájl!", + "Unable to load config file: please refresh the page to try again.": "A konfigurációs fájlt nem sikerült betölteni: frissítse az oldalt és próbálja meg újra.", + "Previous/next recently visited room or community": "Előző/következő nemrég meglátogatott szobák vagy közösségek", + "%(brand)s Desktop (%(platformName)s)": "Asztali %(brand)s (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "A böngésző nem támogatott", + "Please install Chrome, Firefox, or Safari for the best experience.": "A legjobb élmény érdékében telepítsen Chrome-ot, Firefoxot vagy Safarit.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Folytathatja a jelenlegi böngészőjével, de néhány vagy az összes funkció használhatatlan lehet, vagy hibák lehetnek az alkalmazás kinézetében és viselkedésében.", + "I understand the risks and wish to continue": "Megértettem a kockázatot és folytatom", + "Go to element.io": "Irány a element.io", + "Failed to start": "Az indítás sikertelen", + "Download Completed": "A letöltés befejeződött", + "Open": "Megnyitás", + "Your Element is misconfigured": "Az Element hibásan van beállítva", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Az Element érvénytelen JSON-t tartalmazó konfigurációval rendelkezik. Javítsa és töltse újra az oldalt.", + "Your browser can't run %(brand)s": "A böngészője nem tudja futtatni ezt: %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s speciális böngészőfunkciókat használ, amelyeket a jelenlegi böngészője nem támogat.", + "Powered by Matrix": "A gépházban: Matrix", + "Use %(brand)s on mobile": "Mobilon használd ezt: %(brand)s", + "Switch to space by number": "Tér váltás számmal" } diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json index 4a63e4ebd2..1b1b095415 100644 --- a/src/i18n/strings/id.json +++ b/src/i18n/strings/id.json @@ -1,12 +1,11 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s melalui %(browserName)s di %(osName)s", - "Custom Server Options": "Pilihan Server Khusus", "Dismiss": "Abaikan", "powered by Matrix": "didukung oleh Matrix", - "Riot Desktop on %(platformName)s": "Riot Desktop di %(platformName)s", "Unknown device": "Perangkat Tidak Diketahui", "You need to be using HTTPS to place a screen-sharing call.": "Anda perlu menggunakan HTTPS untuk melakukan panggilan berbagi-layar.", - "Welcome to Riot.im": "Selamat datang di Riot.im", + "Welcome to Element": "Selamat datang di Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Obrolan terenkripsi, terdesentralisasi & kolaborasi didukung oleh [matrix]", - "Chat with Riot Bot": "Mengobrol dengan bot Riot" + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfigurasi Element Anda mengandung JSON yang tidak valid. Mohon perbaiki masalahnya dan muat ulang halaman nya.", + "Invalid configuration: no default server specified.": "Konfigurasi tidak valid: server default belum ditentukan.", + "Missing indexeddb worker script!": "Tidak ada script worker indexeddb!" } diff --git a/src/i18n/strings/is.json b/src/i18n/strings/is.json index f716cc23dc..7dcd7cb429 100644 --- a/src/i18n/strings/is.json +++ b/src/i18n/strings/is.json @@ -1,12 +1,37 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s með %(browserName)s á %(osName)s", "powered by Matrix": "keyrt með Matrix", - "Welcome to Riot.im": "Velkomin í Riot.im", - "Riot Desktop on %(platformName)s": "Riot skjáborðsforrit á %(platformName)s", + "Welcome to Element": "Velkomin í Element", "Unknown device": "Óþekkt tæki", - "Dismiss": "Hafna", - "Custom Server Options": "Sérsniðnir valkostir vefþjóns", + "Dismiss": "Hunsa", "You need to be using HTTPS to place a screen-sharing call.": "Þú verður að nota HTTPS til að hringja samtal með deilingu á skjá.", - "Chat with Riot Bot": "Spjalla við Riot-róbótann", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Dulritað dreifvinnsluspjall & samstarfstól keyrt með [matrix]" + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Dulritað dreifvinnsluspjall & samstarfstól keyrt með [matrix]", + "Open": "Opna", + "Unsupported browser": "Óstuddur vafri", + "Your browser can't run %(brand)s": "Vafri þinn geta ekki keyrt upp %(brand)s", + "Sign In": "Skrá inn", + "Create Account": "Stofna Reikning", + "Explore rooms": "Kanna herbergi", + "Missing indexeddb worker script!": "Að vanta indexeddb vinnumaður tölvuhandrit!", + "The message from the parser is: %(message)s": "Skilaboðið frá þáttaranum er %(message)s", + "Invalid JSON": "Ógilt JSON", + "Download Completed": "Niðurhalið Búið", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Please install Chrome, Firefox, or Safari for the best experience.": "vinsamlegast setja upp Chrome, Firefox, eða Safari fyrir besta reynsluna.", + "I understand the risks and wish to continue": "Ég skil áhættuna og óska að halda áfram", + "Go to element.io": "farðu í element.io", + "Unexpected error preparing the app. See console for details.": "Óvænt villa við undirbúning appsins. Sjá nánar í textaskrá vafra.", + "Failed to start": "Mistókst að ræsa", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Þú getur haldið áfram að nota núverandi vafra, en sumar eða allir eiginleikar virka ekki og útlit og tilfinning forritsins geta verið röng.", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s notar háþróaða vafraeiginleika sem eru ekki studdir af núverandi vafra þínum.", + "Powered by Matrix": "Keyrt af Matrix", + "Go to your browser to complete Sign In": "Farðu í vafrann þinn til að ljúka innskráningu", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Borðtölva (%(platformName)s)", + "Previous/next recently visited room or community": "Fyrra/næsta nýlega heimsótt herbergi eða samfélag", + "Open user settings": "Opna notandastillingar", + "Unable to load config file: please refresh the page to try again.": "Ekki er hægt að hlaða stillingaskrána: endurnýjaðu síðuna til að reyna aftur.", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element stillingar þínar innihalda ógilda JSON. Vinsamlegast leiðréttu vandamálið og endurhladdu síðuna.", + "Your Element is misconfigured": "Element þitt er rangt stillt", + "Invalid configuration: no default server specified.": "Ógild stilling: enginn sjálfgefinn þjónn tilgreindur.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ógild stilling: getur aðeins tilgreint einn af default_server_config, default_server_name eða default_hs_url.", + "Use %(brand)s on mobile": "Nota %(brand)s í síma" } diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 51b128a08e..4601f249f2 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -1,27 +1,38 @@ { - "Custom Server Options": "Opzioni server personalizzate", "Dismiss": "Chiudi", "powered by Matrix": "offerto da Matrix", - "Riot Desktop on %(platformName)s": "Riot Desktop su %(platformName)s", "Unknown device": "Dispositivo sconosciuto", "You need to be using HTTPS to place a screen-sharing call.": "Devi usare HTTPS per effettuare una chiamata con la condivisione dello schermo.", - "Welcome to Riot.im": "Benvenuti su Riot.im", - "Chat with Riot Bot": "Chatta con Riot Bot", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s tramite %(browserName)s su %(osName)s", + "Welcome to Element": "Benvenuti su Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat criptate, decentralizzate e collaborazioni offerte da [matrix]", - "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.": "Puoi usare le opzioni di server personalizzato per accedere ad altri server Matrix specificando un URL homeserver diverso. Ciò ti permette di usare Riot con un account Matrix esistente su un homeserver differente.", "Sign In": "Accedi", "Create Account": "Crea account", - "Need help?": "Serve aiuto?", "Explore rooms": "Esplora stanze", - "Room Directory": "Elenco stanze", "Unexpected error preparing the app. See console for details.": "Errore inaspettato preparando l'app. Vedi la console per i dettagli.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configurazione non valida: specificare solo uno di default_server_config, default_server_name, o default_hs_url.", "Invalid configuration: no default server specified.": "Configurazione non valida: nessun server predefinito specificato.", - "Your Riot is misconfigured": "Il tuo Riot è configurato male", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "La tua configurazione di Riot contiene un JSON non valido. Correggi il problema e ricarica la pagina.", "The message from the parser is: %(message)s": "Il messaggio dal parser è: %(message)s", "Invalid JSON": "JSON non valido", "Go to your browser to complete Sign In": "Vai nel tuo browser per completare l'accesso", - "Open user settings": "Apri impostazioni utente" + "Open user settings": "Apri impostazioni utente", + "Missing indexeddb worker script!": "Script di lavoro indexeddb mancante!", + "Unable to load config file: please refresh the page to try again.": "Impossibile caricare il file di configurazione: ricarica la pagina per riprovare.", + "Previous/next recently visited room or community": "Avanti/indietro stanze o comunità visitate di recente", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Browser non supportato", + "Please install Chrome, Firefox, or Safari for the best experience.": "Installa Chrome, Firefox, o Safari per una migliore esperienza.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Puoi comunque usare il browser attuale, ma alcune o tutte le caratteristiche potrebbero non funzionare e l'aspetto dell'applicazione potrebbe essere sbagliato.", + "I understand the risks and wish to continue": "Capisco i rischi e desidero continuare", + "Go to element.io": "Vai su element.io", + "Failed to start": "Avvio fallito", + "Download Completed": "Scaricamento completato", + "Open": "Apri", + "Your Element is misconfigured": "Il tuo elemento è configurato male", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configurazione del tuo elemento contiene un JSON non valido. Correggi il problema e ricarica la pagina.", + "Your browser can't run %(brand)s": "Il tuo browser non può eseguire %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funzionalità avanzate del browser che non sono supportate dal tuo browser attuale.", + "Powered by Matrix": "Offerto da Matrix", + "Use %(brand)s on mobile": "Usa %(brand)s su mobile", + "Switch to space by number": "Passa allo spazio per numero" } diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index f7314c77a6..4bc406a73f 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -1,25 +1,36 @@ { - "Welcome to Riot.im": "Riot.imへようこそ", + "Welcome to Element": "Element へようこそ", "Unknown device": "不明な端末", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)sは%(osName)sの%(browserName)s上で動作しています", - "Custom Server Options": "カスタムサーバのオプション", "Dismiss": "やめる", "powered by Matrix": "powered by Matrix", - "Riot Desktop on %(platformName)s": "%(platformName)s向けデスクトップ版Riot", "You need to be using HTTPS to place a screen-sharing call.": "画面共有通話を行うにはHTTPS通信を使う必要があります。", "Decentralised, encrypted chat & collaboration powered by [matrix]": "[matrix] による、分散型で暗号化された会話とコラボレーション", - "Chat with Riot Bot": "Riot Botと会話", "Unexpected error preparing the app. See console for details.": "アプリケーションの準備中に予期しないエラーが発生しました。詳細はコンソールを参照してください。", - "Your Riot is misconfigured": "あなたのRiotは設定が間違っています", "Invalid configuration: no default server specified.": "不正な設定です:デフォルトのサーバーが設定されていません。", "Sign In": "サインイン", - "Create Account": "アカウントを作成する", - "Need help?": "助けが必要ですか?", - "Explore rooms": "部屋を探索する", - "Room Directory": "部屋のディレクトリー", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riotの設定に妥当でないJSONが含まれています。問題を修正してページを再読みしてください。", + "Create Account": "アカウントの作成", + "Explore rooms": "部屋を探す", "The message from the parser is: %(message)s": "パーザーのメッセージ: %(message)s", "Invalid JSON": "妥当でないJSON", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "無効な設定: default_server_config、default_server_name、または default_hs_urlのいずれか一つのみが指定できます。", - "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を使うことができます。" + "Please install Chrome, Firefox, or Safari for the best experience.": "最高のユーザー体験を得るためには、ChromeFirefox、もしくはSafariをインストールしてください。", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "現在のブラウザを使い続けることもできますが、いくつか (もしくは全ての) 機能が動作しない可能性や、外観が崩れる可能性があります。", + "I understand the risks and wish to continue": "リスクを理解したうえで続行する", + "Missing indexeddb worker script!": "IndexedDBのワーカースクリプトがありません!", + "Unable to load config file: please refresh the page to try again.": "設定ファイルの読み込みに失敗しました: ページを再読み込みしてもう一度お試しください。", + "Download Completed": "ダウンロード完了", + "Open": "開く", + "Open user settings": "ユーザー設定を開く", + "%(brand)s Desktop (%(platformName)s)": "%(brand)sデスクトップ版(%(platformName)s)", + "Go to your browser to complete Sign In": "サインインを完了させるためにブラウザへ移動してください", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s(%(browserName)s, %(osName)s)", + "Unsupported browser": "サポートされていないブラウザ", + "Go to element.io": "element.ioへ移動", + "Failed to start": "起動に失敗しました", + "Your Element is misconfigured": "Elementの設定が間違っています", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Elementの設定ファイルに不正なJSONが含まれています。問題を修正してからページを再読込してください。", + "Your browser can't run %(brand)s": "このブラウザでは%(brand)sが動きません", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)sはブラウザの高度な機能を使う必要がありますが、このブラウザではその機能がサポートされていないようです。", + "Powered by Matrix": "Powered by Matrix", + "Previous/next recently visited room or community": "最近利用したルームまたはコミュニティ" } diff --git a/src/i18n/strings/jbo.json b/src/i18n/strings/jbo.json index 49671902ba..dfdb59549d 100644 --- a/src/i18n/strings/jbo.json +++ b/src/i18n/strings/jbo.json @@ -1,12 +1,36 @@ { - "Riot Desktop on %(platformName)s": "la skami nu zunti ci'e la'o gy. %(platformName)s .gy.", - "Unknown device": "lo na'e te djuno se pilno", - "%(appName)s via %(browserName)s on %(osName)s": "la'o gy. %(appName)s .gy. xe be'i la'o gy. %(browserName)s .gy. ci'e la'o gy. %(osName)s .gy.", - "You need to be using HTTPS to place a screen-sharing call.": ".i la .hytytypysys. sarcu lo nu co'a vidni jorne", - "Custom Server Options": "lo macnu se cuxna be fi lo'i samse'u", - "Dismiss": "mipri", - "powered by Matrix": ".i la nacmeimei cu cumgau", - "Welcome to Riot.im": ".i fi'i lo pilno be la nu zunti", - "Decentralised, encrypted chat & collaboration powered by [matrix]": ".i la nacmeimei cu cumgau lo mifra je na'e se midju nu tavla je ke kansa gunka", - "Chat with Riot Bot": "tavla la nu zunti kei sampre" + "Unknown device": "se samtcise'u vau je na slabu", + "You need to be using HTTPS to place a screen-sharing call.": ".i lo nu do pilno la'au xy. bu ty. ty. py. sy. li'u sarcu lo nu do co'a vidni benji", + "Dismiss": "nu mipri", + "powered by Matrix": ".i la .meitriks. cu jicmu", + "Decentralised, encrypted chat & collaboration powered by [matrix]": ".i la .meitriks. cu jicmu lo nu catni be na ku je mifra tavla je ke kansa gunka", + "Invalid JSON": ".i le veirdjeisano na drani", + "Download Completed": ".i mo'u kibycpa", + "Open": "nu viska", + "%(brand)s Desktop (%(platformName)s)": ".i la'o zoi. %(brand)s .zoi samtci .i le vanbi na kibrbrauzero .i la'o zoi. %(platformName)s .zoi samcmu", + "Go to your browser to complete Sign In": ".i do ka'e pilno pa kibrbrauzero lo nu mo'u co'a jaspu", + "%(appName)s (%(browserName)s, %(osName)s)": ".i la'o zoi. %(appName)s .zoi samtci .i la'o zoi. %(browserName)s .zoi kibrbrauzero .i la'o zoi. %(osName)s .zoi samcmu", + "Unsupported browser": ".i le kibrbrauzero na kakne", + "Your browser can't run %(brand)s": ".i na ka'e pilno le kibrbrauzero lo nu pilno la'o zoi. %(brand)s .zoi", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": ".i la'o zoi. %(brand)s .zoi pilno pa na jai se kakne be le kibrbrauzero", + "Please install Chrome, Firefox, or Safari for the best experience.": ".i ko ci'erse'a la .krom. ja la .fairfoks. ja la .safaris.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": ".i do ka'e za'o pilno le kibrbrauzero .i ku'i la'a spofu pa jo nai ro te pilno vau je na drani fa le jvinu", + "I understand the risks and wish to continue": ".i mi jimpe le du'u ckape vau vau je za'o djica", + "Go to element.io": "nu viska le se judri be zoi zoi. element.io .zoi", + "Failed to start": ".i da nabmi fi lo nu co'a pilno", + "Welcome to Element": ".i fi'i zo'e do pilno la .elyment.", + "Sign In": "nu co'a jaspu", + "Create Account": "nu pa re'u co'a jaspu", + "Explore rooms": "nu facki le du'u ve zilbe'i", + "Missing indexeddb worker script!": ".i na pa gunka samtci pe la'o zoi. indexeddb .zoi vanbi", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": ".i le tcimi'e vreji na drani le ka jai do'e fai gi jo nai zoi zoi. default_server_config .zoi gi zoi zoi. default_server_name .zoi gi zoi zoi. default_hs_url .zoi cmene da", + "Invalid configuration: no default server specified.": ".i le tcimi'e vreji na drani le ka jai do'e zmicu'a fo le ka samtcise'u", + "Your Element is misconfigured": ".i le tcimi'e be la .elyment. be'o vreji na drani", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": ".i le tcimi'e be la .elyment. be'o vreji na drani le ka veirdjeisano .i gau ko drani je ba kibycpa le kibypapri", + "The message from the parser is: %(message)s": ".i notci fi le genturfa'i fa zoi zoi. %(message)s .zoi", + "Unable to load config file: please refresh the page to try again.": ".i da nabmi fi lo nu samymo'i le tcimi'e vreji .i ko ba zukte le ka kibycpa le kibypapri kei le ka troci", + "Unexpected error preparing the app. See console for details.": ".i da nabmi fi lo nu co'a ka'e pilno le samtci .i ko tcidu le notci be fi le samymi'etci", + "Open user settings": "nu viska le pilno tcimi'e tutci", + "Previous/next recently visited room or community": "ve zilbe'i vau ja girzu vau je bo lamli'e vau ja se lamli'e", + "Powered by Matrix": ".i la .meitriks. cu jicmu" } diff --git a/src/i18n/strings/ka.json b/src/i18n/strings/ka.json index 268be2a093..5537dd7843 100644 --- a/src/i18n/strings/ka.json +++ b/src/i18n/strings/ka.json @@ -1,12 +1,31 @@ { - "Riot Desktop on %(platformName)s": "Riot Desktop-ი %(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-ს.", - "Custom Server Options": "პერსონალიზებული სერვერის პარამეტრები", "Dismiss": "უარის თქმა", "powered by Matrix": "Matrix-ზე დაფუძნებული", - "Welcome to Riot.im": "კეთილი იყოს თქვენი მობრძანება Riot.im-ზე", + "Welcome to Element": "კეთილი იყოს თქვენი მობრძანება Element-ზე", "Decentralised, encrypted chat & collaboration powered by [matrix]": "დეცენტრალიზებული, დაშიფრული ჩატი & კოლაბორაცია, დაფუძნებული [matrix]-ზე", - "Chat with Riot Bot": "ისაუბრეთ Riot-ის Bot-თან" + "Explore rooms": "ოთახების დათავლიერება", + "Failed to start": "ჩართვა ვერ მოხერხდა", + "Use %(brand)s on mobile": "გამოიყენე %(brand)s-ი მობილურზე", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s დესკტოპი (%(platformName)s)", + "Unexpected error preparing the app. See console for details.": "მოულოდნელი ერორი აპლიკაციის შემზადებისას. იხილეთ კონსოლი დეტალებისთვის.", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "თქვენი Element-ის კონფიგურაცია შეიცავს მიუღებელ JSON-ს. გთხოვთ გადაჭრათ პრობლემა და დაარაფრეშოთ გვერდი.", + "Sign In": "შესვლა", + "Invalid configuration: no default server specified.": "არასწორი კონფიგურაცია: მთავარი სერვერი არ არის მითითებული.", + "Create Account": "ანგარიშის შექმნა", + "Go to element.io": "გადადი element.io-ზე", + "I understand the risks and wish to continue": "მესმის რისკები და მსურს გაგრძელება", + "Unsupported browser": "ბრაუზერი არ არის მხარდაჭერილი", + "Your browser can't run %(brand)s": "შენ ბრაუზერს არ შეუძლია გაუშვას %(brand)s-ი", + "Unable to load config file: please refresh the page to try again.": "კონფიგურაციის ფაილის ჩატვირთვა ვერ მოხერხდა: დაარეფრეშე გვერდი თავიდან საცდელად", + "Invalid JSON": "მიუღებელი JSON-ი", + "Your Element is misconfigured": "შენი Element-ი არასწორადაა კონფიგურირებული", + "Please install Chrome, Firefox, or Safari for the best experience.": "გთხოვთ დააინსტალოთ Chrome-ი, Firefox-ი, ან Safari საუკეთესო გამოცდილებისთვის.", + "Powered by Matrix": "მუშაობს Matrix-ის მეშვეობით", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Go to your browser to complete Sign In": "გახსენი ბრაუზერი Sign In-ის დასასრულებლად", + "Open user settings": "მომხმარებლების პარამეტრების გახსნა", + "Open": "გახსნა", + "Download Completed": "გადმოწერა დასრულებულია" } diff --git a/src/i18n/strings/kab.json b/src/i18n/strings/kab.json index 0967ef424b..9a3ccd2ad8 100644 --- a/src/i18n/strings/kab.json +++ b/src/i18n/strings/kab.json @@ -1 +1,36 @@ -{} +{ + "Invalid JSON": "JSON armeɣtu", + "Open user settings": "Ldi iɣewwaṛen n useqdac", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s n tnarit (%(platformName)s)", + "Go to your browser to complete Sign In": "Ddu ɣer iminig akken ad tkemleḍ ajerred", + "Unknown device": "Ibenk arussin", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Create Account": "Rnu amiḍan", + "powered by Matrix": "s lmendad n Matrix", + "Dismiss": "Agwi", + "Sign In": "Kcem", + "Explore rooms": "Snirem tixxamin", + "Missing indexeddb worker script!": "Asekript n uxeddam Indexeddb ulac-it!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Tawila d tarmeɣtut: mudd-d kan yiwen seg default_server_config, default_server_name, neɣ default_hs_url.", + "Invalid configuration: no default server specified.": "Tawila d tarmeɣtut: ulac aqeddac amezwer i d-yettwafernen.", + "The message from the parser is: %(message)s": "Izen n umaslaḍ d: %(message)s", + "Unable to load config file: please refresh the page to try again.": "Yegguma ad d-yali ufaylu n twila: ma ulac aɣilif smiren asebter akken ad tεerḍeḍ tikkelt-nniḍen.", + "Unexpected error preparing the app. See console for details.": "Tella-d tuccḍa lawan n uheyyi n usnas: Wali tadiwent i wugar telqeyt.", + "Previous/next recently visited room or community": "Taxxamt neɣ tamɣiwent wuɣur kecmen imerza send/seld", + "You need to be using HTTPS to place a screen-sharing call.": "Ilaq-ak(am) ad tesqedceḍ HTTPs akken ad tesεeddiḍ asiwel s beṭṭu n ugdil.", + "Unsupported browser": "Ur yettusefrak ara yiminig", + "Please install Chrome, Firefox, or Safari for the best experience.": "Ma ulac aɣilif, sebded Chrome, Firefox, neɣSafari i tirmit igerrzen.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Tzemreḍ ad tkemmleḍ deg useqdec n yiminig-ik(im) amiran, maca kra n tmahilin neɣ akk zemrent ur nteddu ara, rnu arwes n usnas yezmer ad d-iban d armeɣtu.", + "I understand the risks and wish to continue": "Gziɣ ayen ara d-yeḍrun maca bɣiɣ ad kemmleɣ", + "Go to element.io": "Ṛuḥ ɣer element.io", + "Failed to start": "Asenker ur yeddi ara", + "Welcome to Element": "Ansuf ɣer Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Adiwenni & attekki araslemmas d uwgelhan s lmendad n [matrix]", + "Your Element is misconfigured": "Aferdis-inek·inem ur yettuswel ara akken iwata", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Deg twila n uferdis-inek·inem yella JSON d arameɣtu. Ttxil-k·m seɣti ugur syen ales asali n usebter.", + "Download Completed": "Asider yemmed", + "Open": "Ldi", + "Your browser can't run %(brand)s": "Iminig-inek·inem ur isselkan ara %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s isseqdac timahilin n yiminig leqqayen ur yessefrak ara yiminig-ik·im amiran.", + "Powered by Matrix": "Iteddu s lmendad n Matrix" +} diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index ee8889f753..6d2d710611 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -1,25 +1,28 @@ { - "Custom Server Options": "맞춤 서버 설정", "Dismiss": "버리기", "powered by Matrix": "Matrix의 지원을 받음", - "Riot Desktop on %(platformName)s": "%(platformName)s 용 Riot 데스크톱", "Unknown device": "알 수 없는 기기", - "Welcome to Riot.im": "Riot.im에 오신 것을 환영합니다", - "Chat with Riot Bot": "Riot 봇과 대화", - "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s 용 %(browserName)s에서 연 %(appName)s", + "Welcome to Element": "Element에 오신 것을 환영합니다", "You need to be using HTTPS to place a screen-sharing call.": "화면 공유 전화를 걸려면 HTTPS를 사용해야 합니다.", "Decentralised, encrypted chat & collaboration powered by [matrix]": "분산되고, 암호화된 대화 & [matrix]의 지원으로 협력", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot 설정이 올바르지 않은 JSON을 포함하고 있습니다. 문제를 해결한 후, 페이지를 새로고침하세요.", "The message from the parser is: %(message)s": "파서에서 온 메시지: %(message)s", "Invalid JSON": "잘못된 JSON", - "Your Riot is misconfigured": "Riot이 잘못 설정됨", "Unexpected error preparing the app. See console for details.": "앱을 준비하는 동안 예기치 않은 오류가 발생했습니다. 자세한 내용은 콘솔을 확인하세요.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "잘못된 설정: default_server_config 와 defalut_server_name, default_hs_url 중 하나만 지정할 수 있습니다.", "Invalid configuration: no default server specified.": "잘못된 설정: 기본 서버가 지정되지 않았습니다.", - "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을 사용할 수 있습니다.", "Sign In": "로그인", "Create Account": "계정 만들기", - "Need help?": "도움이 필요합니까?", "Explore rooms": "방 검색", - "Room Directory": "방 목록" + "Unable to load config file: please refresh the page to try again.": "설정 파일을 불러오는 데 실패: 페이지를 새로고침한 후에 다시 시도해 주십시오.", + "Open user settings": "사용자 설정 열기", + "Previous/next recently visited room or community": "최근에 방문한 이전/다음 방 또는 커뮤니티", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s 데스크탑 (%(platformName)s)", + "Go to your browser to complete Sign In": "로그인을 완료하려면 브라우저로 이동해주세요", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "지원되지 않는 브라우저", + "Please install Chrome, Firefox, or Safari for the best experience.": "최상의 경험을 위해 Chrome, Firefox, 또는 Safari를 설치해주세요.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "현재 사용중이신 브라우저를 계속 사용하셔도 됩니다, 다만 일부 기능들이 작동하지 않을 수 있으며 애플리케이션이 잘못돼 보일 수 있습니다.", + "I understand the risks and wish to continue": "위험하다는 것을 이해했으며 계속하고 싶습니다", + "Go to element.io": "element.io으로 가기", + "Failed to start": "시작 실패" } diff --git a/src/i18n/strings/lo.json b/src/i18n/strings/lo.json new file mode 100644 index 0000000000..a5dec91647 --- /dev/null +++ b/src/i18n/strings/lo.json @@ -0,0 +1,3 @@ +{ + "Open": "ເປີດ" +} diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json index fc2d6a572c..fe4d237c34 100644 --- a/src/i18n/strings/lt.json +++ b/src/i18n/strings/lt.json @@ -1,27 +1,37 @@ { "Unknown device": "Nežinomas įrenginys", "powered by Matrix": "veikia su Matrix", - "Welcome to Riot.im": "Sveiki atvykę į Riot.im", - "Chat with Riot Bot": "Kalbėtis su Riot Botu", - "Riot Desktop on %(platformName)s": "Riot Desktop, naudojant %(platformName)s", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s per %(browserName)s, naudojant %(osName)s", + "Welcome to Element": "Sveiki atvykę į Element", "You need to be using HTTPS to place a screen-sharing call.": "Norint skambinti naudojant ekrano vaizdo dalijimosi funkciją, jūs turite naudoti HTTPS.", - "Custom Server Options": "Pasirinktiniai Serverio Nustatymai", "Dismiss": "Atmesti", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizuoti, šifruoti pokalbiai ir bendradarbiavimas, veikiantis su [matrix]", "Sign In": "Prisijungti", - "Create Account": "Sukurti paskyrą", - "Need help?": "Reikia pagalbos?", + "Create Account": "Sukurti Paskyrą", "Explore rooms": "Žvalgyti kambarius", - "Room Directory": "Kambarių katalogas", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Jūsų Riot konfigūracijoje yra klaidingas JSON. Prašome pataisyti problemą ir iš naujo užkrauti puslapį.", "The message from the parser is: %(message)s": "Analizatoriaus žinutė yra: %(message)s", "Invalid JSON": "Klaidingas JSON", - "Your Riot is misconfigured": "Jūsų Riot yra neteisingai sukonfigūruotas", "Unexpected error preparing the app. See console for details.": "Netikėta klaida ruošiant programą. Norėdami sužinoti daugiau detalių, žiūrėkite konsolę.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Klaidinga konfigūracija: galima nurodyti tik vieną iš default_server_config, default_server_name, arba default_hs_url.", "Invalid configuration: no default server specified.": "Klaidinga konfigūracija: nenurodytas numatytasis serveris.", - "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.": "Jūs galite naudoti pasirinktinius serverio nustatymus, kad prisijungtumėte prie kitų Matrix serverių, nurodydami kito serverio URL. Tai leidžia jums naudotis Riot su esama Matrix paskyra kitame serveryje.", "Go to your browser to complete Sign In": "Norėdami užbaigti prisijungimą, eikite į naršyklę", - "Open user settings": "Atverti vartotojo nustatymus" + "Open user settings": "Atidaryti vartotojo nustatymus", + "Missing indexeddb worker script!": "Trūksta indexeddb worker skripto!", + "Unable to load config file: please refresh the page to try again.": "Nepavyko įkelti konfigūracijos failo: atnaujinkite puslapį, kad pabandytumėte dar kartą.", + "Previous/next recently visited room or community": "Ankstesnis/sekantis neseniai lankytas kambarys ar bendruomenė", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Kompiuteryje (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Nepalaikoma naršyklė", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Jūs galite toliau naudotis savo dabartine naršykle, bet kai kurios arba visos funkcijos gali neveikti ir programos išvaizda bei sąsaja gali būti neteisingai rodoma.", + "I understand the risks and wish to continue": "Suprantu šią riziką ir noriu tęsti", + "Go to element.io": "Eiti į element.io", + "Failed to start": "Nepavyko paleisti", + "Your Element is misconfigured": "Jūsų Element yra neteisingai sukonfigūruotas", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Jūsų Element konfigūracijoje yra klaidingas JSON. Ištaisykite problemą ir iš naujo įkelkite puslapį.", + "Download Completed": "Atsisiuntimas baigtas", + "Open": "Atidaryti", + "Your browser can't run %(brand)s": "Jūsų naršyklė negali paleisti %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s naudoja išplėstines naršyklės funkcijas, kurių jūsų dabartinė naršyklė nepalaiko.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Geriausiam veikimui suinstaliuokite Chrome, Firefox, arba Safari.", + "Powered by Matrix": "Veikia su Matrix", + "Use %(brand)s on mobile": "Naudoti %(brand)s mobiliajame telefone" } diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index bffc8fba52..6268c3f37b 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -1,25 +1,36 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s caur %(browserName)s un %(osName)s", - "Custom Server Options": "Iestatāmās servera opcijas", - "Dismiss": "Atteikt", + "Dismiss": "Aizvērt", "powered by Matrix": "Tiek darbināta ar Matrix", - "Riot Desktop on %(platformName)s": "Riot darbvirsma %(platformName)s", "Unknown device": "Nezināma ierīce", - "You need to be using HTTPS to place a screen-sharing call.": "Lai izmantotu ekrāna kopīgošanas zvanu, nepieciešams izmantot HTTPS savienojumu.", - "Welcome to Riot.im": "Esiet gaidīti Riot.im", + "You need to be using HTTPS to place a screen-sharing call.": "Lai veiktu ekrāna kopīgošanas zvanu, nepieciešams izmantot HTTPS savienojumu.", + "Welcome to Element": "Esiet laipni gaidīti Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizēta, šifrēta čata & kopdarbošanās sistēma uz [matrix] bāzes", - "Chat with Riot Bot": "Pačatot ar Riot botu", - "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.": "Varat izmantot pielāgotās servera opcijas, lai pierakstītos citos Matrix serveros, norādot citu mājas servera URL. Tas ļauj jums izmantot Riot ar esošu Matrix kontu citā mājas serverī.", - "Sign In": "Ienākt", + "Sign In": "Pierakstīties", "Create Account": "Izveidot kontu", - "Need help?": "Nepieciešama palīdzība?", - "Explore rooms": "Atklāt istabas", - "Room Directory": "Istabu Katalogs", + "Explore rooms": "Pārlūkot istabas", "Unexpected error preparing the app. See console for details.": "Negaidīta kļūda, sagatavojot lietotni. Sīkāku informāciju skatiet konsolē.", - "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Nederīga konfigurācija: var norādīt tikai vienu no default_server_config, default_server_name, vai default_hs_url.", - "Invalid configuration: no default server specified.": "Nekorekta konfigurācija: nav norādīts noklusējuma serveris.", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Jūsu Riot konfigurācijā ir nederīgs JSON. Lūdzu, izlabojiet problēmu un ielādējiet lapu atkārtoti.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Kļūdaina konfigurācija: var norādīt tikai vienu no parametriem default_server_config, default_server_name, vai default_hs_url.", + "Invalid configuration: no default server specified.": "Kļūdaina konfigurācija: nav norādīts noklusējuma serveris.", "The message from the parser is: %(message)s": "Ziņojums no parsētāja ir: %(message)s", - "Invalid JSON": "Nederīgs JSON", - "Your Riot is misconfigured": "Jūsu Riot ir nepareizi konfigurēts" + "Invalid JSON": "Kļūdains JSON", + "Unable to load config file: please refresh the page to try again.": "Neizdevās ielādēt konfigurācijas datni. Lūdzu, pārlādējiet lapu, lai mēģinātu vēlreiz.", + "Open user settings": "Atvērt lietotāja iestatījumus", + "Go to your browser to complete Sign In": "Pārejiet uz pārlūku, lai pabeigtu pierakstīšanos", + "Unsupported browser": "Neatbalstīts pārlūks", + "Please install Chrome, Firefox, or Safari for the best experience.": "Labākajai izmantošanas pieredzei, lūdzu, instalējiet Chrome, Firefox vai Safari pārlūku.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Jūs varat turpināt lietot savu pašreizējo pārlūku, bet dažas vai visas funkcijas nestrādās, un lietotnes izskats var būt nepareizs.", + "I understand the risks and wish to continue": "Es pieņemu riskus un vēlos turpināt", + "Go to element.io": "Ej uz element.io", + "Failed to start": "Neizdevās palaist", + "Powered by Matrix": "Darbojas uz Matrix", + "Previous/next recently visited room or community": "Iepriekšējā/nākošā nesen apmeklētā istaba vai kopiena", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s izmanto pārlūku papildus funkcijas, kas netiek atbalstītas šajā pārlūkā.", + "Your browser can't run %(brand)s": "Jūsu pārlūks nevar palaist %(brand)s", + "Missing indexeddb worker script!": "Trūkst indexeddb worker skripta!", + "Open": "Atvērt", + "Download Completed": "Lejupielāde pabeigta", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Jūsu Element konfigurācija satur kļūdainu JSON. Lūdzu, salabojiet problēmu un pārlādējiet lapu.", + "Your Element is misconfigured": "Jūsu Element ir nokonfigurēts kļūdaini", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)" } diff --git a/src/i18n/strings/ml.json b/src/i18n/strings/ml.json index a678c4336f..cc1cc4d500 100644 --- a/src/i18n/strings/ml.json +++ b/src/i18n/strings/ml.json @@ -1,12 +1,23 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(osName)sല്‍ %(browserName)s വഴി %(appName)s", - "Custom Server Options": "കസ്റ്റം സെര്‍വര്‍ ഓപ്ഷനുകള്‍", "Dismiss": "ഒഴിവാക്കുക", "powered by Matrix": "മാട്രിക്സില്‍ പ്രവര്‍ത്തിക്കുന്നു", - "Riot Desktop on %(platformName)s": "%(platformName)s ലെ റയട്ട് ഡെസ്ക്ടോപ്പ്", "Unknown device": "അപരിചിത ഡിവൈസ്", "You need to be using HTTPS to place a screen-sharing call.": "സ്ക്രീന്‍ ഷെയറിങ്ങ് കോള്‍ നടത്തണമെങ്കില്‍ https ഉപയോഗിക്കണം.", - "Welcome to Riot.im": "റയട്ടിലേക്ക് സ്വാഗതം", - "Chat with Riot Bot": "റയട്ട് ബോട്ടുമായി ചാറ്റ് ചെയ്യുക", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "വികേന്ദ്രീകൃത , എന്‍ക്രിപ്റ്റഡ് ചാറ്റ് & മാട്രിക്സ് നല്‍കുന്ന കൊളാബൊറേഷന്‍" + "Decentralised, encrypted chat & collaboration powered by [matrix]": "വികേന്ദ്രീകൃത , എന്‍ക്രിപ്റ്റഡ് ചാറ്റ് & മാട്രിക്സ് നല്‍കുന്ന കൊളാബൊറേഷന്‍", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s%(browserName)s%(osName)s", + "Please install Chrome, Firefox, or Safari for the best experience.": "ദയവായി Chrome, Firefox, അല്ലെങ്കിൽ Safari ഇൻസ്റ്റാൾ ചെയ്യുക.", + "Your Element is misconfigured": "നിങ്ങളുടെ Element തെറ്റായിട്ടാണ് കോൺഫിഗർ ചെയ്തിരിക്കുന്നത്", + "Invalid configuration: no default server specified.": "അസാധുവായ കോൺഫിഗറേഷൻ: സ്ഥിര സെർവർ ഒന്നും വ്യക്തമാക്കിയില്ല.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "അസാധുവായ കോൺഫിഗറേഷൻ: default_server_config, default_server_name, or default_hs_url-ൽ ഒരെണ്ണം മാത്രമേ വ്യക്തമാക്കാൻ കഴിയൂ.", + "Missing indexeddb worker script!": "indexeddb worker സ്ക്രിപ്റ്റ് കണ്ടെത്താനായില്ല!", + "Open user settings": "യൂസർ ക്രമീകരങ്ങൾ തുറക്കുക", + "Download Completed": "ഡൗൺലോഡ് പൂർത്തിയായി", + "Unsupported browser": "പിന്തുണയ്‌ക്കാത്ത ബ്രൗസർ", + "I understand the risks and wish to continue": "ഞാൻ അപകടസാധ്യതകൾ മനസിലാക്കുകയും തുടരാൻ ആഗ്രഹിക്കുകയും ചെയ്യുന്നു", + "Go to element.io": "element.io-ലേക്ക് പോവുക", + "Failed to start": "ആരംഭിക്കാൻ പരാജയപെട്ടു", + "Welcome to Element": "Element-ലേക്ക് സ്വാഗതം", + "Sign In": "പ്രവേശിക്കുക", + "Create Account": "അക്കൗണ്ട് സൃഷ്ടിക്കുക", + "Explore rooms": "മുറികൾ കണ്ടെത്തുക" } diff --git a/src/i18n/strings/mn.json b/src/i18n/strings/mn.json index 815e62eb92..a4bea556b7 100644 --- a/src/i18n/strings/mn.json +++ b/src/i18n/strings/mn.json @@ -1,27 +1,18 @@ { - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Таны Риот тохиргоо буруу ЖСОН агуулж байна. Зөв болгоод, хуудсыг ахин дуудна уу.", "The message from the parser is: %(message)s": "Парсераас ирсэн мессеж нь: %(message)s", "Invalid JSON": "Буруу ЖСОН", - "Your Riot is misconfigured": "Таны РИОТ тохиргоо буруу", "Unexpected error preparing the app. See console for details.": "Апп бэлдэх үед гарах ёсгүй алдаа. Дэлгэрэнгүйг консолоос харна уу.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Буруу тохиргоо: default_server_config, default_server_name, эсвэл default_hs_url утгын зөвхөн аль нэгийг л зааж болно.", "Invalid configuration: no default server specified.": "Буруу тохиргоо: Өгөгдсөл серверийг зааж өгөөгүй байна.", - "Riot Desktop on %(platformName)s": "%(platformName)s дээрх Риот Десктоп", "Unknown device": "Үл мэдэгдэх төхөөрөмж", - "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s дээр %(browserName)s -ээр дамжсан %(appName)s", "You need to be using HTTPS to place a screen-sharing call.": "Та дэлгэц хуваалцах дуудлага хийхдээ HTTPS ашиглах ёстой.", "powered by Matrix": "Matrix - Ивээв", - "Custom Server Options": "Кастом серверийн сонголтууд", - "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.": "Та кастом серверийн сонголтууд ашиглан серверийн хаягийг зааж, өөр сервер рүү нэвтэрч болно. Энэ нь танд Риотыг одоо байгаа матрикс аккаунтаараа өөр сервер дээр ашиглах боломж олгоно.", "Dismiss": "Орхих", - "Welcome to Riot.im": "Riot.im -д тавтай морил", + "Welcome to Element": "Element -д тавтай морил", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Төвлөрсөн бус, нууцлалтай чат & хамтын ажиллагааг [matrix] - ивээв", "Sign In": "Нэвтрэх", "Create Account": "Хэрэглэгч үүсгэх", - "Need help?": "Тусламж хэрэгтэй юу?", - "Chat with Riot Bot": "Риот боттой чатлах", "Explore rooms": "Өрөөнүүд үзэх", - "Room Directory": "Өрөөний директор", "Open user settings": "Хэрэглэгчийн тохиргоо нээх", "Go to your browser to complete Sign In": "Бүрэн нэвтрэхийн тулд вэб хөтөч рүү шилжинэ үү" } diff --git a/src/i18n/strings/nb_NO.json b/src/i18n/strings/nb_NO.json index a39058be74..9735fd732b 100644 --- a/src/i18n/strings/nb_NO.json +++ b/src/i18n/strings/nb_NO.json @@ -1,27 +1,36 @@ { - "Custom Server Options": "Server-instillinger", "powered by Matrix": "Drevet av Matrix", - "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.": "Du er nødt til å bruke HTTPS for å ha en samtale med skjermdeling.", "Dismiss": "Avvis", - "Welcome to Riot.im": "Velkommen til Riot.im", + "Welcome to Element": "Velkommen til Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Desentralisert, kryptert chat & samarbeid drevet av [matrix]", - "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.", "Sign In": "Logg inn", "Create Account": "Opprett konto", - "Need help?": "Trenger du hjelp?", - "Room Directory": "Alle rom", "Explore rooms": "Se alle rom", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot-konfigurasjonen din inneholder ugyldig JSON. Vennligst fiks problemet og oppdater siden.", "The message from the parser is: %(message)s": "Meldingen fra parseren er: %(message)s", "Invalid JSON": "Ugyldig JSON", - "Your Riot is misconfigured": "Riot er feilkonfigurert", "Invalid configuration: no default server specified.": "Ugyldig konfigurasjon: ingen standardserver spesifisert.", - "Unexpected error preparing the app. See console for details.": "Uventet feil oppsto mens appen ble gjort klar. Se konsollen for detaljer.", + "Unexpected error preparing the app. See console for details.": "Uventet feil ved klargjøring av appen. Se konsollen for detaljer.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig konfigurasjon: Spesifiser kun en av følgende: default_server_config, default_server_name eller default_hs_url.", "Open user settings": "Åpne brukerinnstillinger", - "Go to your browser to complete Sign In": "Gå til nettleseren din for å fullføre innloggingen" + "Go to your browser to complete Sign In": "Gå til nettleseren din for å fullføre innloggingen", + "Failed to start": "Kunne ikke starte", + "Go to element.io": "Gå til element.io", + "I understand the risks and wish to continue": "Jeg forstår risikoen og ønsker å fortsette", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kan fortsette å bruke din nåværende nettleser, men noen eller alle funksjonene fungerer kanskje ikke, og utseendet og følelsen av applikasjonen kan være feil.", + "Your browser can't run %(brand)s": "Nettleseren din kan ikke kjøre %(brand)s", + "Unsupported browser": "Ustøttet nettleser", + "Powered by Matrix": "Drevet av Matrix", + "Previous/next recently visited room or community": "Forrige/neste nylig besøkte rom eller samfunn", + "Download Completed": "Nedlasting Fullført", + "Unable to load config file: please refresh the page to try again.": "Kan ikke laste inn konfigurasjonsfil: oppdater siden for å prøve igjen.", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Ditt Element konfigurasjonen inneholder ugyldig JSON. Løs problemet og last siden på nytt.", + "Your Element is misconfigured": "Ditt Element er feilkonfigurert", + "Missing indexeddb worker script!": "Mangler indexeddb arbeiderskript!", + "Please install Chrome, Firefox, or Safari for the best experience.": "Vennligst installer Chrome, Firefox, eller Safari for den beste opplevelsen.", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s bruker avanserte nettleserfunksjoner som ikke støttes av din nåværende nettleser.", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Skrivebord (%(platformName)s)", + "Open": "Åpne" } diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 4bd39bf34e..47322348e0 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -1,27 +1,38 @@ { - "Custom Server Options": "Aangepaste serverinstellingen", - "Dismiss": "Afwijzen", + "Dismiss": "Sluiten", "powered by Matrix": "draait op Matrix", - "Riot Desktop on %(platformName)s": "Riot Desktop op %(platformName)s", "Unknown device": "Onbekend apparaat", "You need to be using HTTPS to place a screen-sharing call.": "Oproepen met schermdelen vergen HTTPS.", - "Welcome to Riot.im": "Welkom bij Riot.im", + "Welcome to Element": "Welkom bij Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Gedecentraliseerd en versleuteld chatten & samenwerken dankzij [matrix]", - "Chat with Riot Bot": "Met Riot-robot chatten", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s op %(osName)s", - "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.": "Met aangepaste serverinstellingen kunt u zich door een andere thuisserver-URL in te voeren aanmelden bij andere Matrix-servers. Zo kunt u Riot met een bestaand Matrix-account op een andere thuisserver gebruiken.", - "Sign In": "Aanmelden", - "Create Account": "Account aanmaken", - "Need help?": "Hulp nodig?", + "Sign In": "Inloggen", + "Create Account": "Registreren", "Explore rooms": "Gesprekken ontdekken", - "Room Directory": "Gesprekscatalogus", "Unexpected error preparing the app. See console for details.": "Er is een onverwachte fout opgetreden bij het voorbereiden van de app. Zie de console voor details.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuratiefout: kan slechts één van default_server_config, default_server_name, of default_hs_url opgeven.", - "Invalid configuration: no default server specified.": "Configuratiefout: geen standaardserver opgegeven.", - "Your Riot is misconfigured": "Uw Riot is onjuist geconfigureerd", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Uw Riot-configuratie bevat ongeldige JSON. Corrigeer het probleem en herlaad de pagina.", + "Invalid configuration: no default server specified.": "Configuratie ongeldig: geen standaardserver opgegeven.", "The message from the parser is: %(message)s": "De ontleder meldt: %(message)s", "Invalid JSON": "Ongeldige JSON", "Go to your browser to complete Sign In": "Ga naar uw browser om de aanmelding te voltooien", - "Open user settings": "Open de gebruikersinstellingen" + "Open user settings": "Open de gebruikersinstellingen", + "Missing indexeddb worker script!": "Het indexeddb script ontbreekt!", + "Unable to load config file: please refresh the page to try again.": "Kan het configuratiebestand niet laden. Herlaad de pagina alstublieft.", + "Previous/next recently visited room or community": "Vorige/volgende recent bezochte kamer of gemeenschap", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Niet-ondersteunde browser", + "Please install Chrome, Firefox, or Safari for the best experience.": "Installeer Chrome, Firefox, of Safari voor de beste gebruikservaring.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "U kunt uw huidige browser blijven gebruiken, maar sommige of alle functies zouden niet kunnen werken en de weergave van het programma kan verkeerd zijn.", + "I understand the risks and wish to continue": "Ik begrijp de risico's en wil verder gaan", + "Go to element.io": "Ga naar element.io", + "Failed to start": "Opstarten mislukt", + "Open": "Openen", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Uw Element configuratie bevat ongeldige JSON. Gelieve het probleem te corrigeren daarna de pagina te herladen.", + "Download Completed": "Download voltooid", + "Your Element is misconfigured": "Uw Element is verkeerd geconfigureerd", + "Your browser can't run %(brand)s": "Uw browser kan %(brand)s niet starten", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s gebruikt geavanceerde functies die niet ondersteund worden in uw huidige browser.", + "Powered by Matrix": "Mogelijk gemaakt door Matrix", + "Use %(brand)s on mobile": "Gebruik %(brand)s op uw mobiel", + "Switch to space by number": "Wissel naar space per nummer" } diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json index 2cd6b3c598..3189edcaf1 100644 --- a/src/i18n/strings/nn.json +++ b/src/i18n/strings/nn.json @@ -1,25 +1,22 @@ { - "Riot Desktop on %(platformName)s": "Riot på Skrivebord for %(platformName)s", "Unknown device": "Ukjend eining", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s gjennom %(browserName)s på %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Du må bruka HTTPS for å ha ein samtale med skjermdeling.", "Dismiss": "Avvis", "powered by Matrix": "Matrixdriven", - "Welcome to Riot.im": "Velkomen til Riot.im", + "Welcome to Element": "Velkomen til Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Desentralisert, kryptert nettprat & samarbeid drive av [matrix]", - "Chat with Riot Bot": "Nettprat med Riot Bot", - "Custom Server Options": "Tilpassa tenar-innstillingar", - "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.", "Sign In": "Logg inn", "Create Account": "Opprett konto", - "Need help?": "Treng du hjelp?", "Explore rooms": "Utforsk romma", - "Room Directory": "Romkatalog", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot-konfigurasjonen din har ugyldig JSON-kode. Korriger dette og last inn sida på nytt.", "The message from the parser is: %(message)s": "Meldinga frå kodetolkaren er: %(message)s", "Invalid JSON": "Ugyldig JSON", - "Your Riot is misconfigured": "Riot-klienten din er feilkonfiguert", "Unexpected error preparing the app. See console for details.": "Uventa feil under lasting av programmet. Sjå konsollen for detaljar.", - "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig konfigurasjon: berre muleg å berre spesifiere ein av default_server_config, default_server_name eller default_hs_url.", - "Invalid configuration: no default server specified.": "Ugyldig konfigurasjon: \"default server\" er ikkje spesifisert." + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig oppsett: berre muleg å berre spesifiere ein av default_server_config, default_server_name eller default_hs_url.", + "Invalid configuration: no default server specified.": "Ugyldig oppsett: ingen \"default server\" er spesifisert.", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Oppsettet for din Element inneheld ugyldig JSON. Sjekk konfigurasjonsfila, deretter last om sida.", + "Unable to load config file: please refresh the page to try again.": "Fekk ikkje til å lasta konfigurasjonsfila: last inn sida for å prøva om att.", + "Go to your browser to complete Sign In": "Opna nettlesaren din for å fullføra innlogginga", + "Unsupported browser": "Nettlesaren er ikkje støtta", + "Your browser can't run %(brand)s": "Din nettlesar kan ikkje køyra %(brand)s", + "Go to element.io": "Gå til element.io" } diff --git a/src/i18n/strings/oc.json b/src/i18n/strings/oc.json index 875bd575ca..ffe8b038fc 100644 --- a/src/i18n/strings/oc.json +++ b/src/i18n/strings/oc.json @@ -1,22 +1,36 @@ { - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Vòstra configuracion Riot conten de JSON invalid. Mercés de corregir lo problèma e d’actualizar la pagina.", "The message from the parser is: %(message)s": "Lo messatge de l’analisaire es : %(message)s", "Invalid JSON": "Invalid JSON", - "Your Riot is misconfigured": "Vòstre Riot es mal configurat", "Unexpected error preparing the app. See console for details.": "Error inesperada en preparant l’aplicacion. Vejatz la consòla pels detalhs.", - "Riot Desktop on %(platformName)s": "Riot Desktop sus %(platformName)s", "Go to your browser to complete Sign In": "Anatz al navegador per acabar la connexion", "Unknown device": "Periferic desconegut", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s sus %(osName)s", "powered by Matrix": "propulsat per Matrix", - "Custom Server Options": "Opcions de servidor personalizat", "Dismiss": "Refusar", - "Welcome to Riot.im": "La benvenguda a Riot.im", + "Welcome to Element": "La benvenguda a Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Messatjariá chifrada, descentralizada e collaborativa propulsada per [matrix]", "Sign In": "Se connectar", "Create Account": "Crear un compte", - "Need help?": "Besonh d’ajuda ?", - "Chat with Riot Bot": "Charrar amb lo robòt Riot", "Explore rooms": "Percórrer las salas", - "Room Directory": "Annuari de las sala" + "Missing indexeddb worker script!": "Lo worker script IndexedDB manca !", + "Invalid configuration: no default server specified.": "Configuracion invalida : pas de servidor per defauta especificat.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuracion invalida : podètz unicament especificar un camp entre default_server_config, default_server_name, o default_hs_url.", + "Failed to start": "Non se pòt pas lançar", + "Go to element.io": "Anar a element.io", + "I understand the risks and wish to continue": "Compréni los risques e vòli contunhar", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Podètz contunhar a utilizar lo vòstre navigator actual, mas qualques o totes las foncionalitats o/e l'apparéncia poirián mal foncionar .", + "Please install Chrome, Firefox, or Safari for the best experience.": "Si vos plai installatz Chrome, Firefox, o Safari per una melhora experiéncia.", + "Your browser can't run %(brand)s": "Lo vòstre navigator non pòt pas executar %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s utiliza de foncions avançadas que lo vòstre navigator non suporta pas.", + "Unsupported browser": "Navigator incompatible", + "Powered by Matrix": "Fonciona ambé Matrix", + "You need to be using HTTPS to place a screen-sharing call.": "Devetz utilizar HTTPS per apelar ambé partatge d'ecran.", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s de burèu (%(platformName)s)", + "Previous/next recently visited room or community": "Sala o comunautat recentament visitada precedenta/seguenta", + "Open user settings": "Dobrir los paramètres utilizaire", + "Open": "Dobrir", + "Download Completed": "Descargament acabat", + "Unable to load config file: please refresh the page to try again.": "Se pòt pas cargar lo fichièr de configuracion : si vos plai actualizatz la pagina per tornar ensajar.", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configuracion d'Element conténe de JSON invalid. Si vos plai corregitz lo problème e actualizatz la pagina.", + "Your Element is misconfigured": "Lo vòstre Element es mal configurat" } diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 283aa8b59f..19f5e8e455 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -1,27 +1,37 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s przez %(browserName)s na %(osName)s", - "Custom Server Options": "Niestandardowe opcje serwera", "Dismiss": "Zamknij", - "Riot Desktop on %(platformName)s": "Riot Desktop na %(platformName)s", "powered by Matrix": "napędzany przez Matrix", "Unknown device": "Nieznane urządzenie", "You need to be using HTTPS to place a screen-sharing call.": "Musisz używać bezpiecznego protokołu HTTPS aby użyć połączenia współdzielenia ekranu.", - "Welcome to Riot.im": "Witamy w Riot.im", + "Welcome to Element": "Witamy w Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Zdecentralizowany, szyfrowany czat & współpraca oparta na [matrix]", - "Chat with Riot Bot": "Rozmowa z Botem Riota", "Create Account": "Stwórz konto", "Sign In": "Zaloguj", - "Need help?": "Potrzebujesz pomocy?", - "Room Directory": "Katalog pokojów", "Explore rooms": "Przeglądaj pokoje", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracja Twojego Riot zawiera błędny plik JSON. Popraw swoją konfigurację i odśwież stronę.", "The message from the parser is: %(message)s": "Wiadomość od parsera to: %(message)s", "Invalid JSON": "Błędny JSON", - "Your Riot is misconfigured": "Twój Riot jest źle skonfigurowany", "Unexpected error preparing the app. See console for details.": "Niespodziewany błąd podczas przygotowywania aplikacji. Otwórz konsolę po szczegóły.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Błędna konfiguracja. Akceptowalne wartości to: default_server_config, default_server_name, default_hs_url.", "Invalid configuration: no default server specified.": "Błędna konfiguracja: nie wybrano domyślnego serwera.", - "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.": "Możesz użyć Niestandardowych Opcji Serwera by zalogować się do innych serwerów Matrix poprzez podanie URL innego serwera głównego. Dzięki temu możesz używać Riot z istniejącym kontem z innego serwera głównego.", "Open user settings": "Otwórz ustawienia użytkownika", - "Go to your browser to complete Sign In": "Aby dokończyć proces rejestracji, przejdź do swojej przeglądarki" + "Go to your browser to complete Sign In": "Aby dokończyć proces rejestracji, przejdź do swojej przeglądarki", + "Missing indexeddb worker script!": "Brakujący skrypt workera indexeddb!", + "Unable to load config file: please refresh the page to try again.": "Nie udało się załadować pliku konfiguracyjnego: odśwież stronę aby spróbować ponownie.", + "Previous/next recently visited room or community": "Poprzedni/następny niedawno odwiedzony pokój lub społeczność", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Niewspierana przeglądarka", + "Please install Chrome, Firefox, or Safari for the best experience.": "Zainstaluj Chrome, Firefox, lub Safari w celu zapewnienia najlepszego działania.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Możesz kontynuować używanie obecnej przeglądarki, lecz niektóre lub wszystkie funkcje mogą nie działać oraz wygląd aplikacji może być niepoprawny.", + "I understand the risks and wish to continue": "Rozumiem ryzyko i chcę kontynuować", + "Go to element.io": "Przejdź do element.io", + "Failed to start": "Nie udało się wystartować", + "Download Completed": "Pobieranie Zakończone", + "Open": "Otwórz", + "Your browser can't run %(brand)s": "Twoja przeglądarka nie obsługuje %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s używa zaawansowanych funkcji przeglądarki, które nie są dostępne w twojej przeglądarce.", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracja Elementa zawiera niepoprawny JSON. Popraw konfiguracje i odśwież stronę.", + "Your Element is misconfigured": "Element jest nieprawidłowo skonfigurowany", + "Powered by Matrix": "Zasilane przez Matrix", + "Use %(brand)s on mobile": "Użyj %(brand)s w telefonie" } diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index e7a5b028d9..707e4ab692 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -1,26 +1,31 @@ { - "Custom Server Options": "Opções do Servidor Personalizado", "Dismiss": "Descartar", "powered by Matrix": "powered by Matrix", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s em %(osName)s", - "Riot Desktop on %(platformName)s": "Riot Desktop em %(platformName)s", "Unknown device": "Dispositivo desconhecido", "You need to be using HTTPS to place a screen-sharing call.": "Necessita de estar a usar HTTPS para poder iniciar uma chamada com partilha de ecrã.", - "Welcome to Riot.im": "Bem-vindo ao Riot.im", + "Welcome to Element": "Boas-vindas ao Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, encriptado & colaborativo powered by [matrix]", - "Chat with Riot Bot": "Falar com o Bot do Riot", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "A sua configuração do Riot contém JSON inválido. Por favor corrija o erro e recarregue a página.", "The message from the parser is: %(message)s": "A mensagem do parser é: %(message)s", "Invalid JSON": "JSON inválido", - "Your Riot is misconfigured": "Existe um erro na configuração do Riot", "Unexpected error preparing the app. See console for details.": "Erro inesperado na preparação da aplicação. Veja a consola para mais detalhes.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuração inválida: só pode especificar uma das default_server_config, default_server_name, ou default_hs_url.", "Invalid configuration: no default server specified.": "Configuração inválida: servidor padrão não especificado.", - "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.": "Pode usar as opções de servidor personalizado, para iniciar sessão noutros servidores Matrix, especificando o URL do homeserver diferente. Isto autoriza-lo-á a usar Riot com a sua conta Matrix num servidor diferente.", "Sign In": "Iniciar sessão", "Create Account": "Criar conta", - "Need help?": "Ajuda?", "Explore rooms": "Explorar rooms", - "Room Directory": "Diretório de rooms", - "Go to your browser to complete Sign In": "Abra o seu navegador para completar o inicio de sessão" + "Go to your browser to complete Sign In": "Abra o seu navegador para completar o inicio de sessão", + "Open": "Abrir", + "Download Completed": "Transferência concluída", + "Unable to load config file: please refresh the page to try again.": "Não foi possível carregar o ficheiro de configuração: atualize a página para tentar novamente.", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "A configuração do Element contém um JSON inválido. Corrija o problema e recarregue a página.", + "Your Element is misconfigured": "O Element está configurado incorretamente", + "Powered by Matrix": "Desenvolvido por Matrix", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (2%(browserName)s, 3%(osName)s)", + "Go to element.io": "Visite element.io", + "I understand the risks and wish to continue": "Compreendo os riscos e pretendo continuar", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Podes continuar a utilizar teu browser atual, mas algumas funcionalidades podem não funcionar ou aparecerem de forma incorrecta.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Por favor, instala Chrome, Firefox, ou Safari para uma melhor experiência.", + "Unsupported browser": "Browser não suportado", + "Previous/next recently visited room or community": "Anterior/seguinte comunidade ou sala recentemente visitado", + "Open user settings": "Abrir definições do utilizador" } diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 19eedb2f7d..67dee8c093 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -1,25 +1,38 @@ { - "Custom Server Options": "Opções para Servidor Personalizado", - "Dismiss": "Descartar", + "Dismiss": "Dispensar", "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", "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", - "Chat with Riot Bot": "Converse com o bot do Riot", - "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 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.", - "Sign In": "Entrar", + "You need to be using HTTPS to place a screen-sharing call.": "Você precisa estar usando HTTPS para começar uma chamada de compartilhamento de tela.", + "Welcome to Element": "Boas-vindas a Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat & colaboração descentralizados e encriptados powered by [matrix]", + "Sign In": "Fazer signin", "Create Account": "Criar Conta", - "Need help?": "Precisa de ajuda?", - "Explore rooms": "Explore as salas", - "Room Directory": "Diretório de salas", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Sua configuração do Riot contém JSON inválido. Por favor corrija o erro e atualize a página.", + "Explore rooms": "Explorar salas", "The message from the parser is: %(message)s": "A mensagem do parser é: %(message)s", "Invalid JSON": "JSON inválido", - "Your Riot is misconfigured": "Riot possui um erro de configuração", - "Unexpected error preparing the app. See console for details.": "Erro inesperado preparando o aplicativo. Veja o console para mais detalhes.", - "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuração inválida: somente se pode especificar um valor entre default_server_config, default_server_name, ou default_hs_url.", - "Invalid configuration: no default server specified.": "Configuração inválida: servidor padrão não especificado." + "Unexpected error preparing the app. See console for details.": "Erro inesperado preparando o app. Veja console para detalhes.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuração inválida: só pode especificar um de default_server_config, default_server_name, ou default_hs_url.", + "Invalid configuration: no default server specified.": "Configuração inválida: nenhum servidor default especificado.", + "Unable to load config file: please refresh the page to try again.": "Incapaz de carregar arquivo de config: por favor atualize a página para tentar de novo.", + "Download Completed": "Download Completado", + "Open user settings": "Abrir configurações de usuária(o)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Browser insuportado", + "Please install Chrome, Firefox, or Safari for the best experience.": "Por favor instale Chrome, Firefox, ou Safari para a melhor experiência.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Você pode continuar usando seu browser atual, mas alguma ou toda funcionalidade pode não funcionar e a aparência e sensação do aplicativo pode estar incorretas.", + "I understand the risks and wish to continue": "Eu entendo os riscos e desejo continuar", + "Go to element.io": "Ir para element.io", + "Failed to start": "Falha para iniciar", + "Missing indexeddb worker script!": "Worker script indexeddb faltando!", + "Open": "Abrir", + "Previous/next recently visited room or community": "Anterior/próxima sala ou comunidade visitada recentemente", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "Go to your browser to complete Sign In": "Vá para seu browser para completar Sign In", + "Your Element is misconfigured": "Seu Element está malconfigurado", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Sua configuração de Element contém JSON inválido. Por favor corrija o problema e recarregue a página.", + "Your browser can't run %(brand)s": "Seu browser não consegue rodar %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funcionalidade de browser avançada que não é suportada por seu browser atual.", + "Powered by Matrix": "Powered by Matrix", + "Use %(brand)s on mobile": "Usar %(brand)s em celular", + "Switch to space by number": "Trocar para espaço por número" } diff --git a/src/i18n/strings/ro.json b/src/i18n/strings/ro.json index 2847aabcee..17ed715ebe 100644 --- a/src/i18n/strings/ro.json +++ b/src/i18n/strings/ro.json @@ -1,18 +1,37 @@ { - "Riot Desktop on %(platformName)s": "Riot Desktop pe %(platformName)s", "Unknown device": "Device necunoscut", - "Custom Server Options": "Opțiuni Server Personalizate", "Dismiss": "Închide", "powered by Matrix": "propulsat de Matrix", - "Welcome to Riot.im": "Bun venit pe Riot.im", + "Welcome to Element": "Bun venit pe Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat decentralizat, criptat & colaborare propulsata de [matrix]", - "Chat with Riot Bot": "Discută cu Riot Bot", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s pe %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Trebuie să folosești HTTPS pentru a plasa un apel de tip screen-sharing.", - "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.": "Puteți utiliza opțiunile personalizate ale serverului pentru a vă conecta la alte servere Matrix specificând o adresă URL diferită pentru homeserver. Acest lucru vă permite să utilizați Riot cu un cont Matrix existent pe un alt server de domiciliu.", "Sign In": "Autentificare", - "Create Account": "Înregistare", - "Need help?": "Ai nevoie de ajutor?", + "Create Account": "Crează un cont", "Explore rooms": "Explorează camerele", - "Room Directory": "Lista de camere" + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuratie invalida: se poate specifica doar una dintre default_server_config, default_server_name, or default_hs_url.", + "Invalid JSON": "JSON invalid", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Acest browser nu este suportat", + "Please install Chrome, Firefox, or Safari for the best experience.": "Instalati va rog Chrome, Firefox, or Safari pentru o experienta mai buna.", + "I understand the risks and wish to continue": "Inteleg riscul si doresc sa continui", + "Go to element.io": "Acceseaza element.io", + "Failed to start": "Nu reuseste sa porneasca", + "Your Element is misconfigured": "Element-ul tău este configurat necorespunzător", + "Missing indexeddb worker script!": "Scriptul de lucru indexddb lipsește!", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Poți continua să folosești browser-ul curent, însă aspectul și experiența câtorva sau tuturor funcțiilor poate fi incorectă.", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s folosește funcții avansate de browser ce nu sunt suportate de browser-ul dumneavoastră.", + "Your browser can't run %(brand)s": "Browserul tău nu poate rula %(brand)s", + "Use %(brand)s on mobile": "Folosește %(brand)s pe mobil", + "Powered by Matrix": "Bazat pe Matrix", + "Go to your browser to complete Sign In": "Du-te la browser pentru a finaliza Autentificarea", + "Previous/next recently visited room or community": "Precedenta/următoarea cameră sau comunitate vizitată recent", + "Open user settings": "Deschide setările de utilizator", + "Open": "Deschide", + "Download Completed": "Descărcare Completă", + "Unexpected error preparing the app. See console for details.": "Eroare neașteptată în aplicație. Vezi consola pentru detalii.", + "Unable to load config file: please refresh the page to try again.": "Nu se poate încărca fișierul de configurație: vă rugăm sa reîncărcați pagina și să încercați din nou.", + "The message from the parser is: %(message)s": "Mesajul de la parser este: %(message)s", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Configurația ta Element conține JSON invalid. Vă rugăm sa corectați problema și să reîncărcați pagina.", + "Invalid configuration: no default server specified.": "Configurație invalidă: niciun server implicit specificat." } diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 14cd8955d0..361cd53e9d 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -1,27 +1,37 @@ { - "Custom Server Options": "Параметры другого сервера", - "Dismiss": "Отклонить", + "Dismiss": "Закрыть", "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", "Unknown device": "Неизвестное устройство", "You need to be using HTTPS to place a screen-sharing call.": "Для трансляции рабочего стола требуется использование HTTPS.", - "Welcome to Riot.im": "Добро пожаловать в Riot.im", + "Welcome to Element": "Добро пожаловать в Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализованный, шифрованный чат и совместное рабочее пространство на основе [matrix]", - "Chat with Riot Bot": "Чат с ботом 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, существующей на другом сервере.", - "Sign In": "Войти в систему", - "Create Account": "Создать аккаунт", - "Need help?": "Помочь?", - "Room Directory": "Каталог комнат", - "Explore rooms": "Исследуйте комнаты", + "Sign In": "Войти", + "Create Account": "Создать учётную запись", + "Explore rooms": "Список комнат", "Unexpected error preparing the app. See console for details.": "Неожиданная ошибка при подготовке приложения. Подробности см. в консоли.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Неверная конфигурация: может указывать только один из следующих параметров: default_server_config, default_server_name или default_hs_url.", "Invalid configuration: no default server specified.": "Неверная конфигурация: сервер по умолчанию не указан.", - "Your Riot is misconfigured": "Ваш Riot неправильно настроен", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Ваша конфигурация Riot содержит нерабочий JSON. Пожалуйста исправьте проблему и перезагрузите страницу.", "The message from the parser is: %(message)s": "Сообщение из парсера: %(message)s", "Invalid JSON": "Нерабочий JSON", "Go to your browser to complete Sign In": "Перейдите в браузер для завершения входа", - "Open user settings": "Открыть настройки пользователя" + "Open user settings": "Открыть настройки пользователя", + "Missing indexeddb worker script!": "Отсутствует скрипт воркера для indexeddb!", + "Unable to load config file: please refresh the page to try again.": "Не удалось загрузить файл конфигурации. Попробуйте обновить страницу.", + "Previous/next recently visited room or community": "Предыдущая/следующая недавно посещённая комната или сообщество", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s десктоп (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Неподдерживаемый браузер", + "Please install Chrome, Firefox, or Safari for the best experience.": "Пожалуйста поставьте Chrome, Firefox, или Safari для лучшей совместимости.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Вы можете продолжать пользоваться этим браузером но некоторые возможности будут недоступны и интерфейс может быть отрисован неправильно.", + "I understand the risks and wish to continue": "Я понимаю риск и хочу продолжить", + "Go to element.io": "К element.io", + "Failed to start": "Старт не удался", + "Your Element is misconfigured": "Ваш Element неверно настроен", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Конфигурация Element содержит неверный JSON. Исправьте проблему и обновите страницу.", + "Download Completed": "Загрузка завершена", + "Open": "Открыть", + "Your browser can't run %(brand)s": "Ваш браузер не может запустить %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s использует расширенные возможности, которые не поддерживаются вашим браузером.", + "Powered by Matrix": "На технологии Matrix", + "Use %(brand)s on mobile": "Воспользуйтесь %(brand)s на мобильном телефоне" } diff --git a/src/i18n/strings/si.json b/src/i18n/strings/si.json new file mode 100644 index 0000000000..e1062ecafc --- /dev/null +++ b/src/i18n/strings/si.json @@ -0,0 +1,18 @@ +{ + "Unknown device": "නොදන්නා උපාංගයකි", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Welcome to Element": "ඉලමන්ට් වෙත සාදරයෙන් පිළිගනිමු", + "Open": "විවෘත කරන්න", + "Powered by Matrix": "මැට්‍රික්ස් මඟින් බලගන්වා ඇත", + "Sign In": "පිවිසෙන්න", + "Dismiss": "ඉවතලන්න", + "Explore rooms": "කාමර බලන්න", + "Create Account": "ගිණුමක් සාදන්න", + "Failed to start": "ඇරඹීමට අපොහොසත් විය", + "Go to element.io": "element.io වෙත යන්න", + "Your browser can't run %(brand)s": "ඔබගේ අතිරික්සුවට %(brand)s ධාවනය කළ නොහැකිය", + "Unsupported browser": "සහය නොදක්වන අතිරික්සුව කි", + "Go to your browser to complete Sign In": "පිවිසීම සම්පූර්ණ කිරීමට ඔබගේ අතිරික්සුව වෙත යන්න", + "Download Completed": "බාගැනීම සම්පූර්ණයි", + "Open user settings": "පරිශීලක සැකසුම් විවෘත කරන්න" +} diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json index aa1bf68c4d..c6128e6596 100644 --- a/src/i18n/strings/sk.json +++ b/src/i18n/strings/sk.json @@ -1,24 +1,36 @@ { - "Riot Desktop on %(platformName)s": "Riot Desktop pre %(platformName)s", "Unknown device": "Neznáme zariadenie", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s cez %(browserName)s pre %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Ak si želáte spustiť zdieľanie obrazovky, musíte byť pripojení cez protokol HTTPS.", - "Custom Server Options": "Vlastné možnosti servera", "Dismiss": "Zamietnuť", "powered by Matrix": "poháňa Matrix", - "Welcome to Riot.im": "Víta vás Riot.im", + "Welcome to Element": "Víta vás Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráca na platforme [matrix]", - "Chat with Riot Bot": "Konverzácia s 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.": "Môžete použiť vlastné možnosti servera na prihlásenie sa k ďalším serverom Matrix zadaním URL adresy domovského servera. Toto vám umožní použiť Riot na prihlásenie sa k existujúcemu Matrix účtu na inom domovskom servery.", "Sign In": "Prihlásiť sa", "Create Account": "Vytvoriť účet", - "Need help?": "Potrebujete pomoc?", "Explore rooms": "Preskúmať miestnosti", - "Room Directory": "Adresár miestností", - "Your Riot is misconfigured": "Váš Riot nie je nastavený správne", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Tvoja RIOT konfigurácia obsahuje neplatný JSON. Prosím, oprav daný problém a načítaj stránku znova.", "The message from the parser is: %(message)s": "Správa z parsera je: %(message)s", "Invalid JSON": "Neplatný JSON", "Unexpected error preparing the app. See console for details.": "Neočakávaná chyba počas pripravovania aplikácie. Pre podrobnosti pozri konzolu.", - "Invalid configuration: no default server specified.": "Neplatné nastavenie: nebol určený východiskový server." + "Invalid configuration: no default server specified.": "Neplatné nastavenie: nebol určený východiskový server.", + "Missing indexeddb worker script!": "Chýba indexovaný databázový skript pracovníka!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neplatná konfigurácia: je možné špecifikovať len jednu možnosť z default_server_config, default_server_name, alebo default_hs_url.", + "Unable to load config file: please refresh the page to try again.": "Nemožno načítať konfiguračný súbor: prosím obnovte stránku a skúste to znova.", + "Open user settings": "Otvoriť používateľské nastavenia", + "Previous/next recently visited room or community": "Predchádzajúca/ďalšia nedávno navštívená miestnosť alebo komunita", + "Go to your browser to complete Sign In": "Prejdite do prehliadača a dokončite prihlásenie", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Nepodporovaný prehliadač", + "Please install Chrome, Firefox, or Safari for the best experience.": "Prosím, nainštalujte si Chrome, Firefox alebo Safari pre najlepší zážitok.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Môžete naďalej používať váš súčasný prehliadač, ale niektoré alebo všetky funkcie nemusia fungovať a zážitok z aplikácie nemusí byť optimálny.", + "I understand the risks and wish to continue": "Rozumiem riziku a chcem pokračovať", + "Go to element.io": "Prejsť na element.io", + "Failed to start": "Zapnutie zlyhalo", + "Download Completed": "Preberanie dokončené", + "Open": "Otvoriť", + "Your Element is misconfigured": "Váš Element je nesprávne nastavený", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Vaša konfigurácia Elementu obsahuje nesprávny údaj JSON. Prosím, opravte chybu a obnovte stránku.", + "Your browser can't run %(brand)s": "Váš prehliadač nerozbehne %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s používa pokročilé funkcie prehliadača, ktoré nie sú podporované vaším aktuálnym prehliadačom.", + "Powered by Matrix": "používa protokol Matrix" } diff --git a/src/i18n/strings/sl.json b/src/i18n/strings/sl.json index 70fe0a1a5d..baf39bebb5 100644 --- a/src/i18n/strings/sl.json +++ b/src/i18n/strings/sl.json @@ -1,18 +1,36 @@ { - "Riot Desktop on %(platformName)s": "Namizni Riot za %(platformName)s", "Unknown device": "Neznana naprava", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s s %(browserName)s na %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Za klic s skupno rabo zaslona potrebujete HTTPS.", "powered by Matrix": "poganja Matrix", - "Custom Server Options": "Možnosti strežnika po meri", - "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.": "Možnosti strežnika po meri lahko uporabite za prijavo v druge Matrix strežnike, s tem da podate drug URL domačega strežnika. To vam omogoča, da uporabljate Riot z obstoječim Matrix računom na drugem strežniku.", "Dismiss": "Opusti", - "Welcome to Riot.im": "Dobrodošli v Riot.im", + "Welcome to Element": "Dobrodošli v Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizirano šifrirano sporočanje & sodelovanje s pomočjo [matrix]", "Sign In": "Prijava", "Create Account": "Registracija", - "Need help?": "Potrebujete pomoč?", - "Chat with Riot Bot": "Klepetajte z Riot Botom", "Explore rooms": "Raziščite sobe", - "Room Directory": "Imenik sob" + "Missing indexeddb worker script!": "Manjka skripta za IndexDB!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neveljavna konfiguracija: lahko izberete samo eno izmed default_server_config, default_server_name ali default_hs_url.", + "Invalid configuration: no default server specified.": "Neveljavna konfiguracija: privzeti strežnik ni nastavljen.", + "Your Element is misconfigured": "Vaš Element je napačno nastavljen", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracije vašega Elementa vsebujejo neveljaven JSON. Prosim, popravite napako in znova naložite stran.", + "The message from the parser is: %(message)s": "Sporočilo parserja je: %(message)s", + "Invalid JSON": "Neveljaven JSON", + "Unable to load config file: please refresh the page to try again.": "Ni uspelo naložiti konfiguracijske datoteke: prosim, ponovno naložite stran.", + "Unexpected error preparing the app. See console for details.": "Nepričakovana napaka pri pripravi aplikacije: Za več poglejte konzolo.", + "Download Completed": "Prenos zaključen", + "Open": "Odpri", + "Open user settings": "Odpri uporabniške nastavitve", + "Previous/next recently visited room or community": "Prejšnja/naslednja soba ali skupnost, ki je bila pred kratkim odprta", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s namizje za (%(platformName)s)", + "Go to your browser to complete Sign In": "Nadaljujte s prijavo v spletnem brskalniku", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Powered by Matrix": "Poganja Matrix", + "Unsupported browser": "Nepodprt brskalnik", + "Your browser can't run %(brand)s": "Vaš brskalnik ne more poganjati %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uporablja napredne lastnosti brskalnika, ki jih vaš trenutni brskalnik ne podpira.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Za najboljšo izkušnjo, prosim namestite Chrome, Firefox ali Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Lahko nadaljujete z uporabo vašega trenutnega brskalnika, vendar lahko to privede do manjkajočih funkcionalnosti ali napačnega izgleda aplikacije.", + "I understand the risks and wish to continue": "Razumem riziko in želim vseeno nadaljevati", + "Go to element.io": "Pojdi na element.io", + "Failed to start": "Neuspel zagon" } diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index b7c435a8ac..6926859b99 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -1,27 +1,38 @@ { - "Riot Desktop on %(platformName)s": "Riot Desktop në %(platformName)s", "Unknown device": "Pajisje e panjohur", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s përmes %(browserName)s nën %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Që të bëni një thirrje me ndarje ekrani, duhet të jeni duke përdorur HTTPS-në.", - "Custom Server Options": "Mundësi Vetjake Shërbyesi", "Dismiss": "Mos e merr parasysh", "powered by Matrix": "bazuar në Matrix", - "Welcome to Riot.im": "Mirë se vini te Riot.im", + "Welcome to Element": "Mirë se vini te Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Fjalosje & bashkëpunim të decentralizuar, të fshehtëzuar, bazuar në [matrix]", - "Chat with Riot Bot": "Fjalosuni me Robotin 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.": "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.", "Sign In": "Hyni", "Create Account": "Krijoni Llogari", - "Need help?": "Ju duhet ndihmë?", "Explore rooms": "Eksploroni dhoma", - "Room Directory": "Listë Dhomash", "Unexpected error preparing the app. See console for details.": "Gabim i papritur gjatë përgatitjes së aplikacionit. Për hollësi, shihni konsolën.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Formësim i pavlefshëm: mund të caktohet vetëm një prej default_server_config, default_server_name, ose default_hs_url.", "Invalid configuration: no default server specified.": "Formësim i pavlefshëm: s’është caktuar shërbyes parazgjedhje.", - "Your Riot is misconfigured": "Riot-i juaj është i keqformësuar", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Formësimi juaj i Riot-it përmban JSON. Ju lutemi, ndreqeni problemin dhe ringarkoni faqen.", "The message from the parser is: %(message)s": "Mesazhi prej procesit është: %(message)s", "Invalid JSON": "JSON i pavlefshëm", "Go to your browser to complete Sign In": "Që të plotësoni Hyrjen, kaloni te shfletuesi juaj", - "Open user settings": "Hapni rregullime përdoruesi" + "Open user settings": "Hapni rregullime përdoruesi", + "Unable to load config file: please refresh the page to try again.": "S’arrihet të ngarkohet kartelë formësimesh: ju lutemi, rifreskoni faqen dhe riprovoni.", + "Previous/next recently visited room or community": "Dhomë ose bashkësi e mëparshme/pasuese e vizituar së fundi", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Shfletues i pambuluar", + "Please install Chrome, Firefox, or Safari for the best experience.": "Ju lutemi, për funksionimin më të mirë, instaloni Chrome, Firefox, ose Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Mund të vazhdoni të përdorni shfletuesin tuaj të tanishëm, por disa ose krejt veçoritë mund të mos funksionojnë dhe pamja dhe ndjesitë prej aplikacionit të mos jenë të sakta.", + "I understand the risks and wish to continue": "I kuptoj rreziqet dhe dëshiroj të vazhdoj", + "Go to element.io": "Shko te element.io", + "Failed to start": "S’u arrit të nisej", + "Missing indexeddb worker script!": "Mungon programth worker-i indexeddb-je!", + "Download Completed": "Shkarkim i Plotësuar", + "Open": "Hape", + "Your Element is misconfigured": "Element-i juaj është i keqformësuar", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Formësimi juaj i Element-it përmban JSON të pavlefshëm. Ju lutemi, ndreqeni problemin dhe ringarkoni faqen.", + "Your browser can't run %(brand)s": "Shfletuesi juaj s’mund të xhirojë %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s përdor veçori të thelluara të shfletuesit, të cilat shfletuesi juaj i tanishëm s’i mbulon.", + "Powered by Matrix": "Bazuar në Matrix", + "Use %(brand)s on mobile": "Përdor %(brand)s në celular", + "Switch to space by number": "Kalo te hapësira me numrin" } diff --git a/src/i18n/strings/sr.json b/src/i18n/strings/sr.json index b5a7e2ba3e..5d44f29187 100644 --- a/src/i18n/strings/sr.json +++ b/src/i18n/strings/sr.json @@ -1,25 +1,36 @@ { - "Riot Desktop on %(platformName)s": "Riot стони програм за %(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 да бисте започели позив са дељењем екрана.", - "Custom Server Options": "Прилагођене опције сервера", "Dismiss": "Одбаци", "powered by Matrix": "покреће Матрикс", - "Welcome to Riot.im": "Добродошли у Riot.im", + "Welcome to Element": "Добродошли у Елемент", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализовано, шифровано ћаскање и сарадња коју покреће [matrix]", - "Chat with Riot Bot": "Ћаскајте са Riot ботом", - "Sign In": "Пријава", + "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 са постојећим Матрикс налогом на другом кућном серверу.", - "Your Riot is misconfigured": "Ваш Riot није добро подешен", "Invalid configuration: no default server specified.": "Погрешно подешавање: подразумевани сервер није наведен.", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Ваша Riot конфигурација садржи погрешан JSON. Молим исправите проблем и поново учитајте страну.", "The message from the parser is: %(message)s": "Порука из парсера: %(message)s", "Invalid JSON": "Погрешан JSON", "Unexpected error preparing the app. See console for details.": "Неочекивана грешка приликом припреме апликације. Погледајте конзолу за више детаља.", - "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Погрешно подешавање: можете навести само једну вредност од default_server_config, default_server_name, or default_hs_url." + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Погрешно подешавање: можете навести само једну вредност од default_server_config, default_server_name, или default_hs_url.", + "Missing indexeddb worker script!": "Недостаје скрипта indexeddb радника!", + "Your Element is misconfigured": "Ваша Елемент апликација је лоше подешена", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Подешавање ваше Елемент апликације садржи неисправни „JSON“. Поправите проблем па поново учитајте ову страницу.", + "Unable to load config file: please refresh the page to try again.": "Не могу да учитам датотеку подешавања: освежите страницу и покушајте поново.", + "Download Completed": "Преузимање завршено", + "Open": "Отвори", + "Open user settings": "Отвори корисничке поставке", + "Previous/next recently visited room or community": "Претходно/следеће недавно посећене собе или заједнице", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s радна површ (%(platformName)s)", + "Go to your browser to complete Sign In": "Отворите ваш прегледач за довршавање пријаве", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Неподржан прегледач", + "Your browser can't run %(brand)s": "Ваш прегледач не може покретати %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s користи напредне могућности које нису подржане у вашем тренутном прегледачу.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Инсталирајте Хром, Фајерфокс, или Сафари за најбољи доживљај.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Можете наставити користећи тренутни прегледач али неке могућности можда неће радити и изглед и доживљај апликације може бити лош.", + "I understand the risks and wish to continue": "Разумем ризике и желим да наставим", + "Go to element.io": "Иди на element.io", + "Failed to start": "Неуспех при покретању", + "Powered by Matrix": "Оснажен од стране Матрикса" } diff --git a/src/i18n/strings/sr_Latn.json b/src/i18n/strings/sr_Latn.json index 0f987de4b7..ea4b29af89 100644 --- a/src/i18n/strings/sr_Latn.json +++ b/src/i18n/strings/sr_Latn.json @@ -1,25 +1,16 @@ { - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Vaša Riot konfiguracija sadrži pogrešan JSON. Molim ispravite problem i ponovo učitajte stranu.", "The message from the parser is: %(message)s": "Poruka iz parsera je: %(message)s", "Invalid JSON": "Pogrešan JSON", - "Your Riot is misconfigured": "Vaš Riot nije dobro podešen", "Unexpected error preparing the app. See console for details.": "Neočekivana greška prilikom pripreme aplikacije. Pogledajte konzolu za više detalja.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Pogrešno podešavanje: možete navesti samo jednu vrednost od default_server_config, default_server_name, or default_hs_url.", "Invalid configuration: no default server specified.": "Pogrešno podešavanje: podrazumevani server nije naveden.", - "Riot Desktop on %(platformName)s": "Riot Desktop na %(platformName)s", "Unknown device": "Nepoznat uređaj", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s preko %(browserName)s na %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Treba da koristite HTTPS da bi ste započeli poziv sa deljenjem ekrana.", "powered by Matrix": "pokreće Matriks", - "Custom Server Options": "Prilagođene opcije servera", - "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.": "Možete koristiti prilagođene opcije servera kako bi ste se prijavili na druge Matriks servere tako što ćete navesti različiti URL kućnog servera. Ovo vam omogućava da koristite Riot sa postojećim Matriks nalogom na drugom kućnom serveru.", "Dismiss": "Odbaci", - "Welcome to Riot.im": "Dobrodošli u Riot.im", + "Welcome to Element": "Dobrodošli u Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovano, šifrovano ćaskanje & i saradnja koju pokreće [matrix]", "Sign In": "Prijavite se", "Create Account": "Napravite nalog", - "Need help?": "Potrebna pomoć?", - "Chat with Riot Bot": "Ćaskajte sa Riot botom", - "Explore rooms": "Istražite sobe", - "Room Directory": "Spisak soba" + "Explore rooms": "Istražite sobe" } diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index 1c0bbb5834..6c137bee40 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -1,27 +1,38 @@ { - "Custom Server Options": "Anpassade serverinställningar", "Dismiss": "Avvisa", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s på %(osName)s", "powered by Matrix": "drivs av Matrix", - "Riot Desktop on %(platformName)s": "Riot Desktop på %(platformName)s", "Unknown device": "Okänd enhet", "You need to be using HTTPS to place a screen-sharing call.": "Du måste använda HTTPS för att ringa med skärmdelning.", - "Welcome to Riot.im": "Välkommen till Riot.im", - "Chat with Riot Bot": "Chatta med Riot Bot", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentraliserad, krypterad chatt & samarbetsplattform möjliggjort med [matrix]", - "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.", + "Welcome to Element": "Välkommen till Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentraliserad, krypterad chatt & samarbetsplattform baserad på [matrix]", "Sign In": "Logga in", "Create Account": "Skapa konto", - "Need help?": "Behöver du hjälp?", "Explore rooms": "Utforska rum", - "Room Directory": "Rumslista", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Dina Riot-inställningar innhåller ogiltig JSON. Vänligen uppdatera inställningarna och ladda om sidan.", - "The message from the parser is: %(message)s": "Medelandet från parsern är: %(message)s", + "The message from the parser is: %(message)s": "Meddelandet från parsern är: %(message)s", "Invalid JSON": "Ogiltig JSON", - "Your Riot is misconfigured": "Riot är felkonfigurerat", - "Unexpected error preparing the app. See console for details.": "Oväntat fel vid appstart. Se konsollen för mer information.", - "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ogilitiga inställningar: enbart möjligt att specificera en default_config, default_server, eller default_hs_url.", - "Invalid configuration: no default server specified.": "Ogilitiga inställningar: ingen standardserver specificerad.", + "Unexpected error preparing the app. See console for details.": "Oväntat fel vid appstart. Se konsolen för mer information.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ogiltiga inställningar: det är enbart möjligt att specificera en default_config, default_server, eller default_hs_url.", + "Invalid configuration: no default server specified.": "Ogiltiga inställningar: ingen standardserver specificerad.", "Open user settings": "Öppna användarinställningar", - "Go to your browser to complete Sign In": "Gå till din webbläsare för att slutföra inloggningen" + "Go to your browser to complete Sign In": "Gå till din webbläsare för att slutföra inloggningen", + "Missing indexeddb worker script!": "Saknar IndexedDB-workerscript!", + "Unable to load config file: please refresh the page to try again.": "Kan inte ladda konfigurationsfilen: ladda om sidan för att försöka igen.", + "Previous/next recently visited room or community": "Föregående/nästa nyligen besökt rum eller gemenskap", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s skrivbord (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Webbläsaren stöds ej", + "Please install Chrome, Firefox, or Safari for the best experience.": "Installera Chrome, Firefox, eller Safari för den bästa upplevelsen.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kan fortsätta använda din nuvarande webbläsare, men vissa eller alla funktioner kanske inte fungerar och utseendet och känslan av applikationen kan var felaktig.", + "I understand the risks and wish to continue": "Jag förstår riskerna och vill fortsätta", + "Go to element.io": "Gå till element.io", + "Failed to start": "Misslyckade att starta", + "Your Element is misconfigured": "Din Element är felkonfigurerad", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Din Elementkonfiguration innehåller ogiltig JSON. Vänligen rätta till problemet och ladda om sidan.", + "Download Completed": "Nedladdning slutförd", + "Open": "Öppna", + "Powered by Matrix": "Drivs av Matrix", + "Your browser can't run %(brand)s": "Din webbläsare kan inte köra %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s använder avancerade webbläsarfunktioner som inte stöds av din aktuella webbläsare.", + "Use %(brand)s on mobile": "Använd %(brand)s på mobilen", + "Switch to space by number": "Byt till utrymme med nummer" } diff --git a/src/i18n/strings/szl.json b/src/i18n/strings/szl.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/src/i18n/strings/szl.json @@ -0,0 +1 @@ +{} diff --git a/src/i18n/strings/ta.json b/src/i18n/strings/ta.json index 3ec4b8b8ae..3f250b0dd9 100644 --- a/src/i18n/strings/ta.json +++ b/src/i18n/strings/ta.json @@ -1,25 +1,37 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s -ல் %(browserName)s -ன் வழியாக %(appName)s", - "Custom Server Options": "விருப்பிற்கேற்ற வழங்கி இடப்புகள்", "Dismiss": "நீக்கு", "powered by Matrix": "Matrix-ஆல் ஆனது", - "Unknown device": "தெரியாத கருவி", - "Riot Desktop on %(platformName)s": "%(platformName)s ற்க்கான Riot", - "You need to be using HTTPS to place a screen-sharing call.": "நீங்கள் திரைபகிர்வு அழைப்பை மேற்க்கொள்ள HTTPS-ஐ பயன்படுத்த வேண்டும்.", - "Welcome to Riot.im": "Riot.im -ற்க்கு வரவேற்க்கிறோம்", - "Chat with Riot Bot": "Riot இயங்கியிடம் உரையாடவும்", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "உங்கள் Riot உள்ளமைவில் தவறான JSON உள்ளது. சிக்கலை சரிசெய்து பக்கத்தை மீண்டும் ஏற்றவும்.", + "Unknown device": "அறியப்படாத சாதனம்", + "You need to be using HTTPS to place a screen-sharing call.": "நீங்கள் திரைபகிர்வு அழைப்பை மேற்க்கொள்ள HTTPS ஐ பயன்படுத்த வேண்டும்.", + "Welcome to Element": "எலிமெண்டிற்க்கு வரவேற்க்கிறோம்", "The message from the parser is: %(message)s": "பாகுபடுத்தி அனுப்பிய செய்தி: %(message)s", "Invalid JSON": "தவறான JSON", - "Your Riot is misconfigured": "உங்கள் Riot தவறாக உள்ளமைக்கப்பட்டுள்ளது", - "Unexpected error preparing the app. See console for details.": "பயன்பாட்டைத் தயாரிப்பதில் எதிர்பாராத பிழை. விவரங்களுக்கு console ஐப் பார்க்கவும்.", + "Unexpected error preparing the app. See console for details.": "பயன்பாட்டைத் தயார் செய்வதில் எதிர்பாராத பிழை. விவரங்களுக்கு console ஐப் பார்க்கவும்.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "தவறான உள்ளமைவு: default_server_config, default_server_name அல்லது default_hs_url இல் ஒன்றை மட்டுமே குறிப்பிட முடியும்.", "Invalid configuration: no default server specified.": "தவறான உள்ளமைவு: இயல்புநிலை சேவையகம் குறிப்பிடப்படவில்லை.", - "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 ஐப் பயன்படுத்த உங்களை அனுமதிக்கிறது.", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "[matrix] ஆல் இயக்கப்படும் பரவலாக்கப்பட்ட, மறைகுறியாக்கப்பட்ட அரட்டை & ஒத்துழைப்பு", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "[matrix] மூலம் இயக்கப்படும் பரவலாக்கப்பட்ட, மறைகுறியாக்கப்பட்ட அரட்டை பயன்பாட்டு", "Sign In": "உள்நுழைக", "Create Account": "உங்கள் கணக்கை துவங்குங்கள்", - "Need help?": "உதவி தேவை?", "Explore rooms": "அறைகளை ஆராயுங்கள்", - "Room Directory": "அறை அடைவு" + "Missing indexeddb worker script!": "indexeddb வேலையாளி குறியீட்டை காணவில்லை!", + "Powered by Matrix": "மேட்ரிக்ஸ் மூலம் இயக்கப்படுகிறது", + "Previous/next recently visited room or community": "முந்தைய/அடுத்த சமீபத்தில் பார்வையிட்ட அறை அல்லது சமூகம்", + "Failed to start": "துவங்குவதில் தோல்வி", + "Go to element.io": "element.io க்குச் செல்லவும்", + "I understand the risks and wish to continue": "நான் அபாயங்களைப் புரிந்துகொண்டு தொடர விரும்புகிறேன்", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "உங்கள் தற்போதைய உலாவியை நீங்கள் தொடர்ந்து பயன்படுத்தலாம், ஆனால் சில அல்லது அனைத்து அம்சங்களும் செயல்படாமல் போகலாம் மற்றும் பயன்பாட்டின் தோற்றமும் உணர்வும் தவறாக இருக்கலாம்.", + "Please install Chrome, Firefox, or Safari for the best experience.": "சிறந்த அனுபவத்திற்காக Chrome, Firefox, அல்லது அதை Safari ஐ நிறுவவும்.", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s உங்கள் தற்போதைய உலாவியால் ஆதரிக்கப்படாத மேம்பட்ட உலாவி அம்சங்களைப் பயன்படுத்துகிறது.", + "Your browser can't run %(brand)s": "உங்கள் உலாவியில் %(brand)s ஐ இயக்க முடியாது", + "Unsupported browser": "ஆதரிக்கப்படாத உலாவி", + "Use %(brand)s on mobile": "%(brand)s ஐ திறன்பேசியில் பயன்படுத்தவும்", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Go to your browser to complete Sign In": "உள்நுழைவை முடிவுசெய்ய உங்கள் உலாவிக்குச் செல்லவும்", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s திரைமுகப்பு (%(platformName)s)", + "Open user settings": "பயனர் அமைப்புகளைத் திறக்கவும்", + "Open": "திற", + "Download Completed": "பதிவிறக்கம் முடிவடைந்தது", + "Unable to load config file: please refresh the page to try again.": "கட்டமைப்பு கோப்பை ஏற்ற முடியவில்லை: மீண்டும் முயற்சிக்க பக்கத்தைப் புதுப்பிக்கவும்.", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "உங்கள் எலிமெண்ட் உள்ளமைவில் தவறான JSON உள்ளது. தயவுசெய்து இதை சரிசெய்து பக்கத்தை மீண்டும் ஏற்றவும்.", + "Your Element is misconfigured": "உங்கள் எலிமெண்ட் தவறாக உள்ளமைக்கப்பட்டுள்ளது" } diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json index 16a883b5fc..4afc3b0f6b 100644 --- a/src/i18n/strings/te.json +++ b/src/i18n/strings/te.json @@ -1,10 +1,5 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s %(browserName)s ద్వార %(osName)s కి", - "Custom Server Options": "మలచిన సేవిక ఎంపికలు", "Dismiss": "రద్దుచేసే", - "Riot Desktop on %(platformName)s": "రియట్ రంగస్థలం లో %(platformName)s", - "Welcome to Riot.im": "రిమోట్.ఇం కి స్వగతం", - "Chat with Riot Bot": "రియోట్ బొట్తో మాటామంతి చేయండి", "Unknown device": "తెలుయని పరికరం", "You need to be using HTTPS to place a screen-sharing call.": "తెర ని పంచే కాల్ కి HTTPS అవసరం." } diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index e38fbda9e1..e0c1f9c56b 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -1,20 +1,19 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s ผ่านทาง %(browserName)s บน %(osName)s", "powered by Matrix": "ใช้เทคโนโลยี Matrix", - "Dismiss": "ไม่สนใจ", + "Dismiss": "ปิด", "Unknown device": "อุปกรณ์ที่ไม่รู้จัก", "You need to be using HTTPS to place a screen-sharing call.": "คุณต้องใช้ HTTPS เพื่อเริ่มติดต่อแบบแบ่งปันหน้าจอ", - "Riot Desktop on %(platformName)s": "Riot Desktop บน %(platformName)s", - "Custom Server Options": "กำหนดเซิร์ฟเวอร์เอง", - "Welcome to Riot.im": "ยินดีต้อนรับสู่ Riot.im", - "Chat with Riot Bot": "แชทกับบอท Riot", + "Welcome to Element": "ยินดีต้อนรับสู่ Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "ระบบแชทและประสานงาน ไร้ศูนย์กลางและเข้ารหัสได้ โดยใช้เทคโนโลยีจาก [matrix]", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "การตั้งค่า Riot ของคุณมี JSON ที่ไม่ถูกต้อง โปรดแก้ปัญหาและโหลดเพจอีกครั้ง", - "The message from the parser is: %(message)s": "ข้อความจากparserคือ:%(message)s", + "The message from the parser is: %(message)s": "ข้อความจากตัวแยกวิเคราะห์คือ: %(message)s", "Invalid JSON": "JSON ไม่ถูกต้อง", - "Your Riot is misconfigured": "Riotของคุณตั้งค่าไม่ถูกต้อง", - "Sign In": "เข้าสู่ระบบ", + "Sign In": "ลงชื่อเข้า", "Create Account": "สร้างบัญชี", - "Need help?": "ต้องการความช่วยเหลือ?", - "Explore rooms": "สำรวจห้อง" + "Explore rooms": "สำรวจห้อง", + "Download Completed": "การดาวน์โหลดเสร็จสมบูรณ์", + "Open user settings": "เปิดการตั้งค่าผู้ใช้", + "Go to element.io": "ไปยัง element.io", + "Failed to start": "ไม่สามารถเริ่ม", + "Open": "เปิด", + "Powered by Matrix": "ขับเคลื่อนโดย Matrix" } diff --git a/src/i18n/strings/tlh.json b/src/i18n/strings/tlh.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/src/i18n/strings/tlh.json @@ -0,0 +1 @@ +{} diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index 984ef2cb9f..d45526ec89 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -1,27 +1,38 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s işletim sisteminde %(browserName)s ile %(appName)s", - "Custom Server Options": "Özelleştirilebilir Sunucu Seçenekleri", "Dismiss": "Kapat", "powered by Matrix": "Matrix'den besleniyor", - "Riot Desktop on %(platformName)s": "%(platformName)s platformunda Riot Masaüstü", "Unknown device": "Bilinmeyen aygıt", "You need to be using HTTPS to place a screen-sharing call.": "Ekran paylaşımlı arama yapmak için HTTPS kullanıyor olmalısınız.", - "Welcome to Riot.im": "Riot.im'e hoş geldiniz", + "Welcome to Element": "Element'e hoş geldiniz", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Merkezsiz, şifreli sohbet & işbirliği ile Matrix tarafından desteklenmektedir", - "Chat with Riot Bot": "Riot Bot ile Sohbet Et", - "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.": "Özel sunucu seçenekleri kullanıp farklı bir anamakine URL'si belirleyerek diğer Matrix sunucularına giriş yapabilirsin. Bu Riot'u varolan bir Matrix hesabı ile farklı anamakine de kullanmanı sağlar.", "Sign In": "Giriş Yap", "Create Account": "Hesap Oluştur", - "Need help?": "Yardıma mı ihtiyacın var?", "Explore rooms": "Odaları keşfet", - "Room Directory": "Oda Dizini", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot yapılandırmanız geçersiz JSON ifadesi içermektedir. Lütfen problemi düzeltin ve sayfayı yenileyin.", - "Invalid JSON": "Geçersiz JSON", - "Your Riot is misconfigured": "Riot hatalı ayarlanmış", + "Invalid JSON": "JSON geçersiz", "Unexpected error preparing the app. See console for details.": "Uygulama hazırlanırken beklenmeyen bir hata oldu. Detaylar için konsola bakın.", - "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Geçersiz yapılandırma: default_server_config, default_server_name, yada default_hs_url den sadece birisi seçilebilir.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Hatalı ayarlar: default_server_config, default_server_name ve default_hs_url ayarlarından en fazla biri girilebilir.", "Invalid configuration: no default server specified.": "Geçersiz yapılandırma: varsayılan sunucu seçilmemiş.", "The message from the parser is: %(message)s": "Ayrıştırıcıdan gelen mesaj: %(message)s", "Go to your browser to complete Sign In": "Oturum açmayı tamamlamak için tarayıcınıza gidin", - "Open user settings": "Kullanıcı ayarlarını aç" + "Open user settings": "Kullanıcı ayarlarını aç", + "Your Element is misconfigured": "Element uygulaması hatalı ayarlanmış", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element uygulamasının ayarları hatalı JSON içeriyor. Lütfen hatayı düzeltip sayfayı yenileyin.", + "Unable to load config file: please refresh the page to try again.": "Yapılandırma (config) dosyası yüklenemedi: lütfen yeniden denemek için sayfayı yenileyin.", + "Download Completed": "İndirme Tamamlandı", + "Unsupported browser": "Desteklenmeyen tarayıcı", + "Your browser can't run %(brand)s": "Tarayıcınız %(brand)s uygulamasını çalıştıramıyor", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s, kullandığınız tarayıcı tarafından desteklenmeyen, gelişmiş tarayıcı özellikleri kullanıyor.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Daha iyi bir deneyim için lütfen Chrome, Firefox ya da Safari tarayıcılarından birini yükleyin.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Şu anda kullanmış olduğunuz tarayıcınızı kullanmaya devam edebilirsiniz ancak uygulamanın sunduğu bazı ya da bütün özellikler çalışmayabilir ve deneyiminizi kötü yönde etkileyebilir.", + "I understand the risks and wish to continue": "Riskleri anlıyorum ve devam etmek istiyorum", + "Go to element.io": "element.io adresine git", + "Failed to start": "Başlatılamadı", + "Previous/next recently visited room or community": "Yakında ziyaret edilen önceki/sonraki oda veya topluluk", + "Powered by Matrix": "Gücünü Matrix'ten alır", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName) (%(browserName), %(osName))", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Masaüstü (%(platformName)s)", + "Open": "Aç", + "Missing indexeddb worker script!": "Indexeddb worker kodu eksik!", + "Use %(brand)s on mobile": "Mobilde %(brand)s kullan", + "Switch to space by number": "Sayı ile belirtilen alana geç" } diff --git a/src/i18n/strings/tzm.json b/src/i18n/strings/tzm.json new file mode 100644 index 0000000000..3a4a09f4ed --- /dev/null +++ b/src/i18n/strings/tzm.json @@ -0,0 +1,16 @@ +{ + "Create Account": "senflul amiḍan", + "Download Completed": "Ittusmed wagam", + "Powered by Matrix": "Ittusker s Matrix", + "Sign In": "Kcem", + "Go to your browser to complete Sign In": "Ddu ɣer umessara fad ad tsemded azemmem", + "Welcome to Element": "Azul g Element", + "Go to element.io": "Ddu ɣer element.io", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unknown device": "Allal arussin", + "Open user settings": "Ṛẓem tisɣal n unessemres", + "Dismiss": "Nexxel", + "Open": "Ṛẓem", + "The message from the parser is: %(message)s": "Tuzint n umeslad: %(message)s", + "Use %(brand)s on mobile": "Semres %(brand)s g utilifun" +} diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index 75020c7a4d..f11da7c7ab 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -1,25 +1,38 @@ { - "Custom Server Options": "Власні параметри сервера", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s через %(browserName)s на %(osName)s", "Dismiss": "Відхилити", "powered by Matrix": "працює на Matrix", - "Riot Desktop on %(platformName)s": "Riot Desktop на %(platformName)s", "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]", - "Chat with Riot Bot": "Чат із 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 на іншому сервері.", - "Need help?": "Допомогти?", - "Sign In": "Вхід", - "Create Account": "Створити акаунт", - "Explore rooms": "Дослідити кімнати", - "Room Directory": "Каталог кімнат", + "You need to be using HTTPS to place a screen-sharing call.": "Ви маєте використовувати HTTPS щоб зробити виклик із спільним доступом до екрану.", + "Welcome to Element": "Ласкаво просимо до Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентралізований, зашифрований чат та засіб для співпраці, заснований на [matrix]", + "Sign In": "Увійти", + "Create Account": "Створити обліковий запис", + "Explore rooms": "Каталог кімнат", "Unexpected error preparing the app. See console for details.": "Неочікувана помилка при підготовці програми. Дивіться деталі у виводі консолі.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Невірна конфігурація: можна вказати лише default_server_config, default_server_name або default_hs_url.", "Invalid configuration: no default server specified.": "Невірна конфігурація: не вказано сервер за замовчуванням.", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Ваша конфігурація Riot містить некоректний JSON. Виправте проблему та оновіть сторінку.", - "The message from the parser is: %(message)s": "Повідомлення від парсера: %(message)s", + "The message from the parser is: %(message)s": "Повідомлення від аналізатора : %(message)s", "Invalid JSON": "Хибний JSON", - "Your Riot is misconfigured": "Ваш Riot налаштовано неправильно" + "Unsupported browser": "Непідтримуваний браузер", + "Please install Chrome, Firefox, or Safari for the best experience.": "Для найкращих вражень від користування встановіть, будь ласка, Chrome, Firefox, або Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Ви можете продовжити, користуючись вашим поточним браузером, але деякі функції можуть не працювати, а застосунок може виглядати неправильно.", + "I understand the risks and wish to continue": "Я усвідомлюю ризик і бажаю продовжити", + "Go to element.io": "Перейти на element.io", + "Failed to start": "Запуск не вдався", + "Download Completed": "Завантаження завершено", + "Missing indexeddb worker script!": "Відсутній робочий сценарій IndexedDB!", + "Your Element is misconfigured": "Ваш Element налаштовано неправильно", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Ваша конфігурація Element містить хибний JSON. Виправте проблему та оновіть сторінку.", + "Unable to load config file: please refresh the page to try again.": "Неможливо завантажити файл конфігурації. Оновіть, будь ласка, сторінку, щоб спробувати знову.", + "Open": "Відкрити", + "Open user settings": "Відкрити налаштування користувача", + "Previous/next recently visited room or community": "Попередня/наступна нещодавно відвідана кімната чи спільнота", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "Go to your browser to complete Sign In": "Перейдіть у ваш браузер щоб завершити вхід", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Powered by Matrix": "Працює на Matrix", + "Your browser can't run %(brand)s": "Ваш переглядач неспроможний запустити %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s використовує передові властивості, які ваш браузер не підтримує.", + "Use %(brand)s on mobile": "Користуйтеся %(brand)s на мобільному", + "Switch to space by number": "Перейдіть до простору за номером" } diff --git a/src/i18n/strings/vi.json b/src/i18n/strings/vi.json index c3ac658ad2..6547c6f79f 100644 --- a/src/i18n/strings/vi.json +++ b/src/i18n/strings/vi.json @@ -1,25 +1,37 @@ { - "Riot Desktop on %(platformName)s": "Riot Desktop trên %(platformName)s", "Unknown device": "Thiết bị không được nhận biết", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s với %(browserName)s trên %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Bạn phải sử dụng HTTPS để dùng chức năng chia sẻ màn hình.", - "Custom Server Options": "Các lựa chọn máy chủ", "Dismiss": "Bỏ qua", "powered by Matrix": "tài trợ bởi Matrix", - "Welcome to Riot.im": "Chào mừng tới Riot.im", + "Welcome to Element": "Chào mừng tới Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat phân tán, mã hóa & giao tiếp được tài trợ bởi [matrix]", - "Chat with Riot Bot": "Chat với Riot Bot", "Unexpected error preparing the app. See console for details.": "Lỗi xảy ra trong lúc chuẩn bị app. Xem console log để biết chi tiết.", - "Your Riot is misconfigured": "Hệ thống Riot của bạn bị thiết lập sai", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Thiết lập Riot của bạn chứa JSON không hợp lệ. Bạn hãy sửa lỗi và tải lại trang.", - "The message from the parser is: %(message)s": "Nội dung tin là: %(message)s", + "The message from the parser is: %(message)s": "Thông báo của trình xử lý là: %(message)s", "Invalid JSON": "JSON không hợp lệ", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Thiết lập không hợp lệ: chỉ có thể điền một trong số default_server_config, default_server_name, hoặc default_hs_url.", "Invalid configuration: no default server specified.": "Cấu hình không hợp lệ: máy chủ mặc định không được thiết lập.", - "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.": "Bạn có thể sử dụng lựa chọn máy chủ khác để đăng nhập vào máy chủ Matrix bằng cách nhập đường dẫn máy chủ riêng. Cách này giúp bạn sử dụng Riot với máy chủ riêng của bạn.", "Sign In": "Đăng nhập", "Create Account": "Tạo tài khoản", - "Need help?": "Cần hỗ trợ?", "Explore rooms": "Khám phá phòng chat", - "Room Directory": "Danh mục phòng" + "Download Completed": "Đã hoàn thành tải xuống", + "Go to element.io": "Đi đến element.io", + "I understand the risks and wish to continue": "Tôi hiểu các rủi ro và muốn tiếp tục", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Bạn có thể tiếp tục sử dụng trình duyệt hiện tại của bạn, nhưng một số tính năng có thể không hoạt động và trải nghiệm ứng dụng sẽ không được chính xác.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Vui lòng cài đặt Chrome, Firefox, hoặc Safari để có trải nghiệm tốt nhất.", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s dùng tính năng cao cấp của trình duyệt không được hỗ trợ bởi trình duyệt của bạn.", + "Your browser can't run %(brand)s": "Trình duyệt của bạn không thể chạy %(brand)s", + "Unsupported browser": "Trình duyệt không được hỗ trợ", + "Go to your browser to complete Sign In": "Mở trình duyệt web để hoàn thành đăng nhập", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Máy tính để bàn (%(platformName)s)", + "Previous/next recently visited room or community": "Phòng chat hoặc cộng đồng đã đi đến gần đây trước/tiếp theo", + "Open user settings": "Mở cài đặt người dùng", + "Open": "Mở", + "Unable to load config file: please refresh the page to try again.": "Không thể tải tệp cấu hình: hãy làm mới trang để thử lại.", + "Failed to start": "Khởi động thất bại", + "Use %(brand)s on mobile": "Sử dụng %(brand)s trên di động", + "Powered by Matrix": "Được chạy bởi công nghệ Matrix", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Missing indexeddb worker script!": "Thiếu tệp lệnh làm việc của indexeddb!", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Thiết lập Element của bạn chứa JSON không hợp lệ. Vui lòng sửa vấn đề và tải lại trang.", + "Your Element is misconfigured": "Element của bạn bị thiết lập sai" } diff --git a/src/i18n/strings/vls.json b/src/i18n/strings/vls.json index 4245f7adcb..2a4fdc4c20 100644 --- a/src/i18n/strings/vls.json +++ b/src/i18n/strings/vls.json @@ -2,24 +2,15 @@ "Unexpected error preparing the app. See console for details.": "’t Is een onverwachte foute ipgetreedn by ’t voorbereidn van den app. Bekykt de console vo details.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Oungeldige configuroasje: ku moar één van default_server_config, default_server_name, of default_hs_url ingeevn.", "Invalid configuration: no default server specified.": "Oungeldige configuroasje: geen standoardserver ingegeevn.", - "Riot Desktop on %(platformName)s": "Riot Desktop ip %(platformName)s", "Unknown device": "Ounbekend toestel", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s ip %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Je moet HTTPS gebruukn vo een iproep me schermdeeln te kunn startn.", "powered by Matrix": "meuglik gemakt deur Matrix", - "Custom Server Options": "Angepaste serverinstelliengn", - "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.": "Je kut d’angepaste serverinstelliengn gebruukn vo jen eigen an te meldn by andere Matrix-servers, deur een andere thuusserver-URL in te geevn. Da lat je toe van Riot te gebruukn met e bestoande Matrix-account by een andere thuusserver.", "Dismiss": "Afwyzn", - "Welcome to Riot.im": "Welgekommn by Riot.im", + "Welcome to Element": "Welgekommn by Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Gedecentraliseerd en versleuteld chattn & soamenwerkn meuglik gemakt deur [matrix]", "Sign In": "Anmeldn", "Create Account": "Account anmoakn", - "Need help?": "Hulp nodig?", - "Chat with Riot Bot": "Chattn me Riot-robot", "Explore rooms": "Gesprekkn ountdekkn", - "Room Directory": "Gesprekscataloog", - "Your Riot is misconfigured": "Je Riot is verkeerd geconfigureerd gewist", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Je Riot-configuroasje bevat oungeldigen JSON. Corrigeer ’t probleem en herload ’t blad.", "The message from the parser is: %(message)s": "’t Bericht van de verwerker is: %(message)s", "Invalid JSON": "Oungeldigen JSON", "Go to your browser to complete Sign In": "Goa noa je browser voe d’anmeldienge te voltooin" diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index ca69a34e5e..c11a6e1a31 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -1,25 +1,38 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "在 %(osName)s 下 %(browserName)s 浏览器中运行的 %(appName)s", - "Custom Server Options": "自定义服务器选项", - "Dismiss": "标记为已读", + "Dismiss": "忽略", "powered by Matrix": "由 Matrix 驱动", - "Riot Desktop on %(platformName)s": "在 %(platformName)s 上运行的 Riot 桌面版", "Unknown device": "未知设备", "You need to be using HTTPS to place a screen-sharing call.": "您需要使用 HTTPS 以进行共享屏幕通话。", - "Welcome to Riot.im": "欢迎来到 Riot.im", + "Welcome to Element": "欢迎来到 Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化、加密聊天与协作,由 [matrix] 驱动", - "Chat with Riot Bot": "与 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.": "您可以在自定义服务器选项中通过指定其他主服务器的 URL 来登录其他 Matrix 服务器。 这允许您在不同的主服务器上通过已有的 Matrix 帐户来使用 Riot 。", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "您的 Riot 设置中有无效的 JSON,请将其修复并重新加载此页。", + "Sign In": "登录", + "Create Account": "创建账号", + "Explore rooms": "探索聊天室", "The message from the parser is: %(message)s": "语法分析器的信息:%(message)s", "Invalid JSON": "无效的 JSON", - "Your Riot is misconfigured": "您的 Riot 配置有错误", "Unexpected error preparing the app. See console for details.": "软件准备时出错,详细信息请查看控制台。", - "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "无效的配置:只能设置 default_server_config,default_server_name,或 default_hs_url 中的一个。", - "Invalid configuration: no default server specified.": "无效的配置:没有设置默认服务器。" + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "无效的配置:只能设置 default_server_config,default_server_name 或 default_hs_url 中的一个。", + "Invalid configuration: no default server specified.": "无效的配置:没有设置默认服务器。", + "Missing indexeddb worker script!": "缺少 IndexedDB 辅助脚本!", + "Unable to load config file: please refresh the page to try again.": "无法加载配置文件:请再次刷新页面。", + "Open user settings": "打开用户设置", + "Previous/next recently visited room or community": "上一个 / 下一个最近访问的聊天室或社区", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s 桌面版(%(platformName)s)", + "Go to your browser to complete Sign In": "转到您的浏览器以完成登录", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "不支持的浏览器", + "Please install Chrome, Firefox, or Safari for the best experience.": "请安装 ChromeFirefoxSafari 以获得最佳体验。", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "您可以继续使用您目前的浏览器,但部分或全部的功能可能无法正常工作,应用程序的外观可能也看起来不正确。", + "I understand the risks and wish to continue": "我了解风险并希望继续", + "Go to element.io": "前往 element.io", + "Failed to start": "启动失败", + "Your Element is misconfigured": "Element 配置错误", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element 配置文件中包含无效的 JSON,请改正错误并重新加载页面。", + "Download Completed": "下载成功", + "Open": "打开", + "Your browser can't run %(brand)s": "浏览器无法运行 %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "当前浏览器不支持 %(brand)s 所需的高级浏览器特性。", + "Powered by Matrix": "由 Matrix 驱动", + "Use %(brand)s on mobile": "在移动设备上使用 %(brand)s", + "Switch to space by number": "按数字切换空间" } diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index eb2a6ba511..57cf32a1c1 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -1,27 +1,38 @@ { - "%(appName)s via %(browserName)s on %(osName)s": "在 %(osName)s 的 %(browserName)s 上的 %(appName)s", - "Custom Server Options": "自訂伺服器選項", "Dismiss": "關閉", "powered by Matrix": "由 Matrix 提供", "Unknown device": "未知裝置", "You need to be using HTTPS to place a screen-sharing call.": "你需要使用 HTTPS 來撥打螢幕分享的通話。", - "Riot Desktop on %(platformName)s": "%(platformName)s 的 Riot 桌面版", - "Welcome to Riot.im": "歡迎來到 Riot.im", + "Welcome to Element": "歡迎來到 Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化、保密的聊天與協作,由 [matrix] 提供", - "Chat with Riot Bot": "與 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。", "Sign In": "登入", "Create Account": "建立帳號", - "Need help?": "需要協助?", "Explore rooms": "探索聊天室", - "Room Directory": "聊天室目錄", "Unexpected error preparing the app. See console for details.": "準備應用程式時發生未預期的錯誤。請見主控台以取得更多資訊。", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "無效的設定:只能指定 default_server_config、default_server_name 或 default_hs_url 其中之一。", "Invalid configuration: no default server specified.": "無效設定:未指定預設的伺服器。", - "Your Riot is misconfigured": "您的 Riot 沒有設定好", - "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "您的 Riot 包含無效的 JSON。請修正問題並重新整理頁面。", "The message from the parser is: %(message)s": "從解析器而來的訊息為:%(message)s", "Invalid JSON": "無效的 JSON", "Go to your browser to complete Sign In": "到您的瀏覽器完成登入", - "Open user settings": "開啟使用者設定" + "Open user settings": "開啟使用者設定", + "Missing indexeddb worker script!": "缺少 indexeddb 輔助指令稿!", + "Unable to load config file: please refresh the page to try again.": "無法載入設定檔:請重新整理頁面以再試一次。", + "Previous/next recently visited room or community": "上一個/下一個最近造訪的聊天室或社群", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s 桌面版 (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "不支援的瀏覽器", + "Please install Chrome, Firefox, or Safari for the best experience.": "請安裝 ChromeFirefoxSafari 以取得最佳體驗。", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "您可以繼續使用您目前的瀏覽器,但部份或全部的功能可能會無法運作,而應用程式的外觀與感覺可能也會不正確。", + "I understand the risks and wish to continue": "我了解風險並希望繼續", + "Go to element.io": "到 element.io", + "Failed to start": "啟動失敗", + "Download Completed": "下載完成", + "Open": "開啟", + "Your Element is misconfigured": "Element 配置錯誤", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element 的配置中包含無效JSON,請更正錯誤並重新加載網頁。", + "Your browser can't run %(brand)s": "您的瀏覽器無法執行 %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s 使用了您目前的瀏覽器不支援的進階瀏覽器功能。", + "Powered by Matrix": "由 Matrix 提供", + "Use %(brand)s on mobile": "在行動裝置上使用 %(brand)s", + "Switch to space by number": "依數字切換至空間" } diff --git a/src/vector/app.js b/src/vector/app.tsx similarity index 74% rename from src/vector/app.js rename to src/vector/app.tsx index e087d8c2f5..5003051680 100644 --- a/src/vector/app.js +++ b/src/vector/app.tsx @@ -19,30 +19,28 @@ limitations under the License. */ import React from 'react'; -// add React and ReactPerf to the global namespace, to make them easier to -// access via the console -global.React = React; +// add React and ReactPerf to the global namespace, to make them easier to access via the console +// this incidentally means we can forget our React imports in JSX files without penalty. +window.React = React; import * as sdk from 'matrix-react-sdk'; import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg'; -import * as VectorConferenceHandler from 'matrix-react-sdk/src/VectorConferenceHandler'; -import {_td, newTranslatableError} from 'matrix-react-sdk/src/languageHandler'; +import { _td, newTranslatableError } from 'matrix-react-sdk/src/languageHandler'; import AutoDiscoveryUtils from 'matrix-react-sdk/src/utils/AutoDiscoveryUtils'; -import {AutoDiscovery} from "matrix-js-sdk/src/autodiscovery"; +import { AutoDiscovery } from "matrix-js-sdk/src/autodiscovery"; import * as Lifecycle from "matrix-react-sdk/src/Lifecycle"; - -import {parseQs, parseQsFromFragment} from './url_utils'; - -import {MatrixClientPeg} from 'matrix-react-sdk/src/MatrixClientPeg'; +import type MatrixChatType from "matrix-react-sdk/src/components/structures/MatrixChat"; import SdkConfig from "matrix-react-sdk/src/SdkConfig"; -import CallHandler from 'matrix-react-sdk/src/CallHandler'; +import { parseQs, parseQsFromFragment } from './url_utils'; +import VectorBasePlatform from "./platform/VectorBasePlatform"; +import { createClient } from "matrix-js-sdk/src/matrix"; -let lastLocationHashSet = null; +let lastLocationHashSet: string = null; // Parse the given window.location and return parameters that can be used when calling // MatrixChat.showScreen(screen, params) -function getScreenFromLocation(location) { +function getScreenFromLocation(location: Location) { const fragparts = parseQsFromFragment(location); return { screen: fragparts.location.substring(1), @@ -52,15 +50,15 @@ function getScreenFromLocation(location) { // Here, we do some crude URL analysis to allow // deep-linking. -function routeUrl(location) { +function routeUrl(location: Location) { if (!window.matrixChat) return; console.log("Routing URL ", location.href); const s = getScreenFromLocation(location); - window.matrixChat.showScreen(s.screen, s.params); + (window.matrixChat as MatrixChatType).showScreen(s.screen, s.params); } -function onHashChange(ev) { +function onHashChange(ev: HashChangeEvent) { if (decodeURIComponent(window.location.hash) === lastLocationHashSet) { // we just set this: no need to route it! return; @@ -70,11 +68,16 @@ function onHashChange(ev) { // This will be called whenever the SDK changes screens, // so a web page can update the URL bar appropriately. -function onNewScreen(screen) { - console.log("newscreen "+screen); +function onNewScreen(screen: string, replaceLast = false) { + console.log("newscreen " + screen); const hash = '#/' + screen; lastLocationHashSet = hash; - window.location.hash = hash; + + if (replaceLast) { + window.location.replace(hash); + } else { + window.location.assign(hash); + } } // We use this to work out what URL the SDK should @@ -85,11 +88,11 @@ function onNewScreen(screen) { // // If we're in electron, we should never pass through a file:// URL otherwise // the identity server will try to 302 the browser to it, which breaks horribly. -// so in that instance, hardcode to use riot.im/app for now instead. -function makeRegistrationUrl(params) { +// so in that instance, hardcode to use app.element.io for now instead. +function makeRegistrationUrl(params: object) { let url; if (window.location.protocol === "vector:") { - url = 'https://riot.im/app/#/register'; + url = 'https://app.element.io/#/register'; } else { url = ( window.location.protocol + '//' + @@ -116,27 +119,15 @@ function onTokenLoginCompleted() { // if we did a token login, we're now left with the token, hs and is // url as query params in the url; a little nasty but let's redirect to // clear them. - const parsedUrl = new URL(window.location); - parsedUrl.search = ""; - const formatted = parsedUrl.toString(); - console.log("Redirecting to " + formatted + " to drop loginToken from queryparams"); - window.location.href = formatted; + const url = new URL(window.location.href); + + url.searchParams.delete("loginToken"); + + console.log(`Redirecting to ${url.href} to drop loginToken from queryparams`); + window.history.replaceState(null, "", url.href); } export async function loadApp(fragParams: {}) { - // XXX: the way we pass the path to the worker script from webpack via html in body's dataset is a hack - // but alternatives seem to require changing the interface to passing Workers to js-sdk - const vectorIndexeddbWorkerScript = document.body.dataset.vectorIndexeddbWorkerScript; - if (!vectorIndexeddbWorkerScript) { - // If this is missing, something has probably gone wrong with - // the bundling. The js-sdk will just fall back to accessing - // indexeddb directly with no worker script, but we want to - // make sure the indexeddb script is present, so fail hard. - throw newTranslatableError(_td("Missing indexeddb worker script!")); - } - MatrixClientPeg.setIndexedDbWorkerScript(vectorIndexeddbWorkerScript); - CallHandler.setConferenceHandler(VectorConferenceHandler); - window.addEventListener('hashchange', onHashChange); const platform = PlatformPeg.get(); @@ -146,15 +137,34 @@ export async function loadApp(fragParams: {}) { const urlWithoutQuery = window.location.protocol + '//' + window.location.host + window.location.pathname; console.log("Vector starting at " + urlWithoutQuery); - platform.startUpdater(); + (platform as VectorBasePlatform).startUpdater(); // Don't bother loading the app until the config is verified const config = await verifyServerConfig(); + + // Before we continue, let's see if we're supposed to do an SSO redirect + const [userId] = await Lifecycle.getStoredSessionOwner(); + const hasPossibleToken = !!userId; + const isReturningFromSso = !!params.loginToken; + const autoRedirect = config['sso_immediate_redirect'] === true; + if (!hasPossibleToken && !isReturningFromSso && autoRedirect) { + console.log("Bypassing app load to redirect to SSO"); + const tempCli = createClient({ + baseUrl: config['validated_server_config'].hsUrl, + idBaseUrl: config['validated_server_config'].isUrl, + }); + PlatformPeg.get().startSingleSignOn(tempCli, "sso", `/${getScreenFromLocation(window.location).screen}`); + + // We return here because startSingleSignOn() will asynchronously redirect us. We don't + // care to wait for it, and don't want to show any UI while we wait (not even half a welcome + // page). As such, just don't even bother loading the MatrixChat component. + return; + } + const MatrixChat = sdk.getComponent('structures.MatrixChat'); return { resolve({}); } } - reject({err: err, response: response}); + reject({ err: err, response: response }); return; } @@ -65,7 +65,7 @@ function getConfig(configJsonFilename: string): Promise<{}> { // loading from the filesystem (see above). resolve(JSON.parse(body)); } catch (e) { - reject({err: e}); + reject({ err: e }); } }, ); diff --git a/src/vector/index.html b/src/vector/index.html index 85b6a1bd86..1a242a80ed 100644 --- a/src/vector/index.html +++ b/src/vector/index.html @@ -2,26 +2,27 @@ - Riot - - - - - - - - - + Element + + + + + + + + + - - + + + - + - + <% for (var i=0; i < htmlWebpackPlugin.files.css.length; i++) { @@ -48,14 +48,34 @@ <% } } %> + + <% for (var i=0; i < htmlWebpackPlugin.tags.headTags.length; i++) { + var tag = htmlWebpackPlugin.tags.headTags[i]; + var path = tag.attributes && tag.attributes.href; + if (path.indexOf("Inter") !== -1) { %> + + <% } + } %> + - - -
- + " + > + +
+ + + + + + + + +